// 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_