Added debris from EntityPlusMod.

This commit is contained in:
q3rally 2011-05-01 07:31:00 +00:00
parent b290d76d86
commit f49a14a818
9 changed files with 247 additions and 31 deletions

View file

@ -1115,3 +1115,91 @@ void CG_LightningArc( vec3_t start, vec3_t end ) {
}
}
/*
==================
CG_LaunchDebris
==================
*/
void CG_LaunchDebris( vec3_t origin, vec3_t velocity, qhandle_t hModel ) {
localEntity_t *le;
refEntity_t *re;
le = CG_AllocLocalEntity();
re = &le->refEntity;
le->leType = LE_FRAGMENT;
le->startTime = cg.time;
le->endTime = le->startTime + 5000 + random() * 3000;
VectorCopy( origin, re->origin );
AxisCopy( axisDefault, re->axis );
re->hModel = hModel;
le->pos.trType = TR_GRAVITY;
VectorCopy( origin, le->pos.trBase );
VectorCopy( velocity, le->pos.trDelta );
le->pos.trTime = cg.time;
le->bounceFactor = 0.6f;
le->leBounceSoundType = LEBS_DEBRIS;
//le->leMarkType = LEMT_BLOOD;
}
/*
===================
CG_ShowDebris
Generated a bunch of debris launching out from an entity's location
===================
*/
void CG_ShowDebris( vec3_t srcOrigin, int count, int type ) {
vec3_t origin, velocity;
int i, r;
for (i = 0; i < count; i++) {
VectorCopy( srcOrigin, origin );
velocity[0] = crandom()*GIB_VELOCITY;
velocity[1] = crandom()*GIB_VELOCITY;
velocity[2] = GIB_JUMP + crandom()*GIB_VELOCITY;
r = rand() % 8;
if ( type == EV_EMIT_DEBRIS_NORMAL ) {
if (r == 0)
CG_LaunchDebris( origin, velocity, cgs.media.debris1 );
else if (r == 1)
CG_LaunchDebris( origin, velocity, cgs.media.debris2 );
else if (r == 2)
CG_LaunchDebris( origin, velocity, cgs.media.debris3 );
else if (r == 3)
CG_LaunchDebris( origin, velocity, cgs.media.debris4 );
else if (r == 4)
CG_LaunchDebris( origin, velocity, cgs.media.debris5 );
else if (r == 5)
CG_LaunchDebris( origin, velocity, cgs.media.debris6 );
else if (r == 6)
CG_LaunchDebris( origin, velocity, cgs.media.debris7 );
else if (r == 7)
CG_LaunchDebris( origin, velocity, cgs.media.debris8 );
}
if ( type == EV_EMIT_DEBRIS_DARK ) {
if (r == 0)
CG_LaunchDebris( origin, velocity, cgs.media.debrisdark1 );
else if (r == 1)
CG_LaunchDebris( origin, velocity, cgs.media.debrisdark2 );
else if (r == 2)
CG_LaunchDebris( origin, velocity, cgs.media.debrisdark3 );
else if (r == 3)
CG_LaunchDebris( origin, velocity, cgs.media.debrisdark4 );
else if (r == 4)
CG_LaunchDebris( origin, velocity, cgs.media.debrisdark5 );
else if (r == 5)
CG_LaunchDebris( origin, velocity, cgs.media.debrisdark6 );
else if (r == 6)
CG_LaunchDebris( origin, velocity, cgs.media.debrisdark7 );
else if (r == 7)
CG_LaunchDebris( origin, velocity, cgs.media.debrisdark8 );
}
}
}

View file

@ -1377,6 +1377,16 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
DEBUGNAME("EV_DEBUG_LINE");
CG_Beam( cent );
break;
case EV_EMIT_DEBRIS_NORMAL:
DEBUGNAME("EV_EMIT_DEBRIS_NORMAL");
CG_ShowDebris( cent->lerpOrigin, cent->currentState.eventParm, EV_EMIT_DEBRIS_NORMAL );
break;
case EV_EMIT_DEBRIS_DARK:
DEBUGNAME("EV_EMIT_DEBRIS_DARK");
CG_ShowDebris( cent->lerpOrigin, cent->currentState.eventParm, EV_EMIT_DEBRIS_DARK );
break;
default:
DEBUGNAME("UNKNOWN");

View file

