diff --git a/code/fgame/g_utils.cpp b/code/fgame/g_utils.cpp index 5d49505e..fe130f8d 100644 --- a/code/fgame/g_utils.cpp +++ b/code/fgame/g_utils.cpp @@ -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); diff --git a/code/fgame/g_utils.h b/code/fgame/g_utils.h index 41663ea8..ebc73138 100644 --- a/code/fgame/g_utils.h +++ b/code/fgame/g_utils.h @@ -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); diff --git a/code/fgame/game.cpp b/code/fgame/game.cpp index c323bce0..29d5c47b 100644 --- a/code/fgame/game.cpp +++ b/code/fgame/game.cpp @@ -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]); } } diff --git a/code/fgame/movegrid.cpp b/code/fgame/movegrid.cpp index 7adfdae5..feb60248 100644 --- a/code/fgame/movegrid.cpp +++ b/code/fgame/movegrid.cpp @@ -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]); diff --git a/code/fgame/movegrid.h b/code/fgame/movegrid.h index 4740aaab..6847d1b2 100644 --- a/code/fgame/movegrid.h +++ b/code/fgame/movegrid.h @@ -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; diff --git a/code/fgame/player.h b/code/fgame/player.h index 1435777c..c43619c9 100644 --- a/code/fgame/player.h +++ b/code/fgame/player.h @@ -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) diff --git a/code/fgame/vehicle.cpp b/code/fgame/vehicle.cpp index 50a9868c..00f79357 100644 --- a/code/fgame/vehicle.cpp +++ b/code/fgame/vehicle.cpp @@ -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);