Skip to content

Commit eb65709

Browse files
cgame: Implement beam and corkscrew trails, add cg_beamTrail cvar to handle the number of beam segments, add shaders to test beam trails, use grappling hook trail as BFP beam trail, apply Quake3e patch for grappling hook and optimize trails code a bit
1 parent 7573453 commit eb65709

9 files changed

Lines changed: 240 additions & 40 deletions

File tree

docs/bfp_cvars_task.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ For more, look in [cvar_bfp_list.txt](docs/cvar_bfp_list.txt)
99
## COMPLETED:
1010

1111
- [x] ~~cg_superdeformed~~
12+
- [x] ~~cg_beamTrail~~
1213
- [x] ~~cg_kiTrail~~
1314
- [x] ~~cg_yrgolroxor~~
1415
- [x] ~~cg_thirdPersonHeight~~

source/cgame/cg_cvar.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ CG_CVAR( cg_explosionSmoke, "cg_explosionSmoke", "1", CVAR_ARCHIVE ) // BFP - Ex
7777
CG_CVAR( cg_lightExplosions, "cg_lightExplosions", "1", CVAR_ARCHIVE ) // BFP - Dynamic explosion lights
7878
CG_CVAR( cg_flytilt, "cg_flytilt", "1", CVAR_ARCHIVE ) // BFP - Fly tilt
7979
CG_CVAR( cg_kiTrail, "cg_kiTrail", "50", CVAR_ARCHIVE ) // BFP - Ki trail length
80+
CG_CVAR( cg_beamTrail, "cg_beamTrail", "50", CVAR_ARCHIVE ) // BFP - Beam trail length
8081
CG_CVAR( cg_playHitSound, "cg_playHitSound", "0", CVAR_ARCHIVE ) // BFP - Play hit sound
8182
CG_CVAR( cg_thirdPersonRange, "cg_thirdPersonRange", "110", CVAR_ARCHIVE ) // BFP
8283
CG_CVAR( cg_thirdPersonAngle, "cg_thirdPersonAngle", "0", CVAR_ARCHIVE ) // BFP

source/cgame/cg_ents.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,8 @@ static void CG_Missile( centity_t *cent ) {
458458
CG_AddRefEntityWithPowerups( ent, s1, TEAM_FREE );
459459
}
460460

