X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=sv_main.c;h=0705b7c11986ca4f433faba991217f51571df01d;hb=b6ed613006398a0962bd09c8bf89e68e5cd2ec7c;hp=a72d1c40bd47280cfc8e2127278291ef8a7cadbe;hpb=34dc0504b102dfa053cb051e0ad6ad2acc14ecad;p=xonotic%2Fdarkplaces.git diff --git a/sv_main.c b/sv_main.c index a72d1c40..0705b7c1 100644 --- a/sv_main.c +++ b/sv_main.c @@ -62,6 +62,7 @@ cvar_t sv_maxairstrafespeed = {0, "sv_maxairstrafespeed", "0", "when set, replac cvar_t sv_airstrafeaccel_qw = {0, "sv_airstrafeaccel_qw", "0", "when set, replacement for sv_airaccel_qw when just strafing"}; cvar_t sv_aircontrol = {0, "sv_aircontrol", "0", "CPMA-style air control"}; cvar_t sv_aircontrol_power = {0, "sv_aircontrol_power", "2", "CPMA-style air control exponent"}; +cvar_t sv_aircontrol_penalty = {0, "sv_aircontrol_penalty", "0", "deceleration while using CPMA-style air control"}; cvar_t sv_allowdownloads = {0, "sv_allowdownloads", "1", "whether to allow clients to download files from the server (does not affect http downloads)"}; cvar_t sv_allowdownloads_archive = {0, "sv_allowdownloads_archive", "0", "whether to allow downloads of archives (pak/pk3)"}; cvar_t sv_allowdownloads_config = {0, "sv_allowdownloads_config", "0", "whether to allow downloads of config files (cfg)"}; @@ -385,6 +386,7 @@ void SV_Init (void) Cvar_RegisterVariable (&sv_airspeedlimit_nonqw); Cvar_RegisterVariable (&sv_aircontrol); Cvar_RegisterVariable (&sv_aircontrol_power); + Cvar_RegisterVariable (&sv_aircontrol_penalty); Cvar_RegisterVariable (&sv_allowdownloads); Cvar_RegisterVariable (&sv_allowdownloads_archive); Cvar_RegisterVariable (&sv_allowdownloads_config); @@ -976,14 +978,19 @@ void SV_ConnectClient (int clientnum, netconn_t *netconnection) { client_t *client; int i; - float spawn_parms[NUM_SPAWN_PARMS]; client = svs.clients + clientnum; // set up the client_t if (sv.loadgame) - memcpy (spawn_parms, client->spawn_parms, sizeof(spawn_parms)); - memset (client, 0, sizeof(*client)); + { + float backupparms[NUM_SPAWN_PARMS]; + memcpy(backupparms, client->spawn_parms, sizeof(backupparms)); + memset(client, 0, sizeof(*client)); + memcpy(client->spawn_parms, backupparms, sizeof(backupparms)); + } + else + memset(client, 0, sizeof(*client)); client->active = true; client->netconnection = netconnection; @@ -1005,9 +1012,7 @@ void SV_ConnectClient (int clientnum, netconn_t *netconnection) client->rate = 1000000000; client->connecttime = realtime; - if (sv.loadgame) - memcpy (client->spawn_parms, spawn_parms, sizeof(spawn_parms)); - else + if (!sv.loadgame) { // call the progs to get default spawn parms for the new client // set self to world to intentionally cause errors with broken SetNewParms code in some mods @@ -1603,9 +1608,9 @@ void SV_AddCameraEyes(void) { int e, i, j, k; prvm_edict_t *ed; - int cameras[MAX_LEVELNETWORKEYES]; - vec3_t camera_origins[MAX_LEVELNETWORKEYES]; - int eye_levels[MAX_CLIENTNETWORKEYES]; + static int cameras[MAX_LEVELNETWORKEYES]; + static vec3_t camera_origins[MAX_LEVELNETWORKEYES]; + static int eye_levels[MAX_CLIENTNETWORKEYES]; int n_cameras = 0; vec3_t mi, ma; prvm_eval_t *valendpos, *val; @@ -1973,6 +1978,7 @@ void SV_WriteClientdataToMessage (client_t *client, prvm_edict_t *ent, sizebuf_t statsf[STAT_MOVEVARS_AIRSTRAFEACCEL_QW] = sv_airstrafeaccel_qw.value; statsf[STAT_MOVEVARS_AIRCONTROL] = sv_aircontrol.value; statsf[STAT_MOVEVARS_AIRCONTROL_POWER] = sv_aircontrol_power.value; + statsf[STAT_MOVEVARS_AIRCONTROL_PENALTY] = sv_aircontrol_penalty.value; statsf[STAT_MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL] = sv_warsowbunny_airforwardaccel.value; statsf[STAT_MOVEVARS_WARSOWBUNNY_ACCEL] = sv_warsowbunny_accel.value; statsf[STAT_MOVEVARS_WARSOWBUNNY_TOPSPEED] = sv_warsowbunny_topspeed.value;