forked from Ports/goldeneye-pc-port
port: D392 — train-intro soldier pose: read firing-table fields by name on PC (ABI/layout only)
chrlvUpdateAimendbackShoulders read the leading anim union of weapon_firing_animation_table through raw (f32*) slots [12/13/16/17]. On PC the union widens four->eight bytes, so those offsets alias the wrong fields and the intro soldier hunched with the hand through the torso (D392, vs the 1964 reference). The #ifdef PORT arm reads the intended limits/arm fractions by name (config->max_up/max_down, free_arm_frac_up/down); the non-PORT arm is untouched. No logic or behavior change beyond the pointer-width misread; D392 finding + Train aim-angle probe confirm, user visually verified against 1964.
This commit is contained in:
1 parent
c214fa7815
commit
368daf1242
1 file changed
+28
@@ -6212,6 +6212,33 @@ void chrlvUpdateAimendbackShoulders(ChrRecord *self, void *arg1, s32 same, s32 s
|
|||||||
next_aimendback = 0.0f;
|
next_aimendback = 0.0f;
|
||||||
next_lshoulder = next;
|
next_lshoulder = next;
|
||||||
|
|
||||||
|
#ifdef PORT
|
||||||
|
/* The leading anim union in weapon_firing_animation_table grows from
|
||||||
|
* four to eight bytes on PC. N64's float slots [12,13,16,17] are now
|
||||||
|
* different fields; read the intended limits/arm fractions by name. */
|
||||||
|
if (arg1 != NULL)
|
||||||
|
{
|
||||||
|
struct weapon_firing_animation_table *config = arg1;
|
||||||
|
if (config->max_up < next)
|
||||||
|
{
|
||||||
|
next_aimendback = next - config->max_up;
|
||||||
|
next_lshoulder = config->max_up;
|
||||||
|
}
|
||||||
|
else if (next < config->max_down)
|
||||||
|
{
|
||||||
|
next_aimendback = next - config->max_down;
|
||||||
|
next_lshoulder = config->max_down;
|
||||||
|
}
|
||||||
|
if (next_lshoulder > 0.0f)
|
||||||
|
{
|
||||||
|
next_rshoulder = config->free_arm_frac_up * next_lshoulder;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
next_rshoulder = config->free_arm_frac_down * next_lshoulder;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
if (arg1 != NULL)
|
if (arg1 != NULL)
|
||||||
{
|
{
|
||||||
if (((f32*)arg1)[12] < next)
|
if (((f32*)arg1)[12] < next)
|
||||||
@@ -6235,6 +6262,7 @@ void chrlvUpdateAimendbackShoulders(ChrRecord *self, void *arg1, s32 same, s32 s
|
|||||||
next_rshoulder = ((f32*)arg1)[17] * next_lshoulder;
|
next_rshoulder = ((f32*)arg1)[17] * next_lshoulder;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (swap != 0)
|
if (swap != 0)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in new issue
Block a user