From 6d900d30ac8c549b8e2b5b83586aa89827c292d1 Mon Sep 17 00:00:00 2001 From: MegaMech Date: Thu, 8 May 2025 16:03:42 -0600 Subject: [PATCH] PR Matching func_80086074 (#707) * Commit unpr'd matches * fix compile * Commit matching func_80086074 --- .../update_objects/func_80086074.s | 40 ----------- courses/rainbow_road/course_data.c | 54 ++++++++------- courses/rainbow_road/course_data.h | 2 +- include/objects.h | 2 +- src/data/some_data.c | 13 ++-- src/data/some_data.h | 2 +- src/update_objects.c | 16 +---- yamls/us/rainbow_road_tluts.yml | 66 +++++++++++++++++++ 8 files changed, 113 insertions(+), 82 deletions(-) delete mode 100644 asm/non_matchings/update_objects/func_80086074.s create mode 100644 yamls/us/rainbow_road_tluts.yml diff --git a/asm/non_matchings/update_objects/func_80086074.s b/asm/non_matchings/update_objects/func_80086074.s deleted file mode 100644 index 9a424518a..000000000 --- a/asm/non_matchings/update_objects/func_80086074.s +++ /dev/null @@ -1,40 +0,0 @@ -glabel func_80086074 -/* 086C74 80086074 00057880 */ sll $t7, $a1, 2 -/* 086C78 80086078 01E57823 */ subu $t7, $t7, $a1 -/* 086C7C 8008607C 3C19800E */ lui $t9, %hi(D_800E6734) # $t9, 0x800e -/* 086C80 80086080 27396734 */ addiu $t9, %lo(D_800E6734) # addiu $t9, $t9, 0x6734 -/* 086C84 80086084 000FC080 */ sll $t8, $t7, 2 -/* 086C88 80086088 03191021 */ addu $v0, $t8, $t9 -/* 086C8C 8008608C 3C018019 */ lui $at, %hi(xOrientation) # $at, 0x8019 -/* 086C90 80086090 C426D01C */ lwc1 $f6, %lo(xOrientation)($at) -/* 086C94 80086094 C4440000 */ lwc1 $f4, ($v0) -/* 086C98 80086098 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 086C9C 8008609C AFA50024 */ sw $a1, 0x24($sp) -/* 086CA0 800860A0 46062202 */ mul.s $f8, $f4, $f6 -/* 086CA4 800860A4 AFBF001C */ sw $ra, 0x1c($sp) -/* 086CA8 800860A8 AFA40020 */ sw $a0, 0x20($sp) -/* 086CAC 800860AC 8C460004 */ lw $a2, 4($v0) -/* 086CB0 800860B0 8C470008 */ lw $a3, 8($v0) -/* 086CB4 800860B4 44054000 */ mfc1 $a1, $f8 -/* 086CB8 800860B8 0C022DF5 */ jal set_obj_origin_pos -/* 086CBC 800860BC 00000000 */ nop -/* 086CC0 800860C0 8FA80024 */ lw $t0, 0x24($sp) -/* 086CC4 800860C4 3C0A0600 */ lui $t2, %hi(d_course_rainbow_road_static_tluts) # $t2, 0x600 -/* 086CC8 800860C8 3C0C0601 */ lui $t4, %hi(d_course_rainbow_road_static_textures) # $t4, 0x601 -/* 086CCC 800860CC 258CB000 */ addiu $t4, %lo(d_course_rainbow_road_static_textures) # addiu $t4, $t4, -0x5000 -/* 086CD0 800860D0 254A7200 */ addiu $t2, %lo(d_course_rainbow_road_static_tluts) # addiu $t2, $t2, 0x7200 -/* 086CD4 800860D4 240D0040 */ li $t5, 64 -/* 086CD8 800860D8 00084A40 */ sll $t1, $t0, 9 -/* 086CDC 800860DC 00085B00 */ sll $t3, $t0, 0xc -/* 086CE0 800860E0 016C3021 */ addu $a2, $t3, $t4 -/* 086CE4 800860E4 012A2821 */ addu $a1, $t1, $t2 -/* 086CE8 800860E8 AFAD0010 */ sw $t5, 0x10($sp) -/* 086CEC 800860EC 8FA40020 */ lw $a0, 0x20($sp) -/* 086CF0 800860F0 0C01CD11 */ jal init_texture_object -/* 086CF4 800860F4 24070040 */ li $a3, 64 -/* 086CF8 800860F8 0C0216ED */ jal func_80085BB4 -/* 086CFC 800860FC 8FA40020 */ lw $a0, 0x20($sp) -/* 086D00 80086100 8FBF001C */ lw $ra, 0x1c($sp) -/* 086D04 80086104 27BD0020 */ addiu $sp, $sp, 0x20 -/* 086D08 80086108 03E00008 */ jr $ra -/* 086D0C 8008610C 00000000 */ nop diff --git a/courses/rainbow_road/course_data.c b/courses/rainbow_road/course_data.c index 6019f8792..2ee57be94 100644 --- a/courses/rainbow_road/course_data.c +++ b/courses/rainbow_road/course_data.c @@ -1487,28 +1487,38 @@ u8 d_course_rainbow_road_neon_boo_tlut_list[][512] = { }, }; -u8 d_course_rainbow_road_static_tluts[][512] = { - { -#include "assets/courses/rainbow_road/gTLUTRainbowRoadNeonPeach.inc.c" - }, - { -#include "assets/courses/rainbow_road/gTLUTRainbowRoadNeonLuigi.inc.c" - }, - { -#include "assets/courses/rainbow_road/gTLUTRainbowRoadNeonDonkeyKong.inc.c" - }, - { -#include "assets/courses/rainbow_road/gTLUTRainbowRoadNeonYoshi.inc.c" - }, - { -#include "assets/courses/rainbow_road/gTLUTRainbowRoadNeonBowser.inc.c" - }, - { -#include "assets/courses/rainbow_road/gTLUTRainbowRoadNeonWario.inc.c" - }, - { -#include "assets/courses/rainbow_road/gTLUTRainbowRoadNeonToad.inc.c" - }, +u16 d_course_rainbow_road_static_tluts[] = { +#include "assets/code/rainbow_road_tluts/gTLUTRainbowRoadNeonPeach.rgba16.inc.c" +}; + +/* @warning array oob func_80086074 */ +u16 d_tlut_rainbow_road_neon_luigi[] = { +#include "assets/code/rainbow_road_tluts/gTLUTRainbowRoadNeonLuigi.rgba16.inc.c" +}; + +/* @warning array oob func_80086074 */ +u16 d_tlut_rainbow_road_neon_dk[] = { +#include "assets/code/rainbow_road_tluts/gTLUTRainbowRoadNeonDonkeyKong.rgba16.inc.c" +}; + +/* @warning array oob func_80086074 */ +u16 d_tlut_rainbow_road_neon_yoshi[] = { +#include "assets/code/rainbow_road_tluts/gTLUTRainbowRoadNeonYoshi.rgba16.inc.c" +}; + +/* @warning array oob func_80086074 */ +u16 d_tlut_rainbow_road_neon_bowser[] = { +#include "assets/code/rainbow_road_tluts/gTLUTRainbowRoadNeonBowser.rgba16.inc.c" +}; + +/* @warning array oob func_80086074 */ +u16 d_tlut_rainbow_road_neon_wario[] = { +#include "assets/code/rainbow_road_tluts/gTLUTRainbowRoadNeonWario.rgba16.inc.c" +}; + +/* @warning array oob func_80086074 */ +u16 d_tlut_rainbow_road_neon_toad[] = { +#include "assets/code/rainbow_road_tluts/gTLUTRainbowRoadNeonToad.rgba16.inc.c" }; u8 d_course_rainbow_road_neon_mushroom[] = { diff --git a/courses/rainbow_road/course_data.h b/courses/rainbow_road/course_data.h index 20a914dd9..d69e8f5de 100644 --- a/courses/rainbow_road/course_data.h +++ b/courses/rainbow_road/course_data.h @@ -63,7 +63,7 @@ extern TrackPathPoint d_course_rainbow_road_track_path[]; extern u8 d_course_rainbow_road_neon_mushroom_tlut_list[][512]; extern u8 d_course_rainbow_road_neon_mario_tlut_list[][512]; extern u8 d_course_rainbow_road_neon_boo_tlut_list[][512]; -extern u8 d_course_rainbow_road_static_tluts[][512]; +extern u16 d_course_rainbow_road_static_tluts[]; extern u8 d_course_rainbow_road_neon_mushroom[]; extern u8 d_course_rainbow_road_neon_mario[]; extern u8 d_course_rainbow_road_neon_boo[]; diff --git a/include/objects.h b/include/objects.h index 67feb5c23..a0a0efa69 100644 --- a/include/objects.h +++ b/include/objects.h @@ -224,7 +224,7 @@ extern CrabSpawn gCrabSpawns[]; #define NUM_THWOMPS_150CC 12 // pos x,y,z -extern Vec3f D_800E6734[]; +extern float D_800E6734[]; typedef struct { /* 0x0 */ s16 startX; diff --git a/src/data/some_data.c b/src/data/some_data.c index b79c295f6..f41c9a52f 100644 --- a/src/data/some_data.c +++ b/src/data/some_data.c @@ -665,10 +665,15 @@ SplineData* D_800E6724[] = { &D_800E641C, &D_800E64D8 }; SplineData* D_800E672C[] = { &D_800E659C, &D_800E6668 }; -// I believe they're the positions of the static neon signs in rainbow road -Vec3f D_800E6734[] = { - { 1443.0, 1044.0, -5478.0 }, { 1678.0, 1012.0, -4840.0 }, { -3924.0, 921.0, 2566.0 }, { -3311.0, 790.0, 3524.0 }, - { -1284.0, 1341.0, 4527.0 }, { 2268.0, 1041.0, 4456.0 }, { 2820.0, 1109.0, 1985.0 }, +// Positions of the neon signs in rainbow road +float D_800E6734[] = { + 1443.0, 1044.0, -5478.0, + 1678.0, 1012.0, -4840.0, + -3924.0, 921.0, 2566.0, + -3311.0, 790.0, 3524.0, + -1284.0, 1341.0, 4527.0, + 2268.0, 1041.0, 4456.0, + 2820.0, 1109.0, 1985.0, }; // This should really be `extern Vec3s gTorchSpawns[];` diff --git a/src/data/some_data.h b/src/data/some_data.h index 2f8daabab..ea3854583 100644 --- a/src/data/some_data.h +++ b/src/data/some_data.h @@ -67,7 +67,7 @@ extern SplineData D_800E659C; extern SplineData D_800E6668; extern SplineData* D_800E6724[]; extern SplineData* D_800E672C[]; -extern Vec3f D_800E6734[]; +extern float D_800E6734[]; // This should really be `extern Vec3s gTorchSpawns[];` extern s16 gTorchSpawns[]; extern SplineData D_800E67B8; diff --git a/src/update_objects.c b/src/update_objects.c index 32dbf56cd..fb543e35a 100644 --- a/src/update_objects.c +++ b/src/update_objects.c @@ -7813,22 +7813,12 @@ void func_80085F74(s32 objectIndex) { } } -#ifdef NON_MATCHING -/** - * arg1 is pushed onto the stack prior to set_obj_origin_pos, which is correct. - * But then it get popped back into v0 when its supposed to be popped into t0. - * I really, really don't get why that's happening and the permuter hasn't found anything - **/ - void func_80086074(s32 objectIndex, s32 arg1) { - set_obj_origin_pos(objectIndex, D_800E6734[arg1][0] * xOrientation, D_800E6734[arg1][1], D_800E6734[arg1][2]); - init_texture_object(objectIndex, d_course_rainbow_road_static_tluts[arg1], - d_course_rainbow_road_static_textures[arg1], 64, 64); + set_obj_origin_pos(objectIndex, D_800E6734[arg1 * 3 + 0] * xOrientation, D_800E6734[arg1 * 3 + 1], D_800E6734[arg1 * 3 + 2]); + init_texture_object(objectIndex, &d_course_rainbow_road_static_tluts[arg1 * 256], + &d_course_rainbow_road_static_textures[arg1], 64, 64); func_80085BB4(objectIndex); } -#else - GLOBAL_ASM("asm/non_matchings/update_objects/func_80086074.s") -#endif void func_80086110(s32 objectIndex, s32 arg1) { switch (gObjectList[objectIndex].state) { diff --git a/yamls/us/rainbow_road_tluts.yml b/yamls/us/rainbow_road_tluts.yml new file mode 100644 index 000000000..36209a458 --- /dev/null +++ b/yamls/us/rainbow_road_tluts.yml @@ -0,0 +1,66 @@ +# This file is only used for compilation +# Because u16 output is required. +# The png output in assets/courses/ is from the identical .json extraction file +:config: + segments: + - [0x06, 0x872A00] + header: + code: + - '#include ' + - '#include ' +gTLUTRainbowRoadNeonPeach: + symbol: gTLUTRainbowRoadNeonPeach + type: texture + ctype: u16 + width: 16 + height: 16 + offset: 0x07200 + format: rgba16 +gTLUTRainbowRoadNeonLuigi: + symbol: gTLUTRainbowRoadNeonLuigi + type: texture + ctype: u16 + width: 16 + height: 16 + offset: 0x07400 + format: rgba16 +gTLUTRainbowRoadNeonDonkeyKong: + symbol: gTLUTRainbowRoadNeonDonkeyKong + type: texture + ctype: u16 + width: 16 + height: 16 + offset: 0x07600 + format: rgba16 +gTLUTRainbowRoadNeonYoshi: + symbol: gTLUTRainbowRoadNeonYoshi + type: texture + ctype: u16 + width: 16 + height: 16 + offset: 0x07800 + format: rgba16 +gTLUTRainbowRoadNeonBowser: + symbol: gTLUTRainbowRoadNeonBowser + type: texture + ctype: u16 + width: 16 + height: 16 + offset: 0x07A00 + format: rgba16 +gTLUTRainbowRoadNeonWario: + symbol: gTLUTRainbowRoadNeonWario + type: texture + ctype: u16 + width: 16 + height: 16 + offset: 0x07C00 + format: rgba16 +gTLUTRainbowRoadNeonToad: + symbol: gTLUTRainbowRoadNeonToad + type: texture + ctype: u16 + width: 16 + height: 16 + offset: 0x07E00 + format: rgba16