Add support for writing uhexen2's v7 progs files.
Try to fix issues with newer gcc not merging common symbols any more. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5720 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
dc81386ee6
commit
0bda1b5c38
28 changed files with 296 additions and 84 deletions
|
@ -174,6 +174,8 @@ IF(CMAKE_C_COMPILER_ID MATCHES "GNU")
|
|||
ELSE()
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3")
|
||||
ENDIF()
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,--warn-common")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wformat-truncation=1")
|
||||
ENDIF()
|
||||
IF(CMAKE_BUILD_TYPE MATCHES "Debug")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector-strong")
|
||||
|
|
|
@ -1468,6 +1468,7 @@ ifneq (,$(findstring linux,$(FTE_TARGET)))
|
|||
endif
|
||||
|
||||
CL_CFLAGS=-DMULTITHREAD -DDYNAMIC_SDL $(HAVE_EGL) $(HAVE_WAYLAND) -DX11QUAKE
|
||||
BASELDFLAGS+=-Wl,--warn-common
|
||||
|
||||
QCC_DIR=linqcc$(BITS)
|
||||
|
||||
|
@ -1477,7 +1478,7 @@ ifneq (,$(findstring linux,$(FTE_TARGET)))
|
|||
NPFTE_CFLAGS=$(NPFTECFLAGS) $(W32_CFLAGS) -DMULTITHREAD -fPIC -DDYNAMIC_LIBPNG -DDYNAMIC_LIBJPEG
|
||||
NPFTEB_DIR=npfte_linux$(BITS)
|
||||
|
||||
GLCL_OBJS=$(GL_OBJS) $(D3DGL_OBJS) $(GLQUAKE_OBJS) $(BOTLIB_OBJS) gl_vidlinuxglx.o gl_vidwayland.o gl_videgl.o snd_alsa.o snd_linux.o snd_sdl.o cd_linux.o sys_linux.o sys_linux_threads.o
|
||||
GLCL_OBJS=$(GL_OBJS) $(D3DGL_OBJS) $(GLQUAKE_OBJS) $(BOTLIB_OBJS) gl_vidlinuxglx.o gl_vidwayland.o gl_videgl.o snd_pulse.o snd_alsa.o snd_linux.o snd_sdl.o cd_linux.o sys_linux.o sys_linux_threads.o
|
||||
GL_EXE_NAME=../$(EXE_NAME)-gl$(BITS)
|
||||
GLCL_EXE_NAME=../$(EXE_NAME)-glcl$(BITS)
|
||||
GL_LDFLAGS=$(GLLDFLAGS) $(XLDFLAGS)
|
||||
|
@ -1485,7 +1486,7 @@ ifneq (,$(findstring linux,$(FTE_TARGET)))
|
|||
GLB_DIR=gl_linux$(BITS)
|
||||
GLCL_DIR=glcl_linux$(BITS)
|
||||
|
||||
VKCL_OBJS=$(GL_OBJS) $(D3DGL_OBJS) $(GLQUAKE_OBJS) $(BOTLIB_OBJS) gl_vidlinuxglx.o gl_vidwayland.o gl_videgl.o snd_alsa.o snd_linux.o snd_sdl.o cd_linux.o sys_linux.o sys_linux_threads.o
|
||||
VKCL_OBJS=$(GL_OBJS) $(D3DGL_OBJS) $(GLQUAKE_OBJS) $(BOTLIB_OBJS) gl_vidlinuxglx.o gl_vidwayland.o gl_videgl.o snd_pulse.o snd_alsa.o snd_linux.o snd_sdl.o cd_linux.o sys_linux.o sys_linux_threads.o
|
||||
VK_EXE_NAME=../$(EXE_NAME)-vk$(BITS)
|
||||
VKCL_EXE_NAME=../$(EXE_NAME)-vkcl$(BITS)
|
||||
VK_LDFLAGS=$(GLLDFLAGS) $(XLDFLAGS)
|
||||
|
@ -1493,7 +1494,7 @@ ifneq (,$(findstring linux,$(FTE_TARGET)))
|
|||
VKB_DIR=vk_linux$(BITS)
|
||||
VKCL_DIR=vkcl_linux$(BITS)
|
||||
|
||||
MCL_OBJS=$(D3DGL_OBJS) $(GLQUAKE_OBJS) $(SOFTWARE_OBJS) $(BOTLIB_OBJS) gl_vidlinuxglx.o gl_vidwayland.o gl_videgl.o snd_linux.o snd_sdl.o snd_alsa.o cd_linux.o sys_linux.o sys_linux_threads.o
|
||||
MCL_OBJS=$(D3DGL_OBJS) $(GLQUAKE_OBJS) $(SOFTWARE_OBJS) $(BOTLIB_OBJS) gl_vidlinuxglx.o gl_vidwayland.o gl_videgl.o snd_linux.o snd_sdl.o snd_pulse.o snd_alsa.o cd_linux.o sys_linux.o sys_linux_threads.o
|
||||
M_EXE_NAME=../$(EXE_NAME)$(BITS)
|
||||
MCL_EXE_NAME=../$(EXE_NAME)-cl$(BITS)
|
||||
M_LDFLAGS=$(GL_LDFLAGS)
|
||||
|
|
|
@ -292,13 +292,8 @@ static struct
|
|||
// qbyte fingerprint[5*4]; //sha1 hash of accepted dtls certs
|
||||
} connectinfo;
|
||||
|
||||
quakeparms_t host_parms;
|
||||
|
||||
qboolean host_initialized; // true if into command execution
|
||||
qboolean nomaster;
|
||||
|
||||
double host_frametime;
|
||||
double realtime; // without any filtering or bounding
|
||||
double oldrealtime; // last frame run
|
||||
int host_framecount;
|
||||
|
||||
|
|
|
@ -310,7 +310,7 @@ void PM_ValidateAuthenticity(package_t *p)
|
|||
int r;
|
||||
char authority[MAX_QPATH], *sig;
|
||||
|
||||
#if 1
|
||||
#if 1//ndef _DEBUG
|
||||
#pragma message("Temporary code.")
|
||||
//this is temporary code and should be removed once everything else has been fixed.
|
||||
//ignore the signature (flag as accepted) for any packages with all mirrors on our own update site.
|
||||
|
|
|
@ -1530,7 +1530,12 @@ void QCBUILTIN PF_isserver (pubprogfuncs_t *prinst, struct globalvars_s *pr_glob
|
|||
#ifdef CLIENTONLY
|
||||
G_FLOAT(OFS_RETURN) = false;
|
||||
#else
|
||||
G_FLOAT(OFS_RETURN) = sv.state != ss_dead;
|
||||
if (sv.state == ss_dead)
|
||||
G_FLOAT(OFS_RETURN) = false;
|
||||
else if (sv.allocated_client_slots == 1)
|
||||
G_FLOAT(OFS_RETURN) = 0.5;
|
||||
else
|
||||
G_FLOAT(OFS_RETURN) = true;
|
||||
#endif
|
||||
}
|
||||
void QCBUILTIN PF_isdemo (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
|
||||
|
|
|
@ -21,6 +21,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
|
||||
#include "quakedef.h"
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define fte_weakstruct __attribute__((weak))
|
||||
#else
|
||||
//msvc's uninitialised symbols are always weak, so this is fine.
|
||||
#define fte_weakstruct
|
||||
#endif
|
||||
|
||||
#ifdef CSQC_DAT
|
||||
//for sounds following csqc ents
|
||||
#include "pr_common.h"
|
||||
|
@ -561,13 +568,17 @@ static qboolean S_Speex_Init(void)
|
|||
#ifdef AVAIL_OPENAL
|
||||
extern snd_capture_driver_t OPENAL_Capture;
|
||||
#endif
|
||||
snd_capture_driver_t DSOUND_Capture;
|
||||
snd_capture_driver_t OSS_Capture;
|
||||
snd_capture_driver_t SDL_Capture;
|
||||
#ifdef _WIN32
|
||||
snd_capture_driver_t fte_weakstruct DSOUND_Capture;
|
||||
#endif
|
||||
snd_capture_driver_t fte_weakstruct OSS_Capture;
|
||||
snd_capture_driver_t fte_weakstruct SDL_Capture;
|
||||
|
||||
snd_capture_driver_t *capturedrivers[] =
|
||||
{
|
||||
#ifdef _WIN32
|
||||
&DSOUND_Capture,
|
||||
#endif
|
||||
&SDL_Capture,
|
||||
&OSS_Capture,
|
||||
#ifdef AVAIL_OPENAL
|
||||
|
@ -1822,12 +1833,12 @@ extern sounddriver_t XAUDIO2_Output;
|
|||
#ifdef AVAIL_DSOUND
|
||||
extern sounddriver_t DSOUND_Output;
|
||||
#endif
|
||||
sounddriver_t SDL_Output;
|
||||
sounddriver_t fte_weakstruct SDL_Output;
|
||||
#ifdef __linux__
|
||||
sounddriver_t ALSA_Output;
|
||||
sounddriver_t Pulse_Output;
|
||||
extern sounddriver_t ALSA_Output;
|
||||
extern sounddriver_t Pulse_Output;
|
||||
#endif
|
||||
sounddriver_t OSS_Output;
|
||||
sounddriver_t fte_weakstruct OSS_Output;
|
||||
#ifdef AVAIL_OPENAL
|
||||
extern sounddriver_t OPENAL_Output;
|
||||
#endif
|
||||
|
@ -1839,19 +1850,19 @@ extern sounddriver_t WaveOut_Output;
|
|||
#endif
|
||||
|
||||
#ifdef MACOSX
|
||||
sounddriver_t MacOS_AudioOutput; //prefered on mac
|
||||
sounddriver_t fte_weakstruct MacOS_AudioOutput; //prefered on mac
|
||||
#endif
|
||||
#ifdef ANDROID
|
||||
sounddriver_t OSL_Output; //general audio library, but android has all kinds of quirks.
|
||||
sounddriver_t Droid_AudioOutput;
|
||||
sounddriver_t fte_weakstruct OSL_Output; //general audio library, but android has all kinds of quirks.
|
||||
sounddriver_t fte_weakstruct Droid_AudioOutput;
|
||||
#endif
|
||||
#if defined(__MORPHOS__)
|
||||
sounddriver_t AHI_AudioOutput; //prefered on morphos
|
||||
sounddriver_t fte_weakstruct AHI_AudioOutput; //prefered on morphos
|
||||
#endif
|
||||
#ifdef NACL
|
||||
extern sounddriver_t PPAPI_AudioOutput; //nacl
|
||||
#endif
|
||||
sounddriver_t SNDIO_AudioOutput; //bsd
|
||||
sounddriver_t fte_weakstruct SNDIO_AudioOutput; //bsd
|
||||
|
||||
//in order of preference
|
||||
static sounddriver_t *outputdrivers[] =
|
||||
|
|
|
@ -69,7 +69,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
static int noconinput = 0;
|
||||
static int nostdout = 0;
|
||||
|
||||
int isPlugin;
|
||||
extern int isPlugin;
|
||||
int sys_parentleft;
|
||||
int sys_parenttop;
|
||||
int sys_parentwidth;
|
||||
|
|
|
@ -181,6 +181,7 @@ typedef struct galiasinfo_s
|
|||
unsigned int mappedbones;
|
||||
unsigned int nummorphs; //extra data after the xyz/norm/stvect arrays
|
||||
const float *(QDECL *AnimateMorphs)(const struct galiasinfo_s *surf, const framestate_t *framestate);
|
||||
int meshrootbone;
|
||||
|
||||
float *baseframeofs; /*non-heirachical*/
|
||||
int numbones;
|
||||
|
|
|
@ -50,7 +50,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#define BZ_Malloc malloc
|
||||
#define BZ_Free free
|
||||
#define Z_Free BZ_Free
|
||||
vec3_t vec3_origin;
|
||||
#define VectorCompare VectorComparestatic
|
||||
static int VectorCompare (const vec3_t v1, const vec3_t v2)
|
||||
{
|
||||
|
|
|
@ -26,13 +26,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#include <errno.h>
|
||||
|
||||
qboolean sys_nounload;
|
||||
#ifndef HAVE_CLIENT
|
||||
double host_frametime;
|
||||
double realtime; // without any filtering or bounding
|
||||
qboolean host_initialized; // true if into command execution (compatability)
|
||||
quakeparms_t host_parms;
|
||||
int host_hunklevel;
|
||||
#endif
|
||||
|
||||
|
||||
//by adding 'extern' to one definition of a function in a translation unit, then the definition in that TU is NOT considered an inline definition. meaning non-inlined references in other TUs can link to it instead of their own if needed.
|
||||
|
|
|
@ -3424,9 +3424,9 @@ void QCBUILTIN PF_findradius_list (pubprogfuncs_t *prinst, struct globalvars_s *
|
|||
{
|
||||
world_t *w = prinst->parms->user;
|
||||
wedict_t *ent;
|
||||
float rad;
|
||||
pvec_t rad;
|
||||
float *org;
|
||||
vec3_t eorg;
|
||||
pvec3_t eorg;
|
||||
int i, j;
|
||||
wedict_t **nearent;
|
||||
vec3_t mins, maxs;
|
||||
|
|
|
@ -3104,7 +3104,7 @@ void DecompileDecompileFunctions(const char *origcopyright)
|
|||
dfunction_t *d;
|
||||
pbool bogusname;
|
||||
vfile_t *f = NULL;
|
||||
char fname[512];
|
||||
char fname[1024];
|
||||
int lastglob = 1;
|
||||
int lastfileofs = 0;
|
||||
QCC_ddef_t *def;
|
||||
|
|
|
@ -691,6 +691,7 @@ func_t PDECL PR_FindFunc(pubprogfuncs_t *ppf, const char *funcname, progsnum_t p
|
|||
return *(int *)&ps->globals[var16->ofs];
|
||||
case PST_QTEST:
|
||||
case PST_FTE32:
|
||||
case PST_UHEXEN2:
|
||||
var32 = ED_FindTypeGlobalFromProgs32(progfuncs, ps, funcname, ev_function); //we must make sure we actually have a function def - 'light' is defined as a field before it is defined as a function.
|
||||
if (!var32)
|
||||
return (f - ps->functions) | (pnum << 24);
|
||||
|
@ -738,6 +739,7 @@ static void PDECL QC_FindPrefixedGlobals(pubprogfuncs_t *ppf, int pnum, char *pr
|
|||
break;
|
||||
case PST_QTEST:
|
||||
case PST_FTE32:
|
||||
case PST_UHEXEN2:
|
||||
for (i=1 ; i<pr_progstate[pnum].progs->numglobaldefs ; i++)
|
||||
{
|
||||
def32 = &pr_progstate[pnum].globaldefs32[i];
|
||||
|
@ -788,6 +790,7 @@ eval_t *PDECL PR_FindGlobal(pubprogfuncs_t *ppf, const char *globname, progsnum_
|
|||
return (eval_t *)&cp->globals[var16->ofs];
|
||||
case PST_QTEST:
|
||||
case PST_FTE32:
|
||||
case PST_UHEXEN2:
|
||||
if (!(var32 = ED_FindGlobalFromProgs32(progfuncs, cp, globname)))
|
||||
return NULL;
|
||||
|
||||
|
|
|
@ -586,6 +586,8 @@ typedef struct
|
|||
#define PROG_EXTENDEDVERSION 7
|
||||
#define PROG_SECONDARYVERSION16 ((('1'<<0)|('F'<<8)|('T'<<16)|('E'<<24))^(('P'<<0)|('R'<<8)|('O'<<16)|('G'<<24))) //something unlikly and still meaningful (to me)
|
||||
#define PROG_SECONDARYVERSION32 ((('1'<<0)|('F'<<8)|('T'<<16)|('E'<<24))^(('3'<<0)|('2'<<8)|('B'<<16)|(' '<<24))) //something unlikly and still meaningful (to me)
|
||||
#define PROG_SECONDARYUHEXEN2 ((('U'<<0)|('H'<<8)|('2'<<16)|('7'<<24))) //something unlikly and still meaningful (to me)
|
||||
#define PROG_SECONDARYKKQWSV ((('K'<<0)|('K'<<8)|('Q'<<16)|('W'<<24))) //something unlikly and still meaningful (to me)
|
||||
typedef struct
|
||||
{
|
||||
int version;
|
||||
|
|
|
@ -355,10 +355,12 @@ unsigned int ED_FindGlobalOfs (progfuncs_t *progfuncs, char *name)
|
|||
return d16?d16->ofs:0;
|
||||
case PST_QTEST:
|
||||
case PST_FTE32:
|
||||
case PST_UHEXEN2:
|
||||
d32 = ED_FindGlobal32(progfuncs, name);
|
||||
return d32?d32->ofs:0;
|
||||
default:
|
||||
externs->Sys_Error("ED_FindGlobalOfs - bad struct type");
|
||||
}
|
||||
externs->Sys_Error("ED_FindGlobalOfs - bad struct type");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -452,12 +454,14 @@ unsigned int *ED_FindGlobalOfsFromProgs (progfuncs_t *progfuncs, progstate_t *ps
|
|||
return &pos;
|
||||
case PST_QTEST:
|
||||
case PST_FTE32:
|
||||
case PST_UHEXEN2:
|
||||
def32 = ED_FindTypeGlobalFromProgs32(progfuncs, ps, name, type);
|
||||
if (!def32)
|
||||
return NULL;
|
||||
return &def32->ofs;
|
||||
default:
|
||||
externs->Sys_Error("ED_FindGlobalOfsFromProgs - bad struct type");
|
||||
}
|
||||
externs->Sys_Error("ED_FindGlobalOfsFromProgs - bad struct type");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -914,6 +918,7 @@ char *PR_GlobalString (progfuncs_t *progfuncs, int ofs, struct QCC_type_s **type
|
|||
break;
|
||||
case PST_QTEST:
|
||||
case PST_FTE32:
|
||||
case PST_UHEXEN2:
|
||||
def32 = ED_GlobalAtOfs32(progfuncs, ofs);
|
||||
break;
|
||||
default:
|
||||
|
@ -974,6 +979,7 @@ char *PR_GlobalStringNoContents (progfuncs_t *progfuncs, int ofs)
|
|||
break;
|
||||
case PST_QTEST:
|
||||
case PST_FTE32:
|
||||
case PST_UHEXEN2:
|
||||
def32 = ED_GlobalAtOfs32(progfuncs, ofs);
|
||||
if (def32)
|
||||
nameofs = def32->s_name;
|
||||
|
@ -1591,6 +1597,7 @@ char *ED_WriteGlobals(progfuncs_t *progfuncs, char *buf, size_t *bufofs, size_t
|
|||
break;
|
||||
case PST_QTEST:
|
||||
case PST_FTE32:
|
||||
case PST_UHEXEN2:
|
||||
for (i=0 ; i<pr_progs->numglobaldefs ; i++)
|
||||
{
|
||||
size_t nlen;
|
||||
|
@ -2162,6 +2169,7 @@ int PDECL PR_LoadEnts(pubprogfuncs_t *ppf, const char *file, void *ctx, void (PD
|
|||
break;
|
||||
case PST_QTEST:
|
||||
case PST_FTE32:
|
||||
case PST_UHEXEN2:
|
||||
if (!(d32 = ED_FindGlobal32(progfuncs, qcc_token)))
|
||||
{
|
||||
externs->Printf("global value %s not found\n", qcc_token);
|
||||
|
@ -2277,6 +2285,7 @@ int PDECL PR_LoadEnts(pubprogfuncs_t *ppf, const char *file, void *ctx, void (PD
|
|||
break;
|
||||
case PST_QTEST:
|
||||
case PST_FTE32:
|
||||
case PST_UHEXEN2:
|
||||
if (!(d32 = ED_FindGlobal32(progfuncs, qcc_token)))
|
||||
{
|
||||
externs->Printf("global value %s not found\n", qcc_token);
|
||||
|
@ -2722,8 +2731,21 @@ retry:
|
|||
// externs->Printf("Opening 32bit fte progs file \"%s\"\n", filename);
|
||||
current_progstate->structtype = PST_FTE32;
|
||||
}
|
||||
else if (pr_progs->secondaryversion == PROG_SECONDARYUHEXEN2)
|
||||
{
|
||||
// externs->Printf("Opening uhexen2 progs file \"%s\"\n", filename);
|
||||
current_progstate->structtype = PST_UHEXEN2;
|
||||
pr_progs->version = PROG_VERSION; //not fte.
|
||||
}
|
||||
else if (pr_progs->secondaryversion == PROG_SECONDARYKKQWSV)
|
||||
{
|
||||
// externs->Printf("Opening KK7 progs file \"%s\"\n", filename);
|
||||
current_progstate->structtype = PST_KKQWSV; //KK progs. Yuck. Disabling saving would be a VERY good idea.
|
||||
pr_progs->version = PROG_VERSION; //not fte.
|
||||
}
|
||||
else
|
||||
{
|
||||
externs->Printf ("%s has no v7 verification code, assuming kkqwsv format\n", filename);
|
||||
// externs->Printf("Opening KK7 progs file \"%s\"\n", filename);
|
||||
current_progstate->structtype = PST_KKQWSV; //KK progs. Yuck. Disabling saving would be a VERY good idea.
|
||||
pr_progs->version = PROG_VERSION; //not fte.
|
||||
|
@ -2806,6 +2828,7 @@ retry:
|
|||
len=sizeof(dstatement16_t)*pr_progs->numstatements;
|
||||
break;
|
||||
case PST_FTE32:
|
||||
case PST_UHEXEN2:
|
||||
len=sizeof(dstatement32_t)*pr_progs->numstatements;
|
||||
break;
|
||||
default:
|
||||
|
@ -2825,6 +2848,7 @@ retry:
|
|||
len=sizeof(ddef16_t)*pr_progs->numglobaldefs;
|
||||
break;
|
||||
case PST_FTE32:
|
||||
case PST_UHEXEN2:
|
||||
len=sizeof(ddef32_t)*pr_progs->numglobaldefs;
|
||||
break;
|
||||
default:
|
||||
|
@ -2844,6 +2868,7 @@ retry:
|
|||
len=sizeof(ddef16_t)*pr_progs->numglobaldefs;
|
||||
break;
|
||||
case PST_FTE32:
|
||||
case PST_UHEXEN2:
|
||||
len=sizeof(ddef32_t)*pr_progs->numglobaldefs;
|
||||
break;
|
||||
default:
|
||||
|
@ -2988,6 +3013,7 @@ retry:
|
|||
case PST_KKQWSV:
|
||||
case PST_DEFAULT:
|
||||
case PST_FTE32:
|
||||
case PST_UHEXEN2:
|
||||
pr_cp_functions = PRHunkAlloc(progfuncs, sizeof(*pr_cp_functions)*pr_progs->numfunctions, "mfunctions");
|
||||
for (i=0,fnc2=pr_cp_functions; i<pr_progs->numfunctions; i++, fnc2++)
|
||||
{
|
||||
|
@ -3166,6 +3192,49 @@ retry:
|
|||
QC_RegisterFieldVar(&progfuncs->funcs, type, pr_fielddefs32[i].s_name+pr_strings-stringadjust, -1, pr_fielddefs32[i].ofs);
|
||||
}
|
||||
break;
|
||||
case PST_UHEXEN2:
|
||||
for (i=0 ; i<pr_progs->numglobaldefs ; i++)
|
||||
{
|
||||
pr_globaldefs32[i].type = (unsigned int)PRLittleLong (pr_globaldefs32[i].type)>>16;
|
||||
#ifndef NOENDIAN
|
||||
pr_globaldefs32[i].ofs = PRLittleLong (pr_globaldefs32[i].ofs);
|
||||
pr_globaldefs32[i].s_name = (string_t)PRLittleLong ((long)pr_globaldefs32[i].s_name);
|
||||
#endif
|
||||
pr_globaldefs32[i].s_name += stringadjust;
|
||||
}
|
||||
|
||||
for (i=0 ; i<pr_progs->numfielddefs ; i++)
|
||||
{
|
||||
pr_fielddefs32[i].type = (unsigned int)PRLittleLong (pr_fielddefs32[i].type)>>16;
|
||||
#ifndef NOENDIAN
|
||||
pr_fielddefs32[i].ofs = PRLittleLong (pr_fielddefs32[i].ofs);
|
||||
pr_fielddefs32[i].s_name = (string_t)PRLittleLong ((long)pr_fielddefs32[i].s_name);
|
||||
#endif
|
||||
|
||||
if (reorg)
|
||||
{
|
||||
if (pr_types)
|
||||
type = pr_types[pr_fielddefs32[i].type & ~(DEF_SHARED|DEF_SAVEGLOBAL)].type;
|
||||
else
|
||||
type = pr_fielddefs32[i].type & ~(DEF_SHARED|DEF_SAVEGLOBAL);
|
||||
if (progfuncs->funcs.fieldadjust && !prinst.pr_typecurrent) //we need to make sure all fields appear in their original place.
|
||||
QC_RegisterFieldVar(&progfuncs->funcs, type, pr_fielddefs32[i].s_name+pr_strings, 4*(pr_fielddefs32[i].ofs+progfuncs->funcs.fieldadjust), -1);
|
||||
else if (type == ev_vector)
|
||||
QC_RegisterFieldVar(&progfuncs->funcs, type, pr_fielddefs32[i].s_name+pr_strings, -1, pr_fielddefs32[i].ofs);
|
||||
}
|
||||
pr_fielddefs32[i].s_name += stringadjust;
|
||||
}
|
||||
if (reorg && !(progfuncs->funcs.fieldadjust && !prinst.pr_typecurrent))
|
||||
for (i=0 ; i<pr_progs->numfielddefs ; i++)
|
||||
{
|
||||
if (pr_types)
|
||||
type = pr_types[pr_fielddefs32[i].type & ~(DEF_SHARED|DEF_SAVEGLOBAL)].type;
|
||||
else
|
||||
type = pr_fielddefs32[i].type & ~(DEF_SHARED|DEF_SAVEGLOBAL);
|
||||
if (type != ev_vector)
|
||||
QC_RegisterFieldVar(&progfuncs->funcs, type, pr_fielddefs32[i].s_name+pr_strings-stringadjust, -1, pr_fielddefs32[i].ofs);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
externs->Sys_Error("Bad struct type");
|
||||
}
|
||||
|
@ -3209,6 +3278,19 @@ retry:
|
|||
PR_CleanUpStatements16(progfuncs, st16, hexencalling);
|
||||
break;
|
||||
|
||||
case PST_UHEXEN2:
|
||||
hexencalling = true;
|
||||
for (i=0 ; i<pr_progs->numstatements ; i++)
|
||||
{
|
||||
pr_statements32[i].op = (unsigned int)PRLittleLong(pr_statements32[i].op)>>16;
|
||||
#ifndef NOENDIAN
|
||||
pr_statements32[i].a = PRLittleLong(pr_statements32[i].a);
|
||||
pr_statements32[i].b = PRLittleLong(pr_statements32[i].b);
|
||||
pr_statements32[i].c = PRLittleLong(pr_statements32[i].c);
|
||||
#endif
|
||||
}
|
||||
PR_CleanUpStatements32(progfuncs, pr_statements32, hexencalling);
|
||||
break;
|
||||
case PST_KKQWSV:
|
||||
case PST_FTE32:
|
||||
for (i=0 ; i<pr_progs->numstatements ; i++)
|
||||
|
@ -3319,6 +3401,7 @@ retry:
|
|||
case PST_QTEST: //not likely to need this
|
||||
case PST_KKQWSV: //fixme...
|
||||
case PST_FTE32: //fingers crossed...
|
||||
case PST_UHEXEN2:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -3375,6 +3458,7 @@ retry:
|
|||
break;
|
||||
case PST_QTEST:
|
||||
case PST_FTE32:
|
||||
case PST_UHEXEN2:
|
||||
for (i=0 ; i<pr_progs->numglobaldefs ; i++)
|
||||
{
|
||||
if (pr_types)
|
||||
|
@ -3485,6 +3569,7 @@ retry:
|
|||
case PST_QTEST:
|
||||
case PST_KKQWSV:
|
||||
break; //cannot happen anyway.
|
||||
case PST_UHEXEN2:
|
||||
case PST_FTE32:
|
||||
if (pr_progs->version == PROG_EXTENDEDVERSION && pr_progs->numbodylessfuncs)
|
||||
{
|
||||
|
|
|
@ -1197,6 +1197,7 @@ int PDECL PR_ToggleBreakpoint(pubprogfuncs_t *ppf, const char *filename, int lin
|
|||
break;
|
||||
case PST_KKQWSV:
|
||||
case PST_FTE32:
|
||||
case PST_UHEXEN2:
|
||||
op = ((dstatement32_t*)cp->statements + i)->op;
|
||||
break;
|
||||
default:
|
||||
|
@ -1239,6 +1240,7 @@ int PDECL PR_ToggleBreakpoint(pubprogfuncs_t *ppf, const char *filename, int lin
|
|||
break;
|
||||
case PST_KKQWSV:
|
||||
case PST_FTE32:
|
||||
case PST_UHEXEN2:
|
||||
((dstatement32_t*)cp->statements + i)->op = op;
|
||||
break;
|
||||
default:
|
||||
|
@ -1271,6 +1273,7 @@ int PDECL PR_ToggleBreakpoint(pubprogfuncs_t *ppf, const char *filename, int lin
|
|||
break;
|
||||
case PST_KKQWSV:
|
||||
case PST_FTE32:
|
||||
case PST_UHEXEN2:
|
||||
op = ((dstatement32_t*)cp->statements + i)->op;
|
||||
break;
|
||||
default:
|
||||
|
@ -1312,6 +1315,7 @@ int PDECL PR_ToggleBreakpoint(pubprogfuncs_t *ppf, const char *filename, int lin
|
|||
break;
|
||||
case PST_KKQWSV:
|
||||
case PST_FTE32:
|
||||
case PST_UHEXEN2:
|
||||
((dstatement32_t*)cp->statements + i)->op = op;
|
||||
break;
|
||||
default:
|
||||
|
@ -1381,6 +1385,7 @@ static const char *lastfile = NULL;
|
|||
{
|
||||
switch(pr_progstate[pn].structtype)
|
||||
{
|
||||
case PST_UHEXEN2:
|
||||
case PST_FTE32:
|
||||
case PST_KKQWSV:
|
||||
{
|
||||
|
@ -1781,6 +1786,7 @@ static void PR_ExecuteCode (progfuncs_t *progfuncs, int s)
|
|||
continue;
|
||||
case PST_KKQWSV:
|
||||
case PST_FTE32:
|
||||
case PST_UHEXEN2:
|
||||
s = PR_ExecuteCode32(progfuncs, s, &runaway);
|
||||
if (s == -1)
|
||||
return;
|
||||
|
|
|
@ -475,6 +475,7 @@ void PDECL QC_AddSharedFieldVar(pubprogfuncs_t *ppf, int num, char *stringtable)
|
|||
return;
|
||||
case PST_FTE32:
|
||||
case PST_QTEST:
|
||||
case PST_UHEXEN2:
|
||||
{
|
||||
ddef32_t *gd = pr_globaldefs32;
|
||||
ddef32_t *fld = pr_fielddefs32;
|
||||
|
|
|
@ -327,6 +327,7 @@ typedef enum
|
|||
PST_FTE32, //everything 32bit
|
||||
PST_KKQWSV, //32bit statements, 16bit globaldefs. NO SAVED GAMES.
|
||||
PST_QTEST, //16bit statements, 32bit globaldefs(other differences converted on load)
|
||||
PST_UHEXEN2,//everything 32bit like fte's without a header, but with pre-padding rather than post-extended (little-endian) types.
|
||||
} progstructtype_t;
|
||||
|
||||
#ifndef COMPILER
|
||||
|
|
|
@ -84,7 +84,7 @@ extern int MAX_CONSTANTS;
|
|||
#define MAXCONSTANTPARAMLENGTH 32
|
||||
#define MAXCONSTANTPARAMS 32
|
||||
|
||||
typedef enum {QCF_STANDARD, QCF_HEXEN2, QCF_DARKPLACES, QCF_FTE, QCF_FTEDEBUG, QCF_FTEH2, QCF_KK7, QCF_QTEST} qcc_targetformat_t;
|
||||
typedef enum {QCF_STANDARD, QCF_HEXEN2, QCF_UHEXEN2, QCF_DARKPLACES, QCF_FTE, QCF_FTEDEBUG, QCF_FTEH2, QCF_KK7, QCF_QTEST} qcc_targetformat_t;
|
||||
extern qcc_targetformat_t qcc_targetformat;
|
||||
void QCC_OPCodeSetTarget(qcc_targetformat_t targfmt);
|
||||
|
||||
|
|
|
@ -1179,6 +1179,7 @@ static pbool QCC_OPCodeValidForTarget(qcc_targetformat_t targfmt, QCC_opcode_t *
|
|||
if (num < OP_MULSTORE_F)
|
||||
return true;
|
||||
return false;
|
||||
case QCF_UHEXEN2:
|
||||
case QCF_HEXEN2:
|
||||
if (num >= OP_SWITCH_V && num <= OP_SWITCH_FNC) //these were assigned numbers but were never actually implemtented in standard h2.
|
||||
return false;
|
||||
|
@ -6270,7 +6271,7 @@ static QCC_sref_t QCC_PR_ParseFunctionCall (QCC_ref_t *funcref) //warning, the f
|
|||
|
||||
if (QCC_OPCodeValid(&pr_opcodes[OP_RAND0]))
|
||||
{
|
||||
if(qcc_targetformat != QCF_HEXEN2)
|
||||
if(qcc_targetformat != QCF_HEXEN2 && qcc_targetformat != QCF_UHEXEN2)
|
||||
out = QCC_GetTemp(type_float);
|
||||
else
|
||||
{ //hexen2 requires the output be def_ret
|
||||
|
@ -6341,7 +6342,7 @@ static QCC_sref_t QCC_PR_ParseFunctionCall (QCC_ref_t *funcref) //warning, the f
|
|||
|
||||
if (QCC_OPCodeValid(&pr_opcodes[OP_RANDV0]))
|
||||
{
|
||||
if(qcc_targetformat != QCF_HEXEN2)
|
||||
if(qcc_targetformat != QCF_HEXEN2 && qcc_targetformat != QCF_UHEXEN2)
|
||||
out = QCC_GetTemp(type_vector);
|
||||
else
|
||||
{ //hexen2 requires the output be def_ret
|
||||
|
@ -11218,7 +11219,7 @@ void QCC_PR_ParseStatement (void)
|
|||
QCC_PR_ParseWarning (WARN_FTE_SPECIFIC, "if !() is specific to fteqcc");
|
||||
negate = 2;
|
||||
}
|
||||
else if (negate && qcc_targetformat != QCF_HEXEN2 && qcc_targetformat != QCF_FTEH2)
|
||||
else if (negate && qcc_targetformat != QCF_HEXEN2 && qcc_targetformat != QCF_UHEXEN2 && qcc_targetformat != QCF_FTEH2)
|
||||
QCC_PR_ParseWarning (WARN_FTE_SPECIFIC, "if not() is specific to fteqcc or hexen2");
|
||||
|
||||
QCC_PR_Expect ("(");
|
||||
|
@ -13941,7 +13942,7 @@ QCC_def_t *QCC_PR_DummyDef(QCC_type_t *type, const char *name, QCC_function_t *s
|
|||
KEYWORD(continue);
|
||||
KEYWORD(state);
|
||||
KEYWORD(string);
|
||||
if (qcc_targetformat != QCF_HEXEN2)
|
||||
if (qcc_targetformat != QCF_HEXEN2 && qcc_targetformat != QCF_UHEXEN2)
|
||||
KEYWORD(float); //hmm... hexen2 requires this...
|
||||
KEYWORD(entity);
|
||||
KEYWORD(vector);
|
||||
|
|
|
@ -1327,6 +1327,8 @@ static pbool QCC_PR_Precompiler(void)
|
|||
QCC_COM_Parse(msg);
|
||||
if (!QC_strcasecmp(qcc_token, "H2") || !QC_strcasecmp(qcc_token, "HEXEN2"))
|
||||
newtype = QCF_HEXEN2;
|
||||
else if (!QC_strcasecmp(qcc_token, "UHEXEN2"))
|
||||
newtype = QCF_UHEXEN2;
|
||||
else if (!QC_strcasecmp(qcc_token, "KK7"))
|
||||
newtype = QCF_KK7;
|
||||
else if (!QC_strcasecmp(qcc_token, "DP") || !QC_strcasecmp(qcc_token, "DARKPLACES"))
|
||||
|
@ -1351,9 +1353,9 @@ static pbool QCC_PR_Precompiler(void)
|
|||
|
||||
if (numstatements > 1)
|
||||
{
|
||||
if ((qcc_targetformat == QCF_HEXEN2 || qcc_targetformat == QCF_FTEH2) && (newtype != QCF_HEXEN2 && newtype != QCF_FTEH2))
|
||||
if ((qcc_targetformat == QCF_HEXEN2 || qcc_targetformat == QCF_UHEXEN2 || qcc_targetformat == QCF_FTEH2) && (newtype != QCF_HEXEN2 && newtype != QCF_UHEXEN2 && newtype != QCF_FTEH2))
|
||||
QCC_PR_ParseWarning(WARN_BADTARGET, "Cannot switch from hexen2 target \'%s\' after the first statement. Ignored.", msg);
|
||||
if ((newtype == QCF_HEXEN2 || newtype == QCF_FTEH2) && (qcc_targetformat != QCF_HEXEN2 && qcc_targetformat != QCF_FTEH2))
|
||||
if ((newtype == QCF_HEXEN2 || newtype == QCF_UHEXEN2 || newtype == QCF_FTEH2) && (qcc_targetformat != QCF_HEXEN2 && qcc_targetformat != QCF_UHEXEN2 && qcc_targetformat != QCF_FTEH2))
|
||||
QCC_PR_ParseWarning(WARN_BADTARGET, "Cannot switch to hexen2 target \'%s\' after the first statement. Ignored.", msg);
|
||||
}
|
||||
|
||||
|
|
|
@ -36,7 +36,6 @@ vfile_t *qcc_vfiles;
|
|||
extern QCC_def_t *sourcefilesdefs[];
|
||||
extern int sourcefilesnumdefs;
|
||||
|
||||
int qccpersisthunk = 1;
|
||||
int Grep(const char *filename, const char *string)
|
||||
{
|
||||
int foundcount = 0;
|
||||
|
@ -507,6 +506,7 @@ int GUI_ParseCommandLine(const char *args, pbool keepsrcanddir)
|
|||
int l, p;
|
||||
const char *next;
|
||||
int mode = 0;
|
||||
extern int qccpersisthunk;
|
||||
|
||||
if (!*args)
|
||||
{
|
||||
|
@ -848,6 +848,8 @@ int GUI_ParseCommandLine(const char *args, pbool keepsrcanddir)
|
|||
parameters[paramlen-1] = '\0';
|
||||
else
|
||||
*parameters = '\0';
|
||||
|
||||
qccpersisthunk = (mode!=1);
|
||||
return mode;
|
||||
}
|
||||
|
||||
|
|
|
@ -409,6 +409,7 @@ struct {
|
|||
{QCF_STANDARD, "quakec"},
|
||||
{QCF_HEXEN2, "hexen2"},
|
||||
{QCF_HEXEN2, "h2"},
|
||||
{QCF_UHEXEN2, "uhexen2"},
|
||||
{QCF_KK7, "kkqwsv"},
|
||||
{QCF_KK7, "kk7"},
|
||||
{QCF_KK7, "bigprogs"},
|
||||
|
@ -1443,8 +1444,16 @@ static pbool QCC_WriteData (int crc)
|
|||
}
|
||||
else if (numpr_globals > 65530)
|
||||
{
|
||||
externs->Printf("Forcing target to FTE32 due to numpr_globals\n");
|
||||
outputsttype = PST_FTE32;
|
||||
if (qcc_targetformat == QCF_HEXEN2)
|
||||
{
|
||||
externs->Printf("Forcing target to uHexen2 due to numpr_globals\n");
|
||||
outputsttype = PST_UHEXEN2;
|
||||
}
|
||||
else
|
||||
{
|
||||
externs->Printf("Forcing target to FTE32 due to numpr_globals\n");
|
||||
outputsttype = PST_FTE32;
|
||||
}
|
||||
}
|
||||
else if (qcc_targetformat == QCF_FTEH2)
|
||||
{
|
||||
|
@ -1473,7 +1482,7 @@ static pbool QCC_WriteData (int crc)
|
|||
if (qcc_targetformat == QCF_FTEDEBUG)
|
||||
debugtarget = true;
|
||||
|
||||
if (outputsttype != PST_FTE32)
|
||||
if (outputsttype != PST_FTE32 && outputsttype != PST_UHEXEN2)
|
||||
{
|
||||
if (bigjumps)
|
||||
{
|
||||
|
@ -1513,10 +1522,20 @@ static pbool QCC_WriteData (int crc)
|
|||
{
|
||||
if (qcc_targetformat == QCF_DARKPLACES)
|
||||
externs->Printf("DarkPlaces or FTE will be required\n");
|
||||
else if (outputsttype == PST_UHEXEN2)
|
||||
externs->Printf("FTE or uHexen2 will be required\n");
|
||||
else
|
||||
externs->Printf("FTE's QCLib will be required\n");
|
||||
}
|
||||
break;
|
||||
case QCF_UHEXEN2:
|
||||
debugtarget = false;
|
||||
outputsttype = PST_UHEXEN2;
|
||||
if (verbose)
|
||||
externs->Printf("uHexen2 will be required\n");
|
||||
if (numpr_globals < 65535)
|
||||
externs->Printf("Warning: outputting 32 uHexen2 format when 16bit would suffice\n");
|
||||
break;
|
||||
case QCF_KK7:
|
||||
if (bodylessfuncs)
|
||||
externs->Printf("Warning: There are some functions without bodies.\n");
|
||||
|
@ -1565,6 +1584,7 @@ static pbool QCC_WriteData (int crc)
|
|||
funcdatasize = numfunctions*sizeof(*funcs);
|
||||
}
|
||||
break;
|
||||
case PST_UHEXEN2:
|
||||
case PST_DEFAULT:
|
||||
case PST_KKQWSV:
|
||||
case PST_FTE32:
|
||||
|
@ -2017,7 +2037,7 @@ strofs = (strofs+3)&~3;
|
|||
progs.ofs_statements = SafeSeek (h, 0, SEEK_CUR);
|
||||
progs.numstatements = numstatements;
|
||||
|
||||
if (qcc_targetformat == QCF_HEXEN2 || qcc_targetformat == QCF_FTEH2)
|
||||
if (qcc_targetformat == QCF_HEXEN2 || qcc_targetformat == QCF_UHEXEN2 || qcc_targetformat == QCF_FTEH2)
|
||||
{
|
||||
for (i=0 ; i<numstatements ; i++)
|
||||
{
|
||||
|
@ -2040,6 +2060,23 @@ strofs = (strofs+3)&~3;
|
|||
|
||||
switch(outputsttype)
|
||||
{
|
||||
case PST_UHEXEN2:
|
||||
{
|
||||
QCC_dstatement32_t *statements32 = qccHunkAlloc(sizeof(*statements32) * numstatements);
|
||||
for (i=0 ; i<numstatements ; i++)
|
||||
{
|
||||
statements32[i].op = PRLittleLong(statements[i].op<<16);
|
||||
statements32[i].a = PRLittleLong((statements[i].a.sym?statements[i].a.sym->ofs:0) + statements[i].a.ofs);
|
||||
statements32[i].b = PRLittleLong((statements[i].b.sym?statements[i].b.sym->ofs:0) + statements[i].b.ofs);
|
||||
statements32[i].c = PRLittleLong((statements[i].c.sym?statements[i].c.sym->ofs:0) + statements[i].c.ofs);
|
||||
|
||||
if (verbose >= VERBOSE_DEBUGSTATEMENTS)
|
||||
externs->Printf("code: %s:%i: @%i %s %i %i %i\n", QCC_FileForStatement(i), statements[i].linenum, i, pr_opcodes[statements[i].op].name, statements32[i].a, statements32[i].b, statements32[i].c);
|
||||
}
|
||||
|
||||
SafeWrite (h, statements32, numstatements*sizeof(QCC_dstatement32_t));
|
||||
}
|
||||
break;
|
||||
case PST_KKQWSV:
|
||||
case PST_FTE32:
|
||||
{
|
||||
|
@ -2227,6 +2264,52 @@ strofs = (strofs+3)&~3;
|
|||
fields[i].s_name = PRLittleLong (fields[i].s_name);
|
||||
}
|
||||
|
||||
if (progs.blockscompressed&4)
|
||||
{
|
||||
SafeWrite (h, &len, sizeof(int)); //save for later
|
||||
len = QC_encode(progfuncs, numfielddefs*sizeof(QCC_ddef_t), 2, (char *)fields, h); //write
|
||||
i = SafeSeek (h, 0, SEEK_CUR);
|
||||
SafeSeek(h, progs.ofs_fielddefs, SEEK_SET);//seek back
|
||||
len = PRLittleLong(len);
|
||||
SafeWrite (h, &len, sizeof(int)); //write size.
|
||||
SafeSeek(h, i, SEEK_SET);
|
||||
}
|
||||
else
|
||||
SafeWrite (h, fields, numfielddefs*sizeof(QCC_ddef_t));
|
||||
break;
|
||||
case PST_UHEXEN2:
|
||||
progs.ofs_globaldefs = SafeSeek (h, 0, SEEK_CUR);
|
||||
progs.numglobaldefs = numglobaldefs;
|
||||
for (i=0 ; i<numglobaldefs ; i++)
|
||||
{
|
||||
qcc_globals[i].type = PRLittleLong (qcc_globals[i].type<<16);
|
||||
qcc_globals[i].ofs = PRLittleLong (qcc_globals[i].ofs);
|
||||
qcc_globals[i].s_name = PRLittleLong (qcc_globals[i].s_name);
|
||||
}
|
||||
|
||||
if (progs.blockscompressed&2)
|
||||
{
|
||||
SafeWrite (h, &len, sizeof(int)); //save for later
|
||||
len = QC_encode(progfuncs, numglobaldefs*sizeof(QCC_ddef_t), 2, (char *)qcc_globals, h); //write
|
||||
i = SafeSeek (h, 0, SEEK_CUR);
|
||||
SafeSeek(h, progs.ofs_globaldefs, SEEK_SET);//seek back
|
||||
len = PRLittleLong(len);
|
||||
SafeWrite (h, &len, sizeof(int)); //write size.
|
||||
SafeSeek(h, i, SEEK_SET);
|
||||
}
|
||||
else
|
||||
SafeWrite (h, qcc_globals, numglobaldefs*sizeof(QCC_ddef_t));
|
||||
|
||||
progs.ofs_fielddefs = SafeSeek (h, 0, SEEK_CUR);
|
||||
progs.numfielddefs = numfielddefs;
|
||||
|
||||
for (i=0 ; i<numfielddefs ; i++)
|
||||
{
|
||||
fields[i].type = PRLittleLong/*PRLittleShort*/ (fields[i].type<<16);
|
||||
fields[i].ofs = PRLittleLong/*PRLittleShort*/ (fields[i].ofs);
|
||||
fields[i].s_name = PRLittleLong (fields[i].s_name);
|
||||
}
|
||||
|
||||
if (progs.blockscompressed&4)
|
||||
{
|
||||
SafeWrite (h, &len, sizeof(int)); //save for later
|
||||
|
@ -2347,10 +2430,6 @@ strofs = (strofs+3)&~3;
|
|||
progs.version = PROG_QTESTVERSION;
|
||||
progs.ofsfiles = WriteSourceFiles(qcc_sourcefile, h, debugtarget, false);
|
||||
break;
|
||||
case QCF_KK7:
|
||||
progs.version = PROG_KKQWSVVERSION;
|
||||
progs.ofsfiles = WriteSourceFiles(qcc_sourcefile, h, debugtarget, false);
|
||||
break;
|
||||
default:
|
||||
case QCF_STANDARD:
|
||||
case QCF_HEXEN2: //urgh
|
||||
|
@ -2361,10 +2440,16 @@ strofs = (strofs+3)&~3;
|
|||
case QCF_FTE:
|
||||
case QCF_FTEH2:
|
||||
case QCF_FTEDEBUG:
|
||||
case QCF_UHEXEN2:
|
||||
case QCF_KK7:
|
||||
progs.version = PROG_EXTENDEDVERSION;
|
||||
|
||||
if (outputsttype == PST_FTE32)
|
||||
progs.secondaryversion = PROG_SECONDARYVERSION32;
|
||||
if (outputsttype == PST_UHEXEN2)
|
||||
progs.secondaryversion = PROG_SECONDARYUHEXEN2; //prepadded...
|
||||
else if (outputsttype == QCF_KK7)
|
||||
progs.secondaryversion = PROG_SECONDARYKKQWSV; //messed up
|
||||
else if (outputsttype == PST_FTE32)
|
||||
progs.secondaryversion = PROG_SECONDARYVERSION32; //post-extended.
|
||||
else
|
||||
progs.secondaryversion = PROG_SECONDARYVERSION16;
|
||||
|
||||
|
@ -2487,7 +2572,11 @@ strofs = (strofs+3)&~3;
|
|||
externs->Printf("Compile finished: %s (id format)\n", destfile);
|
||||
break;
|
||||
case QCF_HEXEN2:
|
||||
externs->Printf("Compile finished: %s (hexen2 format)\n", destfile);
|
||||
case QCF_UHEXEN2:
|
||||
if (progs.version == PROG_VERSION)
|
||||
externs->Printf("Compile finished: %s (hexen2 format)\n", destfile);
|
||||
else
|
||||
externs->Printf("Compile finished: %s (uhexen2 format)\n", destfile);
|
||||
break;
|
||||
case QCF_DARKPLACES:
|
||||
externs->Printf("Compile finished: %s (patched-dp format)\n", destfile);
|
||||
|
@ -3413,7 +3502,7 @@ static unsigned short QCC_PR_WriteProgdefs (char *filename)
|
|||
// print global vars until the first field is defined
|
||||
|
||||
ADD_CRC("\n/* ");
|
||||
if (qcc_targetformat == QCF_HEXEN2 || qcc_targetformat == QCF_FTEH2)
|
||||
if (qcc_targetformat == QCF_HEXEN2 || qcc_targetformat == QCF_UHEXEN2 || qcc_targetformat == QCF_FTEH2)
|
||||
EAT_CRC("generated by hcc, do not modify");
|
||||
else
|
||||
EAT_CRC("file generated by qcc, do not modify");
|
||||
|
@ -4485,7 +4574,7 @@ static void QCC_SetDefaultProperties (void)
|
|||
{
|
||||
qcc_targetformat_t targ;
|
||||
if (QCC_CheckParm ("-h2"))
|
||||
targ = QCF_HEXEN2;
|
||||
targ = QCF_HEXEN2;
|
||||
else if (QCC_CheckParm ("-fte"))
|
||||
targ = QCF_FTE;
|
||||
else if (QCC_CheckParm ("-fteh2"))
|
||||
|
@ -4521,7 +4610,7 @@ static void QCC_SetDefaultProperties (void)
|
|||
qccwarningaction[WARN_IDENTICALPRECOMPILER] = WA_IGNORE;
|
||||
qccwarningaction[WARN_DENORMAL] = WA_ERROR; //DAZ provides a speedup on modern machines, so any engine compiled for sse2+ will have problems with denormals, so make their use look serious.
|
||||
|
||||
if (qcc_targetformat == QCF_HEXEN2 || qcc_targetformat == QCF_FTEH2)
|
||||
if (qcc_targetformat == QCF_HEXEN2 || qcc_targetformat == QCF_UHEXEN2 || qcc_targetformat == QCF_FTEH2)
|
||||
qccwarningaction[WARN_CASEINSENSITIVEFRAMEMACRO] = WA_IGNORE; //hexenc consides these fair game.
|
||||
|
||||
if (QCC_CheckParm ("-Fqccx"))
|
||||
|
@ -4534,7 +4623,7 @@ static void QCC_SetDefaultProperties (void)
|
|||
QCC_PR_CommandLinePrecompilerOptions();
|
||||
|
||||
|
||||
if (qcc_targetformat == QCF_HEXEN2 || qcc_targetformat == QCF_FTEH2) //force on the thinktime keyword if hexen2 progs.
|
||||
if (qcc_targetformat == QCF_HEXEN2 || qcc_targetformat == QCF_UHEXEN2 || qcc_targetformat == QCF_FTEH2) //force on the thinktime keyword if hexen2 progs.
|
||||
{
|
||||
keyword_thinktime = true; //thinktime self : 0.1;
|
||||
keyword_until = true; //until(cond) {code}; or do{code}until(cond);
|
||||
|
|
|
@ -124,6 +124,7 @@ int main (int argc, const char **argv)
|
|||
#else
|
||||
pbool writelog = false; //other systems are sane.
|
||||
#endif
|
||||
int colours = 2; //auto
|
||||
progexterns_t ext;
|
||||
progfuncs_t funcs;
|
||||
progfuncs = &funcs;
|
||||
|
@ -136,8 +137,27 @@ int main (int argc, const char **argv)
|
|||
funcs.funcs.parms->Printf = logprintf;
|
||||
funcs.funcs.parms->Sys_Error = Sys_Error;
|
||||
|
||||
for (i = 0; i < argc; i++)
|
||||
{
|
||||
if (!argv[i])
|
||||
continue;
|
||||
if (!strcmp(argv[i], "-log"))
|
||||
writelog = true;
|
||||
else if (!strcmp(argv[i], "-nolog"))
|
||||
writelog = false;
|
||||
|
||||
//arg consistency with ls
|
||||
else if (!strcmp(argv[i], "--color=always") || !strcmp(argv[i], "--color"))
|
||||
colours = 1;
|
||||
else if (!strcmp(argv[i], "--color=never"))
|
||||
colours = 0;
|
||||
else if (!strcmp(argv[i], "--color=auto"))
|
||||
colours = 2;
|
||||
}
|
||||
#if defined(__linux__) || defined(__unix__)
|
||||
if (isatty(STDOUT_FILENO))
|
||||
if (colours == 2)
|
||||
colours = isatty(STDOUT_FILENO);
|
||||
if (colours)
|
||||
{ //only use colours if its a tty, and not if we're redirected.
|
||||
col_none = "\e[0;m"; //reset to white
|
||||
col_error = "\e[0;31m"; //red
|
||||
|
@ -148,17 +168,10 @@ int main (int argc, const char **argv)
|
|||
//col_ = "\e[0;36m"; //cyan
|
||||
col_location = "\e[0;1;37m"; //bright white
|
||||
}
|
||||
#else
|
||||
(void)colours;
|
||||
#endif
|
||||
|
||||
for (i = 0; i < argc; i++)
|
||||
{
|
||||
if (!argv[i])
|
||||
continue;
|
||||
if (!strcmp(argv[i], "-log"))
|
||||
writelog = true;
|
||||
else if (!strcmp(argv[i], "-nolog"))
|
||||
writelog = false;
|
||||
}
|
||||
logfile = writelog?fopen("fteqcc.log", "wt"):false;
|
||||
|
||||
if (logfile)
|
||||
|
|
|
@ -31,14 +31,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#define INVIS_CHAR2 (char)138
|
||||
#define INVIS_CHAR3 (char)160
|
||||
|
||||
#ifndef HAVE_CLIENT
|
||||
double host_frametime;
|
||||
double realtime; // without any filtering or bounding
|
||||
qboolean host_initialized; // true if into command execution (compatability)
|
||||
quakeparms_t host_parms;
|
||||
int host_hunklevel;
|
||||
#endif
|
||||
|
||||
client_t *host_client; // current client
|
||||
|
||||
void CvarPostfixKMG(cvar_t *v, char *oldval)
|
||||
|
|
|
@ -8,6 +8,10 @@ plugclientfuncs_t *clientfuncs;
|
|||
plugfsfuncs_t *filefuncs;
|
||||
pluginputfuncs_t *inputfuncs;
|
||||
|
||||
struct ezcl_s cl;
|
||||
struct ezcls_s cls;
|
||||
struct ezvid_s vid;
|
||||
|
||||
int sb_lines;
|
||||
float scr_con_current;
|
||||
int sb_showteamscores;
|
||||
|
|
|
@ -30,12 +30,12 @@ extern pluginputfuncs_t *inputfuncs;
|
|||
#define Q_strdup strdup
|
||||
#define Q_free free
|
||||
#define Q_rint(x) ((int)(x+0.5))
|
||||
#define Q_atoi atoi
|
||||
#define strlcpy Q_strlcpy
|
||||
#define strlcat Q_strlcat
|
||||
|
||||
#undef mpic_t
|
||||
#define mpic_t void
|
||||
#define Q_atoi atoi
|
||||
#define strlcpy Q_strlcpy
|
||||
#define strlcat Q_strlcat
|
||||
|
||||
#undef mpic_t
|
||||
#define mpic_t void
|
||||
|
||||
|
||||
#define MV_VIEWS 4
|
||||
|
@ -59,7 +59,7 @@ extern cvar_t *cl_multiview;
|
|||
#define cl plugcl
|
||||
#define player_info_t plugclientinfo_t
|
||||
|
||||
struct {
|
||||
extern struct ezcl_s{
|
||||
int intermission;
|
||||
int teamplay;
|
||||
int deathmatch;
|
||||
|
@ -79,7 +79,7 @@ struct {
|
|||
|
||||
int splitscreenview;
|
||||
} cl;
|
||||
struct {
|
||||
extern struct ezcls_s{
|
||||
int state;
|
||||
float min_fps;
|
||||
float fps;
|
||||
|
@ -88,7 +88,7 @@ struct {
|
|||
qbool mvdplayback;
|
||||
int demoplayback;
|
||||
} cls;
|
||||
struct {
|
||||
extern struct ezvid_s{
|
||||
int width;
|
||||
int height;
|
||||
// float displayFrequency;
|
||||
|
|
|
@ -2392,6 +2392,7 @@ static qboolean GLTF_ProcessMesh(gltf_t *gltf, json_t *meshid, int basebone, dou
|
|||
GLTF_AccessorToDataF(gltf, surf->numverts, countof(surf->ofs_skel_norm[0]), &morph_norm[i], surf->ofs_skel_norm+offset); //if no normals, normals should be flat (fragment shader or unwelding the verts...)
|
||||
GLTF_AccessorToTangents(gltf, surf->ofs_skel_norm+offset, surf->numverts, &morph_tang[i], surf->ofs_skel_svect+offset, surf->ofs_skel_tvect+offset);
|
||||
}
|
||||
surf->meshrootbone = basebone; //needed for morph anims
|
||||
|
||||
surf->ofs_st_array = GLTF_AccessorToDataF(gltf, surf->numverts, countof(surf->ofs_st_array[0]), &tc_0, NULL);
|
||||
if (tc_1.data)
|
||||
|
@ -3053,13 +3054,12 @@ struct galiasanimation_gltf_s
|
|||
struct gltf_animsampler rot,scale,trans,morph;
|
||||
} bone[1];
|
||||
};
|
||||
cvar_t temp1;
|
||||
static const float *QDECL GLTF_AnimateMorphs(const galiasinfo_t *surf, const framestate_t *framestate)
|
||||
{
|
||||
static float morphs[MAX_MORPHWEIGHTS];
|
||||
float imorphs[MAX_MORPHWEIGHTS], *src;
|
||||
size_t influence, m;
|
||||
int bone = temp1.ival;
|
||||
int bone = surf->meshrootbone;
|
||||
const struct galiasanimation_gltf_s *a;
|
||||
const struct framestateregion_s *fg = &framestate->g[FS_REG];
|
||||
memset(morphs, 0, sizeof(morphs[0])*surf->nummorphs);
|
||||
|
|
Loading…
Reference in a new issue