mirror of
https://github.com/ReactionQuake3/reaction.git
synced 2025-02-18 10:02:50 +00:00
NEW BREAKABLE CODE - will break all old breakables(wont appear in maps)
This commit is contained in:
parent
eaec2203cd
commit
fed270d963
19 changed files with 683 additions and 353 deletions
|
@ -5,6 +5,9 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.24 2002/04/03 03:13:48 blaze
|
||||||
|
// NEW BREAKABLE CODE - will break all old breakables(wont appear in maps)
|
||||||
|
//
|
||||||
// Revision 1.23 2002/03/31 03:31:24 jbravo
|
// Revision 1.23 2002/03/31 03:31:24 jbravo
|
||||||
// Compiler warning cleanups
|
// Compiler warning cleanups
|
||||||
//
|
//
|
||||||
|
@ -577,6 +580,7 @@ localEntity_t *CG_MakeExplosion( vec3_t origin, vec3_t dir,
|
||||||
|
|
||||||
ex->refEntity.hModel = hModel;
|
ex->refEntity.hModel = hModel;
|
||||||
ex->refEntity.customShader = shader;
|
ex->refEntity.customShader = shader;
|
||||||
|
|
||||||
|
|
||||||
// set origin
|
// set origin
|
||||||
VectorCopy( newOrigin, ex->refEntity.origin );
|
VectorCopy( newOrigin, ex->refEntity.origin );
|
||||||
|
@ -1026,6 +1030,7 @@ void CG_LaunchGlass( vec3_t origin, vec3_t velocity, vec3_t rotation,
|
||||||
le->leMarkType = LEMT_NONE;
|
le->leMarkType = LEMT_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===================
|
===================
|
||||||
CG_BreakGlass
|
CG_BreakGlass
|
||||||
|
@ -1035,123 +1040,64 @@ Elder: don't be mislead by the name - this breaks more than glass
|
||||||
===================
|
===================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void CG_BreakGlass( vec3_t playerOrigin, int glassParm, int type ) {
|
void CG_BreakGlass( vec3_t playerOrigin, int glassParm, int number, int type, int isChip ) {
|
||||||
vec3_t origin, velocity, rotation;
|
vec3_t origin, velocity, rotation;
|
||||||
int value;
|
int value;
|
||||||
int count;
|
int count;
|
||||||
int states[] = {1,2,3}; // Select model variations
|
int states[] = {1,2,3}; // Select model variations
|
||||||
// Get the size of the array
|
// Get the size of the array
|
||||||
int numstates = sizeof(states)/sizeof(states[0]);
|
int numstates = sizeof(states)/sizeof(states[0]);
|
||||||
// Elder: debris model handles
|
// Elder: debris model handles
|
||||||
qhandle_t debris1;
|
qhandle_t debris1;
|
||||||
qhandle_t debris2;
|
qhandle_t debris2;
|
||||||
qhandle_t debris3;
|
qhandle_t debris3;
|
||||||
int bounceFactor;
|
float bounceFactor;
|
||||||
int newParm;
|
int newParm;
|
||||||
|
int id;
|
||||||
if ( (glassParm & RQ3_DEBRIS_MEDIUM) == RQ3_DEBRIS_MEDIUM &&
|
qhandle_t sound;
|
||||||
|
|
||||||
|
id = (glassParm & 63);
|
||||||
|
// Com_Printf("ID is %d\n",id);
|
||||||
|
glassParm = glassParm >> 6;
|
||||||
|
sound = cgs.media.breakables[id].sound[rand() % 3];
|
||||||
|
trap_S_StartSound( NULL, number, CHAN_BODY, sound );
|
||||||
|
bounceFactor = 0.3;
|
||||||
|
|
||||||
|
if ( (glassParm & RQ3_DEBRIS_MEDIUM) == RQ3_DEBRIS_MEDIUM &&
|
||||||
(glassParm & RQ3_DEBRIS_HIGH) == RQ3_DEBRIS_HIGH)
|
(glassParm & RQ3_DEBRIS_HIGH) == RQ3_DEBRIS_HIGH)
|
||||||
{
|
{
|
||||||
//Tons
|
//Tons
|
||||||
count = 65 + rand() % 16;
|
count = 65 + rand() % 16;
|
||||||
}
|
}
|
||||||
else if ( (glassParm & RQ3_DEBRIS_HIGH) == RQ3_DEBRIS_HIGH)
|
else if ( (glassParm & RQ3_DEBRIS_HIGH) == RQ3_DEBRIS_HIGH)
|
||||||
{
|
{
|
||||||
//Large
|
//Large
|
||||||
count = 40 + rand() % 11;
|
count = 40 + rand() % 11;
|
||||||
}
|
}
|
||||||
else if ( (glassParm & RQ3_DEBRIS_MEDIUM) == RQ3_DEBRIS_MEDIUM)
|
else if ( (glassParm & RQ3_DEBRIS_MEDIUM) == RQ3_DEBRIS_MEDIUM)
|
||||||
{
|
{
|
||||||
//Medium
|
//Medium
|
||||||
count = 20 + rand() % 6;
|
count = 20 + rand() % 6;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Small
|
//Small
|
||||||
count = 8 + rand() % 6;
|
count = 8 + rand() % 6;
|
||||||
}
|
}
|
||||||
|
//If it's just a chip, dont make so many
|
||||||
/*
|
if (isChip == 1)
|
||||||
===============================
|
{
|
||||||
TODO: Utilize variation bits!
|
count /= 8;
|
||||||
==============================
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
//Strip off amount info and revert eParm back to server-side size
|
//Strip off amount info and revert eParm back to server-side size
|
||||||
newParm = glassParm & 15;
|
newParm = glassParm & 15;
|
||||||
glassParm &= ~newParm;
|
glassParm &= ~newParm;
|
||||||
glassParm = glassParm << (type * 4);
|
glassParm = glassParm << (type * 4);
|
||||||
|
|
||||||
//CG_Printf("glassParm: %i\n", glassParm);
|
debris1 = cgs.media.breakables[id].model[0];
|
||||||
|
debris2 = cgs.media.breakables[id].model[1];
|
||||||
//Elder: check debris type and assign debris models
|
debris3 = cgs.media.breakables[id].model[2];
|
||||||
if ( (glassParm & RQ3_DEBRIS_WOOD) == RQ3_DEBRIS_WOOD)
|
|
||||||
{
|
|
||||||
//CG_Printf("Launching wood\n");
|
|
||||||
debris1 = cgs.media.wood01;
|
|
||||||
debris2 = cgs.media.wood02;
|
|
||||||
debris3 = cgs.media.wood03;
|
|
||||||
bounceFactor = 0.8f;
|
|
||||||
}
|
|
||||||
else if ( (glassParm & RQ3_DEBRIS_METAL) == RQ3_DEBRIS_METAL)
|
|
||||||
{
|
|
||||||
//CG_Printf("Launching metal\n");
|
|
||||||
debris1 = cgs.media.metal01;
|
|
||||||
debris2 = cgs.media.metal02;
|
|
||||||
debris3 = cgs.media.metal03;
|
|
||||||
bounceFactor = 0.7f;
|
|
||||||
}
|
|
||||||
else if ( (glassParm & RQ3_DEBRIS_CERAMIC) == RQ3_DEBRIS_CERAMIC)
|
|
||||||
{
|
|
||||||
//CG_Printf("Launching ceramic\n");
|
|
||||||
debris1 = cgs.media.ceramic01;
|
|
||||||
debris2 = cgs.media.ceramic02;
|
|
||||||
debris3 = cgs.media.ceramic03;
|
|
||||||
bounceFactor = 0.7f;
|
|
||||||
}
|
|
||||||
else if ( (glassParm & RQ3_DEBRIS_PAPER) == RQ3_DEBRIS_PAPER)
|
|
||||||
{
|
|
||||||
//CG_Printf("Launching paper\n");
|
|
||||||
debris1 = cgs.media.paper01;
|
|
||||||
debris2 = cgs.media.paper02;
|
|
||||||
debris3 = cgs.media.paper03;
|
|
||||||
bounceFactor = 0.2f;
|
|
||||||
}
|
|
||||||
else if ( (glassParm & RQ3_DEBRIS_BRICK) == RQ3_DEBRIS_BRICK)
|
|
||||||
{
|
|
||||||
//CG_Printf("Launching brick\n");
|
|
||||||
debris1 = cgs.media.brick01;
|
|
||||||
debris2 = cgs.media.brick02;
|
|
||||||
debris3 = cgs.media.brick03;
|
|
||||||
bounceFactor = 0.4f;
|
|
||||||
}
|
|
||||||
else if ( (glassParm & RQ3_DEBRIS_CONCRETE) == RQ3_DEBRIS_CONCRETE)
|
|
||||||
{
|
|
||||||
//CG_Printf("Launching concrete\n");
|
|
||||||
debris1 = cgs.media.concrete01;
|
|
||||||
debris2 = cgs.media.concrete02;
|
|
||||||
debris3 = cgs.media.concrete03;
|
|
||||||
bounceFactor = 0.5f;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
else if ( (glassParm & RQ3_DEBRIS_POPCAN) == RQ3_DEBRIS_POPCAN)
|
|
||||||
{
|
|
||||||
CG_Printf("Launching pop cans\n");
|
|
||||||
debris1 = cgs.media.popcan01;
|
|
||||||
debris2 = cgs.media.popcan02;
|
|
||||||
debris3 = cgs.media.popcan03;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//glass is default
|
|
||||||
//CG_Printf("Launching glass\n");
|
|
||||||
debris1 = cgs.media.glass01;
|
|
||||||
debris2 = cgs.media.glass02;
|
|
||||||
debris3 = cgs.media.glass03;
|
|
||||||
bounceFactor = 0.7f;
|
|
||||||
}
|
|
||||||
|
|
||||||
//launch loop
|
//launch loop
|
||||||
while ( count-- ) {
|
while ( count-- ) {
|
||||||
// Generate the random number every count so every shard is a
|
// Generate the random number every count so every shard is a
|
||||||
|
@ -1226,6 +1172,27 @@ void CG_LaunchBreakableFrag( vec3_t origin, vec3_t velocity, qhandle_t hModel, f
|
||||||
le->leBounceSoundType = LEBS_NONE;
|
le->leBounceSoundType = LEBS_NONE;
|
||||||
le->leMarkType = LEMT_NONE;
|
le->leMarkType = LEMT_NONE;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
=============
|
||||||
|
VectorToString
|
||||||
|
|
||||||
|
This is just a convenience function
|
||||||
|
for printing vectors
|
||||||
|
=============
|
||||||
|
*/
|
||||||
|
char *vtos( const vec3_t v ) {
|
||||||
|
static int index;
|
||||||
|
static char str[8][32];
|
||||||
|
char *s;
|
||||||
|
|
||||||
|
// use an array so that multiple vtos won't collide
|
||||||
|
s = str[index];
|
||||||
|
index = (index + 1)&7;
|
||||||
|
|
||||||
|
Com_sprintf (s, 32, "(%i %i %i)", (int)v[0], (int)v[1], (int)v[2]);
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
// JBravo: also for func_explosive
|
// JBravo: also for func_explosive
|
||||||
/*
|
/*
|
||||||
|
@ -1238,11 +1205,9 @@ Generated a bunch of gibs launching out from the breakables location
|
||||||
#define BREAK_VELOCITY 550
|
#define BREAK_VELOCITY 550
|
||||||
#define BREAK_JUMP 1500
|
#define BREAK_JUMP 1500
|
||||||
|
|
||||||
void CG_BreakBreakable( centity_t *cent, int eParam ) {
|
void CG_BreakBreakable( centity_t *cent,int eParam, int number ) {
|
||||||
localEntity_t *le;
|
localEntity_t *le;
|
||||||
vec3_t origin, velocity;
|
vec3_t origin, velocity;
|
||||||
qhandle_t model;
|
|
||||||
sfxHandle_t sound;
|
|
||||||
qhandle_t mod;
|
qhandle_t mod;
|
||||||
qhandle_t shader;
|
qhandle_t shader;
|
||||||
vec3_t shrapnelDest;
|
vec3_t shrapnelDest;
|
||||||
|
@ -1253,44 +1218,62 @@ void CG_BreakBreakable( centity_t *cent, int eParam ) {
|
||||||
vec3_t lightColor;
|
vec3_t lightColor;
|
||||||
int duration;
|
int duration;
|
||||||
int sparkCount;
|
int sparkCount;
|
||||||
int i, mass, material;
|
|
||||||
float tension, bouncyness, size;
|
|
||||||
// int modelbias[10] = { 0, 0, 0, 0, 1, 1, 1, 2, 2 };
|
|
||||||
|
|
||||||
mass = ((eParam >> 4) & 0x0F) + 1;
|
int i;
|
||||||
tension = 0.25 * (((eParam >> 2) & 0x03) + 1);
|
int modelbias[10] = { 0, 0, 0, 0, 1, 1, 1, 2, 2 };
|
||||||
bouncyness = 0.25 * (((eParam) & 0x3) + 1);
|
int id;
|
||||||
|
int count;
|
||||||
|
|
||||||
mass = eParam;
|
|
||||||
|
id = (eParam & 63);
|
||||||
material = (cent->currentState.powerups >> 12) & 0x000F;
|
eParam = eParam >> 6;
|
||||||
tension = 0.0667 * (float)((cent->currentState.powerups >> 8) & 0x000F);
|
|
||||||
bouncyness = 0.0667 * (float)((cent->currentState.powerups >> 4) & 0x000F);
|
trap_S_StartSound( NULL, number, CHAN_BODY, cgs.media.breakables[id].exp_sound );
|
||||||
size = 0.1333 * (float)((cent->currentState.powerups) & 0x000F);
|
|
||||||
|
if ( (eParam & RQ3_DEBRIS_MEDIUM) == RQ3_DEBRIS_MEDIUM &&
|
||||||
if (mass == 0) mass = 1;
|
(eParam & RQ3_DEBRIS_HIGH) == RQ3_DEBRIS_HIGH)
|
||||||
if (size <= 0) size = 1;
|
{
|
||||||
|
//Tons
|
||||||
|
count = 65 + rand() % 16;
|
||||||
|
}
|
||||||
|
else if ( (eParam & RQ3_DEBRIS_HIGH) == RQ3_DEBRIS_HIGH)
|
||||||
|
{
|
||||||
|
//Large
|
||||||
|
count = 40 + rand() % 11;
|
||||||
|
}
|
||||||
|
else if ( (eParam & RQ3_DEBRIS_MEDIUM) == RQ3_DEBRIS_MEDIUM)
|
||||||
|
{
|
||||||
|
//Medium
|
||||||
|
count = 20 + rand() % 6;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//Small
|
||||||
|
count = 8 + rand() % 6;
|
||||||
|
}
|
||||||
//if (material) material--;
|
//if (material) material--;
|
||||||
|
VectorCopy( cent->lerpOrigin, origin );
|
||||||
VectorCopy( cent->currentState.origin, origin );
|
/*
|
||||||
|
sound = cgs.media.breakables[id].sound;
|
||||||
sound = cgs.media.breakable_snd[material];
|
trap_S_StartSound( origin, cent->currentState.number, CHAN_BODY, sound );*/
|
||||||
trap_S_StartSound( origin, cent->currentState.number, CHAN_BODY, sound );
|
|
||||||
|
|
||||||
// create an explosion
|
// create an explosion
|
||||||
mod = cgs.media.dishFlashModel;
|
mod = cgs.media.dishFlashModel;
|
||||||
shader = cgs.media.grenadeExplosionShader;
|
shader = cgs.media.breakables[id].shader;
|
||||||
light = 350;
|
|
||||||
|
|
||||||
|
//Com_Printf("Explosion, %d, breakableshader %d at %s ep %d\n",shader,cgs.media.breakables[id].shader, vtos(origin), eParam);
|
||||||
|
light = 550;
|
||||||
lightColor[0] = 1;
|
lightColor[0] = 1;
|
||||||
lightColor[1] = 1;
|
lightColor[1] = 1;
|
||||||
lightColor[2] = 0;
|
lightColor[2] = 0;
|
||||||
duration = 600;
|
duration = 1000;
|
||||||
|
|
||||||
velocity[0] = (crandom() * BREAK_VELOCITY) * tension;
|
velocity[0] = 1;
|
||||||
velocity[1] = (crandom() * BREAK_VELOCITY) * tension;
|
velocity[1] = 1;
|
||||||
velocity[2] = ( random() * BREAK_JUMP) * tension;
|
velocity[2] = 1;
|
||||||
|
|
||||||
le = CG_MakeExplosion( origin, velocity,
|
le = CG_MakeExplosion( origin, velocity,
|
||||||
mod, shader,
|
mod, shader,
|
||||||
duration, qtrue );
|
duration, qtrue );
|
||||||
le->light = light;
|
le->light = light;
|
||||||
|
@ -1322,20 +1305,11 @@ void CG_BreakBreakable( centity_t *cent, int eParam ) {
|
||||||
puffDir[2] = 20;
|
puffDir[2] = 20;
|
||||||
origin[2] -= 16;
|
origin[2] -= 16;
|
||||||
smokePuff = CG_SmokePuff( origin, puffDir,
|
smokePuff = CG_SmokePuff( origin, puffDir,
|
||||||
rand() % 12 + 48,
|
rand() % 12 + 100,
|
||||||
1, 1, 1, 0.4f,
|
1, 1, 1, 0.6f,
|
||||||
1750,
|
3000,
|
||||||
cg.time, 0,
|
cg.time, 0,
|
||||||
0,
|
0,
|
||||||
cgs.media.smokePuffShader );
|
cgs.media.smokePuffShader );
|
||||||
|
|
||||||
for (i = 0; i < mass; i++) {
|
|
||||||
velocity[0] = (crandom() * BREAK_VELOCITY) * tension;
|
|
||||||
velocity[1] = (crandom() * BREAK_VELOCITY) * tension;
|
|
||||||
velocity[2] = ( random() * BREAK_JUMP) * tension;
|
|
||||||
model = cgs.media.breakable_frag[material][(int)(2.0 * random())];
|
|
||||||
CG_LaunchBreakableFrag( origin, velocity, model, bouncyness, size );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.23 2002/04/03 03:13:48 blaze
|
||||||
|
// NEW BREAKABLE CODE - will break all old breakables(wont appear in maps)
|
||||||
|
//
|
||||||
// Revision 1.22 2002/03/31 13:52:48 jbravo
|
// Revision 1.22 2002/03/31 13:52:48 jbravo
|
||||||
// More cleanups
|
// More cleanups
|
||||||
//
|
//
|
||||||
|
@ -37,6 +40,9 @@
|
||||||
static void CG_LaserSight( centity_t *cent );
|
static void CG_LaserSight( centity_t *cent );
|
||||||
static void CG_Dlight( centity_t *cent );
|
static void CG_Dlight( centity_t *cent );
|
||||||
|
|
||||||
|
extern char rq3_breakables[RQ3_MAX_BREAKABLES][80];
|
||||||
|
|
||||||
|
extern void trap_R_AddAdditiveLightToScene( const vec3_t org, float intensity, float r, float g, float b );
|
||||||
/*
|
/*
|
||||||
======================
|
======================
|
||||||
CG_PositionEntityOnTag
|
CG_PositionEntityOnTag
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.48 2002/04/03 03:13:48 blaze
|
||||||
|
// NEW BREAKABLE CODE - will break all old breakables(wont appear in maps)
|
||||||
|
//
|
||||||
// Revision 1.47 2002/03/31 03:31:24 jbravo
|
// Revision 1.47 2002/03/31 03:31:24 jbravo
|
||||||
// Compiler warning cleanups
|
// Compiler warning cleanups
|
||||||
//
|
//
|
||||||
|
@ -68,7 +71,7 @@
|
||||||
|
|
||||||
#include "cg_local.h"
|
#include "cg_local.h"
|
||||||
// JBravo: warning fix
|
// JBravo: warning fix
|
||||||
void CG_BreakBreakable(centity_t *cent, int eParam);
|
void CG_BreakBreakable(centity_t *cent, int eParam, int number);
|
||||||
|
|
||||||
// for the voice chats
|
// for the voice chats
|
||||||
#ifdef MISSIONPACK // bk001205
|
#ifdef MISSIONPACK // bk001205
|
||||||
|
@ -2496,30 +2499,22 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
|
||||||
// Change cgs.media.gibSound to whatever sound you want it to use
|
// Change cgs.media.gibSound to whatever sound you want it to use
|
||||||
// I think the gib sound sounds pretty good
|
// I think the gib sound sounds pretty good
|
||||||
//Elder: gonna move this into the function some day
|
//Elder: gonna move this into the function some day
|
||||||
if ( rand() % 2 )
|
CG_BreakGlass( cent->lerpOrigin, es->eventParm, es->number, 0, 0 );
|
||||||
trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.glassSound );
|
|
||||||
else
|
|
||||||
trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.glass2Sound );
|
|
||||||
//Elder: modified
|
|
||||||
CG_BreakGlass( cent->lerpOrigin, es->eventParm, 0 );
|
|
||||||
break;
|
break;
|
||||||
case EV_BREAK_GLASS2:
|
case EV_BREAK_GLASS2:
|
||||||
DEBUGNAME("EV_BREAK_GLASS2");
|
DEBUGNAME("EV_BREAK_GLASS2");
|
||||||
if ( rand() % 2 )
|
CG_BreakGlass( cent->lerpOrigin, es->eventParm, es->number, 1, 0 );
|
||||||
trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.glassSound );
|
|
||||||
else
|
|
||||||
trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.glass2Sound );
|
|
||||||
CG_BreakGlass( cent->lerpOrigin, es->eventParm, 1 );
|
|
||||||
break;
|
break;
|
||||||
case EV_BREAK_GLASS3:
|
case EV_BREAK_GLASS3:
|
||||||
DEBUGNAME("EV_BREAK_GLASS3");
|
DEBUGNAME("EV_BREAK_GLASS3");
|
||||||
if ( rand() % 2 )
|
CG_BreakGlass( cent->lerpOrigin, es->eventParm, es->number, 2, 0 );
|
||||||
trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.glassSound );
|
|
||||||
else
|
|
||||||
trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.glass2Sound );
|
|
||||||
CG_BreakGlass( cent->lerpOrigin, es->eventParm, 2 );
|
|
||||||
break;
|
break;
|
||||||
case EV_STOPLOOPINGSOUND:
|
case EV_CHIP_GLASS:
|
||||||
|
DEBUGNAME("EV_CHIP_GLASS");
|
||||||
|
CG_BreakGlass( cent->lerpOrigin, es->eventParm, es->number, 1, 1 );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EV_STOPLOOPINGSOUND:
|
||||||
DEBUGNAME("EV_STOPLOOPINGSOUND");
|
DEBUGNAME("EV_STOPLOOPINGSOUND");
|
||||||
trap_S_StopLoopingSound( es->number );
|
trap_S_StopLoopingSound( es->number );
|
||||||
es->loopSound = 0;
|
es->loopSound = 0;
|
||||||
|
@ -2530,11 +2525,11 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
|
||||||
CG_Beam( cent );
|
CG_Beam( cent );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// JBravo: adding func_explosive
|
// Blaze: an exploding breakable
|
||||||
case EV_GIB_GLASS:
|
case EV_EXPLODE_BREAKABLE:
|
||||||
DEBUGNAME("EV_GIB_GLASS");
|
DEBUGNAME("EV_EXPLODE_BREAKABLE");
|
||||||
//trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.gibSound );
|
//trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.gibSound );
|
||||||
CG_BreakBreakable( cent, es->eventParm );
|
CG_BreakBreakable( cent, es->eventParm, es->number );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.63 2002/04/03 03:13:48 blaze
|
||||||
|
// NEW BREAKABLE CODE - will break all old breakables(wont appear in maps)
|
||||||
|
//
|
||||||
// Revision 1.62 2002/03/31 02:03:13 niceass
|
// Revision 1.62 2002/03/31 02:03:13 niceass
|
||||||
// added tag declaration
|
// added tag declaration
|
||||||
//
|
//
|
||||||
|
@ -840,7 +843,13 @@ typedef struct {
|
||||||
int records[REC_NUM_RECORDS]; // Blaze: for our statistics tracking
|
int records[REC_NUM_RECORDS]; // Blaze: for our statistics tracking
|
||||||
|
|
||||||
} cg_t;
|
} cg_t;
|
||||||
|
//Blaze: struct to hold the func_breakable stuff
|
||||||
|
typedef struct {
|
||||||
|
qhandle_t model[3];
|
||||||
|
sfxHandle_t sound[3];
|
||||||
|
sfxHandle_t exp_sound;
|
||||||
|
qhandle_t shader;
|
||||||
|
} breakable_t;
|
||||||
|
|
||||||
// all of the model, shader, and sound references that are
|
// all of the model, shader, and sound references that are
|
||||||
// loaded at gamestate time are stored in cgMedia_t
|
// loaded at gamestate time are stored in cgMedia_t
|
||||||
|
@ -933,9 +942,9 @@ typedef struct {
|
||||||
qhandle_t akimbo1stModel;
|
qhandle_t akimbo1stModel;
|
||||||
qhandle_t akimboHandModel;
|
qhandle_t akimboHandModel;
|
||||||
|
|
||||||
// JBravo: func_brakable stuff
|
// Blaze: func_explosive stuff
|
||||||
qhandle_t breakable_frag[15][3];
|
breakable_t breakables[16];
|
||||||
sfxHandle_t breakable_snd[15];
|
|
||||||
|
|
||||||
qhandle_t smoke2;
|
qhandle_t smoke2;
|
||||||
|
|
||||||
|
@ -1149,8 +1158,9 @@ typedef struct {
|
||||||
sfxHandle_t youSuckSound;
|
sfxHandle_t youSuckSound;
|
||||||
#endif
|
#endif
|
||||||
sfxHandle_t gibSound;
|
sfxHandle_t gibSound;
|
||||||
sfxHandle_t glassSound; //Blaze: Reaction breakable glass
|
//Blaze: Dont need this any more
|
||||||
sfxHandle_t glass2Sound;
|
// sfxHandle_t glassSound; //Blaze: Reaction breakable glass
|
||||||
|
// sfxHandle_t glass2Sound;
|
||||||
sfxHandle_t gibBounce1Sound;
|
sfxHandle_t gibBounce1Sound;
|
||||||
sfxHandle_t gibBounce2Sound;
|
sfxHandle_t gibBounce2Sound;
|
||||||
sfxHandle_t gibBounce3Sound;
|
sfxHandle_t gibBounce3Sound;
|
||||||
|
@ -1841,7 +1851,7 @@ void CG_ShrapnelSpark( vec3_t source, vec3_t dest, float width, float length );
|
||||||
void CG_GibPlayer( vec3_t playerOrigin );
|
void CG_GibPlayer( vec3_t playerOrigin );
|
||||||
void CG_BigExplode( vec3_t playerOrigin );
|
void CG_BigExplode( vec3_t playerOrigin );
|
||||||
// Blaze: Breakable glass Elder: modified
|
// Blaze: Breakable glass Elder: modified
|
||||||
void CG_BreakGlass( vec3_t playerOrigin, int glassParm, int type );
|
void CG_BreakGlass( vec3_t playerOrigin, int glassParm, int number, int type, int isChip );
|
||||||
void CG_Bleed( vec3_t origin, int entityNum );
|
void CG_Bleed( vec3_t origin, int entityNum );
|
||||||
//Elder: for SSG shots
|
//Elder: for SSG shots
|
||||||
void CG_BleedSpray ( vec3_t start, vec3_t end, int entityNum, int numBursts );
|
void CG_BleedSpray ( vec3_t start, vec3_t end, int entityNum, int numBursts );
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.52 2002/04/03 03:13:49 blaze
|
||||||
|
// NEW BREAKABLE CODE - will break all old breakables(wont appear in maps)
|
||||||
|
//
|
||||||
// Revision 1.51 2002/03/26 10:32:51 jbravo
|
// Revision 1.51 2002/03/26 10:32:51 jbravo
|
||||||
// Bye bye LCA lag
|
// Bye bye LCA lag
|
||||||
//
|
//
|
||||||
|
@ -82,6 +85,9 @@ void CG_Init( int serverMessageNum, int serverCommandSequence, int clientNum );
|
||||||
void CG_Shutdown( void );
|
void CG_Shutdown( void );
|
||||||
|
|
||||||
|
|
||||||
|
//Blaze: used to access the names of the breakables
|
||||||
|
char rq3_breakables[RQ3_MAX_BREAKABLES][80];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
================
|
================
|
||||||
vmMain
|
vmMain
|
||||||
|
@ -817,16 +823,12 @@ static void CG_RegisterSounds( void ) {
|
||||||
cgs.media.useNothingSound = trap_S_RegisterSound( "sound/items/use_nothing.wav", qfalse );
|
cgs.media.useNothingSound = trap_S_RegisterSound( "sound/items/use_nothing.wav", qfalse );
|
||||||
cgs.media.gibSound = trap_S_RegisterSound( "sound/player/gibsplt1.wav", qfalse );
|
cgs.media.gibSound = trap_S_RegisterSound( "sound/player/gibsplt1.wav", qfalse );
|
||||||
//Blaze: Reaction breakable glass
|
//Blaze: Reaction breakable glass
|
||||||
cgs.media.glassSound = trap_S_RegisterSound( "sound/world/glassbk.wav", qfalse );
|
/*cgs.media.glassSound = trap_S_RegisterSound( "sound/world/glassbk.wav", qfalse );
|
||||||
cgs.media.glass2Sound = trap_S_RegisterSound( "sound/world/glassbk2.wav", qfalse );
|
cgs.media.glass2Sound = trap_S_RegisterSound( "sound/world/glassbk2.wav", qfalse );*/
|
||||||
cgs.media.gibBounce1Sound = trap_S_RegisterSound( "sound/player/gibimp1.wav", qfalse );
|
cgs.media.gibBounce1Sound = trap_S_RegisterSound( "sound/player/gibimp1.wav", qfalse );
|
||||||
cgs.media.gibBounce2Sound = trap_S_RegisterSound( "sound/player/gibimp2.wav", qfalse );
|
cgs.media.gibBounce2Sound = trap_S_RegisterSound( "sound/player/gibimp2.wav", qfalse );
|
||||||
cgs.media.gibBounce3Sound = trap_S_RegisterSound( "sound/player/gibimp3.wav", qfalse );
|
cgs.media.gibBounce3Sound = trap_S_RegisterSound( "sound/player/gibimp3.wav", qfalse );
|
||||||
|
|
||||||
//Blaze: func_explosive sounds
|
|
||||||
cgs.media.breakable_snd[0] = trap_S_RegisterSound( "sound/world/glassbk.wav", qfalse );
|
|
||||||
cgs.media.breakable_snd[1] = trap_S_RegisterSound ("sound/weapons/rocket/rocklx1a.wav", qfalse);
|
|
||||||
|
|
||||||
//Elder: RQ3 sounds
|
//Elder: RQ3 sounds
|
||||||
cgs.media.kickSound = trap_S_RegisterSound( "sound/misc/kick.wav", qfalse);
|
cgs.media.kickSound = trap_S_RegisterSound( "sound/misc/kick.wav", qfalse);
|
||||||
cgs.media.lensSound = trap_S_RegisterSound( "sound/misc/lens.wav", qfalse);
|
cgs.media.lensSound = trap_S_RegisterSound( "sound/misc/lens.wav", qfalse);
|
||||||
|
@ -1238,12 +1240,8 @@ static void CG_RegisterGraphics( void ) {
|
||||||
cgs.media.gibLeg = trap_R_RegisterModel( "models/gibs/leg.md3" );
|
cgs.media.gibLeg = trap_R_RegisterModel( "models/gibs/leg.md3" );
|
||||||
cgs.media.gibSkull = trap_R_RegisterModel( "models/gibs/skull.md3" );
|
cgs.media.gibSkull = trap_R_RegisterModel( "models/gibs/skull.md3" );
|
||||||
cgs.media.gibBrain = trap_R_RegisterModel( "models/gibs/brain.md3" );
|
cgs.media.gibBrain = trap_R_RegisterModel( "models/gibs/brain.md3" );
|
||||||
//Blaze: Breakable Glass
|
//Blaze: Delay loading the breakable stuff
|
||||||
i=0;
|
/*
|
||||||
cgs.media.breakable_frag[i][0] = cgs.media.glass01 = trap_R_RegisterModel( "models/breakables/glass01.md3" );
|
|
||||||
cgs.media.breakable_frag[i][1] = cgs.media.glass02 = trap_R_RegisterModel( "models/breakables/glass02.md3" );
|
|
||||||
cgs.media.breakable_frag[i][2] = cgs.media.glass03 = trap_R_RegisterModel( "models/breakables/glass03.md3" );
|
|
||||||
|
|
||||||
//Elder: additional debris
|
//Elder: additional debris
|
||||||
//Todo: load only if in the level
|
//Todo: load only if in the level
|
||||||
i++;
|
i++;
|
||||||
|
@ -1276,7 +1274,7 @@ static void CG_RegisterGraphics( void ) {
|
||||||
cgs.media.breakable_frag[i][0] = cgs.media.concrete01 = trap_R_RegisterModel( "models/breakables/concrete01.md3" );
|
cgs.media.breakable_frag[i][0] = cgs.media.concrete01 = trap_R_RegisterModel( "models/breakables/concrete01.md3" );
|
||||||
cgs.media.breakable_frag[i][1] = cgs.media.concrete02 = trap_R_RegisterModel( "models/breakables/concrete02.md3" );
|
cgs.media.breakable_frag[i][1] = cgs.media.concrete02 = trap_R_RegisterModel( "models/breakables/concrete02.md3" );
|
||||||
cgs.media.breakable_frag[i][2] = cgs.media.concrete03 = trap_R_RegisterModel( "models/breakables/concrete03.md3" );
|
cgs.media.breakable_frag[i][2] = cgs.media.concrete03 = trap_R_RegisterModel( "models/breakables/concrete03.md3" );
|
||||||
|
*/
|
||||||
//Elder: akimbos - some of the stuff isn't in yet :p
|
//Elder: akimbos - some of the stuff isn't in yet :p
|
||||||
cgs.media.akimboModel = trap_R_RegisterModel( "models/weapons2/akimbo/akimbo.md3" );
|
cgs.media.akimboModel = trap_R_RegisterModel( "models/weapons2/akimbo/akimbo.md3" );
|
||||||
cgs.media.akimboFlashModel = trap_R_RegisterModel( "models/weapons2/akimbo/akimbo_flash.md3" );
|
cgs.media.akimboFlashModel = trap_R_RegisterModel( "models/weapons2/akimbo/akimbo_flash.md3" );
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.27 2002/04/03 03:13:49 blaze
|
||||||
|
// NEW BREAKABLE CODE - will break all old breakables(wont appear in maps)
|
||||||
|
//
|
||||||
// Revision 1.26 2002/04/02 04:18:58 jbravo
|
// Revision 1.26 2002/04/02 04:18:58 jbravo
|
||||||
// Made the TP scoreboard go down at round beginig (not for spectators) and
|
// Made the TP scoreboard go down at round beginig (not for spectators) and
|
||||||
// pop up at intermission. Also added special to the use command
|
// pop up at intermission. Also added special to the use command
|
||||||
|
@ -62,6 +65,9 @@
|
||||||
#include "cg_local.h"
|
#include "cg_local.h"
|
||||||
#include "../ui/menudef.h" // bk001205 - for Q3_ui as well
|
#include "../ui/menudef.h" // bk001205 - for Q3_ui as well
|
||||||
|
|
||||||
|
//Blaze: holds the id to name mapping of the breakables
|
||||||
|
extern char rq3_breakables[RQ3_MAX_BREAKABLES][80];
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const char *order;
|
const char *order;
|
||||||
int taskNum;
|
int taskNum;
|
||||||
|
@ -1239,6 +1245,31 @@ static void CG_ServerCommand( void ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( !strcmp( cmd, "breakable" ) )
|
||||||
|
{
|
||||||
|
int id;
|
||||||
|
id = atoi(CG_Argv(1));
|
||||||
|
if (id >= 0 && id < RQ3_MAX_BREAKABLES)
|
||||||
|
{
|
||||||
|
//Com_Printf("Registering breakable %s ID=%d\n",CG_Argv(2), id);
|
||||||
|
//Blaze: Breakable stuff - register the models, sounds, and explosion shader
|
||||||
|
cgs.media.breakables[id].model[0] = trap_R_RegisterModel( va("breakables/%s/models/break1.md3",CG_Argv(2)) );
|
||||||
|
cgs.media.breakables[id].model[1] = trap_R_RegisterModel( va("breakables/%s/models/break2.md3",CG_Argv(2)) );
|
||||||
|
cgs.media.breakables[id].model[2] = trap_R_RegisterModel( va("breakables/%s/models/break3.md3",CG_Argv(2)) );
|
||||||
|
cgs.media.breakables[id].shader = trap_R_RegisterShader( va("breakable_%s_explosion",CG_Argv(2)) );
|
||||||
|
cgs.media.breakables[id].sound[0] = trap_S_RegisterSound( va("breakables/%s/sounds/break1.wav", CG_Argv(2)), qfalse );
|
||||||
|
cgs.media.breakables[id].sound[1] = trap_S_RegisterSound( va("breakables/%s/sounds/break2.wav", CG_Argv(2)), qfalse );
|
||||||
|
cgs.media.breakables[id].sound[2] = trap_S_RegisterSound( va("breakables/%s/sounds/break3.wav", CG_Argv(2)), qfalse );
|
||||||
|
cgs.media.breakables[id].exp_sound = trap_S_RegisterSound( va("breakables/%s/sounds/explosion.wav", CG_Argv(2)), qfalse );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CG_Printf("ID was %d\n",id);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if ( !strcmp( cmd, "selectpistol") ) {
|
if ( !strcmp( cmd, "selectpistol") ) {
|
||||||
//CG_Printf("Selecting pistol\n");
|
//CG_Printf("Selecting pistol\n");
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.63 2002/04/03 03:13:49 blaze
|
||||||
|
// NEW BREAKABLE CODE - will break all old breakables(wont appear in maps)
|
||||||
|
//
|
||||||
// Revision 1.62 2002/04/01 22:23:38 slicer
|
// Revision 1.62 2002/04/01 22:23:38 slicer
|
||||||
// Added "weapon" command buffering
|
// Added "weapon" command buffering
|
||||||
//
|
//
|
||||||
|
@ -3203,6 +3206,7 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin,
|
||||||
duration, isSprite );
|
duration, isSprite );
|
||||||
le->light = light;
|
le->light = light;
|
||||||
VectorCopy( lightColor, le->lightColor );
|
VectorCopy( lightColor, le->lightColor );
|
||||||
|
|
||||||
}
|
}
|
||||||
else if ( cg_RQ3_impactEffects.integer )
|
else if ( cg_RQ3_impactEffects.integer )
|
||||||
{
|
{
|
||||||
|
@ -3410,6 +3414,7 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin,
|
||||||
// Elder: grenade explosion
|
// Elder: grenade explosion
|
||||||
if (cg_RQ3_impactEffects.integer && weapon == WP_GRENADE)
|
if (cg_RQ3_impactEffects.integer && weapon == WP_GRENADE)
|
||||||
{
|
{
|
||||||
|
|
||||||
vec3_t shrapnelDest;
|
vec3_t shrapnelDest;
|
||||||
|
|
||||||
sparkCount = 60 + rand() % 10;
|
sparkCount = 60 + rand() % 10;
|
||||||
|
|
|
@ -6,13 +6,37 @@
|
||||||
--------------------Configuration: cgame - Win32 Debug--------------------
|
--------------------Configuration: cgame - Win32 Debug--------------------
|
||||||
</h3>
|
</h3>
|
||||||
<h3>Command Lines</h3>
|
<h3>Command Lines</h3>
|
||||||
Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP9D0.tmp" with contents
|
Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSPBB.tmp" with contents
|
||||||
[
|
[
|
||||||
/nologo /G5 /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"Debug/" /Fp"Debug/cgame.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /c
|
/nologo /G5 /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"Debug/" /Fp"Debug/cgame.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /c
|
||||||
|
"C:\Development\reaction\game\bg_misc.c"
|
||||||
|
"C:\Development\reaction\game\bg_pmove.c"
|
||||||
|
"C:\Development\reaction\game\bg_slidemove.c"
|
||||||
|
"C:\Development\reaction\cgame\cg_consolecmds.c"
|
||||||
|
"C:\Development\reaction\cgame\cg_draw.c"
|
||||||
|
"C:\Development\reaction\cgame\cg_drawtools.c"
|
||||||
"C:\Development\reaction\cgame\cg_effects.c"
|
"C:\Development\reaction\cgame\cg_effects.c"
|
||||||
|
"C:\Development\reaction\cgame\cg_ents.c"
|
||||||
|
"C:\Development\reaction\cgame\cg_event.c"
|
||||||
|
"C:\Development\reaction\cgame\cg_info.c"
|
||||||
|
"C:\Development\reaction\cgame\cg_localents.c"
|
||||||
|
"C:\Development\reaction\cgame\cg_main.c"
|
||||||
|
"C:\Development\reaction\cgame\cg_marks.c"
|
||||||
|
"C:\Development\reaction\cgame\cg_players.c"
|
||||||
|
"C:\Development\reaction\cgame\cg_playerstate.c"
|
||||||
|
"C:\Development\reaction\cgame\cg_predict.c"
|
||||||
|
"C:\Development\reaction\cgame\cg_scoreboard.c"
|
||||||
|
"C:\Development\reaction\cgame\cg_servercmds.c"
|
||||||
|
"C:\Development\reaction\cgame\cg_snapshot.c"
|
||||||
|
"C:\Development\reaction\cgame\cg_syscalls.c"
|
||||||
|
"C:\Development\reaction\cgame\cg_view.c"
|
||||||
|
"C:\Development\reaction\cgame\cg_weapons.c"
|
||||||
|
"C:\Development\reaction\game\q_math.c"
|
||||||
|
"C:\Development\reaction\game\q_shared.c"
|
||||||
|
"C:\Development\reaction\ui\ui_shared.c"
|
||||||
]
|
]
|
||||||
Creating command line "cl.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP9D0.tmp"
|
Creating command line "cl.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSPBB.tmp"
|
||||||
Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP9D1.tmp" with contents
|
Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSPBC.tmp" with contents
|
||||||
[
|
[
|
||||||
/nologo /base:"0x30000000" /subsystem:windows /dll /incremental:yes /pdb:"Debug/cgamex86.pdb" /map:"Debug/cgamex86.map" /debug /machine:I386 /def:".\cgame.def" /out:"../Debug/cgamex86.dll" /implib:"Debug/cgamex86.lib"
|
/nologo /base:"0x30000000" /subsystem:windows /dll /incremental:yes /pdb:"Debug/cgamex86.pdb" /map:"Debug/cgamex86.map" /debug /machine:I386 /def:".\cgame.def" /out:"../Debug/cgamex86.dll" /implib:"Debug/cgamex86.lib"
|
||||||
.\Debug\bg_misc.obj
|
.\Debug\bg_misc.obj
|
||||||
|
@ -41,17 +65,42 @@ Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP9D1.tmp" with con
|
||||||
.\Debug\q_shared.obj
|
.\Debug\q_shared.obj
|
||||||
.\Debug\ui_shared.obj
|
.\Debug\ui_shared.obj
|
||||||
]
|
]
|
||||||
Creating command line "link.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP9D1.tmp"
|
Creating command line "link.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSPBC.tmp"
|
||||||
<h3>Output Window</h3>
|
<h3>Output Window</h3>
|
||||||
Compiling...
|
Compiling...
|
||||||
|
bg_misc.c
|
||||||
|
bg_pmove.c
|
||||||
|
bg_slidemove.c
|
||||||
|
cg_consolecmds.c
|
||||||
|
cg_draw.c
|
||||||
|
cg_drawtools.c
|
||||||
cg_effects.c
|
cg_effects.c
|
||||||
|
cg_ents.c
|
||||||
|
cg_event.c
|
||||||
|
cg_info.c
|
||||||
|
cg_localents.c
|
||||||
|
cg_main.c
|
||||||
|
cg_marks.c
|
||||||
|
cg_players.c
|
||||||
|
cg_playerstate.c
|
||||||
|
cg_predict.c
|
||||||
|
cg_scoreboard.c
|
||||||
|
cg_servercmds.c
|
||||||
|
cg_snapshot.c
|
||||||
|
cg_syscalls.c
|
||||||
|
cg_view.c
|
||||||
|
cg_weapons.c
|
||||||
|
q_math.c
|
||||||
|
C:\Development\reaction\cgame\cg_weapons.c(1600) : warning C4700: local variable 'Offset' used without having been initialized
|
||||||
|
q_shared.c
|
||||||
|
ui_shared.c
|
||||||
Linking...
|
Linking...
|
||||||
Creating library Debug/cgamex86.lib and object Debug/cgamex86.exp
|
Creating library Debug/cgamex86.lib and object Debug/cgamex86.exp
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Results</h3>
|
<h3>Results</h3>
|
||||||
cgamex86.dll - 0 error(s), 0 warning(s)
|
cgamex86.dll - 0 error(s), 1 warning(s)
|
||||||
</pre>
|
</pre>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.32 2002/04/03 03:13:16 blaze
|
||||||
|
// NEW BREAKABLE CODE - will break all old breakables(wont appear in maps)
|
||||||
|
//
|
||||||
// Revision 1.31 2002/03/31 03:31:24 jbravo
|
// Revision 1.31 2002/03/31 03:31:24 jbravo
|
||||||
// Compiler warning cleanups
|
// Compiler warning cleanups
|
||||||
//
|
//
|
||||||
|
@ -1410,6 +1413,7 @@ char *eventnames[] = {
|
||||||
"EV_BREAK_GLASS1", // Blaze: Breakable glass
|
"EV_BREAK_GLASS1", // Blaze: Breakable glass
|
||||||
"EV_BREAK_GLASS2",
|
"EV_BREAK_GLASS2",
|
||||||
"EV_BREAK_GLASS3",
|
"EV_BREAK_GLASS3",
|
||||||
|
"EV_CHIP_GLASS", //Blaze: this even just breaks it a little bit.
|
||||||
"EV_SCOREPLUM", // score plum
|
"EV_SCOREPLUM", // score plum
|
||||||
|
|
||||||
//#ifdef MISSIONPACK
|
//#ifdef MISSIONPACK
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.54 2002/04/03 03:13:16 blaze
|
||||||
|
// NEW BREAKABLE CODE - will break all old breakables(wont appear in maps)
|
||||||
|
//
|
||||||
// Revision 1.53 2002/03/30 17:37:48 jbravo
|
// Revision 1.53 2002/03/30 17:37:48 jbravo
|
||||||
// Added damage tracking to the server. Added zcam flic mode. cleaned up g_damage.
|
// Added damage tracking to the server. Added zcam flic mode. cleaned up g_damage.
|
||||||
//
|
//
|
||||||
|
@ -125,6 +128,9 @@
|
||||||
#define DLIGHT_PULSE 4
|
#define DLIGHT_PULSE 4
|
||||||
#define DLIGHT_STROBE 8
|
#define DLIGHT_STROBE 8
|
||||||
|
|
||||||
|
//Blaze: Max number of breakables
|
||||||
|
#define RQ3_MAX_BREAKABLES 10
|
||||||
|
|
||||||
//Old debris definitions
|
//Old debris definitions
|
||||||
//Elder: debris bit parms to pass to break_glass - maybe I should enum this?
|
//Elder: debris bit parms to pass to break_glass - maybe I should enum this?
|
||||||
/*
|
/*
|
||||||
|
@ -875,8 +881,8 @@ typedef enum {
|
||||||
EV_FOOTWADE,
|
EV_FOOTWADE,
|
||||||
EV_SWIM,
|
EV_SWIM,
|
||||||
|
|
||||||
// JBravo: for func_explosive
|
//Blaze: For exploding breakables
|
||||||
EV_GIB_GLASS,
|
EV_EXPLODE_BREAKABLE,
|
||||||
|
|
||||||
EV_STEP_4,
|
EV_STEP_4,
|
||||||
EV_STEP_8,
|
EV_STEP_8,
|
||||||
|
@ -976,7 +982,8 @@ typedef enum {
|
||||||
EV_BREAK_GLASS1, // Blaze: Breakable glass
|
EV_BREAK_GLASS1, // Blaze: Breakable glass
|
||||||
EV_BREAK_GLASS2,
|
EV_BREAK_GLASS2,
|
||||||
EV_BREAK_GLASS3,
|
EV_BREAK_GLASS3,
|
||||||
EV_SCOREPLUM, // score plum
|
EV_CHIP_GLASS, //Blaze: this even just breaks it a little bit.
|
||||||
|
EV_SCOREPLUM, // score plum
|
||||||
|
|
||||||
//#ifdef MISSIONPACK
|
//#ifdef MISSIONPACK
|
||||||
EV_PROXIMITY_MINE_STICK,
|
EV_PROXIMITY_MINE_STICK,
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.69 2002/04/03 03:13:16 blaze
|
||||||
|
// NEW BREAKABLE CODE - will break all old breakables(wont appear in maps)
|
||||||
|
//
|
||||||
// Revision 1.68 2002/04/02 20:23:12 jbravo
|
// Revision 1.68 2002/04/02 20:23:12 jbravo
|
||||||
// Bots dont get to use any specmode other than FREE and the recive radio cmds
|
// Bots dont get to use any specmode other than FREE and the recive radio cmds
|
||||||
// as text and not sounds.
|
// as text and not sounds.
|
||||||
|
@ -104,7 +107,7 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Copyright (C) 1999-2000 Id Software, Inc.
|
// Copyright (C) 1999-2000 Id Software, Inc.
|
||||||
//
|
//
|
||||||
|
#define __ZCAM__
|
||||||
#include "g_local.h"
|
#include "g_local.h"
|
||||||
// JBravo: need TP functions
|
// JBravo: need TP functions
|
||||||
#include "g_teamplay.h"
|
#include "g_teamplay.h"
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.60 2002/04/03 03:13:16 blaze
|
||||||
|
// NEW BREAKABLE CODE - will break all old breakables(wont appear in maps)
|
||||||
|
//
|
||||||
// Revision 1.59 2002/04/02 20:23:12 jbravo
|
// Revision 1.59 2002/04/02 20:23:12 jbravo
|
||||||
// Bots dont get to use any specmode other than FREE and the recive radio cmds
|
// Bots dont get to use any specmode other than FREE and the recive radio cmds
|
||||||
// as text and not sounds.
|
// as text and not sounds.
|
||||||
|
@ -125,6 +128,9 @@
|
||||||
// JBravo: fixme. Hack to use SelectInitialSpawnPoint() in ClientSpawn.
|
// JBravo: fixme. Hack to use SelectInitialSpawnPoint() in ClientSpawn.
|
||||||
gentity_t *SelectInitialSpawnPoint( vec3_t origin, vec3_t angles );
|
gentity_t *SelectInitialSpawnPoint( vec3_t origin, vec3_t angles );
|
||||||
|
|
||||||
|
//Blaze:for the breakable code
|
||||||
|
char rq3_breakables[RQ3_MAX_BREAKABLES][80];
|
||||||
|
|
||||||
#define RQ3_NONAMEPLAYER "Nameless"
|
#define RQ3_NONAMEPLAYER "Nameless"
|
||||||
|
|
||||||
// g_client.c -- client functions that don't happen every frame
|
// g_client.c -- client functions that don't happen every frame
|
||||||
|
@ -1096,6 +1102,27 @@ int G_SendCheatVars(int clientNum)
|
||||||
}
|
}
|
||||||
return qtrue;
|
return qtrue;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
===============
|
||||||
|
G_SendBreakableInfo
|
||||||
|
sends out info to the clients about the breakables to load
|
||||||
|
===============
|
||||||
|
*/
|
||||||
|
|
||||||
|
int G_SendBreakableInfo(int clientNum)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
char cl_breakableinfo[128];
|
||||||
|
for (i=0;i< RQ3_MAX_BREAKABLES; i++)
|
||||||
|
{
|
||||||
|
if ( (strcmp(rq3_breakables[i],"") ) )
|
||||||
|
{
|
||||||
|
Com_sprintf(cl_breakableinfo, sizeof(cl_breakableinfo), "breakable %d %s\n",i,rq3_breakables[i]);
|
||||||
|
trap_SendServerCommand(clientNum, va("%s",cl_breakableinfo));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===========
|
===========
|
||||||
|
@ -1205,6 +1232,16 @@ char *ClientConnect( int clientNum, qboolean firstTime, qboolean isBot ) {
|
||||||
RQ3_SpectatorMode(ent);
|
RQ3_SpectatorMode(ent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Blaze: Send out the breakable names to the clients
|
||||||
|
if (!isBot && G_SendBreakableInfo(clientNum))
|
||||||
|
{
|
||||||
|
Com_Printf("Error sending breakable info to client\n");
|
||||||
|
}
|
||||||
|
// for statistics
|
||||||
|
// client->areabits = areabits;
|
||||||
|
// if ( !client->areabits )
|
||||||
|
// client->areabits = G_Alloc( (trap_AAS_PointReachabilityAreaIndex( NULL ) + 7) / 8 );
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.56 2002/04/03 03:13:16 blaze
|
||||||
|
// NEW BREAKABLE CODE - will break all old breakables(wont appear in maps)
|
||||||
|
//
|
||||||
// Revision 1.55 2002/03/31 03:31:24 jbravo
|
// Revision 1.55 2002/03/31 03:31:24 jbravo
|
||||||
// Compiler warning cleanups
|
// Compiler warning cleanups
|
||||||
//
|
//
|
||||||
|
@ -1455,9 +1458,14 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker,
|
||||||
}
|
}
|
||||||
|
|
||||||
//Blaze: If we shot a breakable item subtract the damage from its health and try to break it
|
//Blaze: If we shot a breakable item subtract the damage from its health and try to break it
|
||||||
if (targ->s.eType == ET_BREAKABLE) {
|
if ( targ->s.eType == ET_BREAKABLE )
|
||||||
targ->health -= damage;
|
{
|
||||||
G_BreakGlass(targ, point, mod);
|
if (!targ->unbreakable)
|
||||||
|
{
|
||||||
|
|
||||||
|
targ->health -= damage;
|
||||||
|
}
|
||||||
|
G_BreakGlass( targ, inflictor, attacker, point, mod, damage );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1523,6 +1531,9 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker,
|
||||||
//Elder: do some calculation here?
|
//Elder: do some calculation here?
|
||||||
knockback = 400;
|
knockback = 400;
|
||||||
break;
|
break;
|
||||||
|
case MOD_TRIGGER_HURT:
|
||||||
|
knockback = (int)(0.75 * damage);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_Printf("G_Damage: Received unknown MOD - using default knockback\n");
|
G_Printf("G_Damage: Received unknown MOD - using default knockback\n");
|
||||||
knockback = 50;
|
knockback = 50;
|
||||||
|
@ -1660,7 +1671,7 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker,
|
||||||
// Elder: removed M3, handcannon, and grenades from location damage code
|
// Elder: removed M3, handcannon, and grenades from location damage code
|
||||||
|
|
||||||
if (take && (mod == MOD_M3 || mod == MOD_HANDCANNON ||
|
if (take && (mod == MOD_M3 || mod == MOD_HANDCANNON ||
|
||||||
mod == MOD_GRENADE || mod == MOD_GRENADE_SPLASH)) {
|
mod == MOD_GRENADE || mod == MOD_GRENADE_SPLASH || mod == MOD_TRIGGER_HURT)) {
|
||||||
bleeding = 1;
|
bleeding = 1;
|
||||||
instant_dam = 0;
|
instant_dam = 0;
|
||||||
|
|
||||||
|
@ -2062,10 +2073,11 @@ qboolean G_RadiusDamage ( vec3_t origin, gentity_t *attacker, float damage, floa
|
||||||
if ( dist > radius ) {
|
if ( dist > radius ) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
//Blaze: lets use the q3 damage because it works the same for grenades, but lets breakables work better.
|
||||||
// Q2 radius damage
|
// Q2 radius damage
|
||||||
points = damage - 0.5f * dist;
|
//points = damage - 0.5f * dist;
|
||||||
// Q3 radius damage
|
// Q3 radius damage
|
||||||
//points = damage * ( 1.0 - dist / radius );
|
points = damage * ( 1.0 - dist / radius );
|
||||||
|
|
||||||
//Elder: reduce grenade damage if crouching
|
//Elder: reduce grenade damage if crouching
|
||||||
if (ent->r.maxs[2] < 20)
|
if (ent->r.maxs[2] < 20)
|
||||||
|
@ -2073,7 +2085,7 @@ qboolean G_RadiusDamage ( vec3_t origin, gentity_t *attacker, float damage, floa
|
||||||
points = points * 0.5f; // hefty reduction in damage
|
points = points * 0.5f; // hefty reduction in damage
|
||||||
}
|
}
|
||||||
|
|
||||||
if( CanDamage (ent, origin) ) {
|
if( CanDamage (ent, origin) ) {
|
||||||
if( LogAccuracyHit( ent, attacker ) ) {
|
if( LogAccuracyHit( ent, attacker ) ) {
|
||||||
hitClient = qtrue;
|
hitClient = qtrue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.64 2002/04/03 03:13:16 blaze
|
||||||
|
// NEW BREAKABLE CODE - will break all old breakables(wont appear in maps)
|
||||||
|
//
|
||||||
// Revision 1.63 2002/04/02 00:56:18 jbravo
|
// Revision 1.63 2002/04/02 00:56:18 jbravo
|
||||||
// Removed the zcam defines again and did some cleanups
|
// Removed the zcam defines again and did some cleanups
|
||||||
//
|
//
|
||||||
|
@ -249,11 +252,20 @@ struct gentity_s {
|
||||||
void (*use)(gentity_t *self, gentity_t *other, gentity_t *activator);
|
void (*use)(gentity_t *self, gentity_t *other, gentity_t *activator);
|
||||||
void (*pain)(gentity_t *self, gentity_t *attacker, int damage);
|
void (*pain)(gentity_t *self, gentity_t *attacker, int damage);
|
||||||
void (*die)(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod);
|
void (*die)(gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod);
|
||||||
int pain_debounce_time;
|
|
||||||
int fly_sound_debounce_time; // wind tunnel
|
int pain_debounce_time;
|
||||||
int last_move_time;
|
int fly_sound_debounce_time; // wind tunnel
|
||||||
int health;
|
int last_move_time;
|
||||||
qboolean takedamage;
|
|
||||||
|
int health;
|
||||||
|
//Blaze: holds if we can "chip" off peices
|
||||||
|
qboolean chippable;
|
||||||
|
//true if we cant break it
|
||||||
|
qboolean unbreakable;
|
||||||
|
//true if it's explosive
|
||||||
|
qboolean explosive;
|
||||||
|
|
||||||
|
qboolean takedamage;
|
||||||
int damage;
|
int damage;
|
||||||
int splashDamage; // quad will increase this without increasing radius
|
int splashDamage; // quad will increase this without increasing radius
|
||||||
int splashRadius;
|
int splashRadius;
|
||||||
|
@ -283,6 +295,7 @@ struct gentity_s {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
CON_DISCONNECTED,
|
CON_DISCONNECTED,
|
||||||
CON_CONNECTING,
|
CON_CONNECTING,
|
||||||
|
@ -791,7 +804,7 @@ void DropPortalSource( gentity_t *ent );
|
||||||
void DropPortalDestination( gentity_t *ent );
|
void DropPortalDestination( gentity_t *ent );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void G_BreakGlass( gentity_t *ent, vec3_t point, int mod );//Blaze: Breakable glass
|
void G_BreakGlass( gentity_t *ent, gentity_t *inflictor, gentity_t *attacker, vec3_t point, int mod, int damage );//Blaze: Breakable glass
|
||||||
void G_RunDlight ( gentity_t *ent ); // Elder: dlight running
|
void G_RunDlight ( gentity_t *ent ); // Elder: dlight running
|
||||||
void G_EvaluateTrajectory( const trajectory_t *tr, int atTime, vec3_t result );
|
void G_EvaluateTrajectory( const trajectory_t *tr, int atTime, vec3_t result );
|
||||||
void G_EvaluateTrajectoryDelta( const trajectory_t *tr, int atTime, vec3_t result );
|
void G_EvaluateTrajectoryDelta( const trajectory_t *tr, int atTime, vec3_t result );
|
||||||
|
@ -838,6 +851,8 @@ void InitBodyQue (void);
|
||||||
void ClientSpawn( gentity_t *ent );
|
void ClientSpawn( gentity_t *ent );
|
||||||
//Blaze: for the cheat vars stuff
|
//Blaze: for the cheat vars stuff
|
||||||
int G_SendCheatVars(int);
|
int G_SendCheatVars(int);
|
||||||
|
//Blaze: for the breakable stuff
|
||||||
|
int G_SendBreakableInfo(int);
|
||||||
void player_die (gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod);
|
void player_die (gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod);
|
||||||
void AddScore( gentity_t *ent, vec3_t origin, int score );
|
void AddScore( gentity_t *ent, vec3_t origin, int score );
|
||||||
void CalculateRanks( void );
|
void CalculateRanks( void );
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.26 2002/04/03 03:13:16 blaze
|
||||||
|
// NEW BREAKABLE CODE - will break all old breakables(wont appear in maps)
|
||||||
|
//
|
||||||
// Revision 1.25 2002/03/31 03:31:24 jbravo
|
// Revision 1.25 2002/03/31 03:31:24 jbravo
|
||||||
// Compiler warning cleanups
|
// Compiler warning cleanups
|
||||||
//
|
//
|
||||||
|
@ -42,6 +45,9 @@
|
||||||
|
|
||||||
#include "g_local.h"
|
#include "g_local.h"
|
||||||
|
|
||||||
|
extern char rq3_breakables[RQ3_MAX_BREAKABLES][80];
|
||||||
|
|
||||||
|
void G_ExplodeMissile( gentity_t *ent );
|
||||||
|
|
||||||
/*QUAKED func_group (0 0 0) ?
|
/*QUAKED func_group (0 0 0) ?
|
||||||
Used to group brushes together just for editor convenience. They are turned into normal brushes by the utilities.
|
Used to group brushes together just for editor convenience. They are turned into normal brushes by the utilities.
|
||||||
|
@ -413,75 +419,95 @@ Fires at either the target or the current direction.
|
||||||
//void SP_shooter_grenade( gentity_t *ent ) {
|
//void SP_shooter_grenade( gentity_t *ent ) {
|
||||||
// InitShooter( ent, WP_GRENADE_LAUNCHER);
|
// InitShooter( ent, WP_GRENADE_LAUNCHER);
|
||||||
//}
|
//}
|
||||||
|
// Blaze: adding for func_breakable explosions
|
||||||
|
void func_breakable_explode( gentity_t *self , vec3_t pos ) {
|
||||||
|
int eParam;
|
||||||
|
gentity_t *tent;
|
||||||
|
// GibEntity( self, 0 );
|
||||||
|
eParam = self->s.eventParm;
|
||||||
|
|
||||||
|
tent = G_TempEntity2( pos, EV_EXPLODE_BREAKABLE, eParam);
|
||||||
|
|
||||||
|
self->takedamage = qfalse;
|
||||||
|
self->s.eType = ET_INVISIBLE;
|
||||||
|
self->r.contents = 0;
|
||||||
|
self->s.solid = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Blaze: adding for func_breakable explosions
|
||||||
|
|
||||||
|
void func_breakable_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int meansOfDeath )
|
||||||
|
{
|
||||||
|
|
||||||
|
G_RadiusDamage(self->s.origin,attacker,self->damage,self->damage_radius,self, meansOfDeath);
|
||||||
|
|
||||||
|
func_breakable_explode( self , self->s.origin );
|
||||||
|
G_ExplodeMissile(self);
|
||||||
|
// radius damage
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//Blaze: Breakable glasss
|
|
||||||
//Elder: Breakable anything!* -- we define, that is
|
//Elder: Breakable anything!* -- we define, that is
|
||||||
/*QUAKED func_breakable (1 0 0) (-16 -16 -16) (16 16 16)
|
/*QUAKED func_breakable (0 .5 .8) ? CHIPPABLE UNBREAKABLE EXPLOSIVE
|
||||||
Explodes any defined type of debris
|
Breakable object entity that breaks, chips or explodes when damaged.
|
||||||
"health" overrides the default health value of 5
|
-------- KEYS --------
|
||||||
"debris" overrides the default glass shards
|
health : determines the strength of the glass (default 5).
|
||||||
0 - glass
|
id : a unique identification. Each type of breakable in a given map needs to have a separate id. Valid values are 0 through 63.
|
||||||
1 - wood
|
type : type of breakable. See notes below.
|
||||||
2 - metal
|
amount : sets the number of fragments to generate when the entity breaks. 0 ~ 10 pieces; 1 ~ 25 pieces; 2 ~ 50 pieces; 3 ~ lots of pieces (default 0).
|
||||||
3 - ceramics
|
damage : sets the amount of damage dealt to nearbly players if the entity is made to be explosive (default 100).
|
||||||
4 - paper
|
damage_radius : sets the maximum distance from the explosion players will take damage (default 128).
|
||||||
5 - brick
|
-------- SPAWNFLAGS --------
|
||||||
6 - concrete
|
CHIPPABLE : little pieces will spawn when the entity is shot.
|
||||||
"amount" overrides the default quantity
|
UNBREAKABLE : entity will never break. To make the entity chip, but never break, check the first two spawnflags. To make the entity chip and eventually break, only set the first spawnflag.
|
||||||
0 - small: about 10 pieces
|
EXPLOSIVE : entity will explode.
|
||||||
1 - medium: about 25 pieces
|
-------- NOTES --------
|
||||||
2 - large: about 50 pieces
|
Breakables are defined in sets by the 'type' key (e.g. type : glass, type : wood). Each type used in a map must be given a unique id number. Each entity of a particular type must have the same id number (i.e. if your first glass breakable has id : 1, then every glass breakable must have id : 1). To add custom breakables, use this format:
|
||||||
3 - tons (watch out when using this)
|
|
||||||
"variation" (0 to 3) allows you to pick one of 4 variations
|
Models: breakables/type/models/break1.md3, breakables/type/models/break2.md3, breakables/type/models/break3.md3
|
||||||
|
Type is the value set in the type key. No more, no less than three models are required. The names must be break#. Texture/shader information is contained in the .md3 file just like regular mapobjects.
|
||||||
*/
|
|
||||||
|
Sounds: breakables/type/sounds/break1.wav, breakables/type/sounds/break2.wav, breakables/type/sounds/break3.wav, breakables/type/sounds/explosion.wav
|
||||||
|
Type is the value set in the type key. No more, no less than three break sounds are required. The names must be break#. If the entity will be exploding (explosive : 1), then the explosion.wav sound must be included as well.
|
||||||
|
|
||||||
|
Explosion graphic: breakables/type/explosion/texture
|
||||||
|
Type is the value set in the type key. Texture is any texture(s) referenced by the explosion shader. The shader script should be added to yourmap.shader.
|
||||||
|
|
||||||
|
If you wish to add a custom breakable to your map, please include your mapname (or perhaps 3 letters of it) in the type name to prevent conflicts (i.e. don't use 'brick', use 'tequila_brick' or just 'teq_brick'). See the breakables folder included in Reaction Quake 3 for the proper format.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void SP_func_breakable( gentity_t *ent ) {
|
void SP_func_breakable( gentity_t *ent ) {
|
||||||
int health;
|
int health;
|
||||||
int amount;
|
int amount;
|
||||||
int variation;
|
int id;
|
||||||
int debris;
|
int temp;
|
||||||
int temp;
|
int damage;
|
||||||
|
int damage_radius;
|
||||||
|
char *name;
|
||||||
|
|
||||||
// Make it appear as the brush
|
// Make it appear as the brush
|
||||||
trap_SetBrushModel( ent, ent->model );
|
trap_SetBrushModel( ent, ent->model );
|
||||||
|
|
||||||
// Setup health of breakable
|
// Setup health of breakable
|
||||||
G_SpawnInt( "health", "0", &health );
|
G_SpawnInt( "health", "0", &health );
|
||||||
if( health <= 0 )
|
if( health <= 0 ) health = 5;
|
||||||
health = 5;
|
|
||||||
|
G_SpawnInt("damage","170", &damage);
|
||||||
|
|
||||||
|
ent->damage = damage;
|
||||||
|
|
||||||
|
G_SpawnInt("damage_radius","340", &damage_radius);
|
||||||
|
|
||||||
|
ent->damage_radius = damage_radius;
|
||||||
|
|
||||||
|
|
||||||
// Setup debris type
|
|
||||||
G_SpawnInt( "debris", "0", &temp );
|
|
||||||
switch (temp)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
debris = RQ3_DEBRIS_GLASS;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
debris = RQ3_DEBRIS_WOOD;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
debris = RQ3_DEBRIS_METAL;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
debris = RQ3_DEBRIS_CERAMIC;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
debris = RQ3_DEBRIS_PAPER;
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
debris = RQ3_DEBRIS_BRICK;
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
debris = RQ3_DEBRIS_CONCRETE;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
debris = RQ3_DEBRIS_GLASS;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Setup amount type
|
// Setup amount type
|
||||||
G_SpawnInt( "amount", "0", &temp );
|
G_SpawnInt( "amount", "0", &temp );
|
||||||
|
|
||||||
switch (temp)
|
switch (temp)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -500,43 +526,79 @@ void SP_func_breakable( gentity_t *ent ) {
|
||||||
amount = RQ3_DEBRIS_MEDIUM;
|
amount = RQ3_DEBRIS_MEDIUM;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if ( ent->spawnflags & 1)
|
||||||
// Setup variation type
|
{
|
||||||
G_SpawnInt( "variation", "0", &temp);
|
ent->chippable = qtrue;
|
||||||
switch (temp)
|
}
|
||||||
{
|
else
|
||||||
case 0:
|
{
|
||||||
variation = 0;
|
ent->chippable = qfalse;
|
||||||
break;
|
}
|
||||||
case 1:
|
|
||||||
variation = RQ3_DEBRIS_VAR1;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
variation = RQ3_DEBRIS_VAR2;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
variation = RQ3_DEBRIS_VAR1|RQ3_DEBRIS_VAR2;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
variation = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if ( ent->spawnflags & 2)
|
||||||
|
{
|
||||||
|
ent->unbreakable = qtrue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ent->unbreakable = qfalse;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ent->spawnflags & 4)
|
||||||
|
{
|
||||||
|
ent->explosive = qtrue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ent->explosive = qfalse;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !ent->damage_radius )
|
||||||
|
{
|
||||||
|
ent->damage_radius=GRENADE_SPLASH_RADIUS;
|
||||||
|
}
|
||||||
|
|
||||||
|
G_SpawnInt( "id","0", &id);
|
||||||
|
if (id < 0 || id >= RQ3_MAX_BREAKABLES )
|
||||||
|
{
|
||||||
|
G_Printf("^2ERROR: ID too high\n");
|
||||||
|
G_FreeEntity( ent );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (G_SpawnString( "name", "", &name) )
|
||||||
|
{
|
||||||
|
Q_strncpyz(rq3_breakables[id],name,80);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
G_Printf("^2ERROR: broken breakable name (%s)\n", rq3_breakables[id]);
|
||||||
|
G_FreeEntity( ent );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
amount = amount << 6;
|
||||||
|
|
||||||
|
id = id & 0x0FFF;
|
||||||
//Elder: merge the bits
|
//Elder: merge the bits
|
||||||
ent->s.eventParm = amount|variation|debris;
|
ent->s.eventParm = amount | id ;
|
||||||
|
|
||||||
ent->health = health;
|
|
||||||
ent->takedamage = qtrue;
|
|
||||||
|
|
||||||
// Let it know it is a breakable object
|
ent->health = health;
|
||||||
ent->s.eType = ET_BREAKABLE;
|
ent->takedamage = qtrue;
|
||||||
|
|
||||||
// If the mapper gave it a model, use it
|
|
||||||
if ( ent->model2 ) {
|
|
||||||
ent->s.modelindex2 = G_ModelIndex( ent->model2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
trap_LinkEntity (ent);
|
ent->s.origin[0] = ent->r.mins[0] + (0.5 * (ent->r.maxs[0] - ent->r.mins[0]));
|
||||||
|
ent->s.origin[1] = ent->r.mins[1] + (0.5 * (ent->r.maxs[1] - ent->r.mins[1]));
|
||||||
|
ent->s.origin[2] = ent->r.mins[2] + (0.5 * (ent->r.maxs[2] - ent->r.mins[2]));
|
||||||
|
|
||||||
|
// Let it know it is a breakable object
|
||||||
|
ent->s.eType = ET_BREAKABLE;
|
||||||
|
|
||||||
|
// If the mapper gave it a model, use it
|
||||||
|
if ( ent->model2 ) {
|
||||||
|
ent->s.modelindex2 = G_ModelIndex( ent->model2 );
|
||||||
|
}
|
||||||
|
|
||||||
|
trap_LinkEntity (ent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -548,7 +610,7 @@ Create/process a breakable event entity
|
||||||
Original by inolen, heavy modifications by Elder
|
Original by inolen, heavy modifications by Elder
|
||||||
=================
|
=================
|
||||||
*/
|
*/
|
||||||
void G_BreakGlass( gentity_t *ent, vec3_t point, int mod )
|
void G_BreakGlass( gentity_t *ent, gentity_t *inflictor, gentity_t *attacker, vec3_t point, int mod, int damage )
|
||||||
{
|
{
|
||||||
gentity_t *tent;
|
gentity_t *tent;
|
||||||
vec3_t size;
|
vec3_t size;
|
||||||
|
@ -565,11 +627,11 @@ void G_BreakGlass( gentity_t *ent, vec3_t point, int mod )
|
||||||
//This way, the mappers can use a single func_breakable
|
//This way, the mappers can use a single func_breakable
|
||||||
//while we process it on the server-side.
|
//while we process it on the server-side.
|
||||||
//Places to stuff: eventParm
|
//Places to stuff: eventParm
|
||||||
|
eParm = ent->s.eventParm;
|
||||||
if( ent->health <= 0 ) {
|
if( ent->health <= 0 ) {
|
||||||
//G_Printf("Original eParm: %i \n", ent->s.eventParm);
|
//G_Printf("Original eParm: %i \n", ent->s.eventParm);
|
||||||
//Copy the first four bits and strip them out of the original
|
//Copy the first four bits and strip them out of the original
|
||||||
eParm = ent->s.eventParm & 15;
|
/* eParm = ent->s.eventParm & 15;
|
||||||
ent->s.eventParm &= ~eParm;
|
ent->s.eventParm &= ~eParm;
|
||||||
|
|
||||||
//Shift-op loop
|
//Shift-op loop
|
||||||
|
@ -580,7 +642,7 @@ void G_BreakGlass( gentity_t *ent, vec3_t point, int mod )
|
||||||
}
|
}
|
||||||
|
|
||||||
eParm |= ent->s.eventParm;
|
eParm |= ent->s.eventParm;
|
||||||
|
*/
|
||||||
//eParm should now be under 1 byte and shiftCount >= 0
|
//eParm should now be under 1 byte and shiftCount >= 0
|
||||||
//G_Printf("New eParm: %i Shifts: %i\n", eParm, shiftCount);
|
//G_Printf("New eParm: %i Shifts: %i\n", eParm, shiftCount);
|
||||||
|
|
||||||
|
@ -609,6 +671,11 @@ void G_BreakGlass( gentity_t *ent, vec3_t point, int mod )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if (ent->explosive)
|
||||||
|
{
|
||||||
|
mod = MOD_TRIGGER_HURT;
|
||||||
|
func_breakable_die(ent, inflictor, attacker, damage, mod);
|
||||||
|
}
|
||||||
G_FreeEntity( ent );
|
G_FreeEntity( ent );
|
||||||
//G_Printf("%s shift: %i\n", vtos(impactPoint), shiftCount);
|
//G_Printf("%s shift: %i\n", vtos(impactPoint), shiftCount);
|
||||||
switch ( shiftCount )
|
switch ( shiftCount )
|
||||||
|
@ -626,11 +693,61 @@ void G_BreakGlass( gentity_t *ent, vec3_t point, int mod )
|
||||||
G_Error("G_BreakGlass: shiftCount > 2\n");
|
G_Error("G_BreakGlass: shiftCount > 2\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//G_Printf("eType: %i\n", tent->s.event & ~EV_EVENT_BITS);
|
//G_Printf("eType: %i\n", tent->s.event & ~EV_EVENT_BITS);
|
||||||
//Elder: use TempEntity2 to stuff params
|
//Elder: use TempEntity2 to stuff params
|
||||||
//tent = G_TempEntity( center, EV_BREAK_GLASS );
|
//tent = G_TempEntity( center, EV_BREAK_GLASS );
|
||||||
//tent->s.eventParm = eParm;
|
//tent->s.eventParm = eParm;
|
||||||
}
|
}
|
||||||
|
else if(ent->chippable)
|
||||||
|
{
|
||||||
|
//Stil has some life left, so chip it
|
||||||
|
//Copy the first four bits and strip them out of the original
|
||||||
|
/*eParm = ent->s.eventParm & 15;
|
||||||
|
ent->s.eventParm &= ~eParm;
|
||||||
|
|
||||||
|
//Shift-op loop
|
||||||
|
while (ent->s.eventParm > 255)
|
||||||
|
{
|
||||||
|
shiftCount++;
|
||||||
|
ent->s.eventParm = ent->s.eventParm >> 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
eParm |= ent->s.eventParm;
|
||||||
|
*/
|
||||||
|
//eParm should now be under 1 byte and shiftCount >= 0
|
||||||
|
//G_Printf("New eParm: %i Shifts: %i\n", eParm, shiftCount);
|
||||||
|
|
||||||
|
// Tell the program based on the gun if it was caused by splash damage
|
||||||
|
switch( mod ) {
|
||||||
|
//Elder: added + compacted
|
||||||
|
case MOD_KNIFE:
|
||||||
|
case MOD_KNIFE_THROWN:
|
||||||
|
case MOD_MP5:
|
||||||
|
case MOD_M4:
|
||||||
|
case MOD_M3:
|
||||||
|
case MOD_PISTOL:
|
||||||
|
case MOD_HANDCANNON:
|
||||||
|
case MOD_AKIMBO:
|
||||||
|
case MOD_SNIPER:
|
||||||
|
case MOD_GAUNTLET:
|
||||||
|
case MOD_KICK:
|
||||||
|
//Use actual impact point
|
||||||
|
VectorCopy(point, impactPoint);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
//Splash damage weapons: use center of the glass
|
||||||
|
VectorSubtract(ent->r.maxs, ent->r.mins, size);
|
||||||
|
VectorScale(size, 0.5, size);
|
||||||
|
VectorAdd(ent->r.mins, size, impactPoint);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
//G_FreeEntity( ent );
|
||||||
|
//G_Printf("%s shift: %i\n", vtos(impactPoint), shiftCount);
|
||||||
|
tent = G_TempEntity2( impactPoint, EV_CHIP_GLASS, eParm);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.24 2002/04/03 03:13:16 blaze
|
||||||
|
// NEW BREAKABLE CODE - will break all old breakables(wont appear in maps)
|
||||||
|
//
|
||||||
// Revision 1.23 2002/03/31 03:31:24 jbravo
|
// Revision 1.23 2002/03/31 03:31:24 jbravo
|
||||||
// Compiler warning cleanups
|
// Compiler warning cleanups
|
||||||
//
|
//
|
||||||
|
@ -2297,31 +2300,9 @@ void SP_func_pendulum(gentity_t *ent) {
|
||||||
ent->s.apos.trDelta[2] = speed;
|
ent->s.apos.trDelta[2] = speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
// JBravo: adding for func_explosive
|
//Blaze: Merged into func_breakable in g_misc.c
|
||||||
void func_explosive_explode( gentity_t *self , vec3_t pos ) {
|
|
||||||
int eParam;
|
|
||||||
// GibEntity( self, 0 );
|
|
||||||
eParam = self->mass;
|
|
||||||
G_AddEvent(self, EV_GIB_GLASS, eParam);
|
|
||||||
|
|
||||||
// G_Printf("Explode_explode\n" );
|
|
||||||
self->takedamage = qfalse;
|
|
||||||
self->s.eType = ET_INVISIBLE;
|
|
||||||
self->r.contents = 0;
|
|
||||||
self->s.solid = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// JBravo: adding for func_explosive
|
|
||||||
void func_explosive_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int meansOfDeath )
|
|
||||||
{
|
|
||||||
G_RadiusDamage(self->s.origin,attacker,self->damage,self->damage_radius,self,0);
|
|
||||||
|
|
||||||
// G_Printf("%s: explode @ %s\n", self->classname , vtos(self->s.origin) );
|
|
||||||
G_ExplodeMissile(self);
|
|
||||||
// radius damage
|
|
||||||
func_explosive_explode( self , self->s.origin );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/*
|
||||||
// JBravo: adding for func_explosive
|
// JBravo: adding for func_explosive
|
||||||
void SP_func_explosive (gentity_t *ent)
|
void SP_func_explosive (gentity_t *ent)
|
||||||
{
|
{
|
||||||
|
@ -2347,11 +2328,12 @@ void SP_func_explosive (gentity_t *ent)
|
||||||
InitMover( ent );
|
InitMover( ent );
|
||||||
|
|
||||||
// VectorSubtract( ent->r.maxs, ent->r.mins, ent->s.origin );
|
// VectorSubtract( ent->r.maxs, ent->r.mins, ent->s.origin );
|
||||||
VectorCopy( ent->s.pos.trBase, ent->s.origin );
|
VectorCopy( ent->s.pos.trBase, ent->s.origin );*/
|
||||||
/* VectorCopy( ent->s.origin, ent->s.pos.trBase );
|
/* VectorCopy( ent->s.origin, ent->s.pos.trBase );
|
||||||
VectorCopy( ent->s.pos.trBase, ent->r.currentOrigin );
|
VectorCopy( ent->s.pos.trBase, ent->r.currentOrigin );
|
||||||
VectorCopy( ent->s.apos.trBase, ent->r.currentAngles );
|
VectorCopy( ent->s.apos.trBase, ent->r.currentAngles );
|
||||||
VectorCopy( ent->s.origin, ent->r.currentOrigin ); */
|
VectorCopy( ent->s.origin, ent->r.currentOrigin ); */
|
||||||
|
/*
|
||||||
ent->s.origin[0] = ent->r.mins[0] + (0.5 * (ent->r.maxs[0] - ent->r.mins[0]));
|
ent->s.origin[0] = ent->r.mins[0] + (0.5 * (ent->r.maxs[0] - ent->r.mins[0]));
|
||||||
ent->s.origin[1] = ent->r.mins[1] + (0.5 * (ent->r.maxs[1] - ent->r.mins[1]));
|
ent->s.origin[1] = ent->r.mins[1] + (0.5 * (ent->r.maxs[1] - ent->r.mins[1]));
|
||||||
ent->s.origin[2] = ent->r.mins[2] + (0.5 * (ent->r.maxs[2] - ent->r.mins[2]));
|
ent->s.origin[2] = ent->r.mins[2] + (0.5 * (ent->r.maxs[2] - ent->r.mins[2]));
|
||||||
|
@ -2360,7 +2342,8 @@ void SP_func_explosive (gentity_t *ent)
|
||||||
((ent->tension << 8) & 0x0F00) |
|
((ent->tension << 8) & 0x0F00) |
|
||||||
((ent->bounce << 4) & 0x00F0) |
|
((ent->bounce << 4) & 0x00F0) |
|
||||||
((ent->size) & 0x000F);
|
((ent->size) & 0x000F);
|
||||||
G_Printf("%d %d %d %d %d\n",((ent->material << 12) & 0xF000),((ent->tension << 8) & 0x0F00),((ent->bounce << 4) & 0x00F0), ((ent->size) & 0x000F), ent->s.powerups);
|
|
||||||
trap_LinkEntity( ent );
|
trap_LinkEntity( ent );
|
||||||
G_Printf("at : %s %s Material (%d)\n", vtos(ent->r.currentAngles), vtos(ent->r.currentOrigin ), ent->material );
|
G_Printf("at : %s %s Material (%d)\n", vtos(ent->r.currentAngles), vtos(ent->r.currentOrigin ), ent->material );
|
||||||
}
|
}
|
||||||
|
*/
|
|
@ -5,6 +5,9 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// $Log$
|
// $Log$
|
||||||
|
// Revision 1.14 2002/04/03 03:13:16 blaze
|
||||||
|
// NEW BREAKABLE CODE - will break all old breakables(wont appear in maps)
|
||||||
|
//
|
||||||
// Revision 1.13 2002/03/31 03:31:24 jbravo
|
// Revision 1.13 2002/03/31 03:31:24 jbravo
|
||||||
// Compiler warning cleanups
|
// Compiler warning cleanups
|
||||||
//
|
//
|
||||||
|
@ -208,9 +211,12 @@ void SP_team_blueobelisk( gentity_t *ent );
|
||||||
void SP_team_redobelisk( gentity_t *ent );
|
void SP_team_redobelisk( gentity_t *ent );
|
||||||
void SP_team_neutralobelisk( gentity_t *ent );
|
void SP_team_neutralobelisk( gentity_t *ent );
|
||||||
#endif
|
#endif
|
||||||
//void SP_item_botroam( gentity_t *ent ) {};
|
|
||||||
|
void SP_item_botroam( gentity_t *ent ) {};
|
||||||
|
//Blaze: merged func_explosive into func_breakable
|
||||||
|
|
||||||
// JBravo: adding explosive
|
// JBravo: adding explosive
|
||||||
void SP_func_explosive (gentity_t *self);
|
//void SP_func_explosive (gentity_t *self);
|
||||||
|
|
||||||
spawn_t spawns[] = {
|
spawn_t spawns[] = {
|
||||||
// info entities don't do anything at all, but provide positional
|
// info entities don't do anything at all, but provide positional
|
||||||
|
@ -286,8 +292,10 @@ spawn_t spawns[] = {
|
||||||
{"team_blueobelisk", SP_team_blueobelisk},
|
{"team_blueobelisk", SP_team_blueobelisk},
|
||||||
{"team_neutralobelisk", SP_team_neutralobelisk},
|
{"team_neutralobelisk", SP_team_neutralobelisk},
|
||||||
#endif
|
#endif
|
||||||
{"func_explosive", SP_func_explosive}, // JBravo: for explosive.
|
|
||||||
// {"item_botroam", SP_item_botroam},
|
//Blaze: Merged func_explosive into func_breakable
|
||||||
|
// {"func_explosive", SP_func_explosive}, // JBravo: for explosive.
|
||||||
|
{"item_botroam", SP_item_botroam},
|
||||||
|
|
||||||
{0, 0}
|
{0, 0}
|
||||||
};
|
};
|
||||||
|
|
|
@ -175,6 +175,10 @@ SOURCE=.\g_main.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\g_matchmode.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\g_mem.c
|
SOURCE=.\g_mem.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@ -245,6 +249,14 @@ SOURCE=.\q_shared.c
|
||||||
|
|
||||||
SOURCE=.\rxn_game.c
|
SOURCE=.\rxn_game.c
|
||||||
# End Source File
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\zcam.c
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\zcam_target.c
|
||||||
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
# Begin Group "Header Files"
|
# Begin Group "Header Files"
|
||||||
|
|
||||||
|
@ -331,6 +343,10 @@ SOURCE=.\g_local.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\g_matchmode.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\g_public.h
|
SOURCE=.\g_public.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@ -361,6 +377,10 @@ SOURCE=.\surfaceflags.h
|
||||||
|
|
||||||
SOURCE=.\syn.h
|
SOURCE=.\syn.h
|
||||||
# End Source File
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=.\zcam.h
|
||||||
|
# End Source File
|
||||||
# End Group
|
# End Group
|
||||||
# Begin Group "Resource Files"
|
# Begin Group "Resource Files"
|
||||||
|
|
||||||
|
|
|
@ -6,15 +6,51 @@
|
||||||
--------------------Configuration: game - Win32 Debug--------------------
|
--------------------Configuration: game - Win32 Debug--------------------
|
||||||
</h3>
|
</h3>
|
||||||
<h3>Command Lines</h3>
|
<h3>Command Lines</h3>
|
||||||
Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP5C.tmp" with contents
|
Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP2D7.tmp" with contents
|
||||||
[
|
[
|
||||||
/nologo /G5 /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "BUILDING_REF_GL" /D "DEBUG" /FR"c:\reactionoutput/" /Fp"c:\reactionoutput/game.pch" /YX /Fo"c:\reactionoutput/" /Fd"c:\reactionoutput/" /FD /c
|
/nologo /G5 /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "BUILDING_REF_GL" /D "DEBUG" /FR"c:\reactionoutput/" /Fp"c:\reactionoutput/game.pch" /YX /Fo"c:\reactionoutput/" /Fd"c:\reactionoutput/" /FD /c
|
||||||
|
"C:\Development\reaction\game\ai_chat.c"
|
||||||
|
"C:\Development\reaction\game\ai_cmd.c"
|
||||||
|
"C:\Development\reaction\game\ai_dmnet.c"
|
||||||
|
"C:\Development\reaction\game\ai_dmq3.c"
|
||||||
|
"C:\Development\reaction\game\ai_main.c"
|
||||||
|
"C:\Development\reaction\game\ai_team.c"
|
||||||
|
"C:\Development\reaction\game\ai_vcmd.c"
|
||||||
|
"C:\Development\reaction\game\bg_misc.c"
|
||||||
|
"C:\Development\reaction\game\bg_pmove.c"
|
||||||
|
"C:\Development\reaction\game\bg_slidemove.c"
|
||||||
|
"C:\Development\reaction\game\g_active.c"
|
||||||
|
"C:\Development\reaction\game\g_arenas.c"
|
||||||
|
"C:\Development\reaction\game\g_bot.c"
|
||||||
|
"C:\Development\reaction\game\g_client.c"
|
||||||
|
"C:\Development\reaction\game\g_cmds.c"
|
||||||
"C:\Development\reaction\game\g_combat.c"
|
"C:\Development\reaction\game\g_combat.c"
|
||||||
|
"C:\Development\reaction\game\g_fileio.c"
|
||||||
|
"C:\Development\reaction\game\g_items.c"
|
||||||
|
"C:\Development\reaction\game\g_main.c"
|
||||||
|
"C:\Development\reaction\game\g_matchmode.c"
|
||||||
|
"C:\Development\reaction\game\g_mem.c"
|
||||||
|
"C:\Development\reaction\game\g_misc.c"
|
||||||
"C:\Development\reaction\game\g_missile.c"
|
"C:\Development\reaction\game\g_missile.c"
|
||||||
|
"C:\Development\reaction\game\g_mover.c"
|
||||||
|
"C:\Development\reaction\game\g_session.c"
|
||||||
|
"C:\Development\reaction\game\g_spawn.c"
|
||||||
|
"C:\Development\reaction\game\g_svcmds.c"
|
||||||
|
"C:\Development\reaction\game\g_syscalls.c"
|
||||||
|
"C:\Development\reaction\game\g_target.c"
|
||||||
|
"C:\Development\reaction\game\g_team.c"
|
||||||
|
"C:\Development\reaction\game\g_teamplay.c"
|
||||||
|
"C:\Development\reaction\game\g_trigger.c"
|
||||||
|
"C:\Development\reaction\game\g_utils.c"
|
||||||
"C:\Development\reaction\game\g_weapon.c"
|
"C:\Development\reaction\game\g_weapon.c"
|
||||||
|
"C:\Development\reaction\game\q_math.c"
|
||||||
|
"C:\Development\reaction\game\q_shared.c"
|
||||||
|
"C:\Development\reaction\game\rxn_game.c"
|
||||||
|
"C:\Development\reaction\game\zcam.c"
|
||||||
|
"C:\Development\reaction\game\zcam_target.c"
|
||||||
]
|
]
|
||||||
Creating command line "cl.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP5C.tmp"
|
Creating command line "cl.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP2D7.tmp"
|
||||||
Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP5D.tmp" with contents
|
Creating temporary file "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP2D8.tmp" with contents
|
||||||
[
|
[
|
||||||
kernel32.lib user32.lib winmm.lib /nologo /base:"0x20000000" /subsystem:windows /dll /incremental:yes /pdb:"c:\reactionoutput/qagamex86.pdb" /map:"c:\reactionoutput/qagamex86.map" /debug /machine:I386 /def:".\game.def" /out:"..\Debug/qagamex86.dll" /implib:"c:\reactionoutput/qagamex86.lib"
|
kernel32.lib user32.lib winmm.lib /nologo /base:"0x20000000" /subsystem:windows /dll /incremental:yes /pdb:"c:\reactionoutput/qagamex86.pdb" /map:"c:\reactionoutput/qagamex86.map" /debug /machine:I386 /def:".\game.def" /out:"..\Debug/qagamex86.dll" /implib:"c:\reactionoutput/qagamex86.lib"
|
||||||
\reactionoutput\ai_chat.obj
|
\reactionoutput\ai_chat.obj
|
||||||
|
@ -36,6 +72,7 @@ kernel32.lib user32.lib winmm.lib /nologo /base:"0x20000000" /subsystem:windows
|
||||||
\reactionoutput\g_fileio.obj
|
\reactionoutput\g_fileio.obj
|
||||||
\reactionoutput\g_items.obj
|
\reactionoutput\g_items.obj
|
||||||
\reactionoutput\g_main.obj
|
\reactionoutput\g_main.obj
|
||||||
|
\reactionoutput\g_matchmode.obj
|
||||||
\reactionoutput\g_mem.obj
|
\reactionoutput\g_mem.obj
|
||||||
\reactionoutput\g_misc.obj
|
\reactionoutput\g_misc.obj
|
||||||
\reactionoutput\g_missile.obj
|
\reactionoutput\g_missile.obj
|
||||||
|
@ -53,42 +90,61 @@ kernel32.lib user32.lib winmm.lib /nologo /base:"0x20000000" /subsystem:windows
|
||||||
\reactionoutput\q_math.obj
|
\reactionoutput\q_math.obj
|
||||||
\reactionoutput\q_shared.obj
|
\reactionoutput\q_shared.obj
|
||||||
\reactionoutput\rxn_game.obj
|
\reactionoutput\rxn_game.obj
|
||||||
|
\reactionoutput\zcam.obj
|
||||||
|
\reactionoutput\zcam_target.obj
|
||||||
]
|
]
|
||||||
Creating command line "link.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP5D.tmp"
|
Creating command line "link.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP2D8.tmp"
|
||||||
<h3>Output Window</h3>
|
<h3>Output Window</h3>
|
||||||
Compiling...
|
Compiling...
|
||||||
|
ai_chat.c
|
||||||
|
ai_cmd.c
|
||||||
|
ai_dmnet.c
|
||||||
|
C:\Development\reaction\game\ai_dmnet.c(1517) : warning C4013: 'BotMoveTowardsEnt' undefined; assuming extern returning int
|
||||||
|
C:\Development\reaction\game\ai_dmnet.c(2408) : warning C4013: 'Cmd_Bandage' undefined; assuming extern returning int
|
||||||
|
ai_dmq3.c
|
||||||
|
C:\Development\reaction\game\ai_dmq3.c(2132) : warning C4013: 'Cmd_Bandage' undefined; assuming extern returning int
|
||||||
|
ai_main.c
|
||||||
|
ai_team.c
|
||||||
|
ai_vcmd.c
|
||||||
|
bg_misc.c
|
||||||
|
bg_pmove.c
|
||||||
|
bg_slidemove.c
|
||||||
|
g_active.c
|
||||||
|
g_arenas.c
|
||||||
|
g_bot.c
|
||||||
|
g_client.c
|
||||||
|
g_cmds.c
|
||||||
g_combat.c
|
g_combat.c
|
||||||
C:\Development\reaction\game\g_combat.c(1359) : warning C4101: 'max' : unreferenced local variable
|
g_fileio.c
|
||||||
|
g_items.c
|
||||||
|
g_main.c
|
||||||
|
g_matchmode.c
|
||||||
|
g_mem.c
|
||||||
|
g_misc.c
|
||||||
g_missile.c
|
g_missile.c
|
||||||
|
g_mover.c
|
||||||
|
g_session.c
|
||||||
|
g_spawn.c
|
||||||
|
g_svcmds.c
|
||||||
|
g_syscalls.c
|
||||||
|
g_target.c
|
||||||
|
g_team.c
|
||||||
|
g_teamplay.c
|
||||||
|
g_trigger.c
|
||||||
|
g_utils.c
|
||||||
g_weapon.c
|
g_weapon.c
|
||||||
C:\Development\reaction\game\g_weapon.c(1436) : warning C4101: 'i' : unreferenced local variable
|
q_math.c
|
||||||
C:\Development\reaction\game\g_weapon.c(2409) : warning C4101: 'tent' : unreferenced local variable
|
q_shared.c
|
||||||
C:\Development\reaction\game\g_weapon.c(2410) : warning C4101: 'fogStart' : unreferenced local variable
|
rxn_game.c
|
||||||
C:\Development\reaction\game\g_weapon.c(2405) : warning C4101: 'tr2' : unreferenced local variable
|
zcam.c
|
||||||
|
zcam_target.c
|
||||||
Linking...
|
Linking...
|
||||||
Creating library c:\reactionoutput/qagamex86.lib and object c:\reactionoutput/qagamex86.exp
|
Creating library c:\reactionoutput/qagamex86.lib and object c:\reactionoutput/qagamex86.exp
|
||||||
g_active.obj : error LNK2001: unresolved external symbol _camera_think
|
|
||||||
g_client.obj : error LNK2001: unresolved external symbol _camera_begin
|
|
||||||
g_client.obj : error LNK2001: unresolved external symbol _camera_disconnect
|
|
||||||
g_cmds.obj : error LNK2001: unresolved external symbol _camera_cmd
|
|
||||||
g_cmds.obj : error LNK2001: unresolved external symbol _Ref_Resign
|
|
||||||
g_cmds.obj : error LNK2001: unresolved external symbol _Ref_Command
|
|
||||||
g_cmds.obj : error LNK2001: unresolved external symbol _Ref_Auth
|
|
||||||
g_cmds.obj : error LNK2001: unresolved external symbol _MM_Sub_f
|
|
||||||
g_cmds.obj : error LNK2001: unresolved external symbol _MM_Ready_f
|
|
||||||
g_cmds.obj : error LNK2001: unresolved external symbol _MM_Captain_f
|
|
||||||
g_main.obj : error LNK2001: unresolved external symbol _camera_init
|
|
||||||
g_main.obj : error LNK2001: unresolved external symbol _camera_shutdown
|
|
||||||
g_main.obj : error LNK2001: unresolved external symbol _MM_RunFrame
|
|
||||||
g_session.obj : error LNK2001: unresolved external symbol _camera_state_save
|
|
||||||
g_session.obj : error LNK2001: unresolved external symbol _camera_state_load
|
|
||||||
..\Debug/qagamex86.dll : fatal error LNK1120: 15 unresolved externals
|
|
||||||
Error executing link.exe.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Results</h3>
|
<h3>Results</h3>
|
||||||
qagamex86.dll - 16 error(s), 5 warning(s)
|
qagamex86.dll - 0 error(s), 3 warning(s)
|
||||||
</pre>
|
</pre>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
Loading…
Reference in a new issue