sof-sdk/Source/Game/gamecpp/fx_effects.h
2000-06-15 00:00:00 +00:00

179 lines
No EOL
9.1 KiB
C++

#ifndef __FXEFFECTS_H_
#define __FXEFFECTS_H_
#include "..\ghoul\ighoul.h"
#include "q_shared.h"
#include "q_sh_fx.h"
#include "game.h"
extern game_import_t gi;
// For use on FX_MakeDecalBelow
typedef enum
{
FXDECAL_BLOODPOOL = 0,
FXDECAL_SCORCHMARK,
FXDECAL_OOZE,
FXDECAL_PIPELEFT,
FXDECAL_PUDDLE,
FXDECAL_WHITESCORCH,
FXDECAL_SINKPIPE,
FXDECAL_MAX,
};
void WriteDirExp(vec3_t val);
void FX_Init(void);
void FX_SetEvent_Data(edict_t *ent, int eventType, int data);
void FX_SetEvent(edict_t *ent, int eventType);
void FX_ClearEvent(edict_t *ent);
void FXMSG_WriteRelativePos(edict_t *ent, vec3_t endpos, vec3_t normal, struct mtexinfo_s *surf);
void FXMSG_WriteRelativePosTR(trace_t &tr);
void FXMSG_WriteRelativePos_Dir(vec3_t pos, vec3_t dir, edict_t *ignore);
void FXMSG_WriteRelativePos_TestGround(vec3_t pos, edict_t *ignore);
void FX_MakeBarrelExplode(vec3_t pos, edict_t *source);
void FX_MakeBloodSpray(vec3_t pos, vec3_t splatDir, int vel, int amount, edict_t *source);
void FX_MakeDecalBelow(vec3_t pos, int type, unsigned int lLifeTime);
void FX_MakeSparks(vec3_t pos, vec3_t dir, int type);
void FX_MakeGumballs(vec3_t pos, vec3_t dir, int type);
void FX_MakeGlob(vec3_t pos, short color, int size);
void FX_MakeExtinguisherExplode(edict_t *ent, vec3_t dirVel);//, trace_t tr);
void FX_MakeDustPuff(vec3_t pos);
void FX_MakeElectricArc(vec3_t pos, int len, vec3_t dir);
void FX_MakeBulletWhiz(edict_t *ent, vec3_t offset, vec3_t dir, int power, int len);
void FX_MakeWallDamage(trace_t &tr, vec3_t dir, int size, int markType,int debris);
void FX_MakeSkyLightning(void);
void FX_MakeRocketExplosion(edict_t *ent, vec3_t point, int size, vec3_t normal, struct mtexinfo_s *surf);
void FX_MakeGrenadeExplosion(edict_t *ent, vec3_t point, int size);
void FX_ThrowDebris(vec3_t origin,vec3_t norm, byte numchunks, byte scale, byte skin,byte x_max,byte y_max,byte z_max, byte surfType);
void FX_ThrowGlass(vec3_t origin, byte numchunks);
void FX_C4Explosion(edict_t *ent);
void FX_Flashpack(vec3_t pos);
void FX_NeuralPulse(vec3_t pos);
void FX_MakeAutoGunMuzzleFlash(edict_t *self);
void FX_StrikeWall(vec3_t spot, byte wallType);
void FX_BubbleTrail(vec3_t start, vec3_t end);
void FX_SmokeBurst(vec3_t pos, float size);
void FX_MakeLine(vec3_t start, vec3_t end, paletteRGBA_t color, int lifetime = 1, int mcastType = MULTICAST_ALL);
void FX_WallSparks(vec3_t pos, vec3_t dir, float size);
void FX_Bleed(edict_t *ent, GhoulID boltID, int amount);
void FX_BloodCloud(edict_t *ent, GhoulID boltID, int amount);
void FX_HeadExplosion(edict_t *ent, GhoulID boltID);
void FX_BloodJet(edict_t *ent, vec3_t spot, vec3_t jetDir);
void FX_HeliGun(edict_t *ent, IGhoulInst *heli, IGhoulInst *muzzle, GhoulID heliToMuzzleBolt, GhoulID muzEnd);
void FX_WhiteBurn(edict_t *ent);
void FX_EnemyShot(edict_t *ent, IGhoulInst *gun, byte weapID);
void FX_WhiteBlast(vec3_t org);
void FX_MinimiTrail(edict_t *ent);
void FX_Explosion(vec3_t pos, byte size);
void FX_VehicleExplosion(vec3_t pos, byte size);
void FX_SmokePuff(vec3_t pos,byte red,byte green,byte blue,byte alpha);
void FX_LittleExplosion(vec3_t pos, byte size, byte bSound);
void FX_MediumExplosion(vec3_t pos, byte size, byte bSound);
void FX_LargeExplosion(vec3_t pos, byte size, byte bSound);
void FX_MakeRing(vec3_t pos, short size);
void FX_PaperCloud(vec3_t vPos, byte nCount/*0 generates random num of papers*/);
void FX_SodaCans(vec3_t vPos, vec3_t vDir, byte nSpeed, byte nCount/*0 generates random num of cans*/);
void FX_MakeCoins(vec3_t pos, vec3_t dir, int type);
void FX_FloorSpace(edict_t *ent);
void FX_DropDustBits(vec3_t spot, int amount);
void FX_MakeRicochet(vec3_t vPos);
void FX_PhoneHit(vec3_t vPos);
void FX_TrashcanHit(vec3_t vPos);
void FX_HandleDMShotEffects(vec3_t start, vec3_t dir, vec3_t end, edict_t *shooter, int tracerfx, IGhoulInst *gun, int muzzlefx);
void FX_HandleDMShotHitEffects(vec3_t start, vec3_t dir, vec3_t end, edict_t *shooter, int tracerfx, IGhoulInst *gun, int muzzlefx);
void FX_HandleDMShotBigHitEffects(vec3_t start, vec3_t dir, vec3_t end, edict_t *shooter, int tracerfx, IGhoulInst *gun, int muzzlefx);
void FX_HandleDMMuzzleFlash(vec3_t start, vec3_t dir, edict_t *shooter, IGhoulInst *gun, int muzzlefx);
void FXA_SetRotate(edict_t *targ, vec3_t angVel, IGhoulInst *bolton, IGhoulInst *bolt2 = 0, IGhoulInst *bolt3 = 0, IGhoulInst *bolt4 = 0);
eft_rotate_t *FXA_GetRotate(edict_t *targ);
void FXA_RemoveRotate(edict_t *targ);
void FXA_SetFadeOut(edict_t *targ, float duration);
void FXA_SetFadeIn(edict_t *targ, float duration);
int FXA_CheckFade(edict_t *targ); // Returns false if the object should be removed.
class CFXSender
{
private:
int sendFlags;
int flags;
short scale;
byte numElements;
vec3_t pos2;
vec3_t dir;
vec3_t min;
vec3_t max;
short lifeTime;
byte radius;
void clear(void);
void sendData(vec3_t source, multicast_t castType, edict_t *ignoreClient);
int findEffectID(int effectID, edict_t *ent, GhoulID bolt = 0);
int findEffectID(char *name, edict_t *ent, GhoulID bolt = 0)
{findEffectID(gi.effectindex(name), ent, bolt);}
public:
CFXSender(void){flags = 0;}
// data transmission
void setScale(float val){assert(val > -256); assert(val < 256); scale = val * 128; flags |= EFF_SCALE;}
void setNumElements(float val){assert(val >= 0);assert(val < 256); numElements = val; flags |= EFF_NUMELEMS;}
void setPos2(vec3_t in){VectorCopy(in, pos2); flags |= EFF_POS2;}
void setDir(vec3_t in){VectorCopy(in, dir); flags |= EFF_DIR;}
void setMin(vec3_t in){VectorCopy(in, min); flags |= EFF_MIN;}
void setMax(vec3_t in){VectorCopy(in, max); flags |= EFF_MAX;}
void setLifetime(float val){assert(val > -256); assert(val < 256); lifeTime = val * 128; flags |= EFF_LIFETIME;}
void setRadius(float val){assert(val >= 0); assert(val < 256); radius = val; flags |= EFF_RADIUS;}
void setPos2AsWallEndPoint(void){sendFlags |= EFAT_POSTOWALL;}
// burst effects
void exec(int effectID, vec3_t pos, multicast_t castType = MULTICAST_PHS, edict_t *ignoreClient = 0);
void exec(int effectID, edict_t *ent, multicast_t castType = MULTICAST_PHS, edict_t *ignoreClient = 0);
void exec(int effectID, edict_t *ent, GhoulID bolt, multicast_t castType = MULTICAST_PHS, int usesAltAxis = 0, edict_t *ignoreClient = 0);
void execWithInst(int effectID, edict_t *ent, IGhoulInst *inst, GhoulID bolt, multicast_t castType = MULTICAST_PHS, int usesAltAxis = 0, edict_t *ignoreClient = 0);
void execFromRandomBolt(int effectID, edict_t *ent, multicast_t castType = MULTICAST_PHS, int usesAltAxis = 0, edict_t *ignoreClient = 0);
void exec(char *name, vec3_t pos, multicast_t castType = MULTICAST_PHS, edict_t *ignoreClient = 0)
{exec(gi.effectindex(name), pos, castType, ignoreClient);}
void exec(char *name, edict_t *ent, multicast_t castType = MULTICAST_PHS, edict_t *ignoreClient = 0)
{exec(gi.effectindex(name), ent, castType, ignoreClient);}
void exec(char *name, edict_t *ent, GhoulID bolt, multicast_t castType = MULTICAST_PHS, int usesAltAxis = 0, edict_t *ignoreClient = 0)
{exec(gi.effectindex(name), ent, bolt, castType, usesAltAxis, ignoreClient);}
void execWithInst(char *name, edict_t *ent, IGhoulInst *inst, GhoulID bolt, multicast_t castType = MULTICAST_PHS, int usesAltAxis = 0, edict_t *ignoreClient = 0)
{execWithInst(gi.effectindex(name), ent, inst, bolt, castType, usesAltAxis, ignoreClient);}
void execFromRandomBolt(char *name, edict_t *ent, multicast_t castType = MULTICAST_PHS, int usesAltAxis = 0, edict_t *ignoreClient = 0)
{execFromRandomBolt(gi.effectindex(name), ent, castType, usesAltAxis, ignoreClient);}
// continual stuff
void execContinualEffect(int effectID, edict_t *ent, GhoulID bolt = 0, float size = 0);
void execContinualEffectFromRandomBolt(int effectID, edict_t *ent, float size = 0);
void stopContinualEffect(int effectID, edict_t *ent, GhoulID bolt = 0);
void editContinualEffect(int effectID, edict_t *ent, GhoulID bolt = 0, float newSize = 0);
void clearContinualEffects(edict_t *ent);
float getEffectSizeVal(int effectID, edict_t *ent, GhoulID bolt = 0);
int hasEffect(int effectID, edict_t *ent, GhoulID bolt = 0);
void execContinualEffect(char *name, edict_t *ent, GhoulID bolt = 0, float size = 0)
{execContinualEffect(gi.effectindex(name), ent, bolt, size);}
void execContinualEffectFromRandomBolt(char *name, edict_t *ent, float size = 0)
{execContinualEffectFromRandomBolt(gi.effectindex(name), ent, size);}
void stopContinualEffect(char *name, edict_t *ent, GhoulID bolt = 0)
{stopContinualEffect(gi.effectindex(name), ent, bolt);}
void editContinualEffect(char *name, edict_t *ent, GhoulID bolt = 0, float newSize = 0)
{editContinualEffect(gi.effectindex(name), ent, bolt, newSize);}
float getEffectSizeVal(char *name, edict_t *ent, GhoulID bolt = 0)
{return getEffectSizeVal(gi.effectindex(name), ent, bolt);}
int hasEffect(char *name, edict_t *ent, GhoulID bolt = 0)
{return hasEffect(gi.effectindex(name), ent, bolt);}
};
extern CFXSender fxRunner;
#endif