quake3live/code/game
serge_shubin 7b942c77cf Server-side demo recording and playback (netdemo) — unified
Complete netdemo feature as a single commit on implant2:

Recording:
- svdemo_record/svdemo_stop commands
- Delta-compressed entity states and player states
- Server command capture (chat, prints)
- Configstring change tracking
- Keyframes at configurable interval for seeking
- Auto-record on map load (svdemo_autorecord)
- Auto-stop on map change, clean shutdown handling

Playback:
- svdemo_play loads map, spectator auto-connects
- Free camera with client-owned PmoveSingle (real-time, works paused)
- Player follow mode with full HUD
- Scoreboard with recorded player scores
- svdemo_pause with frozen trajectories and smooth unpause
- svdemo_seek (fast, keyframe-accurate) and svdemo_seekexact (precise)
- Seeking works from paused state
- SNAPFLAG_RESET_ENTITIES for clean map_restart and seek transitions
- Proper session/cvar/configstring handling across transitions
- svdemo_pauseEmpty waits for spectator before starting

Engine changes:
- usercmd_t: optional origin field for client-owned PVS
- msg.c: serialize optional usercmd origin
- cl_parse.c: SERVERCOUNT time delta reset for seek/unpause
- CG_SETCLIENTORIGIN trap for cgame-to-engine origin communication

cgame changes:
- Client-owned spectator camera (svDemoCameraPs)
- CS_SVDEMO configstring detection
- SNAPFLAG_RESET_ENTITIES entity interpolation reset
- Backwards time handling for seeking
- Local entity cleanup on seek
- Pause detection from frozen snapshot time
- Suppress connection interrupted during demo playback

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 00:54:32 +08:00
..
ai_chat.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
ai_chat.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
ai_cmd.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
ai_cmd.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
ai_dmnet.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
ai_dmnet.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
ai_dmq3.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
ai_dmq3.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
ai_main.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
ai_main.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
ai_team.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
ai_team.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
ai_vcmd.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
ai_vcmd.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
be_aas.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
be_ai_char.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
be_ai_chat.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
be_ai_gen.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
be_ai_goal.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
be_ai_move.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
be_ai_weap.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
be_ea.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
bg_lib.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
bg_lib.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
bg_local.h QL stair traversal: conditional velocity clip + air steps 2026-03-21 15:08:16 +08:00
bg_misc.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
bg_pmove.c QL stair traversal: conditional velocity clip + air steps 2026-03-21 15:08:16 +08:00
bg_public.h Server-side demo recording and playback (netdemo) — unified 2026-03-25 00:54:32 +08:00
bg_slidemove.c QL step jump with master gate and projected validation 2026-03-21 20:58:11 +08:00
botlib.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
chars.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
Conscript Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_active.c Server-side demo recording and playback (netdemo) — unified 2026-03-25 00:54:32 +08:00
g_arenas.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_bot.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_client.c Server-side demo recording and playback (netdemo) — unified 2026-03-25 00:54:32 +08:00
g_cmds.c Server-side demo recording and playback (netdemo) — unified 2026-03-25 00:54:32 +08:00
g_combat.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_items.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_local.h Server-side demo recording and playback (netdemo) — unified 2026-03-25 00:54:32 +08:00
g_main.c Server-side demo recording and playback (netdemo) — unified 2026-03-25 00:54:32 +08:00
g_mem.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_misc.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_missile.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_mover.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_public.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_rankings.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_rankings.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_session.c Server-side demo recording and playback (netdemo) — unified 2026-03-25 00:54:32 +08:00
g_spawn.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_svcmds.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_syscalls.asm Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_syscalls.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_target.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_team.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_team.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_trigger.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_utils.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
g_weapon.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
game.bat Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
game.def Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
game.q3asm Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
game.sh Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
game.vcxproj Copy game/cgame/ui to missionpack/ for TA configurations 2026-03-18 16:06:35 +08:00
game.vcxproj.filters Migrate to Visual Studio 2022: replace .vcproj with .vcxproj, add .gitignore 2026-03-18 13:36:28 +08:00
game_ta.bat Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
game_ta.q3asm Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
game_ta.sh Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
inv.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
match.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
q_math.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
q_shared.c Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
q_shared.h Server-side demo recording and playback (netdemo) — unified 2026-03-25 00:54:32 +08:00
surfaceflags.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00
syn.h Initial commit: Quake 3 1.32b GPL source 2026-03-18 13:32:24 +08:00