mirror of
https://github.com/Q3Rally-Team/q3rally.git
synced 2025-02-16 09:11:11 +00:00
Added debris from EntityPlusMod.
This commit is contained in:
parent
b290d76d86
commit
f49a14a818
9 changed files with 247 additions and 31 deletions
|
@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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");
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
|
|
|
@ -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" );
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
||||
|
|
|
@ -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},
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue