Update some attempts, got a couple matches (#591)

* Update some attempts, got a couple matches

* More matches and updates

Signed-off-by: Taggerung <tyler.taggerung@email.com>
This commit is contained in:
Tyler McGavran
2024-04-02 15:00:35 -04:00
committed by GitHub
parent 893ecbe838
commit 6af653ad3d
16 changed files with 481 additions and 1888 deletions
+52 -75
View File
@@ -3669,10 +3669,6 @@ s16 func_8007AFB0(s32 objectIndex, s32 arg1) {
return randomItem;
}
#ifdef NON_MATCHING
// https://decomp.me/scratch/yWKlx
// More stupid register allocation nonsense
s32 func_8007B040(s32 objectIndex, s32 playerId) {
s16 stackPadding;
s32 temp_v1;
@@ -3696,8 +3692,7 @@ s32 func_8007B040(s32 objectIndex, s32 playerId) {
func_800C9060(playerId, 0x1900A058U);
}
var_t3 = 1;
gObjectList[objectIndex].unk_0A2 = var_v1;
gObjectList[objectIndex].itemDisplay = var_v1;
gObjectList[objectIndex].itemDisplay = gObjectList[objectIndex].unk_0A2 = var_v1;
} else {
for (var_v1_2 = 0; var_v1_2 < gPlayerCountSelection1; var_v1_2++) {
temp_a0 = gItemWindowObjectByPlayerId[var_v1_2];
@@ -3711,11 +3706,11 @@ s32 func_8007B040(s32 objectIndex, s32 playerId) {
}
if (var_a3 != 0) {
var_v1 = random_int(var_a3);
temp_v1 = sp50[var_v1];
gObjectList[objectIndex].unk_0D1 = temp_v1;
temp_a1 = sp40[var_v1];
gObjectList[objectIndex].unk_0A2 = temp_a1;
gObjectList[objectIndex].itemDisplay = temp_a1;
temp_v1 = sp50[var_v1];
gObjectList[objectIndex].unk_0D1 = temp_v1;
temp_a0 = gItemWindowObjectByPlayerId[temp_v1];
sp38 = &gPlayerOne[temp_v1];
func_800722A4(temp_a0, 1);
@@ -3730,9 +3725,6 @@ s32 func_8007B040(s32 objectIndex, s32 playerId) {
}
return var_t3;
}
#else
GLOBAL_ASM("asm/non_matchings/update_objects/func_8007B040.s")
#endif
void func_8007B254(s32 objectIndex, s32 arg1) {
s8 test; // why?
@@ -4163,34 +4155,30 @@ void wrapper_update_boos(void) {
update_boos();
}
#ifdef MIPS_TO_C
//generated by m2c commit d9d3d6575355663122de59f6b2882d8f174e2355 on Dec-27-2022
#ifdef NON_MATCHING
// https://decomp.me/scratch/9JBIl
// No idea what the source of the diff is
void func_8007C360(s32 objectIndex, Camera *camera) {
Objects *sp20;
s32 sp1C;
s32 temp_t0;
s32 temp_t2;
s32 var_t1;
Objects *temp_a2;
temp_a2 = &gObjectList[objectIndex];
temp_t0 = (((temp_a2->unk_0BE[1] - (u16) camera->rot[1]) + 0x8000) & 0xFFFF) * 0x24;
temp_t0 = (u16)camera->rot[1];
temp_t0 = (((temp_a2->direction_angle[1] - temp_t0) + 0x8000) & 0xFFFF) * 0x24;
var_t1 = temp_t0 >> 0x10;
if (temp_t0 < 0) {
var_t1 = (s32) (temp_t0 + 0xFFFF) >> 0x10;
var_t1 = temp_t0 + 0xFFFF;
var_t1 >>= 0x10;
}
temp_t2 = var_t1 & 0xFFFF;
if (temp_t2 < 0x13) {
sp20 = temp_a2;
sp1C = temp_t2;
set_object_flag_status_false(objectIndex, 0x00000080);
temp_a2->itemDisplay = (s8) sp1C;
return;
var_t1 &= 0xFFFF;
if (var_t1 < 0x13) {
set_object_flag_status_false(objectIndex, 0x80);
temp_a2->itemDisplay = var_t1;
} else {
set_object_flag_status_true(objectIndex, 0x80);
temp_a2->itemDisplay = 0x24 - var_t1;
}
sp20 = temp_a2;
sp1C = temp_t2;
set_object_flag_status_true(objectIndex, 0x00000080);
temp_a2->itemDisplay = 0x24 - temp_t2;
}
#else
GLOBAL_ASM("asm/non_matchings/update_objects/func_8007C360.s")
@@ -4210,34 +4198,28 @@ UNUSED void func_8007C49C(void) {
}
#ifdef MIPS_TO_C
//generated by m2c commit 9841ff34ca242f5f14b2eab2b54a7a65ac47d80f
#ifdef NON_MATCHING
// https://decomp.me/scratch/IH8Vx
// No idea what the source of the diff is
void func_8007C4A4(s32 objectIndex) {
Objects *sp20;
s32 sp1C;
s32 temp_t0;
s32 temp_t8;
s32 var_t9;
Objects *temp_v1;
s32 var_t1;
temp_v1 = &gObjectList[objectIndex];
temp_t8 = temp_v1->unk_0BE[1] * 0x24;
var_t9 = temp_t8 >> 0x10;
temp_t8 = gObjectList[objectIndex].direction_angle[1] * 0x24;
var_t1 = temp_t8 >> 0x10;
if (temp_t8 < 0) {
var_t9 = (s32) (temp_t8 + 0xFFFF) >> 0x10;
var_t1 = temp_t8 + 0xFFFF;
var_t1 >>= 0x10;
}
temp_t0 = var_t9 & 0xFFFF;
if (temp_t0 < 0x13) {
sp20 = temp_v1;
sp1C = temp_t0;
set_object_flag_status_false(objectIndex, 0x00000080);
temp_v1->itemDisplay = (s8) sp1C;
return;
var_t1 &= 0xFFFF;
if (var_t1 < 0x13) {
set_object_flag_status_false(objectIndex, 0x80);
gObjectList[objectIndex].itemDisplay = var_t1;
}
else {
set_object_flag_status_true(objectIndex, 0x80);
gObjectList[objectIndex].itemDisplay = 0x24 - var_t1;
}
sp20 = temp_v1;
sp1C = temp_t0;
set_object_flag_status_true(objectIndex, 0x00000080);
temp_v1->itemDisplay = 0x24 - temp_t0;
}
#else
GLOBAL_ASM("asm/non_matchings/update_objects/func_8007C4A4.s")
@@ -5966,9 +5948,8 @@ void func_80080DE4(s32 arg0) {
}
#ifdef NON_MATCHING
extern f32 D_800E594C[][2];
extern u16 D_800E597C[6];
// https://decomp.me/scratch/YMJDJ
// No idea what the problem is
void func_80080E8C(s32 objectIndex1, s32 objectIndex2, s32 arg2) {
u16 anAngle;
f32 thing0;
@@ -6347,17 +6328,6 @@ void func_80081D34(s32 objectIndex) {
}
}
#ifdef NON_MATCHING
/**
* Nonmatching due to regalloc stuff
* The use of the `offset` variable is really really weird
* The intent of the function appears to be choose a random mole from a given
* group of moles (decided by arg1)
* `offset` then would then be offsetting the indexing into gMoleSpawns
* so that we choose the appropriate spawn location for that mole
* But as its written, `offset` is triple what it ought to be.
* So there' something kind of fucky happening
**/
void func_80081FF4(s32 objectIndex, s32 arg1) {
UNUSED s32 stackPadding0;
UNUSED s32 stackPadding1;
@@ -6401,13 +6371,17 @@ void func_80081FF4(s32 objectIndex, s32 arg1) {
break;
}
}
gObjectList[objectIndex].origin_pos[0] = gMoleSpawns[var_v1][offset + 0] * xOrientation;
gObjectList[objectIndex].origin_pos[1] = gMoleSpawns[var_v1][offset + 1] - 9.0;
gObjectList[objectIndex].origin_pos[2] = gMoleSpawns[var_v1][offset + 2];
/*
Ideally `gMoleSpawns` wouldn't be a union at all and its just be a list of Vec3s
Even more ideally each mole group would have its own array for its spawns
gObjectList[objectIndex].origin_pos[0] = gMoleSpawns.asVec3sList[offset + var_v1][0] * xOrientation;
gObjectList[objectIndex].origin_pos[1] = gMoleSpawns.asVec3sList[offset + var_v1][1] - 9.0;
gObjectList[objectIndex].origin_pos[2] = gMoleSpawns.asVec3sList[offset + var_v1][2];
*/
gObjectList[objectIndex].origin_pos[0] = gMoleSpawns.asFlatList[offset + (var_v1 * 3) + 0] * xOrientation;
gObjectList[objectIndex].origin_pos[1] = gMoleSpawns.asFlatList[offset + (var_v1 * 3) + 1] - 9.0;
gObjectList[objectIndex].origin_pos[2] = gMoleSpawns.asFlatList[offset + (var_v1 * 3) + 2];
}
#else
GLOBAL_ASM("asm/non_matchings/update_objects/func_80081FF4.s")
#endif
void func_800821AC(s32 objectIndex, s32 arg1) {
if (gObjectList[objectIndex].state != 0) {
@@ -6671,16 +6645,19 @@ void update_crabs(void) {
}
#ifdef NON_MATCHING
// https://decomp.me/scratch/RquH0
// Gollygee I sure love register allocation :^)
// https://decomp.me/scratch/PYAg4
// Stack issue caused by the `test` variable, but removing it causes much, much larger differences
void func_80082F1C(s32 objectIndex, s32 arg1) {
YVFlagPoleSpawn *test;
gObjectList[objectIndex].model = (Gfx *) d_course_yoshi_valley_unk5;
gObjectList[objectIndex].vertex = (Vtx *) d_course_yoshi_valley_unk4;
gObjectList[objectIndex].sizeScaling = 0.027f;
if (test->rot && test->rot) {}
test = &D_800E5DF4[arg1];
func_80072488(objectIndex);
set_obj_origin_pos(objectIndex, D_800E5DF4[arg1].pos[0] * xOrientation, D_800E5DF4[arg1].pos[1], D_800E5DF4[arg1].pos[2]);
set_obj_origin_pos(objectIndex, test->pos[0] * xOrientation, test->pos[1], test->pos[2]);
set_obj_origin_offset(objectIndex, 0.0f, 0.0f, 0.0f);
set_obj_direction_angle(objectIndex, 0U, D_800E5DF4[arg1].rot, 0U);
set_obj_direction_angle(objectIndex, 0U, test->rot, 0U);
}
#else
GLOBAL_ASM("asm/non_matchings/update_objects/func_80082F1C.s")