Fix archive data between 64-bit and 32-bit architectures

This commit is contained in:
smallmodel 2024-11-11 17:52:24 +01:00
parent fef30ff3d5
commit d400d8927d
No known key found for this signature in database
GPG key ID: 9F2D623CEDF08512
7 changed files with 69 additions and 5 deletions

View file

@ -1143,6 +1143,40 @@ Vector G_PredictPosition(Vector start, Vector target, Vector targetvelocity, flo
return projected;
}
/*
==============
G_ArchiveTrace
==============
*/
void G_ArchiveTrace(Archiver& arc, trace_t *trace)
{
arc.ArchiveBoolean(&trace->allsolid);
arc.ArchiveBoolean(&trace->startsolid);
arc.ArchiveFloat(&trace->fraction);
arc.ArchiveVec3(trace->endpos);
arc.ArchiveVec3(trace->plane.normal);
arc.ArchiveFloat(&trace->plane.dist);
arc.ArchiveByte(&trace->plane.type);
arc.ArchiveByte(&trace->plane.signbits);
arc.ArchiveInteger(&trace->surfaceFlags);
arc.ArchiveInteger(&trace->shaderNum);
arc.ArchiveInteger(&trace->contents);
arc.ArchiveInteger(&trace->entityNum);
arc.ArchiveInteger(&trace->location);
}
/*
==============
G_ArchiveClient
==============
*/
void G_ArchiveClient(Archiver& arc, gclient_t* client)
{
arc.ArchiveVec3(client->cmd_angles);
arc.ArchiveInteger(&client->lastActiveTime);
arc.ArchiveInteger(&client->activeWarning);
}
/*
==============
G_ArchiveEdict
@ -1160,7 +1194,7 @@ void G_ArchiveEdict(Archiver& arc, gentity_t *edict)
//
if (edict->client) {
arc.ArchiveRaw(edict->client, sizeof(*edict->client));
G_ArchiveClient(arc, edict->client);
}
arc.ArchiveInteger(&edict->s.beam_entnum);

View file

@ -30,6 +30,8 @@ class SimpleEntity;
class SimpleArchivedEntity;
class ScriptThread;
void G_ArchiveTrace(Archiver& arc, trace_t* trace);
void G_ArchiveClient(Archiver& arc, gclient_t* client);
void G_ArchiveEdict(Archiver& arc, gentity_t *edict);
void G_AllocDebugLines(void);

View file

@ -121,7 +121,7 @@ void Game::Archive(Archiver& arc)
}
for (i = 0; i < maxclients; i++) {
arc.ArchiveRaw(&clients[i], sizeof(gclient_t));
G_ArchiveClient(arc, &clients[i]);
}
}

View file

@ -218,10 +218,23 @@ qboolean cMoveGrid::CheckStuck(void)
void cMoveGrid::Archive(Archiver& arc)
{
int i;
arc.ArchiveInteger(&m_iXRes);
arc.ArchiveInteger(&m_iYRes);
arc.ArchiveInteger(&m_iZRes);
arc.ArchiveRaw(&v, sizeof(vmove_t));
arc.ArchiveFloat(&v.frametime);
arc.ArchiveFloat(&v.desired_speed);
arc.ArchiveInteger(&v.tracemask);
arc.ArchiveInteger(&v.numtouch);
for (i = 0; i < ARRAY_LEN(v.touchents); i++) {
arc.ArchiveInteger(&v.touchents[i]);
}
arc.ArchiveVec3(v.mins);
arc.ArchiveVec3(v.maxs);
arc.ArchiveVec3(orientation[0]);
arc.ArchiveVec3(orientation[1]);
arc.ArchiveVec3(orientation[2]);

View file

@ -39,7 +39,7 @@ typedef struct vehicleState_s {
int entityNum;
vec2_t desired_dir;
qboolean hit_obstacle;
float hit_origin[3];
vec3_t hit_origin;
vec3_t obstacle_normal;
qboolean useGravity;
} vehicleState_t;

View file

@ -1219,6 +1219,9 @@ inline void Player::Archive(Archiver& arc)
for (int i = 0; i < MAX_SPEED_MULTIPLIERS; i++) {
arc.ArchiveFloat(&speed_multiplier[i]);
}
arc.ArchiveInteger(&client->ps.iViewModelAnim);
arc.ArchiveInteger(&client->ps.iViewModelAnimChanged);
}
inline Camera *Player::CurrentCamera(void)

View file

@ -6782,7 +6782,19 @@ void Vehicle::Archive(Archiver& arc)
arc.ArchiveBoolean(&m_bRemoveOnDeath);
arc.ArchiveBoolean(&m_bStopEnabled);
arc.ArchiveBoolean(&m_bEnableSkidding);
arc.ArchiveRaw(&vs, sizeof(vehicleState_t));
arc.ArchiveVec3(vs.origin);
arc.ArchiveVec3(vs.velocity);
arc.ArchiveInteger(&vs.groundEntityNum);
arc.ArchiveBoolean(&vs.walking);
arc.ArchiveBoolean(&vs.groundPlane);
G_ArchiveTrace(arc, &vs.groundTrace);
arc.ArchiveInteger(&vs.entityNum);
arc.ArchiveVec2(vs.desired_dir);
arc.ArchiveBoolean(&vs.hit_obstacle);
arc.ArchiveVec3(vs.hit_origin);
arc.ArchiveVec3(vs.obstacle_normal);
arc.ArchiveBoolean(&vs.useGravity);
if (!arc.Saving()) {
m_sMoveGrid = new cMoveGrid(3, 3, 1);