diff --git a/asm/non_matchings/textures_sprites/func_8007C660.s b/asm/non_matchings/textures_sprites/func_8007C660.s index b584380d..d23b23a2 100644 --- a/asm/non_matchings/textures_sprites/func_8007C660.s +++ b/asm/non_matchings/textures_sprites/func_8007C660.s @@ -20,9 +20,9 @@ glabel func_8007C660 /* 07D2A0 8007C6A0 3C138012 */ lui $s3, %hi(D_80126370) # $s3, 0x8012 /* 07D2A4 8007C6A4 26736370 */ addiu $s3, %lo(D_80126370) # addiu $s3, $s3, 0x6370 /* 07D2A8 8007C6A8 8E780000 */ lw $t8, ($s3) -/* 07D2AC 8007C6AC 3C108012 */ lui $s0, %hi(D_80126338) # $s0, 0x8012 +/* 07D2AC 8007C6AC 3C108012 */ lui $s0, %hi(gTextureAssetID) # $s0, 0x8012 /* 07D2B0 8007C6B0 17000059 */ bnez $t8, .L8007C818 -/* 07D2B4 8007C6B4 26106338 */ addiu $s0, %lo(D_80126338) # addiu $s0, $s0, 0x6338 +/* 07D2B4 8007C6B4 26106338 */ addiu $s0, %lo(gTextureAssetID) # addiu $s0, $s0, 0x6338 /* 07D2B8 8007C6B8 8E040000 */ lw $a0, ($s0) /* 07D2BC 8007C6BC 3C05FF00 */ lui $a1, (0xFF00FFFF >> 16) # lui $a1, 0xff00 /* 07D2C0 8007C6C0 0C01C327 */ jal allocate_from_main_pool_safe diff --git a/asm/non_matchings/textures_sprites/get_texture_size_from_id.s b/asm/non_matchings/textures_sprites/get_texture_size_from_id.s index eb6603ff..f5b91820 100644 --- a/asm/non_matchings/textures_sprites/get_texture_size_from_id.s +++ b/asm/non_matchings/textures_sprites/get_texture_size_from_id.s @@ -13,21 +13,21 @@ glabel get_texture_size_from_id /* 07D1A8 8007C5A8 03202025 */ move $a0, $t9 .L8007C5AC: /* 07D1AC 8007C5AC 00021880 */ sll $v1, $v0, 2 -/* 07D1B0 8007C5B0 3C088012 */ lui $t0, %hi(D_80126338) # $t0, 0x8012 +/* 07D1B0 8007C5B0 3C088012 */ lui $t0, %hi(gTextureAssetID) # $t0, 0x8012 /* 07D1B4 8007C5B4 01034021 */ addu $t0, $t0, $v1 -/* 07D1B8 8007C5B8 8D086338 */ lw $t0, %lo(D_80126338)($t0) +/* 07D1B8 8007C5B8 8D086338 */ lw $t0, %lo(gTextureAssetID)($t0) /* 07D1BC 8007C5BC 00000000 */ nop /* 07D1C0 8007C5C0 0088082A */ slt $at, $a0, $t0 /* 07D1C4 8007C5C4 10200003 */ beqz $at, .L8007C5D4 /* 07D1C8 8007C5C8 00000000 */ nop /* 07D1CC 8007C5CC 04810003 */ bgez $a0, .L8007C5DC -/* 07D1D0 8007C5D0 3C098012 */ lui $t1, %hi(D_80126320) # $t1, 0x8012 +/* 07D1D0 8007C5D0 3C098012 */ lui $t1, %hi(gTextureAssetTable) # $t1, 0x8012 .L8007C5D4: /* 07D1D4 8007C5D4 1000001E */ b .L8007C650 /* 07D1D8 8007C5D8 00001025 */ move $v0, $zero .L8007C5DC: /* 07D1DC 8007C5DC 01234821 */ addu $t1, $t1, $v1 -/* 07D1E0 8007C5E0 8D296320 */ lw $t1, %lo(D_80126320)($t1) +/* 07D1E0 8007C5E0 8D296320 */ lw $t1, %lo(gTextureAssetTable)($t1) /* 07D1E4 8007C5E4 00045080 */ sll $t2, $a0, 2 /* 07D1E8 8007C5E8 3C058012 */ lui $a1, %hi(gTempTextureHeader) # $a1, 0x8012 /* 07D1EC 8007C5EC 8CA5636C */ lw $a1, %lo(gTempTextureHeader)($a1) diff --git a/asm/non_matchings/textures_sprites/load_texture.s b/asm/non_matchings/textures_sprites/load_texture.s index f59504ed..885fb82c 100644 --- a/asm/non_matchings/textures_sprites/load_texture.s +++ b/asm/non_matchings/textures_sprites/load_texture.s @@ -18,9 +18,9 @@ glabel load_texture /* 07BAB4 8007AEB4 24130002 */ li $s3, 2 .L8007AEB8: /* 07BAB8 8007AEB8 00024880 */ sll $t1, $v0, 2 -/* 07BABC 8007AEBC 3C188012 */ lui $t8, %hi(D_80126338) # $t8, 0x8012 +/* 07BABC 8007AEBC 3C188012 */ lui $t8, %hi(gTextureAssetID) # $t8, 0x8012 /* 07BAC0 8007AEC0 0309C021 */ addu $t8, $t8, $t1 -/* 07BAC4 8007AEC4 8F186338 */ lw $t8, %lo(D_80126338)($t8) +/* 07BAC4 8007AEC4 8F186338 */ lw $t8, %lo(gTextureAssetID)($t8) /* 07BAC8 8007AEC8 3C028012 */ lui $v0, %hi(gNumberOfLoadedTextures) # $v0, 0x8012 /* 07BACC 8007AECC 0118082A */ slt $at, $t0, $t8 /* 07BAD0 8007AED0 10200003 */ beqz $at, .L8007AEE0 @@ -54,9 +54,9 @@ glabel load_texture /* 07BB30 8007AF30 1420FFF3 */ bnez $at, .L8007AF00 /* 07BB34 8007AF34 001150C0 */ sll $t2, $s1, 3 .L8007AF38: -/* 07BB38 8007AF38 3C0E8012 */ lui $t6, %hi(D_80126320) # $t6, 0x8012 +/* 07BB38 8007AF38 3C0E8012 */ lui $t6, %hi(gTextureAssetTable) # $t6, 0x8012 /* 07BB3C 8007AF3C 01C97021 */ addu $t6, $t6, $t1 -/* 07BB40 8007AF40 8DCE6320 */ lw $t6, %lo(D_80126320)($t6) +/* 07BB40 8007AF40 8DCE6320 */ lw $t6, %lo(gTextureAssetTable)($t6) /* 07BB44 8007AF44 00087880 */ sll $t7, $t0, 2 /* 07BB48 8007AF48 01CF1021 */ addu $v0, $t6, $t7 /* 07BB4C 8007AF4C 8C520000 */ lw $s2, ($v0) diff --git a/include/libc/math.h b/include/libc/math.h index 1586b056..1c53de6b 100644 --- a/include/libc/math.h +++ b/include/libc/math.h @@ -3,11 +3,8 @@ #define M_PI 3.14159265358979323846 -float sinf(float); //official name: fsin -double sin(double); -float cosf(float); -double cos(double); - -float sqrtf(float); +f32 sinf(f32 x); //official name: fsin +f32 cosf(f32 x); +f32 sqrtf(f32 x); #endif diff --git a/lib/asm/non_matchings/unknown_0D3020/_Litob.s b/lib/asm/non_matchings/unknown_0D3020/_Litob.s deleted file mode 100644 index d0c575f0..00000000 --- a/lib/asm/non_matchings/unknown_0D3020/_Litob.s +++ /dev/null @@ -1,189 +0,0 @@ -glabel _Litob -/* 0D7300 800D6700 27BDFF70 */ addiu $sp, $sp, -0x90 -/* 0D7304 800D6704 AFB10020 */ sw $s1, 0x20($sp) -/* 0D7308 800D6708 30A200FF */ andi $v0, $a1, 0xff -/* 0D730C 800D670C 24030058 */ li $v1, 88 -/* 0D7310 800D6710 00808825 */ move $s1, $a0 -/* 0D7314 800D6714 AFBF002C */ sw $ra, 0x2c($sp) -/* 0D7318 800D6718 AFB30028 */ sw $s3, 0x28($sp) -/* 0D731C 800D671C AFB20024 */ sw $s2, 0x24($sp) -/* 0D7320 800D6720 AFB0001C */ sw $s0, 0x1c($sp) -/* 0D7324 800D6724 14620004 */ bne $v1, $v0, .L800D6738 -/* 0D7328 800D6728 AFA50094 */ sw $a1, 0x94($sp) -/* 0D732C 800D672C 3C13800E */ lui $s3, %hi(udigs) # $s3, 0x800e -/* 0D7330 800D6730 10000003 */ b .L800D6740 -/* 0D7334 800D6734 26734934 */ addiu $s3, %lo(udigs) # addiu $s3, $s3, 0x4934 -.L800D6738: -/* 0D7338 800D6738 3C13800E */ lui $s3, %hi(ldigs) # $s3, 0x800e -/* 0D733C 800D673C 26734920 */ addiu $s3, %lo(ldigs) # addiu $s3, $s3, 0x4920 -.L800D6740: -/* 0D7340 800D6740 2401006F */ li $at, 111 -/* 0D7344 800D6744 14410003 */ bne $v0, $at, .L800D6754 -/* 0D7348 800D6748 24100018 */ li $s0, 24 -/* 0D734C 800D674C 10000009 */ b .L800D6774 -/* 0D7350 800D6750 24090008 */ li $t1, 8 -.L800D6754: -/* 0D7354 800D6754 24010078 */ li $at, 120 -/* 0D7358 800D6758 10410005 */ beq $v0, $at, .L800D6770 -/* 0D735C 800D675C 24080010 */ li $t0, 16 -/* 0D7360 800D6760 10620003 */ beq $v1, $v0, .L800D6770 -/* 0D7364 800D6764 00000000 */ nop -/* 0D7368 800D6768 10000001 */ b .L800D6770 -/* 0D736C 800D676C 2408000A */ li $t0, 10 -.L800D6770: -/* 0D7370 800D6770 01004825 */ move $t1, $t0 -.L800D6774: -/* 0D7374 800D6774 8E380000 */ lw $t8, ($s1) -/* 0D7378 800D6778 8E390004 */ lw $t9, 4($s1) -/* 0D737C 800D677C 24010064 */ li $at, 100 -/* 0D7380 800D6780 AFB80060 */ sw $t8, 0x60($sp) -/* 0D7384 800D6784 AFB80040 */ sw $t8, 0x40($sp) -/* 0D7388 800D6788 AFB90044 */ sw $t9, 0x44($sp) -/* 0D738C 800D678C 10410004 */ beq $v0, $at, .L800D67A0 -/* 0D7390 800D6790 AFB90064 */ sw $t9, 0x64($sp) -/* 0D7394 800D6794 24010069 */ li $at, 105 -/* 0D7398 800D6798 54410010 */ bnel $v0, $at, .L800D67DC -/* 0D739C 800D679C 8FAA0060 */ lw $t2, 0x60($sp) -.L800D67A0: -/* 0D73A0 800D67A0 8FAC0040 */ lw $t4, 0x40($sp) -/* 0D73A4 800D67A4 5D80000D */ bgtzl $t4, .L800D67DC -/* 0D73A8 800D67A8 8FAA0060 */ lw $t2, 0x60($sp) -/* 0D73AC 800D67AC 05800003 */ bltz $t4, .L800D67BC -/* 0D73B0 800D67B0 8FAE0060 */ lw $t6, 0x60($sp) -/* 0D73B4 800D67B4 10000009 */ b .L800D67DC -/* 0D73B8 800D67B8 8FAA0060 */ lw $t2, 0x60($sp) -.L800D67BC: -/* 0D73BC 800D67BC 8FAF0064 */ lw $t7, 0x64($sp) -/* 0D73C0 800D67C0 01C0C027 */ not $t8, $t6 -/* 0D73C4 800D67C4 2DE10001 */ sltiu $at, $t7, 1 -/* 0D73C8 800D67C8 0301C021 */ addu $t8, $t8, $at -/* 0D73CC 800D67CC 000FC823 */ negu $t9, $t7 -/* 0D73D0 800D67D0 AFB90064 */ sw $t9, 0x64($sp) -/* 0D73D4 800D67D4 AFB80060 */ sw $t8, 0x60($sp) -/* 0D73D8 800D67D8 8FAA0060 */ lw $t2, 0x60($sp) -.L800D67DC: -/* 0D73DC 800D67DC 8FAB0064 */ lw $t3, 0x64($sp) -/* 0D73E0 800D67E0 24080017 */ li $t0, 23 -/* 0D73E4 800D67E4 15400006 */ bnez $t2, .L800D6800 -/* 0D73E8 800D67E8 8FA40060 */ lw $a0, 0x60($sp) -/* 0D73EC 800D67EC 55600005 */ bnezl $t3, .L800D6804 -/* 0D73F0 800D67F0 24100017 */ li $s0, 23 -/* 0D73F4 800D67F4 8E2C0024 */ lw $t4, 0x24($s1) -/* 0D73F8 800D67F8 51800010 */ beql $t4, $zero, .L800D683C -/* 0D73FC 800D67FC 27B20078 */ addiu $s2, $sp, 0x78 -.L800D6800: -/* 0D7400 800D6800 24100017 */ li $s0, 23 -.L800D6804: -/* 0D7404 800D6804 8FA50064 */ lw $a1, 0x64($sp) -/* 0D7408 800D6808 01203825 */ move $a3, $t1 -/* 0D740C 800D680C 000937C3 */ sra $a2, $t1, 0x1f -/* 0D7410 800D6810 AFA8004C */ sw $t0, 0x4c($sp) -/* 0D7414 800D6814 0C033AA3 */ jal __ull_rem -/* 0D7418 800D6818 AFA90070 */ sw $t1, 0x70($sp) -/* 0D741C 800D681C 8FA8004C */ lw $t0, 0x4c($sp) -/* 0D7420 800D6820 00737021 */ addu $t6, $v1, $s3 -/* 0D7424 800D6824 91CF0000 */ lbu $t7, ($t6) -/* 0D7428 800D6828 27B20078 */ addiu $s2, $sp, 0x78 -/* 0D742C 800D682C 8FA90070 */ lw $t1, 0x70($sp) -/* 0D7430 800D6830 0248C021 */ addu $t8, $s2, $t0 -/* 0D7434 800D6834 A30F0000 */ sb $t7, ($t8) -/* 0D7438 800D6838 27B20078 */ addiu $s2, $sp, 0x78 -.L800D683C: -/* 0D743C 800D683C 8FA40060 */ lw $a0, 0x60($sp) -/* 0D7440 800D6840 8FA50064 */ lw $a1, 0x64($sp) -/* 0D7444 800D6844 01203825 */ move $a3, $t1 -/* 0D7448 800D6848 000937C3 */ sra $a2, $t1, 0x1f -/* 0D744C 800D684C 0C033AB2 */ jal __ull_div -/* 0D7450 800D6850 AFA90070 */ sw $t1, 0x70($sp) -/* 0D7454 800D6854 8FA90070 */ lw $t1, 0x70($sp) -/* 0D7458 800D6858 AE230004 */ sw $v1, 4($s1) -/* 0D745C 800D685C 0440002B */ bltz $v0, .L800D690C -/* 0D7460 800D6860 AE220000 */ sw $v0, ($s1) -/* 0D7464 800D6864 1C400003 */ bgtz $v0, .L800D6874 -/* 0D7468 800D6868 00000000 */ nop -/* 0D746C 800D686C 50600028 */ beql $v1, $zero, .L800D6910 -/* 0D7470 800D6870 240C0018 */ li $t4, 24 -.L800D6874: -/* 0D7474 800D6874 1A000025 */ blez $s0, .L800D690C -/* 0D7478 800D6878 000967C3 */ sra $t4, $t1, 0x1f -/* 0D747C 800D687C 8E2A0000 */ lw $t2, ($s1) -/* 0D7480 800D6880 8E2B0004 */ lw $t3, 4($s1) -/* 0D7484 800D6884 AFA9003C */ sw $t1, 0x3c($sp) -/* 0D7488 800D6888 AFAC0038 */ sw $t4, 0x38($sp) -/* 0D748C 800D688C AFAA0040 */ sw $t2, 0x40($sp) -/* 0D7490 800D6890 AFAB0044 */ sw $t3, 0x44($sp) -/* 0D7494 800D6894 8FAE0038 */ lw $t6, 0x38($sp) -.L800D6898: -/* 0D7498 800D6898 8FAF003C */ lw $t7, 0x3c($sp) -/* 0D749C 800D689C 27A40050 */ addiu $a0, $sp, 0x50 -/* 0D74A0 800D68A0 8FA60040 */ lw $a2, 0x40($sp) -/* 0D74A4 800D68A4 8FA70044 */ lw $a3, 0x44($sp) -/* 0D74A8 800D68A8 AFAE0010 */ sw $t6, 0x10($sp) -/* 0D74AC 800D68AC 0C035D1C */ jal lldiv -/* 0D74B0 800D68B0 AFAF0014 */ sw $t7, 0x14($sp) -/* 0D74B4 800D68B4 8FB80050 */ lw $t8, 0x50($sp) -/* 0D74B8 800D68B8 8FB90054 */ lw $t9, 0x54($sp) -/* 0D74BC 800D68BC 2604FFFF */ addiu $a0, $s0, -1 -/* 0D74C0 800D68C0 AE380000 */ sw $t8, ($s1) -/* 0D74C4 800D68C4 AE390004 */ sw $t9, 4($s1) -/* 0D74C8 800D68C8 8FAB005C */ lw $t3, 0x5c($sp) -/* 0D74CC 800D68CC 02447821 */ addu $t7, $s2, $a0 -/* 0D74D0 800D68D0 00808025 */ move $s0, $a0 -/* 0D74D4 800D68D4 01736821 */ addu $t5, $t3, $s3 -/* 0D74D8 800D68D8 91AE0000 */ lbu $t6, ($t5) -/* 0D74DC 800D68DC A1EE0000 */ sb $t6, ($t7) -/* 0D74E0 800D68E0 8E380000 */ lw $t8, ($s1) -/* 0D74E4 800D68E4 8E390004 */ lw $t9, 4($s1) -/* 0D74E8 800D68E8 AFB80040 */ sw $t8, 0x40($sp) -/* 0D74EC 800D68EC 07000007 */ bltz $t8, .L800D690C -/* 0D74F0 800D68F0 AFB90044 */ sw $t9, 0x44($sp) -/* 0D74F4 800D68F4 1F000003 */ bgtz $t8, .L800D6904 -/* 0D74F8 800D68F8 00000000 */ nop -/* 0D74FC 800D68FC 53200004 */ beql $t9, $zero, .L800D6910 -/* 0D7500 800D6900 240C0018 */ li $t4, 24 -.L800D6904: -/* 0D7504 800D6904 5E00FFE4 */ bgtzl $s0, .L800D6898 -/* 0D7508 800D6908 8FAE0038 */ lw $t6, 0x38($sp) -.L800D690C: -/* 0D750C 800D690C 240C0018 */ li $t4, 24 -.L800D6910: -/* 0D7510 800D6910 01903023 */ subu $a2, $t4, $s0 -/* 0D7514 800D6914 AE260014 */ sw $a2, 0x14($s1) -/* 0D7518 800D6918 8E240008 */ lw $a0, 8($s1) -/* 0D751C 800D691C 0C03385C */ jal memcpy -/* 0D7520 800D6920 02502821 */ addu $a1, $s2, $s0 -/* 0D7524 800D6924 8E250014 */ lw $a1, 0x14($s1) -/* 0D7528 800D6928 8E240024 */ lw $a0, 0x24($s1) -/* 0D752C 800D692C 00A4082A */ slt $at, $a1, $a0 -/* 0D7530 800D6930 10200002 */ beqz $at, .L800D693C -/* 0D7534 800D6934 00856823 */ subu $t5, $a0, $a1 -/* 0D7538 800D6938 AE2D0010 */ sw $t5, 0x10($s1) -.L800D693C: -/* 0D753C 800D693C 04830010 */ bgezl $a0, .L800D6980 -/* 0D7540 800D6940 8FBF002C */ lw $ra, 0x2c($sp) -/* 0D7544 800D6944 8E2E0030 */ lw $t6, 0x30($s1) -/* 0D7548 800D6948 24010010 */ li $at, 16 -/* 0D754C 800D694C 31CF0014 */ andi $t7, $t6, 0x14 -/* 0D7550 800D6950 55E1000B */ bnel $t7, $at, .L800D6980 -/* 0D7554 800D6954 8FBF002C */ lw $ra, 0x2c($sp) -/* 0D7558 800D6958 8E380028 */ lw $t8, 0x28($s1) -/* 0D755C 800D695C 8E39000C */ lw $t9, 0xc($s1) -/* 0D7560 800D6960 8E220010 */ lw $v0, 0x10($s1) -/* 0D7564 800D6964 03195023 */ subu $t2, $t8, $t9 -/* 0D7568 800D6968 01425823 */ subu $t3, $t2, $v0 -/* 0D756C 800D696C 01658023 */ subu $s0, $t3, $a1 -/* 0D7570 800D6970 1A000002 */ blez $s0, .L800D697C -/* 0D7574 800D6974 00506021 */ addu $t4, $v0, $s0 -/* 0D7578 800D6978 AE2C0010 */ sw $t4, 0x10($s1) -.L800D697C: -/* 0D757C 800D697C 8FBF002C */ lw $ra, 0x2c($sp) -.L800D6980: -/* 0D7580 800D6980 8FB0001C */ lw $s0, 0x1c($sp) -/* 0D7584 800D6984 8FB10020 */ lw $s1, 0x20($sp) -/* 0D7588 800D6988 8FB20024 */ lw $s2, 0x24($sp) -/* 0D758C 800D698C 8FB30028 */ lw $s3, 0x28($sp) -/* 0D7590 800D6990 03E00008 */ jr $ra -/* 0D7594 800D6994 27BD0090 */ addiu $sp, $sp, 0x90 - -/* 0D7598 800D6998 00000000 */ nop -/* 0D759C 800D699C 00000000 */ nop diff --git a/lib/asm/non_matchings/unknown_0D3020/cosf.s b/lib/asm/non_matchings/unknown_0D3020/cosf.s deleted file mode 100644 index 8c999e23..00000000 --- a/lib/asm/non_matchings/unknown_0D3020/cosf.s +++ /dev/null @@ -1,103 +0,0 @@ -glabel cosf -/* 0D56B0 800D4AB0 E7AC0000 */ swc1 $f12, ($sp) -/* 0D56B4 800D4AB4 8FA20000 */ lw $v0, ($sp) -/* 0D56B8 800D4AB8 C7A60000 */ lwc1 $f6, ($sp) -/* 0D56BC 800D4ABC C7AA0000 */ lwc1 $f10, ($sp) -/* 0D56C0 800D4AC0 00027583 */ sra $t6, $v0, 0x16 -/* 0D56C4 800D4AC4 31CF01FF */ andi $t7, $t6, 0x1ff -/* 0D56C8 800D4AC8 29E10136 */ slti $at, $t7, 0x136 -/* 0D56CC 800D4ACC 50200049 */ beql $at, $zero, .L800D4BF4 -/* 0D56D0 800D4AD0 460A5032 */ c.eq.s $f10, $f10 -/* 0D56D4 800D4AD4 44802000 */ mtc1 $zero, $f4 -/* 0D56D8 800D4AD8 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -/* 0D56DC 800D4ADC 44819800 */ mtc1 $at, $f19 -/* 0D56E0 800D4AE0 4606203C */ c.lt.s $f4, $f6 -/* 0D56E4 800D4AE4 C7A00000 */ lwc1 $f0, ($sp) -/* 0D56E8 800D4AE8 3C01800F */ lui $at, %hi(rpi_cosf) # $at, 0x800f -/* 0D56EC 800D4AEC 45020004 */ bc1fl .L800D4B00 -/* 0D56F0 800D4AF0 46000007 */ neg.s $f0, $f0 -/* 0D56F4 800D4AF4 10000002 */ b .L800D4B00 -/* 0D56F8 800D4AF8 46003006 */ mov.s $f0, $f6 -/* 0D56FC 800D4AFC 46000007 */ neg.s $f0, $f0 -.L800D4B00: -/* 0D5700 800D4B00 D42897E8 */ ldc1 $f8, %lo(rpi_cosf)($at) -/* 0D5704 800D4B04 46000321 */ cvt.d.s $f12, $f0 -/* 0D5708 800D4B08 44809000 */ mtc1 $zero, $f18 -/* 0D570C 800D4B0C 46286282 */ mul.d $f10, $f12, $f8 -/* 0D5710 800D4B10 44802800 */ mtc1 $zero, $f5 -/* 0D5714 800D4B14 44802000 */ mtc1 $zero, $f4 -/* 0D5718 800D4B18 46325380 */ add.d $f14, $f10, $f18 -/* 0D571C 800D4B1C 462E203E */ c.le.d $f4, $f14 -/* 0D5720 800D4B20 00000000 */ nop -/* 0D5724 800D4B24 45020007 */ bc1fl .L800D4B44 -/* 0D5728 800D4B28 46327281 */ sub.d $f10, $f14, $f18 -/* 0D572C 800D4B2C 46327180 */ add.d $f6, $f14, $f18 -/* 0D5730 800D4B30 4620320D */ trunc.w.d $f8, $f6 -/* 0D5734 800D4B34 44024000 */ mfc1 $v0, $f8 -/* 0D5738 800D4B38 10000006 */ b .L800D4B54 -/* 0D573C 800D4B3C 44823000 */ mtc1 $v0, $f6 -/* 0D5740 800D4B40 46327281 */ sub.d $f10, $f14, $f18 -.L800D4B44: -/* 0D5744 800D4B44 4620510D */ trunc.w.d $f4, $f10 -/* 0D5748 800D4B48 44022000 */ mfc1 $v0, $f4 -/* 0D574C 800D4B4C 00000000 */ nop -/* 0D5750 800D4B50 44823000 */ mtc1 $v0, $f6 -.L800D4B54: -/* 0D5754 800D4B54 3C01800F */ lui $at, %hi(pihi_cosf) # $at, 0x800f -/* 0D5758 800D4B58 D42A97F0 */ ldc1 $f10, %lo(pihi_cosf)($at) -/* 0D575C 800D4B5C 46803221 */ cvt.d.w $f8, $f6 -/* 0D5760 800D4B60 3C01800F */ lui $at, %hi(pilo_cosf) # $at, 0x800f -/* 0D5764 800D4B64 D42697F8 */ ldc1 $f6, %lo(pilo_cosf)($at) -/* 0D5768 800D4B68 3C03800F */ lui $v1, %hi(P_cosf) # $v1, 0x800f -/* 0D576C 800D4B6C 246397C0 */ addiu $v1, %lo(P_cosf) # addiu $v1, $v1, -0x6840 -/* 0D5770 800D4B70 46324001 */ sub.d $f0, $f8, $f18 -/* 0D5774 800D4B74 30480001 */ andi $t0, $v0, 1 -/* 0D5778 800D4B78 462A0102 */ mul.d $f4, $f0, $f10 -/* 0D577C 800D4B7C D46A0020 */ ldc1 $f10, 0x20($v1) -/* 0D5780 800D4B80 46260202 */ mul.d $f8, $f0, $f6 -/* 0D5784 800D4B84 D4660018 */ ldc1 $f6, 0x18($v1) -/* 0D5788 800D4B88 46246081 */ sub.d $f2, $f12, $f4 -/* 0D578C 800D4B8C 46281081 */ sub.d $f2, $f2, $f8 -/* 0D5790 800D4B90 46221382 */ mul.d $f14, $f2, $f2 -/* 0D5794 800D4B94 00000000 */ nop -/* 0D5798 800D4B98 462E5102 */ mul.d $f4, $f10, $f14 -/* 0D579C 800D4B9C 46262200 */ add.d $f8, $f4, $f6 -/* 0D57A0 800D4BA0 D4640010 */ ldc1 $f4, 0x10($v1) -/* 0D57A4 800D4BA4 462E4282 */ mul.d $f10, $f8, $f14 -/* 0D57A8 800D4BA8 46245180 */ add.d $f6, $f10, $f4 -/* 0D57AC 800D4BAC D46A0008 */ ldc1 $f10, 8($v1) -/* 0D57B0 800D4BB0 462E3202 */ mul.d $f8, $f6, $f14 -/* 0D57B4 800D4BB4 15000007 */ bnez $t0, .L800D4BD4 -/* 0D57B8 800D4BB8 46285400 */ add.d $f16, $f10, $f8 -/* 0D57BC 800D4BBC 462E1102 */ mul.d $f4, $f2, $f14 -/* 0D57C0 800D4BC0 00000000 */ nop -/* 0D57C4 800D4BC4 46302182 */ mul.d $f6, $f4, $f16 -/* 0D57C8 800D4BC8 46223280 */ add.d $f10, $f6, $f2 -/* 0D57CC 800D4BCC 03E00008 */ jr $ra -/* 0D57D0 800D4BD0 46205020 */ cvt.s.d $f0, $f10 - -.L800D4BD4: -/* 0D57D4 800D4BD4 462E1202 */ mul.d $f8, $f2, $f14 -/* 0D57D8 800D4BD8 00000000 */ nop -/* 0D57DC 800D4BDC 46304102 */ mul.d $f4, $f8, $f16 -/* 0D57E0 800D4BE0 46222180 */ add.d $f6, $f4, $f2 -/* 0D57E4 800D4BE4 46203020 */ cvt.s.d $f0, $f6 -/* 0D57E8 800D4BE8 03E00008 */ jr $ra -/* 0D57EC 800D4BEC 46000007 */ neg.s $f0, $f0 - -/* 0D57F0 800D4BF0 460A5032 */ c.eq.s $f10, $f10 -.L800D4BF4: -/* 0D57F4 800D4BF4 3C01800F */ lui $at, %hi(zero_cosf) # $at, 0x800f -/* 0D57F8 800D4BF8 45010004 */ bc1t .L800D4C0C -/* 0D57FC 800D4BFC 00000000 */ nop -/* 0D5800 800D4C00 3C01800F */ lui $at, %hi(__libm_qnan_f) # $at, 0x800f -/* 0D5804 800D4C04 03E00008 */ jr $ra -/* 0D5808 800D4C08 C42098C0 */ lwc1 $f0, %lo(__libm_qnan_f)($at) - -.L800D4C0C: -/* 0D580C 800D4C0C C4209800 */ lwc1 $f0, %lo(zero_cosf)($at) -/* 0D5810 800D4C10 03E00008 */ jr $ra -/* 0D5814 800D4C14 00000000 */ nop - -/* 0D5818 800D4C18 00000000 */ nop -/* 0D581C 800D4C1C 00000000 */ nop diff --git a/lib/asm/non_matchings/unknown_0D3020/sinf.s b/lib/asm/non_matchings/unknown_0D3020/sinf.s deleted file mode 100644 index 1e76b1fa..00000000 --- a/lib/asm/non_matchings/unknown_0D3020/sinf.s +++ /dev/null @@ -1,126 +0,0 @@ -glabel sinf -/* 0D5820 800D4C20 E7AC0000 */ swc1 $f12, ($sp) -/* 0D5824 800D4C24 8FA20000 */ lw $v0, ($sp) -/* 0D5828 800D4C28 C7A40000 */ lwc1 $f4, ($sp) -/* 0D582C 800D4C2C 00021D83 */ sra $v1, $v0, 0x16 -/* 0D5830 800D4C30 306E01FF */ andi $t6, $v1, 0x1ff -/* 0D5834 800D4C34 29C100FF */ slti $at, $t6, 0xff -/* 0D5838 800D4C38 10200019 */ beqz $at, .L800D4CA0 -/* 0D583C 800D4C3C 01C01825 */ move $v1, $t6 -/* 0D5840 800D4C40 29C100E6 */ slti $at, $t6, 0xe6 -/* 0D5844 800D4C44 14200014 */ bnez $at, .L800D4C98 -/* 0D5848 800D4C48 460020A1 */ cvt.d.s $f2, $f4 -/* 0D584C 800D4C4C 46221302 */ mul.d $f12, $f2, $f2 -/* 0D5850 800D4C50 3C03800F */ lui $v1, %hi(P_sinf) # $v1, 0x800f -/* 0D5854 800D4C54 24639810 */ addiu $v1, %lo(P_sinf) # addiu $v1, $v1, -0x67f0 -/* 0D5858 800D4C58 D4660020 */ ldc1 $f6, 0x20($v1) -/* 0D585C 800D4C5C D46A0018 */ ldc1 $f10, 0x18($v1) -/* 0D5860 800D4C60 D4640010 */ ldc1 $f4, 0x10($v1) -/* 0D5864 800D4C64 462C3202 */ mul.d $f8, $f6, $f12 -/* 0D5868 800D4C68 462A4400 */ add.d $f16, $f8, $f10 -/* 0D586C 800D4C6C D46A0008 */ ldc1 $f10, 8($v1) -/* 0D5870 800D4C70 462C8482 */ mul.d $f18, $f16, $f12 -/* 0D5874 800D4C74 46249180 */ add.d $f6, $f18, $f4 -/* 0D5878 800D4C78 462C3202 */ mul.d $f8, $f6, $f12 -/* 0D587C 800D4C7C 46285380 */ add.d $f14, $f10, $f8 -/* 0D5880 800D4C80 462C1402 */ mul.d $f16, $f2, $f12 -/* 0D5884 800D4C84 00000000 */ nop -/* 0D5888 800D4C88 462E8482 */ mul.d $f18, $f16, $f14 -/* 0D588C 800D4C8C 46229100 */ add.d $f4, $f18, $f2 -/* 0D5890 800D4C90 03E00008 */ jr $ra -/* 0D5894 800D4C94 46202020 */ cvt.s.d $f0, $f4 - -.L800D4C98: -/* 0D5898 800D4C98 03E00008 */ jr $ra -/* 0D589C 800D4C9C C7A00000 */ lwc1 $f0, ($sp) - -.L800D4CA0: -/* 0D58A0 800D4CA0 28610136 */ slti $at, $v1, 0x136 -/* 0D58A4 800D4CA4 10200044 */ beqz $at, .L800D4DB8 -/* 0D58A8 800D4CA8 C7A40000 */ lwc1 $f4, ($sp) -/* 0D58AC 800D4CAC C7A60000 */ lwc1 $f6, ($sp) -/* 0D58B0 800D4CB0 3C01800F */ lui $at, %hi(rpi_sinf) # $at, 0x800f -/* 0D58B4 800D4CB4 D42A9838 */ ldc1 $f10, %lo(rpi_sinf)($at) -/* 0D58B8 800D4CB8 460030A1 */ cvt.d.s $f2, $f6 -/* 0D58BC 800D4CBC 44804800 */ mtc1 $zero, $f9 -/* 0D58C0 800D4CC0 462A1002 */ mul.d $f0, $f2, $f10 -/* 0D58C4 800D4CC4 44804000 */ mtc1 $zero, $f8 -/* 0D58C8 800D4CC8 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -/* 0D58CC 800D4CCC 4620403E */ c.le.d $f8, $f0 -/* 0D58D0 800D4CD0 00000000 */ nop -/* 0D58D4 800D4CD4 4502000B */ bc1fl .L800D4D04 -/* 0D58D8 800D4CD8 44813800 */ mtc1 $at, $f7 -/* 0D58DC 800D4CDC 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -/* 0D58E0 800D4CE0 44818800 */ mtc1 $at, $f17 -/* 0D58E4 800D4CE4 44808000 */ mtc1 $zero, $f16 -/* 0D58E8 800D4CE8 00000000 */ nop -/* 0D58EC 800D4CEC 46300480 */ add.d $f18, $f0, $f16 -/* 0D58F0 800D4CF0 4620910D */ trunc.w.d $f4, $f18 -/* 0D58F4 800D4CF4 44022000 */ mfc1 $v0, $f4 -/* 0D58F8 800D4CF8 10000009 */ b .L800D4D20 -/* 0D58FC 800D4CFC 44828000 */ mtc1 $v0, $f16 -/* 0D5900 800D4D00 44813800 */ mtc1 $at, $f7 -.L800D4D04: -/* 0D5904 800D4D04 44803000 */ mtc1 $zero, $f6 -/* 0D5908 800D4D08 00000000 */ nop -/* 0D590C 800D4D0C 46260281 */ sub.d $f10, $f0, $f6 -/* 0D5910 800D4D10 4620520D */ trunc.w.d $f8, $f10 -/* 0D5914 800D4D14 44024000 */ mfc1 $v0, $f8 -/* 0D5918 800D4D18 00000000 */ nop -/* 0D591C 800D4D1C 44828000 */ mtc1 $v0, $f16 -.L800D4D20: -/* 0D5920 800D4D20 3C01800F */ lui $at, %hi(pihi_sinf) # $at, 0x800f -/* 0D5924 800D4D24 D4329840 */ ldc1 $f18, %lo(pihi_sinf)($at) -/* 0D5928 800D4D28 46808021 */ cvt.d.w $f0, $f16 -/* 0D592C 800D4D2C 3C01800F */ lui $at, %hi(pilo_sinf) # $at, 0x800f -/* 0D5930 800D4D30 D4269848 */ ldc1 $f6, %lo(pilo_sinf)($at) -/* 0D5934 800D4D34 3C03800F */ lui $v1, %hi(P_sinf) # $v1, 0x800f -/* 0D5938 800D4D38 24639810 */ addiu $v1, %lo(P_sinf) # addiu $v1, $v1, -0x67f0 -/* 0D593C 800D4D3C 46320102 */ mul.d $f4, $f0, $f18 -/* 0D5940 800D4D40 D4680020 */ ldc1 $f8, 0x20($v1) -/* 0D5944 800D4D44 D4720018 */ ldc1 $f18, 0x18($v1) -/* 0D5948 800D4D48 30590001 */ andi $t9, $v0, 1 -/* 0D594C 800D4D4C 46260282 */ mul.d $f10, $f0, $f6 -/* 0D5950 800D4D50 46241081 */ sub.d $f2, $f2, $f4 -/* 0D5954 800D4D54 462A1081 */ sub.d $f2, $f2, $f10 -/* 0D5958 800D4D58 D46A0010 */ ldc1 $f10, 0x10($v1) -/* 0D595C 800D4D5C 46221302 */ mul.d $f12, $f2, $f2 -/* 0D5960 800D4D60 00000000 */ nop -/* 0D5964 800D4D64 462C4402 */ mul.d $f16, $f8, $f12 -/* 0D5968 800D4D68 46328100 */ add.d $f4, $f16, $f18 -/* 0D596C 800D4D6C D4720008 */ ldc1 $f18, 8($v1) -/* 0D5970 800D4D70 462C2182 */ mul.d $f6, $f4, $f12 -/* 0D5974 800D4D74 462A3200 */ add.d $f8, $f6, $f10 -/* 0D5978 800D4D78 462C4402 */ mul.d $f16, $f8, $f12 -/* 0D597C 800D4D7C 17200007 */ bnez $t9, .L800D4D9C -/* 0D5980 800D4D80 46309380 */ add.d $f14, $f18, $f16 -/* 0D5984 800D4D84 462C1102 */ mul.d $f4, $f2, $f12 -/* 0D5988 800D4D88 00000000 */ nop -/* 0D598C 800D4D8C 462E2182 */ mul.d $f6, $f4, $f14 -/* 0D5990 800D4D90 46223280 */ add.d $f10, $f6, $f2 -/* 0D5994 800D4D94 03E00008 */ jr $ra -/* 0D5998 800D4D98 46205020 */ cvt.s.d $f0, $f10 - -.L800D4D9C: -/* 0D599C 800D4D9C 462C1202 */ mul.d $f8, $f2, $f12 -/* 0D59A0 800D4DA0 00000000 */ nop -/* 0D59A4 800D4DA4 462E4482 */ mul.d $f18, $f8, $f14 -/* 0D59A8 800D4DA8 46229400 */ add.d $f16, $f18, $f2 -/* 0D59AC 800D4DAC 46208020 */ cvt.s.d $f0, $f16 -/* 0D59B0 800D4DB0 03E00008 */ jr $ra -/* 0D59B4 800D4DB4 46000007 */ neg.s $f0, $f0 - -.L800D4DB8: -/* 0D59B8 800D4DB8 46042032 */ c.eq.s $f4, $f4 -/* 0D59BC 800D4DBC 3C01800F */ lui $at, %hi(zero_sinf) # $at, 0x800f -/* 0D59C0 800D4DC0 45010004 */ bc1t .L800D4DD4 -/* 0D59C4 800D4DC4 00000000 */ nop -/* 0D59C8 800D4DC8 3C01800F */ lui $at, %hi(__libm_qnan_f) # $at, 0x800f -/* 0D59CC 800D4DCC 03E00008 */ jr $ra -/* 0D59D0 800D4DD0 C42098C0 */ lwc1 $f0, %lo(__libm_qnan_f)($at) - -.L800D4DD4: -/* 0D59D4 800D4DD4 C4209850 */ lwc1 $f0, %lo(zero_sinf)($at) -/* 0D59D8 800D4DD8 03E00008 */ jr $ra -/* 0D59DC 800D4DDC 00000000 */ nop - diff --git a/lib/src/gu/cosf.c b/lib/src/gu/cosf.c index 2ee1d4d2..27b857ac 100644 --- a/lib/src/gu/cosf.c +++ b/lib/src/gu/cosf.c @@ -3,5 +3,64 @@ #include "types.h" #include "macros.h" +#include "guint.h" -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/cosf.s") +extern du P_cosf[]; +extern du rpi_cosf; +extern du pihi_cosf; +extern du pilo_cosf; +extern fu zero_cosf; +extern fu __libm_qnan_f; + +f32 cosf(f32 x) { + f64 dx; // double x + f64 xsq; // x squared + f64 poly; + f64 dn; + f32 xabs; + s32 n; + f64 result; + s32 ix; // int x + s32 xpt; + + ix = *(s32 *) &x; + xpt = (ix >> 22) & 0x1FF; + + if (xpt < 310) { + if (0 < x) { + xabs = x; + } else { + xabs = -x; + } + + dx = xabs; + dn = dx * rpi_cosf.d + 0.5; + + if (0 <= dn) { + n = dn + 0.5; + } else { + n = dn - 0.5; + } + + dn = n; + dx -= (dn - 0.5) * pihi_cosf.d; + dx -= (dn - 0.5) * pilo_cosf.d; + xsq = dx * dx; + + poly = (((((P_cosf[4].d * xsq) + P_cosf[3].d) * xsq) + P_cosf[2].d) * xsq) + P_cosf[1].d; + + result = ((dx * xsq) * poly) + dx; + + if ((n & 1) == 0) { + return result; + } else { + return -(f32) result; + } + } + + if (x != x) { + return __libm_qnan_f.f; + } + + return zero_cosf.f; +} diff --git a/lib/src/gu/sinf.c b/lib/src/gu/sinf.c index b42bce68..0ca4fef1 100644 --- a/lib/src/gu/sinf.c +++ b/lib/src/gu/sinf.c @@ -3,5 +3,70 @@ #include "types.h" #include "macros.h" +#include "guint.h" -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/sinf.s") +extern du P_sinf[]; +extern du rpi_sinf; +extern du pihi_sinf; +extern du pilo_sinf; +extern fu zero_sinf; +extern fu __libm_qnan_f; + +f32 sinf(f32 x) { + f64 dx; // double x + f64 xsq; // x squared + f64 poly; + f64 dn; + s32 n; + f64 result; + s32 ix; // int x + s32 xpt; + + ix = *(s32 *) &x; + xpt = (ix >> 22) & 0x1FF; + + if (xpt < 255) { + dx = x; + if (xpt >= 230) { + xsq = dx * dx; + poly = (((((P_sinf[4].d * xsq) + P_sinf[3].d) * xsq) + P_sinf[2].d) * xsq) + P_sinf[1].d; + result = ((dx * xsq) * poly) + dx; + + return result; + } else { + return x; + } + } + + if (xpt < 310) { + dx = x; + dn = dx * rpi_sinf.d; + + if (dn >= 0) { + n = dn + 0.5; + } + else { + n = dn - 0.5; + } + + dn = n; + dx -= dn * pihi_sinf.d; + dx -= dn * pilo_sinf.d; + xsq = dx * dx; + poly = (((((P_sinf[4].d * xsq) + P_sinf[3].d) * xsq) + P_sinf[2].d) * xsq) + P_sinf[1].d; + result = ((dx * xsq) * poly) + dx; + + if ((n & 1) == 0) { + return result; + } + else { + return -(f32) result; + } + } + + if (x != x) { + return __libm_qnan_f.f; + } + + return zero_sinf.f; +} diff --git a/lib/src/libc/xlitob.c b/lib/src/libc/xlitob.c index 1f31ecda..d98abcc7 100644 --- a/lib/src/libc/xlitob.c +++ b/lib/src/libc/xlitob.c @@ -3,5 +3,62 @@ /* RAM_POS: 0x800D6700 */ #include "macros.h" +#include "xprintf.h" +#include "stdlib.h" +#include "string.h" -GLOBAL_ASM("lib/asm/non_matchings/unknown_0D3020/_Litob.s") +#define BUFF_LEN 0x18 + +extern char ldigs[]; +extern char udigs[]; + +void _Litob(printf_struct *args, char type) { + char buff[BUFF_LEN]; + const char *digs; + s32 base; + s32 i; + u64 us64val; + + if (type == 'X') { + digs = udigs; + } else { + digs = ldigs; + } + + base = (type == 'o') ? 8 : ((type != 'x' && type != 'X') ? 10 : 16); + i = BUFF_LEN; + us64val = args->value.s64; + + if ((type == 'd' || type == 'i') && args->value.s64 < 0) { + us64val = -us64val; + } + + if (us64val != 0 || args->precision != 0) { + buff[--i] = digs[us64val % base]; + } + + args->value.s64 = us64val / base; + + while (args->value.s64 > 0 && i > 0) { + lldiv_t qr = lldiv(args->value.s64, base); + + args->value.s64 = qr.quot; + buff[--i] = digs[qr.rem]; + } + + args->part2_len = BUFF_LEN - i; + + memcpy(args->buff, buff + i, args->part2_len); + + if (args->part2_len < args->precision) { + args->num_leading_zeros = args->precision - args->part2_len; + } + + if (args->precision < 0 && (args->flags & (FLAGS_ZERO | FLAGS_MINUS)) == FLAGS_ZERO) { + i = args->width - args->n0 - args->num_leading_zeros - args->part2_len; + + if (i > 0) { + args->num_leading_zeros += i; + } + } +} diff --git a/lib/src/libc/xprintf.h b/lib/src/libc/xprintf.h index 9fb792ac..ce375ea2 100644 --- a/lib/src/libc/xprintf.h +++ b/lib/src/libc/xprintf.h @@ -57,6 +57,6 @@ typedef struct { #define FLAGS_HASH 8 #define FLAGS_ZERO 16 s32 _Printf(outfun prout, char *dst, const char *fmt, va_list args); -void _Litob(printf_struct *args, u8 type); +void _Litob(printf_struct *args, char type); void _Ldtob(printf_struct *args, u8 type); #endif diff --git a/src/textures_sprites.c b/src/textures_sprites.c index d0c3eaac..050cc496 100644 --- a/src/textures_sprites.c +++ b/src/textures_sprites.c @@ -8,6 +8,10 @@ #include "math_util.h" #include "unknown_0255E0.h" +#define TEX_HEADER_COUNT 175 +#define TEX_SPRITE_COUNT 50 +#define TEX_PALLETE_COUNT 20 + /************ .data ************/ u32 gTexColourTag = COLOUR_TAG_MAGENTA; @@ -861,14 +865,14 @@ const char D_800E7C50[] = "TEXSPR Error: Tryed to deallocate non-existent sprite /************ .bss ************/ -s32 *D_80126320[2]; +s32 *gTextureAssetTable[2]; TextureCacheEntry *gTextureCache; u8 *gCiPalettes; s32 gNumberOfLoadedTextures; s32 D_80126334; -s32 D_80126338[2]; +s32 gTextureAssetID[2]; s32 gCiPalettesSize; s32 D_80126344; s32 *gSpriteOffsetTable; @@ -897,21 +901,21 @@ s16 D_80126384; void tex_init_textures(void) { s32 i; - gTextureCache = allocate_from_main_pool_safe(0x15E0, COLOUR_TAG_MAGENTA); - gCiPalettes = allocate_from_main_pool_safe(0x280, 0xFF00FFFF); + gTextureCache = allocate_from_main_pool_safe(sizeof(TextureHeader) * TEX_HEADER_COUNT, COLOUR_TAG_MAGENTA); + gCiPalettes = allocate_from_main_pool_safe(0x280, COLOUR_TAG_MAGENTA); gNumberOfLoadedTextures = 0; gCiPalettesSize = 0; - D_80126320[0] = (s32 *) load_asset_section_from_rom(ASSET_TEXTURES_2D_TABLE); - D_80126320[1] = (s32 *) load_asset_section_from_rom(ASSET_TEXTURES_3D_TABLE); + gTextureAssetTable[TEX_TABLE_2D] = (s32 *) load_asset_section_from_rom(ASSET_TEXTURES_2D_TABLE); + gTextureAssetTable[TEX_TABLE_3D] = (s32 *) load_asset_section_from_rom(ASSET_TEXTURES_3D_TABLE); - for (i = 0; D_80126320[0][i] != -1; i++) { } - D_80126338[0] = --i; + for (i = 0; gTextureAssetTable[TEX_TABLE_2D][i] != -1; i++) { } + gTextureAssetID[TEX_TABLE_2D] = --i; - for (i = 0; D_80126320[1][i] != -1; i++) { } - D_80126338[1] = --i; + for (i = 0; gTextureAssetTable[TEX_TABLE_3D][i] != -1; i++) { } + gTextureAssetID[TEX_TABLE_3D] = --i; - gSpriteCache = allocate_from_main_pool_safe(0x320, COLOUR_TAG_MAGENTA); - gCurrentSprite = allocate_from_main_pool_safe(0x200, COLOUR_TAG_MAGENTA); + gSpriteCache = allocate_from_main_pool_safe(sizeof(Sprite) * TEX_SPRITE_COUNT, COLOUR_TAG_MAGENTA); + gCurrentSprite = allocate_from_main_pool_safe(sizeof(Sprite) * 32, COLOUR_TAG_MAGENTA); D_80126358 = 0; gSpriteOffsetTable = (s32 *) load_asset_section_from_rom(ASSET_SPRITES_TABLE); D_80126354 = 0; @@ -938,12 +942,20 @@ void tex_enable_modes(s32 flags) { D_80126378 &= ~flags; } -UNUSED s32 func_8007AE44(void) { - return D_80126338[0]; +/** + * Return the texture asset ID table for 2D textures. + * Goes unused. +*/ +UNUSED s32 get_loaded_2D_textures(void) { + return gTextureAssetID[TEX_TABLE_2D]; } -UNUSED s32 func_8007AE54(void) { - return D_80126338[1]; +/** + * Return the texture asset ID table for 3D textures. + * Goes unused. +*/ +UNUSED s32 get_loaded_3D_textures(void) { + return gTextureAssetID[TEX_TABLE_3D]; } UNUSED s32 func_8007AE64(void) { @@ -980,7 +992,7 @@ TextureHeader *load_texture(s32 arg0) { assetIndex = arg0 & 0x7FFF; assetSection = ASSET_TEXTURES_3D; } - if ((assetIndex >= D_80126338[assetTable]) || (assetIndex < 0)) { + if ((assetIndex >= gTextureAssetID[assetTable]) || (assetIndex < 0)) { arg0 = 0; } for (i = 0; i < gNumberOfLoadedTextures; i++) { @@ -990,8 +1002,8 @@ TextureHeader *load_texture(s32 arg0) { return tex; } } - assetOffset = D_80126320[assetTable][assetIndex]; - assetSize = D_80126320[assetTable][assetIndex + 1] - assetOffset; + assetOffset = gTextureAssetTable[assetTable][assetIndex]; + assetSize = gTextureAssetTable[assetTable][assetIndex + 1] - assetOffset; load_asset_to_address(assetSection, gTempTextureHeader, assetOffset, 0x28); numberOfTextures = (gTempTextureHeader->header.numOfTextures >> 8) & 0xFFFF; @@ -1432,11 +1444,11 @@ s32 get_texture_size_from_id(s32 arg0) { assetSection = ASSET_TEXTURES_3D; assetTable = 1; } - if ((assetIndex >= D_80126338[assetTable]) || (assetIndex < 0)) { + if ((assetIndex >= gTextureAssetID[assetTable]) || (assetIndex < 0)) { return 0; } - start = D_80126320[assetTable][assetIndex]; - size = D_80126320[assetTable][assetIndex + 1] - start; + start = gTextureAssetTable[assetTable][assetIndex]; + size = gTextureAssetTable[assetTable][assetIndex + 1] - start; if (gTempTextureHeader->header.isCompressed) { load_asset_to_address(assetSection, gTempTextureHeader, start, 0x28); size = byteswap32(&gTempTextureHeader->uncompressedSize); diff --git a/src/textures_sprites.h b/src/textures_sprites.h index c48d76aa..29097d6b 100644 --- a/src/textures_sprites.h +++ b/src/textures_sprites.h @@ -41,6 +41,9 @@ enum RenderFlags { RENDER_UNK_8000000 = (1 << 27), }; +#define TEX_TABLE_2D 0 +#define TEX_TABLE_3D 1 + extern u32 gTexColourTag; extern s32 D_800DE7C4; @@ -117,8 +120,8 @@ typedef struct TempTexHeader { void tex_disable_modes(s32 flags); void tex_enable_modes(s32 flags); -s32 func_8007AE44(void); -s32 func_8007AE54(void); +s32 get_loaded_2D_textures(void); +s32 get_loaded_3D_textures(void); s32 func_8007AE64(void); void set_texture_colour_tag(s32 tagID); void reset_render_settings(Gfx **dlist);