@ -327,6 +327,7 @@ typedef enum {
LEBS_BLOOD,
// Q3Rally Code Start
LEBS_OIL,
LEBS_DEBRIS,
// Q3Rally Code END
LEBS_BRASS
} leBounceSoundType_t; // fragment local entities can make sounds on impacts
@ -869,18 +870,26 @@ typedef struct {
qhandle_t gibPiston;
qhandle_t gibShock;
qhandle_t gibSteer;
/*
qhandle_t gibAbdomen;
qhandle_t gibArm;
qhandle_t gibChest;
qhandle_t gibFist;
qhandle_t gibFoot;
qhandle_t gibForearm;
qhandle_t gibIntestine;
qhandle_t gibLeg;
qhandle_t gibSkull;
qhandle_t gibBrain;
*/
// debris explosions
qhandle_t debris1;
qhandle_t debris2;
qhandle_t debris3;
qhandle_t debris4;
qhandle_t debris5;
qhandle_t debris6;
qhandle_t debris7;
qhandle_t debris8;
qhandle_t debrisdark1;
qhandle_t debrisdark2;
qhandle_t debrisdark3;
qhandle_t debrisdark4;
qhandle_t debrisdark5;
qhandle_t debrisdark6;
qhandle_t debrisdark7;
qhandle_t debrisdark8;
// Q3Rally Code END
qhandle_t smoke2;

View file

@ -152,6 +152,42 @@ void CG_BloodTrail( localEntity_t *le ) {
}
}
/*
================
CG_DebrisTrail
Leave expanding smoke puffs behind debris
================
*/
void CG_DebrisTrail( localEntity_t *le ) {
int t;
int t2;
int step;
vec3_t newOrigin;
localEntity_t *puff;
//step = 150;
step = 25;
t = step * ( (cg.time - cg.frametime + step ) / step );
t2 = step * ( cg.time / step );
for ( ; t <= t2; t += step ) {
BG_EvaluateTrajectory( &le->pos, t, newOrigin );
puff = CG_SmokePuff( newOrigin, vec3_origin,
20, // radius
1, 1, 1, .2, // color
2000, // trailTime
t, // startTime
0, // fadeInTime
0, // flags
cgs.media.smokePuffShader );
// use the optimized version
puff->leType = LE_FALL_SCALE_FADE;
// rise a total of 40 units over its lifetime
puff->pos.trDelta[2] = -40;
}
}
/*
================

View file

@ -1177,18 +1177,24 @@ static void CG_RegisterGraphics( void ) {
cgs.media.gibPiston = trap_R_RegisterModel( "models/gibs/piston.md3" );
cgs.media.gibShock = trap_R_RegisterModel( "models/gibs/shock.md3" );
cgs.media.gibSteer = trap_R_RegisterModel( "models/gibs/steer.md3" );
/*
cgs.media.gibAbdomen = trap_R_RegisterModel( "models/gibs/abdomen.md3" );
cgs.media.gibArm = trap_R_RegisterModel( "models/gibs/arm.md3" );
cgs.media.gibChest = trap_R_RegisterModel( "models/gibs/chest.md3" );
cgs.media.gibFist = trap_R_RegisterModel( "models/gibs/fist.md3" );
cgs.media.gibFoot = trap_R_RegisterModel( "models/gibs/foot.md3" );
cgs.media.gibForearm = trap_R_RegisterModel( "models/gibs/forearm.md3" );
cgs.media.gibIntestine = trap_R_RegisterModel( "models/gibs/intestine.md3" );
cgs.media.gibLeg = trap_R_RegisterModel( "models/gibs/leg.md3" );
cgs.media.gibSkull = trap_R_RegisterModel( "models/gibs/skull.md3" );
cgs.media.gibBrain = trap_R_RegisterModel( "models/gibs/brain.md3" );
*/
cgs.media.debris1 = trap_R_RegisterModel( "models/debris/concrete_b1.md3" );
cgs.media.debris2 = trap_R_RegisterModel( "models/debris/concrete_b2.md3" );
cgs.media.debris3 = trap_R_RegisterModel( "models/debris/concrete_b3.md3" );
cgs.media.debris4 = trap_R_RegisterModel( "models/debris/concrete_b4.md3" );
cgs.media.debris5 = trap_R_RegisterModel( "models/debris/concrete_b5.md3" );
cgs.media.debris6 = trap_R_RegisterModel( "models/debris/concrete_b6.md3" );
cgs.media.debris7 = trap_R_RegisterModel( "models/debris/concrete_b7.md3" );
cgs.media.debris8 = trap_R_RegisterModel( "models/debris/concrete_b8.md3" );
cgs.media.debrisdark1 = trap_R_RegisterModel( "models/debris/concrete_d1.md3" );
cgs.media.debrisdark2 = trap_R_RegisterModel( "models/debris/concrete_d2.md3" );
cgs.media.debrisdark3 = trap_R_RegisterModel( "models/debris/concrete_d3.md3" );
cgs.media.debrisdark4 = trap_R_RegisterModel( "models/debris/concrete_d4.md3" );
cgs.media.debrisdark5 = trap_R_RegisterModel( "models/debris/concrete_d5.md3" );
cgs.media.debrisdark6 = trap_R_RegisterModel( "models/debris/concrete_d6.md3" );
cgs.media.debrisdark7 = trap_R_RegisterModel( "models/debris/concrete_d7.md3" );
cgs.media.debrisdark8 = trap_R_RegisterModel( "models/debris/concrete_d8.md3" );
cgs.media.fireModel = trap_R_RegisterModel( "models/rearfire/flametrail.md3" );
cgs.media.turboModel = trap_R_RegisterModel( "models/powerups/turbo/turbocar.md3" );

