removed separate trigger/solid links.
some q3 fixes. q2 will autosave on map changes, like q2 normally does. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@3839 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
a18e83d843
commit
61e4aa96b3
54 changed files with 1346 additions and 1000 deletions
|
@ -60,36 +60,6 @@ int autocam[MAX_SPLITS];
|
|||
|
||||
int selfcam=1;
|
||||
|
||||
void vectoangles(vec3_t vec, vec3_t ang)
|
||||
{
|
||||
float forward;
|
||||
float yaw, pitch;
|
||||
|
||||
if (vec[1] == 0 && vec[0] == 0)
|
||||
{
|
||||
yaw = 0;
|
||||
if (vec[2] > 0)
|
||||
pitch = 90;
|
||||
else
|
||||
pitch = 270;
|
||||
}
|
||||
else
|
||||
{
|
||||
yaw = /*(int)*/ (atan2(vec[1], vec[0]) * 180 / M_PI);
|
||||
if (yaw < 0)
|
||||
yaw += 360;
|
||||
|
||||
forward = sqrt (vec[0]*vec[0] + vec[1]*vec[1]);
|
||||
pitch = /*(int)*/ (atan2(vec[2], forward) * 180 / M_PI);
|
||||
if (pitch < 0)
|
||||
pitch += 360;
|
||||
}
|
||||
|
||||
ang[0] = pitch;
|
||||
ang[1] = yaw;
|
||||
ang[2] = 0;
|
||||
}
|
||||
|
||||
static float vlen(vec3_t v)
|
||||
{
|
||||
return sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]);
|
||||
|
|
|
@ -32,6 +32,8 @@ extern int mod_numknown;
|
|||
#define VM_FROMSHANDLE(a) (a?r_shaders+a-1:NULL)
|
||||
#define VM_TOSHANDLE(a) (a?a-r_shaders+1:0)
|
||||
|
||||
extern model_t box_model;
|
||||
|
||||
typedef enum {
|
||||
CG_PRINT,
|
||||
CG_ERROR,
|
||||
|
@ -560,9 +562,12 @@ static qintptr_t CG_SystemCalls(void *offset, quintptr_t mask, qintptr_t fn, con
|
|||
case CG_CM_POINTCONTENTS: //int trap_CM_PointContents( const vec3_t p, clipHandle_t model );
|
||||
{
|
||||
unsigned int pc;
|
||||
model_t *mod = VM_FROMMHANDLE(arg[1]);
|
||||
if (!mod)
|
||||
mod = cl.worldmodel;
|
||||
unsigned int modhandle = VM_LONG(arg[1]);
|
||||
model_t *mod;
|
||||
if (modhandle >= MAX_MODELS)
|
||||
mod = &box_model;
|
||||
else
|
||||
mod = cl.model_precache[modhandle+1];
|
||||
if (mod)
|
||||
pc = cl.worldmodel->funcs.NativeContents(mod, 0, 0, NULL, VM_POINTER(arg[0]), vec3_origin, vec3_origin);
|
||||
else
|
||||
|
@ -575,12 +580,14 @@ static qintptr_t CG_SystemCalls(void *offset, quintptr_t mask, qintptr_t fn, con
|
|||
{
|
||||
unsigned int pc;
|
||||
float *p = VM_POINTER(arg[0]);
|
||||
model_t *mod = VM_FROMMHANDLE(arg[1]);
|
||||
unsigned int modhandle = VM_LONG(arg[1]);
|
||||
float *origin = VM_POINTER(arg[2]);
|
||||
float *angles = VM_POINTER(arg[3]);
|
||||
|
||||
if (!mod)
|
||||
mod = cl.worldmodel;
|
||||
model_t *mod;
|
||||
if (modhandle >= MAX_MODELS)
|
||||
mod = &box_model;
|
||||
else
|
||||
mod = cl.model_precache[modhandle+1];
|
||||
|
||||
if (mod)
|
||||
{
|
||||
|
@ -618,12 +625,16 @@ static qintptr_t CG_SystemCalls(void *offset, quintptr_t mask, qintptr_t fn, con
|
|||
float *end = VM_POINTER(arg[2]);
|
||||
float *mins = VM_POINTER(arg[3]);
|
||||
float *maxs = VM_POINTER(arg[4]);
|
||||
model_t *mod = VM_FROMMHANDLE(arg[5]);
|
||||
int brushmask = VM_LONG(arg[6]);
|
||||
unsigned int modhandle = VM_LONG(arg[5]);
|
||||
int brushmask = VM_LONG(arg[6]);
|
||||
float *origin = VM_POINTER(arg[7]);
|
||||
float *angles = VM_POINTER(arg[8]);
|
||||
if (!mod)
|
||||
mod = cl.worldmodel;
|
||||
model_t *mod;
|
||||
if (modhandle >= MAX_MODELS)
|
||||
mod = &box_model;
|
||||
else
|
||||
mod = cl.model_precache[modhandle+1];
|
||||
|
||||
if (!mins)
|
||||
mins = vec3_origin;
|
||||
if (!maxs)
|
||||
|
@ -673,24 +684,19 @@ static qintptr_t CG_SystemCalls(void *offset, quintptr_t mask, qintptr_t fn, con
|
|||
float *end = VM_POINTER(arg[2]);
|
||||
float *mins = VM_POINTER(arg[3]);
|
||||
float *maxs = VM_POINTER(arg[4]);
|
||||
model_t *mod = VM_FROMMHANDLE(arg[5]);
|
||||
unsigned int modhandle = VM_LONG(arg[5]);
|
||||
int brushmask = VM_LONG(arg[6]);
|
||||
if (!mod)
|
||||
mod = cl.worldmodel;
|
||||
model_t *mod;
|
||||
if (modhandle >= MAX_MODELS)
|
||||
mod = &box_model;
|
||||
else
|
||||
mod = cl.model_precache[modhandle+1];
|
||||
|
||||
if (!mins)
|
||||
mins = vec3_origin;
|
||||
if (!maxs)
|
||||
maxs = vec3_origin;
|
||||
if (mod)
|
||||
{
|
||||
mod->funcs.NativeTrace(mod, 0, 0, NULL, start, end, mins, maxs, brushmask, &tr);
|
||||
}
|
||||
else
|
||||
{
|
||||
memset(&tr, 0, sizeof(tr));
|
||||
tr.allsolid = tr.startsolid = true;
|
||||
tr.contents = 1;
|
||||
}
|
||||
mod->funcs.NativeTrace(mod, 0, 0, NULL, start, end, mins, maxs, brushmask, &tr);
|
||||
results->allsolid = tr.allsolid;
|
||||
results->contents = tr.contents;
|
||||
results->fraction = tr.fraction;
|
||||
|
@ -724,14 +730,17 @@ static qintptr_t CG_SystemCalls(void *offset, quintptr_t mask, qintptr_t fn, con
|
|||
break;
|
||||
|
||||
case CG_CM_INLINEMODEL:
|
||||
VM_LONG(ret) = VM_TOMHANDLE(cl.model_precache[VM_LONG(arg[0])+1]);
|
||||
if ((unsigned int)VM_LONG(arg[0]) > (cl.worldmodel?cl.worldmodel->numsubmodels:0))
|
||||
Host_EndGame("cgame asked for invalid model number\n");
|
||||
VM_LONG(ret) = VM_LONG(arg[0]);
|
||||
break;
|
||||
case CG_CM_NUMINLINEMODELS:
|
||||
VM_LONG(ret) = cl.worldmodel?cl.worldmodel->numsubmodels:0;
|
||||
break;
|
||||
|
||||
case CG_CM_TEMPBOXMODEL:
|
||||
VM_LONG(ret) = VM_TOMHANDLE(CM_TempBoxModel(VM_POINTER(arg[0]), VM_POINTER(arg[1])));
|
||||
CM_TempBoxModel(VM_POINTER(arg[0]), VM_POINTER(arg[1]));
|
||||
VM_LONG(ret) = MAX_MODELS;
|
||||
break;
|
||||
|
||||
case CG_R_MODELBOUNDS:
|
||||
|
|
|
@ -167,7 +167,7 @@ int demo_preparsedemo(unsigned char *buffer, int bytes)
|
|||
switch(buffer[1]&dem_mask)
|
||||
{
|
||||
case dem_cmd:
|
||||
ofs = -(sizeof(q1usercmd_t));
|
||||
ofs = -(int)(sizeof(q1usercmd_t));
|
||||
ofs = 0;
|
||||
break;
|
||||
case dem_set:
|
||||
|
|
|
@ -1356,7 +1356,7 @@ entity_t *V_AddEntity(entity_t *in)
|
|||
|
||||
return ent;
|
||||
}
|
||||
|
||||
/*
|
||||
void VQ2_AddLerpEntity(entity_t *in) //a convienience function
|
||||
{
|
||||
entity_t *ent;
|
||||
|
@ -1384,7 +1384,7 @@ void VQ2_AddLerpEntity(entity_t *in) //a convienience function
|
|||
VectorInverse(ent->axis[1]);
|
||||
ent->angles[0]*=-1;
|
||||
}
|
||||
|
||||
*/
|
||||
int V_AddLight (int entsource, vec3_t org, float quant, float r, float g, float b)
|
||||
{
|
||||
return CL_NewDlightRGB (entsource, org, quant, -0.1, r, g, b) - cl_dlights;
|
||||
|
|
|
@ -7,15 +7,6 @@
|
|||
|
||||
int keycatcher;
|
||||
|
||||
#define MAX_TOKENLENGTH 1024
|
||||
typedef struct pc_token_s
|
||||
{
|
||||
int type;
|
||||
int subtype;
|
||||
int intvalue;
|
||||
float floatvalue;
|
||||
char string[MAX_TOKENLENGTH];
|
||||
} pc_token_t;
|
||||
#define TT_STRING 1 // string
|
||||
#define TT_LITERAL 2 // literal
|
||||
#define TT_NUMBER 3 // number
|
||||
|
@ -599,23 +590,11 @@ void VQ3_RenderView(const q3refdef_t *ref)
|
|||
}
|
||||
|
||||
memcpy(cl.q2frame.areabits, ref->areamask, sizeof(cl.q2frame.areabits));
|
||||
#ifdef GLQUAKE
|
||||
if (qrenderer == QR_OPENGL)
|
||||
{
|
||||
qglDisable(GL_ALPHA_TEST);
|
||||
qglDisable(GL_BLEND);
|
||||
}
|
||||
#endif
|
||||
R_RenderView();
|
||||
#ifdef GLQUAKE
|
||||
if (qrenderer == QR_OPENGL)
|
||||
{
|
||||
GL_Set2D ();
|
||||
qglBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
GL_TexEnv(GL_MODULATE);
|
||||
|
||||
qglDisable(GL_ALPHA_TEST);
|
||||
qglEnable(GL_BLEND);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -2,15 +2,6 @@
|
|||
#include "glquake.h"
|
||||
|
||||
#ifdef HLCLIENT
|
||||
|
||||
//make shared
|
||||
#ifndef QDECL
|
||||
#ifdef _MSC_VER
|
||||
#define QDECL _cdecl
|
||||
#else
|
||||
#define QDECL
|
||||
#endif
|
||||
#endif
|
||||
struct hlcvar_s *QDECL GHL_CVarGetPointer(char *varname);
|
||||
|
||||
|
||||
|
|
|
@ -1094,7 +1094,7 @@ void Cam_TrackPlayer(int pnum, char *cmdname, char *plrarg);
|
|||
void Cam_Lock(int pnum, int playernum);
|
||||
void CL_InitCam(void);
|
||||
|
||||
void vectoangles(vec3_t vec, vec3_t ang);
|
||||
void QDECL vectoangles(vec3_t vec, vec3_t ang);
|
||||
|
||||
//
|
||||
//zqtp.c
|
||||
|
|
|
@ -504,164 +504,6 @@ FRAME PARSING
|
|||
=========================================================================
|
||||
*/
|
||||
|
||||
#if 0
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int modelindex;
|
||||
int num; // entity number
|
||||
int effects;
|
||||
vec3_t origin;
|
||||
vec3_t oldorigin;
|
||||
vec3_t angles;
|
||||
qboolean present;
|
||||
} projectile_t;
|
||||
|
||||
#define MAX_PROJECTILES 64
|
||||
projectile_t cl_projectiles[MAX_PROJECTILES];
|
||||
|
||||
void CLQ2_ClearProjectiles (void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MAX_PROJECTILES; i++) {
|
||||
// if (cl_projectiles[i].present)
|
||||
// Com_DPrintf("PROJ: %d CLEARED\n", cl_projectiles[i].num);
|
||||
cl_projectiles[i].present = false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=====================
|
||||
CL_ParseProjectiles
|
||||
|
||||
Flechettes are passed as efficient temporary entities
|
||||
=====================
|
||||
*/
|
||||
void CLQ2_ParseProjectiles (void)
|
||||
{
|
||||
int i, c, j;
|
||||
byte bits[8];
|
||||
byte b;
|
||||
projectile_t pr;
|
||||
int lastempty = -1;
|
||||
qboolean old = false;
|
||||
|
||||
c = MSG_ReadByte (&net_message);
|
||||
for (i=0 ; i<c ; i++)
|
||||
{
|
||||
bits[0] = MSG_ReadByte (&net_message);
|
||||
bits[1] = MSG_ReadByte (&net_message);
|
||||
bits[2] = MSG_ReadByte (&net_message);
|
||||
bits[3] = MSG_ReadByte (&net_message);
|
||||
bits[4] = MSG_ReadByte (&net_message);
|
||||
pr.origin[0] = ( ( bits[0] + ((bits[1]&15)<<8) ) <<1) - 4096;
|
||||
pr.origin[1] = ( ( (bits[1]>>4) + (bits[2]<<4) ) <<1) - 4096;
|
||||
pr.origin[2] = ( ( bits[3] + ((bits[4]&15)<<8) ) <<1) - 4096;
|
||||
VectorCopy(pr.origin, pr.oldorigin);
|
||||
|
||||
if (bits[4] & 64)
|
||||
pr.effects = EF_BLASTER;
|
||||
else
|
||||
pr.effects = 0;
|
||||
|
||||
if (bits[4] & 128) {
|
||||
old = true;
|
||||
bits[0] = MSG_ReadByte (&net_message);
|
||||
bits[1] = MSG_ReadByte (&net_message);
|
||||
bits[2] = MSG_ReadByte (&net_message);
|
||||
bits[3] = MSG_ReadByte (&net_message);
|
||||
bits[4] = MSG_ReadByte (&net_message);
|
||||
pr.oldorigin[0] = ( ( bits[0] + ((bits[1]&15)<<8) ) <<1) - 4096;
|
||||
pr.oldorigin[1] = ( ( (bits[1]>>4) + (bits[2]<<4) ) <<1) - 4096;
|
||||
pr.oldorigin[2] = ( ( bits[3] + ((bits[4]&15)<<8) ) <<1) - 4096;
|
||||
}
|
||||
|
||||
bits[0] = MSG_ReadByte (&net_message);
|
||||
bits[1] = MSG_ReadByte (&net_message);
|
||||
bits[2] = MSG_ReadByte (&net_message);
|
||||
|
||||
pr.angles[0] = 360*bits[0]/256;
|
||||
pr.angles[1] = 360*bits[1]/256;
|
||||
pr.modelindex = bits[2];
|
||||
|
||||
b = MSG_ReadByte (&net_message);
|
||||
pr.num = (b & 0x7f);
|
||||
if (b & 128) // extra entity number byte
|
||||
pr.num |= (MSG_ReadByte (&net_message) << 7);
|
||||
|
||||
pr.present = true;
|
||||
|
||||
// find if this projectile already exists from previous frame
|
||||
for (j = 0; j < MAX_PROJECTILES; j++) {
|
||||
if (cl_projectiles[j].modelindex) {
|
||||
if (cl_projectiles[j].num == pr.num) {
|
||||
// already present, set up oldorigin for interpolation
|
||||
if (!old)
|
||||
VectorCopy(cl_projectiles[j].origin, pr.oldorigin);
|
||||
cl_projectiles[j] = pr;
|
||||
break;
|
||||
}
|
||||
} else
|
||||
lastempty = j;
|
||||
}
|
||||
|
||||
// not present previous frame, add it
|
||||
if (j == MAX_PROJECTILES) {
|
||||
if (lastempty != -1) {
|
||||
cl_projectiles[lastempty] = pr;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
CL_LinkProjectiles
|
||||
|
||||
=============
|
||||
*/
|
||||
void CLQ2_AddProjectiles (void)
|
||||
{
|
||||
int i, j;
|
||||
projectile_t *pr;
|
||||
entity_t ent;
|
||||
|
||||
memset (&ent, 0, sizeof(ent));
|
||||
|
||||
for (i=0, pr=cl_projectiles ; i < MAX_PROJECTILES ; i++, pr++)
|
||||
{
|
||||
// grab an entity to fill in
|
||||
if (pr->modelindex < 1)
|
||||
continue;
|
||||
if (!pr->present) {
|
||||
pr->modelindex = 0;
|
||||
continue; // not present this frame (it was in the previous frame)
|
||||
}
|
||||
|
||||
ent.model = cl.model_draw[pr->modelindex];
|
||||
|
||||
// interpolate origin
|
||||
for (j=0 ; j<3 ; j++)
|
||||
{
|
||||
ent.origin[j] = ent.oldorigin[j] = pr->oldorigin[j] + cl.lerpfrac *
|
||||
(pr->origin[j] - pr->oldorigin[j]);
|
||||
|
||||
}
|
||||
|
||||
if (pr->effects & EF_BLASTER)
|
||||
{
|
||||
if (P_ParticleTrail(pr->oldorigin, ent.origin, rt_blastertrail, NULL))
|
||||
P_ParticleTrailIndex(pr->oldorigin, ent.origin, 0xe0, 1, NULL);
|
||||
}
|
||||
V_AddLight (pr->origin, 200, 0.2, 0.2, 0);
|
||||
|
||||
VectorCopy (pr->angles, ent.angles);
|
||||
VQ2_AddLerpEntity (&ent);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
=================
|
||||
CL_ParseEntityBits
|
||||
|
@ -1333,6 +1175,7 @@ void CLQ2_AddPacketEntities (q2frame_t *frame)
|
|||
// q2clientinfo_t *ci;
|
||||
player_info_t *player;
|
||||
unsigned int effects, renderfx;
|
||||
float back, fwds;
|
||||
|
||||
// bonus items rotate at a fixed rate
|
||||
autorotate = anglemod(cl.time*100);
|
||||
|
@ -1589,8 +1432,17 @@ void CLQ2_AddPacketEntities (q2frame_t *frame)
|
|||
}
|
||||
//pmm
|
||||
|
||||
/*lerp the ent now*/
|
||||
fwds = ent.framestate.g[FS_REG].lerpfrac;
|
||||
back = 1 - ent.framestate.g[FS_REG].lerpfrac;
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
ent.origin[i] = ent.origin[i]*fwds + ent.oldorigin[i]*back;
|
||||
}
|
||||
ent.framestate.g[FS_REG].lerpfrac = back;
|
||||
|
||||
// add to refresh list
|
||||
VQ2_AddLerpEntity (&ent);
|
||||
V_AddEntity (&ent);
|
||||
|
||||
|
||||
// color shells generate a seperate entity for the main model
|
||||
|
@ -1640,7 +1492,7 @@ void CLQ2_AddPacketEntities (q2frame_t *frame)
|
|||
ent.shaderRGBAf[1] = (!!(renderfx & Q2RF_SHELL_GREEN));
|
||||
ent.shaderRGBAf[2] = (!!(renderfx & Q2RF_SHELL_BLUE));
|
||||
ent.forcedshader = R_RegisterCustom("q2/shell", Shader_DefaultSkinShell, NULL);
|
||||
VQ2_AddLerpEntity (&ent);
|
||||
V_AddEntity (&ent);
|
||||
}
|
||||
ent.forcedshader = NULL;
|
||||
|
||||
|
@ -1694,7 +1546,7 @@ void CLQ2_AddPacketEntities (q2frame_t *frame)
|
|||
}
|
||||
*/ // pmm
|
||||
|
||||
VQ2_AddLerpEntity (&ent);
|
||||
V_AddEntity (&ent);
|
||||
|
||||
//PGM - make sure these get reset.
|
||||
ent.flags = 0;
|
||||
|
@ -1704,12 +1556,12 @@ void CLQ2_AddPacketEntities (q2frame_t *frame)
|
|||
if (s1->modelindex3)
|
||||
{
|
||||
ent.model = cl.model_precache[s1->modelindex3];
|
||||
VQ2_AddLerpEntity (&ent);
|
||||
V_AddEntity (&ent);
|
||||
}
|
||||
if (s1->modelindex4)
|
||||
{
|
||||
ent.model = cl.model_precache[s1->modelindex4];
|
||||
VQ2_AddLerpEntity (&ent);
|
||||
V_AddEntity (&ent);
|
||||
}
|
||||
|
||||
if ( effects & Q2EF_POWERSCREEN )
|
||||
|
@ -1719,7 +1571,7 @@ void CLQ2_AddPacketEntities (q2frame_t *frame)
|
|||
ent.frame = 0;
|
||||
ent.flags |= (Q2RF_TRANSLUCENT | Q2RF_SHELL_GREEN);
|
||||
ent.alpha = 0.30;
|
||||
VQ2_AddLerpEntity (&ent);
|
||||
V_AddLerpEntity (&ent);
|
||||
*/ }
|
||||
|
||||
// add automatic particle trails
|
||||
|
|
|
@ -518,6 +518,7 @@ void CLQ3_ParseGameState(void)
|
|||
int c;
|
||||
int index;
|
||||
char *configString;
|
||||
cvar_t *cl_paused;
|
||||
|
||||
//
|
||||
// wipe the client_state_t struct
|
||||
|
@ -607,6 +608,10 @@ void CLQ3_ParseGameState(void)
|
|||
// load cgame, etc
|
||||
// CL_ChangeLevel();
|
||||
|
||||
cl_paused = Cvar_FindVar("cl_paused");
|
||||
if (cl_paused && cl_paused->ival)
|
||||
Cvar_ForceSet(cl_paused, "0");
|
||||
|
||||
}
|
||||
|
||||
#define TEXTCMD_BACKUP 64
|
||||
|
@ -716,7 +721,7 @@ qboolean CLQ3_Netchan_Process(void)
|
|||
msg_readcount = readcount;
|
||||
|
||||
// calculate bitmask
|
||||
bitmask = sequence ^ cls.challenge;
|
||||
bitmask = (sequence ^ cls.challenge) & 0xff;
|
||||
string = ccs.clientCommands[lastClientCommandNum & TEXTCMD_MASK];
|
||||
|
||||
#ifndef Q3_NOENCRYPT
|
||||
|
@ -767,7 +772,7 @@ void CL_Netchan_Transmit( int length, const qbyte *data )
|
|||
lastServerCommandNum = MSG_ReadLong();
|
||||
|
||||
// calculate bitmask
|
||||
bitmask = lastSequence ^ serverid ^ cls.challenge;
|
||||
bitmask = (lastSequence ^ serverid ^ cls.challenge) & 0xff;
|
||||
string = ccs.serverCommands[lastServerCommandNum & TEXTCMD_MASK];
|
||||
|
||||
#ifndef Q3_NOENCRYPT
|
||||
|
|
|
@ -2258,7 +2258,8 @@ void Media_RecordFilm_f (void)
|
|||
BITMAPINFOHEADER bitmap_info_header;
|
||||
AVISTREAMINFO stream_header;
|
||||
FILE *f;
|
||||
char filename[256];
|
||||
char aviname[256];
|
||||
char nativepath[256];
|
||||
|
||||
if (strlen(fourcc) == 4)
|
||||
recordavi_codec_fourcc = mmioFOURCC(*(fourcc+0), *(fourcc+1), *(fourcc+2), *(fourcc+3));
|
||||
|
@ -2271,23 +2272,24 @@ void Media_RecordFilm_f (void)
|
|||
AVIFileInit();
|
||||
}
|
||||
|
||||
|
||||
snprintf(filename, sizeof(filename) - 5, "%s%s", com_quakedir, Cmd_Argv(1));
|
||||
COM_StripExtension(filename, filename, sizeof(filename));
|
||||
COM_DefaultExtension (filename, ".avi", sizeof(filename));
|
||||
/*convert to foo.avi*/
|
||||
COM_StripExtension(Cmd_Argv(1), aviname, sizeof(aviname));
|
||||
COM_DefaultExtension (aviname, ".avi", sizeof(aviname));
|
||||
/*find the system location of that*/
|
||||
FS_NativePath(aviname, FS_ROOT, nativepath, sizeof(nativepath));
|
||||
|
||||
//wipe it.
|
||||
f = fopen(filename, "rb");
|
||||
f = fopen(nativepath, "rb");
|
||||
if (f)
|
||||
{
|
||||
fclose(f);
|
||||
unlink(filename);
|
||||
unlink(nativepath);
|
||||
}
|
||||
|
||||
hr = AVIFileOpen(&recordavi_file, filename, OF_WRITE | OF_CREATE, NULL);
|
||||
hr = AVIFileOpen(&recordavi_file, nativepath, OF_WRITE | OF_CREATE, NULL);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Con_Printf("Failed to open\n");
|
||||
Con_Printf("Failed to open %s\n", nativepath);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2312,7 +2314,7 @@ void Media_RecordFilm_f (void)
|
|||
hr = AVIFileCreateStream(recordavi_file, &recordavi_uncompressed_video_stream, &stream_header);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
Con_Printf("Couldn't initialise the stream\n");
|
||||
Con_Printf("Couldn't initialise the stream, check codec\n");
|
||||
Media_StopRecordFilm_f();
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -1783,7 +1783,7 @@ qboolean M_Vid_GetMode(int num, int *w, int *h)
|
|||
v++;
|
||||
num--;
|
||||
}
|
||||
if (v)
|
||||
if (*v)
|
||||
{
|
||||
const char *c = *v;
|
||||
const char *s = strchr(c, 'x');
|
||||
|
|
|
@ -150,9 +150,9 @@ void M_Menu_SinglePlayer_f (void)
|
|||
MC_AddCenterPicture(menu, 4, 24, "pics/m_banner_game");
|
||||
|
||||
menu->selecteditem = (menuoption_t*)
|
||||
MC_AddConsoleCommand (menu, 64, 40, "Easy", "skill 0;deathmatch 0; coop 0;newgame\n");
|
||||
MC_AddConsoleCommand (menu, 64, 48, "Medium", "skill 1;deathmatch 0; coop 0;newgame\n");
|
||||
MC_AddConsoleCommand (menu, 64, 56, "Hard", "skill 2;deathmatch 0; coop 0;newgame\n");
|
||||
MC_AddConsoleCommand (menu, 64, 40, "Easy", "closemenu; skill 0;deathmatch 0; coop 0;newgame\n");
|
||||
MC_AddConsoleCommand (menu, 64, 48, "Medium", "closemenu; skill 1;deathmatch 0; coop 0;newgame\n");
|
||||
MC_AddConsoleCommand (menu, 64, 56, "Hard", "closemenu; skill 2;deathmatch 0; coop 0;newgame\n");
|
||||
|
||||
MC_AddConsoleCommand (menu, 64, 72, "Load Game", "menu_load\n");
|
||||
MC_AddConsoleCommand (menu, 64, 80, "Save Game", "menu_save\n");
|
||||
|
|
|
@ -66,7 +66,7 @@ typedef struct cparticle_s
|
|||
pt_grav,
|
||||
pt_slowgrav
|
||||
} type;
|
||||
unsigned char color;
|
||||
unsigned int rgb;
|
||||
struct cparticle_s *next;
|
||||
} cparticle_t;
|
||||
|
||||
|
@ -76,10 +76,11 @@ typedef struct cparticle_s
|
|||
static int r_numparticles;
|
||||
static cparticle_t *particles, *active_particles, *free_particles;
|
||||
|
||||
extern qbyte default_quakepal[]; /*for ramps more than anything else*/
|
||||
static int ramp1[8] = {0x6f, 0x6d, 0x6b, 0x69, 0x67, 0x65, 0x63, 0x61};
|
||||
static int ramp2[8] = {0x6f, 0x6e, 0x6d, 0x6c, 0x6b, 0x6a, 0x68, 0x66};
|
||||
static int ramp3[8] = {0x6d, 0x6b, 6, 5, 4, 3};
|
||||
|
||||
#define qpal(q) ((default_quakepal[(q)*3+0]<<0) | (default_quakepal[(q)*3+1]<<8) | (default_quakepal[(q)*3+2]<<16))
|
||||
|
||||
|
||||
#define BUFFERVERTS 2048*3
|
||||
|
@ -350,7 +351,7 @@ static void PClassic_DrawParticles(void)
|
|||
scale = 1 + dist * r_partscale;
|
||||
|
||||
|
||||
usecolours.i = palette[(int)p->color];
|
||||
usecolours.i = p->rgb;
|
||||
if (p->type == pt_fire)
|
||||
usecolours.b[3] = 255 * (6 - p->ramp) / 6;
|
||||
else
|
||||
|
@ -381,7 +382,7 @@ static void PClassic_DrawParticles(void)
|
|||
if (p->ramp >= 6)
|
||||
p->die = -1;
|
||||
else
|
||||
p->color = ramp3[(int) p->ramp];
|
||||
p->rgb = qpal(ramp3[(int) p->ramp]);
|
||||
p->vel[2] += grav;
|
||||
break;
|
||||
case pt_explode:
|
||||
|
@ -389,7 +390,7 @@ static void PClassic_DrawParticles(void)
|
|||
if (p->ramp >=8)
|
||||
p->die = -1;
|
||||
else
|
||||
p->color = ramp1[(int) p->ramp];
|
||||
p->rgb = qpal(ramp1[(int) p->ramp]);
|
||||
for (i = 0; i < 3; i++)
|
||||
p->vel[i] += p->vel[i] * dvel;
|
||||
p->vel[2] -= grav*10;
|
||||
|
@ -399,7 +400,7 @@ static void PClassic_DrawParticles(void)
|
|||
if (p->ramp >=8)
|
||||
p->die = -1;
|
||||
else
|
||||
p->color = ramp2[(int) p->ramp];
|
||||
p->rgb = qpal(ramp2[(int) p->ramp]);
|
||||
for (i = 0; i < 3; i++)
|
||||
p->vel[i] -= p->vel[i] * frametime;
|
||||
p->vel[2] -= grav*10;
|
||||
|
@ -447,7 +448,7 @@ static void Classic_ParticleExplosion (vec3_t org)
|
|||
active_particles = p;
|
||||
|
||||
p->die = cl.time + 5;
|
||||
p->color = ramp1[0];
|
||||
p->rgb = d_8to24rgbtable[ramp1[0]];
|
||||
p->ramp = rand() & 3;
|
||||
if (i & 1)
|
||||
{
|
||||
|
@ -489,7 +490,7 @@ static void Classic_BlobExplosion (vec3_t org)
|
|||
if (i & 1)
|
||||
{
|
||||
p->type = pt_blob;
|
||||
p->color = 66 + rand() % 6;
|
||||
p->rgb = d_8to24rgbtable[66 + rand() % 6];
|
||||
for (j = 0; j < 3; j++)
|
||||
{
|
||||
p->org[j] = org[j] + ((rand() % 32) - 16);
|
||||
|
@ -499,7 +500,7 @@ static void Classic_BlobExplosion (vec3_t org)
|
|||
else
|
||||
{
|
||||
p->type = pt_blob2;
|
||||
p->color = 150 + rand() % 6;
|
||||
p->rgb = d_8to24rgbtable[150 + rand() % 6];
|
||||
for (j = 0; j < 3; j++)
|
||||
{
|
||||
p->org[j] = org[j] + ((rand() % 32) - 16);
|
||||
|
@ -529,7 +530,7 @@ static void Classic_RunParticleEffect (vec3_t org, vec3_t dir, int color, int co
|
|||
active_particles = p;
|
||||
|
||||
p->die = cl.time + 0.1 * (rand() % 5);
|
||||
p->color = (color & ~7) + (rand() & 7);
|
||||
p->rgb = d_8to24rgbtable[(color & ~7) + (rand() & 7)];
|
||||
p->type = pt_grav;
|
||||
for (j = 0; j < 3; j++)
|
||||
{
|
||||
|
@ -560,7 +561,7 @@ static void Classic_LavaSplash (vec3_t org)
|
|||
active_particles = p;
|
||||
|
||||
p->die = cl.time + 2 + (rand() & 31) * 0.02;
|
||||
p->color = 224 + (rand() & 7);
|
||||
p->rgb = d_8to24rgbtable[224 + (rand() & 7)];
|
||||
p->type = pt_grav;
|
||||
|
||||
dir[0] = j * 8 + (rand() & 7);
|
||||
|
@ -600,7 +601,7 @@ static void Classic_TeleportSplash (vec3_t org)
|
|||
active_particles = p;
|
||||
|
||||
p->die = cl.time + 0.2 + (rand() & 7) * 0.02;
|
||||
p->color = 7 + (rand() & 7);
|
||||
p->rgb = d_8to24rgbtable[7 + (rand() & 7)];
|
||||
p->type = pt_grav;
|
||||
|
||||
dir[0] = j * 8;
|
||||
|
@ -671,20 +672,20 @@ static float Classic_ParticleTrail (vec3_t start, vec3_t end, float leftover, ef
|
|||
{
|
||||
case GRENADE_TRAIL:
|
||||
p->ramp = (rand() & 3) + 2;
|
||||
p->color = ramp3[(int) p->ramp];
|
||||
p->rgb = d_8to24rgbtable[ramp3[(int) p->ramp]];
|
||||
p->type = pt_fire;
|
||||
for (j = 0; j < 3; j++)
|
||||
p->org[j] = point[j] + ((rand() % 6) - 3);
|
||||
break;
|
||||
case BLOOD_TRAIL:
|
||||
p->type = pt_slowgrav;
|
||||
p->color = 67 + (rand() & 3);
|
||||
p->rgb = d_8to24rgbtable[67 + (rand() & 3)];
|
||||
for (j = 0; j < 3; j++)
|
||||
p->org[j] = point[j] + ((rand() % 6) - 3);
|
||||
break;
|
||||
case BIG_BLOOD_TRAIL:
|
||||
p->type = pt_slowgrav;
|
||||
p->color = 67 + (rand() & 3);
|
||||
p->rgb = d_8to24rgbtable[67 + (rand() & 3)];
|
||||
for (j = 0; j < 3; j++)
|
||||
p->org[j] = point[j] + ((rand() % 6) - 3);
|
||||
break;
|
||||
|
@ -693,9 +694,9 @@ static float Classic_ParticleTrail (vec3_t start, vec3_t end, float leftover, ef
|
|||
p->die = cl.time + 0.5;
|
||||
p->type = pt_static;
|
||||
if (type == TRACER1_TRAIL)
|
||||
p->color = 52 + ((tracercount & 4) << 1);
|
||||
p->rgb = d_8to24rgbtable[52 + ((tracercount & 4) << 1)];
|
||||
else
|
||||
p->color = 230 + ((tracercount & 4) << 1);
|
||||
p->rgb = d_8to24rgbtable[230 + ((tracercount & 4) << 1)];
|
||||
|
||||
tracercount++;
|
||||
|
||||
|
@ -712,7 +713,7 @@ static float Classic_ParticleTrail (vec3_t start, vec3_t end, float leftover, ef
|
|||
}
|
||||
break;
|
||||
case VOOR_TRAIL:
|
||||
p->color = 9 * 16 + 8 + (rand() & 3);
|
||||
p->rgb = d_8to24rgbtable[9 * 16 + 8 + (rand() & 3)];
|
||||
p->type = pt_static;
|
||||
p->die = cl.time + 0.3;
|
||||
for (j = 0; j < 3; j++)
|
||||
|
@ -720,7 +721,7 @@ static float Classic_ParticleTrail (vec3_t start, vec3_t end, float leftover, ef
|
|||
break;
|
||||
case ALT_ROCKET_TRAIL:
|
||||
p->ramp = (rand() & 3);
|
||||
p->color = ramp3[(int) p->ramp];
|
||||
p->rgb = d_8to24rgbtable[ramp3[(int) p->ramp]];
|
||||
p->type = pt_fire;
|
||||
for (j = 0; j < 3; j++)
|
||||
p->org[j] = point[j] + ((rand() % 6) - 3);
|
||||
|
@ -728,7 +729,7 @@ static float Classic_ParticleTrail (vec3_t start, vec3_t end, float leftover, ef
|
|||
case ROCKET_TRAIL:
|
||||
default:
|
||||
p->ramp = (rand() & 3);
|
||||
p->color = ramp3[(int) p->ramp];
|
||||
p->rgb = d_8to24rgbtable[ramp3[(int) p->ramp]];
|
||||
p->type = pt_fire;
|
||||
for (j = 0; j < 3; j++)
|
||||
p->org[j] = point[j] + ((rand() % 6) - 3);
|
||||
|
|
|
@ -1897,7 +1897,10 @@ static void P_LoadParticleSet(char *name, qboolean first)
|
|||
fallback->ShutdownParticles();
|
||||
fallback = &pe_classic;
|
||||
if (fallback)
|
||||
{
|
||||
fallback->InitParticles();
|
||||
fallback->ClearParticles();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -839,7 +839,7 @@ void R_SetRenderer(rendererinfo_t *ri)
|
|||
SCR_UpdateScreen = ri->SCR_UpdateScreen;
|
||||
}
|
||||
|
||||
static qbyte default_quakepal[768] =
|
||||
qbyte default_quakepal[768] =
|
||||
{
|
||||
0,0,0,15,15,15,31,31,31,47,47,47,63,63,63,75,75,75,91,91,91,107,107,107,123,123,123,139,139,139,155,155,155,171,171,171,187,187,187,203,203,203,219,219,219,235,235,235,15,11,7,23,15,11,31,23,11,39,27,15,47,35,19,55,43,23,63,47,23,75,55,27,83,59,27,91,67,31,99,75,31,107,83,31,115,87,31,123,95,35,131,103,35,143,111,35,11,11,15,19,19,27,27,27,39,39,39,51,47,47,63,55,55,75,63,63,87,71,71,103,79,79,115,91,91,127,99,99,
|
||||
139,107,107,151,115,115,163,123,123,175,131,131,187,139,139,203,0,0,0,7,7,0,11,11,0,19,19,0,27,27,0,35,35,0,43,43,7,47,47,7,55,55,7,63,63,7,71,71,7,75,75,11,83,83,11,91,91,11,99,99,11,107,107,15,7,0,0,15,0,0,23,0,0,31,0,0,39,0,0,47,0,0,55,0,0,63,0,0,71,0,0,79,0,0,87,0,0,95,0,0,103,0,0,111,0,0,119,0,0,127,0,0,19,19,0,27,27,0,35,35,0,47,43,0,55,47,0,67,
|
||||
|
|
|
@ -2373,7 +2373,7 @@ void Sbar_Draw (void)
|
|||
Sbar_ExecuteLayoutString(cl.q2statusbar);
|
||||
if (*cl.q2layout)
|
||||
{
|
||||
if (cl.q2frame.playerstate.stats[Q2STAT_LAYOUTS])
|
||||
if (cl.q2frame.playerstate.stats[Q2STAT_LAYOUTS] & 1)
|
||||
Sbar_ExecuteLayoutString(cl.q2layout);
|
||||
}
|
||||
return;
|
||||
|
|
|
@ -481,7 +481,8 @@ void *Sys_GetGameAPI(void *parms)
|
|||
char name[MAX_OSPATH];
|
||||
char curpath[MAX_OSPATH];
|
||||
char *searchpath;
|
||||
const char *gamename = "gamei386.so";
|
||||
const char *agamename = "gamei386.so";
|
||||
const char *ggamename = "game.so";
|
||||
char *result;
|
||||
|
||||
void *ret;
|
||||
|
|
|
@ -799,7 +799,7 @@ void pscript_property_curserver_sets(struct context *ctx, const char *val)
|
|||
}
|
||||
|
||||
Q_strncpyz(cls.servername, val, sizeof(cls.servername));
|
||||
CL_BeginServerConnect();
|
||||
CL_BeginServerConnect(0);
|
||||
}
|
||||
|
||||
void pscript_property_stream_sets(struct context *ctx, const char *val)
|
||||
|
|
|
@ -1335,7 +1335,6 @@ void V_RenderPlayerViews(int plnum)
|
|||
{
|
||||
extern vec3_t desired_position[MAX_SPLITS];
|
||||
vec3_t dir;
|
||||
extern void vectoangles(vec3_t vec, vec3_t ang);
|
||||
|
||||
r_refdef.vrect.y -= r_refdef.vrect.height;
|
||||
vid.recalc_refdef=true;
|
||||
|
|
|
@ -92,6 +92,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
//#define DYNAMIC_LIBPNG
|
||||
//#define DYNAMIC_LIBJPEG
|
||||
|
||||
#if defined(_MSC_VER) //too lazy to fix up the makefile
|
||||
//#define BOTLIB_STATIC
|
||||
#endif
|
||||
|
||||
#define AVAIL_FREETYPE
|
||||
#ifdef _WIN32
|
||||
//needs testing on other platforms
|
||||
|
|
|
@ -177,6 +177,11 @@ typedef struct
|
|||
short children[2]; // negative numbers are contents
|
||||
} dclipnode_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int planenum;
|
||||
short children[2]; // negative numbers are contents
|
||||
} mclipnode_t;
|
||||
|
||||
typedef struct texinfo_s
|
||||
{
|
||||
|
|
|
@ -188,7 +188,7 @@ void InsertLinkAfter (link_t *l, link_t *after)
|
|||
============================================================================
|
||||
*/
|
||||
|
||||
void Q_strncpyz(char *d, const char *s, int n)
|
||||
void QDECL Q_strncpyz(char *d, const char *s, int n)
|
||||
{
|
||||
int i;
|
||||
n--;
|
||||
|
@ -339,7 +339,9 @@ int Q_strncmp (char *s1, char *s2, int count)
|
|||
return -1;
|
||||
}
|
||||
|
||||
int Q_strncasecmp (char *s1, char *s2, int n)
|
||||
#endif
|
||||
|
||||
int Q_strncasecmp (const char *s1, const char *s2, int n)
|
||||
{
|
||||
int c1, c2;
|
||||
|
||||
|
@ -369,12 +371,35 @@ int Q_strncasecmp (char *s1, char *s2, int n)
|
|||
return -1;
|
||||
}
|
||||
|
||||
int Q_strcasecmp (char *s1, char *s2)
|
||||
int Q_strcasecmp (const char *s1, const char *s2)
|
||||
{
|
||||
return Q_strncasecmp (s1, s2, 99999);
|
||||
}
|
||||
int QDECL Q_stricmp (const char *s1, const char *s2)
|
||||
{
|
||||
return Q_strncasecmp (s1, s2, 99999);
|
||||
}
|
||||
|
||||
#endif
|
||||
int QDECL Q_vsnprintf(char *buffer, int size, const char *format, va_list argptr)
|
||||
{
|
||||
return vsnprintf(buffer, size, format, argptr);
|
||||
}
|
||||
|
||||
int VARGS Com_sprintf(char *buffer, int size, const char *format, ...) LIKEPRINTF(3)
|
||||
{
|
||||
int ret;
|
||||
va_list argptr;
|
||||
|
||||
va_start (argptr, format);
|
||||
ret = vsnprintf (buffer, size, format, argptr);
|
||||
va_end (argptr);
|
||||
|
||||
return ret;
|
||||
}
|
||||
void QDECL Com_Error( int level, const char *error, ... )
|
||||
{
|
||||
Sys_Error("%s", error);
|
||||
}
|
||||
|
||||
char *Q_strlwr(char *s)
|
||||
{
|
||||
|
@ -1488,6 +1513,7 @@ void MSGQ2_ReadDeltaUsercmd (usercmd_t *from, usercmd_t *move)
|
|||
// read buttons
|
||||
if (bits & Q2CM_BUTTONS)
|
||||
move->buttons = MSG_ReadByte ();
|
||||
move->buttons_compat = move->buttons & 0xff;
|
||||
|
||||
if (bits & Q2CM_IMPULSE)
|
||||
move->impulse = MSG_ReadByte ();
|
||||
|
|
|
@ -19,6 +19,17 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
*/
|
||||
// comndef.h -- general definitions
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
//make shared
|
||||
#ifndef QDECL
|
||||
#ifdef _MSC_VER
|
||||
#define QDECL _cdecl
|
||||
#else
|
||||
#define QDECL
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef unsigned char qbyte;
|
||||
|
||||
// KJB Undefined true and false defined in SciTech's DEBUG.H header
|
||||
|
@ -208,7 +219,7 @@ void VARGS Q_snprintfz (char *dest, size_t size, char *fmt, ...) LIKEPRINTF(3);
|
|||
#if 0
|
||||
#define Q_strncpyz(d, s, n) Q_strncpyN(d, s, (n)-1)
|
||||
#else
|
||||
void Q_strncpyz(char*d, const char*s, int n);
|
||||
void QDECL Q_strncpyz(char*d, const char*s, int n);
|
||||
#define Q_strncatz(dest, src, sizeofdest) \
|
||||
do { \
|
||||
strncat(dest, src, sizeofdest - strlen(dest) - 1); \
|
||||
|
@ -221,18 +232,10 @@ void Q_strncpyz(char*d, const char*s, int n);
|
|||
#define strncpy Q_strncpy
|
||||
#endif*/
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
#define Q_strcasecmp(s1, s2) _stricmp((s1), (s2))
|
||||
#define Q_strncasecmp(s1, s2, n) _strnicmp((s1), (s2), (n))
|
||||
|
||||
#else
|
||||
|
||||
#define Q_strcasecmp(s1, s2) strcasecmp((s1), (s2))
|
||||
#define Q_strncasecmp(s1, s2, n) strncasecmp((s1), (s2), (n))
|
||||
|
||||
#endif
|
||||
|
||||
/*replacement functions which do not care for locale in text formatting ('C' locale)*/
|
||||
int Q_strncasecmp (const char *s1, const char *s2, int n);
|
||||
int Q_strcasecmp (const char *s1, const char *s2);
|
||||
int Q_atoi (const char *str);
|
||||
float Q_atof (const char *str);
|
||||
|
||||
|
@ -458,3 +461,17 @@ void Log_String (logtype_t lognum, char *s);
|
|||
void Con_Log (char *s);
|
||||
void Log_Logfile_f (void);
|
||||
void Log_Init(void);
|
||||
|
||||
|
||||
/*used by and for botlib and q3 gamecode*/
|
||||
#define MAX_TOKENLENGTH 1024
|
||||
typedef struct pc_token_s
|
||||
{
|
||||
int type;
|
||||
int subtype;
|
||||
int intvalue;
|
||||
float floatvalue;
|
||||
char string[MAX_TOKENLENGTH];
|
||||
} pc_token_t;
|
||||
#define fileHandle_t int
|
||||
#define fsMode_t int
|
||||
|
|
|
@ -73,7 +73,7 @@ void QCRC_Init(unsigned short *crcvalue)
|
|||
|
||||
void QCRC_ProcessByte(unsigned short *crcvalue, qbyte data)
|
||||
{
|
||||
*crcvalue = (*crcvalue << 8) ^ crctable[(*crcvalue >> 8) ^ data];
|
||||
*crcvalue = ((*crcvalue << 8)&0xffff) ^ crctable[(*crcvalue >> 8) ^ data];
|
||||
}
|
||||
|
||||
unsigned short QCRC_Value(unsigned short crcvalue)
|
||||
|
@ -87,7 +87,7 @@ unsigned short QCRC_Block (qbyte *start, int count)
|
|||
|
||||
QCRC_Init (&crc);
|
||||
while (count--)
|
||||
crc = (crc << 8) ^ crctable[(crc >> 8) ^ *start++];
|
||||
crc = ((crc << 8) & 0xffff) ^ crctable[(crc >> 8) ^ *start++];
|
||||
|
||||
return crc;
|
||||
}
|
||||
|
|
|
@ -1632,10 +1632,16 @@ void COM_Gamedir (const char *dir)
|
|||
#endif
|
||||
}
|
||||
|
||||
/*stuff that makes dp-only mods work a bit better*/
|
||||
#define DPCOMPAT "set _cl_playermodel \"\"\n set dpcompat_set 1\n set dpcompat_trailparticles 1\nset dpcompat_corruptglobals 1\nset vid_pixelheight 1\n"
|
||||
#define NEXCFG DPCOMPAT "set r_particlesdesc effectinfo\nset sv_maxairspeed \"400\"\nset sv_jumpvelocity 270\nset sv_mintic \"0.01\"\ncl_nolerp 0\nset r_particlesdesc effectinfo\n"
|
||||
/*nexuiz/xonotic has a few quirks...*/
|
||||
#define NEXCFG DPCOMPAT "set r_particlesdesc effectinfo\nset sv_maxairspeed \"400\"\nset sv_jumpvelocity 270\nset sv_mintic \"0.01\"\ncl_nolerp 0\n"
|
||||
/*some modern non-compat settings*/
|
||||
#define DMFCFG "set com_parseutf8 1\npm_airstep 1\n"
|
||||
/*set some stuff so our regular qw client appears more like hexen2*/
|
||||
#define HEX2CFG "set r_particlesdesc \"spikeset tsshaft h2part\"\nset sv_maxspeed 640\nset watervis 1\nset r_wateralpha 0.5\nset sv_pupglow 1\nset cl_model_bobbing 1\n"
|
||||
/*Q3's ui doesn't like empty model/headmodel/handicap cvars, even if the gamecode copes*/
|
||||
#define Q3CFG "seta model sarge\nseta headmodel sarge\nseta handicap 100\n"
|
||||
|
||||
typedef struct {
|
||||
const char *protocolname; //sent to the master server when this is the current gamemode.
|
||||
|
@ -1666,7 +1672,7 @@ const gamemode_info_t gamemode_info[] = {
|
|||
"portals/pak3.pak"}, HEX2CFG,{"data1", "portals", "fteh2"}, "Hexen II MP"},
|
||||
{"FTE-Hexen2", "hexen2", "-hexen2", {"data1/pak0.pak"}, HEX2CFG,{"data1", "fteh2"}, "Hexen II"},
|
||||
{"FTE-Quake2", "q2", "-q2", {"baseq2/pak0.pak"}, NULL, {"baseq2", "fteq2"}, "Quake II"},
|
||||
{"FTE-Quake3", "q3", "-q3", {"baseq3/pak0.pk3"}, NULL, {"baseq3", "fteq3"}, "Quake III Arena"},
|
||||
{"FTE-Quake3", "q3", "-q3", {"baseq3/pak0.pk3"}, Q3CFG, {"baseq3", "fteq3"}, "Quake III Arena"},
|
||||
{"FTE-Quake4", "q4", "-q4", {"q4base/pak00.pk4"}, NULL, {"q4base", "fteq4"}, "Quake 4"},
|
||||
{"FTE-EnemyTerritory", "et", "-et", {"etmain/pak0.pk3"}, NULL, {"etmain", "fteet"}, "Wolfenstein - Enemy Territory"},
|
||||
|
||||
|
|
|
@ -2357,14 +2357,9 @@ mfog_t *CM_FogForOrigin(vec3_t org)
|
|||
|
||||
//Convert a patch in to a list of glpolys
|
||||
|
||||
#define MAX_ARRAY_VERTS 2048
|
||||
#define MAX_ARRAY_VERTS 65535
|
||||
|
||||
index_t tempIndexesArray[MAX_ARRAY_VERTS*3];
|
||||
vecV_t tempxyz_array[MAX_ARRAY_VERTS]; //structure is used only at load.
|
||||
vec3_t tempnormals_array[MAX_ARRAY_VERTS]; //so what harm is there in doing this?
|
||||
vec2_t tempst_array[MAX_ARRAY_VERTS];
|
||||
vec2_t templmst_array[MAX_ARRAY_VERTS];
|
||||
byte_vec4_t tempcolors_array[MAX_ARRAY_VERTS];
|
||||
index_t tempIndexesArray[MAX_ARRAY_VERTS*6];
|
||||
|
||||
//mesh_t *GL_CreateMeshForPatch ( model_t *mod, q3dface_t *surf )
|
||||
mesh_t *GL_CreateMeshForPatch (model_t *mod, int patchwidth, int patchheight, int numverts, int firstvert)
|
||||
|
@ -2633,6 +2628,8 @@ qboolean CModQ3_LoadRFaces (lump_t *l)
|
|||
Vector4Copy(mesh->colors4b_array[0], mesh->colors4b_array[2]);
|
||||
Vector4Copy(mesh->colors4b_array[0], mesh->colors4b_array[3]);
|
||||
}
|
||||
if (out->mesh->numindexes == 0)
|
||||
Con_Printf("foo\n");
|
||||
}
|
||||
|
||||
Mod_NormaliseTextureVectors(map_normals_array, map_svector_array, map_tvector_array, numvertexes);
|
||||
|
|
|
@ -368,7 +368,7 @@ void VectorAngles(float *forward, float *up, float *result) //up may be NULL
|
|||
result[2] = roll;
|
||||
}
|
||||
|
||||
void AngleVectors (const vec3_t angles, vec3_t forward, vec3_t right, vec3_t up)
|
||||
void QDECL AngleVectors (const vec3_t angles, vec3_t forward, vec3_t right, vec3_t up)
|
||||
{
|
||||
float angle;
|
||||
float sr, sp, sy, cr, cp, cy;
|
||||
|
@ -403,6 +403,36 @@ void AngleVectors (const vec3_t angles, vec3_t forward, vec3_t right, vec3_t up)
|
|||
}
|
||||
}
|
||||
|
||||
void QDECL vectoangles(vec3_t vec, vec3_t ang)
|
||||
{
|
||||
float forward;
|
||||
float yaw, pitch;
|
||||
|
||||
if (vec[1] == 0 && vec[0] == 0)
|
||||
{
|
||||
yaw = 0;
|
||||
if (vec[2] > 0)
|
||||
pitch = 90;
|
||||
else
|
||||
pitch = 270;
|
||||
}
|
||||
else
|
||||
{
|
||||
yaw = /*(int)*/ (atan2(vec[1], vec[0]) * 180 / M_PI);
|
||||
if (yaw < 0)
|
||||
yaw += 360;
|
||||
|
||||
forward = sqrt (vec[0]*vec[0] + vec[1]*vec[1]);
|
||||
pitch = /*(int)*/ (atan2(vec[2], forward) * 180 / M_PI);
|
||||
if (pitch < 0)
|
||||
pitch += 360;
|
||||
}
|
||||
|
||||
ang[0] = pitch;
|
||||
ang[1] = yaw;
|
||||
ang[2] = 0;
|
||||
}
|
||||
|
||||
int VectorCompare (const vec3_t v1, const vec3_t v2)
|
||||
{
|
||||
int i;
|
||||
|
@ -485,7 +515,7 @@ float Q_rsqrt(float number)
|
|||
return y;
|
||||
}
|
||||
|
||||
float VectorNormalize (vec3_t v)
|
||||
float QDECL VectorNormalize (vec3_t v)
|
||||
{
|
||||
float length, ilength;
|
||||
|
||||
|
@ -1637,7 +1667,7 @@ void Matrix3_Multiply (vec3_t *in1, vec3_t *in2, vec3_t *out)
|
|||
out[2][2] = in1[2][0]*in2[0][2] + in1[2][1]*in2[1][2] + in1[2][2]*in2[2][2];
|
||||
}
|
||||
|
||||
vec_t VectorNormalize2 (const vec3_t v, vec3_t out)
|
||||
vec_t QDECL VectorNormalize2 (const vec3_t v, vec3_t out)
|
||||
{
|
||||
float length, ilength;
|
||||
|
||||
|
|
|
@ -115,7 +115,7 @@ void _VectorCopy (vec3_t in, vec3_t out);
|
|||
void _VectorSubtract (vec3_t veca, vec3_t vecb, vec3_t out);
|
||||
void AddPointToBounds (vec3_t v, vec3_t mins, vec3_t maxs);
|
||||
float anglemod (float a);
|
||||
void AngleVectors (const vec3_t angles, vec3_t forward, vec3_t right, vec3_t up);
|
||||
void QDECL AngleVectors (const vec3_t angles, vec3_t forward, vec3_t right, vec3_t up);
|
||||
void VectorAngles (float *forward, float *up, float *angles); //up may be NULL
|
||||
void VARGS BOPS_Error (void);
|
||||
int VARGS BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, struct mplane_s *plane);
|
||||
|
@ -173,8 +173,8 @@ void RotateLightVector(const vec3_t *axis, const vec3_t origin, const vec3_t li
|
|||
int VectorCompare (const vec3_t v1, const vec3_t v2);
|
||||
void VectorInverse (vec3_t v);
|
||||
void _VectorMA (const vec3_t veca, const float scale, const vec3_t vecb, vec3_t vecc);
|
||||
float VectorNormalize (vec3_t v); // returns vector length
|
||||
vec_t VectorNormalize2 (const vec3_t v, vec3_t out);
|
||||
float QDECL VectorNormalize (vec3_t v); // returns vector length
|
||||
vec_t QDECL VectorNormalize2 (const vec3_t v, vec3_t out);
|
||||
void VectorNormalizeFast(vec3_t v);
|
||||
void VectorTransform (const vec3_t in1, const matrix3x4 in2, vec3_t out);
|
||||
void VectorVectors (const vec3_t forward, vec3_t right, vec3_t up);
|
||||
|
|
|
@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
static qboolean PM_TransformedHullCheck (model_t *model, vec3_t start, vec3_t end, trace_t *trace, vec3_t origin, vec3_t angles);
|
||||
int Q1BSP_HullPointContents(hull_t *hull, vec3_t p);
|
||||
static hull_t box_hull;
|
||||
static dclipnode_t box_clipnodes[6];
|
||||
static mclipnode_t box_clipnodes[6];
|
||||
static mplane_t box_planes[6];
|
||||
|
||||
extern vec3_t player_mins;
|
||||
|
|
|
@ -798,14 +798,15 @@ typedef struct usercmd_s
|
|||
{
|
||||
//the first members of this structure MUST match the q2 version
|
||||
qbyte msec;
|
||||
qbyte buttons;
|
||||
qbyte buttons_compat;
|
||||
short angles[3];
|
||||
short forwardmove, sidemove, upmove;
|
||||
qbyte impulse;
|
||||
qbyte lightlevel;
|
||||
|
||||
//freestyle
|
||||
qbyte weapon;
|
||||
int buttons;
|
||||
int weapon;
|
||||
int servertime;
|
||||
float fservertime;
|
||||
float fclienttime;
|
||||
|
|
|
@ -11,7 +11,7 @@ Physics functions (common)
|
|||
void Q1BSP_CheckHullNodes(hull_t *hull)
|
||||
{
|
||||
int num, c;
|
||||
dclipnode_t *node;
|
||||
mclipnode_t *node;
|
||||
for (num = hull->firstclipnode; num < hull->lastclipnode; num++)
|
||||
{
|
||||
node = hull->clipnodes + num;
|
||||
|
@ -32,7 +32,7 @@ SV_HullPointContents
|
|||
static int Q1_HullPointContents (hull_t *hull, int num, vec3_t p)
|
||||
{
|
||||
float d;
|
||||
dclipnode_t *node;
|
||||
mclipnode_t *node;
|
||||
mplane_t *plane;
|
||||
|
||||
while (num >= 0)
|
||||
|
@ -205,7 +205,7 @@ qboolean Q1BSP_RecursiveHullCheck (hull_t *hull, int num, float p1f, float p2f,
|
|||
#else
|
||||
qboolean Q1BSP_RecursiveHullCheck (hull_t *hull, int num, float p1f, float p2f, vec3_t p1, vec3_t p2, trace_t *trace)
|
||||
{
|
||||
dclipnode_t *node;
|
||||
mclipnode_t *node;
|
||||
mplane_t *plane;
|
||||
float t1, t2;
|
||||
float frac;
|
||||
|
@ -1007,7 +1007,9 @@ int Q1BSP_ClipDecal(vec3_t center, vec3_t normal, vec3_t tangent1, vec3_t tangen
|
|||
|
||||
sh_shadowframe++;
|
||||
|
||||
if (cl.worldmodel->fromgame == fg_quake)
|
||||
if (!cl.worldmodel)
|
||||
return 0;
|
||||
else if (cl.worldmodel->fromgame == fg_quake)
|
||||
Q1BSP_ClipDecalToNodes(&dec, cl.worldmodel->nodes);
|
||||
#ifdef Q3BSPS
|
||||
else if (cl.worldmodel->fromgame == fg_quake3)
|
||||
|
|
|
@ -1642,7 +1642,8 @@ void MSG_Q3_ReadDeltaPlayerstate( const q3playerState_t *from, q3playerState_t *
|
|||
////////////////////////////////////////////////////////////
|
||||
//user commands
|
||||
|
||||
int kbitmask[32] = {
|
||||
int kbitmask[] = {
|
||||
0,
|
||||
0x00000001, 0x00000003, 0x00000007, 0x0000000F,
|
||||
0x0000001F, 0x0000003F, 0x0000007F, 0x000000FF,
|
||||
0x000001FF, 0x000003FF, 0x000007FF, 0x00000FFF,
|
||||
|
@ -1656,7 +1657,7 @@ int kbitmask[32] = {
|
|||
static int MSG_ReadDeltaKey(int key, int from, int bits)
|
||||
{
|
||||
if (MSG_ReadBits(1))
|
||||
return MSG_ReadBits(bits)^ (key & kbitmask[bits]);
|
||||
return MSG_ReadBits(bits) ^ (key & kbitmask[bits]);
|
||||
else
|
||||
return from;
|
||||
}
|
||||
|
@ -1666,7 +1667,14 @@ void MSG_Q3_ReadDeltaUsercmd(int key, const usercmd_t *from, usercmd_t *to)
|
|||
to->servertime = MSG_ReadBits(8) + from->servertime;
|
||||
else
|
||||
to->servertime = MSG_ReadBits(32);
|
||||
to->msec = to->servertime - from->servertime;
|
||||
|
||||
if ((unsigned int)(to->servertime - from->servertime) > 255)
|
||||
{
|
||||
Con_DPrintf("msecs clamped\n");
|
||||
to->msec = 255;
|
||||
}
|
||||
else
|
||||
to->msec = to->servertime - from->servertime;
|
||||
|
||||
if (!MSG_ReadBits(1))
|
||||
{
|
||||
|
|
|
@ -99,8 +99,7 @@ typedef struct areanode_s
|
|||
int axis; // -1 = leaf node
|
||||
float dist;
|
||||
struct areanode_s *children[2];
|
||||
link_t trigger_edicts;
|
||||
link_t solid_edicts;
|
||||
link_t edicts;
|
||||
} areanode_t;
|
||||
|
||||
#define AREA_DEPTH 4
|
||||
|
|
|
@ -2142,7 +2142,7 @@ void Memory_Init (void *buf, int size)
|
|||
|
||||
#if ZONEDEBUG>0 || HUNKDEBUG>0 || TEMPDEBUG>0||CACHEDEBUG>0
|
||||
srand(time(0));
|
||||
sentinalkey = rand();
|
||||
sentinalkey = rand() & 0xff;
|
||||
#endif
|
||||
|
||||
Cache_Init ();
|
||||
|
|
407
engine/dotnet2005/botlib.vcproj
Normal file
407
engine/dotnet2005/botlib.vcproj
Normal file
|
@ -0,0 +1,407 @@
|
|||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8.00"
|
||||
Name="botlib"
|
||||
ProjectGUID="{0018E098-B12A-4E4D-9B22-6772DA287080}"
|
||||
RootNamespace="botlib"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="4"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="../libs/speex,..\client,../libs/freetype2/include,../common,../server,../gl,../sw,../qclib,../libs,../libs/dxsdk7/include"
|
||||
PreprocessorDefinitions="BOTLIB"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
SmallerTypeCheck="true"
|
||||
RuntimeLibrary="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="4"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
FavorSizeOrSpeed="0"
|
||||
OmitFramePointers="true"
|
||||
PreprocessorDefinitions="BOTLIB"
|
||||
RuntimeLibrary="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLibrarianTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_bspq3.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_cluster.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_debug.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_entity.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_file.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_main.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_move.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_optimize.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_reach.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_route.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_routealt.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_sample.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_ai_char.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_ai_chat.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_ai_gen.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_ai_goal.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_ai_move.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_ai_weap.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_ai_weight.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_ea.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_interface.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\l_crc.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\l_libvar.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\l_log.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\l_memory.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\l_precomp.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\l_script.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\l_struct.c"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\botlib\aasfile.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_bsp.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_cluster.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_debug.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_def.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_entity.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_file.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_funcs.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_main.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_move.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_optimize.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_reach.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_route.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_routealt.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_aas_sample.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_ai_char.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_ai_chat.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_ai_gen.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_ai_goal.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_ai_move.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_ai_weap.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_ai_weight.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_ea.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\be_interface.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\botlib.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\l_crc.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\l_libvar.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\l_log.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\l_memory.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\l_precomp.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\l_script.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\l_struct.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\botlib\l_utils.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
|
@ -1,10 +1,16 @@
|
|||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftequake", "ftequake.vcproj", "{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1364}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080} = {0018E098-B12A-4E4D-9B22-6772DA287080}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ftequake_SDL", "ftequake_SDL.vcproj", "{F384725A-62D4-4063-9941-6D8D2D6C2A47}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "npfte", "npfte.vcproj", "{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080} = {0018E098-B12A-4E4D-9B22-6772DA287080}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "FTEQuake", "..\setup\setup.vdproj", "{E0EE8B50-3A75-42A9-B80A-787675979B0C}"
|
||||
EndProject
|
||||
|
@ -13,6 +19,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qtvprox", "..\..\fteqtv\qtv
|
|||
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365} = {88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "botlib", "botlib.vcproj", "{0018E098-B12A-4E4D-9B22-6772DA287080}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
D3DDebug|Win32 = D3DDebug|Win32
|
||||
|
@ -130,7 +138,6 @@ Global
|
|||
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.GLDebug|x64.ActiveCfg = GLDebug|x64
|
||||
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.GLDebug|x64.Build.0 = GLDebug|x64
|
||||
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.GLRelease|Win32.ActiveCfg = GLRelease|Win32
|
||||
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.GLRelease|Win32.Build.0 = GLRelease|Win32
|
||||
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.GLRelease|x64.ActiveCfg = GLRelease|x64
|
||||
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.GLRelease|x64.Build.0 = GLRelease|x64
|
||||
{88BFEE0E-7BC0-43AD-9CCC-6B1A6E4C1365}.MDebug|Win32.ActiveCfg = GLRelease|x64
|
||||
|
@ -215,6 +222,40 @@ Global
|
|||
{1A353DA0-F351-4C0D-A21D-E2B460600B20}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{1A353DA0-F351-4C0D-A21D-E2B460600B20}.Release|Win32.Build.0 = Release|Win32
|
||||
{1A353DA0-F351-4C0D-A21D-E2B460600B20}.Release|x64.ActiveCfg = Release|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.D3DDebug|Win32.ActiveCfg = Debug|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.D3DDebug|Win32.Build.0 = Debug|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.D3DDebug|x64.ActiveCfg = Debug|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.D3DRelease|Win32.ActiveCfg = Release|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.D3DRelease|Win32.Build.0 = Release|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.D3DRelease|x64.ActiveCfg = Release|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.Debug Dedicated Server|Win32.ActiveCfg = Debug|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.Debug Dedicated Server|Win32.Build.0 = Debug|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.Debug Dedicated Server|x64.ActiveCfg = Debug|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.Debug|x64.ActiveCfg = Debug|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.GLDebug|Win32.ActiveCfg = Debug|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.GLDebug|Win32.Build.0 = Debug|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.GLDebug|x64.ActiveCfg = Debug|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.GLRelease|Win32.ActiveCfg = Release|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.GLRelease|Win32.Build.0 = Release|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.GLRelease|x64.ActiveCfg = Release|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.MDebug|Win32.ActiveCfg = Debug|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.MDebug|Win32.Build.0 = Debug|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.MDebug|x64.ActiveCfg = Debug|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.MinGLDebug|Win32.ActiveCfg = Debug|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.MinGLDebug|x64.ActiveCfg = Debug|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.MinGLRelease|Win32.ActiveCfg = Release|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.MinGLRelease|x64.ActiveCfg = Release|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.MRelease|Win32.ActiveCfg = Release|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.MRelease|Win32.Build.0 = Release|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.MRelease|x64.ActiveCfg = Release|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.Release Dedicated Server|Win32.ActiveCfg = Release|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.Release Dedicated Server|Win32.Build.0 = Release|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.Release Dedicated Server|x64.ActiveCfg = Release|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.Release|Win32.Build.0 = Release|Win32
|
||||
{0018E098-B12A-4E4D-9B22-6772DA287080}.Release|x64.ActiveCfg = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -929,7 +929,7 @@ struct font_s *Font_LoadFont(int height, char *fontfilename)
|
|||
f->chars[i].bmh = PLANEWIDTH/16;
|
||||
f->chars[i].bmw = PLANEWIDTH/16;
|
||||
f->chars[i].bmx = (i&15)*(PLANEWIDTH/16);
|
||||
f->chars[i].bmy = (i/16)*(PLANEWIDTH/16);
|
||||
f->chars[i].bmy = ((i/16)*(PLANEWIDTH/16)) & 0xff;
|
||||
f->chars[i].left = 0;
|
||||
f->chars[i].top = 0;
|
||||
f->chars[i].nextchar = 0; //these chars are not linked in
|
||||
|
|
|
@ -2306,7 +2306,8 @@ Mod_LoadClipnodes
|
|||
*/
|
||||
qboolean RMod_LoadClipnodes (lump_t *l)
|
||||
{
|
||||
dclipnode_t *in, *out;
|
||||
dclipnode_t *in;
|
||||
mclipnode_t *out;
|
||||
int i, count;
|
||||
hull_t *hull;
|
||||
|
||||
|
@ -2527,7 +2528,7 @@ Deplicate the drawing hull structure as a clipping hull
|
|||
void RMod_MakeHull0 (void)
|
||||
{
|
||||
mnode_t *in, *child;
|
||||
dclipnode_t *out;
|
||||
mclipnode_t *out;
|
||||
int i, j, count;
|
||||
hull_t *hull;
|
||||
|
||||
|
|
|
@ -446,7 +446,7 @@ typedef struct
|
|||
// !!! if this is changed, it must be changed in asm_i386.h too !!!
|
||||
typedef struct hull_s
|
||||
{
|
||||
dclipnode_t *clipnodes;
|
||||
mclipnode_t *clipnodes;
|
||||
mplane_t *planes;
|
||||
int firstclipnode;
|
||||
int lastclipnode;
|
||||
|
@ -859,7 +859,7 @@ typedef struct model_s
|
|||
int *surfedges;
|
||||
|
||||
int numclipnodes;
|
||||
dclipnode_t *clipnodes;
|
||||
mclipnode_t *clipnodes;
|
||||
|
||||
int nummarksurfaces;
|
||||
msurface_t **marksurfaces;
|
||||
|
|
|
@ -238,7 +238,7 @@ void GLR_RenderDlights (void)
|
|||
l = cl_dlights+rtlights_first;
|
||||
for (i=rtlights_first; i<rtlights_max; i++, l++)
|
||||
{
|
||||
if (!l->radius)// || !(l->flags & LFLAG_ALLOW_FLASH))
|
||||
if (!l->radius || !(l->flags & LFLAG_ALLOW_FLASH))
|
||||
continue;
|
||||
|
||||
//dlights emitting from the local player are not visible as flashblends
|
||||
|
|
|
@ -1122,7 +1122,7 @@ struct sbuiltin_s
|
|||
"}\n"
|
||||
"#endif\n"
|
||||
},
|
||||
{QR_OPENGL, 110, "defaultsky",
|
||||
/* {QR_OPENGL, 110, "defaultsky",
|
||||
"#ifdef VERTEX_SHADER\n"
|
||||
"varying vec3 pos;\n"
|
||||
|
||||
|
@ -1156,10 +1156,10 @@ struct sbuiltin_s
|
|||
" vec4 clouds = texture2D(s_t1, tccoord);\n"
|
||||
|
||||
" gl_FragColor.rgb = (solid.rgb*(1.0-clouds.a)) + (clouds.a*clouds.rgb);\n"
|
||||
// " gl_FragColor.rgb = solid.rgb;/*gl_FragColor.g = clouds.r;*/gl_FragColor.b = clouds.a;\n"
|
||||
"}\n"
|
||||
"#endif\n"
|
||||
},
|
||||
*/
|
||||
/*draws a model. there's lots of extra stuff for light shading calcs and upper/lower textures*/
|
||||
{QR_OPENGL/*ES*/, 100, "defaultskin",
|
||||
"!!permu FULLBRIGHT\n"
|
||||
|
|
|
@ -459,7 +459,6 @@ static void R_DrawSkyMesh(batch_t *batch, mesh_t *m, shader_t *shader)
|
|||
{
|
||||
static entity_t skyent;
|
||||
batch_t b;
|
||||
//float time = cl.gametime+realtime-cl.gametimemark; //warning: unused variable ‘time’
|
||||
|
||||
float skydist = gl_skyboxdist.value;
|
||||
if (skydist<1)
|
||||
|
|
|
@ -2497,7 +2497,7 @@ static void QCBUILTIN PF_particle (progfuncs_t *prinst, globalvars_t *pr_globals
|
|||
v = -128;
|
||||
MSG_WriteChar (&sv.nqmulticast, v);
|
||||
}
|
||||
MSG_WriteByte (&sv.nqmulticast, count*20);
|
||||
MSG_WriteByte (&sv.nqmulticast, count);
|
||||
MSG_WriteByte (&sv.nqmulticast, color);
|
||||
#endif
|
||||
//for qw users (and not fte)
|
||||
|
@ -2743,6 +2743,9 @@ void PF_ambientsound_Internal (float *pos, char *samp, float vol, float attenuat
|
|||
|
||||
SV_FlushSignon();
|
||||
|
||||
if (soundnum > 255)
|
||||
return;
|
||||
|
||||
// add an svc_spawnambient command to the level signon packet
|
||||
|
||||
MSG_WriteByte (&sv.signon,svc_spawnstaticsound);
|
||||
|
|
|
@ -293,8 +293,6 @@ typedef struct
|
|||
int APIversion;
|
||||
} gameData32_t;
|
||||
|
||||
typedef int fileHandle_t;
|
||||
|
||||
typedef enum {
|
||||
FS_READ_BIN,
|
||||
FS_READ_TXT,
|
||||
|
@ -302,7 +300,7 @@ typedef enum {
|
|||
FS_WRITE_TXT,
|
||||
FS_APPEND_BIN,
|
||||
FS_APPEND_TXT
|
||||
} fsMode_t;
|
||||
} q1qvmfsMode_t;
|
||||
|
||||
typedef enum {
|
||||
FS_SEEK_CUR,
|
||||
|
@ -940,8 +938,28 @@ static qintptr_t syscallhandle (void *offset, quintptr_t mask, qintptr_t fn, con
|
|||
//ret = filesize or -1
|
||||
|
||||
// Con_Printf("G_FSOpenFile: %s (mode %i)\n", VM_POINTER(arg[0]), arg[2]);
|
||||
|
||||
return VM_fopen(VM_POINTER(arg[0]), VM_POINTER(arg[1]), arg[2]/2, VMFSID_Q1QVM);
|
||||
{
|
||||
int mode;
|
||||
switch((q1qvmfsMode_t)arg[2])
|
||||
{
|
||||
default:
|
||||
return -1;
|
||||
case FS_READ_BIN:
|
||||
case FS_READ_TXT:
|
||||
mode = VM_FS_READ;
|
||||
break;
|
||||
case FS_WRITE_BIN:
|
||||
case FS_WRITE_TXT:
|
||||
mode = VM_FS_WRITE;
|
||||
break;
|
||||
case FS_APPEND_BIN:
|
||||
case FS_APPEND_TXT:
|
||||
mode = VM_FS_APPEND;
|
||||
break;
|
||||
}
|
||||
return VM_fopen(VM_POINTER(arg[0]), VM_POINTER(arg[1]), mode, VMFSID_Q1QVM);
|
||||
}
|
||||
break;
|
||||
|
||||
case G_FS_CloseFile:
|
||||
VM_fclose(arg[0], VMFSID_Q1QVM);
|
||||
|
|
|
@ -563,7 +563,7 @@ qboolean SV_LoadLevelCache(char *savename, char *level, char *startspot, qboolea
|
|||
return false;
|
||||
}
|
||||
|
||||
if (!FS_NativePath(name, FS_GAMEONLY, syspath, sizeof(syspath)))
|
||||
if (!FS_NativePath(name, FS_GAME, syspath, sizeof(syspath)))
|
||||
return false;
|
||||
|
||||
ge->ReadLevel(syspath);
|
||||
|
@ -895,7 +895,7 @@ void SV_SaveLevelCache(char *savedir, qboolean dontharmgame)
|
|||
|
||||
#define FTESAVEGAME_VERSION 25000
|
||||
|
||||
void SV_Savegame_f (void)
|
||||
void SV_Savegame (char *savename)
|
||||
{
|
||||
extern cvar_t nomonsters;
|
||||
extern cvar_t gamecfg;
|
||||
|
@ -919,7 +919,6 @@ void SV_Savegame_f (void)
|
|||
char comment[SAVEGAME_COMMENT_LENGTH+1];
|
||||
vfsfile_t *f;
|
||||
int len;
|
||||
char *savename;
|
||||
levelcache_t *cache;
|
||||
char str[MAX_LOCALINFO_STRING+1];
|
||||
char *savefilename;
|
||||
|
@ -930,8 +929,7 @@ void SV_Savegame_f (void)
|
|||
return;
|
||||
}
|
||||
|
||||
savename = Cmd_Argv(1);
|
||||
|
||||
/*catch invalid names*/
|
||||
if (!*savename || strstr(savename, ".."))
|
||||
savename = "quicksav";
|
||||
|
||||
|
@ -1017,6 +1015,11 @@ void SV_Savegame_f (void)
|
|||
FS_FlushFSHash();
|
||||
}
|
||||
|
||||
void SV_Savegame_f (void)
|
||||
{
|
||||
SV_Savegame(Cmd_Argv(1));
|
||||
}
|
||||
|
||||
void SV_Loadgame_f (void)
|
||||
{
|
||||
levelcache_t *cache;
|
||||
|
|
|
@ -936,6 +936,7 @@ void SV_WriteDelta (entity_state_t *from, entity_state_t *to, sizebuf_t *msg, qb
|
|||
|
||||
void SV_SaveSpawnparms (qboolean);
|
||||
void SV_SaveLevelCache(char *savename, qboolean dontharmgame);
|
||||
void SV_Savegame (char *savename);
|
||||
qboolean SV_LoadLevelCache(char *savename, char *level, char *startspot, qboolean ignoreplayers);
|
||||
|
||||
void SV_Physics_Client (edict_t *ent, int num);
|
||||
|
|
|
@ -424,6 +424,16 @@ SV_Map_f
|
|||
handle a
|
||||
map <mapname>
|
||||
command from the console or progs.
|
||||
|
||||
quirks:
|
||||
a leading '*' means new unit, meaning all old state is flushed regardless of startspot
|
||||
a '+' means 'set nextmap cvar to the following value and otherwise ignore, for q2 compat. only applies if there's also a '.' and the specified bsp doesn't exist, for q1 compat.
|
||||
just a '.' is taken to mean 'restart'. parms are not changed from their current values, startspot is also unchanged.
|
||||
|
||||
'map' will change map, for most games. note that NQ kicks everyone (NQ expects you to use changelevel for that).
|
||||
'changelevel' will not flush the level cache, for h2 compat (won't save current level state in such a situation, as nq would prefer not)
|
||||
'gamemap' will save the game to 'save0' after loading, for q2 compat
|
||||
'spmap' is for q3 and sets 'gametype' to '2', otherwise identical to 'map'. all other map commands will reset it to '0' if its '2' at the time.
|
||||
======================
|
||||
*/
|
||||
void SV_Map_f (void)
|
||||
|
@ -437,6 +447,7 @@ void SV_Map_f (void)
|
|||
qboolean cinematic = false;
|
||||
qboolean waschangelevel = false;
|
||||
qboolean wasspmap = false;
|
||||
qboolean wasgamemap = false;
|
||||
int i;
|
||||
char *startspot;
|
||||
|
||||
|
@ -463,6 +474,7 @@ void SV_Map_f (void)
|
|||
|
||||
waschangelevel = !strcmp(Cmd_Argv(0), "changelevel");
|
||||
wasspmap = !strcmp(Cmd_Argv(0), "spmap");
|
||||
wasgamemap = !strcmp(Cmd_Argv(0), "gamemap");
|
||||
|
||||
if (strcmp(level, ".")) //restart current
|
||||
{
|
||||
|
@ -660,6 +672,11 @@ void SV_Map_f (void)
|
|||
else
|
||||
Cvar_Set(nsv, "");
|
||||
}
|
||||
|
||||
if (wasgamemap)
|
||||
{
|
||||
SV_Savegame("s0");
|
||||
}
|
||||
}
|
||||
|
||||
void SV_KillServer_f(void)
|
||||
|
|
|
@ -211,12 +211,12 @@ void SV_EmitNailUpdate (sizebuf_t *msg, qboolean recorder)
|
|||
p = (int)(16*ent->v->angles[0]/360)&15;
|
||||
yaw = (int)(256*ent->v->angles[1]/360)&255;
|
||||
|
||||
bits[0] = x;
|
||||
bits[1] = (x>>8) | (y<<4);
|
||||
bits[2] = (y>>4);
|
||||
bits[3] = z;
|
||||
bits[4] = (z>>8) | (p<<4);
|
||||
bits[5] = yaw;
|
||||
bits[0] = x & 0xff;
|
||||
bits[1] = ((x>>8) | (y<<4)) & 0xff;
|
||||
bits[2] = (y>>4) & 0xff;
|
||||
bits[3] = z & 0xff;
|
||||
bits[4] = ((z>>8) | (p<<4)) & 0xff;
|
||||
bits[5] = yaw & 0xff;
|
||||
|
||||
for (i=0 ; i<6 ; i++)
|
||||
MSG_WriteByte (msg, bits[i]);
|
||||
|
|
|
@ -2184,7 +2184,7 @@ qboolean SV_Physics (void)
|
|||
SV_RunEntity (ent);
|
||||
SV_RunNewmis ();
|
||||
|
||||
if (ent->solidtype != ent->v->solid && !ent->isfree)
|
||||
if (((!ent->solidtype) != (!(qbyte)ent->v->solid)) && !ent->isfree)
|
||||
{
|
||||
Con_DPrintf("Entity \"%s\" improperly changed solid type\n", PR_GetString(svprogfuncs, ent->v->classname));
|
||||
World_LinkEdict (&sv.world, (wedict_t*)ent, true); // a change of solidity should always relink the edict. someone messed up.
|
||||
|
|
|
@ -945,7 +945,7 @@ void SV_Soundlist_f (void)
|
|||
MSG_WriteByte (&host_client->netchan.message, 0);
|
||||
|
||||
// next msg
|
||||
MSG_WriteByte (&host_client->netchan.message, n);
|
||||
MSG_WriteByte (&host_client->netchan.message, n & 0xff);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1079,7 +1079,7 @@ void SV_Modellist_f (void)
|
|||
MSG_WriteByte (&host_client->netchan.message, 0);
|
||||
|
||||
// next msg
|
||||
MSG_WriteByte (&host_client->netchan.message, n);
|
||||
MSG_WriteByte (&host_client->netchan.message, n & 0xff);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1706,6 +1706,8 @@ void SV_Begin_f (void)
|
|||
|
||||
if (host_client->istobeloaded)
|
||||
sendangles = true;
|
||||
if (host_client->protocol == SCP_QUAKE2)
|
||||
sendangles = false;
|
||||
|
||||
|
||||
for (split = host_client; split; split = split->controlled)
|
||||
|
@ -5026,7 +5028,7 @@ void AddLinksToPmove ( edict_t *player, areanode_t *node )
|
|||
pl = EDICT_TO_PROG(svprogfuncs, player);
|
||||
|
||||
// touch linked edicts
|
||||
for (l = node->solid_edicts.next ; l != &node->solid_edicts ; l = next)
|
||||
for (l = node->edicts.next ; l != &node->edicts ; l = next)
|
||||
{
|
||||
next = l->next;
|
||||
check = (edict_t*)EDICT_FROM_AREA(l);
|
||||
|
@ -5076,7 +5078,7 @@ void AddLinksToPmove ( edict_t *player, areanode_t *node )
|
|||
}
|
||||
}
|
||||
if (player->v->mins[2] != 24) //crouching/dead
|
||||
for (l = node->trigger_edicts.next ; l != &node->trigger_edicts ; l = next)
|
||||
for (l = node->edicts.next ; l != &node->edicts ; l = next)
|
||||
{
|
||||
next = l->next;
|
||||
check = (edict_t*)EDICT_FROM_AREA(l);
|
||||
|
|
|
@ -1227,7 +1227,8 @@ Mod_LoadClipnodes
|
|||
*/
|
||||
qboolean Mod_LoadClipnodes (lump_t *l)
|
||||
{
|
||||
dclipnode_t *in, *out;
|
||||
dclipnode_t *in;
|
||||
mclipnode_t *out;
|
||||
int i, count;
|
||||
hull_t *hull;
|
||||
|
||||
|
@ -1346,7 +1347,7 @@ Deplicate the drawing hull structure as a clipping hull
|
|||
void Mod_MakeHull0 (void)
|
||||
{
|
||||
mnode_t *in, *child;
|
||||
dclipnode_t *out;
|
||||
mclipnode_t *out;
|
||||
int i, j, count;
|
||||
hull_t *hull;
|
||||
|
||||
|
|
|
@ -8,17 +8,10 @@ float RadiusFromBounds (vec3_t mins, vec3_t maxs);
|
|||
|
||||
|
||||
#define USEBOTLIB
|
||||
//#define BOTLIB_STATIC
|
||||
|
||||
#ifdef USEBOTLIB
|
||||
|
||||
|
||||
|
||||
#ifdef _WIN32
|
||||
#define QDECL __cdecl
|
||||
#else
|
||||
#define QDECL
|
||||
#endif
|
||||
#define fileHandle_t int
|
||||
#define fsMode_t int
|
||||
#define pc_token_t void
|
||||
|
@ -342,7 +335,7 @@ static void Q3G_LinkEntity(q3sharedEntity_t *ent)
|
|||
break; // crosses the node
|
||||
}
|
||||
// link it in
|
||||
InsertLinkBefore((link_t *)&sent->area, &node->solid_edicts);
|
||||
InsertLinkBefore((link_t *)&sent->area, &node->edicts);
|
||||
}
|
||||
|
||||
static int SVQ3_EntitiesInBoxNode(areanode_t *node, vec3_t mins, vec3_t maxs, int *list, int maxcount)
|
||||
|
@ -354,7 +347,7 @@ static int SVQ3_EntitiesInBoxNode(areanode_t *node, vec3_t mins, vec3_t maxs, in
|
|||
int linkcount = 0;
|
||||
|
||||
//work out who they are first.
|
||||
for (l = node->solid_edicts.next ; l != &node->solid_edicts ; l = next)
|
||||
for (l = node->edicts.next ; l != &node->edicts ; l = next)
|
||||
{
|
||||
if (maxcount == linkcount)
|
||||
return linkcount;
|
||||
|
@ -388,6 +381,7 @@ static int SVQ3_EntitiesInBox(vec3_t mins, vec3_t maxs, int *list, int maxcount)
|
|||
return SVQ3_EntitiesInBoxNode(sv.world.areanodes, mins, maxs, list, maxcount);
|
||||
}
|
||||
|
||||
#define ENTITYNUM_NONE (MAX_GENTITIES-1)
|
||||
#define ENTITYNUM_WORLD (MAX_GENTITIES-2)
|
||||
static void SVQ3_Trace(q3trace_t *result, vec3_t start, vec3_t mins, vec3_t maxs, vec3_t end, int entnum, int contentmask)
|
||||
{
|
||||
|
@ -408,7 +402,7 @@ static void SVQ3_Trace(q3trace_t *result, vec3_t start, vec3_t mins, vec3_t maxs
|
|||
result->allsolid = tr.allsolid;
|
||||
result->contents = tr.contents;
|
||||
VectorCopy(tr.endpos, result->endpos);
|
||||
result->entityNum = ENTITYNUM_WORLD;
|
||||
result->entityNum = (tr.fraction==1.0)?ENTITYNUM_NONE:ENTITYNUM_WORLD;
|
||||
result->fraction = tr.fraction;
|
||||
result->plane = tr.plane;
|
||||
result->startsolid = tr.startsolid;
|
||||
|
@ -436,7 +430,7 @@ static void SVQ3_Trace(q3trace_t *result, vec3_t start, vec3_t mins, vec3_t maxs
|
|||
else if ( entnum != ENTITYNUM_WORLD )
|
||||
{
|
||||
ourowner = GENTITY_FOR_NUM(entnum)->r.ownerNum;
|
||||
if (ourowner == ENTITYNUM_WORLD)
|
||||
if (ourowner == ENTITYNUM_NONE)
|
||||
ourowner = -1;
|
||||
}
|
||||
else
|
||||
|
@ -2715,7 +2709,7 @@ static qboolean SVQ3_Netchan_Process(client_t *client)
|
|||
net_message.packing = SZ_RAWBYTES;
|
||||
|
||||
// calculate bitmask
|
||||
bitmask = serverid ^ lastSequence ^ client->challenge;
|
||||
bitmask = (serverid ^ lastSequence ^ client->challenge) & 0xff;
|
||||
string = client->server_commands[lastServerCommandNum & TEXTCMD_MASK];
|
||||
|
||||
#ifndef Q3_NOENCRYPT
|
||||
|
@ -2748,7 +2742,7 @@ void SVQ3_Netchan_Transmit(client_t *client, int length, qbyte *data)
|
|||
char *string;
|
||||
|
||||
// calculate bitmask
|
||||
bitmask = client->netchan.outgoing_sequence ^ client->challenge;
|
||||
bitmask = (client->netchan.outgoing_sequence ^ client->challenge) & 0xff;
|
||||
string = client->last_client_command;
|
||||
|
||||
#ifndef Q3_NOENCRYPT
|
||||
|
@ -3210,6 +3204,7 @@ int SVQ3_AddBot(void)
|
|||
cl->challenge = 0;
|
||||
cl->userid = (cl - svs.clients)+1;
|
||||
cl->state = cs_spawned;
|
||||
memset(&cl->netchan.remote_address, 0, sizeof(cl->netchan.remote_address));
|
||||
|
||||
return cl - svs.clients;
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@ HULL BOXES
|
|||
|
||||
|
||||
static hull_t box_hull;
|
||||
static dclipnode_t box_clipnodes[6];
|
||||
static mclipnode_t box_clipnodes[6];
|
||||
static mplane_t box_planes[6];
|
||||
|
||||
/*
|
||||
|
@ -141,8 +141,7 @@ static areanode_t *World_CreateAreaNode (world_t *w, int depth, vec3_t mins, vec
|
|||
anode = &w->areanodes[w->numareanodes];
|
||||
w->numareanodes++;
|
||||
|
||||
ClearLink (&anode->trigger_edicts);
|
||||
ClearLink (&anode->solid_edicts);
|
||||
ClearLink (&anode->edicts);
|
||||
|
||||
if (depth == AREA_DEPTH)
|
||||
{
|
||||
|
@ -225,7 +224,7 @@ void World_TouchLinks (world_t *w, wedict_t *ent, areanode_t *node)
|
|||
int linkcount = 0, ln;
|
||||
|
||||
//work out who they are first.
|
||||
for (l = node->trigger_edicts.next ; l != &node->trigger_edicts ; l = next)
|
||||
for (l = node->edicts.next ; l != &node->edicts ; l = next)
|
||||
{
|
||||
if (linkcount == MAX_NODELINKS)
|
||||
break;
|
||||
|
@ -495,10 +494,7 @@ void World_LinkEdict (world_t *w, wedict_t *ent, qboolean touch_triggers)
|
|||
|
||||
// link it in
|
||||
|
||||
if (ent->v->solid == SOLID_TRIGGER || ent->v->solid == SOLID_LADDER)
|
||||
InsertLinkBefore (&ent->area, &node->trigger_edicts);
|
||||
else
|
||||
InsertLinkBefore (&ent->area, &node->solid_edicts);
|
||||
InsertLinkBefore (&ent->area, &node->edicts);
|
||||
|
||||
// if touch_triggers, touch all entities at this node and decend for more
|
||||
if (touch_triggers)
|
||||
|
@ -685,11 +681,7 @@ void VARGS WorldQ2_LinkEdict(world_t *w, q2edict_t *ent)
|
|||
}
|
||||
|
||||
// link it in
|
||||
if (ent->solid == Q2SOLID_TRIGGER)
|
||||
InsertLinkBefore (&ent->area, &node->trigger_edicts);
|
||||
else
|
||||
InsertLinkBefore (&ent->area, &node->solid_edicts);
|
||||
|
||||
InsertLinkBefore (&ent->area, &node->edicts);
|
||||
}
|
||||
|
||||
void WorldQ2_Q1BSP_LinkEdict(world_t *w, q2edict_t *ent)
|
||||
|
@ -862,11 +854,8 @@ void WorldQ2_Q1BSP_LinkEdict(world_t *w, q2edict_t *ent)
|
|||
break; // crosses the node
|
||||
}
|
||||
|
||||
// link it in
|
||||
if (ent->solid == Q2SOLID_TRIGGER)
|
||||
InsertLinkBefore (&ent->area, &node->trigger_edicts);
|
||||
else
|
||||
InsertLinkBefore (&ent->area, &node->solid_edicts);
|
||||
// link it in
|
||||
InsertLinkBefore (&ent->area, &node->edicts);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1127,6 +1116,7 @@ q2edict_t **area_q2list;
|
|||
int area_count, area_maxcount;
|
||||
int area_type;
|
||||
#define AREA_SOLID 1
|
||||
#define AREA_TRIGGER 2
|
||||
static void World_AreaEdicts_r (areanode_t *node)
|
||||
{
|
||||
link_t *l, *next, *start;
|
||||
|
@ -1136,10 +1126,7 @@ static void World_AreaEdicts_r (areanode_t *node)
|
|||
count = 0;
|
||||
|
||||
// touch linked edicts
|
||||
if (area_type == AREA_SOLID)
|
||||
start = &node->solid_edicts;
|
||||
else
|
||||
start = &node->trigger_edicts;
|
||||
start = &node->edicts;
|
||||
|
||||
for (l=start->next ; l != start ; l = next)
|
||||
{
|
||||
|
@ -1148,6 +1135,11 @@ static void World_AreaEdicts_r (areanode_t *node)
|
|||
|
||||
if (check->v->solid == SOLID_NOT)
|
||||
continue; // deactivated
|
||||
|
||||
/*q2 still has solid/trigger lists, emulate that here*/
|
||||
if ((check->v->solid == SOLID_TRIGGER) != (area_type == AREA_TRIGGER))
|
||||
continue;
|
||||
|
||||
if (check->v->absmin[0] > area_maxs[0]
|
||||
|| check->v->absmin[1] > area_maxs[1]
|
||||
|| check->v->absmin[2] > area_maxs[2]
|
||||
|
@ -1206,10 +1198,7 @@ static void WorldQ2_AreaEdicts_r (areanode_t *node)
|
|||
count = 0;
|
||||
|
||||
// touch linked edicts
|
||||
if (area_type == AREA_SOLID)
|
||||
start = &node->solid_edicts;
|
||||
else
|
||||
start = &node->trigger_edicts;
|
||||
start = &node->edicts;
|
||||
|
||||
for (l=start->next ; l != start ; l = next)
|
||||
{
|
||||
|
@ -1228,6 +1217,11 @@ static void WorldQ2_AreaEdicts_r (areanode_t *node)
|
|||
|
||||
if (check->solid == Q2SOLID_NOT)
|
||||
continue; // deactivated
|
||||
|
||||
/*q2 still has solid/trigger lists, emulate that here*/
|
||||
if ((check->solid == Q2SOLID_TRIGGER) != (area_type == AREA_TRIGGER))
|
||||
continue;
|
||||
|
||||
if (check->absmin[0] > area_maxs[0]
|
||||
|| check->absmin[1] > area_maxs[1]
|
||||
|| check->absmin[2] > area_maxs[2]
|
||||
|
@ -1470,73 +1464,8 @@ static void World_ClipToLinks (world_t *w, areanode_t *node, moveclip_t *clip)
|
|||
wedict_t *touch;
|
||||
trace_t trace;
|
||||
|
||||
if (clip->type & MOVE_TRIGGERS)
|
||||
{
|
||||
for (l = node->trigger_edicts.next ; l != &node->trigger_edicts ; l = next)
|
||||
{
|
||||
next = l->next;
|
||||
touch = EDICT_FROM_AREA(l);
|
||||
if (!((int)touch->v->flags & FL_FINDABLE_NONSOLID))
|
||||
continue;
|
||||
if (touch->v->solid != SOLID_TRIGGER)
|
||||
continue;
|
||||
if (touch == clip->passedict)
|
||||
continue;
|
||||
|
||||
if (clip->type & MOVE_NOMONSTERS && touch->v->solid != SOLID_BSP)
|
||||
continue;
|
||||
|
||||
if (clip->passedict)
|
||||
{
|
||||
/* These can never happen, touch is a SOLID_TRIGGER
|
||||
// don't clip corpse against character
|
||||
if (clip->passedict->v->solid == SOLID_CORPSE && (touch->v->solid == SOLID_SLIDEBOX || touch->v->solid == SOLID_CORPSE))
|
||||
continue;
|
||||
// don't clip character against corpse
|
||||
if (clip->passedict->v->solid == SOLID_SLIDEBOX && touch->v->solid == SOLID_CORPSE)
|
||||
continue;
|
||||
*/
|
||||
if (!((int)clip->passedict->xv->dimension_hit & (int)touch->xv->dimension_solid))
|
||||
continue;
|
||||
}
|
||||
|
||||
if (clip->boxmins[0] > touch->v->absmax[0]
|
||||
|| clip->boxmins[1] > touch->v->absmax[1]
|
||||
|| clip->boxmins[2] > touch->v->absmax[2]
|
||||
|| clip->boxmaxs[0] < touch->v->absmin[0]
|
||||
|| clip->boxmaxs[1] < touch->v->absmin[1]
|
||||
|| clip->boxmaxs[2] < touch->v->absmin[2] )
|
||||
continue;
|
||||
|
||||
if (clip->passedict && clip->passedict->v->size[0] && !touch->v->size[0])
|
||||
continue; // points never interact
|
||||
|
||||
// might intersect, so do an exact clip
|
||||
if (clip->trace.allsolid)
|
||||
return;
|
||||
if (clip->passedict)
|
||||
{
|
||||
if ((wedict_t*)PROG_TO_EDICT(w->progs, touch->v->owner) == clip->passedict)
|
||||
continue; // don't clip against own missiles
|
||||
if ((wedict_t*)PROG_TO_EDICT(w->progs, clip->passedict->v->owner) == touch)
|
||||
continue; // don't clip against owner
|
||||
}
|
||||
|
||||
if ((int)touch->v->flags & FL_MONSTER)
|
||||
trace = World_ClipMoveToEntity (w, touch, touch->v->origin, clip->start, clip->mins2, clip->maxs2, clip->end, clip->hullnum, clip->type & MOVE_HITMODEL);
|
||||
else
|
||||
trace = World_ClipMoveToEntity (w, touch, touch->v->origin, clip->start, clip->mins, clip->maxs, clip->end, clip->hullnum, clip->type & MOVE_HITMODEL);
|
||||
if (trace.allsolid || trace.startsolid ||
|
||||
trace.fraction < clip->trace.fraction)
|
||||
{
|
||||
trace.ent = touch;
|
||||
clip->trace = trace;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// touch linked edicts
|
||||
for (l = node->solid_edicts.next ; l != &node->solid_edicts ; l = next)
|
||||
for (l = node->edicts.next ; l != &node->edicts ; l = next)
|
||||
{
|
||||
next = l->next;
|
||||
touch = EDICT_FROM_AREA(l);
|
||||
|
@ -1544,10 +1473,14 @@ static void World_ClipToLinks (world_t *w, areanode_t *node, moveclip_t *clip)
|
|||
continue;
|
||||
if (touch == clip->passedict)
|
||||
continue;
|
||||
|
||||
/*if its a trigger, we only clip against it if the flags are aligned*/
|
||||
if (touch->v->solid == SOLID_TRIGGER || touch->v->solid == SOLID_LADDER)
|
||||
{
|
||||
Con_Printf ("Trigger (%s) in clipping list\n", PR_GetString(w->progs, touch->v->classname));
|
||||
continue;
|
||||
if (!(clip->type & MOVE_TRIGGERS))
|
||||
continue;
|
||||
if (!((int)touch->v->flags & FL_FINDABLE_NONSOLID))
|
||||
continue;
|
||||
}
|
||||
|
||||
if (clip->type & MOVE_LAGGED)
|
||||
|
@ -1627,7 +1560,7 @@ static void WorldQ2_ClipToLinks (world_t *w, areanode_t *node, moveclip_t *clip)
|
|||
trace_t trace;
|
||||
|
||||
// touch linked edicts
|
||||
for (l = node->solid_edicts.next ; l != &node->solid_edicts ; l = next)
|
||||
for (l = node->edicts.next ; l != &node->edicts ; l = next)
|
||||
{
|
||||
next = l->next;
|
||||
touch = Q2EDICT_FROM_AREA(l);
|
||||
|
|
Loading…
Reference in a new issue