mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-10 15:22:04 +00:00
more evil hacks to get nq's and qw's sv_phys.c similar.
This commit is contained in:
parent
676527a0d3
commit
3e4c200430
10 changed files with 89 additions and 83 deletions
|
@ -280,4 +280,6 @@ void SV_Progs_Init_Cvars (void);
|
|||
|
||||
void Cvar_Info (struct cvar_s *var);
|
||||
|
||||
#define STOP_EPSILON 0.1
|
||||
|
||||
#endif // __server_h
|
||||
|
|
|
@ -67,6 +67,8 @@ typedef struct {
|
|||
float *trace_inwater;
|
||||
int *msg_entity;
|
||||
string_t *null;
|
||||
|
||||
int *newmis;
|
||||
} sv_globals_t;
|
||||
|
||||
extern sv_globals_t sv_globals;
|
||||
|
@ -177,9 +179,10 @@ typedef struct
|
|||
int air_finished; //float
|
||||
int pain_finished; //float
|
||||
int radsuit_finished; //float
|
||||
int speed; //Float
|
||||
int speed; //float
|
||||
|
||||
int rotated_bbox; //int
|
||||
int lastruntime; //float
|
||||
} sv_fields_t;
|
||||
|
||||
extern sv_fields_t sv_fields;
|
||||
|
@ -197,4 +200,6 @@ extern sv_fields_t sv_fields;
|
|||
#define SVvector(e,f) SVFIELD (e, f, vector)
|
||||
#define SVinteger(e,f) SVFIELD (e, f, integer)
|
||||
|
||||
extern func_t EndFrame;
|
||||
|
||||
#endif // __sv_progs_h
|
||||
|
|
|
@ -552,28 +552,9 @@ Host_GetConsoleCommands (void)
|
|||
Con_ProcessInput ();
|
||||
}
|
||||
|
||||
#ifdef FPS_20
|
||||
|
||||
void
|
||||
_Host_ServerFrame (void)
|
||||
{
|
||||
// run the world state
|
||||
*sv_globals.frametime = host_frametime;
|
||||
|
||||
// read client messages
|
||||
SV_RunClients ();
|
||||
|
||||
// move things around and think
|
||||
// always pause in single player if in console or menus
|
||||
if (!sv.paused && (svs.maxclients > 1 || key_dest == key_game))
|
||||
SV_Physics ();
|
||||
}
|
||||
|
||||
void
|
||||
Host_ServerFrame (void)
|
||||
{
|
||||
float save_host_frametime, temp_host_frametime;
|
||||
|
||||
// run the world state
|
||||
*sv_globals.frametime = host_frametime;
|
||||
|
||||
|
@ -583,49 +564,20 @@ Host_ServerFrame (void)
|
|||
// check for new clients
|
||||
SV_CheckForNewClients ();
|
||||
|
||||
temp_host_frametime = save_host_frametime = host_frametime;
|
||||
while (temp_host_frametime > (1.0 / 72.0)) {
|
||||
if (temp_host_frametime > 0.05)
|
||||
host_frametime = 0.05;
|
||||
else
|
||||
host_frametime = temp_host_frametime;
|
||||
temp_host_frametime -= host_frametime;
|
||||
_Host_ServerFrame ();
|
||||
// read client messages
|
||||
SV_RunClients ();
|
||||
|
||||
// move things around and think
|
||||
// always pause in single player if in console or menus
|
||||
if (!sv.paused && (svs.maxclients > 1 || key_dest == key_game)) {
|
||||
SV_Physics ();
|
||||
sv.time += host_frametime;
|
||||
}
|
||||
host_frametime = save_host_frametime;
|
||||
|
||||
// send all messages to the clients
|
||||
SV_SendClientMessages ();
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
void
|
||||
Host_ServerFrame (void)
|
||||
{
|
||||
// run the world state
|
||||
*sv_globals.frametime = host_frametime;
|
||||
|
||||
// set the time and clear the general datagram
|
||||
SV_ClearDatagram ();
|
||||
|
||||
// check for new clients
|
||||
SV_CheckForNewClients ();
|
||||
|
||||
// read client messages
|
||||
SV_RunClients ();
|
||||
|
||||
// move things around and think
|
||||
// always pause in single player if in console or menus
|
||||
if (!sv.paused && (svs.maxclients > 1 || key_dest == key_game))
|
||||
SV_Physics ();
|
||||
|
||||
// send all messages to the clients
|
||||
SV_SendClientMessages ();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
Host_Frame
|
||||
|
||||
|
|
|
@ -1025,7 +1025,9 @@ SV_SpawnServer (const char *server)
|
|||
// run two frames to allow everything to settle
|
||||
host_frametime = 0.1;
|
||||
SV_Physics ();
|
||||
sv.time += host_frametime;
|
||||
SV_Physics ();
|
||||
sv.time += host_frametime;
|
||||
|
||||
// create a baseline for more efficient communications
|
||||
SV_CreateBaseline ();
|
||||
|
|
|
@ -193,8 +193,6 @@ SV_Impact (edict_t *e1, edict_t *e2)
|
|||
*sv_globals.other = old_other;
|
||||
}
|
||||
|
||||
#define STOP_EPSILON 0.1
|
||||
|
||||
/*
|
||||
ClipVelocity
|
||||
|
||||
|
@ -727,6 +725,12 @@ SV_ProgStartFrame (void)
|
|||
void
|
||||
SV_RunEntity (edict_t *ent)
|
||||
{
|
||||
if (sv_fields.lastruntime != -1) {
|
||||
if (SVfloat (ent, lastruntime) == (float) realtime)
|
||||
return;
|
||||
SVfloat (ent, lastruntime) = (float) realtime;
|
||||
}
|
||||
|
||||
switch ((int) SVfloat (ent, movetype)) {
|
||||
case MOVETYPE_PUSH:
|
||||
SV_Physics_Pusher (ent);
|
||||
|
@ -752,6 +756,21 @@ SV_RunEntity (edict_t *ent)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
SV_RunNewmis (void)
|
||||
{
|
||||
edict_t *ent;
|
||||
|
||||
if (sv_fields.lastruntime == -1 || !sv_globals.newmis
|
||||
|| !*sv_globals.newmis)
|
||||
return;
|
||||
ent = PROG_TO_EDICT (&sv_pr_state, *sv_globals.newmis);
|
||||
sv_frametime = 0.05;
|
||||
*sv_globals.newmis = 0;
|
||||
|
||||
SV_RunEntity (ent);
|
||||
}
|
||||
|
||||
void
|
||||
SV_Physics (void)
|
||||
{
|
||||
|
@ -775,11 +794,19 @@ SV_Physics (void)
|
|||
SV_Physics_Client (ent, i);
|
||||
continue;
|
||||
}
|
||||
|
||||
SV_RunEntity (ent);
|
||||
SV_RunNewmis ();
|
||||
}
|
||||
|
||||
if (*sv_globals.force_retouch)
|
||||
(*sv_globals.force_retouch)--;
|
||||
|
||||
sv.time += sv_frametime;
|
||||
if (EndFrame) {
|
||||
// let the progs know that the frame has ended
|
||||
*sv_globals.self = EDICT_TO_PROG (&sv_pr_state, sv.edicts);
|
||||
*sv_globals.other = EDICT_TO_PROG (&sv_pr_state, sv.edicts);
|
||||
*sv_globals.time = sv.time;
|
||||
PR_ExecuteProgram (&sv_pr_state, EndFrame);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -66,6 +66,8 @@ cvar_t *saved2;
|
|||
cvar_t *saved3;
|
||||
cvar_t *saved4;
|
||||
|
||||
func_t EndFrame;
|
||||
|
||||
static int
|
||||
prune_edict (progs_t *pr, edict_t *ent)
|
||||
{
|
||||
|
@ -131,6 +133,9 @@ parse_field (progs_t *pr, const char *key, const char *value)
|
|||
void
|
||||
SV_LoadProgs (void)
|
||||
{
|
||||
ddef_t *def;
|
||||
dfunction_t *f;
|
||||
|
||||
PR_LoadProgs (&sv_pr_state, sv_progs->string, sv.max_edicts, 0);
|
||||
if (!sv_pr_state.progs)
|
||||
Host_Error ("SV_LoadProgs: couldn't load %s", sv_progs->string);
|
||||
|
@ -304,6 +309,14 @@ SV_LoadProgs (void)
|
|||
sv_fields.pitch_speed = ED_GetFieldIndex (&sv_pr_state, "pitch_speed");
|
||||
|
||||
sv_fields.rotated_bbox = ED_GetFieldIndex (&sv_pr_state, "rotated_bbox");
|
||||
sv_fields.lastruntime = ED_GetFieldIndex (&sv_pr_state, "lastruntime");
|
||||
|
||||
def = PR_FindGlobal (&sv_pr_state, "newmis");
|
||||
sv_globals.newmis = def ? &G_var (&sv_pr_state, def->ofs, entity) : 0;
|
||||
|
||||
EndFrame = 0;
|
||||
if ((f = ED_FindFunction (&sv_pr_state, "EndFrame")) != NULL)
|
||||
EndFrame = (func_t) (f - sv_pr_state.pr_functions);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -269,6 +269,7 @@ typedef struct
|
|||
int spawncount; // number of servers spawned since start,
|
||||
// used to check late spawns
|
||||
client_t clients[MAX_CLIENTS];
|
||||
int maxclients;
|
||||
int num_clients;
|
||||
int serverflags; // episode completion information
|
||||
|
||||
|
|
|
@ -1863,8 +1863,21 @@ SV_Frame (float time)
|
|||
SV_CleanIPList ();
|
||||
|
||||
// move autonomous things around if enough time has passed
|
||||
if (!sv.paused)
|
||||
SV_Physics ();
|
||||
if (!sv.paused) {
|
||||
static double old_time;
|
||||
|
||||
// don't bother running a frame if sys_ticrate seconds haven't passed
|
||||
sv_frametime = realtime - old_time;
|
||||
if (sv_frametime >= sv_mintic->value) {
|
||||
if (sv_frametime > sv_maxtic->value)
|
||||
sv_frametime = sv_maxtic->value;
|
||||
old_time = realtime;
|
||||
|
||||
*sv_globals.frametime = sv_frametime;
|
||||
|
||||
SV_Physics ();
|
||||
}
|
||||
}
|
||||
|
||||
// get packets
|
||||
SV_ReadPackets ();
|
||||
|
@ -2407,6 +2420,7 @@ SV_Init (void)
|
|||
|
||||
SV_Init_Memory ();
|
||||
|
||||
svs.maxclients = MAX_CLIENTS;
|
||||
svs.info = Info_ParseString ("", MAX_SERVERINFO_STRING);
|
||||
localinfo = Info_ParseString ("", 0); // unlimited
|
||||
SV_InitOperatorCommands ();
|
||||
|
|
|
@ -747,9 +747,11 @@ SV_ProgStartFrame (void)
|
|||
void
|
||||
SV_RunEntity (edict_t *ent)
|
||||
{
|
||||
if (SVfloat (ent, lastruntime) == (float) realtime)
|
||||
return;
|
||||
SVfloat (ent, lastruntime) = (float) realtime;
|
||||
if (sv_fields.lastruntime != -1) {
|
||||
if (SVfloat (ent, lastruntime) == (float) realtime)
|
||||
return;
|
||||
SVfloat (ent, lastruntime) = (float) realtime;
|
||||
}
|
||||
|
||||
switch ((int) SVfloat (ent, movetype)) {
|
||||
case MOVETYPE_PUSH:
|
||||
|
@ -781,7 +783,8 @@ SV_RunNewmis (void)
|
|||
{
|
||||
edict_t *ent;
|
||||
|
||||
if (!*sv_globals.newmis)
|
||||
if (sv_fields.lastruntime == -1 || !sv_globals.newmis
|
||||
|| !*sv_globals.newmis)
|
||||
return;
|
||||
ent = PROG_TO_EDICT (&sv_pr_state, *sv_globals.newmis);
|
||||
sv_frametime = 0.05;
|
||||
|
@ -793,20 +796,9 @@ SV_RunNewmis (void)
|
|||
void
|
||||
SV_Physics (void)
|
||||
{
|
||||
static double old_time;
|
||||
edict_t *ent;
|
||||
int i;
|
||||
|
||||
// don't bother running a frame if sys_ticrate seconds haven't passed
|
||||
sv_frametime = realtime - old_time;
|
||||
if (sv_frametime < sv_mintic->value)
|
||||
return;
|
||||
if (sv_frametime > sv_maxtic->value)
|
||||
sv_frametime = sv_maxtic->value;
|
||||
old_time = realtime;
|
||||
|
||||
*sv_globals.frametime = sv_frametime;
|
||||
|
||||
SV_ProgStartFrame ();
|
||||
|
||||
// treat each object in turn
|
||||
|
@ -820,8 +812,9 @@ SV_Physics (void)
|
|||
SV_LinkEdict (ent, true); // force retouch even for stationary
|
||||
}
|
||||
|
||||
if (i > 0 && i <= MAX_CLIENTS) {
|
||||
continue; // clients are run directly from packets
|
||||
if (i > 0 && i <= svs.maxclients) {
|
||||
// clients are run directly from packets
|
||||
continue;
|
||||
}
|
||||
|
||||
SV_RunEntity (ent);
|
||||
|
@ -831,7 +824,6 @@ SV_Physics (void)
|
|||
if (*sv_globals.force_retouch)
|
||||
(*sv_globals.force_retouch)--;
|
||||
|
||||
// 2000-01-02 EndFrame function by Maddes/FrikaC start
|
||||
if (EndFrame) {
|
||||
// let the progs know that the frame has ended
|
||||
*sv_globals.self = EDICT_TO_PROG (&sv_pr_state, sv.edicts);
|
||||
|
@ -839,7 +831,6 @@ SV_Physics (void)
|
|||
*sv_globals.time = sv.time;
|
||||
PR_ExecuteProgram (&sv_pr_state, EndFrame);
|
||||
}
|
||||
// 2000-01-02 EndFrame function by Maddes/FrikaC end
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -317,7 +317,7 @@ SV_LoadProgs (void)
|
|||
|
||||
// Zoid, find the spectator functions
|
||||
SpectatorConnect = SpectatorThink = SpectatorDisconnect = 0;
|
||||
UserInfoCallback = 0;
|
||||
EndFrame = UserInfoCallback = 0;
|
||||
|
||||
if ((f = ED_FindFunction (&sv_pr_state, "SpectatorConnect")) != NULL)
|
||||
SpectatorConnect = (func_t) (f - sv_pr_state.pr_functions);
|
||||
|
@ -329,7 +329,6 @@ SV_LoadProgs (void)
|
|||
UserInfoCallback = (func_t) (f - sv_pr_state.pr_functions);
|
||||
|
||||
// 2000-01-02 EndFrame function by Maddes/FrikaC
|
||||
EndFrame = 0;
|
||||
if ((f = ED_FindFunction (&sv_pr_state, "EndFrame")) != NULL)
|
||||
EndFrame = (func_t) (f - sv_pr_state.pr_functions);
|
||||
|
||||
|
|
Loading…
Reference in a new issue