Compare commits
5 Commits
8df34b4c3f
...
0870dfba2e
Author | SHA1 | Date |
---|---|---|
an | 0870dfba2e | |
an | c47de412bd | |
an | da538dc69f | |
an | 7b2975f5ba | |
an | 39ceff0005 |
|
@ -145,7 +145,7 @@ bool BGM_Init(void)
|
|||
switch(wanted_handlers[i].player)
|
||||
{
|
||||
case BGM_MIDIDRV:
|
||||
/* not supported in quake */
|
||||
/* not supported */
|
||||
break;
|
||||
case BGM_STREAMER:
|
||||
wanted_handlers[i].is_available =
|
||||
|
@ -205,7 +205,7 @@ static void BGM_Play_noext(const char *filename, uint32_t allowed_types)
|
|||
switch(handler->player)
|
||||
{
|
||||
case BGM_MIDIDRV:
|
||||
/* not supported in quake */
|
||||
/* not supported */
|
||||
break;
|
||||
case BGM_STREAMER:
|
||||
bgmstream = S_CodecOpenStreamType(tmp, handler->type);
|
||||
|
@ -263,7 +263,7 @@ void BGM_Play(const char *filename)
|
|||
switch(handler->player)
|
||||
{
|
||||
case BGM_MIDIDRV:
|
||||
/* not supported in quake */
|
||||
/* not supported */
|
||||
break;
|
||||
case BGM_STREAMER:
|
||||
bgmstream = S_CodecOpenStreamType(tmp, handler->type);
|
||||
|
|
|
@ -216,8 +216,8 @@ Cmd_StuffCmds_f -- johnfitz -- rewritten to read the "cmdline" cvar, for use wit
|
|||
|
||||
Adds command line parameters as script statements
|
||||
Commands lead with a +, and continue until a - or another +
|
||||
quake +prog jctest.qp +cmd amlev1
|
||||
quake -nosound +cmd amlev1
|
||||
<program name> +prog jctest.qp +cmd amlev1
|
||||
<program name> -nosound +cmd amlev1
|
||||
===============
|
||||
*/
|
||||
void Cmd_StuffCmds_f(void)
|
||||
|
|
199
source/common.c
199
source/common.c
|
@ -47,26 +47,26 @@ bool standard_quake = true, rogue, hipnotic;
|
|||
|
||||
/*
|
||||
|
||||
All of Quake's data access is through a hierchal file system, but the contents
|
||||
of the file system can be transparently merged from several sources.
|
||||
All of our data access is through a hierchal file system, but the contents of
|
||||
the file system can be transparently merged from several sources.
|
||||
|
||||
The "base directory" is the path to the directory holding the quake.exe and all
|
||||
game directories. The sys_* files pass this to host_init in quakeparms_t->basedir.
|
||||
This can be overridden with the "-basedir" command line parm to allow code
|
||||
debugging in a different directory. The base directory is only used during
|
||||
filesystem initialization.
|
||||
The "base directory" is the path to the directory holding the executable and
|
||||
all game directories. The sys_* files pass this to host_init in
|
||||
quakeparms_t->basedir. This can be overridden with the "-basedir" command line
|
||||
parm to allow code debugging in a different directory. The base directory is
|
||||
only used during filesystem initialization.
|
||||
|
||||
The "game directory" is the first tree on the search path and directory that all
|
||||
generated files (savegames, screenshots, demos, config files) will be saved to.
|
||||
This can be overridden with the "-game" command line parameter. The game
|
||||
directory can never be changed while quake is executing. This is a precacution
|
||||
against having a malicious server instruct clients to write files over areas they
|
||||
shouldn't.
|
||||
The "game directory" is the first tree on the search path and directory that
|
||||
all generated files (savegames, screenshots, demos, config files) will be saved
|
||||
to. This can be overridden with the "-game" command line parameter. The game
|
||||
directory can never be changed while the game is executing. This is a
|
||||
precacution against having a malicious server instruct clients to write files
|
||||
over areas they shouldn't.
|
||||
|
||||
The "cache directory" is only used during development to save network bandwidth,
|
||||
especially over ISDN / T1 lines. If there is a cache directory specified, when
|
||||
a file is found by the normal search path, it will be mirrored into the cache
|
||||
directory, then opened there.
|
||||
The "cache directory" is only used during development to save network
|
||||
bandwidth, especially over ISDN / T1 lines. If there is a cache directory
|
||||
specified, when a file is found by the normal search path, it will be mirrored
|
||||
into the cache directory, then opened there.
|
||||
|
||||
*/
|
||||
|
||||
|
@ -516,67 +516,115 @@ float Q_atof(const char *str)
|
|||
============================================================================
|
||||
*/
|
||||
|
||||
bool host_bigendian;
|
||||
bool host_bigendian;
|
||||
|
||||
int16_t (*BigShort)(int16_t l);
|
||||
int16_t (*LittleShort)(int16_t l);
|
||||
int32_t (*BigLong)(int32_t l);
|
||||
float (*BigFloat)(float l);
|
||||
|
||||
int16_t (*LittleShort)(int16_t l);
|
||||
int32_t (*LittleLong)(int32_t l);
|
||||
float (*BigFloat)(float l);
|
||||
float (*LittleFloat)(float l);
|
||||
float (*LittleFloat)(float l);
|
||||
|
||||
int16_t ShortSwap(int16_t l)
|
||||
static int16_t ShortSwap(int16_t l)
|
||||
{
|
||||
byte b1, b2;
|
||||
|
||||
b1 = l & 255;
|
||||
b2 = (l >> 8) & 255;
|
||||
|
||||
return (b1 << 8) + b2;
|
||||
int32_t copy;
|
||||
((byte *)©)[0] = ((byte *)&l)[1];
|
||||
((byte *)©)[1] = ((byte *)&l)[0];
|
||||
return copy;
|
||||
}
|
||||
|
||||
int16_t ShortNoSwap(int16_t l)
|
||||
static int16_t ShortNoSwap(int16_t l)
|
||||
{
|
||||
return l;
|
||||
}
|
||||
|
||||
int32_t LongSwap(int32_t l)
|
||||
static int32_t LongSwap(int32_t l)
|
||||
{
|
||||
byte b1, b2, b3, b4;
|
||||
|
||||
b1 = l & 255;
|
||||
b2 = (l >> 8) & 255;
|
||||
b3 = (l >> 16) & 255;
|
||||
b4 = (l >> 24) & 255;
|
||||
|
||||
return ((int32_t)b1 << 24) + ((int32_t)b2 << 16) + ((int32_t)b3 << 8) + b4;
|
||||
int32_t copy;
|
||||
((byte *)©)[0] = ((byte *)&l)[3];
|
||||
((byte *)©)[1] = ((byte *)&l)[2];
|
||||
((byte *)©)[2] = ((byte *)&l)[1];
|
||||
((byte *)©)[3] = ((byte *)&l)[0];
|
||||
return copy;
|
||||
}
|
||||
|
||||
int32_t LongNoSwap(int32_t l)
|
||||
static int32_t LongNoSwap(int32_t l)
|
||||
{
|
||||
return l;
|
||||
}
|
||||
|
||||
float FloatSwap(float f)
|
||||
static float FloatSwap(float f)
|
||||
{
|
||||
float copy;
|
||||
((byte *)©)[0] = ((byte *)&f)[3];
|
||||
((byte *)©)[1] = ((byte *)&f)[2];
|
||||
((byte *)©)[2] = ((byte *)&f)[1];
|
||||
((byte *)©)[3] = ((byte *)&f)[0];
|
||||
return copy;
|
||||
}
|
||||
|
||||
static float FloatNoSwap(float f)
|
||||
{
|
||||
return f;
|
||||
}
|
||||
|
||||
int16_t ReadBigShort(byte *bytes)
|
||||
{
|
||||
int16_t v;
|
||||
v = bytes[1];
|
||||
v |= bytes[0] << 8;
|
||||
return v;
|
||||
}
|
||||
|
||||
int32_t ReadBigLong(byte *bytes)
|
||||
{
|
||||
int32_t v;
|
||||
v = bytes[3];
|
||||
v |= bytes[2] << 8;
|
||||
v |= bytes[1] << 16;
|
||||
v |= bytes[0] << 24;
|
||||
return v;
|
||||
}
|
||||
|
||||
float ReadBigFloat(byte *bytes)
|
||||
{
|
||||
union
|
||||
{
|
||||
float f;
|
||||
byte b[4];
|
||||
} dat1, dat2;
|
||||
|
||||
|
||||
dat1.f = f;
|
||||
dat2.b[0] = dat1.b[3];
|
||||
dat2.b[1] = dat1.b[2];
|
||||
dat2.b[2] = dat1.b[1];
|
||||
dat2.b[3] = dat1.b[0];
|
||||
return dat2.f;
|
||||
float f;
|
||||
uint32_t i;
|
||||
} data;
|
||||
data.i = ReadBigLong(bytes);
|
||||
return data.f;
|
||||
}
|
||||
|
||||
float FloatNoSwap(float f)
|
||||
int16_t ReadLittleShort(byte *bytes)
|
||||
{
|
||||
return f;
|
||||
int16_t v;
|
||||
v = bytes[0];
|
||||
v |= bytes[1] << 8;
|
||||
return v;
|
||||
}
|
||||
|
||||
int32_t ReadLittleLong(byte *bytes)
|
||||
{
|
||||
int32_t v;
|
||||
v = bytes[0];
|
||||
v |= bytes[1] << 8;
|
||||
v |= bytes[2] << 16;
|
||||
v |= bytes[3] << 24;
|
||||
return v;
|
||||
}
|
||||
|
||||
float ReadLittleFloat(byte *bytes)
|
||||
{
|
||||
union
|
||||
{
|
||||
float f;
|
||||
uint32_t i;
|
||||
} data;
|
||||
data.i = ReadLittleLong(bytes);
|
||||
return data.f;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1294,41 +1342,30 @@ COM_Init
|
|||
void COM_Init(void)
|
||||
{
|
||||
int32_t i = 0x12345678;
|
||||
/* U N I X */
|
||||
|
||||
/*
|
||||
BE_ORDER: 12 34 56 78
|
||||
U N I X
|
||||
|
||||
LE_ORDER: 78 56 34 12
|
||||
X I N U
|
||||
|
||||
PDP_ORDER: 34 12 78 56
|
||||
N U X I
|
||||
*/
|
||||
if(*(char *)&i == 0x12)
|
||||
if(*(byte *)&i == 0x12)
|
||||
host_bigendian = true;
|
||||
else if(*(char *)&i == 0x78)
|
||||
else if(*(byte *)&i == 0x78)
|
||||
host_bigendian = false;
|
||||
else /* if ( *(char *)&i == 0x34 ) */
|
||||
Sys_Error("Unsupported endianism.");
|
||||
else
|
||||
Sys_Error("Unsupported endianness");
|
||||
|
||||
if(host_bigendian)
|
||||
{
|
||||
BigShort = ShortNoSwap;
|
||||
BigShort = ShortNoSwap;
|
||||
BigLong = LongNoSwap;
|
||||
BigFloat = FloatNoSwap;
|
||||
LittleShort = ShortSwap;
|
||||
BigLong = LongNoSwap;
|
||||
LittleLong = LongSwap;
|
||||
BigFloat = FloatNoSwap;
|
||||
LittleLong = LongSwap;
|
||||
LittleFloat = FloatSwap;
|
||||
}
|
||||
else /* assumed LITTLE_ENDIAN. */
|
||||
else
|
||||
{
|
||||
BigShort = ShortSwap;
|
||||
BigShort = ShortSwap;
|
||||
BigLong = LongSwap;
|
||||
BigFloat = FloatSwap;
|
||||
LittleShort = ShortNoSwap;
|
||||
BigLong = LongSwap;
|
||||
LittleLong = LongNoSwap;
|
||||
BigFloat = FloatSwap;
|
||||
LittleLong = LongNoSwap;
|
||||
LittleFloat = FloatNoSwap;
|
||||
}
|
||||
}
|
||||
|
@ -1369,7 +1406,7 @@ char *va(const char *format, ...)
|
|||
/*
|
||||
=============================================================================
|
||||
|
||||
QUAKE FILESYSTEM
|
||||
FILESYSTEM
|
||||
|
||||
=============================================================================
|
||||
*/
|
||||
|
@ -1598,7 +1635,7 @@ static int32_t COM_FindFile(const char *filename, int32_t *handle, FILE **file,
|
|||
===========
|
||||
COM_FileExists
|
||||
|
||||
Returns whether the file is found in the quake filesystem.
|
||||
Returns whether the file is found in the filesystem.
|
||||
===========
|
||||
*/
|
||||
bool COM_FileExists(const char *filename, uint32_t *path_id)
|
||||
|
@ -1657,7 +1694,7 @@ void COM_CloseFile(int32_t h)
|
|||
============
|
||||
COM_LoadFile
|
||||
|
||||
Filename are reletive to the quake directory.
|
||||
Filename are reletive to the executable directory.
|
||||
Allways appends a 0 byte.
|
||||
============
|
||||
*/
|
||||
|
@ -2206,7 +2243,7 @@ size_t FS_fread(void *ptr, size_t size, size_t nmemb, fshandle_t *fh)
|
|||
int32_t FS_fseek(fshandle_t *fh, long offset, int32_t whence)
|
||||
{
|
||||
/* I don't care about 64 bit off_t or fseeko() here.
|
||||
* the quake/hexen2 file system is 32 bits, anyway. */
|
||||
* the file system is 32 bits, anyway. */
|
||||
int32_t ret;
|
||||
|
||||
if(!fh)
|
||||
|
|
|
@ -66,12 +66,21 @@ void InsertLinkAfter(link_t *l, link_t *after);
|
|||
|
||||
extern bool host_bigendian;
|
||||
|
||||
extern int16_t (*BigShort)(int16_t l);
|
||||
extern int16_t (*LittleShort)(int16_t l);
|
||||
extern int32_t (*BigLong)(int32_t l);
|
||||
extern int32_t (*LittleLong)(int32_t l);
|
||||
extern float (*BigFloat)(float l);
|
||||
extern float (*LittleFloat)(float l);
|
||||
extern int16_t (*BigShort)(int16_t l);
|
||||
extern int32_t (*BigLong)(int32_t l);
|
||||
extern float (*BigFloat)(float l);
|
||||
|
||||
extern int16_t (*LittleShort)(int16_t l);
|
||||
extern int32_t (*LittleLong)(int32_t l);
|
||||
extern float (*LittleFloat)(float l);
|
||||
|
||||
int16_t ReadBigShort(byte *bytes);
|
||||
int32_t ReadBigLong(byte *bytes);
|
||||
float ReadBigFloat(byte *bytes);
|
||||
|
||||
int16_t ReadLittleShort(byte *bytes);
|
||||
int32_t ReadLittleLong(byte *bytes);
|
||||
float ReadLittleFloat(byte *bytes);
|
||||
|
||||
//============================================================================
|
||||
|
||||
|
@ -279,9 +288,7 @@ int32_t FS_fgetc(fshandle_t *fh);
|
|||
char *FS_fgets(char *s, int32_t size, fshandle_t *fh);
|
||||
long FS_filelength(fshandle_t *fh);
|
||||
|
||||
|
||||
extern bool standard_quake, rogue, hipnotic;
|
||||
/* if true, run in fitzquake mode disabling custom quakespasm hacks */
|
||||
extern bool standard_quake, rogue, hipnotic;
|
||||
|
||||
struct cvar_s;
|
||||
|
||||
|
|
|
@ -146,7 +146,7 @@ static void Con_Clear_f(void)
|
|||
|
||||
/*
|
||||
================
|
||||
Con_Dump_f -- johnfitz -- adapted from quake2 source
|
||||
Con_Dump_f -- johnfitz -- adapted from Q2 source
|
||||
================
|
||||
*/
|
||||
static void Con_Dump_f(void)
|
||||
|
|
|
@ -378,8 +378,6 @@ void Fog_NewMap(void)
|
|||
/*
|
||||
=============
|
||||
Fog_Init
|
||||
|
||||
called when quake initializes
|
||||
=============
|
||||
*/
|
||||
void Fog_Init(void)
|
||||
|
|
|
@ -1049,7 +1049,7 @@ void CalcSurfaceExtents(msurface_t *s)
|
|||
s->texturemins[i] = bmins[i] * 16;
|
||||
s->extents[i] = (bmaxs[i] - bmins[i]) * 16;
|
||||
|
||||
if(!(tex->flags & TEX_SPECIAL) && s->extents[i] > 2000) //johnfitz -- was 512 in glquake, 256 in winquake
|
||||
if(!(tex->flags & TEX_SPECIAL) && s->extents[i] > 2000) //johnfitz -- was 512 in glq, 256 in winq
|
||||
Sys_Error("Bad surface extents");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -488,8 +488,6 @@ void R_SetupGL(void)
|
|||
|
||||
GL_SetFrustum(r_fovx, r_fovy); //johnfitz -- use r_fov* vars
|
||||
|
||||
// glCullFace(GL_BACK); //johnfitz -- glquake used CCW with backwards culling -- let's do it right
|
||||
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();
|
||||
|
||||
|
|
|
@ -812,7 +812,7 @@ void SCR_ScreenShot_f(void)
|
|||
// find a file name to save it to
|
||||
for(i = 0; i < 10000; i++)
|
||||
{
|
||||
q_snprintf(imagename, sizeof(imagename), "quake%04" PRIi32 ".%s", i, ext);
|
||||
q_snprintf(imagename, sizeof(imagename), ENGINE_NAME "%04" PRIi32 ".%s", i, ext);
|
||||
q_snprintf(checkname, sizeof(checkname), "%s/%s", com_gamedir, imagename);
|
||||
if(Sys_FileTime(checkname) == -1)
|
||||
break; // file doesn't exist
|
||||
|
|
|
@ -264,13 +264,10 @@ void Sky_NewMap(void)
|
|||
|
||||
if(!strcmp("skyfog", key))
|
||||
skyfog = atof(value);
|
||||
|
||||
#if 1 //also accept non-standard keys
|
||||
else if(!strcmp("skyname", key)) //half-life
|
||||
else if(!strcmp("skyname", key))
|
||||
Sky_LoadSkyBox(value);
|
||||
else if(!strcmp("qlsky", key)) //quake lives
|
||||
else if(!strcmp("qlsky", key))
|
||||
Sky_LoadSkyBox(value);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -703,12 +700,11 @@ void Sky_DrawSkyBox(void)
|
|||
|
||||
GL_Bind(skybox_textures[skytexorder[i]]);
|
||||
|
||||
#if 1 //FIXME: this is to avoid tjunctions until i can do it the right way
|
||||
//FIXME: this is to avoid tjunctions until i can do it the right way
|
||||
skymins[0][i] = -1;
|
||||
skymins[1][i] = -1;
|
||||
skymaxs[0][i] = 1;
|
||||
skymaxs[1][i] = 1;
|
||||
#endif
|
||||
glBegin(GL_QUADS);
|
||||
Sky_EmitSkyBoxVertex(skymins[0][i], skymins[1][i], i);
|
||||
Sky_EmitSkyBoxVertex(skymins[0][i], skymaxs[1][i], i);
|
||||
|
|
|
@ -20,7 +20,7 @@ along with this program; if not, write to the Free Software
|
|||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
//gl_texmgr.c -- fitzquake's texture manager. manages opengl texture images
|
||||
//gl_texmgr.c -- texture manager. manages opengl texture images
|
||||
|
||||
#include "q_defs.h"
|
||||
|
||||
|
@ -574,14 +574,7 @@ void TexMgr_RecalcWarpImageSize(void)
|
|||
while(gl_warpimagesize > vid.height)
|
||||
gl_warpimagesize >>= 1;
|
||||
|
||||
// ericw -- removed early exit if (gl_warpimagesize == oldsize).
|
||||
// after vid_restart TexMgr_ReloadImage reloads textures
|
||||
// to tx->source_width/source_height, which might not match oldsize.
|
||||
// fixes: https://sourceforge.net/p/quakespasm/bugs/13/
|
||||
|
||||
//
|
||||
// resize the textures in opengl
|
||||
//
|
||||
mark = Hunk_LowMark();
|
||||
dummy = (byte *) Hunk_Alloc(gl_warpimagesize * gl_warpimagesize * 4);
|
||||
|
||||
|
@ -1147,10 +1140,8 @@ static void TexMgr_LoadImage8(gltexture_t *glt, byte *data)
|
|||
uint32_t *usepal;
|
||||
int32_t i;
|
||||
|
||||
// HACK HACK HACK -- taken from tomazquake
|
||||
if(strstr(glt->name, "shot1sid") &&
|
||||
glt->width == 32 && glt->height == 32 &&
|
||||
CRC_Block(data, 1024) == 65393)
|
||||
// HACK
|
||||
if(strstr(glt->name, "shot1sid") && glt->width == 32 && glt->height == 32 && CRC_Block(data, 1024) == 65393)
|
||||
{
|
||||
// This texture in b_shell1.bsp has some of the first 32 pixels painted white.
|
||||
// They are invisible in software, but look really ugly in GL. So we just copy
|
||||
|
@ -1460,14 +1451,6 @@ void TexMgr_ReloadImages(void)
|
|||
{
|
||||
gltexture_t *glt;
|
||||
|
||||
// ericw -- tricky bug: if the hunk is almost full, an allocation in TexMgr_ReloadImage
|
||||
// triggers cache items to be freed, which calls back into TexMgr to free the
|
||||
// texture. If this frees 'glt' in the loop below, the active_gltextures
|
||||
// list gets corrupted.
|
||||
// A test case is jam3_tronyn.bsp with -heapsize 65536, and do several mode
|
||||
// switches/fullscreen toggles
|
||||
// 2015-09-04 -- Cache_Flush workaround was causing issues (http://sourceforge.net/p/quakespasm/bugs/10/)
|
||||
// switching to a boolean flag.
|
||||
in_reload_images = true;
|
||||
|
||||
for(glt = active_gltextures; glt; glt = glt->next)
|
||||
|
|
|
@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#ifndef spingle__gl_texmgr_h
|
||||
#define spingle__gl_texmgr_h
|
||||
|
||||
//gl_texmgr.h -- fitzquake's texture manager. manages opengl texture images
|
||||
//gl_texmgr.h -- texture manager. manages opengl texture images
|
||||
|
||||
#define TEXPREF_NONE 0x0000
|
||||
#define TEXPREF_MIPMAP 0x0001 // generate mipmaps
|
||||
|
|
|
@ -1170,8 +1170,8 @@ does all the stuff from GL_Init that needs to be done every time a new GL render
|
|||
static void GL_SetupState(void)
|
||||
{
|
||||
glClearColor(0.15, 0.15, 0.15, 0); //johnfitz -- originally 1,0,0,0
|
||||
glCullFace(GL_BACK); //johnfitz -- glquake used CCW with backwards culling -- let's do it right
|
||||
glFrontFace(GL_CW); //johnfitz -- glquake used CCW with backwards culling -- let's do it right
|
||||
glCullFace(GL_BACK); //johnfitz -- glq used CCW with backwards culling -- let's do it right
|
||||
glFrontFace(GL_CW); //johnfitz -- glq used CCW with backwards culling -- let's do it right
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glEnable(GL_ALPHA_TEST);
|
||||
glAlphaFunc(GL_GREATER, 0.666);
|
||||
|
@ -1553,8 +1553,6 @@ void VID_Init(void)
|
|||
GL_SetupState();
|
||||
Cmd_AddCommand("gl_info", GL_Info_f); //johnfitz
|
||||
|
||||
//johnfitz -- removed code creating "glquake" subdirectory
|
||||
|
||||
vid_menucmdfn = VID_Menu_f; //johnfitz
|
||||
vid_menudrawfn = VID_MenuDraw;
|
||||
vid_menukeyfn = VID_MenuKey;
|
||||
|
|
|
@ -871,7 +871,6 @@ void Host_Init(void)
|
|||
host_hunklevel = Hunk_LowMark();
|
||||
|
||||
host_initialized = true;
|
||||
Con_Printf("\n========= Quake Initialized =========\n\n");
|
||||
|
||||
if(cls.state != ca_dedicated)
|
||||
{
|
||||
|
|
|
@ -1241,7 +1241,7 @@ void Host_Loadgame_f(void)
|
|||
if(entnum < sv.num_edicts)
|
||||
{
|
||||
ent->free = false;
|
||||
memset(&ent->v, 0, progs->entityfields * 4);
|
||||
memset(&ent->v, 0, progs.entityfields * 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1655,7 +1655,7 @@ void Host_Spawn_f(void)
|
|||
// set up the edict
|
||||
ent = host_client->edict;
|
||||
|
||||
memset(&ent->v, 0, progs->entityfields * 4);
|
||||
memset(&ent->v, 0, progs.entityfields * 4);
|
||||
ent->v.colormap = NUM_FOR_EDICT(ent);
|
||||
ent->v.team = (host_client->colors & 15) + 1;
|
||||
ent->v.netname = PR_SetEngineString(host_client->name);
|
||||
|
|
|
@ -35,23 +35,7 @@ struct mplane_s;
|
|||
|
||||
extern vec3_t vec3_origin;
|
||||
|
||||
#define nanmask (255 << 23) /* 7F800000 */
|
||||
#if 0 /* macro is violating strict aliasing rules */
|
||||
#define IS_NAN(x) (((*(int32_t *) (char *) &x) & nanmask) == nanmask)
|
||||
#else
|
||||
static inline int32_t IS_NAN(float x)
|
||||
{
|
||||
union
|
||||
{
|
||||
float f;
|
||||
int32_t i;
|
||||
} num;
|
||||
num.f = x;
|
||||
return ((num.i & nanmask) == nanmask);
|
||||
}
|
||||
#endif
|
||||
|
||||
#define Q_rint(x) ((x) > 0 ? (int32_t)((x) + 0.5) : (int32_t)((x) - 0.5)) //johnfitz -- from joequake
|
||||
#define Q_rint(x) ((x) > 0 ? (int32_t)((x) + 0.5) : (int32_t)((x) - 0.5))
|
||||
|
||||
#define DotProduct(x,y) (x[0]*y[0]+x[1]*y[1]+x[2]*y[2])
|
||||
#define DoublePrecisionDotProduct(x,y) ((double)x[0]*y[0]+(double)x[1]*y[1]+(double)x[2]*y[2])
|
||||
|
@ -60,17 +44,18 @@ static inline int32_t IS_NAN(float x)
|
|||
#define VectorCopy(a,b) {b[0]=a[0];b[1]=a[1];b[2]=a[2];}
|
||||
|
||||
//johnfitz -- courtesy of lordhavoc
|
||||
// QuakeSpasm: To avoid strict aliasing violations, use a float/int32_t union instead of type punning.
|
||||
#define VectorNormalizeFast(_v)\
|
||||
{\
|
||||
union { float f; int32_t i; } _y, _number;\
|
||||
_number.f = DotProduct(_v, _v);\
|
||||
if (_number.f != 0.0)\
|
||||
{\
|
||||
_y.i = 0x5f3759df - (_number.i >> 1);\
|
||||
_y.f = _y.f * (1.5f - (_number.f * 0.5f * _y.f * _y.f));\
|
||||
VectorScale(_v, _y.f, _v);\
|
||||
}\
|
||||
// QS: To avoid strict aliasing violations, use a float/int32_t union instead of type punning.
|
||||
// [agw] NO YOU FOOL THAT'S UNDEFINED BEHAVIOUR
|
||||
#define VectorNormalizeFast(_v) \
|
||||
{ \
|
||||
union { float f; uint32_t i; } _y, _number; \
|
||||
_number.f = DotProduct(_v, _v); \
|
||||
if(_number.f != 0.0) \
|
||||
{ \
|
||||
_y.i = 0x5f3759df - (_number.i >> 1); \
|
||||
_y.f = _y.f * (1.5f - (_number.f * 0.5f * _y.f * _y.f)); \
|
||||
VectorScale(_v, _y.f, _v); \
|
||||
} \
|
||||
}
|
||||
|
||||
void TurnVector(vec3_t out, const vec3_t forward, const vec3_t side, float angle); //johnfitz
|
||||
|
|
|
@ -280,7 +280,7 @@ static void PrintSlistTrailer(void)
|
|||
if(hostCacheCount)
|
||||
Con_Printf("== end list ==\n\n");
|
||||
else
|
||||
Con_Printf("No Quake servers found.\n\n");
|
||||
Con_Printf("No servers found.\n\n");
|
||||
}
|
||||
|
||||
|
||||
|
@ -291,7 +291,7 @@ void NET_Slist_f(void)
|
|||
|
||||
if(! slistSilent)
|
||||
{
|
||||
Con_Printf("Looking for Quake servers...\n");
|
||||
Con_Printf("Looking for servers...\n");
|
||||
PrintSlistHeader();
|
||||
}
|
||||
|
||||
|
|
|
@ -687,20 +687,20 @@ static void PF_traceline(void)
|
|||
nomonsters = G_FLOAT(OFS_PARM2);
|
||||
ent = G_EDICT(OFS_PARM3);
|
||||
|
||||
/* FIXME FIXME FIXME: Why do we hit this with certain progs.dat ?? */
|
||||
/* FIXME FIXME FIXME: Why do we hit this?? */
|
||||
if(developer.value)
|
||||
{
|
||||
if(IS_NAN(v1[0]) || IS_NAN(v1[1]) || IS_NAN(v1[2]) ||
|
||||
IS_NAN(v2[0]) || IS_NAN(v2[1]) || IS_NAN(v2[2]))
|
||||
if(isnan(v1[0]) || isnan(v1[1]) || isnan(v1[2]) ||
|
||||
isnan(v2[0]) || isnan(v2[1]) || isnan(v2[2]))
|
||||
{
|
||||
Con_Warning("NAN in traceline:\nv1(%f %f %f) v2(%f %f %f)\nentity %" PRIi32 "\n",
|
||||
v1[0], v1[1], v1[2], v2[0], v2[1], v2[2], NUM_FOR_EDICT(ent));
|
||||
}
|
||||
}
|
||||
|
||||
if(IS_NAN(v1[0]) || IS_NAN(v1[1]) || IS_NAN(v1[2]))
|
||||
if(isnan(v1[0]) || isnan(v1[1]) || isnan(v1[2]))
|
||||
v1[0] = v1[1] = v1[2] = 0;
|
||||
if(IS_NAN(v2[0]) || IS_NAN(v2[1]) || IS_NAN(v2[2]))
|
||||
if(isnan(v2[0]) || isnan(v2[1]) || isnan(v2[2]))
|
||||
v2[0] = v2[1] = v2[2] = 0;
|
||||
|
||||
trace = SV_Move(v1, vec3_origin, vec3_origin, v2, nomonsters, ent);
|
||||
|
@ -1016,7 +1016,7 @@ static void PF_vtos(void)
|
|||
G_INT(OFS_RETURN) = PR_SetEngineString(s);
|
||||
}
|
||||
|
||||
static void PF_Spawn(void)
|
||||
static void PF_spawn(void)
|
||||
{
|
||||
edict_t *ed;
|
||||
|
||||
|
@ -1025,7 +1025,7 @@ static void PF_Spawn(void)
|
|||
RETURN_EDICT(ed);
|
||||
}
|
||||
|
||||
static void PF_Remove(void)
|
||||
static void PF_remove(void)
|
||||
{
|
||||
edict_t *ed;
|
||||
|
||||
|
@ -1035,7 +1035,7 @@ static void PF_Remove(void)
|
|||
|
||||
|
||||
// entity (entity start, .string field, string match) find = #5;
|
||||
static void PF_Find(void)
|
||||
static void PF_find(void)
|
||||
{
|
||||
int32_t e;
|
||||
int32_t f;
|
||||
|
@ -1046,14 +1046,14 @@ static void PF_Find(void)
|
|||
f = G_INT(OFS_PARM1);
|
||||
s = G_STRING(OFS_PARM2);
|
||||
if(!s)
|
||||
PR_RunError("PF_Find: bad search string");
|
||||
PR_RunError("PF_find: bad search string");
|
||||
|
||||
for(e++ ; e < sv.num_edicts ; e++)
|
||||
{
|
||||
ed = EDICT_NUM(e);
|
||||
if(ed->free)
|
||||
continue;
|
||||
t = E_STRING(ed, f);
|
||||
t = PR_GetString(((string_t *)&ed->v)[f]);
|
||||
if(!t)
|
||||
continue;
|
||||
if(!strcmp(t, s))
|
||||
|
@ -1181,7 +1181,7 @@ static void PF_walkmove(void)
|
|||
move[1] = sin(yaw) * dist;
|
||||
move[2] = 0;
|
||||
|
||||
// save program state, because SV_movestep may call other progs
|
||||
// save program state, because SV_movestep may call other functions
|
||||
oldf = pr_xfunction;
|
||||
oldself = pr_global_struct->self;
|
||||
|
||||
|
@ -1431,7 +1431,7 @@ static void PF_aim(void)
|
|||
==============
|
||||
PF_changeyaw
|
||||
|
||||
This was a major timewaster in progs, so it was converted to C
|
||||
This was a major timewaster so it was converted to C
|
||||
==============
|
||||
*/
|
||||
void PF_changeyaw(void)
|
||||
|
@ -1668,20 +1668,20 @@ static void PF_changelevel(void)
|
|||
Cbuf_AddText(va("changelevel %s\n", s));
|
||||
}
|
||||
|
||||
static void PF_Fixme(void)
|
||||
static void PF_fixme(void)
|
||||
{
|
||||
PR_RunError("unimplemented builtin");
|
||||
}
|
||||
|
||||
|
||||
static builtin_t pr_builtin[] =
|
||||
builtin_t pr_builtins[] =
|
||||
{
|
||||
PF_Fixme,
|
||||
PF_fixme,
|
||||
PF_makevectors, // void(entity e) makevectors = #1
|
||||
PF_setorigin, // void(entity e, vector o) setorigin = #2
|
||||
PF_setmodel, // void(entity e, string m) setmodel = #3
|
||||
PF_setsize, // void(entity e, vector min, vector max) setsize = #4
|
||||
PF_Fixme, // void(entity e, vector min, vector max) setabssize = #5
|
||||
PF_fixme, // void(entity e, vector min, vector max) setabssize = #5
|
||||
PF_break, // void() break = #6
|
||||
PF_random, // float() random = #7
|
||||
PF_sound, // void(entity e, float chan, string samp) sound = #8
|
||||
|
@ -1690,11 +1690,11 @@ static builtin_t pr_builtin[] =
|
|||
PF_objerror, // void(string e) objerror = #11
|
||||
PF_vlen, // float(vector v) vlen = #12
|
||||
PF_vectoyaw, // float(vector v) vectoyaw = #13
|
||||
PF_Spawn, // entity() spawn = #14
|
||||
PF_Remove, // void(entity e) remove = #15
|
||||
PF_spawn, // entity() spawn = #14
|
||||
PF_remove, // void(entity e) remove = #15
|
||||
PF_traceline, // float(vector v1, vector v2, float tryents) traceline = #16
|
||||
PF_checkclient, // entity() clientlist = #17
|
||||
PF_Find, // entity(entity start, .string fld, string match) find = #18
|
||||
PF_find, // entity(entity start, .string fld, string match) find = #18
|
||||
PF_precache_sound, // void(string s) precache_sound = #19
|
||||
PF_precache_model, // void(string s) precache_model = #20
|
||||
PF_stuffcmd, // void(entity client, string s)stuffcmd = #21
|
||||
|
@ -1709,16 +1709,16 @@ static builtin_t pr_builtin[] =
|
|||
PF_traceoff,
|
||||
PF_eprint, // void(entity e) debug print an entire entity
|
||||
PF_walkmove, // float(float yaw, float dist) walkmove
|
||||
PF_Fixme, // float(float yaw, float dist) walkmove
|
||||
PF_fixme, // float(float yaw, float dist) walkmove
|
||||
PF_droptofloor,
|
||||
PF_lightstyle,
|
||||
PF_rint,
|
||||
PF_floor,
|
||||
PF_ceil,
|
||||
PF_Fixme,
|
||||
PF_fixme,
|
||||
PF_checkbottom,
|
||||
PF_pointcontents,
|
||||
PF_Fixme,
|
||||
PF_fixme,
|
||||
PF_fabs,
|
||||
PF_aim,
|
||||
PF_cvar,
|
||||
|
@ -1726,7 +1726,7 @@ static builtin_t pr_builtin[] =
|
|||
PF_nextent,
|
||||
PF_particle,
|
||||
PF_changeyaw,
|
||||
PF_Fixme,
|
||||
PF_fixme,
|
||||
PF_vectoangles,
|
||||
|
||||
PF_WriteByte,
|
||||
|
@ -1738,20 +1738,20 @@ static builtin_t pr_builtin[] =
|
|||
PF_WriteString,
|
||||
PF_WriteEntity,
|
||||
|
||||
PF_Fixme,
|
||||
PF_Fixme,
|
||||
PF_Fixme,
|
||||
PF_Fixme,
|
||||
PF_Fixme,
|
||||
PF_Fixme,
|
||||
PF_Fixme,
|
||||
PF_fixme,
|
||||
PF_fixme,
|
||||
PF_fixme,
|
||||
PF_fixme,
|
||||
PF_fixme,
|
||||
PF_fixme,
|
||||
PF_fixme,
|
||||
|
||||
SV_MoveToGoal,
|
||||
PF_precache_file,
|
||||
PF_makestatic,
|
||||
|
||||
PF_changelevel,
|
||||
PF_Fixme,
|
||||
PF_fixme,
|
||||
|
||||
PF_cvar_set,
|
||||
PF_centerprint,
|
||||
|
@ -1765,6 +1765,5 @@ static builtin_t pr_builtin[] =
|
|||
PF_setspawnparms
|
||||
};
|
||||
|
||||
builtin_t *pr_builtins = pr_builtin;
|
||||
int32_t pr_numbuiltins = arraysizeof(pr_builtin);
|
||||
int32_t pr_numbuiltins = arraysizeof(pr_builtins);
|
||||
|
||||
|
|
|
@ -22,7 +22,22 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#ifndef spingle__pr_comp_h
|
||||
#define spingle__pr_comp_h
|
||||
|
||||
// this file is shared by quake and qcc
|
||||
#define OFS_NULL 0
|
||||
#define OFS_RETURN 1
|
||||
#define OFS_PARM0 4 // leave 3 ofs for each parm to hold vectors
|
||||
#define OFS_PARM1 7
|
||||
#define OFS_PARM2 10
|
||||
#define OFS_PARM3 13
|
||||
#define OFS_PARM4 16
|
||||
#define OFS_PARM5 19
|
||||
#define OFS_PARM6 22
|
||||
#define OFS_PARM7 25
|
||||
|
||||
#define DEF_SAVEGLOBAL (1 << 15)
|
||||
|
||||
#define MAX_PARMS 8
|
||||
|
||||
#define PROG_VERSION 6
|
||||
|
||||
typedef int32_t func_t;
|
||||
typedef int32_t string_t;
|
||||
|
@ -40,18 +55,6 @@ typedef enum
|
|||
ev_pointer
|
||||
} etype_t;
|
||||
|
||||
#define OFS_NULL 0
|
||||
#define OFS_RETURN 1
|
||||
#define OFS_PARM0 4 // leave 3 ofs for each parm to hold vectors
|
||||
#define OFS_PARM1 7
|
||||
#define OFS_PARM2 10
|
||||
#define OFS_PARM3 13
|
||||
#define OFS_PARM4 16
|
||||
#define OFS_PARM5 19
|
||||
#define OFS_PARM6 22
|
||||
#define OFS_PARM7 25
|
||||
|
||||
|
||||
enum
|
||||
{
|
||||
OP_DONE,
|
||||
|
@ -133,63 +136,56 @@ enum
|
|||
|
||||
typedef struct statement_s
|
||||
{
|
||||
uint16_t op;
|
||||
int16_t a, b, c;
|
||||
uint16_t op;
|
||||
int16_t a, b, c;
|
||||
} dstatement_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint16_t type; // if DEF_SAVEGLOBAL bit is set
|
||||
// the variable needs to be saved in savegames
|
||||
uint16_t ofs;
|
||||
int32_t s_name;
|
||||
uint16_t type; /* if DEF_SAVEGLOBAL bit is set the variable needs to be saved in savegames */
|
||||
uint16_t ofs;
|
||||
int32_t s_name;
|
||||
} ddef_t;
|
||||
|
||||
#define DEF_SAVEGLOBAL (1<<15)
|
||||
|
||||
#define MAX_PARMS 8
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int32_t first_statement; // negative numbers are builtins
|
||||
int32_t parm_start;
|
||||
int32_t locals; // total ints of parms + locals
|
||||
int32_t first_statement; // negative numbers are builtins
|
||||
int32_t parm_start;
|
||||
int32_t locals; // total ints of parms + locals
|
||||
|
||||
int32_t profile; // runtime
|
||||
int32_t profile; // runtime
|
||||
|
||||
int32_t s_name;
|
||||
int32_t s_file; // source file defined in
|
||||
int32_t s_name;
|
||||
int32_t s_file; // source file defined in
|
||||
|
||||
int32_t numparms;
|
||||
int32_t numparms;
|
||||
byte parm_size[MAX_PARMS];
|
||||
} dfunction_t;
|
||||
|
||||
|
||||
#define PROG_VERSION 6
|
||||
typedef struct
|
||||
{
|
||||
int32_t version;
|
||||
int32_t crc; // check of header file
|
||||
int32_t version;
|
||||
int32_t crc; // check of header file
|
||||
|
||||
int32_t ofs_statements;
|
||||
int32_t numstatements; // statement 0 is an error
|
||||
int32_t ofs_statements;
|
||||
int32_t numstatements; // statement 0 is an error
|
||||
|
||||
int32_t ofs_globaldefs;
|
||||
int32_t numglobaldefs;
|
||||
int32_t ofs_globaldefs;
|
||||
int32_t numglobaldefs;
|
||||
|
||||
int32_t ofs_fielddefs;
|
||||
int32_t numfielddefs;
|
||||
int32_t ofs_fielddefs;
|
||||
int32_t numfielddefs;
|
||||
|
||||
int32_t ofs_functions;
|
||||
int32_t numfunctions; // function 0 is an empty
|
||||
int32_t ofs_functions;
|
||||
int32_t numfunctions; // function 0 is an empty
|
||||
|
||||
int32_t ofs_strings;
|
||||
int32_t numstrings; // first string is a null string
|
||||
int32_t ofs_strings;
|
||||
int32_t numstrings; // first string is a null string
|
||||
|
||||
int32_t ofs_globals;
|
||||
int32_t numglobals;
|
||||
int32_t ofs_globals;
|
||||
int32_t numglobals;
|
||||
|
||||
int32_t entityfields;
|
||||
int32_t entityfields;
|
||||
} dprograms_t;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -23,43 +23,43 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
|
||||
#include "q_defs.h"
|
||||
|
||||
dprograms_t *progs;
|
||||
dfunction_t *pr_functions;
|
||||
dprograms_t progs;
|
||||
dfunction_t *pr_functions;
|
||||
|
||||
static char *pr_strings;
|
||||
static int32_t pr_stringssize;
|
||||
static const char **pr_knownstrings;
|
||||
static int32_t pr_maxknownstrings;
|
||||
static int32_t pr_numknownstrings;
|
||||
static ddef_t *pr_fielddefs;
|
||||
static ddef_t *pr_globaldefs;
|
||||
static char *pr_strings;
|
||||
static int32_t pr_stringssize;
|
||||
static const char **pr_knownstrings;
|
||||
static int32_t pr_maxknownstrings;
|
||||
static int32_t pr_numknownstrings;
|
||||
static ddef_t *pr_fielddefs;
|
||||
static ddef_t *pr_globaldefs;
|
||||
|
||||
bool pr_alpha_supported; //johnfitz
|
||||
bool pr_alpha_supported; //johnfitz
|
||||
|
||||
dstatement_t *pr_statements;
|
||||
globalvars_t *pr_global_struct;
|
||||
float *pr_globals; // same as pr_global_struct
|
||||
int32_t pr_edict_size; // in bytes
|
||||
dstatement_t *pr_statements;
|
||||
globalvars_t *pr_global_struct;
|
||||
float *pr_globals; // same as pr_global_struct
|
||||
int32_t pr_edict_size; // in bytes
|
||||
|
||||
uint16_t pr_crc;
|
||||
uint16_t pr_crc;
|
||||
|
||||
int32_t type_size[8] =
|
||||
static int32_t type_size[] =
|
||||
{
|
||||
1, // ev_void
|
||||
1, // sizeof(string_t) / 4 // ev_string
|
||||
1, // ev_float
|
||||
3, // ev_vector
|
||||
1, // ev_entity
|
||||
1, // ev_field
|
||||
1, // sizeof(func_t) / 4 // ev_function
|
||||
1 // sizeof(void *) / 4 // ev_pointer
|
||||
[ev_void] = 1,
|
||||
[ev_string] = 1,
|
||||
[ev_float] = 1,
|
||||
[ev_vector] = 3,
|
||||
[ev_entity] = 1,
|
||||
[ev_field] = 1,
|
||||
[ev_function] = 1,
|
||||
[ev_pointer] = 1,
|
||||
};
|
||||
|
||||
static ddef_t *ED_FieldAtOfs(int32_t ofs);
|
||||
static bool ED_ParseEpair(void *base, ddef_t *key, const char *s);
|
||||
static ddef_t *ED_FieldAtOfs(int32_t ofs);
|
||||
static bool ED_ParseEpair(void *base, ddef_t *key, const char *s);
|
||||
|
||||
#define MAX_FIELD_LEN 64
|
||||
#define GEFV_CACHESIZE 2
|
||||
#define MAX_FIELD_LEN 64
|
||||
#define GEFV_CACHESIZE 2
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
@ -73,17 +73,17 @@ static gefv_cache gefvCache[GEFV_CACHESIZE] =
|
|||
{ NULL, "" }
|
||||
};
|
||||
|
||||
cvar_t nomonsters = {"nomonsters", "0", CVAR_NONE};
|
||||
cvar_t gamecfg = {"gamecfg", "0", CVAR_NONE};
|
||||
cvar_t scratch1 = {"scratch1", "0", CVAR_NONE};
|
||||
cvar_t scratch2 = {"scratch2", "0", CVAR_NONE};
|
||||
cvar_t scratch3 = {"scratch3", "0", CVAR_NONE};
|
||||
cvar_t scratch4 = {"scratch4", "0", CVAR_NONE};
|
||||
cvar_t savedgamecfg = {"savedgamecfg", "0", CVAR_ARCHIVE};
|
||||
cvar_t saved1 = {"saved1", "0", CVAR_ARCHIVE};
|
||||
cvar_t saved2 = {"saved2", "0", CVAR_ARCHIVE};
|
||||
cvar_t saved3 = {"saved3", "0", CVAR_ARCHIVE};
|
||||
cvar_t saved4 = {"saved4", "0", CVAR_ARCHIVE};
|
||||
cvar_t nomonsters = {"nomonsters", "0", CVAR_NONE};
|
||||
cvar_t gamecfg = {"gamecfg", "0", CVAR_NONE};
|
||||
cvar_t scratch1 = {"scratch1", "0", CVAR_NONE};
|
||||
cvar_t scratch2 = {"scratch2", "0", CVAR_NONE};
|
||||
cvar_t scratch3 = {"scratch3", "0", CVAR_NONE};
|
||||
cvar_t scratch4 = {"scratch4", "0", CVAR_NONE};
|
||||
cvar_t savedgamecfg = {"savedgamecfg", "0", CVAR_ARCHIVE};
|
||||
cvar_t saved1 = {"saved1", "0", CVAR_ARCHIVE};
|
||||
cvar_t saved2 = {"saved2", "0", CVAR_ARCHIVE};
|
||||
cvar_t saved3 = {"saved3", "0", CVAR_ARCHIVE};
|
||||
cvar_t saved4 = {"saved4", "0", CVAR_ARCHIVE};
|
||||
|
||||
/*
|
||||
=================
|
||||
|
@ -94,7 +94,7 @@ Sets everything to NULL
|
|||
*/
|
||||
void ED_ClearEdict(edict_t *e)
|
||||
{
|
||||
memset(&e->v, 0, progs->entityfields * 4);
|
||||
memset(&e->v, 0, progs.entityfields * 4);
|
||||
e->free = false;
|
||||
}
|
||||
|
||||
|
@ -176,7 +176,7 @@ static ddef_t *ED_GlobalAtOfs(int32_t ofs)
|
|||
ddef_t *def;
|
||||
int32_t i;
|
||||
|
||||
for(i = 0; i < progs->numglobaldefs; i++)
|
||||
for(i = 0; i < progs.numglobaldefs; i++)
|
||||
{
|
||||
def = &pr_globaldefs[i];
|
||||
if(def->ofs == ofs)
|
||||
|
@ -195,7 +195,7 @@ static ddef_t *ED_FieldAtOfs(int32_t ofs)
|
|||
ddef_t *def;
|
||||
int32_t i;
|
||||
|
||||
for(i = 0; i < progs->numfielddefs; i++)
|
||||
for(i = 0; i < progs.numfielddefs; i++)
|
||||
{
|
||||
def = &pr_fielddefs[i];
|
||||
if(def->ofs == ofs)
|
||||
|
@ -214,7 +214,7 @@ static ddef_t *ED_FindField(const char *name)
|
|||
ddef_t *def;
|
||||
int32_t i;
|
||||
|
||||
for(i = 0; i < progs->numfielddefs; i++)
|
||||
for(i = 0; i < progs.numfielddefs; i++)
|
||||
{
|
||||
def = &pr_fielddefs[i];
|
||||
if(!strcmp(PR_GetString(def->s_name), name))
|
||||
|
@ -234,7 +234,7 @@ static ddef_t *ED_FindGlobal(const char *name)
|
|||
ddef_t *def;
|
||||
int32_t i;
|
||||
|
||||
for(i = 0; i < progs->numglobaldefs; i++)
|
||||
for(i = 0; i < progs.numglobaldefs; i++)
|
||||
{
|
||||
def = &pr_globaldefs[i];
|
||||
if(!strcmp(PR_GetString(def->s_name), name))
|
||||
|
@ -254,7 +254,7 @@ static dfunction_t *ED_FindFunction(const char *fn_name)
|
|||
dfunction_t *func;
|
||||
int32_t i;
|
||||
|
||||
for(i = 0; i < progs->numfunctions; i++)
|
||||
for(i = 0; i < progs.numfunctions; i++)
|
||||
{
|
||||
func = &pr_functions[i];
|
||||
if(!strcmp(PR_GetString(func->s_name), fn_name))
|
||||
|
@ -479,7 +479,7 @@ void ED_Print(edict_t *ed)
|
|||
}
|
||||
|
||||
Con_SafePrintf("\nEDICT %" PRIi32 ":\n", NUM_FOR_EDICT(ed)); //johnfitz -- was Con_Printf
|
||||
for(i = 1; i < progs->numfielddefs; i++)
|
||||
for(i = 1; i < progs.numfielddefs; i++)
|
||||
{
|
||||
d = &pr_fielddefs[i];
|
||||
name = PR_GetString(d->s_name);
|
||||
|
@ -531,7 +531,7 @@ void ED_Write(FILE *f, edict_t *ed)
|
|||
return;
|
||||
}
|
||||
|
||||
for(i = 1; i < progs->numfielddefs; i++)
|
||||
for(i = 1; i < progs.numfielddefs; i++)
|
||||
{
|
||||
d = &pr_fielddefs[i];
|
||||
name = PR_GetString(d->s_name);
|
||||
|
@ -555,7 +555,7 @@ void ED_Write(FILE *f, edict_t *ed)
|
|||
fprintf(f, "\"%s\"\n", PR_UglyValueString(d->type, (eval_t *)v));
|
||||
}
|
||||
|
||||
//johnfitz -- save entity alpha manually when progs.dat doesn't know about alpha
|
||||
//johnfitz -- save entity alpha manually when program doesn't know about alpha
|
||||
if(!pr_alpha_supported && ed->alpha != ENTALPHA_DEFAULT)
|
||||
fprintf(f, "\"alpha\" \"%f\"\n", ENTALPHA_TOSAVE(ed->alpha));
|
||||
//johnfitz
|
||||
|
@ -670,7 +670,7 @@ void ED_WriteGlobals(FILE *f)
|
|||
int32_t type;
|
||||
|
||||
fprintf(f, "{\n");
|
||||
for(i = 0; i < progs->numglobaldefs; i++)
|
||||
for(i = 0; i < progs.numglobaldefs; i++)
|
||||
{
|
||||
def = &pr_globaldefs[i];
|
||||
type = def->type;
|
||||
|
@ -872,7 +872,7 @@ const char *ED_ParseEdict(const char *data, edict_t *ent)
|
|||
|
||||
// clear it
|
||||
if(ent != sv.edicts) // hack
|
||||
memset(&ent->v, 0, progs->entityfields * 4);
|
||||
memset(&ent->v, 0, progs.entityfields * 4);
|
||||
|
||||
// go through all the dictionary pairs
|
||||
while(1)
|
||||
|
@ -923,7 +923,7 @@ const char *ED_ParseEdict(const char *data, edict_t *ent)
|
|||
if(keyname[0] == '_')
|
||||
continue;
|
||||
|
||||
//johnfitz -- hack to support .alpha even when progs.dat doesn't know about it
|
||||
//johnfitz -- hack to support .alpha even when program doesn't know about it
|
||||
if(!strcmp(keyname, "alpha"))
|
||||
ent->alpha = ENTALPHA_ENCODE(atof(com_token));
|
||||
//johnfitz
|
||||
|
@ -1050,7 +1050,8 @@ PR_LoadProgs
|
|||
*/
|
||||
void PR_LoadProgs(void)
|
||||
{
|
||||
int32_t i;
|
||||
byte *prog_data;
|
||||
int32_t i;
|
||||
|
||||
// flush the non-C variable lookup cache
|
||||
for(i = 0; i < GEFV_CACHESIZE; i++)
|
||||
|
@ -1058,54 +1059,74 @@ void PR_LoadProgs(void)
|
|||
|
||||
CRC_Init(&pr_crc);
|
||||
|
||||
progs = (dprograms_t *)COM_LoadHunkFile("progs.dat", NULL);
|
||||
if(!progs)
|
||||
prog_data = COM_LoadHunkFile("progs.dat", NULL);
|
||||
if(!prog_data)
|
||||
Host_Error("PR_LoadProgs: couldn't load progs.dat");
|
||||
Con_DPrintf("Programs occupy %" PRIi32 "K.\n", com_filesize / 1024);
|
||||
|
||||
for(i = 0; i < com_filesize; i++)
|
||||
CRC_ProcessByte(&pr_crc, ((byte *)progs)[i]);
|
||||
CRC_ProcessByte(&pr_crc, prog_data[i]);
|
||||
|
||||
// byte swap the header
|
||||
for(i = 0; i < (int32_t) sizeof(*progs) / 4; i++)
|
||||
((int32_t *)progs)[i] = LittleLong(((int32_t *)progs)[i]);
|
||||
progs.version = ReadLittleLong(&prog_data[4 * 0]);
|
||||
progs.crc = ReadLittleLong(&prog_data[4 * 1]);
|
||||
|
||||
if(progs->version != PROG_VERSION)
|
||||
Host_Error("progs.dat has wrong version number (%" PRIi32 " should be %" PRIi32 ")", progs->version, PROG_VERSION);
|
||||
if(progs->crc != PROGHEADER_CRC)
|
||||
progs.ofs_statements = ReadLittleLong(&prog_data[4 * 2]);
|
||||
progs.numstatements = ReadLittleLong(&prog_data[4 * 3]);
|
||||
|
||||
progs.ofs_globaldefs = ReadLittleLong(&prog_data[4 * 4]);
|
||||
progs.numglobaldefs = ReadLittleLong(&prog_data[4 * 5]);
|
||||
|
||||
progs.ofs_fielddefs = ReadLittleLong(&prog_data[4 * 6]);
|
||||
progs.numfielddefs = ReadLittleLong(&prog_data[4 * 7]);
|
||||
|
||||
progs.ofs_functions = ReadLittleLong(&prog_data[4 * 8]);
|
||||
progs.numfunctions = ReadLittleLong(&prog_data[4 * 9]);
|
||||
|
||||
progs.ofs_strings = ReadLittleLong(&prog_data[4 * 10]);
|
||||
progs.numstrings = ReadLittleLong(&prog_data[4 * 11]);
|
||||
|
||||
progs.ofs_globals = ReadLittleLong(&prog_data[4 * 12]);
|
||||
progs.numglobals = ReadLittleLong(&prog_data[4 * 13]);
|
||||
|
||||
progs.entityfields = ReadLittleLong(&prog_data[4 * 14]);
|
||||
|
||||
if(progs.version != PROG_VERSION)
|
||||
Host_Error("progs.dat has wrong version number (%" PRIi32 " should be %" PRIi32 ")", progs.version, PROG_VERSION);
|
||||
if(progs.crc != PROGHEADER_CRC)
|
||||
Host_Error("progs.dat system vars have been modified, progdefs.h is out of date");
|
||||
|
||||
pr_functions = (dfunction_t *)((byte *)progs + progs->ofs_functions);
|
||||
pr_strings = (char *)progs + progs->ofs_strings;
|
||||
if(progs->ofs_strings + progs->numstrings >= com_filesize)
|
||||
pr_functions = (dfunction_t *)(prog_data + progs.ofs_functions);
|
||||
pr_strings = (char *)prog_data + progs.ofs_strings;
|
||||
if(progs.ofs_strings + progs.numstrings >= com_filesize)
|
||||
Host_Error("progs.dat strings go past end of file\n");
|
||||
|
||||
// initialize the strings
|
||||
pr_numknownstrings = 0;
|
||||
pr_maxknownstrings = 0;
|
||||
pr_stringssize = progs->numstrings;
|
||||
pr_stringssize = progs.numstrings;
|
||||
if(pr_knownstrings)
|
||||
Z_Free((void *)pr_knownstrings);
|
||||
pr_knownstrings = NULL;
|
||||
PR_SetEngineString("");
|
||||
|
||||
pr_globaldefs = (ddef_t *)((byte *)progs + progs->ofs_globaldefs);
|
||||
pr_fielddefs = (ddef_t *)((byte *)progs + progs->ofs_fielddefs);
|
||||
pr_statements = (dstatement_t *)((byte *)progs + progs->ofs_statements);
|
||||
pr_globaldefs = (ddef_t *)(prog_data + progs.ofs_globaldefs);
|
||||
pr_fielddefs = (ddef_t *)(prog_data + progs.ofs_fielddefs);
|
||||
pr_statements = (dstatement_t *)(prog_data + progs.ofs_statements);
|
||||
|
||||
pr_global_struct = (globalvars_t *)((byte *)progs + progs->ofs_globals);
|
||||
pr_global_struct = (globalvars_t *)(prog_data + progs.ofs_globals);
|
||||
pr_globals = (float *)pr_global_struct;
|
||||
|
||||
// byte swap the lumps
|
||||
for(i = 0; i < progs->numstatements; i++)
|
||||
for(i = 0; i < progs.numstatements; i++)
|
||||
{
|
||||
pr_statements[i].op = LittleShort(pr_statements[i].op);
|
||||
pr_statements[i].a = LittleShort(pr_statements[i].a);
|
||||
pr_statements[i].b = LittleShort(pr_statements[i].b);
|
||||
pr_statements[i].c = LittleShort(pr_statements[i].c);
|
||||
pr_statements[i].a = LittleShort(pr_statements[i].a);
|
||||
pr_statements[i].b = LittleShort(pr_statements[i].b);
|
||||
pr_statements[i].c = LittleShort(pr_statements[i].c);
|
||||
}
|
||||
|
||||
for(i = 0; i < progs->numfunctions; i++)
|
||||
for(i = 0; i < progs.numfunctions; i++)
|
||||
{
|
||||
pr_functions[i].first_statement = LittleLong(pr_functions[i].first_statement);
|
||||
pr_functions[i].parm_start = LittleLong(pr_functions[i].parm_start);
|
||||
|
@ -1115,7 +1136,7 @@ void PR_LoadProgs(void)
|
|||
pr_functions[i].locals = LittleLong(pr_functions[i].locals);
|
||||
}
|
||||
|
||||
for(i = 0; i < progs->numglobaldefs; i++)
|
||||
for(i = 0; i < progs.numglobaldefs; i++)
|
||||
{
|
||||
pr_globaldefs[i].type = LittleShort(pr_globaldefs[i].type);
|
||||
pr_globaldefs[i].ofs = LittleShort(pr_globaldefs[i].ofs);
|
||||
|
@ -1124,7 +1145,7 @@ void PR_LoadProgs(void)
|
|||
|
||||
pr_alpha_supported = false; //johnfitz
|
||||
|
||||
for(i = 0; i < progs->numfielddefs; i++)
|
||||
for(i = 0; i < progs.numfielddefs; i++)
|
||||
{
|
||||
pr_fielddefs[i].type = LittleShort(pr_fielddefs[i].type);
|
||||
if(pr_fielddefs[i].type & DEF_SAVEGLOBAL)
|
||||
|
@ -1132,16 +1153,16 @@ void PR_LoadProgs(void)
|
|||
pr_fielddefs[i].ofs = LittleShort(pr_fielddefs[i].ofs);
|
||||
pr_fielddefs[i].s_name = LittleLong(pr_fielddefs[i].s_name);
|
||||
|
||||
//johnfitz -- detect alpha support in progs.dat
|
||||
//johnfitz -- detect alpha support
|
||||
if(!strcmp(pr_strings + pr_fielddefs[i].s_name, "alpha"))
|
||||
pr_alpha_supported = true;
|
||||
//johnfitz
|
||||
}
|
||||
|
||||
for(i = 0; i < progs->numglobals; i++)
|
||||
for(i = 0; i < progs.numglobals; i++)
|
||||
((int32_t *)pr_globals)[i] = LittleLong(((int32_t *)pr_globals)[i]);
|
||||
|
||||
pr_edict_size = progs->entityfields * 4 + sizeof(edict_t) - sizeof(entvars_t);
|
||||
pr_edict_size = progs.entityfields * 4 + sizeof(edict_t) - sizeof(entvars_t);
|
||||
// round off to next highest whole word address (esp for Alpha)
|
||||
// this ensures that pointers in the engine data area are always
|
||||
// properly aligned
|
||||
|
|
|
@ -227,7 +227,7 @@ void PR_Profile_f(void)
|
|||
{
|
||||
pmax = 0;
|
||||
best = NULL;
|
||||
for(i = 0; i < progs->numfunctions; i++)
|
||||
for(i = 0; i < progs.numfunctions; i++)
|
||||
{
|
||||
f = &pr_functions[i];
|
||||
if(f->profile > pmax)
|
||||
|
@ -363,7 +363,7 @@ void PR_ExecuteProgram(func_t fnum)
|
|||
edict_t *ed;
|
||||
int32_t exitdepth;
|
||||
|
||||
if(!fnum || fnum >= progs->numfunctions)
|
||||
if(!fnum || fnum >= progs.numfunctions)
|
||||
{
|
||||
if(pr_global_struct->self)
|
||||
ED_Print(PROG_TO_EDICT(pr_global_struct->self));
|
||||
|
|
|
@ -23,8 +23,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#ifndef spingle__progs_h
|
||||
#define spingle__progs_h
|
||||
|
||||
#include "pr_comp.h" /* defs shared with qcc */
|
||||
#include "progdefs.h" /* generated by program cdefs */
|
||||
#include "pr_comp.h" /* defs shared with qcc */
|
||||
#include "progdefs.h" /* generated by program cdefs */
|
||||
|
||||
typedef union eval_s
|
||||
{
|
||||
|
@ -36,30 +36,30 @@ typedef union eval_s
|
|||
int32_t edict;
|
||||
} eval_t;
|
||||
|
||||
#define MAX_ENT_LEAFS 32
|
||||
#define MAX_ENT_LEAFS 32
|
||||
typedef struct edict_s
|
||||
{
|
||||
bool free;
|
||||
link_t area; /* linked to a division node or leaf */
|
||||
bool free;
|
||||
link_t area; /* linked to a division node or leaf */
|
||||
|
||||
int32_t num_leafs;
|
||||
int32_t leafnums[MAX_ENT_LEAFS];
|
||||
int32_t num_leafs;
|
||||
int32_t leafnums[MAX_ENT_LEAFS];
|
||||
|
||||
entity_state_t baseline;
|
||||
uint8_t alpha; /* johnfitz -- hack to support alpha since it's not part of entvars_t */
|
||||
bool sendinterval; /* johnfitz -- send time until nextthink to client for better lerp timing */
|
||||
entity_state_t baseline;
|
||||
uint8_t alpha; /* johnfitz -- hack to support alpha since it's not part of entvars_t */
|
||||
bool sendinterval; /* johnfitz -- send time until nextthink to client for better lerp timing */
|
||||
|
||||
float freetime; /* sv.time when the object was freed */
|
||||
entvars_t v; /* C exported fields from progs */
|
||||
float freetime; /* sv.time when the object was freed */
|
||||
entvars_t v; /* C exported fields from progs */
|
||||
|
||||
/* other fields from progs come immediately after */
|
||||
byte fields[];
|
||||
} edict_t;
|
||||
|
||||
#define EDICT_FROM_AREA(l) (edict_t *)((byte *)l - offsetof(edict_t, area))
|
||||
#define EDICT_FROM_AREA(l) (edict_t *)((byte *)(l) - offsetof(edict_t, area))
|
||||
|
||||
//============================================================================
|
||||
|
||||
extern dprograms_t *progs;
|
||||
extern dprograms_t progs;
|
||||
extern dfunction_t *pr_functions;
|
||||
extern dstatement_t *pr_statements;
|
||||
extern globalvars_t *pr_global_struct;
|
||||
|
@ -91,44 +91,34 @@ const char *ED_ParseGlobals(const char *data);
|
|||
|
||||
void ED_LoadFromFile(const char *data);
|
||||
|
||||
/*
|
||||
#define EDICT_NUM(n) ((edict_t *)(sv.edicts+ (n)*pr_edict_size))
|
||||
#define NUM_FOR_EDICT(e) (((byte *)(e) - sv.edicts) / pr_edict_size)
|
||||
*/
|
||||
edict_t *EDICT_NUM(int32_t n);
|
||||
int32_t NUM_FOR_EDICT(edict_t *e);
|
||||
|
||||
#define NEXT_EDICT(e) ((edict_t *)( (byte *)e + pr_edict_size))
|
||||
#define NEXT_EDICT(e) ((edict_t *)((byte *)(e) + pr_edict_size))
|
||||
|
||||
#define EDICT_TO_PROG(e) ((byte *)e - (byte *)sv.edicts)
|
||||
#define PROG_TO_EDICT(e) ((edict_t *)((byte *)sv.edicts + e))
|
||||
#define EDICT_TO_PROG(e) ((byte *)(e) - (byte *)sv.edicts)
|
||||
#define PROG_TO_EDICT(e) ((edict_t *)((byte *)sv.edicts + (e)))
|
||||
|
||||
#define G_FLOAT(o) (pr_globals[o])
|
||||
#define G_INT(o) (*(int32_t *)&pr_globals[o])
|
||||
#define G_EDICT(o) ((edict_t *)((byte *)sv.edicts+ *(int32_t *)&pr_globals[o]))
|
||||
#define G_EDICTNUM(o) NUM_FOR_EDICT(G_EDICT(o))
|
||||
#define G_VECTOR(o) (&pr_globals[o])
|
||||
#define G_STRING(o) (PR_GetString(*(string_t *)&pr_globals[o]))
|
||||
#define G_FUNCTION(o) (*(func_t *)&pr_globals[o])
|
||||
|
||||
#define E_FLOAT(e,o) (((float*)&e->v)[o])
|
||||
#define E_INT(e,o) (*(int32_t *)&((float*)&e->v)[o])
|
||||
#define E_VECTOR(e,o) (&((float*)&e->v)[o])
|
||||
#define E_STRING(e,o) (PR_GetString(*(string_t *)&((float*)&e->v)[o]))
|
||||
|
||||
extern int32_t type_size[8];
|
||||
#define G_FLOAT(o) (pr_globals[o])
|
||||
#define G_INT(o) (*(int32_t *)&pr_globals[o])
|
||||
#define G_EDICT(o) ((edict_t *)((byte *)sv.edicts+ *(int32_t *)&pr_globals[o]))
|
||||
#define G_EDICTNUM(o) NUM_FOR_EDICT(G_EDICT(o))
|
||||
#define G_VECTOR(o) (&pr_globals[o])
|
||||
#define G_STRING(o) (PR_GetString(*(string_t *)&pr_globals[o]))
|
||||
#define G_FUNCTION(o) (*(func_t *)&pr_globals[o])
|
||||
|
||||
typedef void (*builtin_t)(void);
|
||||
extern builtin_t *pr_builtins;
|
||||
extern int32_t pr_numbuiltins;
|
||||
|
||||
extern int32_t pr_argc;
|
||||
extern builtin_t pr_builtins[];
|
||||
extern int32_t pr_numbuiltins;
|
||||
|
||||
extern bool pr_trace;
|
||||
extern dfunction_t *pr_xfunction;
|
||||
extern int32_t pr_xstatement;
|
||||
extern int32_t pr_argc;
|
||||
|
||||
extern uint16_t pr_crc;
|
||||
extern bool pr_trace;
|
||||
extern dfunction_t *pr_xfunction;
|
||||
extern int32_t pr_xstatement;
|
||||
|
||||
extern uint16_t pr_crc;
|
||||
|
||||
noreturn void PR_RunError(const char *error, ...) FUNC_PRINTF(1, 2);
|
||||
|
||||
|
|
|
@ -23,8 +23,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#ifndef spingle__protocol_h
|
||||
#define spingle__protocol_h
|
||||
|
||||
#define PROTOCOL_NETQUAKE 15 //johnfitz -- standard quake protocol
|
||||
#define PROTOCOL_FITZQUAKE 666 //johnfitz -- added new protocol for fitzquake 0.85
|
||||
#define PROTOCOL_NETQUAKE 15 //johnfitz -- standard protocol
|
||||
#define PROTOCOL_FITZQUAKE 666 //johnfitz -- added new protocol for fitz 0.85
|
||||
#define PROTOCOL_RMQ 999
|
||||
|
||||
// PROTOCOL_RMQ protocol flags
|
||||
|
|
|
@ -557,7 +557,7 @@ void R_DrawBrushModel(entity_t *e)
|
|||
}
|
||||
|
||||
glPushMatrix();
|
||||
e->angles[0] = -e->angles[0]; // stupid quake bug
|
||||
e->angles[0] = -e->angles[0]; // stupid bug
|
||||
if(gl_zfix.value)
|
||||
{
|
||||
e->origin[0] -= DIST_EPSILON;
|
||||
|
@ -571,7 +571,7 @@ void R_DrawBrushModel(entity_t *e)
|
|||
e->origin[1] += DIST_EPSILON;
|
||||
e->origin[2] += DIST_EPSILON;
|
||||
}
|
||||
e->angles[0] = -e->angles[0]; // stupid quake bug
|
||||
e->angles[0] = -e->angles[0]; // stupid bug
|
||||
|
||||
R_ClearTextureChains(clmodel, chain_model);
|
||||
for(i = 0 ; i < clmodel->nummodelsurfaces ; i++, psurf++)
|
||||
|
@ -628,9 +628,9 @@ void R_DrawBrushModel_ShowTris(entity_t *e)
|
|||
psurf = &clmodel->surfaces[clmodel->firstmodelsurface];
|
||||
|
||||
glPushMatrix();
|
||||
e->angles[0] = -e->angles[0]; // stupid quake bug
|
||||
e->angles[0] = -e->angles[0]; // stupid bug
|
||||
R_RotateForEntity(e->origin, e->angles);
|
||||
e->angles[0] = -e->angles[0]; // stupid quake bug
|
||||
e->angles[0] = -e->angles[0]; // stupid bug
|
||||
|
||||
//
|
||||
// draw it
|
||||
|
|
|
@ -140,7 +140,6 @@ void R_MarkSurfaces(void)
|
|||
|
||||
// rebuild chains
|
||||
|
||||
#if 1
|
||||
//iterate through surfaces one node at a time to rebuild chains
|
||||
//need to do it this way if we want to work with tyrann's skip removal tool
|
||||
//becuase his tool doesn't actually remove the surfaces from the bsp surfaces lump
|
||||
|
@ -151,17 +150,6 @@ void R_MarkSurfaces(void)
|
|||
{
|
||||
R_ChainSurface(surf, chain_world);
|
||||
}
|
||||
#else
|
||||
//the old way
|
||||
surf = &cl.worldmodel->surfaces[cl.worldmodel->firstmodelsurface];
|
||||
for(i = 0 ; i < cl.worldmodel->nummodelsurfaces ; i++, surf++)
|
||||
{
|
||||
if(surf->visframe == r_visframecount)
|
||||
{
|
||||
R_ChainSurface(surf, chain_world);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -72,7 +72,6 @@ typedef struct entity_s
|
|||
int32_t dlightframe; // dynamic lighting
|
||||
int32_t dlightbits;
|
||||
|
||||
// FIXME: could turn these into a union
|
||||
int32_t trivial_accept;
|
||||
struct mnode_s *topnode; // for bmodels, first world node
|
||||
// that splits bmodel, or NULL if
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Audio Codecs: Adapted from ioquake3 with changes.
|
||||
* Audio Codecs: Adapted from ioq3 with changes.
|
||||
* For now, only handles streaming music, not sound effects.
|
||||
*
|
||||
* Copyright (C) 1999-2005 Id Software, Inc.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Audio Codecs: Adapted from ioquake3 with changes.
|
||||
* Audio Codecs: Adapted from ioq3 with changes.
|
||||
* For now, only handles streaming music, not sound effects.
|
||||
*
|
||||
* Copyright (C) 1999-2005 Id Software, Inc.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Audio Codecs: Adapted from ioquake3 with changes.
|
||||
* Audio Codecs: Adapted from ioq3 with changes.
|
||||
* For now, only handles streaming music, not sound effects.
|
||||
*
|
||||
* Copyright (C) 1999-2005 Id Software, Inc.
|
||||
|
|
|
@ -682,7 +682,7 @@ static void S_UpdateAmbientSounds(void)
|
|||
|
||||
/*
|
||||
===================
|
||||
S_RawSamples (from QuakeII)
|
||||
S_RawSamples (from q2)
|
||||
|
||||
Streaming music support. Byte swapping
|
||||
of data must be handled by the codec.
|
||||
|
|
|
@ -322,7 +322,7 @@ static int32_t mp3_decode(snd_stream_t *stream, byte *buf, int32_t len)
|
|||
*buf++ = (sample >> 8) & 0xFF;
|
||||
*buf++ = sample & 0xFF;
|
||||
}
|
||||
else /* assumed LITTLE_ENDIAN. */
|
||||
else
|
||||
{
|
||||
*buf++ = sample & 0xFF;
|
||||
*buf++ = (sample >> 8) & 0xFF;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* snd_sdl.c - SDL audio driver for Hexen II: Hammer of Thyrion (uHexen2)
|
||||
* based on implementations found in the quakeforge and ioquake3 projects.
|
||||
* based on implementations found in the quakeforge and ioq3 projects.
|
||||
*
|
||||
* Copyright (C) 1999-2005 Id Software, Inc.
|
||||
* Copyright (C) 2005-2012 O.Sezer <sezero@users.sourceforge.net>
|
||||
|
|
|
@ -1438,7 +1438,7 @@ void SV_SpawnServer(const char *server)
|
|||
// load the rest of the entities
|
||||
//
|
||||
ent = EDICT_NUM(0);
|
||||
memset(&ent->v, 0, progs->entityfields * 4);
|
||||
memset(&ent->v, 0, progs.entityfields * 4);
|
||||
ent->free = false;
|
||||
ent->v.model = PR_SetEngineString(sv.worldmodel->name);
|
||||
ent->v.modelindex = 1; // world model
|
||||
|
|
|
@ -93,12 +93,12 @@ void SV_CheckVelocity(edict_t *ent)
|
|||
//
|
||||
for(i = 0 ; i < 3 ; i++)
|
||||
{
|
||||
if(IS_NAN(ent->v.velocity[i]))
|
||||
if(isnan(ent->v.velocity[i]))
|
||||
{
|
||||
Con_Printf("Got a NaN velocity on %s\n", PR_GetString(ent->v.classname));
|
||||
ent->v.velocity[i] = 0;
|
||||
}
|
||||
if(IS_NAN(ent->v.origin[i]))
|
||||
if(isnan(ent->v.origin[i]))
|
||||
{
|
||||
Con_Printf("Got a NaN origin on %s\n", PR_GetString(ent->v.classname));
|
||||
ent->v.origin[i] = 0;
|
||||
|
|
|
@ -245,7 +245,7 @@ static char const *Sys_GetUserDir(void)
|
|||
#if PLATFORM_IS(OSX)
|
||||
static char *OSX_StripAppBundle(char *dir)
|
||||
{
|
||||
/* based on the ioquake3 project at icculus.org. */
|
||||
/* based on the ioq3 project at icculus.org. */
|
||||
static char osx_path[MAX_OSPATH];
|
||||
|
||||
q_strlcpy(osx_path, dir, sizeof(osx_path));
|
||||
|
|
|
@ -146,12 +146,10 @@ cvar_t v_centerspeed = {"v_centerspeed", "500", CVAR_NONE};
|
|||
|
||||
void V_StartPitchDrift(void)
|
||||
{
|
||||
#if 1
|
||||
if(cl.laststop == cl.time)
|
||||
{
|
||||
return; // something else is keeping it from drifting
|
||||
}
|
||||
#endif
|
||||
if(cl.nodrift || !cl.pitchvel)
|
||||
{
|
||||
cl.pitchvel = v_centerspeed.value;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Developer Studio generated include file.
|
||||
// Used by winquake.rc
|
||||
// Used by the .rc file
|
||||
#define IDS_STRING1 1
|
||||
#define IDI_ICON2 1
|
||||
#define IDD_DIALOG1 108
|
||||
|
|
|
@ -653,17 +653,10 @@ bool SV_RecursiveHullCheck(hull_t *hull, int32_t num, float p1f, float p2f, vec3
|
|||
t2 = DoublePrecisionDotProduct(plane->normal, p2) - plane->dist;
|
||||
}
|
||||
|
||||
#if 1
|
||||
if(t1 >= 0 && t2 >= 0)
|
||||
return SV_RecursiveHullCheck(hull, node->children[0], p1f, p2f, p1, p2, trace);
|
||||
if(t1 < 0 && t2 < 0)
|
||||
return SV_RecursiveHullCheck(hull, node->children[1], p1f, p2f, p1, p2, trace);
|
||||
#else
|
||||
if((t1 >= DIST_EPSILON && t2 >= DIST_EPSILON) || (t2 > t1 && t1 >= 0))
|
||||
return SV_RecursiveHullCheck(hull, node->children[0], p1f, p2f, p1, p2, trace);
|
||||
if((t1 <= -DIST_EPSILON && t2 <= -DIST_EPSILON) || (t2 < t1 && t1 <= 0))
|
||||
return SV_RecursiveHullCheck(hull, node->children[1], p1f, p2f, p1, p2, trace);
|
||||
#endif
|
||||
|
||||
// put the crosspoint DIST_EPSILON pixels on the near side
|
||||
if(t1 < 0)
|
||||
|
|
Loading…
Reference in New Issue