461+
// BFP - no hook
462+
#if 0
461463
/*
462464
===============
463465
CG_Grapple
@@ -506,6 +508,7 @@ static void CG_Grapple( centity_t *cent ) {
506508

507509
trap_R_AddRefEntityToScene( &ent );
508510
}
511+
#endif
509512

510513
/*
511514
===============

source/cgame/cg_event.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ static void CG_Obituary( entityState_t *ent ) {
305305
trap_Cvar_Set( "cg_lifedeaths", va( "%i", (int)( cg_lifedeaths.integer + 1 ) ) );
306306
}
307307
// BFP - Reset ki trails to avoid viewing other trails
308-
CG_ResetKiTrail( target, vec3_origin );
308+
CG_ResetTrail( 0, target, vec3_origin );
309309
}
310310

311311
//==========================================================================
@@ -873,6 +873,7 @@ void CG_EntityEvent( centity_t *cent, vec3_t position, int entityNum ) {
873873
case EV_MISSILE_HIT:
874874
ByteToDir( es->eventParm, dir );
875875
CG_MissileHitPlayer( es->weapon, position, dir, es->otherEntityNum );
876+
CG_ResetTrail( 1, es->number, es->origin ); // BFP - Reset beam trail
876877
break;
877878

878879
case EV_MISSILE_MISS:
@@ -903,6 +904,7 @@ void CG_EntityEvent( centity_t *cent, vec3_t position, int entityNum ) {
903904
CG_SparksExplosion( position, dir );
904905
}
905906
}
907+
CG_ResetTrail( 1, es->number, es->origin ); // BFP - Reset beam trail
906908
}
907909
break;
908910

@@ -913,6 +915,7 @@ void CG_EntityEvent( centity_t *cent, vec3_t position, int entityNum ) {
913915
CG_DebrisExplosion( position, dir );
914916
// BFP - Spark particles explosion
915917
CG_SparksExplosion( position, dir );
918+
CG_ResetTrail( 1, es->number, es->origin ); // BFP - Reset beam trail
916919
break;
917920

918921
// BFP - EV_MISSILE_DETONATE - used on ki grenade bounces and beams,
@@ -922,6 +925,7 @@ void CG_EntityEvent( centity_t *cent, vec3_t position, int entityNum ) {
922925
{
923926
vec3_t dirDetonate = {0, 0, 1}; // place the explosion position and size correctly
924927
CG_MissileHitWall( es->weapon, 0, position, dirDetonate, IMPACTSOUND_DEFAULT );
928+
CG_ResetTrail( 1, es->number, es->origin ); // BFP - Reset beam trail
925929
}
926930
break;
927931

source/cgame/cg_local.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ typedef struct {
144144
int chargeSmokeTime; // BFP - Charge smoke time
145145
int ultTierTransformTime; // BFP - Ultimate tier transformation time
146146

147+
vec3_t muzzleOrigin; // BFP - Muzzle origin
148+
147149
// railgun trail spawning
148150
vec3_t railgunImpact;
149151
qboolean railgunFlash;
@@ -814,6 +816,11 @@ typedef struct {
814816
qhandle_t kiTrailBlueShader;
815817
qhandle_t kiTrailYellowShader;
816818

819+
// BFP - Ki attack beam and projectile shaders (for testing purposes)
820+
qhandle_t SSBSpiralShader;
821+
qhandle_t SSBBeamShader;
822+
qhandle_t PowerWaveBeamShader;
823+
817824
// scoreboard headers
818825
qhandle_t scoreboardName;
819826
qhandle_t scoreboardPing;
@@ -1273,6 +1280,7 @@ void CG_Bullet( vec3_t origin, int sourceEntityNum, vec3_t normal, qboolean fles
12731280

12741281
void CG_RailTrail( clientInfo_t *ci, vec3_t start, vec3_t end );
12751282
void CG_GrappleTrail( centity_t *ent, const weaponInfo_t *wi );
1283+
void CG_BFPBeamTrail( centity_t *ent, const weaponInfo_t *wi ); // BFP - BFP Beam trail handling
12761284
void CG_AddViewWeapon (playerState_t *ps);
12771285
void CG_AddPlayerWeapon( refEntity_t *parent, playerState_t *ps, centity_t *cent, int team );
12781286
void CG_DrawWeaponSelect( void );
@@ -1340,8 +1348,10 @@ void CG_ExplosionEffect( vec3_t origin, vec3_t dir );
13401348
// cg_trails.c
13411349
//
13421350
void CG_InitTrails( void );
1343-
void CG_ResetKiTrail( int entityNum, vec3_t origin );
1351+
void CG_ResetTrail( int TRAIL_TYPE, int entityNum, vec3_t origin );
13441352
void CG_KiTrail( int entityNum, vec3_t origin, qboolean remove, qhandle_t hShader );
1353+
void CG_BeamTrail( int entityNum, vec3_t origin, vec3_t muzzleOrigin, qhandle_t hShader );
1354+
void CG_CorkscrewTrail( int entityNum, vec3_t origin, vec3_t muzzleOrigin, qhandle_t beamShader, qhandle_t corkscrewShader );
13451355

13461356
//
13471357
// cg_snapshot.c

source/cgame/cg_main.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,11 @@ static void CG_RegisterGraphics( void ) {
682682
cgs.media.kiTrailRedShader = trap_R_RegisterShader( "powerups/redkitrail" );
683683
cgs.media.kiTrailYellowShader = trap_R_RegisterShader( "powerups/yellowkitrail" );
684684

685+
// BFP - Ki attack beam and projectile shaders (for testing purposes)
686+
cgs.media.PowerWaveBeamShader = trap_R_RegisterShader( "PowerWaveBeamShader");
687+
cgs.media.SSBSpiralShader = trap_R_RegisterShader( "SSBSpiralShader");
688+
cgs.media.SSBBeamShader = trap_R_RegisterShader( "SSBBeamShader");
689+
685690
memset( cg_items, 0, sizeof( cg_items ) );
686691
memset( cg_weapons, 0, sizeof( cg_weapons ) );
687692

source/cgame/cg_players.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2557,7 +2557,7 @@ Handle aura animations, when idling it sets the aura vertical rotation, so the a
25572557
*/
25582558
static void CG_RemoveKiTrails( centity_t *cent, int clientNum, vec3_t kiTrailOrigin, qhandle_t kiTrailShader, qboolean fastRemove ) { // BFP - Remove ki trails
25592559
if ( cg.time > cent->pe.kiTrailTime ) { // reset ki trail position avoid being zeroed
2560-
CG_ResetKiTrail( clientNum, kiTrailOrigin );
2560+
CG_ResetTrail( 0, clientNum, kiTrailOrigin );
25612561
} else { // ki trails keep running in that moment, but their segments are being removed
25622562
CG_KiTrail( clientNum, kiTrailOrigin, fastRemove, kiTrailShader );
25632563
}

0 commit comments

Comments
 (0)