Decompile healthbarMaybeInsertMarker

This commit is contained in:
Ryan Dwyer
2022-06-24 08:18:23 +10:00
parent 51dd2ba356
commit 5dff6426f0
+56 -131
View File
@@ -18,138 +18,63 @@ struct marker {
f32 frac;
};
s32 healthbarMaybeInsertMarker(struct marker *markers, s32 *indexes, s32 len, f32 fillfrac);
s32 healthbarMaybeInsertMarker(struct marker *markers, s32 *indexes, s32 maxlen, f32 fillfrac)
{
s32 len = 0;
s32 i;
s32 j;
GLOBAL_ASM(
glabel healthbarMaybeInsertMarker
/* f0d5a90: 44876000 */ mtc1 $a3,$f12
/* f0d5a94: 44800000 */ mtc1 $zero,$f0
/* f0d5a98: 27bdffb8 */ addiu $sp,$sp,-72
/* f0d5a9c: afb00004 */ sw $s0,0x4($sp)
/* f0d5aa0: 4600603c */ c.lt.s $f12,$f0
/* f0d5aa4: 00808025 */ or $s0,$a0,$zero
/* f0d5aa8: 00001825 */ or $v1,$zero,$zero
/* f0d5aac: 3c013f80 */ lui $at,0x3f80
/* f0d5ab0: 45000002 */ bc1f .L0f0d5abc
/* f0d5ab4: 00a02025 */ or $a0,$a1,$zero
/* f0d5ab8: 46000306 */ mov.s $f12,$f0
.L0f0d5abc:
/* f0d5abc: 44810000 */ mtc1 $at,$f0
/* f0d5ac0: 24090014 */ addiu $t1,$zero,0x14
/* f0d5ac4: 460c003c */ c.lt.s $f0,$f12
/* f0d5ac8: 00000000 */ nop
/* f0d5acc: 45000002 */ bc1f .L0f0d5ad8
/* f0d5ad0: 00000000 */ nop
/* f0d5ad4: 46000306 */ mov.s $f12,$f0
.L0f0d5ad8:
/* f0d5ad8: 18c0000a */ blez $a2,.L0f0d5b04
/* f0d5adc: 00001025 */ or $v0,$zero,$zero
.L0f0d5ae0:
/* f0d5ae0: 8c870000 */ lw $a3,0x0($a0)
/* f0d5ae4: 24420001 */ addiu $v0,$v0,0x1
/* f0d5ae8: 0067082a */ slt $at,$v1,$a3
/* f0d5aec: 10200002 */ beqz $at,.L0f0d5af8
/* f0d5af0: 00000000 */ nop
/* f0d5af4: 00e01825 */ or $v1,$a3,$zero
.L0f0d5af8:
/* f0d5af8: 1446fff9 */ bne $v0,$a2,.L0f0d5ae0
/* f0d5afc: 24840004 */ addiu $a0,$a0,0x4
/* f0d5b00: 00001025 */ or $v0,$zero,$zero
.L0f0d5b04:
/* f0d5b04: 24630001 */ addiu $v1,$v1,0x1
/* f0d5b08: 18600051 */ blez $v1,.L0f0d5c50
/* f0d5b0c: 00a02025 */ or $a0,$a1,$zero
.L0f0d5b10:
/* f0d5b10: 8c860000 */ lw $a2,0x0($a0)
/* f0d5b14: 8c870004 */ lw $a3,0x4($a0)
/* f0d5b18: 00c90019 */ multu $a2,$t1
/* f0d5b1c: 00007012 */ mflo $t6
/* f0d5b20: 020e4021 */ addu $t0,$s0,$t6
/* f0d5b24: c5000010 */ lwc1 $f0,0x10($t0)
/* f0d5b28: 460c003c */ c.lt.s $f0,$f12
/* f0d5b2c: 00000000 */ nop
/* f0d5b30: 45020045 */ bc1fl .L0f0d5c48
/* f0d5b34: 24420001 */ addiu $v0,$v0,0x1
/* f0d5b38: 00e90019 */ multu $a3,$t1
/* f0d5b3c: 00007812 */ mflo $t7
/* f0d5b40: 020f3021 */ addu $a2,$s0,$t7
/* f0d5b44: c4c20010 */ lwc1 $f2,0x10($a2)
/* f0d5b48: 4602603c */ c.lt.s $f12,$f2
/* f0d5b4c: 00000000 */ nop
/* f0d5b50: 4502003d */ bc1fl .L0f0d5c48
/* f0d5b54: 24420001 */ addiu $v0,$v0,0x1
/* f0d5b58: c5100000 */ lwc1 $f16,0x0($t0)
/* f0d5b5c: c4c40000 */ lwc1 $f4,0x0($a2)
/* f0d5b60: c4c60004 */ lwc1 $f6,0x4($a2)
/* f0d5b64: c5080004 */ lwc1 $f8,0x4($t0)
/* f0d5b68: 46102381 */ sub.s $f14,$f4,$f16
/* f0d5b6c: c5040008 */ lwc1 $f4,0x8($t0)
/* f0d5b70: c4ca0008 */ lwc1 $f10,0x8($a2)
/* f0d5b74: 46083481 */ sub.s $f18,$f6,$f8
/* f0d5b78: 00690019 */ multu $v1,$t1
/* f0d5b7c: 2469ffff */ addiu $t1,$v1,-1
/* f0d5b80: 46045181 */ sub.s $f6,$f10,$f4
/* f0d5b84: 0049082a */ slt $at,$v0,$t1
/* f0d5b88: 01203825 */ or $a3,$t1,$zero
/* f0d5b8c: 0009c880 */ sll $t9,$t1,0x2
/* f0d5b90: e7a6002c */ swc1 $f6,0x2c($sp)
/* f0d5b94: 46001181 */ sub.s $f6,$f2,$f0
/* f0d5b98: c4c8000c */ lwc1 $f8,0xc($a2)
/* f0d5b9c: c50a000c */ lwc1 $f10,0xc($t0)
/* f0d5ba0: 46006081 */ sub.s $f2,$f12,$f0
/* f0d5ba4: e7a60020 */ swc1 $f6,0x20($sp)
/* f0d5ba8: 0000c012 */ mflo $t8
/* f0d5bac: 460a4101 */ sub.s $f4,$f8,$f10
/* f0d5bb0: c7a80020 */ lwc1 $f8,0x20($sp)
/* f0d5bb4: 02183021 */ addu $a2,$s0,$t8
/* f0d5bb8: 46081283 */ div.s $f10,$f2,$f8
/* f0d5bbc: e7a40024 */ swc1 $f4,0x24($sp)
/* f0d5bc0: e7aa0008 */ swc1 $f10,0x8($sp)
/* f0d5bc4: c7a40008 */ lwc1 $f4,0x8($sp)
/* f0d5bc8: 460e2182 */ mul.s $f6,$f4,$f14
/* f0d5bcc: 46068200 */ add.s $f8,$f16,$f6
/* f0d5bd0: e4c80000 */ swc1 $f8,0x0($a2)
/* f0d5bd4: c7a40008 */ lwc1 $f4,0x8($sp)
/* f0d5bd8: c50a0004 */ lwc1 $f10,0x4($t0)
/* f0d5bdc: 46122182 */ mul.s $f6,$f4,$f18
/* f0d5be0: 46065200 */ add.s $f8,$f10,$f6
/* f0d5be4: e4c80004 */ swc1 $f8,0x4($a2)
/* f0d5be8: c7a40008 */ lwc1 $f4,0x8($sp)
/* f0d5bec: c7aa002c */ lwc1 $f10,0x2c($sp)
/* f0d5bf0: c5080008 */ lwc1 $f8,0x8($t0)
/* f0d5bf4: 460a2182 */ mul.s $f6,$f4,$f10
/* f0d5bf8: 46064100 */ add.s $f4,$f8,$f6
/* f0d5bfc: e4c40008 */ swc1 $f4,0x8($a2)
/* f0d5c00: c7a80024 */ lwc1 $f8,0x24($sp)
/* f0d5c04: c7aa0008 */ lwc1 $f10,0x8($sp)
/* f0d5c08: c504000c */ lwc1 $f4,0xc($t0)
/* f0d5c0c: e4cc0010 */ swc1 $f12,0x10($a2)
/* f0d5c10: 46085182 */ mul.s $f6,$f10,$f8
/* f0d5c14: 46062280 */ add.s $f10,$f4,$f6
/* f0d5c18: 10200007 */ beqz $at,.L0f0d5c38
/* f0d5c1c: e4ca000c */ swc1 $f10,0xc($a2)
/* f0d5c20: 00b93021 */ addu $a2,$a1,$t9
.L0f0d5c24:
/* f0d5c24: 8cca0000 */ lw $t2,0x0($a2)
/* f0d5c28: 24e7ffff */ addiu $a3,$a3,-1
/* f0d5c2c: 24c6fffc */ addiu $a2,$a2,-4
/* f0d5c30: 1447fffc */ bne $v0,$a3,.L0f0d5c24
/* f0d5c34: acca0008 */ sw $t2,0x8($a2)
.L0f0d5c38:
/* f0d5c38: ac830004 */ sw $v1,0x4($a0)
/* f0d5c3c: 10000005 */ b .L0f0d5c54
/* f0d5c40: 24020001 */ addiu $v0,$zero,0x1
/* f0d5c44: 24420001 */ addiu $v0,$v0,0x1
.L0f0d5c48:
/* f0d5c48: 1443ffb1 */ bne $v0,$v1,.L0f0d5b10
/* f0d5c4c: 24840004 */ addiu $a0,$a0,0x4
.L0f0d5c50:
/* f0d5c50: 00001025 */ or $v0,$zero,$zero
.L0f0d5c54:
/* f0d5c54: 8fb00004 */ lw $s0,0x4($sp)
/* f0d5c58: 03e00008 */ jr $ra
/* f0d5c5c: 27bd0048 */ addiu $sp,$sp,0x48
);
if (fillfrac < 0.0f) {
fillfrac = 0.0f;
}
if (fillfrac > 1.0f) {
fillfrac = 1.0f;
}
for (i = 0; i < maxlen; i++) {
if (indexes[i] > len) {
len = indexes[i];
}
}
len++;
for (i = 0; i < len; i++) {
s32 index1 = indexes[i];
s32 index2 = indexes[i + 1];
f32 x1;
f32 x2;
f32 y1;
f32 y2;
f32 tmp1;
f32 tmp2;
if (markers[index1].frac < fillfrac && markers[index2].frac > fillfrac) {
x1 = markers[index2].x1 - markers[index1].x1;
y1 = markers[index2].y1 - markers[index1].y1;
x2 = markers[index2].x2 - markers[index1].x2;
y2 = markers[index2].y2 - markers[index1].y2;
tmp1 = markers[index2].frac - markers[index1].frac;
tmp2 = fillfrac - markers[index1].frac;
markers[len].x1 = markers[index1].x1 + tmp2 / tmp1 * x1;
markers[len].y1 = markers[index1].y1 + tmp2 / tmp1 * y1;
markers[len].x2 = markers[index1].x2 + tmp2 / tmp1 * x2;
markers[len].y2 = markers[index1].y2 + tmp2 / tmp1 * y2;
markers[len].frac = fillfrac;
for (j = len - 1; j > i; j--) {
indexes[j + 1] = indexes[j];
}
indexes[i + 1] = len;
return 1;
}
}
return 0;
}
u32 healthbarChooseColour(u32 fillcol, u32 bgcol, f32 fillexcfade, f32 fillincfade, f32 frac)
{