From ded38bbf44c88e00ebe5a82a80850a157a03b8d1 Mon Sep 17 00:00:00 2001 From: Denis Pauk Date: Wed, 25 Dec 2024 11:30:36 +0200 Subject: [PATCH] game: sync target_autosave with ReRelease code Based on: https://github.com/Paril/quake2-rerelease-dll.git --- src/game/g_target.c | 34 +++++++++++++++++++++++ src/game/header/local.h | 1 + src/game/savegame/tables/gamefunc_decs.h | 1 + src/game/savegame/tables/gamefunc_list.h | 1 + src/game/savegame/tables/spawnfunc_decs.h | 1 + src/game/savegame/tables/spawnfunc_list.h | 1 + 6 files changed, 39 insertions(+) diff --git a/src/game/g_target.c b/src/game/g_target.c index 90aa00d4..438d0825 100644 --- a/src/game/g_target.c +++ b/src/game/g_target.c @@ -1627,6 +1627,40 @@ SP_target_music(edict_t* self) self->use = target_music_use; } +/* + * QUAKED target_autosave (0 1 0) (-8 -8 -8) (8 8 8) + * + * Auto save on command. + */ +void +use_target_autosave(edict_t *ent, edict_t *other, edict_t *activator) +{ + float save_time = gi.cvar("g_athena_auto_save_min_time", "60", CVAR_NOSET)->value; + + if (level.time - level.next_auto_save > save_time) + { + gi.AddCommandString("save quick\n"); + level.next_auto_save = level.time; + } +} + +void +SP_target_autosave(edict_t *self) +{ + if (!self) + { + return; + } + + if (deathmatch->value) + { + G_FreeEdict(self); + return; + } + + self->use = use_target_autosave; +} + /* * QUAKED target_sky (1 0 0) (-8 -8 -8) (8 8 8) * diff --git a/src/game/header/local.h b/src/game/header/local.h index 36bbd409..eecc2af1 100644 --- a/src/game/header/local.h +++ b/src/game/header/local.h @@ -386,6 +386,7 @@ typedef struct int disguise_violation_framenum; char *start_items; /* level start items */ + float next_auto_save; /* target_autosave */ } level_locals_t; /* spawn_temp_t is only used to hold entity field values that diff --git a/src/game/savegame/tables/gamefunc_decs.h b/src/game/savegame/tables/gamefunc_decs.h index c994db8e..de45d31d 100644 --- a/src/game/savegame/tables/gamefunc_decs.h +++ b/src/game/savegame/tables/gamefunc_decs.h @@ -1439,6 +1439,7 @@ extern void turret_wall_spawn ( edict_t * turret ) ; extern void use_killbox ( edict_t * self , edict_t * other , edict_t * activator ) ; extern void use_nuke ( edict_t * self , edict_t * other , edict_t * activator ) ; extern void use_scanner ( edict_t * self ) ; +extern void use_target_autosave ( edict_t * self , edict_t * other , edict_t * activator ) ; extern void use_target_blaster ( edict_t * self , edict_t * other , edict_t * activator ) ; extern void use_target_camera ( edict_t * self , edict_t * other , edict_t * activator); extern void use_target_changelevel ( edict_t * self , edict_t * other , edict_t * activator ) ; diff --git a/src/game/savegame/tables/gamefunc_list.h b/src/game/savegame/tables/gamefunc_list.h index e14190f1..9d7062ac 100644 --- a/src/game/savegame/tables/gamefunc_list.h +++ b/src/game/savegame/tables/gamefunc_list.h @@ -1435,6 +1435,7 @@ {"use_killbox", (byte *)use_killbox}, {"use_nuke", (byte *)use_nuke}, {"use_scanner", (byte *)use_scanner}, +{"use_target_autosave", (byte *)use_target_autosave}, {"use_target_blaster", (byte *)use_target_blaster}, {"use_target_camera", (byte *)use_target_camera}, {"use_target_changelevel", (byte *)use_target_changelevel}, diff --git a/src/game/savegame/tables/spawnfunc_decs.h b/src/game/savegame/tables/spawnfunc_decs.h index a9e85b2d..25246db1 100644 --- a/src/game/savegame/tables/spawnfunc_decs.h +++ b/src/game/savegame/tables/spawnfunc_decs.h @@ -165,6 +165,7 @@ extern void SP_point_combat(edict_t * self); extern void SP_rotating_light(edict_t * self); extern void SP_target_actor(edict_t * self); extern void SP_target_anger(edict_t * self); +extern void SP_target_autosave(edict_t * self); extern void SP_target_blacklight ( edict_t * ent ) ; extern void SP_target_blaster(edict_t * self); extern void SP_target_camera(edict_t* self); diff --git a/src/game/savegame/tables/spawnfunc_list.h b/src/game/savegame/tables/spawnfunc_list.h index 1788a0f6..3ac31f72 100644 --- a/src/game/savegame/tables/spawnfunc_list.h +++ b/src/game/savegame/tables/spawnfunc_list.h @@ -171,6 +171,7 @@ {"rotating_light", SP_rotating_light}, {"target_actor", SP_target_actor}, {"target_anger", SP_target_anger}, +{"target_autosave", SP_target_autosave}, {"target_blacklight", SP_target_blacklight}, {"target_blaster", SP_target_blaster}, {"target_camera", SP_target_camera},