Decompile applySpeed
This commit is contained in:
parent
5368c4d386
commit
ea7a151723
|
|
@ -3293,7 +3293,7 @@ void bwalkUpdateCrouchOffset(void)
|
|||
f32 prevcrouchoffsetrealsmall = g_Vars.currentplayer->crouchoffsetrealsmall;
|
||||
|
||||
// f32 *frac, f32 maxfrac, f32 *fracspeed, f32 accel, f32 decel, f32 maxspeed
|
||||
func0f06d90c(&g_Vars.currentplayer->crouchoffset, targetoffset,
|
||||
applySpeed(&g_Vars.currentplayer->crouchoffset, targetoffset,
|
||||
&g_Vars.currentplayer->crouchspeed, PALUPF(0.5f), PALUPF(0.5f), PALUPF(5.0f));
|
||||
|
||||
bwalkUpdateCrouchOffsetReal();
|
||||
|
|
|
|||
|
|
@ -10360,149 +10360,78 @@ glabel var7f1aa26c
|
|||
);
|
||||
#endif
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel func0f06d90c
|
||||
/* f06d90c: 27bdffd8 */ addiu $sp,$sp,-40
|
||||
/* f06d910: 3c03800a */ lui $v1,%hi(g_Vars)
|
||||
/* f06d914: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars)
|
||||
/* f06d918: 8c6e0038 */ lw $t6,0x38($v1)
|
||||
/* f06d91c: f7b40008 */ sdc1 $f20,0x8($sp)
|
||||
/* f06d920: 4487a000 */ mtc1 $a3,$f20
|
||||
/* f06d924: f7ba0020 */ sdc1 $f26,0x20($sp)
|
||||
/* f06d928: f7b80018 */ sdc1 $f24,0x18($sp)
|
||||
/* f06d92c: f7b60010 */ sdc1 $f22,0x10($sp)
|
||||
/* f06d930: 44857000 */ mtc1 $a1,$f14
|
||||
/* f06d934: c4c00000 */ lwc1 $f0,0x0($a2)
|
||||
/* f06d938: 19c0006a */ blez $t6,.L0f06dae4
|
||||
/* f06d93c: 00001025 */ or $v0,$zero,$zero
|
||||
/* f06d940: 3c013f00 */ lui $at,0x3f00
|
||||
/* f06d944: 4481d000 */ mtc1 $at,$f26
|
||||
/* f06d948: 4480c000 */ mtc1 $zero,$f24
|
||||
/* f06d94c: c7b2003c */ lwc1 $f18,0x3c($sp)
|
||||
/* f06d950: c7a20038 */ lwc1 $f2,0x38($sp)
|
||||
/* f06d954: c4900000 */ lwc1 $f16,0x0($a0)
|
||||
.L0f06d958:
|
||||
/* f06d958: 46107301 */ sub.s $f12,$f14,$f16
|
||||
/* f06d95c: 460cc03c */ c.lt.s $f24,$f12
|
||||
/* f06d960: 00000000 */ nop
|
||||
/* f06d964: 4502002e */ bc1fl .L0f06da20
|
||||
/* f06d968: 4618003c */ c.lt.s $f0,$f24
|
||||
/* f06d96c: 4600c03c */ c.lt.s $f24,$f0
|
||||
/* f06d970: 00000000 */ nop
|
||||
/* f06d974: 45020011 */ bc1fl .L0f06d9bc
|
||||
/* f06d978: 4612003c */ c.lt.s $f0,$f18
|
||||
/* f06d97c: 46000102 */ mul.s $f4,$f0,$f0
|
||||
/* f06d980: 00000000 */ nop
|
||||
/* f06d984: 461a2182 */ mul.s $f6,$f4,$f26
|
||||
/* f06d988: 46023203 */ div.s $f8,$f6,$f2
|
||||
/* f06d98c: 4608603e */ c.le.s $f12,$f8
|
||||
/* f06d990: 00000000 */ nop
|
||||
/* f06d994: 45000008 */ bc1f .L0f06d9b8
|
||||
/* f06d998: 00000000 */ nop
|
||||
/* f06d99c: 46020001 */ sub.s $f0,$f0,$f2
|
||||
/* f06d9a0: 4602003c */ c.lt.s $f0,$f2
|
||||
/* f06d9a4: 00000000 */ nop
|
||||
/* f06d9a8: 45020014 */ bc1fl .L0f06d9fc
|
||||
/* f06d9ac: 4600603e */ c.le.s $f12,$f0
|
||||
/* f06d9b0: 10000011 */ b .L0f06d9f8
|
||||
/* f06d9b4: 46001006 */ mov.s $f0,$f2
|
||||
.L0f06d9b8:
|
||||
/* f06d9b8: 4612003c */ c.lt.s $f0,$f18
|
||||
.L0f06d9bc:
|
||||
/* f06d9bc: 00000000 */ nop
|
||||
/* f06d9c0: 4502000e */ bc1fl .L0f06d9fc
|
||||
/* f06d9c4: 4600603e */ c.le.s $f12,$f0
|
||||
/* f06d9c8: 4618003c */ c.lt.s $f0,$f24
|
||||
/* f06d9cc: 00000000 */ nop
|
||||
/* f06d9d0: 45020004 */ bc1fl .L0f06d9e4
|
||||
/* f06d9d4: 46140000 */ add.s $f0,$f0,$f20
|
||||
/* f06d9d8: 10000002 */ b .L0f06d9e4
|
||||
/* f06d9dc: 46020000 */ add.s $f0,$f0,$f2
|
||||
/* f06d9e0: 46140000 */ add.s $f0,$f0,$f20
|
||||
.L0f06d9e4:
|
||||
/* f06d9e4: 4600903c */ c.lt.s $f18,$f0
|
||||
/* f06d9e8: 00000000 */ nop
|
||||
/* f06d9ec: 45020003 */ bc1fl .L0f06d9fc
|
||||
/* f06d9f0: 4600603e */ c.le.s $f12,$f0
|
||||
/* f06d9f4: 46009006 */ mov.s $f0,$f18
|
||||
.L0f06d9f8:
|
||||
/* f06d9f8: 4600603e */ c.le.s $f12,$f0
|
||||
.L0f06d9fc:
|
||||
/* f06d9fc: 00000000 */ nop
|
||||
/* f06da00: 45020004 */ bc1fl .L0f06da14
|
||||
/* f06da04: 46008280 */ add.s $f10,$f16,$f0
|
||||
/* f06da08: 10000036 */ b .L0f06dae4
|
||||
/* f06da0c: e48e0000 */ swc1 $f14,0x0($a0)
|
||||
/* f06da10: 46008280 */ add.s $f10,$f16,$f0
|
||||
.L0f06da14:
|
||||
/* f06da14: 1000002e */ b .L0f06dad0
|
||||
/* f06da18: e48a0000 */ swc1 $f10,0x0($a0)
|
||||
/* f06da1c: 4618003c */ c.lt.s $f0,$f24
|
||||
.L0f06da20:
|
||||
/* f06da20: 00000000 */ nop
|
||||
/* f06da24: 45020012 */ bc1fl .L0f06da70
|
||||
/* f06da28: 46009587 */ neg.s $f22,$f18
|
||||
/* f06da2c: 46000102 */ mul.s $f4,$f0,$f0
|
||||
/* f06da30: 46006287 */ neg.s $f10,$f12
|
||||
/* f06da34: 461a2182 */ mul.s $f6,$f4,$f26
|
||||
/* f06da38: 46023203 */ div.s $f8,$f6,$f2
|
||||
/* f06da3c: 4608503e */ c.le.s $f10,$f8
|
||||
/* f06da40: 00000000 */ nop
|
||||
/* f06da44: 4502000a */ bc1fl .L0f06da70
|
||||
/* f06da48: 46009587 */ neg.s $f22,$f18
|
||||
/* f06da4c: 46020000 */ add.s $f0,$f0,$f2
|
||||
/* f06da50: 46001587 */ neg.s $f22,$f2
|
||||
/* f06da54: 4600b03c */ c.lt.s $f22,$f0
|
||||
/* f06da58: 00000000 */ nop
|
||||
/* f06da5c: 45020015 */ bc1fl .L0f06dab4
|
||||
/* f06da60: 460c003e */ c.le.s $f0,$f12
|
||||
/* f06da64: 10000012 */ b .L0f06dab0
|
||||
/* f06da68: 4600b006 */ mov.s $f0,$f22
|
||||
/* f06da6c: 46009587 */ neg.s $f22,$f18
|
||||
.L0f06da70:
|
||||
/* f06da70: 4600b03c */ c.lt.s $f22,$f0
|
||||
/* f06da74: 00000000 */ nop
|
||||
/* f06da78: 4502000e */ bc1fl .L0f06dab4
|
||||
/* f06da7c: 460c003e */ c.le.s $f0,$f12
|
||||
/* f06da80: 4600c03c */ c.lt.s $f24,$f0
|
||||
/* f06da84: 00000000 */ nop
|
||||
/* f06da88: 45020004 */ bc1fl .L0f06da9c
|
||||
/* f06da8c: 46140001 */ sub.s $f0,$f0,$f20
|
||||
/* f06da90: 10000002 */ b .L0f06da9c
|
||||
/* f06da94: 46020001 */ sub.s $f0,$f0,$f2
|
||||
/* f06da98: 46140001 */ sub.s $f0,$f0,$f20
|
||||
.L0f06da9c:
|
||||
/* f06da9c: 4616003c */ c.lt.s $f0,$f22
|
||||
/* f06daa0: 00000000 */ nop
|
||||
/* f06daa4: 45020003 */ bc1fl .L0f06dab4
|
||||
/* f06daa8: 460c003e */ c.le.s $f0,$f12
|
||||
/* f06daac: 4600b006 */ mov.s $f0,$f22
|
||||
.L0f06dab0:
|
||||
/* f06dab0: 460c003e */ c.le.s $f0,$f12
|
||||
.L0f06dab4:
|
||||
/* f06dab4: 00000000 */ nop
|
||||
/* f06dab8: 45020004 */ bc1fl .L0f06dacc
|
||||
/* f06dabc: 46008100 */ add.s $f4,$f16,$f0
|
||||
/* f06dac0: 10000008 */ b .L0f06dae4
|
||||
/* f06dac4: e48e0000 */ swc1 $f14,0x0($a0)
|
||||
/* f06dac8: 46008100 */ add.s $f4,$f16,$f0
|
||||
.L0f06dacc:
|
||||
/* f06dacc: e4840000 */ swc1 $f4,0x0($a0)
|
||||
.L0f06dad0:
|
||||
/* f06dad0: 8c6f0038 */ lw $t7,0x38($v1)
|
||||
/* f06dad4: 24420001 */ addiu $v0,$v0,0x1
|
||||
/* f06dad8: 004f082a */ slt $at,$v0,$t7
|
||||
/* f06dadc: 5420ff9e */ bnezl $at,.L0f06d958
|
||||
/* f06dae0: c4900000 */ lwc1 $f16,0x0($a0)
|
||||
.L0f06dae4:
|
||||
/* f06dae4: e4c00000 */ swc1 $f0,0x0($a2)
|
||||
/* f06dae8: d7ba0020 */ ldc1 $f26,0x20($sp)
|
||||
/* f06daec: d7b80018 */ ldc1 $f24,0x18($sp)
|
||||
/* f06daf0: d7b60010 */ ldc1 $f22,0x10($sp)
|
||||
/* f06daf4: d7b40008 */ ldc1 $f20,0x8($sp)
|
||||
/* f06daf8: 03e00008 */ jr $ra
|
||||
/* f06dafc: 27bd0028 */ addiu $sp,$sp,0x28
|
||||
);
|
||||
/**
|
||||
* Update a speed and distance travelled, factoring in acceleration,
|
||||
* deceleration and the global update multiplier.
|
||||
*
|
||||
* The new speed and distance done are written back to those pointers.
|
||||
*/
|
||||
void applySpeed(f32 *distdone, f32 maxdist, f32 *speedptr, f32 accel, f32 decel, f32 maxspeed)
|
||||
{
|
||||
f32 speed = *speedptr;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < g_Vars.lvupdate240_60; i++) {
|
||||
f32 limit = speed * speed * 0.5f / decel;
|
||||
f32 distremaining = maxdist - *distdone;
|
||||
|
||||
if (distremaining > 0.0f) {
|
||||
if (speed > 0.0f && distremaining <= limit) {
|
||||
// Slow down for end
|
||||
speed -= decel;
|
||||
|
||||
if (speed < decel) {
|
||||
speed = decel;
|
||||
}
|
||||
} else if (speed < maxspeed) {
|
||||
// Accelerate
|
||||
if (speed < 0.0f) {
|
||||
speed += decel;
|
||||
} else {
|
||||
speed += accel;
|
||||
}
|
||||
|
||||
if (speed > maxspeed) {
|
||||
speed = maxspeed;
|
||||
}
|
||||
}
|
||||
|
||||
if (speed >= distremaining) {
|
||||
*distdone = maxdist;
|
||||
break;
|
||||
}
|
||||
|
||||
*distdone += speed;
|
||||
} else {
|
||||
if (speed < 0.0f && -distremaining <= limit) {
|
||||
speed += decel;
|
||||
|
||||
if (speed > -decel) {
|
||||
speed = -decel;
|
||||
}
|
||||
} else if (speed > -maxspeed) {
|
||||
if (speed > 0.0f) {
|
||||
speed -= decel;
|
||||
} else {
|
||||
speed -= accel;
|
||||
}
|
||||
|
||||
if (speed < -maxspeed) {
|
||||
speed = -maxspeed;
|
||||
}
|
||||
}
|
||||
|
||||
if (speed <= distremaining) {
|
||||
*distdone = maxdist;
|
||||
break;
|
||||
}
|
||||
|
||||
*distdone += speed;
|
||||
}
|
||||
}
|
||||
|
||||
*speedptr = speed;
|
||||
}
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel func0f06db00
|
||||
|
|
@ -10551,7 +10480,7 @@ glabel var7f1aa280
|
|||
/* f06db6c: 44056000 */ mfc1 $a1,$f12
|
||||
/* f06db70: e7b00010 */ swc1 $f16,0x10($sp)
|
||||
/* f06db74: afa40020 */ sw $a0,0x20($sp)
|
||||
/* f06db78: 0fc1b643 */ jal func0f06d90c
|
||||
/* f06db78: 0fc1b643 */ jal applySpeed
|
||||
/* f06db7c: e7b20014 */ swc1 $f18,0x14($sp)
|
||||
/* f06db80: 8fa40020 */ lw $a0,0x20($sp)
|
||||
/* f06db84: 44802000 */ mtc1 $zero,$f4
|
||||
|
|
@ -16984,7 +16913,7 @@ glabel var7f1ab5c0pf
|
|||
/* f071bdc: e7a00010 */ swc1 $f0,0x10($sp)
|
||||
/* f071be0: c5c60010 */ lwc1 $f6,0x10($t6)
|
||||
/* f071be4: 44070000 */ mfc1 $a3,$f0
|
||||
/* f071be8: 0fc1b6e5 */ jal func0f06d90c
|
||||
/* f071be8: 0fc1b6e5 */ jal applySpeed
|
||||
/* f071bec: e7a60014 */ swc1 $f6,0x14($sp)
|
||||
/* f071bf0: 8fa200c0 */ lw $v0,0xc0($sp)
|
||||
/* f071bf4: c6000008 */ lwc1 $f0,0x8($s0)
|
||||
|
|
@ -17845,7 +17774,7 @@ glabel var7f1aa314
|
|||
/* f071954: e7a00010 */ swc1 $f0,0x10($sp)
|
||||
/* f071958: c5c60010 */ lwc1 $f6,0x10($t6)
|
||||
/* f07195c: 44070000 */ mfc1 $a3,$f0
|
||||
/* f071960: 0fc1b643 */ jal func0f06d90c
|
||||
/* f071960: 0fc1b643 */ jal applySpeed
|
||||
/* f071964: e7a60014 */ swc1 $f6,0x14($sp)
|
||||
/* f071968: 8fa200c0 */ lw $v0,0xc0($sp)
|
||||
/* f07196c: c6000008 */ lwc1 $f0,0x8($s0)
|
||||
|
|
@ -33605,7 +33534,7 @@ void liftTick(struct prop *prop)
|
|||
prevdist = lift->dist;
|
||||
#endif
|
||||
|
||||
func0f06d90c(&lift->dist, segdist, &lift->speed, lift->accel, lift->accel, lift->maxspeed);
|
||||
applySpeed(&lift->dist, segdist, &lift->speed, lift->accel, lift->accel, lift->maxspeed);
|
||||
|
||||
// If arriving at the destination, set the distance explicitly
|
||||
if (lift->speed < 1 && lift->speed > -1) {
|
||||
|
|
@ -39261,7 +39190,7 @@ glabel var7f1aa610
|
|||
/* f07b7fc: e7a00010 */ swc1 $f0,0x10($sp)
|
||||
/* f07b800: e7a00030 */ swc1 $f0,0x30($sp)
|
||||
/* f07b804: e7ae0014 */ swc1 $f14,0x14($sp)
|
||||
/* f07b808: 0fc1b643 */ jal func0f06d90c
|
||||
/* f07b808: 0fc1b643 */ jal applySpeed
|
||||
/* f07b80c: e7ae002c */ swc1 $f14,0x2c($sp)
|
||||
/* f07b810: c7b00110 */ lwc1 $f16,0x110($sp)
|
||||
/* f07b814: c7a800ec */ lwc1 $f8,0xec($sp)
|
||||
|
|
@ -39296,7 +39225,7 @@ glabel var7f1aa610
|
|||
/* f07b880: e7a00010 */ swc1 $f0,0x10($sp)
|
||||
/* f07b884: e7ae0014 */ swc1 $f14,0x14($sp)
|
||||
/* f07b888: e7a00030 */ swc1 $f0,0x30($sp)
|
||||
/* f07b88c: 0fc1b643 */ jal func0f06d90c
|
||||
/* f07b88c: 0fc1b643 */ jal applySpeed
|
||||
/* f07b890: e7a2010c */ swc1 $f2,0x10c($sp)
|
||||
/* f07b894: c7a2010c */ lwc1 $f2,0x10c($sp)
|
||||
/* f07b898: c7a800e8 */ lwc1 $f8,0xe8($sp)
|
||||
|
|
@ -39722,7 +39651,7 @@ glabel var7f1aa610
|
|||
/* f07b7fc: e7a00010 */ swc1 $f0,0x10($sp)
|
||||
/* f07b800: e7a00030 */ swc1 $f0,0x30($sp)
|
||||
/* f07b804: e7ae0014 */ swc1 $f14,0x14($sp)
|
||||
/* f07b808: 0fc1b643 */ jal func0f06d90c
|
||||
/* f07b808: 0fc1b643 */ jal applySpeed
|
||||
/* f07b80c: e7ae002c */ swc1 $f14,0x2c($sp)
|
||||
/* f07b810: c7b00110 */ lwc1 $f16,0x110($sp)
|
||||
/* f07b814: c7a800ec */ lwc1 $f8,0xec($sp)
|
||||
|
|
@ -39757,7 +39686,7 @@ glabel var7f1aa610
|
|||
/* f07b880: e7a00010 */ swc1 $f0,0x10($sp)
|
||||
/* f07b884: e7ae0014 */ swc1 $f14,0x14($sp)
|
||||
/* f07b888: e7a00030 */ swc1 $f0,0x30($sp)
|
||||
/* f07b88c: 0fc1b643 */ jal func0f06d90c
|
||||
/* f07b88c: 0fc1b643 */ jal applySpeed
|
||||
/* f07b890: e7a2010c */ swc1 $f2,0x10c($sp)
|
||||
/* f07b894: c7a2010c */ lwc1 $f2,0x10c($sp)
|
||||
/* f07b898: c7a800e8 */ lwc1 $f8,0xe8($sp)
|
||||
|
|
@ -46007,6 +45936,11 @@ glabel var7f1aa6e0
|
|||
// }
|
||||
//
|
||||
// // 7ac
|
||||
// // @bug: To calculate the speed correctly, the code needs to iterate the
|
||||
// // lvupdate multiplier, then adjust the speed and test for reaching the
|
||||
// // speedaim within each iteration. Or at least test for exceeding the
|
||||
// // speedaim after updating it. With the below implementation, a lag frame
|
||||
// // during acceleration can cause the hovercar to exceed its max speed.
|
||||
// if (hovercar->speedtime60 >= 0) {
|
||||
// if (hovercar->speedtime60 <= g_Vars.lvupdate240freal) {
|
||||
// hovercar->speed = hovercar->speedaim;
|
||||
|
|
@ -71074,7 +71008,7 @@ bool doorCalcIntendedFrac(struct doorobj *door)
|
|||
}
|
||||
}
|
||||
|
||||
func0f06d90c(&door->frac, end, &door->fracspeed, door->accel, door->decel, door->maxspeed);
|
||||
applySpeed(&door->frac, end, &door->fracspeed, door->accel, door->decel, door->maxspeed);
|
||||
|
||||
if (door->frac >= door->maxfrac) {
|
||||
door->frac = door->maxfrac;
|
||||
|
|
|
|||
|
|
@ -2664,7 +2664,7 @@ glabel var7f1a8468
|
|||
/* f017e08: 44051000 */ mfc1 $a1,$f2
|
||||
/* f017e0c: 44070000 */ mfc1 $a3,$f0
|
||||
/* f017e10: e7a00010 */ swc1 $f0,0x10($sp)
|
||||
/* f017e14: 0fc1b6e5 */ jal func0f06d90c
|
||||
/* f017e14: 0fc1b6e5 */ jal applySpeed
|
||||
/* f017e18: e7aa0014 */ swc1 $f10,0x14($sp)
|
||||
/* f017e1c: 3c028006 */ lui $v0,0x8006
|
||||
/* f017e20: 3c0b8006 */ lui $t3,0x8006
|
||||
|
|
@ -3997,7 +3997,7 @@ glabel var7f1a8468
|
|||
/* f017d2c: 44051000 */ mfc1 $a1,$f2
|
||||
/* f017d30: 44070000 */ mfc1 $a3,$f0
|
||||
/* f017d34: e7a00010 */ swc1 $f0,0x10($sp)
|
||||
/* f017d38: 0fc1b643 */ jal func0f06d90c
|
||||
/* f017d38: 0fc1b643 */ jal applySpeed
|
||||
/* f017d3c: e7aa0014 */ swc1 $f10,0x14($sp)
|
||||
/* f017d40: 3c028006 */ lui $v0,%hi(var800627a8)
|
||||
/* f017d44: 3c0b8006 */ lui $t3,%hi(var800627c4)
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ u32 func0f06c28c(void);
|
|||
u32 func0f06c8ac(void);
|
||||
u32 func0f06cd00(void);
|
||||
u32 func0f06d37c(void);
|
||||
void func0f06d90c(f32 *frac, f32 maxfrac, f32 *fracspeed, f32 accel, f32 decel, f32 maxspeed);
|
||||
void applySpeed(f32 *distdone, f32 maxdist, f32 *speed, f32 accel, f32 decel, f32 maxspeed);
|
||||
void func0f06db00(f32 *arg0, f32 arg1, f32 *arg2, f32 arg3, f32 arg4, f32 arg5);
|
||||
u32 func0f06dbd8(void);
|
||||
u32 func0f06e87c(void);
|
||||
|
|
|
|||
Loading…
Reference in New Issue