View file

@ -618,8 +618,10 @@ typedef enum {
EV_TAUNT_GUARDBASE,
EV_TAUNT_PATROL,
EV_LIGHTNINGARC
EV_EMIT_DEBRIS_NORMAL, // a target_debrisemitter that emits light concrete is triggered
EV_EMIT_DEBRIS_DARK // a target_debrisemitter that emits dark concrete is triggered
} entity_event_t;

View file

@ -178,6 +178,7 @@ void SP_target_kill (gentity_t *ent);
void SP_target_position (gentity_t *ent);
void SP_target_location (gentity_t *ent);
void SP_target_push (gentity_t *ent);
void SP_target_debrisemitter (gentity_t *ent);
void SP_light (gentity_t *self);
void SP_info_null (gentity_t *self);
@ -279,6 +280,7 @@ spawn_t spawns[] = {
{"target_position", SP_target_position},
{"target_location", SP_target_location},
{"target_push", SP_target_push},
{"target_debrisemitter", SP_target_debrisemitter},
{"light", SP_light},
{"path_corner", SP_path_corner},

View file

@ -466,3 +466,30 @@ void SP_target_location( gentity_t *self ){
G_SetOrigin( self, self->s.origin );
}
//==========================================================
/*QUAKED target_debrisemitter (.5 .5 .5) (-8 -8 -8) (8 8 8) DARK_DEBRIS
Emits chunks of debris.
If no spawnflag is set, the entity will emit light chunks of concrete
If the DARK_DEBRIS spawnflag is set, the entity will emit darker chunks of concrete
*/
void target_debrisemitter_use (gentity_t *self, gentity_t *other, gentity_t *activator) {
gentity_t *ent;
//G_AddEvent( self, EV_EMIT_DEBRIS, 0 ); //client doesn't respond to this for some reason....
if ( !self->count )
self->count = 10;
if ( self->spawnflags & 1 )
ent = G_TempEntity(self->s.origin, EV_EMIT_DEBRIS_DARK);
else
ent = G_TempEntity(self->s.origin, EV_EMIT_DEBRIS_NORMAL);
ent->s.eventParm = self->count;
}
void SP_target_debrisemitter (gentity_t *self) {
self->use = target_debrisemitter_use;
}

View file

@ -162,7 +162,7 @@ q3rallycode
engine\code\client\snd_openal.c
engine\code\client\snd_public.h
engine\code\client\snd_wavelet.c
-game
+game
engine\code\game\ai_chat.c
engine\code\game\ai_chat.h
engine\code\game\ai_cmd.c
@ -854,13 +854,49 @@ q3rallycode
engine\voip-readme.txt
[Open project files]
0=engine\code\qcommon\files.c
1=engine\code\game\bg_public.h
1=engine\code\cgame\cg_effects.c
2=engine\code\cgame\cg_event.c
3=engine\code\cgame\cg_local.h
4=engine\code\cgame\cg_localents.c
5=engine\code\cgame\cg_main.c
6=engine\code\cgame\cg_marks.c
7=engine\code\cgame\cg_particles.c
8=engine\code\game\bg_public.h
9=engine\code\game\g_spawn.c
10=engine\code\game\g_target.c
[Selected Project Files]
Main=
Selected=engine\code\qcommon\files.c
Selected=engine\code\game\g_target.c
[engine\code\qcommon\files.c]
TopLine=187
Caret=33,201
[engine\code\cgame\cg_effects.c]
TopLine=1165
Caret=2,1205
[engine\code\cgame\cg_event.c]
TopLine=1360
Caret=9,1389
[engine\code\cgame\cg_local.h]
TopLine=2086
Caret=69,2107
[engine\code\cgame\cg_localents.c]
TopLine=164
Caret=2,190
[engine\code\cgame\cg_main.c]
TopLine=1163
Caret=1,1181
[engine\code\cgame\cg_marks.c]
TopLine=1665
Caret=1,1679
[engine\code\cgame\cg_particles.c]
TopLine=1184
Caret=1,1198
[engine\code\game\bg_public.h]
TopLine=20
Caret=30,37
TopLine=601
Caret=49,625
[engine\code\game\g_spawn.c]
TopLine=264
Caret=56,283
[engine\code\game\g_target.c]
TopLine=467
Caret=1,496