void FX_OrientedBolt( vec3_t start, vec3_t end, vec3_t dir ) { vec3_t mid; VectorSubtract( end, start, mid ); VectorScale( mid, 0.1f + (random() * 0.8), mid ); VectorAdd( start, mid, mid ); VectorMA(mid, 3.0f + (random() * 10.0f), dir, mid ); //FX_AddElectricity( mid, start, 0.5, 0.75 + random() * 0.75, 0.0, 1.0, 0.5, 300.0f + random() * 300, cgs.media.bolt2Shader, DEFAULT_DEVIATION); //FX_AddElectricity( mid, end, 0.5, 0.75 + random() * 0.75, 1.0, 1.0, 0.5, 300.0f + random() * 300, cgs.media.bolt2Shader, DEFAULT_DEVIATION); FX_AddElectricity( mid, start, 0.5, 0.75 + random() * 0.75, 0.0, 1.0, 0.5, 300.0f + random() * 300, cgs.media.borgLightningShaders[2], DEFAULT_DEVIATION); FX_AddElectricity( mid, end, 0.5, 0.75 + random() * 0.75, 1.0, 1.0, 0.5, 300.0f + random() * 300, cgs.media.borgLightningShaders[3], DEFAULT_DEVIATION); }
/* ------------------------- FX_ForgeTeleportOut Hmmm...needs some work.. ------------------------- */ void ForgeThink( vec3_t start, vec3_t end, vec3_t vel, vec3_t user ) { FX_AddElectricity( start, end, 1.0f, 3.5f, 0.0f, 1.0f, 0.0f, random() * 100 + 100, cgs.media.pjBoltShader, FXF_WRAP, 0.7f ); FX_AddSprite( start, NULL, NULL, 5.0f, 0.0f, 0.5f, 0.2f, 0.0f, 0, 100, cgs.media.orangeParticleShader ); FX_AddSprite( end, NULL, NULL, 5.0f, 0.0f, 0.5f, 0.2f, 0.0f, 0, 100, cgs.media.orangeParticleShader ); if ( rand() & 3 ) { vec3_t other; for ( int i = 0; i < 3; i++ ) { other[i] = end[i] + crandom() * 24.0f; } FX_AddElectricity( end, other, 1.0f, 2.0f, 0.0f, 1.0f, 0.0f, random() * 200 + 100, cgs.media.pjBoltShader, FXF_WRAP | FXF_TAPER, 0.7f ); } }
static void CGFX_AddElectricity( addElectricityArgStruct_t *p ) { FX_AddElectricity( p->start, p->end, p->size1, p->size2, p->sizeParm, p->alpha1, p->alpha2, p->alphaParm, p->sRGB, p->eRGB, p->rgbParm, p->chaos, p->killTime, p->shader, p->flags ); }