q2wf-portable/wf_tempents.c

305 lines
8.7 KiB
C
Raw Normal View History

#include "g_local.h"
//Temp Entity handling from Maj.Bitch
//======================================================
//========== Spawn Temp Entity Functions ===============
//======================================================
/*
Spawns (type) Splash with {count} particles of {color} at {start} moving
in {direction} and Broadcasts to all in Potentially Visible Set from
vector (origin)
TE_LASER_SPARKS - Splash particles obey gravity
TE_WELDING_SPARKS - Splash particles with flash of light at {origin}
TE_SPLASH - Randomly shaded shower of particles
colors:
1 - red/gold - blaster type sparks
2 - blue/white - blue
3 - brown - brown
4 - green/white - slime green
5 - red/orange - lava red
6 - red - blood red
All others are grey
*/
//======================================================
void G_Spawn_Splash(int type, int count, int color, vec3_t start, vec3_t movdir, vec3_t origin )
{
gi.WriteByte(svc_temp_entity);
gi.WriteByte(type);
gi.WriteByte(count);
gi.WritePosition(start);
gi.WriteDir(movdir);
gi.WriteByte(color);
gi.multicast(origin, MULTICAST_PVS);
}
//======================================================
/*
Spawns a string of successive (type) models of from record (rec_no)
from (start) to (endpos) which are offset by vector (offset) and
Broadcasts to all in Potentially Visible Set from vector (origin)
Type:
TE_GRAPPLE_CABLE - The grappling hook cable
TE_MEDIC_CABLE_ATTACK - NOT IMPLEMENTED IN ENGINE
TE_PARASITE_ATTACK - NOT IMPLEMENTED IN ENGINE
*/
//======================================================
void G_Spawn_Models(int type, short rec_no, vec3_t start, vec3_t endpos, vec3_t offset, vec3_t origin )
{
gi.WriteByte(svc_temp_entity);
gi.WriteByte(type);
gi.WriteShort(rec_no);
gi.WritePosition(start);
gi.WritePosition(endpos);
gi.WritePosition(offset);
gi.multicast(origin, MULTICAST_PVS);
}
//======================================================
/*
Spawns a trail of (type) from {start} to {end} and Broadcasts to all
in Potentially Visible Set from vector (origin)
TE_BFG_LASER - Spawns a green laser
TE_BUBBLETRAIL - Spawns a trail of bubbles
TE_RAILTRAIL - Spawns a blue spiral trail filled with white smoke
*/
//======================================================
void G_Spawn_Trails(int type, vec3_t start, vec3_t endpos, vec3_t origin )
{
gi.WriteByte(svc_temp_entity);
gi.WriteByte(type);
gi.WritePosition(start);
gi.WritePosition(endpos);
gi.multicast(origin, MULTICAST_PVS);
}
//======================================================
/*
Spawns sparks of (type) from {start} in direction of {movdir} and
Broadcasts to all in Potentially Visible Set from vector (origin)
TE_BLASTER - Spawns blaster sparks
TE_BLOOD - Spawns spurt of red blood
TE_BULLET_SPARKS - Same as TE_SPARKS, with a bullet puff and richochet sound
TE_GREENBLOOD - NOT IMPLEMENTED - Spawns a spurt of green blood
TE_GUNSHOT - Spawns a grey splash of particles, with a bullet puff
TE_SCREEN_SPARKS - Spawns a large green/white splash of sparks
TE_SHIELD_SPARKS - Spawns a large blue/violet splash of sparks
TE_SHOTGUN - Spawns a small grey splash of spark particles, with a bullet puff
TE_SPARKS - Spawns a red/gold splash of spark particles
*/
//======================================================
void G_Spawn_Sparks(int type, vec3_t start, vec3_t movdir, vec3_t origin )
{
gi.WriteByte(svc_temp_entity);
gi.WriteByte(type);
gi.WritePosition(start);
gi.WriteDir(movdir);
gi.multicast(origin, MULTICAST_PVS);
}
//======================================================
/*
Spawns a (type) explosion at (start} and Broadcasts to all Potentially
Visible Sets from {origin}
TE_BFG_BIGEXPLOSION - Spawns a BFG particle explosion
TE_BFG_EXPLOSION - Spawns a BFG explosion sprite
TE_BOSSTPORT - Spawns a mushroom-cloud particle effect
TE_EXPLOSION1 - Spawns a mid-air-style explosion
TE_EXPLOSION2 - Spawns a nuclear-style explosion
TE_GRENADE_EXPLOSION - Spawns a grenade explosion
TE_GRENADE_EXPLOSION_WATER - Spawns an underwater grenade explosion
TE_ROCKET_EXPLOSION - Spawns a rocket explosion
TE_ROCKET_EXPLOSION_WATER - Spawns an underwater rocket explosion
Note: The last four EXPLOSION entries overlap to some degree.
TE_GRENADE_EXPLOSION is the same as TE_EXPLOSION2,
TE_ROCKET_EXPLOSION is the same as TE_EXPLOSION1,
and both of the EXPLOSION_WATER entries are the same, visually.
*/
//======================================================
void G_Spawn_Explosion(int type, vec3_t start, vec3_t origin )
{
gi.WriteByte(svc_temp_entity);
gi.WriteByte(type);
gi.WritePosition(start);
gi.multicast(origin, MULTICAST_PVS);
}
//======================================================
/*
Spawns flames of (type) from {start} in direction of {movdir} and
Broadcasts to all in Potentially Visible Set from vector (origin)
TE_FLAME - Spawns a flame
*/
//======================================================
void G_Spawn_Flame(int type, short rec_no, int count, vec3_t start, vec3_t origin, vec3_t pos1,vec3_t pos2,vec3_t pos3, vec3_t pos4 )
{
gi.WriteByte (svc_temp_entity);
gi.WriteByte (type);
gi.WriteShort(rec_no);
gi.WriteShort(count);
gi.WritePosition (start);
gi.WritePosition (origin);
gi.WritePosition (pos1);
gi.WritePosition (pos2);
gi.WritePosition (pos3);
gi.WritePosition (pos4);
gi.multicast (origin, MULTICAST_PVS);
}
//======================================================
/*
Spawns lightning of (type) from {start} in direction of {movdir} and
Broadcasts to all in Potentially Visible Set from vector (origin)
TE_LIGHTNING - Spawns lightning
*/
//======================================================
void G_Spawn_Lightning(int type, short rec_no, short rec_no2, vec3_t start, vec3_t origin)
{
gi.WriteByte (svc_temp_entity);
gi.WriteByte (type);
gi.WriteShort (rec_no); // destination entity
gi.WriteShort (rec_no2); // source entity
gi.WritePosition (origin);
gi.WritePosition (start);
gi.multicast (start, MULTICAST_PVS);
}
/*
Spawns a debug trail from [start] to [endpos]
Type:
TE_DEBUG - The debug trail
*/
//======================================================
void G_Spawn_DBTrail(int type, vec3_t start, vec3_t endpos )
{
gi.WriteByte (svc_temp_entity);
gi.WriteByte (type);
gi.WritePosition (start);
gi.WritePosition (endpos);
gi.multicast (start, MULTICAST_ALL);
}
//======================================================
/*
Spawns a trail of (type) from {start} to {end} and Broadcasts to all
in Potentially Visible Set from vector (origin)
TE_FLASHLIGHT - Spawns a green laser
*/
//======================================================
void G_Spawn_Light(int type, short rec_no, vec3_t origin )
{
gi.WriteByte (svc_temp_entity);
gi.WriteByte (type);
gi.WritePosition (origin);
gi.WriteShort (rec_no);
gi.multicast (origin, MULTICAST_PVS);
}
void show_Temp_Ent(int type, short rec_no, short rec_no2, int count, int color, vec3_t start, vec3_t endpos, vec3_t offset, vec3_t movdir, vec3_t origin, vec3_t pos1,vec3_t pos2,vec3_t pos3, vec3_t pos4 )
{
switch (type)
{
case TE_LASER_SPARKS:
case TE_WELDING_SPARKS:
case TE_SPLASH:
case TE_TUNNEL_SPARKS:
G_Spawn_Splash(type, count, color, start, movdir, origin);
return;
case TE_GRAPPLE_CABLE:
case TE_MEDIC_CABLE_ATTACK:
case TE_PARASITE_ATTACK:
G_Spawn_Models(type, rec_no, start, endpos, offset, origin );
return;
case TE_BFG_LASER:
case TE_BUBBLETRAIL:
case TE_RAILTRAIL:
case TE_RAILTRAIL2:
case TE_BUBBLETRAIL2:
G_Spawn_Trails(type, start, endpos, origin );
return;
case TE_BLASTER:
case TE_BLOOD:
case TE_BULLET_SPARKS:
case TE_GREENBLOOD:
case TE_GUNSHOT:
case TE_SCREEN_SPARKS:
case TE_SHIELD_SPARKS:
case TE_SHOTGUN:
case TE_SPARKS:
case TE_BLUEHYPERBLASTER:
case TE_BLASTER2:
G_Spawn_Sparks(type, start, movdir, origin );
return;
case TE_BFG_BIGEXPLOSION:
case TE_BFG_EXPLOSION:
case TE_BOSSTPORT:
case TE_EXPLOSION1:
case TE_EXPLOSION2:
case TE_GRENADE_EXPLOSION:
case TE_GRENADE_EXPLOSION_WATER:
case TE_ROCKET_EXPLOSION:
case TE_ROCKET_EXPLOSION_WATER:
case TE_PLASMA_EXPLOSION:
case TE_PLAIN_EXPLOSION:
case TE_EXPLOSION1_BIG:
case TE_EXPLOSION1_NP:
G_Spawn_Explosion( type, start, origin );
return;
case TE_FLAME:
G_Spawn_Flame(type, rec_no, count, start, origin, pos1, pos2, pos3, pos4 );
return;
case TE_LIGHTNING:
G_Spawn_Lightning(type, rec_no, rec_no2, start, origin);
return;
case TE_DEBUGTRAIL:
G_Spawn_DBTrail(type, start, endpos );
return;
case TE_FLASHLIGHT:
G_Spawn_Light(type, rec_no, origin );
return;
case TE_FORCEWALL:
case TE_HEATBEAM:
case TE_MONSTER_HEATBEAM:
case TE_STEAM:
case TE_MOREBLOOD:
case TE_HEATBEAM_SPARKS:
case TE_HEATBEAM_STEAM:
case TE_CHAINFIST_SMOKE:
case TE_ELECTRIC_SPARKS:
case TE_TRACKER_EXPLOSION:
case TE_TELEPORT_EFFECT:
case TE_DBALL_GOAL:
case TE_WIDOWBEAMOUT:
case TE_NUKEBLAST:
case TE_WIDOWSPLASH:
case TE_FLECHETTE:
return;
}
}