Skip to content

Commit 857a79d

Browse files
cgame: Implement the original BFP ki trails using polyVert_t, the refEntity_t sample drawing code is disabled just to show how they did it
1 parent fc449e3 commit 857a79d

1 file changed

Lines changed: 24 additions & 20 deletions

File tree

source/cgame/cg_trails.c

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,14 @@ void CG_KiTrail( int entityNum, vec3_t origin, qboolean remove, qhandle_t hShade
7373
int kiTrailLength = cg_kiTrail.integer;
7474
trail_t *kiTrail = &cg_trails[entityNum][KI_TRAIL];
7575
const int MONSTER_TRAIL_WIDTH = 150;
76-
77-
if ( entityNum < 0 || entityNum >= MAX_GENTITIES ) {
76+
const int OVERLAP_TIMES = 3;
77+
float kiTrailWidth = // for the player monster
78+
( cg_entities[entityNum].currentState.eFlags & EF_MONSTER )
79+
? MONSTER_TRAIL_WIDTH
80+
: 15;
81+
82+
if ( entityNum < 0 || entityNum >= MAX_GENTITIES
83+
|| kiTrailLength < 4 ) { // don't draw if ki trail length is less than 4
7884
return;
7985
}
8086

@@ -100,17 +106,14 @@ void CG_KiTrail( int entityNum, vec3_t origin, qboolean remove, qhandle_t hShade
100106
// add the current position at the start
101107
VectorCopy( origin, kiTrail->segments[0] );
102108

103-
for ( i = 0; i < kiTrail->numSegments - 1; ++i ) {
109+
for ( i = 0; i < kiTrail->numSegments - OVERLAP_TIMES; ++i ) {
104110
vec3_t start, end;
105111

106112
VectorCopy( kiTrail->segments[i], start );
107-
if ( i > 0 ) {
108-
VectorCopy( kiTrail->segments[i - 1], start );
109-
}
110-
VectorCopy( kiTrail->segments[i + 1], end );
113+
VectorCopy( kiTrail->segments[i + OVERLAP_TIMES], end );
111114

112-
// for the player monster
113-
if ( cg_entities[entityNum].currentState.eFlags & EF_MONSTER ) {
115+
// render the polys
116+
{
114117
polyVert_t verts[4];
115118
vec3_t forward, right;
116119
vec3_t viewAxis;
@@ -122,26 +125,28 @@ void CG_KiTrail( int entityNum, vec3_t origin, qboolean remove, qhandle_t hShade
122125
CrossProduct( viewAxis, forward, right );
123126
VectorNormalize( right );
124127

125-
VectorMA( end, MONSTER_TRAIL_WIDTH, right, verts[0].xyz );
126-
VectorArray2Set( verts[0].st, 0, 1 );
128+
VectorMA( start, kiTrailWidth, right, verts[0].xyz );
129+
VectorArray2Set( verts[0].st, 0, 0 );
127130
Vector4Set( verts[0].modulate, 255, 255, 255, 255 );
128131

129-
VectorMA( end, -MONSTER_TRAIL_WIDTH, right, verts[1].xyz );
132+
VectorMA( end, kiTrailWidth, right, verts[1].xyz );
130133
VectorArray2Set( verts[1].st, 1, 0 );
131134
Vector4Set( verts[1].modulate, 255, 255, 255, 255 );
132135

133-
VectorMA( start, -MONSTER_TRAIL_WIDTH, right, verts[2].xyz );
134-
VectorArray2Set( verts[2].st, 1, 0 );
136+
VectorMA( end, -kiTrailWidth, right, verts[2].xyz );
137+
VectorArray2Set( verts[2].st, 1, 1 );
135138
Vector4Set( verts[2].modulate, 255, 255, 255, 255 );
136139

137-
VectorMA( start, MONSTER_TRAIL_WIDTH, right, verts[3].xyz );
140+
VectorMA( start, -kiTrailWidth, right, verts[3].xyz );
138141
VectorArray2Set( verts[3].st, 0, 1 );
139142
Vector4Set( verts[3].modulate, 255, 255, 255, 255 );
140143

141-
// render 2 times for better visual effect
142-
trap_R_AddPolyToScene( hShader, 4, verts );
143144
trap_R_AddPolyToScene( hShader, 4, verts );
144-
} else { // I see... so, BFP originally used RT_RAIL_CORE, they didn't care the size, it was already set
145+
}
146+
147+
// disabled, sample code
148+
#if 0
149+
{ // I see... so, BFP originally used RT_RAIL_CORE, they didn't care the size, it was already set
145150
refEntity_t beam;
146151
memset( &beam, 0, sizeof( beam ) );
147152
beam.reType = RT_RAIL_CORE;
@@ -150,10 +155,9 @@ void CG_KiTrail( int entityNum, vec3_t origin, qboolean remove, qhandle_t hShade
150155
VectorCopy( end, beam.oldorigin );
151156
beam.shaderRGBA[0] = beam.shaderRGBA[1] = beam.shaderRGBA[2] = beam.shaderRGBA[3] = 255;
152157

153-
// render 2 times for better visual effect
154-
trap_R_AddRefEntityToScene( &beam );
155158
trap_R_AddRefEntityToScene( &beam );
156159
}
160+
#endif
157161
}
158162
}
159163

0 commit comments

Comments
 (0)