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

724 lines
No EOL
14 KiB
C

// q_sh_fx.h
#ifndef _Q_SH_FX_
#define _Q_SH_FX_
#include "..\ghoul\ighoul.h"
typedef enum
{
RI_WORLD,
RI_WORLD_NOSURF,
RI_BMODEL,
RI_ENT,
}relativeInfo_t;
#define DEBRIS_YES 'y'
#define DEBRIS_PRECACHE_IMAGE 'p' // kef -- sorry hack. precache image for remote_cameras
// need debris to be shared so entity spawn functions can register which
//debris types need to be cached
enum
{
CLGHL_CHUNKBRICK,
CLGHL_CHUNKGLASSSM,
CLGHL_CHUNKGLASSMED,
CLGHL_CHUNKGLASSLRG,
CLGHL_CHUNKMETALSM,
CLGHL_CHUNKMETALMED,
CLGHL_CHUNKMETALLRG,
CLGHL_CHUNKROCKSM,
CLGHL_CHUNKROCKMED,
CLGHL_CHUNKROCKLRG,
CLGHL_CHUNKROCKTINY,
CLGHL_CHUNKWALLSM,
CLGHL_CHUNKWALLMED,
CLGHL_CHUNKWALLLRG,
CLGHL_CHUNKWALLTINY,
CLGHL_CHUNKWOODSM,
CLGHL_CHUNKWOODMED,
CLGHL_CHUNKWOODLRG,
CLGHL_SHELL,
CLGHL_EXPLODEBIG,
CLGHL_EXPLODESML,
CLGHL_CAN,
CLGHL_PAPER,
CLGHL_MUSHROOM,
CLGHL_ENDOFLIST,
NUM_CLGHL,
};
typedef struct cl_ghoul_data_s
{
char *path;
char *file;
char *material;
int partCnt; // Number of parts in model
}cl_ghoul_data_t;
extern cl_ghoul_data_t cl_fxg [NUM_CLGHL];
// need decals to be shared so entity spawn functions can register which
//decals need to be cached
enum
{
CLMOD_SMOKE = 0,
CLMOD_BLOOD1,
CLMOD_BLOOD2,
CLMOD_BLOOD3,
CLMOD_BLOODPOOL2,
CLMOD_FOOTPRINT,
CLMOD_FOOTPRINT2,
CLMOD_LIGHTNING,
CLMOD_RING,
CLMOD_DIRT,
CLMOD_SPARKPART,
CLMOD_WATER,
CLMOD_POWDER,
CLMOD_BHOLE,
CLMOD_BULLETWHIZ,
CLMOD_SPARKPARTBLUE,
CLMOD_FLARE,
CLMOD_WATERDROP,
CLMOD_GENERIC_DENT,
CLMOD_RAIN,
CLMOD_MFLASH,
CLMOD_SHOCKBLUE,
CLMOD_SHOCK3,
CLMOD_SHOCK4,
CLMOD_BOOM3,
CLMOD_BOOM5,
CLMOD_SCORCH,
// CLMOD_OIL1,
// CLMOD_OIL2,
CLMOD_OOZE,
CLMOD_FIREEXPLODE,
CLMOD_WHITESCORCH,
CLMOD_SNOW,
CLMOD_BUBBLE,
CLMOD_PIPELEFT,
CLMOD_BHOLEGLASS,
CLMOD_SLASH,
CLMOD_RINGBLAST,
CLMOD_BEAM,
CLMOD_MFLASH2,
CLMOD_MFLASH3,
CLMOD_MFLASH4,
CLMOD_FLARE2,
CLMOD_SMOKE2,
CLMOD_BHOLE_METAL,
CLMOD_BHOLE_WD,
CLMOD_MINIMIFLASH1,
CLMOD_MINIMIFLASH2,
CLMOD_MINIMIFLASH3,
CLMOD_EXP_FIRE1,
CLMOD_EXP_FIRE2,
CLMOD_EXP_FIRE3,
CLMOD_EXP_FIRE4,
CLMOD_EXP_SMKGRN,
CLMOD_EXP_SMKGRY,
CLMOD_EXP_SMKWHT,
CLMOD_EXP_FIRESTREAK,
CLMOD_EXP_WHITESTREAK,
CLMOD_PUDDLE,
CLMOD_ENDOFLIST,
NUM_CLMODS
};
// need client sound effects to be shared so entity spawn functions can register which
//sounds need to be cached
#define NUM_SPLATTERSOUNDS 3
#define NUM_FOOTSTEPS_PER_GROUP 4
#define NUM_RICOCHETSOUNDS 3
#define NUM_PASSBYSOUNDS 4
#define NUM_FLESHIMPACTS 3
#define NUM_KNIFESLASHES 3
#define NUM_GORE_FALLS 3
enum
{
CLSFX_SPARK1 = 0,
CLSFX_SPARK2,
CLSFX_FOOTSTEP_METAL,
CLSFX_FOOTSTEP_SNOW = CLSFX_FOOTSTEP_METAL + NUM_FOOTSTEPS_PER_GROUP,
CLSFX_FOOTSTEP_WATER = CLSFX_FOOTSTEP_SNOW + NUM_FOOTSTEPS_PER_GROUP,
CLSFX_FOOTSTEP_GRASS = CLSFX_FOOTSTEP_WATER + NUM_FOOTSTEPS_PER_GROUP,
CLSFX_FOOTSTEP_GRAVEL = CLSFX_FOOTSTEP_GRASS + NUM_FOOTSTEPS_PER_GROUP,
CLSFX_FOOTSTEP_SAND = CLSFX_FOOTSTEP_GRAVEL + NUM_FOOTSTEPS_PER_GROUP,
CLSFX_FOOTSTEP_WOOD = CLSFX_FOOTSTEP_SAND + NUM_FOOTSTEPS_PER_GROUP,
CLSFX_FOOTSTEP_STONE = CLSFX_FOOTSTEP_WOOD + NUM_FOOTSTEPS_PER_GROUP,
// CLSFX_SPLATTERS = CLSFX_FOOTSTEP_STONE + NUM_FOOTSTEPS_PER_GROUP,
//CLSFX_RICOCHETS = CLSFX_SPLATTERS + NUM_SPLATTERSOUNDS,
CLSFX_RICOCHETS = CLSFX_FOOTSTEP_STONE + NUM_FOOTSTEPS_PER_GROUP,
CLSFX_STONEIMPACT = CLSFX_RICOCHETS + NUM_RICOCHETSOUNDS,
CLSFX_WATERIMPACT,
CLSFX_WOODIMPACT,
CLSFX_GRASSIMPACT,
CLSFX_GRAVELIMPACT,
CLSFX_SANDIMPACT,
CLSFX_SNOWIMPACT,
CLSFX_METALIMPACT,
CLSFX_FLESHIMPACT,
CLSFX_PASSBY = CLSFX_FLESHIMPACT + NUM_FLESHIMPACTS,
CLSFX_SHOT = CLSFX_PASSBY + NUM_PASSBYSOUNDS,
CLSFX_THUNDER,
CLSFX_FLASHPACK,
CLSFX_AUTOGUNFIRE,
CLSFX_AUTOGUNSLOW,
CLSFX_AUTOGUNSTOP,
CLSFX_EXPLODE,
CLSFX_CHAIR_SQUEAK1,
CLSFX_CHAIR_SQUEAK2,
CLSFX_CHAIR_SQUEAK3,
CLSFX_TRAIN_BRAKE,
CLSFX_TRAIN_HORN,
CLSFX_TRAIN_IMPACT,
CLSFX_TRAIN_MOVE,
CLSFX_KNIFE_SLASH,
CLSFX_KNIFE_IMPACT = CLSFX_KNIFE_SLASH + NUM_KNIFESLASHES,
CLSFX_KNIFE_THROW,
CLSFX_LAND_GRASS,
CLSFX_LAND_GRAVEL,
CLSFX_LAND_METAL,
CLSFX_LAND_SAND,
CLSFX_LAND_SNOW,
CLSFX_LAND_STONE,
CLSFX_LAND_WATER,
CLSFX_LAND_WOOD,
// CLSFX_SHOT_EAGLE,
// CLSFX_SHOT_INGRAM,
// CLSFX_SHOT_JACK,
// CLSFX_SHOT_FIREBALL,
// CLSFX_SHOT_JACKALT,
// CLSFX_SHOT_SNIPER,
// CLSFX_SHOT_SPAS,
// CLSFX_SHOT_SPASALT,
// CLSFX_SHOT_MINIMIALT,
CLSFX_METALSTRIKE1,
CLSFX_METALSTRIKE2,
CLSFX_METALSTRIKE3,
// CLSFX_SHOT_MINIMI,
// CLSFX_PHOSGREN,
CLSFX_BREAK_GLASSBIG,
CLSFX_BREAK_GLASSMED,
CLSFX_BREAK_GLASSSMALL,
CLSFX_BREAK_METAL,
CLSFX_BREAK_STONE,
CLSFX_BREAK_WOOD,
CLSFX_ELECTRICARC,
CLSFX_EXP_LARGE,
CLSFX_EXP_MEDIUM,
CLSFX_EXP_SMALL,
CLSFX_PHONE_HIT,
CLSFX_TRASHCAN_FLIP,
CLSFX_METALTINK1,
CLSFX_METALTINK2,
CLSFX_METALTINK3,
CLSFX_GENTINK1,
CLSFX_GENTINK2,
CLSFX_GORE_FALL,
CLSFX_CRACK1 = CLSFX_GORE_FALL + NUM_GORE_FALLS,
CLSFX_CRACK2,
CLSFX_CRACK3,
CLSFX_SHOT_HELI1,
CLSFX_SHOT_HELI2,
CLSFX_SHOT_HELI3,
CLSFX_SHOTGUNTINK1,
CLSFX_SHOTGUNTINK2,
CLSFX_SHOTGUNTINK3,
CLSFX_HEAVYTINK1,
CLSFX_HEAVYTINK2,
CLSFX_HEAVYTINK3,
CLSFX_ENDOFLIST,
NUM_CLSFX,
};
typedef struct cl_effect_data_s
{
char *filename;
}cl_effect_data_t;
extern cl_effect_data_t cl_fxs [NUM_CLSFX];
// entity_state_t->event values
// ertity events are for effects that take place reletive
// to an existing entities origin. Very network efficient.
typedef enum
{
EV_NONE,
EV_ITEM_RESPAWN,
EV_PHOSPHUR_EXPLODE,
EV_FOOTSTEPLEFT,
EV_FOOTSTEPRIGHT,
EV_FOOTSTEPLEFTRUN,
EV_FOOTSTEPRIGHTRUN,
EV_FALLSHORT,
EV_FALL,
EV_FALLFAR,
EV_OBJECT_COLLIDE_SHORT,
EV_OBJECT_COLLIDE_MEDIUM,
EV_OBJECT_COLLIDE_FAR,
EV_FOOTSTEPMETALLEFT,
EV_FOOTSTEPMETALRIGHT,
EV_PLAYER_TELEPORT,
EV_CAMERA_SHAKE_VERYLIGHT,
EV_CAMERA_SHAKE_LIGHT,
EV_CAMERA_SHAKE_MEDIUM,
EV_CAMERA_SHAKE_HEAVY,
EV_CAMERA_SHAKE_VERYHEAVY,
EV_BULLETCRACK,//fixme
EV_TINTCLEAR,
EV_NUM
} entity_event_t;
// attached effects
typedef enum
{
AE_NOTHING = 0,
AE_STEAM,
AE_ONFIRE,
AE_WATERSTREAM,
AE_LIGHTNING,
AE_SMOKE,
AE_BLOODRAIN,
AE_FOUNTAIN,
AE_WATERDROPS,
AE_SHAKE,
AE_SPRINKLER,
AE_HELISMOKE,
AE_HUMANFLAME,
AE_INFERNO,
AE_CSIDE_ROTATE,//yuck
AE_NUM_AES
} attached_effect_t;
// If this list is updated, be sure to update bin_nt/sof.mat
enum
{
SURF_NONE = -1,
SURF_DEFAULT = 0,
SURF_METAL_ALSO, // 2/10/00 kef -- rick wants METAL and METAL_STEAM switched
SURF_SAND_YELLOW,
SURF_SAND_WHITE,
SURF_SAND_LBROWN,
SURF_SAND_DBROWN, // 5
SURF_GRAVEL_GREY,
SURF_GRAVEL_DBROWN,
SURF_GRAVEL_LBROWN,
SURF_SNOW,
SURF_LIQUID_BLUE, // 10
SURF_LIQUID_GREEN,
SURF_LIQUID_ORANGE,
SURF_LIQUID_BROWN,
SURF_WOOD_LBROWN,
SURF_WOOD_DBROWN, // 15
SURF_WOOD_LGREY,
SURF_STONE_LGREY, // chunks.tga
SURF_STONE_DGREY, // chunksdrkclgry.tga
SURF_STONE_LBROWN, // chunksbrwn.tga
SURF_STONE_DBROWN, // 20 chunksbrwn.tga
SURF_STONE_WHITE, // chunkswht.tga
SURF_STONE_GREEN, // chunkgreen.tga
SURF_STONE_RED, // chunkred.tga
SURF_STONE_BLACK, // chunkblk.tga
SURF_GRASS_GREEN, // 25
SURF_GRASS_BROWN,
SURF_LIQUID_RED,
SURF_METAL, // 2/10/00 kef -- rick wants METAL and METAL_STEAM switched
SURF_METAL_WATERJET,
SURF_METAL_OILSPURT, // 30
SURF_METAL_CHEMSPURT,
SURF_METAL_COMPUTERS,
SURF_SNOW_LBROWN,
SURF_SNOW_GREY,
SURF_BLOOD, // 35
SURF_LIQUID_BLACK,
SURF_GLASS,
SURF_GLASS_COMPUTER,
SURF_SODAMACHINE,
SURF_PAPERWALL, // 40
SURF_NEWSPAPER_DAMAGE,
SURF_METAL_STEAM,
SURF_NUM
};
// Available materials to throw when an object dies.
enum
{
MAT_NONE = -1,
MAT_DEFAULT = 0,
MAT_BRICK_BROWN,
MAT_BRICK_DBROWN,
MAT_BRICK_LBROWN,
MAT_BRICK_LGREY,
MAT_BRICK_DGREY,
MAT_BRICK_RED,
MAT_GLASS,
MAT_METAL_LGREY,
MAT_METAL_DGREY,
MAT_METAL_RUSTY,
MAT_METAL_SHINY,
MAT_ROCK_BROWN,
MAT_ROCK_LBROWN,
MAT_ROCK_DBROWN,
MAT_ROCK_LGREY,
MAT_ROCK_DGREY,
MAT_WOOD_LBROWN,
MAT_WOOD_DBROWN,
MAT_WOOD_DGREY,
MAT_WOOD_LGREY,
MAT_WALL_BLACK,
MAT_WALL_BROWN,
MAT_WALL_DARKBROWN,
MAT_WALL_LIGHTBROWN,
MAT_WALL_GREY,
MAT_WALL_DARKGREY,
MAT_WALL_LIGHTGREY,
MAT_WALL_GREEN,
MAT_WALL_ORANGE,
MAT_WALL_RED,
MAT_WALL_WHITE,
MAT_ROCK_FLESH,
MAT_WALL_STRAW,
MAT_ROCK_SNOW,
MATERIAL_NUM
};
// Possible marks weapons can make
typedef enum
{
DEBRIS_NONE = 0,
DEBRIS_SM,
DEBRIS_MED,
DEBRIS_LRG,
DEBRIS_TINY,
};
// Possible marks weapons can make
typedef enum
{
WMRK_NONE = 0,
WMRK_BULLETHOLE,
WMRK_SLASH,
};
// temp entity events
//
// Temp entity events are for things that happen
// at a location seperate from any existing entity.
// Temporary entity messages are explicitly constructed
// and broadcast.
typedef enum
{
TE_ORANGE_SPARKS,
TE_DUST_PUFF,
TE_EXTINGUISHER_EXPLODE,
TE_BLOODSPRAY,
TE_BLOODPOOL,
TE_EXPLODE,
TE_WALLDAMAGE,
TE_WALLSEVEREDAMAGE,
TE_ELECTRIC_ARC,
TE_WHIZBULLET,
TE_BLUE_SPARKS,
TE_WATER_GLOB,
TE_WATER_SHOCK,
TE_BARREL_EXPLODE,
TE_BARREL_SPARKS,
TE_SCORCHMARK,
TE_SKY_LIGHTNING,
TE_OOZE,
TE_DEBRIS,
TE_C4EXPLODE,
TE_FLASHPACK,
TE_NEURALPULSE,
TE_AUTOGUNMUZZLEFLASH,
TE_WALLSTRIKE,
TE_SHOTGUN,
TE_UNDERWATER_BULLET,
TE_SMOKE_BURST,
TE_TEST_LINE,
TE_PIPELEFT,
TE_WHITESCORCH,
TE_SINKPIPE,
TE_GUMBALLS,
TE_WALLSPARKS,
TE_SHOTGUNMINE,
TE_SPAS,
TE_BLOODSQUIRT,
TE_HELIGUN,
TE_WHITEBURN,
TE_WHITEBLAST,
TE_MINIMISMOKE,
TE_EXPLOSION,
TE_BLOODCLOUD,
TE_HEADEXPLOSION,
TE_BLOODJET,
TE_VEHICLEEXPLOSION,
TE_SMOKE_PUFF,
TE_LITTLEEXPLOSION,
TE_MAKERING,
TE_PAPERCLOUD,
TE_COINS,
TE_SODACANS,
TE_FLOORSPACE,
TE_DUSTBITS,
TE_PUDDLE,
TE_RICOCHET,
TE_MEDIUMEXPLOSION,
TE_LARGEEXPLOSION,
TE_TRACER,
TE_PHONEHIT,
TE_TRASHCANHIT,
TE_DMSHOT,
TE_DMSHOTHIT,
TE_DMSHOTBIGHIT,
TE_DMMUZZLEFLASH,
TE_TESTBOX,
TE_NUM
} temp_event_t;
typedef struct eft_steam_s
{
unsigned short color;
byte dir;
byte size;
byte duration;
byte speed;
byte variance;
byte smokeType;
byte offset[3]; // (-128)
byte more; // these next three generate "more" additional smokes
byte moreDir; // originating "moreDist" from the first one in the direction
byte moreDist; // of moreDir
}eft_steam_t;
typedef struct eft_stream_s
{
byte vel[3]; // (-128) * 5
byte offset[3]; // (-128)
byte duration; // how long each water glob lasts - in hundreths of a second...
byte width;
byte color[3]; // color of the stream
byte randomness;
short floor;
}eft_stream_t;
typedef struct eft_flame_s
{
byte zoffset; // (-128)
byte size;
byte lifeTime; // Life time in hundreths of a second...
}eft_flame_t;
typedef struct eft_rain_t
{
short xrange;
short yrange;
short zrange;
short rainPerSec;
byte lightLevel;
byte rainSpeed;
byte wind;
byte rainLen;
}eft_rain_t;
typedef struct eft_snow_s
{
short width;
short length;
short height;
byte snowPerSec;
byte speed;
byte lightLevel;
byte sideSpeed;
}eft_snow_t;
typedef struct eft_lightning_s
{
unsigned short color;
byte dir;
byte len;
byte freq;
byte thickness;
}eft_lightning_t;
typedef struct eft_shake_s
{
byte amount;
}
eft_shake_t;
enum animtype
{
loop,
backandforth,
};
enum dir
{
forth,
back,
};
typedef struct eft_anim_s
{
byte startframe;
byte endframe;
byte fps; // frames per second
byte animtype;
byte dir;
}eft_anim_t;
typedef struct eft_bloodrain_s
{
byte offset[3]; // (-128)
byte xrange;
byte yrange;
}eft_bloodrain_t;
typedef struct eft_waterdrops_s
{
byte xrange;
byte yrange;
byte frequency;//per sec
byte size;
}eft_waterdrops_t;
typedef struct eft_missilesmoke_s
{
byte bob;
}eft_missilesmoke_t;
typedef struct eft_teargas_s
{
byte thickness;
}eft_teargas_t;
typedef struct eft_sprinkler_s
{
byte vel[3]; //
byte offset[3]; //
byte duration; // how long each water lasts - in hundreths of a second...
byte width;
byte color[3]; // color of the stream
byte randomness;
short floor;
}eft_sprinkler_t;
typedef struct eft_helismoke_s
{
GhoulUUID instID;
GhoulID bolt1;//does this work right?
GhoulID bolt2;
byte smoke1Strength;
byte smoke2Strength;
}eft_helismoke_t;
typedef struct eft_flamethrow_s
{
GhoulUUID inst;
}eft_flamethrow_t;
typedef struct eft_humanflame_s
{
GhoulUUID instID;
byte intense;
byte timeleft; // in tenths of seconds
}eft_humanflame_t;
typedef struct eft_tripbeam_s
{
paletteRGBA_t pal;
short offset[3];
byte width;
}eft_tripbeam_t;
typedef struct eft_inferno_s
{
byte intensity;
byte winddir;
byte windspeed;
short xrange;
short yrange;
short zrange;
}eft_inferno_t;
typedef struct eft_shadow_s
{
byte size;
}eft_shadow_t;
typedef struct eft_rotate_s
{
short buffer;//fixing a problem through hackery. Sigh.
short xRot;
short yRot;
short zRot;
short boltonID;
short boltonID2;
short boltonID3;
short boltonID4;
}eft_rotate_t;
typedef struct eft_fade_s
{
long int startTime; // what time did the fade begin?
short duration; // How many milliseconds does it take to fade? Negative = fade in.
}eft_fade_t;
typedef struct eft_marker_s
{
short markerID;
byte priority;
}eft_marker_t;
typedef struct eft_normal_s
{
unsigned char b[29];
}eft_normal_t;
// effect fields that can be sent
#define EFF_SCALE 0x01
#define EFF_NUMELEMS 0x02
#define EFF_POS2 0x04
#define EFF_DIR 0x08
#define EFF_MIN 0x10
#define EFF_MAX 0x20
#define EFF_LIFETIME 0x40
#define EFF_RADIUS 0x80
#define EFAT_POS 0x01
#define EFAT_ENT 0x02
#define EFAT_BOLT 0x04
#define EFAT_BOLTANDINST 0x08
#define EFAT_POSTOWALL 0x20 // pos2 gets frame updates
#define EFAT_ALTAXIS 0x40 // uses different axis for ghoul stuff
#define EFAT_HASFLAGS 0x80
#endif _Q_SH_FX_