From 074bd8b2b37227253a932f19fd601eb95376b093 Mon Sep 17 00:00:00 2001 From: Xav101 Date: Mon, 18 May 2026 23:29:51 -0400 Subject: [PATCH] public: add unaligned access handlers for new big endian port --- common/xash3d_types.h | 7 +++++++ public/xash3d_mathlib.c | 10 +++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/common/xash3d_types.h b/common/xash3d_types.h index 9d88f023..0f1fcd82 100644 --- a/common/xash3d_types.h +++ b/common/xash3d_types.h @@ -273,4 +273,11 @@ typedef int qboolean; #define HostFourCC( a, b, c, d ) LittleFourCC( a, b, c, d ) #endif +static inline short UnalignedShort( short *x ) +{ + short y; + memcpy( &y, x, sizeof( y ) ); + return y; +} + #endif // XASH_TYPES_H diff --git a/public/xash3d_mathlib.c b/public/xash3d_mathlib.c index bf971c17..8eea183d 100644 --- a/public/xash3d_mathlib.c +++ b/public/xash3d_mathlib.c @@ -454,23 +454,23 @@ void R_StudioCalcBones( int frame, float s, const mstudiobone_t *pbone, const ms if( panimvalue->num.valid > j ) { - v1[i] = panimvalue[j + 1].value; + v1[i] = UnalignedShort( &( panimvalue[j + 1].value ) ); if( panimvalue->num.valid > j + 1 ) - v2[i] = panimvalue[j + 2].value; + v2[i] = UnalignedShort( &( panimvalue[j + 2].value ) ); else if( panimvalue->num.total > j + 1 ) v2[i] = v1[i]; else - v2[i] = panimvalue[panimvalue->num.valid + 2].value; + v2[i] = UnalignedShort( &( panimvalue[panimvalue->num.valid + 2].value ) ); } else { - v1[i] = panimvalue[panimvalue->num.valid].value; + v1[i] = UnalignedShort( &( panimvalue[panimvalue->num.valid].value ) ); if( panimvalue->num.total > j + 1 ) v2[i] = v1[i]; else - v2[i] = panimvalue[panimvalue->num.valid + 2].value; + v2[i] = UnalignedShort( &( panimvalue[panimvalue->num.valid + 2].value ) ); } v1[i] = pbone->value[i] + v1[i] * pbone->scale[i] + fadj;