Cthulhu.fgd
From Valve Developer Community
Jump to navigation
Jump to search
From Cthulhu1
cthulhu1.fgd
Forge Game Data
//
// Spirit game definition file (.fgd)
// version 0.6
// for Worldcraft 3.3 and above, and Half-Life 1.1.0.8 and above
// last update: 8th January 2002
//
//INFO
//
// For any "target" type value, you can use a "+" or "-" prefix to
// specify that the target should be turned on or off, respectively.
// (e.g. suppose you have an entity which targets "mylight". If you tell it
// to target "+mylight" instead, then it will only turn the light on, never
// off.)
// Similarly, for any Master, you can invert the master relationship (that
// is, you can disable the entity whenever the master <u>is</u> on) by
// adding a tilde (~) at the start of the master's name.
//
// When testing your level, it's sometimes helpful to be able to trigger
// entities manually. To trigger an entity named "mydoor", you can simply
// type "fire mydoor" at the console.
// Similarly, if you just type "fire", you will trigger whatever entity the
// player is aiming at.
// NB: this command will only work if sv_cheats is set to 1.
//
//ENDS
// Cthulhu: An Unspeakable Half-Life Modification game definition file (.fgd)
// version 1.0
// for Worldcraft 3.3 and above, and Half-Life 1.1.0.6 and above
// last update: 04/09/2001
//
// updated by Phil Guy
// [email protected]
// http://www.xs4all.nl/~philg
//
//
// List changes here...
//
//
// Worldspawn
//
@SolidClass = worldspawn : "World entity"
[
message(string) : "Map Description / Title"
skyname(string) : "environment map (cl_skyname)"
sounds(integer) : "CD track to play" : 1
light(integer) : "Default light level"
WaveHeight(string) : "Default Wave Height" : "0.0"
MaxRange(string) : "Max viewable distance" : "4096"
chaptertitle(string) : "Chapter Title Message"
startdark(choices) : "Level Fade In" : 0 =
[
0 : "No"
1 : "Yes"
]
gametitle(choices) : "Display 'Half-Life' title?" : 0 =
[
0 : "No"
1 : "Yes"
]
newunit(choices) : "Flush global entities?" : 0 =
[
0 : "No, keep global ents"
1 : "Yes, flush global ents"
]
mapteams(string) : "Map Team List"
defaultteam(choices) : "Default Team" : 0 =
[
0 : "Fewest Players"
1 : "First Team"
]
//NEW 0.3
//* Yes means the player will start this level wearing an HEV suit.
startsuit(choices) : "HEV from start" =
[
0 : "No"
1 : "Yes"
]
//NEW 0.4
//* Yes means that monsters will appear in multiplayer games. This has no effect in a single player level.
allowmonsters(choices) : "Allow Monsters (MP only)" =
[
0 : "No"
1 : "Yes"
]
]
//
// BaseClasses
//
//* "ZHLTReference.html" (included with the ZHLT Distribution) contains information on using these keys.
@BaseClass = ZHLTLightKeys
[
zhlt_lightflags(choices) : "HLRAD Opacity (ZHLT 2.5.1+)" : 0 =
[
0: "Normal (0)"
1: "Embedded Fix (1)"
2: "Opaque (Blocks light) (2)"
3: "Opaque + Embedded Fix (3)"
6: "ConcaveFix (6)"
]
light_origin(string) : "Light Origin (ZHLT 2.5.1+)"
]
@BaseClass = ZhltLights
[
_fade(integer) : "Fade (ZHLT 2.5.1+)"
_falloff(choices) : "Falloff (ZHLT 2.5.1+)" : 2 =
[
1: "Inverse Square (1)"
2: "Inverse Linear (2)"
]
]
@BaseClass = TexLight
[
//NEW 1.0
style(choices) : "Texlight style" : 0 =
[
0 : "Normal (on)"
10: "Fluorescent flicker"
2 : "Slow, strong pulse"
11: "Slow pulse, noblack"
5 : "Gentle pulse"
1 : "Flicker A"
6 : "Flicker B"
3 : "Candle A"
7 : "Candle B"
8 : "Candle C"
4 : "Fast strobe"
9 : "Slow strobe"
12: "Underwater"
]
]
@BaseClass = SwitchTexLight
[
//NEW 1.0
style(choices) : "Texlight style" : 0 =
[
0 : "Normal (on)"
-1: "Switchable (starts on)"
-2: "Switchable (starts off)"
10: "Fluorescent flicker"
2 : "Slow, strong pulse"
11: "Slow pulse, noblack"
5 : "Gentle pulse"
1 : "Flicker A"
6 : "Flicker B"
3 : "Candle A"
7 : "Candle B"
8 : "Candle C"
4 : "Fast strobe"
9 : "Slow strobe"
12: "Underwater"
]
]
@BaseClass = Appearflags
[
//NEW 0.6
skill(choices) : "Skill setting" : 0 =
[
0 : "All skills"
1 : "Not in easy"
2 : "Not in medium"
4 : "Not in hard"
6 : "Only in easy"
5 : "Only in medium"
3 : "Only in hard"
]
spawnflags(Flags) =
[
2048 : "Not in Deathmatch" : 0
]
]
@BaseClass = Angles
[
angles(string) : "Pitch Yaw Roll (Y Z X)" : "0 0 0"
]
@BaseClass = Targetname
[
targetname(target_source) : "Name"
]
@BaseClass = Target
[
target(target_destination) : "Target"
]
@BaseClass = MoveWith
[
//NEW 0.3
movewith(target_destination) : "Moves with"
]
@BaseClass = Master
[
//* To invert the master relationship (that is, to disable this entity whenever the master <u>is</u> on),
//* add a tilde (~) at the start of the master's name.
master(string) : "Master"
]
@BaseClass size(-16 -16 0, 16 16 32) color(0 0 200) base(Targetname, Angles, Appearflags) = Weapon []
@BaseClass base(Weapon) color(80 0 200) = Ammo []
@BaseClass = Global
[
globalname(string) : "Global Entity Name"
]
@BaseClass base(Target) = Targetx
[
delay(string) : "Delay before trigger" : "0"
killtarget(target_destination) : "KillTarget"
]
@BaseClass = RenderFxChoices
[
renderfx(choices) : "Render FX" : 0 =
[
0: "Normal"
//* Additive or Texture mode only.
1: "Slow Pulse"
//* Additive or Texture mode only.
2: "Fast Pulse"
//* Additive or Texture mode only.
3: "Slow Wide Pulse"
//* Additive or Texture mode only.
4: "Fast Wide Pulse"
9: "Slow Strobe"
10: "Fast Strobe"
11: "Faster Strobe"
12: "Slow Flicker"
13: "Fast Flicker"
//These don't seem to work.
// 5: "Slow Fade Away"
// 6: "Fast Fade Away"
// 7: "Slow Become Solid"
// 8: "Fast Become Solid"
//* This setting only affects the Glow rendermode. With this setting, Glow mode behaves
//* exactly like Additive mode - except that (as is usual for Glow mode) the sprite isn't
//* obscured by intervening sprites or models. (Hmm. Call me slow, but..... how is this
//* useful?)
14: "Constant Glow (Sprites)"
15: "Distort (Models)"
16: "Hologram (Distort + fade)"
//* Strange effect. As seen, briefly, when a Gargantua dies.
18: "Bulge Sideways (Models)"
//* Quite pretty. As seen in Valve's mod Deathmatch Classic.
19: "Glowing Aura (Models)"
//NEW 1.0
//* Draw a reflection under this model's feet.
21: "Reflection (Models)"
]
]
@BaseClass = RenderMode
[
rendermode(choices) : "Render Mode" : 0 =
[
0: "Normal"
//* For BSP objects, the object will be rendered as a pure area of whatever
//* color is specified in FX Color.
//* For models and sprites, this is the same as Normal mode.
1: "Pure Color"
//* For BSP objects, the object will be rendered without shadows.
//* For models and sprites, this is the same as Normal mode, except that the Pulse
//* renderfx settings work.
2: "Texture"
//* Like additive, but as the player gets further from the sprite, it gets
//* progressively larger and more transparent. The sprite is also not obscured by
//* intervening models, which can sometimes look bad.
//* Alphatest sprites won't use their masks in this mode.
3: "Glow (sprites only)"
//* For BSP objects, this only affects textures beginning with {. Blue pixels
//* will be transparent; non-blue pixels will be solid.
//* For models, this mode is the same as Normal mode.
//* For sprites, this mode is for displaying sprites in Indexalpha mode - i.e.
//* the palette positions are used as opacity settings; 0 for fully transparent,
//* and 255 for fully opaque, regardless of what the palette colors actually are.
//* The only palette colour that will be used is the last one, which sets the
//* colour for the whole sprite. (Needless to say, this will look odd unless the
//* sprite is designed to be displayed this way!)
//* Oddly, Alphatest sprites won't use their masks in this mode.
4: "Solid"
//* Only bright parts of the object are visible; darker parts are just more
//* transparent, and black is not drawn. Useful for making lighting or hologram
//* effects.
5: "Additive"
]
]
@BaseClass base(RenderFxChoices, RenderMode) = RenderFields
[
renderamt(integer) : "FX Amount (1 - 255)" : 0
rendercolor(color255) : "FX Color (R G B)" : "0 0 0"
]
@BaseClass base(RenderFxChoices, RenderMode) = RenderFieldsMax
[
renderamt(integer) : "FX Amount (1 - 255)" : 255
rendercolor(color255) : "FX Color (R G B)" : "255 255 255"
]
@BaseClass = LockSounds
[
//* The locked sound & sentence will be played if:
//* 1) The player walks into a door which has a name. (and Force Touchable isn't selected.)
//* 2) A door/button with a master gets activated, but the master is disabled.
//*
//* The number against each sound corresponds to the wav file played.
//* e.g. Buzz (10) plays "buttons/button10.wav".
locked_sound(choices) : "Locked Sound" : 0 =
[
0 : "None"
2 : "Access Denied (2)"
8 : "Small zap (8)"
10: "Buzz (10)"
11: "Buzz Off (11)"
12: "Latch Locked (12)"
]
//* The unlocked sound & sentence will be played whenever a door starts to open and whenever
//* a button starts to push in. (They will never be played when a door starts to close, even if
//* "Toggle" is selected.)
//*
//* The number against each sound (except lightswitch) corresponds to the wav file played.
//* e.g. Buzz (10) plays "buttons/button10.wav".
unlocked_sound(choices) : "Unlocked Sound" : 0 =
[
0 : "None"
1 : "Big zap & Warmup (1)"
3 : "Access Granted (3)"
4 : "Quick Combolock (4)"
5 : "Power Deadbolt 1 (5)"
6 : "Power Deadbolt 2 (6)"
7 : "Plunger (7)"
8 : "Small zap (8)"
9 : "Keycard Sound (9)"
10: "Buzz (10)"
13: "Latch Unlocked (13)"
14: "Lightswitch"
]
//* The letters correspond to the sentence group played (see sound/sentences.txt);
//* e.g. Blast Door (NF) will cycle through NF0, NF1 and NF3.
locked_sentence(choices) : "Locked Sentence" : 0 =
[
0: "None"
1: "Gen. Access Denied (NA)"
2: "Security Lockout (ND)"
3: "Blast Door (NF)"
4: "Fire Door (NFIRE)"
5: "Chemical Door (NCHEM)"
6: "Radiation Door (NRAD)"
7: "Gen. Containment (NCON)"
8: "Maintenance Door (NH)"
9: "Broken Shut Door (NG)"
]
//* The letters correspond to the sentence group played (see sound/sentences.txt);
//* e.g. Blast Door (EF) will cycle through EF0, EF1 and EF3.
unlocked_sentence(choices) : "Unlocked Sentence" : 0 =
[
0: "None"
1: "Gen. Access Granted (EA)"
2: "Security Disengaged (ED)"
3: "Blast Door (EF)"
4: "Fire Door (EFIRE)"
5: "Chemical Door (ECHEM)"
6: "Radiation Door (ERAD)"
7: "Gen. Containment (ECON)"
8: "Maintenance area (EH)"
]
]
@BaseClass base(Angles) size(-16 -16 -36, 16 16 36) color(0 255 0) = PlayerClass []
@BaseClass base(Targetname, Angles, RenderFields, Appearflags) color(0 200 200) = Monster
[
//NEW 0.7.1
health(integer) : "Initial health (0 = normal)"
//NEW 0.7.1
//* Be careful when changing this - a monster's actions are tied closely to its model.
model(studio) : "Model (e.g. models/can.mdl)"
//NEW 0.7.1
skin(integer) : "Skin"
//NEW 1.0
scale(string) : "Scale (1.0 = normal size)"
target(string) : "Patrol Path"
//NEW 0.4
//* If you just want a monster to be ignored, use the "Prisoner" flag instead.
m_iClass(choices) : "Behave as" : 0 =
[
0 : "Normal"
//* Likes players and barneys; hates Human Military and most aliens; scared of Alien Military and Bullsquids.
3 : "Scientist"
//* Likes players and scientists; dislikes Machines, Human Military, and all aliens.
11: "Barney"
//* Dislikes scientists and most aliens. Hates players, barneys and Alien Military.
4 : "Human Military"
//* Machines go clang when hit, and never gib. Bioweapons (Snarks and Hornets) ignore them.
//* Otherwise, they're pretty much like Human Military.
1 : "Machine (Human Military)"
//* Hates players and Human Military. Dislikes Machines, scientists and barneys.
5 : "Alien Military"
//* Dislikes Machines and all humans.
7 : "Other Alien"
//* Dislikes all humans. Scared of Bullsquids.
8 : "Headcrab"
//* Hates Headcrabs. Dislikes humans and other Bullsquids.
9 : "Bullsquid"
//* Dislikes everyone, except other Faction A members.
16 : "Faction A"
//* Dislikes everyone, except other Faction B members.
17 : "Faction B"
//* Dislikes everyone, except other Faction C members.
18 : "Faction C"
]
//NEW 0.5
//* Replaces the old "Player Ally" flag.
m_iPlayerReact(choices) : "Reaction to player" : 0 =
[
0 : "Normal"
1 : "Ignore"
//* Scientists usually use this behaviour.
2 : "Friendly until hurt"
//* Barneys usually use this behaviour.
3 : "Friendly unless provoked"
4 : "Enemy"
// Not yet implemented, but will allow any monster to act like a barney/scientist.
//5 : "Follower"
]
TriggerTarget(String) : "TriggerTarget"
TriggerCondition(Choices) : "Trigger Condition" =
[
0 : "No Trigger"
1 : "See Player, Mad at Player"
2 : "Take Damage"
3 : "50% Health Remaining"
4 : "Death"
7 : "Hear World"
8 : "Hear Player"
9 : "Hear Combat"
10: "See Player Unconditional"
11: "See Player, Not In Combat"
]
spawnflags(Flags) =
[
//* Don't attack the player until s/he can see us.
1 : "WaitTillSeen" : 0
//* Don't speak except when in combat. Don't make "idle" noises.
2 : "Gag" : 0
//* If ticked, the monster can't enter a func_monsterclip area.
4 : "Monster Clip" : 0
//* If ticked, the monster will ignore all other monsters and vice versa.
16: "Prisoner" : 0
//NEW 0.4
//* The dreaded yellow blobs appear for a good reason; they show a monster is stuck
//* in a wall and unable to move. Only tick this if you're happy for it to be stuck.
128: "No yellow blobs" : 0
512: "Fade Corpse" : 0
]
]
@BaseClass = TalkMonster
[
//* The sentence (see sound/sentences.txt) to speak when the player tells us to follow.
UseSentence(String) : "Use Sentence"
//* The sentence to speak when the player tells us to stop following.
UnUseSentence(String) : "Un-Use Sentence"
//NEW 0.4
//* The sentence to speak when refusing to follow the player.
RefusalSentence(String) : "Refusal Sentence"
//NEW 0.4
//* While locked by the master, this monster will refuse to follow the player.
master(String) : "Master (prevents following)"
//NEW 0.4
//* Mostly provided for mod-makers. In the standard sentences.txt, valid settings for
//* this are BA (speak as a Barney) and SC (speak as a Scientist). To define a
//* speech group "XX", you need to define sentences XX_ANSWER, XX_QUESTION, XX_IDLE,
//* XX_STARE, XX_OK, XX_WAIT, XX_STOP, XX_NOSHOOT, XX_HELLO, XX_SMELL, XX_WOUND and
//* XX_MORTAL. (as well as some others, if the monsters are going to be Pre-Disaster.)
SpeakAs(string) : "Speech Group"
spawnflags(Flags) =
[
//* Unless given a Master, a pre-disaster monster will refuse to follow the player.
256: "Pre-Disaster" : 0
]
]
@BaseClass base(Targetname, Angles, MoveWith) size(-16 -16 -16, 16 16 16) = gibshooterbase
[
//* The number of pieces to create.
m_iGibs(integer) : "Number of shots" : 1
//* Delay (in seconds) between shots. If 0, all the gibs are fired at once.
delay(string) : "Delay between shots" : "0"
m_iszPosition(string) : "At position (blank = here) [LP]"
m_iszVelocity(string) : "At velocity (blank = angle) [LV]"
//* How fast the gibs are fired
m_flVelocity(string) : "Gib Speed Factor [LR]" : "200"
//* Course variance
m_flVariance(string) : "Course Variance" : "0.15"
//* Time in seconds for gibs to live, +/- 5%
m_flGibLife(string) : "Shot lifetime (secs)" : "4"
m_iszTargetName(string) : "Shot's name"
//NEW 0.7.1
//* If you want to change the behaviour of the shot, this is the field to use -
//* for example, you could target a motion_manager here, to change the shot's movement.
m_iszSpawnTarget(string) : "Fire on spawn (locus = shot)"
spawnflags(Flags) =
[
1 : "Repeatable" : 0
4 : "Debug" : 0
]
]
@BaseClass = Light
[
//* Don't create a light whose name begins with "light" - a bug/feature in RAD means
//* that such a light won't be able to switch on and off.
targetname(target_source) : "Name"
_light(color255) : "Brightness" : "255 255 128 200"
//* This field will have no effect on a dynamic (i.e. named) light.
style(Choices) : "Appearance (static)" : 0 =
[
0 : "Normal (on)"
10: "Fluorescent flicker"
2 : "Slow, strong pulse"
11: "Slow pulse, noblack"
5 : "Gentle pulse"
1 : "Flicker A"
6 : "Flicker B"
3 : "Candle A"
7 : "Candle B"
8 : "Candle C"
4 : "Fast strobe"
9 : "Slow strobe"
12: "Underwater"
]
//* This field will have no effect on a static (i.e. nameless) light.
//* 'a' is dark, 'm' is normal brightness, 'z' is full brightness.
//* There's no support for a light to have a custom appearances when it's in a
//* state other than 'on'. See @trigger_lightstyle if you need this effect.
pattern(string) : "Custom Appearance (on)"
//NEW 0.3
//* This field will have no effect on a static (i.e. nameless) light.
m_iOnStyle(Choices) : "Appearance (on)" : 0 =
[
0 : "Normal (on)"
13: "Off"
10: "Fluorescent flicker"
2 : "Slow, strong pulse"
11: "Slow pulse, noblack"
5 : "Gentle pulse"
1 : "Flicker A"
6 : "Flicker B"
3 : "Candle A"
7 : "Candle B"
8 : "Candle C"
4 : "Fast strobe"
9 : "Slow strobe"
12: "Underwater"
]
//NEW 0.3
//* This field will have no effect on a static (i.e. nameless) light.
m_iOffStyle(Choices) : "Appearance (off)" : 0 =
[
0: "Normal (off)"
20: "On"
10: "Fluorescent flicker"
2 : "Slow, strong pulse"
11: "Slow pulse, noblack"
5 : "Gentle pulse"
1 : "Flicker A"
6 : "Flicker B"
3 : "Candle A"
7 : "Candle B"
8 : "Candle C"
4 : "Fast strobe"
9 : "Slow strobe"
12: "Underwater"
]
//NEW 0.3
m_iTurnOnTime(integer) : "Time taken to turn on (secs)" : 0
//NEW 0.3
//* This field will have no effect on a static (i.e. nameless) light.
m_iTurnOnStyle(Choices) : "Appearance (turn on)" : 0 =
[
0: "Normal (off)"
20: "On"
10: "Fluorescent flicker"
2 : "Slow, strong pulse"
11: "Slow pulse, noblack"
5 : "Gentle pulse"
1 : "Flicker A"
6 : "Flicker B"
3 : "Candle A"
7 : "Candle B"
8 : "Candle C"
4 : "Fast strobe"
9 : "Slow strobe"
12: "Underwater"
]
//NEW 0.3
m_iTurnOffTime(integer) : "Time taken to turn off (secs)" : 0
//NEW 0.3
//* This field will have no effect on a static (i.e. nameless) light.
m_iTurnOffStyle(Choices) : "Appearance (turn off)" : 0 =
[
0 : "Normal (on)"
13: "Off"
10: "Fluorescent flicker"
2 : "Slow, strong pulse"
11: "Slow pulse, noblack"
5 : "Gentle pulse"
1 : "Flicker A"
6 : "Flicker B"
3 : "Candle A"
7 : "Candle B"
8 : "Candle C"
4 : "Fast strobe"
9 : "Slow strobe"
12: "Underwater"
]
]
@BaseClass base(Targetname, Global) = Breakable
[
target(target_destination) : "Target on break"
//NEW 0.7.1
//* Whenever the breakable takes damage, this entity will be triggered, and passed
//* the position and direction of the bullet (or whatever).
whenhit(string) : "Trigger when hit (locus = position)"
health(integer) : "Strength" : 100
material(choices) : "Material type" : 0 =
[
//* <b>Gibs:</b> models/glassgibs.mdl
//* <b>Break noise:</b> debris/bustglassX.wav
//* <b>Bounce noise:</b> debris/glassX.wav
0: "Glass"
//* <b>Gibs:</b> models/woodgibs.mdl
//* <b>Break noise:</b> debris/bustcrateX.wav
//* <b>Bounce noise:</b> debris/woodX.wav
1: "Wood"
//* <b>Gibs:</b> models/metalplategibs.mdl
//* <b>Break noise:</b> debris/bustmetalX.wav
//* <b>Bounce noise:</b> debris/metalX.wav
2: "Metal"
//* <b>Gibs:</b> models/fleshgibs.mdl
//* <b>Break noise:</b> debris/bustfleshX.wav
//* <b>Bounce noise:</b> debris/fleshX.wav
3: "Flesh"
//* <b>Gibs:</b> models/cindergibs.mdl
//* <b>Break noise:</b> debris/bustconcreteX.wav
//* <b>Bounce noise:</b> debris/concreteX.wav
4: "Cinder Block"
//* <b>Gibs:</b> models/ceilinggibs.mdl
//* <b>Break noise:</b> debris/bustceilingX.wav
//* <b>Bounce noise:</b> none
5: "Ceiling Tile"
//* <b>Gibs:</b> models/computergibs.mdl
//* <b>Break noise:</b> debris/bustmetalX.wav
//* <b>Bounce noise:</b> debris/woodX.wav
//* <b>Note:</b> Generates sparks when damaged.
6: "Computer"
//* <b>Gibs:</b> models/glassgibs.mdl
//* <b>Break noise:</b> debris/bustglassX.wav
//* <b>Bounce noise:</b> debris/glassX.wav
//* <b>Note:</b> Makes ricochet noises when damaged.
7: "Unbreakable Glass"
//* <b>Gibs:</b> models/rockgibs.mdl
//* <b>Break noise:</b> debris/bustconcreteX.wav
//* <b>Bounce noise:</b> debris/concreteX.wav
8: "Rocks"
]
explosion(choices) : "Gibs Direction" : 0 =
[
0: "Random"
1: "Relative to Attack"
]
delay(string) : "Delay before fire" : "0"
//* Can be used to override the default "gibs" value for the material you've specified.
gibmodel(studio) : "Gib Model"
spawnobject(choices) : "Spawn On Break" : 0 =
[
0: "Nothing"
1: "Battery"
2: "Healthkit"
3: "Revolver"
4: "Rifle"
5: "Tommy Gun"
6: "Revolver Ammo"
7: "Rifle Ammo"
8: "Shotgun"
9: "Shotgun Shells"
10: "Tommy Gun Clip"
11: "Crystal"
12: "Dynamite"
13: "Molotov Cocktail"
14: "Elder Sign"
15: "Serpent Staff"
16: "Dread Name"
17: "Shrivelling"
18: "Rlyeh Seal"
18: "Drain Life"
]
explodemagnitude(integer) : "Explode Magnitude (0=none)" : 0
//NEW 0.4
respawn(choices) : "Respawn time (secs)" : 0 =
[
0: "No respawn"
-1: "Respawn when triggered"
]
//NEW 0.4
netname(string) : "Target on respawn"
spawnflags(flags) =
[
1 : "Only Trigger" : 0
2 : "Touch" : 0
4 : "Pressure" : 0
8 : "Fade Respawn" : 0
256: "Instant Crowbar" : 0
]
]
@BaseClass base(Appearflags) = Door
[
target(target_destination) : "Target (Always)"
//NEW 0.4
message(string) : "Target on Open"
netname(string) : "Target on Close"
killtarget(target_destination) : "KillTarget"
//NEW 0.5
//* Together with "On/Off Aware", this field replaces the old
//* "synchronised" flag.
//* When set, the door will fire its Target as soon as it
//* <u>starts</u> to move, instead of firing when it reaches the end
//* of its move.
//* (NB: the "Target on Open" and "Target on Close" fields are not
//* affected; they will still fire at the end of movement.)
immediatemode(choices) : "Fire before moving" : 0 =
[
0 : "No"
1 : "Yes"
]
//NEW 0.5
//* Together with "Fire before moving", this field replaces the old
//* "synchronised" flag.
//* When this is set, instead of always firing its target with
//* USE_TOGGLE, the door will send USE_ON when opening and USE_OFF
//* when closing. (NB: the "fire on open" and "fire on close" fields
//* will still send USE_TOGGLE.)
//* Additionally, instead of simply toggling whenever it's
//* triggered, the door will open when sent USE_ON, and close when
//* sent USE_OFF.
onoffmode(choices) : "On/Off Aware" : 0 =
[
0 : "No"
1 : "Yes"
]
speed(integer) : "Speed" : 100
//* The number against each sound corresponds to the wav file played.
//* e.g. Vacuum (4) plays "doors/doormove4.wav".
movesnd(choices) : "Move Sound" : 0 =
[
0: "No Sound"
1: "Servo (Sliding) (1)"
2: "Pneumatic (Sliding) (2)"
3: "Pneumatic (Rolling) (3)"
4: "Vacuum (4)"
5: "Power Hydraulic (5)"
6: "Large Rollers (6)"
7: "Track Door (7)"
8: "Snappy Metal Door (8)"
9: "Squeaky 1 (9)"
10: "Squeaky 2 (10)"
]
//* The number against each sound corresponds to the wav file played.
//* e.g. Chunk (4) plays "doors/doorstop4.wav".
stopsnd(choices) : "Stop Sound" : 0 =
[
0: "No Sound"
1: "Clang with brake (1)"
2: "Clang reverb (2)"
3: "Ratchet Stop (3)"
4: "Chunk (4)"
5: "Light airbrake (5)"
6: "Metal Slide Stop (6)"
7: "Metal Lock Stop (7)"
8: "Snappy Metal Stop (8)"
]
//* Setting wait to -1 also prevents the door from reversing when it comes into
//* contact with the player, as seen on the bunker door in Crossfire.
//* This setting isn't recommended if the door is using MoveWith.
wait(choices) : "Delay before close" : 3 =
[
-1 : "Stays Open (-1)"
]
lip(integer) : "Lip"
dmg(integer) : "Damage inflicted when blocked" : 0
//* This delay only applies to the Target, not the Fire on Open/Close fields.
delay(integer) : "Delay before fire"
health(integer) : "Health (shoot open)" : 0
spawnflags(flags) =
[
1 : "Starts Open" : 0
4 : "Don't link" : 0
8: "Passable" : 0
32: "Toggle" : 0
256:"Use Only" : 0
512: "Monsters Can't" : 0
//NEW 0.3
//* Normally a named door, or a door with "use only" selected, won't open when touched.
//* Tick here to override that.
1024: "Force Touchable" : 0
]
_minlight(string) : "Minimum light level"
]
@BaseClass base(Targetname, Target, Angles, MoveWith, RenderFields, Global) = BaseTank
[
spawnflags(flags) =
[
//* For computer-controlled guns. The gun is 'On'- i.e. ready to fire at the player- at the start of the level.
1 : "Active" : 0
//* For computer-controlled guns. If the gun can't see the player, it won't fire.
//* (usually, for a while, the tank will keep firing at the last place it saw the player.)
16: "Line of Sight" : 0
//* To make a tank which the player can use, you'll also need a @func_tankcontrols entity.
32: "Controllable" : 0
//NEW 0.2
//* Makes the gun project a laser spot, similar to the player's rocket launcher.
//* This is helpful for players who are trying to aim with it.
64: "Laser Spot" : 0
//NEW 0.2
//* For player-controlled guns.
//* Makes the gun point at whatever is at the centre of the player's view, instead of simply facing the same way as the player.
128: "Match Target" : 0
]
//* Mainly for use with 1009 team settings (game_team_master)
master(string) : "(Team) Master"
//NEW 0.6
//* While this master is locked, the gun cannot fire, but the player can still control it.
//* (Intended to enable reloading effects.)
firemaster(string) : "Fire Master"
//NEW 0.7.1
//* Whenever the tank fires, this entity is triggered. (the locus for this is
//* the coordinates and direction at the end of the gun.)
m_iszLocusFire(string) : "Trigger on firing (locus = barrel)"
yawrate(string) : "Yaw rate" : "30"
yawrange(string) : "Yaw range" : "180"
yawtolerance(string) : "Yaw tolerance" : "15"
pitchrate(string) : "Pitch rate" : "0"
pitchrange(string) : "Pitch range" : "0"
pitchtolerance(string) : "Pitch tolerance" : "5"
barrel(string) : "Barrel Length" : "0"
barrely(string) : "Barrel Horizontal" : "0"
barrelz(string) : "Barrel Vertical" : "0"
spritesmoke(sprite) : "Smoke Sprite" : ""
spriteflash(sprite) : "Flash Sprite" : ""
spritescale(string) : "Sprite scale" : "1"
//* Bug fixed: rotate sound now stops when a player releases control of the gun.
rotatesound(sound) : "Rotate Sound" : ""
firerate(string) : "Rate of Fire" : "1"
bullet_damage(string) : "Damage Per Bullet" : "0"
persistence(string) : "Firing persistence" : "1"
firespread(choices) : "Bullet accuracy" : 0 =
[
0: "Perfect Shot"
1: "Small cone"
2: "Medium cone"
3: "Large cone"
4: "Extra-large cone"
]
minRange(string) : "Minmum target range" : "0"
maxRange(string) : "Maximum target range" : "0"
//NEW 0.4
m_iClass(choices) : "Behaviour" : 0 =
[
0: "Attack only players"
11: "Barney"
4: "Human Military"
5: "Alien Military"
]
_minlight(string) : "Minimum light level"
]
@BaseClass = PlatSounds
[
movesnd(choices) : "Move Sound" : 0 =
[
0: "No Sound"
//* plats/bigmove1.wav
1: "big elev 1"
//* plats/bigmove2.wav
2: "big elev 2"
//* plats/elevmove1.wav
3: "tech elev 1"
//* plats/elevmove2.wav
4: "tech elev 2"
//* plats/elevmove3.wav
5: "tech elev 3"
//* plats/freightmove1.wav
6: "freight elev 1"
//* plats/freightmove2.wav
7: "freight elev 2"
//* plats/heavymove1.wav
8: "heavy elev"
//* plats/rackmove1.wav
9: "rack elev"
//* plats/railmove1.wav
10: "rail elev"
//* plats/squeekmove1.wav
11: "squeek elev"
//* plats/talkmove1.wav
12: "odd elev 1"
//* plats/talkmove2.wav
13: "odd elev 2"
]
custommovesnd(sound) : "Custom Move Sound"
stopsnd(choices) : "Stop Sound" : 0 =
[
0: "No Sound"
//* plats/bigstop1.wav
1: "big elev stop1"
//* plats/bigstop2.wav
2: "big elev stop2"
//* plats/freightstop1.wav
3: "freight elev stop"
//* plats/heavystop2.wav
4: "heavy elev stop"
//* plats/rackstop1.wav
5: "rack stop"
//* plats/railstop1.wav
6: "rail stop"
//* plats/squeekstop1.wav
7: "squeek stop"
//* plats/talkstop1.wav
8: "quick stop"
]
customstopsnd(sound) : "Custom Stop Sound"
volume(string) : "Sound Volume 0.0 - 1.0" : "0.85"
]
@BaseClass base(Targetname, RenderFields, Global, PlatSounds) = Trackchange
[
height(integer) : "Travel altitude" : 0
spawnflags(flags) =
[
1: "Auto Activate train" : 0
2: "Relink track" : 0
8: "Start at Bottom" : 0
16: "Rotate Only" : 0
64: "X Axis" : 0
128: "Y Axis" : 0
]
rotation(integer) : "Spin amount" : 0
train(target_destination) : "Train to switch"
toptrack(target_destination) : "Top track"
bottomtrack(target_destination) : "Bottom track"
speed(integer) : "Move/Rotate speed" : 0
]
@BaseClass base(Targetname, Master, Targetx) = Trigger []
@BaseClass = TriggerCond
[
//NEW 0.5
//* Only trigger when touched by an entity with this name.
//* If this is set, the flags "Monsters", "Pushables", etc will be ignored.
//* (Alternatively you can specify a classname, e.g. monster_barney.)
netname(string) : "Triggered only by entity"
spawnflags(flags) =
[
1: "Monsters" : 0
2: "No Clients" : 0
4: "Pushables" : 0
//NEW 0.6
8: "Everything else": 0
]
]
@BaseClass base(Targetname, Angles, MoveWith) size(-16 -16 0, 16 16 72) color(255 0 255) = Script
[
target(target_destination) : "Target (fire when done)"
delay(string) : "Delay before firing target" : "0"
killtarget(target_destination) : "KillTarget when done"
//NEW 0.4
//* When the animation starts, this target will be triggered. (The standard 'target' value is triggered only when the sequence ends.)
//* This is useful to let you have special effects etc triggered during the animation.
m_iszFireOnBegin(string): "Fire after moving"
//* Specify either a classname (e.g. monster_barney) or a targetname to look for.
m_iszEntity(string) : "Target Monster [LE]"
//* If "Target Monster" is a classname, the game picks a random monster of that type from within this
//* search radius.
m_flRadius(integer) : "Search Radius" : 512
//NEW 1.0
m_iPriority(choices) : "Priority" : 0 =
[
0 : "Normal"
4 : "Override other sequences"
]
//NEW 1.0
m_iFinishSchedule(Choices) : "AI Schedule when done" : 0 =
[
0 : "Default AI"
1 : "Ambush"
]
//NEW 0.7.1
m_iRepeats(integer) : "Repeat action X more times" : 0
//NEW 0.7.1
m_fRepeatFrame(string) : "Repeat from frame" : "0"
spawnflags(Flags) =
[
//* Default behaviour for a sequence is to delete itself after finishing.
4 : "Repeatable" : 0
//* If the player shoots a monster or tells a scientist/barney to follow him, any
//* scripts the monster is playing will usually be interrupted.
32: "No Interruptions" : 0
]
]
@BaseClass base(Script) size(-16 -16 0, 16 16 72) color(255 0 255) = ScriptSequence
[
//NEW 1.0
m_iszMoveTarget(string) : "Move target (blank = this) [LE]"
m_fMoveTo(choices) : "Move to Position" : 0 =
[
//* Don't move at all. (Turn Type will be ignored.)
0 : "No (don't turn)"
//* Walk to the move target, then turn.
1 : "Walk"
//* Run to the move target, then turn.
2 : "Run"
//* Don't move - just turn to face to whatever the turn mode.
5 : "No - Only turn"
//* Teleport to the move target. Also, the monster's angle will instantly change to
//* whatever is specified in the turn target's "turn type".
//* Spirit fixes a bug which used to freeze a monster when playing scripts with this setting.
4 : "Instant move + turn"
//NEW 1.0
//* Don't move - just change angle to whatever the turn type specifies, instantly.
6 : "No - Instant turn"
]
//NEW 0.6
//* If you specify a classname (e.g. monster_barney) here, the script will choose a random entity of that
//* type.
m_iszAttack(string) : "Turn target (blank = this) [LE]"
//NEW 0.3
m_fTurnType(choices) : "Turn mode" : 0 =
[
//* Turn to the same angle the turn target is facing.
0 : "Match Angle"
//* Turn to look at the turn target.
1 : "Turn to face"
2 : "Don't Turn"
]
//* Animation to play after moving. Note that a @monster_generic won't add any sounds or
//* special effects to its animations. If you need those to appear, you'll have to use the
//* specific monster_<whatever> entities, instead.
m_iszPlay(string) : "Action Animation" : ""
//* If you specify an idle animation, then when the level begins the monster will be frozen and made
//* to play that animation (this is the main use for the idle animation in Valve's levels). After that
//* the monster will play the action animation when you trigger the sequence, and will then revert to its
//* normal AI.
//* If there are any other scripted_sequences with the same name as this one, then the monster will also play the "idle" animation
//* while it's waiting for the other sequences to be ready to start.
//* And finally, if the action animation is the same as the idle animation, then any time the monster would be playing the idle
//* animation, instead it will be frozen.
//* Obvious, eh? ;)
m_iszIdle(string) : "Idle Animation" : ""
spawnflags(Flags) =
[
//* If the animation includes the monster dying, don't fade the corpse afterwards.
8 : "Leave Corpse" : 0
//* Even if the animation makes the monster look like it's walking around, DON'T shift
//* the monster to its apparent new location when the animation ends.
128: "No Script Movement" : 0
//NEW 0.4
//* Some death sequences kill the monster automatically (e.g. "herodie" in loader.mdl)
//* but for most you'll have to tick this box. This is affected by Leave Corpse in the
//* obvious way.
256: "Monster Dies" : 0
]
]
//
// Entities
//
//* Obsolete. Use scripted_sequence. (The only difference between them is that aiscripted_sequence
//* effectively has its "Override AI" flag ticked all the time.
@PointClass base(ScriptSequence) = aiscripted_sequence : "AI Scripted Sequence" []
@PointClass iconsprite("sprites/speaker.spr") base(Targetname, MoveWith) = ambient_generic : "Universal Ambient"
[
message(sound) : "WAV Name (e.g. vox/c.wav)"
health(integer) : "Volume (10 = loudest)" : 10
//NEW 0.5
//* Allows you to make moving objects which emit the sound of your choice.
target(target_destination) : "Entity to play from"
//NEW 0.5
channel(choices) : "Channel to use for that entity" : 6 =
[
1: "Weapon"
//* If a monster's model has a mouth, and you play a sound on its "voice" channel,
//* the mouth will automatically move.
2: "Voice"
3: "Item"
4: "Body"
5: "Stream"
6: "Static"
]
preset(choices) :"Dynamic Presets" : 0 =
[
0: "None"
1: "Huge Machine"
2: "Big Machine"
3: "Machine"
4: "Slow Fade in"
5: "Fade in"
6: "Quick Fade in"
7: "Slow Pulse"
8: "Pulse"
9: "Quick pulse"
10: "Slow Oscillator"
11: "Oscillator"
12: "Quick Oscillator"
13: "Grunge pitch"
14: "Very low pitch"
15: "Low pitch"
16: "High pitch"
17: "Very high pitch"
18: "Screaming pitch"
19: "Oscillate spinup/down"
20: "Pulse spinup/down"
21: "Random pitch"
22: "Random pitch fast"
23: "Incremental Spinup"
24: "Alien"
25: "Bizzare"
26: "Planet X"
27: "Haunted"
]
volstart(integer) : "Start Volume" : 0
fadein(integer) : "Fade in time (0-100)" : 0
fadeout(integer) : "Fade out time (0-100)" : 0
pitch(integer) : "Pitch (> 100 = higher)" : 100
pitchstart(integer) : "Start Pitch" : 100
spinup(integer) : "Spin up time (0-100)" : 0
spindown(integer) : "Spin down time (0-100)" : 0
lfotype(choices) : "LFO type (0 - 3)" : 0 =
[
0: "Off"
1: "Square"
2: "Triangle"
3: "Round"
]
lforate(integer) : "LFO rate (0-1000)" : 0
lfomodpitch(integer) : "LFO mod pitch (0-100)" : 0
lfomodvol(integer) : "LFO mod vol (0-100)" : 0
cspinup(integer) : "Incremental spinup count" : 0
spawnflags(flags) =
[
1: "Play Everywhere" : 0
2: "Small Radius" : 0
//* Medium is the default radius, so ticking this does nothing.
//* (These should really be chosen from a pull-down menu.)
4: "Medium Radius" : 0
8: "Large Radius" : 0
16:"Start Silent" : 0
32:"Is NOT Looped" : 0
]
]
//
// ammo
//
@PointClass base(Weapon, Targetx) = ammo_revolver : "Revolver Ammo" []
@PointClass base(Weapon, Targetx) = ammo_shotgun : "Shotgun Ammo" []
@PointClass base(Weapon, Targetx) = ammo_tommygun : "Tommy Gun Ammo" []
@PointClass base(Weapon, Targetx) = ammo_rifle : "Rifle Ammo" []
@PointClass base(Weapon, Targetx) = ammo_lightning : "Lightning Gun Ammo" []
@PointClass base(Weapon, Targetx) = ammo_staffclip : "Serpent Staff Ammo" []
//* This entity is probably obsolete, now that @func_button has a "Can't Use" flag.
@SolidClass base(Target, Master, RenderFields, ZHLTLightKeys, MoveWith) = button_target : "Target Button"
[
spawnflags(flags) =
[
1: "Use Activates": 0
2: "Start On" : 0
]
]
//
// locus calculation entities
//
//NEW 0.7.1
//* To use this, simply refer to it in any field that's designated [LP].
@PointClass color(128 200 64) size(-12 -12 -12, 12 12 12) base(Targetname) = calc_position : "Calculate position"
[
netname(string) : "Entity to use [LE]" : "*locus"
impulse(choices) : "Position to calculate" : 1 =
[
0 : "Origin"
1 : "Eyes"
2 : "Top"
3 : "Centre"
4 : "Bottom"
5 : "Attachment point 0"
6 : "Attachment point 1"
7 : "Attachment point 2"
8 : "Attachment point 3"
//* Return a random point from within the entity's bounding box.
9 : "Random"
]
message(string) : "Add offset [LV]" : "0 0 0"
]
//NEW 0.7.1
//* To use this, simply refer to it in any field that's designated [LR].
@PointClass base(Targetname) color(170 221 85) size(-12 -12 -12, 12 12 12) = calc_ratio : "Ratio adjustment"
[
target(string) : "Based on ratio [LR]" : "*locus"
impulse(choices) : "Transformation" : 0 =
[
0 : "None"
1 : "Reversed (1-X)"
2 : "Negative (-X)"
3 : "Reciprocal (1/X)"
]
netname(string) : "Offset by [LR]" : "0"
message(string) : "Scale factor [LR]" : "1"
noise(string) : "Min (blank = none) [LR]"
noise1(string) : "Max (blank = none) [LR]"
frags(choices) : "If outside range" : 0 =
[
//* e.g. if the range were 0%-100%, and the value were 120%, the result would be 100%.
0 : "Pick nearest value"
//* In the case above, the result would be 20%.
1 : "Wrap around"
//* In the case above, the result would be 80%.
2 : "Bounce back"
]
]
//NEW 0.7.1
//* To use this, simply refer to it in any field that's designated [LV].
@PointClass color(170 179 43) size(-12 -12 -12, 12 12 12) base(Targetname) = calc_subvelocity : "Calculate velocity based on entity properties"
[
netname(string) : "Entity to use [LE]" : "*locus"
impulse(choices) : "Value to calculate from" : 0 =
[
0 : "Movement Velocity"
1 : "Angle"
2 : "View Angle"
5 : "Attachment point 0"
6 : "Attachment point 1"
7 : "Attachment point 2"
8 : "Attachment point 3"
]
noise(string) : "Scale factor [LR]" : "1.0"
message(string) : "Add offset [LV]" : "0 0 0"
spawnflags(flags) =
[
1 : "Normalize" : 0
2 : "Flip Vertical" : 0
]
]
//NEW 0.7.1
//* To use this, simply refer to it in any field that's designated [LV].
//* This calculates the velocity that would be needed to travel from one point to another.
//* By default, things will take 0.1 seconds to travel this distance. (Use the "length
//* factor" setting to change this.)
//* This can also be used to calculate (for example) where a beam's endpoint should
//* be, in order for it to point towards a given location.
@PointClass color(170 179 43) size(-12 -12 -12, 12 12 12) base(Targetname) = calc_velocity_path : "Calculate velocity for travelling"
[
target(string) : "Start position [LP]" : "*locus"
netname(string) : "Destination"
armorvalue(choices) : "Destination is" : 0 =
[
//* The destination is the end position.
0 : "Position [LP]"
//* To find the end position, add this offset to the start position.
1 : "Offset [LV]"
]
health(choices) : "Length Calculation" : 0 =
[
4 : "Square (X = X*X)"
0 : "None (X = X)"
//* With this choice, the actual distance between the points is ignored.
//* So instead of taking a fixed time to travel, the object will move at
//* a fixed speed, or the beam will extend a fixed distance.
1 : "Normalise (X = 1)"
2 : "Reciprocal (X = 1/X)"
3 : "Inverse Square (X = 1/X*X)"
]
//* E.g: 2.0 will specify "twice as fast/twice as far", and
//* 0.5 will specify "half as fast/half as far".
//* A negative number here will make the line go in the opposite direction.
noise(string) : "Length factor [LR]" : "1.0"
//* If this is set, a line will be drawn from the start position to the end
//* position. The first obstacle it hits will then be used as the new end
//* position.
frags(choices) : "Line is blocked by" : 0 =
[
0 : "Nothing"
1 : "Walls"
2 : "Walls & Glass"
3 : "Walls & Monsters"
4 : "Walls, Monsters & Glass"
]
]
//NEW 0.7.1
@PointClass color(170 179 43) size(-12 -12 -12, 12 12 12) base(Targetname) = calc_velocity_polar : "Calculate velocity"
[
netname(string) : "Based on velocity [LV]"
//* Rotate the velocity by this amount.
angles(string) : "Rotated by angle (Y Z X)" : "0 0 0"
//* Scale the velocity by this factor.
//* E.g: 2.0 will specify "twice as fast/twice as far", and
//* 0.5 will specify "half as fast/half as far".
noise(string) : "Length factor [LR]" : "1.0"
//* After rotation and scaling, add this offset to the velocity.
message(string) : "Add offset [LV]" : "0 0 0"
spawnflags(flags) =
[
//* The "length factor" field will set the exact length of the velocity,
//* instead of scaling it by a factor.
1 : "Normalize" : 0
]
]
//
// cyclers
//
// This entity is probably obsolete, now that env_model exists.
@PointClass base(Targetname, RenderFields, MoveWith) size(-16 -16 0, 16 16 72) = cycler : "Monster Cycler"
[
model(studio) : "Model"
]
@PointClass base(Targetname, RenderFields, MoveWith) sprite() = cycler_sprite : "Sprite Cycler"
[
model(sprite) : "Sprite"
framerate(integer) : "Frames per second" : 10
]
@PointClass base(Monster, MoveWith) size(-16 -16 -16, 16 16 16) = cycler_weapon : "Weapon Cycler" []
//
// Environmental effects
//
@BaseClass = BeamStartEnd
[
LightningStart(target_destination) : "Start Entity"
LightningEnd(target_destination) : "Ending Entity"
]
@PointClass base(Targetname, BeamStartEnd, RenderFxChoices) size(-16 -16 -16, 16 16 16) = env_beam : "Energy Beam Effect"
[
renderamt(integer) : "Brightness (1 - 255)" : 100
rendercolor(color255) : "Beam Color (R G B)" : "0 0 0"
//* If you only give the beam one endpoint, then radius will specifies how
//* far away the other endpoint should be (randomly) placed.
Radius(integer) : "Radius" : 256
life(string) : "Life (seconds 0 = infinite)" : "0"
BoltWidth(integer) : "Width of beam (pixels*0.1 0-255)" : 20
NoiseAmplitude(integer) : "Distortion (0-255)" : 0
texture(sprite) : "Sprite Name" : "sprites/laserbeam.spr"
TextureScroll(integer) : "Texture Scroll Rate (0-100)" : 35
framerate(integer) : "Frames per 10 seconds" : 0
framestart(integer) : "Starting Frame" : 0
StrikeTime(string) : "Strike again time (-1 = never)" : "0"
//NEW 0.6
//* If you use a negative number for the damage, it'll now heal the target.
damage(string) : "Damage / second" : "0"
//NEW 0.6
frags(choices) : "Damage type" : 0 =
[
0 : "Energy Beam"
1 : "Fracture"
2 : "Bullet ('blood loss')"
4 : "Lacerations"
8 : "Burning"
16 : "Freezing"
128 : "Crowbar"
256 : "Electric shock"
512 : "Sonic ('internal bleeding')"
16384 : "Drowning"
65536 : "Biohazard"
131072 : "Poison (duration)"
262144 : "Radiation"
1048576: "Hazardous chemical"
]
//NEW 0.6
target(target_destination) : "Fire on trip"
//NEW 0.6
netname(target_destination) : "Tripped only by entity"
spawnflags(flags) =
[
//* This is the default unless you specify a name.
1 : "Start On" : 0
2 : "Toggle" : 0
4 : "Random Strike" : 0
//* Makes the beam form a circle, with a diameter that stretches between the two endpoints.
//* For some unknown reason, both endpoints must have a model.
//* NB: because the beam will stretch between the origins of the two entities, you'll
//* need to give each endpoint an origin brush.
8 : "Ring" : 0
16: "StartSparks" : 0
32: "EndSparks" : 0
64: "Decal End" : 0
//* The beam fades in from nothing, like a tracer bullet.
128: "Fade Start" : 0
256: "Fade End" : 0
//NEW 0.4
//* For making a rope, etc.
//* NB: this flag will be ignored unless the beam's Life is 0.
//* This also won't work on a Ring beam.
512: "Draw Solid" : 0
1024: "Draw Sine" : 0
]
]
//NEW 0.7.1
//* If you specify an "entity to trail", a trail will be attached or removed from the entity you
//* specify. The trail will turn off automatically if the
//* entity remains stationary for a few seconds, or alternatively you can turn it on and off by
//* triggering the env_beamtrail.
//* If you don't specify an "entity to trail", the env_beamtrail itself will have a trail; in that case
//* you probably want to tell it what entity it should MoveWith.
//* Neither version will do anything if the trailed entity isn't moving when you activate the trail.
//* The trail effect doesn't correspond exactly to with the movement of the entity, so don't expect too
//* much from it. We're not mapping for UT2003 here.
@PointClass base(Targetname, MoveWith) size(-16 -16 -16, 16 16 16) = env_beamtrail : "Beam trail effect"
[
target(string) : "Entity to trail (blank = this) [LE]"
netname(sprite) : "Sprite Name" : "sprites/smoke.spr"
renderamt(integer) : "Brightness (1 - 255)" : 255
rendercolor(color255) : "Color (R G B)" : "255 255 255"
armorvalue(integer) : "Width" : 5
health(string) : "Fade time (secs)" : "4.0"
spawnflags(flags) =
[
1: "Start off" : 0
]
]
@PointClass base(Targetname, Angles, MoveWith) size(-4 -4 -4, 4 4 4) = env_beverage : "Beverage Dispenser"
[
target(string) : "Initial position (blank = here) [LP]"
health(integer) : "Capacity" : 10
skin(choices) : "Beverage Type" : 0 =
[
0 : "Coca-Cola"
1 : "Sprite"
2 : "Diet Coke"
3 : "Orange"
4 : "Surge"
5 : "Moxie"
6 : "Random"
]
]
@PointClass base(Targetname, Angles, MoveWith) size(-16 -16 -16, 16 16 16) color(255 0 0) = env_blood : "Blood Effects"
[
target(string) : "Initial position (blank = here) [LP]"
netname(string) : "Direction (blank = angles) [LV]"
color(choices) : "Blood Color" : 0 =
[
0: "Red (Human)"
1: "Yellow (Alien)"
]
amount(string) : "Amount of blood (damage to simulate)" : "100"
spawnflags(flags) =
[
1: "Random Direction" : 0
2: "Blood Stream" : 0
4: "On Player" : 0
8: "Spray decals" : 0
]
]
//* Bubbles cannot drift sideways with this entity; use an @env_model and
//* "models/pipe_bubbles.mdl" instead.
@SolidClass base(Targetname, ZHLTLightKeys, MoveWith) = env_bubbles : "Bubble Volume"
[
density(integer) : "Bubble density" : 2
frequency(integer) : "Bubble frequency" : 2
current(integer) : "Speed of Current" : 0
spawnflags(Flags) =
[
1 : "Start Off" : 0
]
]
//NEW 0.4
//* This can be used in two main ways- to change the appearance of monsters,
//* or to manually switch the switchable textures on a brush entity.
@PointClass = env_customize : "Change entity properties"
[
//* Leave this blank to have it take effect as soon as the level starts.
targetname(target_source) : "Name"
//* You can also specify a classname here, e.g. monster_barney.
target(string) : "Target to affect [LE]"
//* If the target is a classname, the game picks a random monster of that type from within this
//* search radius. This has no effect if the target is anything except a classname.
m_flRadius(integer) : "Search Radius" : 512
//* <b>Player:</b> 0 = gordon's head, 1 = helmeted.
//* <b>Gina, Gordon, Helmet and Scientist player models:</b> 0 = original design, 1 = updated (better looking) version.
//* <b>Barneys:</b> 0 = holstered gun, 1 = holding gun, 2 = missing gun.
//* <b>Scientists:</b> 0-3 = no syringe, 4-7 = syringe in hand. 4 different heads in each set. (0 = Glasses, 1 = Einstein, 2 = Luther, 3 = Slick)
//* <b>Human Grunts:</b> 0-3 = Mp5, 4-7 = Shotgun, 8-11 = No gun. 4 different heads in each set. (0 = Gasmask, 1 = Beret, 2 = Skimask, 3 = Cigar)
//* Note that this entity can only change their appearance- for example, grunts who had shotguns will still fire shotgun rounds.
body(choices) : "Set body" : -1 =
[
-1 : "No change"
]
//* <b>Scientists and Human Grunts:</b> 1 = black skin.
//* <b>Bullsquids, Houndeyes, Slaves:</b> 1 = eyes shut.
//* <b>Ichthyosaur:</b> 0-4 = different eye positions.
//* <b>Most brush-entities (e.g. a func_wall):</b> 1 = alternate textures. (+A textures instead of +0).
skin(choices) : "Set skin" : -1 =
[
-1 : "No change"
-2 : "Toggle 0/1"
0 : "Skin 0 (normal)"
1 : "Skin 1"
2 : "Skin 2"
3 : "Skin 3"
]
//* If the target is a brush entity with a switchable texture (one with both a +0 version and
//* a +A version), then this switches between the two versions.
//* If the entity has switchable texlights on it, this will also turn those lights on and off.
frame(choices) : "Set brush texture" : -1 =
[
-1 : "No change"
-2 : "Toggle 0/1"
0 : "Texture 0 (normal)"
1 : "Texture 1 (alternate)"
//* With this set, triggering the env_customize On makes the target
//* use its normal texture, and Off makes it use the alternate one.
4: "On/Off based on usetype"
//* The opposite of the previous setting; On sets the alternate texture,
//* Off sets the normal one.
5: "Off/On based on usetype"
]
//* Use this setting with caution - a lot of a monster's behaviour is
//* determined by its model. (You should be safe if the new model is just
//* a set of different textures.)
m_iszModel(string) : "Set model (e.g. models/can.mdl)"
m_bloodColor(choices) : "Blood Color" : 0 =
[
0 : "No change"
-1 : "Don't Bleed"
247 : "Red (Human)"
195 : "Yellow (Alien)"
]
//* Change the pitch of the monster's voice (100 = normal pitch, higher numbers = higher pitch)
m_voicePitch(choices) : "Voice Pitch (100 = normal)" : -1 =
[
-1 : "No change"
]
//* >1 = fast
//* 1 = normal speed
//* 0..1 = slow
//* 0 = stop
//* -1 = no change
m_fFramerate(string) : "Frame rate (-1 = no change)" : "-1"
//* Sets:
//* <b>agrunt.mdl</b>: head position (45..-45)
//* <b>hgrunt.mdl</b>: head position (70..-70)
//* <b>barney.mdl, gman.mdl, islave.mdl, scientist.mdl</b>: head position (60..-60)
//* <b>apache.mdl</b>: gun yaw (90..-90)
//* <b>barnacle.mdl</b>: tongue length (0..-1024)
//* <b>garg.mdl</b>: body yaw (60..-60)
//* <b>osprey.mdl</b>: rotor angle (0..-90)
//* <b>icky.mdl</b>: tail position (45..-45)
//* <b>miniturret.mdl, sentry.mdl, turret.mdl</b>: gun yaw (0..360)
m_fController0(choices) : "Bone controller 0" : 0 =
[
0 : "No change"
1024 : "Set to 0"
]
//* Sets:
//* <b>apache.mdl</b>: gun pitch (45..-10)
//* <b>(mini)turret.mdl</b>: gun pitch (15..-90)
//* <b>sentry.mdl</b>: gun pitch (60..-60)
//* <b>garg.mdl</b>: body pitch (35..-35)
m_fController1(choices) : "Bone controller 1" : 0 =
[
0 : "No change"
1024 : "Set to 0"
]
//* In the standard models, this does nothing. Supplied for the benefit of
//* user-produced models.
m_fController2(choices) : "Bone controller 2" : 0 =
[
0 : "No change"
1024 : "Set to 0"
]
//* In the standard models, this does nothing. Supplied for the benefit of
//* user-produced models.
m_fController3(choices) : "Bone controller 3" : 0 =
[
0 : "No change"
1024 : "Set to 0"
]
m_iClass(choices) : "Set behaviour" : 0 =
[
0 : "No change"
//* Likes players and barneys; hates Human Military and most aliens; scared of Alien Military and Bullsquids.
3 : "Scientist"
//* Likes players and scientists; dislikes Machines, Human Military, and all aliens.
11: "Barney"
//* Dislikes scientists and most aliens. Hates players, barneys and Alien Military.
4 : "Human Military"
//* Machines go clang when hit, and never gib. Bioweapons (Snarks and Hornets) ignore them.
//* Otherwise, they're pretty much like Human Military.
1 : "Machine (Human Military)"
//* Hates players and Human Military. Dislikes Machines, scientists and barneys.
5 : "Alien Military"
//* Dislikes Machines and all humans.
7 : "Other Alien"
//* Dislikes all humans. Scared of Bullsquids.
8 : "Headcrab"
//* Hates Headcrabs. Dislikes humans and other Bullsquids.
9 : "Bullsquid"
//* Dislikes everyone, except other Faction A members.
14 : "Faction A"
//* Dislikes everyone, except other Faction B members.
15 : "Faction B"
//* Dislikes everyone, except other Faction C members.
16 : "Faction C"
]
//* Replaces the old "Player Ally" flag.
m_iPlayerReact(choices) : "Reaction to player" : -1 =
[
-1 : "No Change"
//* That is, normal for the monster's current behaviour.
0 : "Normal"
1 : "Ignore"
//* Scientists usually use this behaviour. The monster will
//* stop being friendly when hurt by the player, regardless of
//* how. (e.g. even if they stupidly ran into the middle of a firefight.)
2 : "Friendly until hurt"
//* Barneys usually use this behaviour. The monster will
//* stop being friendly when shot deliberately by the player,
//* but not when (for instance) caught in grenade explosions, or in the
//* middle of combat.
3 : "Friendly unless provoked"
4 : "Enemy"
// Not yet implemented, but will allow any monster to act like a barney/scientist,
// following the player on request.
//5 : "Follower"
]
//* If you want the entity to be partly transparent, use @env_render instead.
m_iVisible(choices) : "Visibility" : 0 =
[
0: "No change"
1: "Visible"
2: "Invisible"
3: "Toggle"
//* Trigger the env_customize On for visible, and Off for invisible.
4: "On/Off based on usetype"
//* Trigger the env_customize Off for visible, and On for invisible.
5: "Off/On based on usetype"
]
//* Currently, this will cause problems if used to solidify a non-monster,
//* non-brush entity.
//* Note that a @func_ladder will still act as a ladder if you make it
//* non-solid.
m_iSolid(choices) : "Solidity" : 0 =
[
0: "No change"
1: "Solid"
2: "Not Solid"
3: "Toggle"
//* Trigger the env_customize On for solid, and Off for non-solid.
4: "On/Off based on usetype"
//* Trigger the env_customize Off for solid, and On for non-solid.
5: "Off/On based on usetype"
]
m_iPrisoner(choices) : "Prisoner" : 0 =
[
0: "No change"
1: "Yes"
2: "No"
3: "Toggle"
//* Trigger the env_customize On for a prisoner, and Off for a non-prisoner.
4: "On/Off based on usetype"
//* Trigger the env_customize Off for a prisoner, and On for a non-prisoner.
5: "Off/On based on usetype"
]
m_iMonsterClip(choices) : "MonsterClip flag" : 0 =
[
0: "No change"
1: "On"
2: "Off"
3: "Toggle"
//* Trigger the env_customize On to use Monsterclip, and Off to not use it.
4: "On/Off based on usetype"
//* Trigger the env_customize Off to use Monsterclip, and On to not use it.
5: "Off/On based on usetype"
]
//* Applies to barneys, scientists, "Friendly until hurt" and "Friendly
//* until provoked" monsters, and overrides these monsters' usual liking
//* for the player- e.g. as if the player had shot them.
m_iProvoked(choices) : "Angry At Player" : 0 =
[
0: "No change"
1: "Yes"
2: "No"
3: "Toggle"
//* Trigger the env_customize On to be angry, and Off to calm down.
4: "On/Off based on usetype"
//* Trigger the env_customize Off to be angry, and On to calm down.
5: "Off/On based on usetype"
]
spawnflags(flags) =
[
1: "Affect corpses" : 0
2: "Once Only" : 0
4: "Debug" : 0
]
]
//NEW 0.7.1
@PointClass base(Targetname) size(-16 -16 -16, 16 16 16) = env_decal : "Decal sprayer"
[
target(string) : "Position (blank = here) [LP]"
netname(string) : "Spray direction (blank = angle) [LV]"
message(string) : "Max distance (blank = none) [LR]"
impulse(choices) : "Decal group" : 0 =
[
1 : "Gunshot"
5 : "Big gunshot"
2 : "Blood"
3 : "Alien blood"
4 : "Glass cracks"
6 : "Scorch marks"
7 : "Bullsquid splat"
0 : "Custom (see below)"
]
noise(sprite) : "Custom decal texture"
]
//NEW 0.7.1
//* Creates a temporary ball of light when triggered.
//* Note that this primarily lights the world (i.e. brushes); studio models will
//* pick up the lighting if they're standing in it, but they'll just be a solid colour.
//* To just light studio models, see @env_elight.
@PointClass base(Targetname, MoveWith) = env_dlight : "Dynamic light effect"
[
message(string) : "Position (blank = here) [LP]"
rendercolor(color255) : "Light Color (R G B)" : "255 255 255"
renderamt(integer) : "Radius" : 12
health(string) : "Duration (0 = until triggered)" : "0.0"
frags(integer) : "Decay (units/sec)" : 0
spawnflags(Flags) =
[
1 : "Only once" : 0
2 : "Start on" : 0
]
]
//NEW 0.7.1
//* Creates a temporary ball of light when triggered. Only lights studio models
//* (e.g. monsters), but does light them properly.
//* See @env_dlight if you want to light the walls, etc.
@PointClass base(Targetname, MoveWith) = env_elight : "Entity light effect"
[
netname(string) : "At position (blank = here) [LP]"
target(string) : "Entity to follow (blank = this) [LE]"
impulse(choices) : "Attachment point on that entity" : 0 =
[
0 : "None"
1 : "1"
2 : "2"
3 : "3"
4 : "4"
]
renderamt(integer) : "Radius" : 12
rendercolor(color255) : "Color (R G B)" : "255 255 255"
health(string) : "Duration (0 = until triggered)" : "0.0"
frags(integer) : "Decay (units/sec)" : 0
spawnflags(Flags) =
[
1 : "Only once" : 0
2 : "Start on" : 0
]
]
//NEW 0.4
//* Essentially, this produces a shifting group of parallel beams. I've called it
//* env_rain because that's the most-requested use for it.
//* For a sunbeam effect, try Drip Speed = 0, Drip Width = 30, Drip Brightness = 25,
//* Drip Color = 255 255 255, Time between updates = 0, Drip Sprite = sprites/laserbeam.spr.
//* For snow, try Drip Speed = 20, Drip Width = 20, Drip Color = 255 255 255,
//* Drip Sprite = sprites/rain.spr.
@SolidClass base(Targetname, MoveWith) = env_rain : "Rain Effect"
[
//* Set this to (for example) "70 0 0" to make slanted rain.
angles(string) : "Pitch Yaw Roll (Y Z X)" : "0 0 0"
//* Negative numbers will make the rain fall upwards.
//* This is an average; each drip will move at between 75%-125% of this speed.
m_dripSpeed(integer) : "Drip Speed" : 40
m_dripSize(integer) : "Drip Width" : 5
m_brightness(integer) : "Drip Brightness (1 - 255)" : 128
rendercolor(color255) : "Drip Color (R G B)" : "64 128 255"
m_iNoise(integer) : "Beam noise (distortion)" : 0
m_burstSize(integer) : "Number of drips per update" : 2
//* If 0, no updates; all the beams will appear as soon as it's activated.
m_flUpdateTime(string) : "Time between updates" : "0.5"
m_flMaxUpdateTime(string) : "Max time between updates (random)"
target(string) : "Fire on updating"
m_fLifeTime(string) : "Beam Lifetime (0 = three updates)"
texture(sprite) : "Drip Sprite" : "sprites/rain.spr"
m_axis(choices) : "Beam Direction" : 0 =
[
0 : "Z axis (vertical)"
1 : "X axis"
2 : "Y axis"
]
m_iExtent(choices) : "Extent type" : 0 =
[
0 : "Fill brush"
1 : "Obstructable"
3 : "Reverse obstructable"
2 : "Arcing"
4 : "Reverse arcing"
]
spawnflags(Flags) =
[
1 : "Start Off" : 0
]
]
@PointClass base(Targetname, MoveWith) size(-16 -16 -16, 16 16 16) = env_explosion : "Explosion"
[
target(string) : "Initial position (blank = here) [LP]"
iMagnitude(integer) : "Magnitude/Radius" : 100
spawnflags(flags) =
[
1 : "No Damage" : 0
2 : "Repeatable" : 0
4 : "No Fireball" : 0
8 : "No Smoke" : 0
16: "No Decal" : 0
32: "No Sparks" : 0
]
]
@PointClass base(Targetname) = env_fade : "Screen Fade"
[
spawnflags(flags) =
[
1: "Fade From" : 0
2: "Modulate" : 0
//* If activated by a player, that player's screen will fade,
//* but other players will be unaffected.
4: "Activator Only" : 0
//NEW 0.7.1
//* Ignore the hold time; just fade out permanently.
//* (To fade back in, you'll need to use another env_fade.)
8: "Permanent" : 0
]
duration(string) : "Duration (seconds)" : "2"
holdtime(string) : "Hold Fade (seconds)" : "0"
renderamt(integer) : "Fade Alpha" : 255
rendercolor(color255) : "Fade Color (R G B)" : "0 0 0"
]
@PointClass base(Targetname) = env_fog : "Fog effect, DMC stylee"
[
fadein(integer) : "Fade in time" : 0
holdtime(string) : "Hold time (0 = permanent)" : "0"
fadeout(integer) : "Fade out time" : 0
startdist(integer) : "Fog start position" : 0
enddist(integer) : "Fog end position" : 1000
rendercolor(color255) : "Fog Color (R G B)" : "255 255 255"
spawnflags(flags) =
[
1 : "Start active" : 0
]
]
//NEW 0.6
//* To set the player's footstep sounds, trigger this entity 'on'. To revert to normal,
//* trigger it 'off' in the same way.
//* Alternatively, you can just toggle it, to alternately set and unset the sounds.
//* If one of the sound fields is left blank, it will have no effect... so if you
//* actually want it to become silent, choose common/null.wav.
//* This entity is probably most useful as the "fire on/off" target of a trigger_inout,
//* to specify the area over which the footsteps are to be changed.
@PointClass base(Targetname, Master) = env_footsteps : "Change Movement Sounds"
[
frags(choices) : "Preset Footstep type" : 0 =
[
0 : "Custom (see below)"
-1 : "Concrete"
1 : "Metal"
2 : "Dirt"
3 : "Vent"
4 : "Grate"
5 : "Tile"
6 : "Paddling"
7 : "Wading"
8 : "Ladder"
]
//* Here, you can either specify a single sound file as normal, or else specify
//* a group of 4 sounds by inserting '?' instead of the number 1-4.
//* (for example, to play a random sound in the range player/pl_step1.wav to
//* player/pl_step4.wav, you would write 'player/pl_step?.wav'.)
//* (This works on the other sound fields, too.)
noise(sound) : "Custom Footstep sound"
noise1(sound) : "Ladder sound"
noise2(sound) : "Wading sound"
noise3(sound) : "Paddling sound"
spawnflags(flags) =
[
1: "Set only" : 0
2: "Once only" : 0
]
]
@PointClass base(Targetname, MoveWith) size(-16 -16 -16, 16 16 16) = env_funnel : "Large Portal Funnel"
[
//NEW 0.7.1
message(string) : "Position (blank = here) [LP]"
//NEW 0.7.1
//* Default: sprites/flare6.spr
netname(sprite) : "Particle sprite"
spawnflags(flags) =
[
1: "Reverse" : 0
//NEW 0.5
2: "Repeatable" : 0
]
]
//* See also @env_state
@PointClass base(Targetname) color(255 255 128) = env_global : "Global State"
[
globalstate(string) : "Global State to Set"
triggermode(choices) : "Trigger to send" : 3 =
[
0 : "Off"
1 : "On"
2 : "Dead"
3 : "Toggle"
]
initialstate(choices) : "Initial State" : 0 =
[
0 : "Off"
1 : "On"
2 : "Dead"
]
spawnflags(flags) =
[
1 : "Set Initial State" : 0
]
]
@PointClass sprite() base(Targetname, MoveWith, RenderFieldsMax) size(-4 -4 -4, 4 4 4) color(30 100 0) = env_glow : "Light Glow/Haze"
[
model(sprite) : "Sprite Name" : "sprites/glow01.spr"
scale(integer) : "Scale" : 1
]
@PointClass base(Targetname, RenderFxChoices, Angles, MoveWith) size(-16 -16 -16, 16 16 16) = env_laser : "Laser Beam Effect"
[
//NEW 1.0
LaserStart(target_destination) : "Start At (blank = here) [LP]"
LaserTarget(target_destination) : "Fire Towards"
m_iTowardsMode(choices) : "Meaning of Fire Towards" : 0 =
[
0 : "Position [LP]"
1 : "Direction [LV]"
]
renderamt(integer) : "Brightness (1 - 255)" : 255
rendercolor(color255) : "Beam Color (R G B)" : "255 255 255"
width(integer) : "Width of beam (pixels*0.1 0-255)" : 20
NoiseAmplitude(integer) : "Amount of noise (0-255)" : 0
texture(sprite) : "Sprite Name" : "sprites/laserbeam.spr"
//NEW 1.0
//* If you want, you can name an env_sprite here, and the laser will use that as its start sprite.
StartSprite(sprite) : "Start Sprite" : ""
//* If you want, you can name an env_sprite here, and the laser will use that as its end sprite.
EndSprite(sprite) : "End Sprite" : ""
TextureScroll(integer) : "Texture Scroll Rate (0-100)" : 35
framestart(integer) : "Starting Frame" : 0
//NEW 0.6
//* If you specify a negative number here, the target will be healed instead.
damage(string) : "Damage / second" : "100"
//NEW 0.6
frags(choices) : "Damage type" : 0 =
[
0 : "Energy Beam"
1 : "Fracture"
2 : "Bullet ('blood loss')"
4 : "Lacerations"
8 : "Burning"
16 : "Freezing"
512 : "Sonic ('internal bleeding')"
16384 : "Drowning"
65536 : "Biohazard"
131072 : "Poison (continuous)"
262144 : "Radiation"
1048576: "Hazardous chemical"
]
//NEW 0.6
target(target_destination) : "Fire when tripped"
//NEW 0.6
netname(target_destination) : "Tripped only by entity"
//NEW 0.6
m_iProjection(choices) : "Projection mode" : 0 =
[
0: "Normal"
//* With this enabled, the laser's Target position only specifies
//* the direction. The beam can actually extend beyond it.
1: "Extend past endpoint"
]
//NEW 0.6
m_iStoppedBy(choices) : "Stopped by" : 0 =
[
0: "Glass & Monsters"
1: "Monsters only"
//* Monster hulls are a little bigger than monster hitboxes,
//* so with this option the beam will be more likely to hit them.
2: "Glass & Monster hulls"
3: "Monster hulls only"
4: "Glass only"
5: "Neither"
]
spawnflags(flags) =
[
1 : "Start On" : 0
16: "StartSparks" : 0
32: "EndSparks" : 0
64: "Decal End" : 0
//* The beam fades in from nothing, like a tracer bullet.
128: "Fade Start" : 0
256: "Fade End" : 0
//* For making a rope, etc.
512: "Draw Solid" : 0
//NEW 0.6
1024: "Interpolate" : 0
]
]
//* Obsolete. Use @game_text instead.
@PointClass base(Targetname, Target) = env_message : "HUD Text Message"
[
message(string) : "Message Name"
spawnflags(flags) =
[
1: "Play Once" : 0
2: "All Clients" : 0
]
messagesound(sound) : "Sound Effect"
messagevolume(string) : "Volume 0-10" : "10"
messageattenuation(choices) : "Sound Radius" : 0 =
[
0 : "Small Radius"
1 : "Medium Radius"
2 : "Large Radius"
3 : "Play Everywhere"
]
]
//NEW 0.5
@PointClass base(Targetname, Angles, MoveWith, RenderFields) = env_model : "New alternative to cyclers"
[
model(studio) : "Model name"
skin(integer) : "Skin" : 0
body(integer) : "Body" : 0
// NEW 1.0
scale(string) : "Scale (1.0 = normal size)"
m_iszSequence_On(string) : "Sequence when on"
m_iAction_On(choices) : "Behaviour when on" : 0 =
[
0: "Freeze when sequence ends"
1: "Loop"
2: "Change state when sequence ends"
]
m_iszSequence_Off(string) : "Sequence when off"
m_iAction_Off(choices) : "Behaviour when off" : 0 =
[
0: "Freeze when sequence ends"
1: "Loop"
2: "Change state when sequence ends"
]
spawnflags(flags) =
[
1: "Initially Off" : 0
2: "Drop to Floor" : 0
4: "Solid" : 0
]
]
//NEW 0.7.1
@PointClass base(Targetname) size(-16 -16 -16, 16 16 16) = env_quakefx : "Quake 1 particle effects"
[
message(string) : "Position (blank = here) [LP]"
impulse(choices) : "Effect type" : 4 =
[
//* A burst of twinkly orangey particles, with explosion sound effect.
//* Quite pretty.
//* (As seen in Quake when the blob monsters are killed.)
4 : "Tar Explosion"
//* A strange field of red particles.
10 : "Lava Splash"
//* A smallish mass of white particles.
//* (As seen in Quake when a player spawns or teleports.)
11 : "Teleport Splash"
//* A burst of yellowy-white particles, with explosion sound effect.
//* (As seen in Quake when a grenade or rocket goes off.)
12 : "Explosion"
//* An expanding cube of particles. Quite pretty.
122 : "Particle Burst"
]
//* Used only by Particle Burst. This is an index into the
//* standard engine palette; e.g. 247 is human blood, 195 is alien blood.
frags(integer) : "Particle Burst: color number" : 70
armortype(integer) : "Particle Burst: radius" : 300
health(string) : "Particle Burst: duration" : "1.0"
spawnflags(flags) =
[
1: "Repeatable" : 0
]
]
//NEW 1.2
@PointClass sprite() base(Targetname, Angles, MoveWith, RenderFields) size(-4 -4 -4, 4 4 4) = env_particle : "Particle Effect"
[
message(string) : "Particle file" : "aurora/smoke.aur"
]
@PointClass base(Targetname, RenderFields) size(-16 -16 -16, 16 16 16) color(100 100 0) = env_render : "Render Controls"
[
//NEW 0.7.1
//* The Renderamt number will be multiplied by this factor.
message(string) : "FX Amount factor [LR]"
//NEW 0.7.1
//* Set the scale of that sprite or model.
//* (If Fade Time is set, the scale will change slowly over time.)
m_fScale(string) : "Scale (0 = no change) [LR]"
target(target_destination) : "Target to affect [LE]"
//NEW 0.5
//* If you set this, the affected entity (or entities) will fade
//* progressively to the new settings you specify. Only Renderamt
//* and rendercolor will fade; the other values will change
//* instantly, as usual.
frags(string) : "Fade Time (secs)" : "0"
//NEW 0.5
//* The frequency at which the fade gets updated. If left blank (or
//* set to 0), it updates as fast as possible.
//* You probably won't need to set this unless you actually want
//* it to look coarse.
//* If a <b>lot</b> of entities are fading at the same time, and
//* you find the game is slowing down, you may want to try setting
//* this to 0.2 or so.
armorvalue(string) : "Fade Coarseness (secs)"
//NEW 0.5
netname(string) : "Trigger after fading"
spawnflags(flags) =
[
1: "No Renderfx" : 0
2: "No Renderamt" : 0
4: "No Rendermode" : 0
8: "No Rendercolor" : 0
//NEW 0.7.1
//* Useful if you want something to fade out and then be removed.
32: "Remove target" : 0
//NEW 0.7.1
//* The env_render will killtarget itself after use.
64: "Remove self" : 0
]
]
@PointClass base(Targetname, MoveWith) = env_shake : "Screen Shake"
[
spawnflags(flags) =
[
1: "GlobalShake" : 0
]
amplitude(string) : "Amplitude 0-16" : "4"
radius(string) : "Effect radius" : "500"
duration(string) : "Duration (seconds)" : "1"
frequency(string) : "0.1 = jerk, 255.0 = rumble" : "2.5"
]
//NEW 0.5
@PointClass base(Targetname, MoveWith) = env_shockwave : "Shockwave Effect"
[
spawnflags(flags) =
[
//* Normally, the env_shockwave entity marks the bottom of the shockwave.
//* Tick here to mark its centre instead.
1: "Centered" : 0
2: "Repeatable" : 0
]
//NEW 0.7.1
m_iszPosition(string) : "Position (blank = here) [LP]"
netname(string) : "Spritename" : "sprites/shockwave.spr"
rendercolor(string): "Color": "188 220 255"
renderamt(integer) : "Opacity (0-255)": 255
m_iTime(integer) : "Duration" : 2
m_iRadius(integer) : "Final radius" : 1000
m_iHeight(integer) : "Wave height" : 32
m_iScrollRate(integer) : "Scroll rate" : 0
m_iNoise(integer) : "Distortion ('noise')" : 0
m_iFrameRate(integer) : "Frame Rate" : 0
m_iStartFrame(integer) : "Starting Frame" : 0
]
@PointClass base(gibshooterbase, RenderFields) size(-16 -16 -16, 16 16 16) = env_shooter : "Model Shooter"
[
shootmodel(studio) : "Model or Sprite name" : "sprites/ballsmoke.spr"
scale(string) : "Scale" : ""
skin(integer) : "Skin" : 0
body(integer) : "Body (models only)"
//NEW 0.7.1
frame(integer) : "Start frame" : 0
//NEW 0.7.1
framerate(string) : "Framerate" : "10.0"
//NEW 0.7.1
m_iPhysics(choices) : "Behaviour of children" : 0 =
[
0: "Bouncy gib (normal)"
//* When it hits a wall, it sticks.
1: "Sticky gib"
//* Not affected by walls or gravity
2: "Noclip"
//* Stopped by walls, ignore gravity
3: "Fly (ignore gravity)"
//* Bounce off walls, ignore gravity
4: "Fly & bounce"
//* Blocked by walls, affected by gravity
5: "Arc (obey gravity)"
//* Bounce off walls, affected by gravity
6: "Arc & bounce"
]
//NEW 0.7.1
//* Used by the "bouncy gib" and "sticky gib" behaviours.
m_iBloodColor(choices) : "Blood color" : 0 =
[
0 : "Don't bleed"
247 : "Red (human)"
195 : "Yellow (alien)"
]
shootsounds(choices) :"Material Sound" : -1 =
[
-1: "None"
//* debris/glass1-4.wav
0: "Glass"
//* debris/wood1-4.wav
1: "Wood"
//* debris/metal1-6.wav
2: "Metal"
//* debris/flesh1-7.wav
3: "Flesh"
//* debris/concrete1-3.wav
4: "Concrete"
]
//NEW 0.7.1
m_fFriction(string) : "Bounce height" : "0.55"
//NEW 0.7.1
//* If you need access to both the entities involved in a collision, try targetting
//* a locus_alias with this field. Then, target the effect you actually want with the
//* "locus = wall" field, and you'll be able to refer to the shot via the alias.
//* NB: This field does not work with the "gib" behaviours - use "noclip" or below.
m_iszTouch(string) : "Fire on collision (locus = shot)"
//NEW 0.7.1
//* This won't be fired when the shot hits a wall that's not tied to an entity.
//* (But a func_wall works fine.)
//* NB: This field does not work with the "gib" behaviours - use "noclip" or below.
m_iszTouchOther(string) : "Fire on collision (locus = wall)"
//NEW 0.7.1
m_vecSize(string) : "Shot size (X Y Z)" : "0 0 0"
]
//NEW 1.1
@PointClass base(Targetname) = env_sky : "Unreal-Tournament style sky view"
[
]
@PointClass base(Master, MoveWith) iconsprite("sprites/speaker.spr") = env_sound : "DSP Sound"
[
//NEW 0.5
//* If set, the env_sound won't use its Radius- it will simply take effect when triggered.
targetname(target_source) : "Name"
target(target_destination) : "Fire when activated"
radius(integer) : "Radius" : 128
roomtype(choices) : "Room Type" : 0 =
[
0 : "(Disable all filters)"
1 : "Generic (no filters)"
2 : "Metal Small"
3 : "Metal Medium"
4 : "Metal Large"
5 : "Tunnel Small"
6 : "Tunnel Medium"
7 : "Tunnel Large"
8 : "Chamber Small"
9 : "Chamber Medium"
10: "Chamber Large"
11: "Bright Small"
12: "Bright Medium"
13: "Bright Large"
14: "Water 1"
15: "Water 2"
16: "Water 3"
17: "Concrete Small"
18: "Concrete Medium"
19: "Concrete Large"
20: "Big 1"
21: "Big 2"
22: "Big 3"
23: "Cavern Small"
24: "Cavern Medium"
25: "Cavern Large"
26: "Weirdo 1"
27: "Weirdo 2"
28: "Weirdo 3"
]
]
@PointClass base(Targetname, Angles, MoveWith) size(-16 -16 -16, 16 16 16) = env_spark : "Spark"
[
target(string) : "Initial position (blank = here) [LP]"
MaxDelay(string) : "Max Time between sparks" : "0"
spawnflags(flags) =
[
16: "Cyclic" : 0
32: "Toggle" : 0
64: "Start ON" : 0
]
]
@PointClass sprite() base(Targetname, Angles, MoveWith, RenderFieldsMax) size(-4 -4 -4, 4 4 4) = env_sprite : "Sprite Effect"
[
framerate(string) : "Framerate" : "10.0"
model(sprite) : "Sprite Name" : "sprites/glow01.spr"
scale(string) : "Scale" : ""
message(string) : "Attached to entity..."
frags(choices) : "...at attachment point" : 0 =
[
0 : "0"
1 : "1"
2 : "2"
3 : "3"
]
spawnflags(flags) =
[
1: "Start on" : 0
2: "Play Once" : 0
]
]
//NEW 0.3
//* Simply keeps track of a state. Useful as a master or a conditional "branch".
@PointClass base(Targetname, Master) color(128 128 255) = env_state : "Local State"
[
//* This entity will be triggered On when the env_state turns on, and Off when it turns off.
target(target_destination) : "Target (on & off)"
noise1(target_destination) : "Fire when turned on"
noise2(target_destination) : "Fire when turned off"
//* If the env_state gets turned off before it finishes turning on,
//* the "fire on turning on" target will never get triggered. This is very
//* useful for setting up "if you stay in this area for 5 seconds" type triggers.
turnontime(string) : "Time taken to turn on" : "0"
turnofftime(string) : "Time taken to turn off" : "0"
spawnflags(flags) =
[
1 : "Start On" : 0
//* If you're trying to work out what's actually happening in your level,
//* try ticking here and the env_state will tell you when it triggers, etc.
2 : "Debug Mode" : 0
]
]
//NEW 0.4
@PointClass base(Targetname, MoveWith) = env_warpball : "Teleport-in effect"
[
target(string) : "Initial position (blank = here) [LP]"
health(string) : "Max lightning-arc length" : "90"
frags(integer) : "Number of lightning bolts" : 12
]
@SolidClass base(Breakable, MoveWith, RenderFields, ZHLTLightKeys, SwitchTexLight) = func_breakable : "Breakable Object"
[
_minlight(string) : "Minimum light level"
]
@SolidClass base(Targetname, Target, Angles, MoveWith, Master, RenderFields, ZHLTLightKeys, SwitchTexLight, Global, LockSounds) = func_button : "Button"
[
speed(integer) : "Speed" : 25
health(integer) : "Health (shootable if > 0)"
lip(integer) : "Lip" : 0
//* The number against each sound (except Lightswitch) corresponds to the wav file
//* played. e.g. Buzz (10) plays "buttons/button10.wav".
sounds(choices) : "Sounds" : 0 =
[
0: "None"
1: "Big zap & Warmup (1)"
2: "Access Denied (2)"
3: "Access Granted (3)"
4: "Quick Combolock (4)"
5: "Power Deadbolt 1 (5)"
6: "Power Deadbolt 2 (6)"
7: "Plunger (7)"
8: "Small zap (8)"
9: "Keycard Sound (9)"
10: "Buzz (10)"
11: "Buzz Off (11)"
//* buttons/lightswitch2.wav
14: "Lightswitch"
]
wait(choices) : "Delay before Reset" : 0 =
[
-1 : "Stays pressed (-1)"
]
delay(string) : "Delay before trigger" : "0"
spawnflags(flags) =
[
1: "Don't move" : 0
//NEW 0.7.1
//* Normally, the player can use buttons through walls etc. Tick here to
//* prevent that.
//* (With this set, it's also impossible to use the button unless it's in
//* the centre of the player's crosshairs. So at last, control panels can
//* have their buttons close together!)
//* Don't combine this with Not Solid - the button will become unusable.
16: "Direct use only": 0
32: "Toggle" : 0
64: "Sparks" : 0
128: "Not Solid" : 0
256:"Touch Activates": 0
//NEW 0.4
//* Normally, a button can be activated with the Use key. Tick here to disable that behaviour.
//* If "Touch activates" is also selected, this flag will instead <u>enable</u> the use key.
512:"Can't Use" : 0
]
_minlight(string) : "Minimum light level"
]
@SolidClass base(Targetname, Angles, MoveWith, RenderFields, ZHLTLightKeys, Global) = func_conveyor : "Conveyor Belt"
[
spawnflags(flags) =
[
1 : "No Push" : 0
2 : "Not Solid" : 0
]
speed(string) : "Conveyor Speed" : "100"
_minlight(string) : "Minimum light level"
]
@SolidClass base(Targetname, Angles, MoveWith, Master, Door, LockSounds, RenderFields, ZHLTLightKeys, Global) = func_door : "Basic door"
[
//NEW 0.7.1
//* Normally, the player can open doors when he can't actually see them
//* (e.g. from the other side of a wall). Select "yes" here to prevent that.
//* Don't combine this with Passable - the door will become unusable.
directuse(choices) : "Direct use only" : 0 =
[
0 : "No"
1 : "Yes"
]
]
@SolidClass base(Targetname, Angles, MoveWith, Master, Door, LockSounds, RenderFields, ZHLTLightKeys, Global) = func_door_rotating : "Rotating door"
[
//NEW 0.7.1
//* Normally, the player can open doors when he can't actually see them
//* (e.g. from the other side of a wall). Select "yes" here to prevent that.
//* Don't combine this with Passable - the door will become unusable.
directuse(choices) : "Direct use only" : 0 =
[
0 : "No"
1 : "Yes"
]
spawnflags(flags) =
[
2 : "Reverse Dir" : 0
16: "One-way" : 0
64: "X Axis" : 0
128: "Y Axis" : 0
]
distance(integer) : "Distance (deg)" : 90
//NEW 0.5
//* See the notes about this field in @func_rotating.
axes(string) : "Axis Multipliers (Y Z X)" : "0 0 0"
]
@SolidClass base(Appearflags, MoveWith, RenderFields, ZHLTLightKeys) = func_friction : "Surface with a change in friction"
[
//* 0% = No friction, 100% = Normal Friction
modifier(integer) : "Percentage of standard (0 - 100)" : 15
]
@SolidClass base(Targetname, MoveWith, RenderFields, ZHLTLightKeys, Global) = func_guntarget : "Moving platform"
[
speed(integer) : "Speed (units per second)" : 100
target(target_source) : "First stop target"
message(target_source) : "Fire when damaged"
health(integer) : "Damage to Take" : 0
_minlight(string) : "Minimum light level"
]
@SolidClass base(Targetname, MoveWith, RenderFields, ZHLTLightKeys, SwitchTexLight, Global) = func_healthcharger: "Wall health recharger"
[
_minlight(string) : "Minimum light level"
]
@SolidClass base(Targetname, MoveWith, RenderFields, ZHLTLightKeys) = func_illusionary : "Fake Wall/Light"
[
skin(choices) : "Contents" : -1 =
[
-1: "Empty"
-7: "Volumetric Light"
-17:"Zero-G"
-18:"Hover-Field"
-19:"Fog effect"
-20:"Special 1 (Particles)"
-21:"Special 2 (Particles)"
-22:"Special 3 (Particles)"
]
_minlight(string) : "Minimum light level"
]
//* Creates an invisible, climbable field.
//* To show the actual ladder image, either add a @func_illusionary covered with a {ladder texture, or tick the Visible flag.
@SolidClass base(Targetname, MoveWith, RenderFields, ZHLTLightKeys) = func_ladder : "Ladder"
[
spawnflags(flags) =
[
//NEW 0.5
1 : "Visible" : 0
]
]
//* Also prevents hlcsg.exe from making a path between two @info_node entities on opposite sides of the brush.
@SolidClass base(Targetname, MoveWith) = func_monsterclip : "Monster clip brush" []
@SolidClass base(Targetname, MoveWith) = func_burning_clip : "Burning Area clip brush" []
@SolidClass base(Targetname, MoveWith) = func_mortar_field : "Mortar Field"
[
m_flSpread(integer) : "Spread Radius" : 64
m_iCount(integer) : "Repeat Count" : 1
m_fControl(choices) : "Targeting" : 0 =
[
0 : "Random"
1 : "Activator"
2 : "Table"
]
m_iszXController(target_destination) : "X Controller"
m_iszYController(target_destination) : "Y Controller"
]
//* Only partially implemented, some keys don't work properly. (I might
//* fix that some day...)
@SolidClass base(Targetname, Angles, MoveWith, RenderFields, ZHLTLightKeys, Global, Appearflags) = func_pendulum : "Swings back and forth"
[
speed(integer) : "Speed" : 100
//NEW 0.5
//* See the notes about this field in @func_rotating.
axes(string) : "Axis Multipliers (Y Z X)" : "0 0 0"
distance(integer) : "Distance (deg)" : 90
damp(integer) : "Damping (0-1000)" : 0
dmg(integer) : "Damage inflicted when blocked" : 0
spawnflags(flags) =
[
1 : "Start ON" : 0
8 : "Passable" : 0
16: "Auto-return" : 0
64: "X Axis" : 0
128: "Y Axis" : 0
]
_minlight(integer) : "_minlight"
]
//* With any luck, I've fixed the bug which caused players to sometimes be frozen.
@SolidClass base(Targetname, MoveWith, RenderFields, ZHLTLightKeys, Global, PlatSounds) = func_plat : "Elevator"
[
spawnflags(Flags) =
[
1: "Toggle" : 0
]
height(integer) : "Travel altitude (can be negative)" : 0
speed(integer) : "Speed" : 50
_minlight(string) : "Minimum light level"
]
@SolidClass base(Targetname, Angles, RenderFields, ZHLTLightKeys, Global, PlatSounds) = func_platrot : "Moving Rotating platform"
[
spawnflags(flags) =
[
1: "Toggle" : 0
64: "X Axis" : 0
128: "Y Axis" : 0
]
speed(integer) : "Speed of rotation" : 50
//NEW 0.5
//* See the notes about this field in @func_rotating.
axes(string) : "Axis Multipliers (Y Z X)" : "0 0 0"
height(integer) : "Travel altitude (can be negative)" : 0
rotation(integer) : "Spin amount" : 0
_minlight(string) : "Minimum light level"
]
@SolidClass base(Breakable, RenderFields, ZHLTLightKeys) = func_pushable : "Pushable object"
[
spawnflags(flags) =
[
128: "Breakable" : 0
//NEW 0.3
//* Tick here if the crate can only ever be pushed.
512: "Can't Pull" : 0
]
friction(integer) : "Friction (0-400)" : 50
buoyancy(integer) : "Buoyancy" : 20
_minlight(string) : "Minimum light level"
]
@SolidClass base(MoveWith, RenderFields, ZHLTLightKeys, SwitchTexLight, Global) = func_recharge: "Battery recharger"
[
_minlight(string) : "Minimum light level"
]
//* Like @func_button, except it rotates.
@SolidClass base(Targetname, Target, Angles, MoveWith, RenderFields, ZHLTLightKeys, Global, Master, LockSounds) = func_rot_button : "RotatingButton"
[
//* if set, then when the button is pressed, the "target" field of the entity targetted by the button will be set to this value.
changetarget(target_destination) : "ChangeTarget Name"
speed(integer) : "Speed" : 50
//NEW 0.5
//* See the notes about this field in @func_rotating.
axes(string) : "Axis Multipliers (Y Z X)" : "0 0 0"
health(integer) : "Health (shootable if > 0)"
//* The number against each sound corresponds to the wav file
//* played. e.g. Squeaky (1) plays "buttons/lever1.wav".
sounds(choices) : "Sounds" : -1 =
[
-1: "None"
21: "Squeaky (1)"
22: "Squeaky Pneumatic (2)"
23: "Ratchet Groan (3)"
24: "Clean Ratchet (4)"
25: "Gas Clunk (5)"
]
wait(choices) : "Delay before reset" : 3 =
[
-1: "Stays pressed"
]
delay(string) : "Delay before trigger" : "0"
distance(integer) : "Distance (deg)" : 90
spawnflags(flags) =
[
1 : "Not solid" : 0
2 : "Reverse Dir" : 0
//NEW 0.7.1
16: "Direct use only" : 0
32: "Toggle" : 0
64: "X Axis" : 0
128:"Y Axis" : 0
256:"Touch Activates" : 0
512:"Invert '+Use'able" : 0
]
_minlight(integer) : "_minlight"
]
@SolidClass base(Targetname, MoveWith, RenderFields, ZHLTLightKeys, Global) = func_rotating : "Rotating Object"
[
//* This sets the initial orientation of the entity, but that could
//* be achieved by simply rotating the brushes, in Worldcraft.
//* More importantly, it will change the position of the axes
//* the entity pivots around.
angles(string) : "Pitch Yaw Roll (Y Z X)" : "0 0 0"
speed(integer) : "Rotation Speed" : 30
//NEW 0.5
//* This field overrides the "X Axis" and "Y Axis" flags. It's
//* mostly useful to make a complex orbit for an object. (If you
//* just want to have a tilted axis for an otherwise normal rotating
//* object, you'll want to change the "angle" field instead.)
//* For example, set this field to "0 12 1" and the Z axis will
//* rotate 12 times in the time it takes the X axis to complete one
//* turn. (the entity will also turn 12 times faster than the
//* Rotation Speed you specify.)
//* NB: The way the quake engine handles rotation is not exactly
//* intuitive. The Z axis is the primary axis, so rotation around
//* the Y and X axes will be affected by the current Z position.
//* Similarly, the Y axis is the secondary axis, so rotation around
//* the X axis will be affected by the current Y position.
//* To get a feel for how this works, try making a func_rotating
//* cube whose origin is at one corner, set its "axes" value to
//* "1 1 0", and watch how it moves. One edge will simply go around
//* in a horizontal circle, while the rest of the cube rotates
//* around that edge.
axes(string) : "Axis Multipliers (Y Z X)" : "0 0 0"
volume(integer) : "Volume (10 = loudest)" : 10
fanfriction(integer) : "Friction (0 - 100%)" : 20
//* The number against each sound corresponds to the wav file
//* played. e.g. Slow Rush (2) plays "fans/fan2.wav".
sounds(choices) : "Fan Sounds" : 0 =
[
0 : "No Sound"
1 : "Fast Whine (1)"
2 : "Slow Rush (2)"
3 : "Medium Rickety (3)"
4 : "Fast Beating (4)"
5 : "Slow Smooth (5)"
]
//* The sound to play while active. This will only be used if "Fan Sounds" is set to "No Sound".
message(sound) : "WAV Name" :""
spawnflags(flags) =
[
1 : "Start ON" : 0
2 : "Reverse Direction" : 0
4 : "X Axis" : 0
8 : "Y Axis" : 0
16: "Acc/Dcc" : 0
32: "Fan Pain" : 0
64: "Not Solid" : 0
//* This, and the other "radius" settings, only affect the
//* way the Fan Sounds are played; if you set a small radius,
//* the sounds will only be audible near to the fan.
128: "Small Radius" : 0
256: "Medium Radius" : 0
512: "Large Radius" : 0
]
_minlight(integer) : "_minlight"
spawnorigin(string) : "X Y Z - Move here after lighting" : "0 0 0"
dmg(integer) : "Damage inflicted when blocked" : 0
]
//NEW 1.1
@SolidClass base(Targetname) = func_shine : "Shiny Surface"
[
message(sprite) : "Shine sprite" : "sprites/bgspr.spr"
scale(integer) : "Shine scale" : 10
renderamt(integer) : "Shine brightness (0-255)" : 50
]
@SolidClass base(BaseTank, ZHLTLightKeys) = func_tank : "Brush Gun Turret"
[
bullet(choices) : "Bullets" : 0 =
[
0: "None"
1: "9mm"
2: "MP5"
3: "12mm"
]
]
@SolidClass base(Targetname, MoveWith) = func_tankcontrols : "Tank controls"
[
target(target_destination) : "Tank entity name"
//NEW 0.5
//* This specifies how far the player has to move before the controls will dump him off.
//* If you set -1, the player never gets dumped off. (In which case, the
//* func_tankcontrols can only be deactivated by triggering it with another entity.)
frags(integer) : "Tolerance (-1 = total)" : 30
//NEW 0.5
//* More crosshair choices will be available in future.
crosshair(choices) : "Crosshair to use" : 0 =
[
0: "None"
4: "MP5"
]
spawnflags(flags) =
[
//NEW 0.5
//* If you tick here, the controls can only be activated by triggering it with
//* another entity.
1 : "Ignore +Use" : 0
// New 1.0
2 : "Visible" : 0
]
]
@SolidClass base(BaseTank, ZHLTLightKeys) = func_tanklaser : "Brush Laser Turret"
[
laserentity(target_source) : "env_laser Entity"
]
@SolidClass base(BaseTank, ZHLTLightKeys) = func_tankmortar : "Brush Mortar Turret"
[
iMagnitude(Integer) : "Explosion Magnitude" : 100
]
@SolidClass base(BaseTank, ZHLTLightKeys) = func_tankrocket : "Brush Rocket Turret" []
@SolidClass base(Trackchange, ZHLTLightKeys) = func_trackautochange : "Automatic track changing platform"
[
_minlight(string) : "Minimum light level"
]
@SolidClass base(Trackchange, ZHLTLightKeys) = func_trackchange : "Train track changing platform"
[
_minlight(string) : "Minimum light level"
]
@SolidClass base(Targetname, RenderFields, ZHLTLightKeys, Global) = func_tracktrain : "Track Train"
[
spawnflags(flags) =
[
1 : "No Pitch (X-rot)" : 0
2 : "No User Control" : 0
4 : "No Reverse" : 0
8 : "Passable" : 0
16: "No Yaw (Z-rot)" : 0
]
target(target_destination) : "First stop target"
//* The number against each sound corresponds to the wav file
//* played. e.g. Rail 1 plays "plats/ttrain1.wav".
sounds(choices) : "Move Sound" : 0 =
[
0: "None (or custom)"
1: "Rail 1"
2: "Rail 2"
3: "Rail 3"
4: "Rail 4"
5: "Rail 6"
6: "Rail 7"
]
custommovesound(sound) : "Custom Move Sound"
//* Default is "plats/ttrain_start1.wav". For silence, use "common/null.wav".
customstartsound(sound) : "Start Sound"
//* Default is "plats/ttrain_brake1.wav". For silence, use "common/null.wav".
custombrakesound(sound) : "Stop Sound"
//* This setting controls how smoothly the train turns corners - if the wheels are
//* close together, it will turn sharply, and if far apart, it will turn more gradually.
wheels(integer) : "Distance between the wheels" : 50
height(integer) : "Height above track" : 4
startspeed(integer) : "Initial speed" : 0
speed(integer) : "Speed (units per second)" : 64
dmg(integer) : "Damage on crush" : 0
volume(integer) : "Volume (10 = loudest)" : 10
bank(string) : "Bank angle on turns" : "0"
_minlight(string) : "Minimum light level"
avelocity(string) : "Initial avelocity (Y Z X)"
]
@SolidClass base(Targetname, RenderFields, ZHLTLightKeys, Global, PlatSounds) = func_train : "Moving platform"
[
target(target_source) : "First stop target"
speed(integer) : "Speed (units per second)" : 100
avelocity(string) : "Initial avelocity (Y Z X)"
dmg(choices) : "Damage on crush" : 2 =
[
//NEW 0.3
-1: "No damage"
]
skin(integer) : "Contents" : 0
volume(string) : "Sound Volume 0.0 - 1.0" : "0.85"
spawnflags(flags) =
[
//NEW 0.5
//* Usually, the center of the train (in fact, the center of its bounding box)
//* will be the point used when positioning the train at a path_corner. Tick
//* here to use its origin for this instead.
2 : "Origin on paths" : 0
//NEW 0.4
//* This is the default if you don't specify a name.
4 : "Initially On" : 0
8 : "Not solid" : 0
]
_minlight(string) : "Minimum light level"
]
@SolidClass = func_traincontrols : "Train Controls"
[
target(target_destination) : "Train Name"
]
@SolidClass base(Targetname, MoveWith, Appearflags, RenderFields, ZHLTLightKeys, SwitchTexLight, Global) = func_wall : "Wall"
[
_minlight(string) : "Minimum light level"
]
@SolidClass base(Targetname, Master, MoveWith, Appearflags, RenderFields, ZHLTLightKeys, Global) = func_rlyehlock : "R'lyeh Lock"
[
_minlight(string) : "Minimum light level"
message(sound) : "Sound if Master Off (e.g. vox/c.wav)"
targetonlock(string) : "Target On Lock"
]
@SolidClass base(func_wall) = func_wall_toggle : "Toggleable geometry"
[
spawnflags(flags) =
[
1 : "Starts Invisible" : 0
]
]
@SolidClass base(Targetname, Angles, Master, Door, LockSounds, MoveWith, RenderFields, ZHLTLightKeys, Global) = func_water : "Liquid"
[
spawnflags(flags) =
[
1 : "Starts Open" : 0
256: "Use Only" : 0
]
skin(choices) : "Contents" : -3 =
[
-3: "Water"
-4: "Slime"
-5: "Lava"
]
WaveHeight(string) : "Wave Height" : "0"
]
@PointClass base(Targetname, Targetx, Master) = game_counter : "Fires when it hits limit"
[
spawnflags(flags) =
[
1: "Remove On fire" : 0
2: "Reset On fire" : 0
]
frags(integer) : "Initial Value" : 0
health(integer) : "Limit Value" : 10
]
@PointClass base(Targetname, Target, Master) = game_counter_set : "Sets a game_counter"
[
spawnflags(flags) =
[
1: "Remove On fire" : 0
]
frags(integer) : "New Value" : 10
]
@PointClass base(Targetname, Master) = game_end : "End this multiplayer game" []
@PointClass base(Targetname) = game_player_equip : "Initial player equipment"
[
master(string) : "Team Master"
spawnflags(flags) =
[
1: "Use Only" : 0
]
]
@PointClass base(Targetname, Master) = game_player_hurt : "Hurts player who fires"
[
dmg(string) : "Damage To Apply" : "999"
spawnflags(flags) =
[
1: "Remove On fire" : 0
]
]
@PointClass base(Targetname, Master) = game_player_team : "Allows player to change teams"
[
spawnflags(flags) =
[
1 : "Remove On fire" : 0
2 : "Kill Player" : 0
4 : "Gib Player" : 0
]
target(string) : "game_team_master to use"
]
@PointClass base(Targetname, Master) = game_score : "Award/Deduct Points"
[
spawnflags(flags) =
[
1: "Allow Negative" : 0
2: "Team Points" : 0
]
points(integer) : "Points to add (+/-)" : 1
]
@PointClass base(Targetname, Targetx, Master) = game_team_master : "Team based master/relay"
[
spawnflags(flags) =
[
1: "Remove On fire" : 0
]
triggerstate(choices) : "Trigger to send" : 2 =
[
0: "Off"
1: "On"
2: "Toggle"
]
teamindex(integer) : "Team Index (-1 = no team)" : -1
]
@PointClass base(Targetname, Targetx, Master) = game_team_set : "Sets team of team_master"
[
spawnflags(flags) =
[
1: "Remove On fire" : 0
]
]
@PointClass base(Targetname, Master) = game_text : "HUD Text Message"
[
spawnflags(flags) =
[
1: "All Players" : 0
2: "Only once" : 0
]
//NEW 0.6
target(string) : "Fire when done"
message(string) : "Message Text"
x(string) : "X (0 - 1.0 = left to right) (-1 centers)" : "-1"
y(string) : "Y (0 - 1.0 = top to bottom) (-1 centers)" : "-1"
effect(Choices) : "Text Effect" : 0 =
[
0 : "Fade In/Out"
1 : "Credits"
2 : "Scan Out"
]
color(color255) : "Color1" : "100 100 100"
color2(color255) : "Color2" : "240 110 0"
fadein(string) : "Fade in Time (or character scan time)" : "1.5"
fadeout(string) : "Fade Out Time" : "0.5"
holdtime(string) : "Hold Time" : "1.2"
fxtime(string) : "Scan time (scan effect only)" : "0.25"
channel(choices) : "Text Channel" : 1 =
[
1 : "Channel 1"
2 : "Channel 2"
3 : "Channel 3"
4 : "Channel 4"
]
]
@SolidClass base(Targetname) = game_zone_player : "Player Zone brush"
[
intarget(target_destination) : "Target for IN players"
outtarget(target_destination) : "Target for OUT players"
incount(target_destination) : "Counter for IN players"
outcount(target_destination) : "Counter for OUT players"
]
@PointClass base(gibshooterbase) = gibshooter : "Gib Shooter"
[
m_iBloodColor(choices) : "Blood color" : 0 =
[
-1 : "Don't Bleed"
0 : "Red (human)"
195 : "Yellow (alien)"
]
]
//NEW 1.0
//* At the moment, this can only display sprites that are defined in sprites/hud.txt, and
//* will always display them in the status icon area on the left of the screen.
//* Bear in mind, the hud isn't displayed unless you have an HEV suit.
@PointClass base(Targetname) = hud_sprite : "Hud Sprite Display"
[
model(sprite): "Sprite name" : "dmg_poison"
rendercolor(color255) : "Color" : "255 255 255"
spawnflags(flags) =
[
1: "Start on" : 0
]
]
//
// info entities
//
//* If you give a decal a targetname, then it won't appear until fired.
@PointClass decal() base(Targetname, Appearflags) = infodecal : "Decal"
[
texture(decal)
]
//NEW 0.3
//* An alias makes itself an "alternative name" for an entity. To refer to
//* an entity through the alternative name, use the alias name preceeded by a *.
//* For example, suppose you set up an info_alias entity called 'myalias'.
//* 'Myalias' targets a light called 'redlight'. suppose a you set up a
//* @trigger_once field targetting "*myalias", so that when you walk through the
//* trigger field, redlight gets turned on and off. So far, info_alias seems to
//* be like a @trigger_relay. However, you can also set up a switch which targets
//* "myalias", to turn it off...
@PointClass base(Targetname) = info_alias : "Alias"
[
target(target_destination) : "Reference while On"
netname(string) : "Reference while Off"
spawnflags(Flags) =
[
1 : "Start Off" : 0
2 : "Debug Mode" : 0
]
]
@PointClass base(Targetname) size(-24 -24 0, 24 24 16) color(20 190 60) = info_bigmomma : "Big Mamma Node"
[
spawnflags(Flags) =
[
1 : "Run To Node" : 0
2 : "Wait Indefinitely" : 0
]
target(target_destination) : "Next node"
radius(string) : "Radius" : "0"
reachdelay(string) : "Wait after approach" : "0"
killtarget(target_destination) : "KillTarget"
reachtarget(target_destination) : "Fire on approach"
reachsequence(string) : "Sequence on approach" : ""
health(string) : "Health on approach" : ""
presequence(string) : "Sequence before approach" : ""
]
//NEW 0.4
//* An info_group acts similarly to an @info_alias, except that it has several
//* "members" which are are accessed by writing 'mygroup.membername'.
//* These members are set up just like the targets of a @multi_manager- except
//* that they'll contain an entity reference instead of a delay time.
//* If you set up its "target" field to refer to an info_alias entity, then when
//* an info_group is triggered, it will change that info_alias entity to target the
//* group.
@PointClass base(Targetname) = info_group : "Entity Group"
[
target(string) : "Alias to change when fired [LE]"
//* If you refer to a group member which hasn't been defined explicitly,
//* but you do define a default prefix here, then the member name will be
//* added to the prefix to generate an appropriate reference.
//* e.g: Suppose an info_group named "bob" defines a default prefix
//* "bobs_". Now; if you refer to, for example, "bob.house" or
//* "bob.gun", you'll actually affect entities named "bobs_house"
//* and "bobs_gun", respectively.
defaultmember(string) : "Default member prefix"
spawnflags(flags) =
[
2 : "Debug Mode" : 0
]
]
@PointClass base(Target, Angles, MoveWith) size(-4 -4 -4, 4 4 4) color(0 255 0) = info_intermission : "Intermission Spot" []
@PointClass base(Targetname, MoveWith) = info_landmark : "Transition Landmark" []
@PointClass base(Targetname) = info_movewith : "Movewith relay"
[
target(string) : "MoveWith when active"
netname(string) : "MoveWith when inactive"
spawnflags(flags) =
[
1 : "Start inactive" : 0
//* Usually, info_movewith will happily pass straight through a wall.
//* Tick here if you want it to stop when it hits walls.
//* Incidentally, ticking this will also allow it to set off trigger
//* fields, such as @trigger_multiple.
2 : "Blockable" : 0
]
]
@PointClass size(-24 -24 -4, 24 24 4) color(255 255 0) = info_node : "ai node" []
@PointClass size(-32 -32 0, 32 32 64) color(255 255 0) = info_node_air : "ai air node" []
@PointClass size(-16 -16 0, 16 16 20) color(255 255 0) = info_node_stukabat : "stukabat ceiling node" []
@PointClass base(Targetname) = info_null : "info_null (spotlight target)" []
// @PointClass base(PlayerClass) = info_player_coop : "Player cooperative start" []
@PointClass base(PlayerClass, Master, MoveWith) = info_player_deathmatch : "Player deathmatch start"
[
target(target_destination) : "Target"
]
@PointClass base(PlayerClass, MoveWith) = info_player_start : "Player 1 start"
[
spawnflags(Flags) =
[
1 : "Start with HEV" : 0
]
]
@PointClass base(Targetname, MoveWith) size(-4 -4 -4, 4 4 4) color(200 100 50) = info_target : "Beam Target"
[
spawnflags(Flags) =
[
//NEW 0.4
//* Essentially, this flag forces the game engine to treat an info_target as visible
//* (even though it isn't). This has two effects:
//* 1) Normally if an env_beam is attached to an info_target which can move (via MoveWith),
//* the env_beam won't follow the info_target properly. Ticking here fixes that problem.
//* 2) If an env_beam's "ring" mode is selected, you must make both ends of the beam
//* into 'visible' entities, otherwise the beam won't be displayed.
//* (Note that if you're making a mod and you tell an info_target to use null.spr, you will
//* of course have to distribute null.spr with the mod.)
1 : "Use null.spr" : 0
]
]
@PointClass size(-8 -8 0, 8 8 16) base(Targetname, PlayerClass, MoveWith) = info_teleport_destination : "Teleport destination" []
//NEW 1.0
@PointClass color(255 128 0) = info_texlights : "Texture Light Config" []
//
// items
//
@PointClass size(-16 -16 0, 16 16 36) base(Weapon, Targetx) = item_key : "Key" []
@PointClass size(-16 -16 0, 16 16 36) base(Weapon, Targetx) = item_healthkit : "Small Health Kit" []
@PointClass size(-16 -16 0, 16 16 36) base(Weapon, Targetx) = item_book : "Book"
[
model(studio) : "Model" : ""
body(Integer) : "Body" : 0
image1(string) : "Use Image1"
image2(string) : "Use Image2"
image3(string) : "Use Image3"
imageduration(string) : "Image Duration" : "5"
spawnflags(Flags) =
[
//* Tick this to only fire target once.
1 : "Fire Once" : 1
]
]
// do we need this for the HUD?
@PointClass size(-16 -16 0, 16 16 36) base(Weapon, Targetx) = item_suit : "HEV Suit"
[
spawnflags(Flags) =
[
1 : "Short Logon" : 0
]
]
//
// lights
//
@PointClass iconsprite("sprites/light.spr") color(255 255 128) base(Light, ZhltLights) = light : "Invisible lightsource"
[
target(string) : "Target to shine at"
firetarget(string) : "Target to trigger"
spawnflags(Flags) =
[
1 : "Initially dark" : 0
]
]
//NEW 0.5
//* Half-Life's glow-lights always flicker, for some reason. See also @env_dlight.
@PointClass iconsprite("sprites/light.spr") color(255 255 128) base(Targetname, MoveWith) = light_glow : "Dynamic Glow"
[
frags(choices) : "Glow Type" : 1 =
[
2: "Brightest"
1: "Flashlight"
0: "None"
]
spawnflags(Flags) =
[
1 : "Initially dark" : 0
2 : "Flare" : 0
]
]
@PointClass base(Angles, ZhltLights) color(255 255 128) iconsprite("sprites/light.spr") = light_environment : "Environment"
[
pitch(integer) : "Pitch" : 0
_light(color255) : "Brightness" : "255 255 128 200"
]
@PointClass iconsprite("sprites/light.spr") color(255 255 128) base(Target, Light, ZhltLights) = light_spot : "Spotlight"
[
firetarget(string) : "Target to trigger"
_cone(integer) : "Inner (bright) angle" : 30
_cone2(integer) : "Outer (fading) angle" : 45
pitch(integer) : "Pitch" : -90
// _light(color255) : "Brightness" : "255 255 128 200"
_sky(choices) : "Is Sky" : 0 =
[
0 : "No"
1 : "Yes"
]
spawnflags(Flags) =
[
1 : "Initially dark" : 0
]
]
@SolidClass base(Targetname, Angles, MoveWith, Master, RenderFields, ZHLTLightKeys, Global) = momentary_door : "Momentary/Continuous door"
[
//* Maximum speed the door is allowed to move at.
speed(choices) : "Speed" : 100 =
[
0: "No limit"
]
//* The number against each sound corresponds to the wav file played.
//* e.g. Vacuum (4) plays "doors/doormove4.wav".
movesnd(choices) : "Move Sound" : 0 =
[
0: "No Sound"
1: "Servo (Sliding) (1)"
2: "Pneumatic (Sliding) (2)"
3: "Pneumatic (Rolling) (3)"
4: "Vacuum (4)"
5: "Power Hydraulic (5)"
6: "Large Rollers (6)"
7: "Track Door (7)"
8: "Snappy Metal Door (8)"
9: "Squeaky 1 (9)"
10: "Squeaky 2 (10)"
]
lip(integer) : "Lip"
spawnflags(flags) =
[
1 : "Starts Open" : 0
]
_minlight(string) : "Minimum light level"
]
//NEW 0.7.1
//* Stores a reference to an entity. Whenever the alias is triggered with a locus,
//* the alias changes to store a reference to that locus.
@PointClass base(Targetname) size(-8 -8 -8, 8 8 8) = locus_alias : "Locus System - Entity variable"
[
netname(string) : "Initial value"
]
//NEW 0.7.1
@PointClass base(Targetname) size(-16 -16 -16, 16 16 16) = locus_beam : "Locus System - Beam effect"
[
m_iszStart(string) : "Start at (blank = here)" : ""
m_iszEnd(string) : "End at (blank = here)" : "*locus"
impulse(choices) : "Start & End are" : 0 =
[
0: "Entity & Entity [LE LE]"
1: "Entity & Position [LE LP]"
2: "Position & Position [LP LP]"
3: "Position & Direction [LP LV]"
]
m_iszSprite(sprite) : "Sprite Name" : "sprites/laserbeam.spr"
renderamt(integer) : "Brightness (1 - 255)" : 255
rendercolor(color255) : "Color (R G B)" : "255 255 255"
m_iWidth(integer) : "Width" : 10
m_iDistortion(integer) : "Distortion ('noise')" : 0
m_fFrame(integer) : "Start frame" : 0
m_iScrollRate(integer) : "Scroll rate" : 0
m_fDuration(string) : "Duration (0 = unlimited)" : 0
m_fDamage(string) : "Damage amount" : 0
m_iDamageType(choices) : "Damage type" : 0 =
[
0 : "Energy Beam"
1 : "Fracture"
2 : "Blood Loss"
4 : "Lacerations"
8 : "Burning"
16 : "Freezing"
512 : "Internal bleeding"
16384 : "Drowning"
65536 : "Biohazard"
131072 : "Poison (duration)"
262144 : "Radiation"
1048576: "Hazardous chemical"
]
m_iszTargetName(target_source) : "Name of children"
target(target_destination) : "Fire on spawn (locus = child)"
spawnflags(flags) =
[
//* This will only work if "Start & End" is set to "Entity & Entity".
8 : "Ring" : 0
16: "StartSparks" : 0
32: "EndSparks" : 0
64: "Decal End" : 0
//* The beam fades in from nothing, like a tracer bullet.
128: "Fade Start" : 0
256: "Fade End" : 0
//* For making a rope, etc.
512: "Draw Solid" : 0
1024: "Draw Sine" : 0
]
]
//NEW 0.7.1
//* As the name suggests, this acts like a variable in a programming language. It
//* stores three values - a position, a velocity, and a ratio. (if you want to store
//* entity variables, see locus_alias). To set values, trigger the entity; and to
//* access them, just refer to it like a calc_x entity.
//* locus_variable can also be used another way; if you give a "Child's Name"
//* value, triggering it will create a reference point with that name. So for example,
//* suppose you want to create streams of water wherever an object gets shot. You
//* trigger a locus_variable to record where the shot hits, and then have its "fire
//* on spawn" value triggering the water stream. But if you don't have it make seperate
//* reference points, then all the water will come out of the last shot position.
@PointClass base(Targetname) size(-16 -16 -16, 16 16 16) = locus_variable : "Locus System - Variable for storing data"
[
m_iszPosition(string) : "Position to record [LP]" : "*locus"
m_iszVelocity(string) : "Velocity to record [LV]" : "*locus"
m_iszRatio(string) : "Ratio to record [LR]" : "*locus"
m_iszTargetname(string) : "Child's name (blank = no child)"
m_iszFireOnSpawn(string) : "Fire on spawn (locus = child)"
m_fDuration(string) : "Removed after time (secs)"
]
@SolidClass base(Targetname, Target, Angles, Master, MoveWith, RenderFields, ZHLTLightKeys) = momentary_rot_button : "Direct wheel control"
[
speed(integer) : "Speed" : 50
//NEW 0.5
//* See the notes about this field in @func_rotating.
axes(string) : "Axis Multipliers (Y Z X)" : "0 0 0"
sounds(choices) : "Sounds" : 0 =
[
0: "None"
1: "Big zap & Warmup"
2: "Access Denied"
3: "Access Granted"
4: "Quick Combolock"
5: "Power Deadbolt 1"
6: "Power Deadbolt 2"
7: "Plunger"
8: "Small zap"
9: "Keycard Sound"
21: "Squeaky"
22: "Squeaky Pneumatic"
23: "Ratchet Groan"
24: "Clean Ratchet"
25: "Gas Clunk"
]
distance(integer) : "Distance (deg)" : 90
returnspeed(integer) : "Auto-return speed" : 0
spawnflags(flags) =
[
1: "Door Hack" : 0
2: "Not useable" : 0
16: "Auto Return" : 0
64: "X Axis" : 0
128: "Y Axis" : 0
]
_minlight(integer) : "_minlight"
angles(string) : "Pitch Yaw Roll (Y Z X)" : "0 0 0"
]
//////////////////////////////////////////////////////////////////////////////////////////
//
// monsters
//
//////////////////////////////////////////////////////////////////////////////////////////
// First the ones with no AI or flags...
@PointClass base(Monster) size(-16 -16 0, 16 16 36) = monster_headcrab : "Head Crab" []
@PointClass base(Monster) size(-16 -16 0, 16 16 36) = monster_babycrab : "Baby Headcrab" []
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_ghoul : "Ghoul" []
//@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_szlachta : "Szlachta" []
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_nightgaunt : "Night Gaunt" []
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_byakhee : "Byakhee" []
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_dimensionalshambler : "Dimensional Shambler" []
@PointClass base(Monster) size(-70 -70 0, 70 70 120) = monster_cthonian : "Cthonian" []
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_dunwichhorror : "Dunwich Horrow" []
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_deepone : "Deep One" []
//@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_wraith : "Wraith" []
@PointClass base(Monster) size(-48 -48 0, 48 48 216) = monster_dagon : "Dagon" []
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_tentacle : "Tentacle" []
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_huntinghorror : "Hunting Horror" []
@PointClass base(Monster) size(-128 -128 0, 128 128 512) = monster_cthulhu : "Cthulhu"
[
blowup(choices) : "Explode on Death" : 0 =
[
0 : "No"
1 : "Yes"
]
]
@PointClass base(Monster) size(-32 -32 0, 32 32 128) = monster_trex : "TRex" []
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_zombie : "Scientist Zombie"
[
body(Choices) : "Body" : 0 =
[
0 : "corpse"
1 : "skeleton"
]
]
@PointClass base(Appearflags,RenderFields) size(-16 -16 0, 16 16 72) = monster_zombie_dead : "Dead Zombie"
[
body(Choices) : "Body" : 0 =
[
0 : "corpse"
1 : "skeleton"
]
pose(Choices) : "Pose" : 0 =
[
0 : "Hanging1"
1 : "Hanging2"
2 : "Hanging(upsidedown)"
3 : "Hanging(sitting)"
4 : "Hanging(hogtied)"
5 : "On back"
6 : "On Stomach"
7 : "Sitting"
]
]
//@PointClass base(Monster) size(-32 -32 0, 32 32 144) = monster_golem : "Golem" []
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_kingpin : "Kingpin" []
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_formless_spawn : "Formless Spawn" []
@PointClass base(Monster) size(-3 -3 0, 3 3 3) = monster_cockroach : "Cockroach" []
@PointClass base(Monster) size(-6 -6 0, 6 6 6) = monster_leech : "Leech" []
@PointClass base(Monster) size(-6 -6 0, 6 6 6) = monster_rat : "Rat (no ai?)" []
@PointClass base(Monster) size(-16 -6 0, 16 6 8) = monster_snake : "Snake" []
@PointClass base(Monster) size(-32 -16 0, 32 16 48) = monster_cow : "Cow" []
@PointClass base(Monster) size(-12 -12 0, 12 12 24) = monster_chicken : "Chicken" []
@PointClass base(Monster) size(-32 -32 0, 32 32 48) = monster_chicken_feathers : "Chicken Feathers" []
@PointClass base(Weapon, Targetx, RenderFields) = monster_dynamite : "Live Dynamite" []
//@PointClass base(Monster) size(-16 -16 0, 16 16 24) = monster_stukabat : "Stukabat" []
//@PointClass base(Monster) size(-16 -16 -32, 16 16 32) = monster_alienegg : "Alien Egg"
//[
// orientation(Choices) : "Orientation" : 0 =
// [
// 0 : "On Floor"
// 1 : "On Ceiling"
// ]
//]
//@PointClass base(Monster) size(-48 -48 0, 48 48 76) = monster_giantspider : "Giant Spider" []
//@PointClass base(Monster) size(-6 -6 0, 6 6 10) = monster_babygiantspider : "Baby Giant Spider" []
//@PointClass base(Monster) size(-48 -48 0, 48 48 76) = monster_spider_repel : "Giant Spider (Repel)" []
//////////////////////////////////////////////////////////////////////////////////////////
//
// Now the squad monsters....
//
//////////////////////////////////////////////////////////////////////////////////////////
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_orderly : "Orderly"
[
spawnflags(Flags) =
[
32 : "SquadLeader" : 0
]
netname(string) : "Squad Name"
]
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_cultist : "Cultist"
[
spawnflags(Flags) =
[
32 : "SquadLeader" : 0
//NEW 0.3
//* Ensure the player can't take this monster's ammo or weapons.
1024: "Don't Drop Gun" : 0
]
netname(string) : "Squad Name"
weapons(Choices) : "Weapons" : 1 =
[
1 : "knife"
2 : "revolver"
4 : "shotgun"
]
body(Choices) : "Body" : -1 =
[
-1 : "random"
0 : "grim"
1 : "beardy"
2 : "ugly"
]
]
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_priest : "Priest"
[
spawnflags(Flags) =
[
32 : "SquadLeader" : 0
//NEW 0.3
//* Ensure the player can't take this monster's ammo or weapons.
1024: "Don't Drop Gun" : 0
]
netname(string) : "Squad Name"
]
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_gangster : "Gangster"
[
spawnflags(Flags) =
[
32 : "SquadLeader" : 0
//NEW 0.3
//* Ensure the player can't take this monster's ammo or weapons.
1024: "Don't Drop Gun" : 0
]
netname(string) : "Squad Name"
weapons(Choices) : "Weapons" : 1 =
[
1 : "revolver"
2 : "shotgun"
4 : "tommygun"
]
body(Choices) : "Body" : -1 =
[
-1 : "random"
0 : "slime"
1 : "psycho"
2 : "purple"
]
]
//@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_knight : "Knight"
//[
// spawnflags(Flags) =
// [
// 32 : "SquadLeader" : 0
// ]
// netname(string) : "Squad Name"
// weapons(Choices) : "Weapons" : 1 =
// [
// 1 : "sword"
// 2 : "axe"
// 4 : "halberd"
// 8 : "crossbow"
// ]
// body(Choices) : "Body" : 0 =
// [
// 0 : "normal"
// 1 : "boss"
// ]
//]
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_serpentman : "Serpent Man"
[
spawnflags(Flags) =
[
32 : "SquadLeader" : 0
//NEW 0.3
//* Ensure the player can't take this monster's ammo or weapons.
1024: "Don't Drop Gun" : 0
]
netname(string) : "Squad Name"
]
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_greatrace : "Great Race"
[
spawnflags(Flags) =
[
32 : "SquadLeader" : 0
//NEW 0.3
//* Ensure the player can't take this monster's ammo or weapons.
1024: "Don't Drop Gun" : 0
]
netname(string) : "Squad Name"
weapons(Choices) : "Weapons" : 1 =
[
1 : "Lightning Gun"
2 : "None"
]
]
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_yodan : "Yodan"
[
spawnflags(Flags) =
[
32 : "SquadLeader" : 0
//NEW 0.3
//* Ensure the player can't take this monster's ammo or weapons.
1024: "Don't Drop Gun" : 0
]
netname(string) : "Squad Name"
weapons(Choices) : "Weapons" : 1 =
[
1 : "Lightning Gun"
2 : "None"
]
]
//@PointClass base(Monster) size(-24 -24 0, 24 24 36) = monster_hellhound : "Hellhound" []
//@PointClass base(Monster) size(-24 -24 0, 24 24 36) = monster_tindalos : "Hound of Tindalos" []
//@PointClass base(Monster) size(-24 -24 0, 24 24 36) = monster_wolf : "Wolf"
//[
// body(Choices) : "Body" : -1 =
// [
// -1 : "Random"
// 0 : "Grey"
// 1 : "Black"
// 2 : "Red"
// 3 : "White"
// ]
//]
//@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_werewolf : "Werewolf"
//[
// body(Choices) : "Body" : -1 =
// [
// -1 : "Random"
// 0 : "Grey"
// 1 : "Black"
// 2 : "Silvermane"
// 3 : "Brown"
// 3 : "White"
// 3 : "Winter"
// ]
//]
//@PointClass base(Monster) size(-32 -32 0, 32 32 128) = monster_servitor : "Servitor" []
//////////////////////////////////////////////////////////////////////////////////////
//
// Now the talking monsters...
//
//////////////////////////////////////////////////////////////////////////////////////
@PointClass base(Monster, TalkMonster) size(-16 -16 0, 16 16 72) = monster_sirhenry : "Sir Henry"
[
body(Choices) : "Body" : 0 =
[
0 : "Civilian"
1 : "Cultist"
]
holding(Choices) : "Holding" : 0 =
[
0 : "None"
1 : "Book1"
2 : "Book2"
3 : "Knife"
]
]
@PointClass base(Monster, TalkMonster) size(-16 -16 0, 16 16 72) = monster_butler : "Butler"
[
]
@PointClass base(Monster, TalkMonster) size(-16 -16 0, 16 16 72) = monster_scientist : "Scared Scientist"
[
body(Choices) : "Body" : -1 =
[
-1 : "Random"
0 : "Glasses"
1 : "Einstein"
2 : "Luther"
3 : "Slick"
]
]
@PointClass base(Monster, TalkMonster) size(-16 -16 0, 16 16 72) = monster_civilian : "Scared Civilian"
[
body(Choices) : "Body" : -1 =
[
-1 : "Random"
0 : "Doctor"
1 : "Gangster"
2 : "Journalist"
3 : "MI5"
4 : "Patient"
5 : "Worker"
]
spawnflags(Flags) =
[
64: "Doctor can heal" : 0
]
]
@PointClass base(Monster,TalkMonster) size(-16 -16 0, 16 16 72) = monster_eihortvictim : "Eihort Victim" []
@PointClass base(Monster,TalkMonster) size(-16 -16 0, 16 16 72) = monster_ranulf : "Ranulf"
[
body(Choices) : "Body" : 0 =
[
0 : "Normal"
1 : "Jacket"
]
weapons(Choices) : "Weapon" : 0 =
[
0 : "Nothing"
1 : "Shovel"
]
]
////////////////////////////////////////////////////////////////////////////////////////
//
// And the rest...
//
////////////////////////////////////////////////////////////////////////////////////////
@PointClass base(Monster) = monster_eldersign : "Active Elder Sign"
[
spawnflags(Flags) =
[
1 : "Instant On" : 1
]
]
@PointClass base(Monster) = monster_rlyeh_seal : "Active R'lyeh Seal"
[
spawnflags(Flags) =
[
1 : "Instant On" : 1
]
]
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_furniture : "Monster Furniture"
[
spawnflags(Flags) =
[
32 : "Drop to floor" : 1
]
model(studio) : "Model" : ""
body(integer) : "Body" : 0
m_vecSize(string) : "Model size (X Y Z)" : "10 10 32"
]
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_candle : "Monster Candle"
[
spawnflags(Flags) =
[
8 : "Start On" : 1
32 : "Drop to floor" : 1
]
// model(studio) : "Model" : ""
numflames(Integer) : "Number of Flames" : 1
flamesize(string) : "Flame Sprite Size" : "0.05"
m_vecSize(string) : "Model size (X Y Z)" : "10 10 32"
]
@PointClass base(Monster) size(-16 -16 -36, 16 16 36) = monster_generic : "Generic Script Monster"
[
spawnflags(Flags) =
[
4 : "Not solid" : 0
//NEW 0.4
//* Tick here if you're using a model from the models/player/ directories.
//* This option sets it up so that the model's bounding box is centered on its origin (the X in
//* the middle of the entity, in WorldCraft), instead of being the middle of its bottom face.
8 : "Player model" : 0
//NEW 0.4
32: "Invulnerable" : 0
]
//NEW 0.4
//* <b>Headcrab:</b> 24 24 24
//* <b>Houndeye:</b> 32 32 36
//* <b>Human:</b> 32 32 72
//* <b>Most Aliens:</b> 64 64 64
size(string) : "Size (X Y Z)"
//NEW 0.4
//* <b>Player:</b> 0 = gordon's head, 1 = hooded.
//* <b>Gina, Gordon, Helmet and Scientist player models:</b> 0 = original design, 1 = updated (better looking) version.
//* <b>Barneys:</b> 0 = holstered gun, 1 = holding gun, 2 = missing gun.
//* <b>Scientists:</b> 0-3 = no syringe, 4-7 = syringe in hand. 4 different heads in each set. (0 = Glasses, 1 = Einstein, 2 = Luther, 3 = Slick)
//* <b>Human Grunts:</b> 0-3 = Mp5, 4-7 = Shotgun, 8-11 = No gun. 4 different heads in each set. (0 = Gasmask, 1 = Beret, 2 = Skimask, 3 = Cigar)
body(Integer) : "Body" : 0
//NEW 0.4
//* If not set, health is 8.
health(Integer) : "Initial Health" : 0
//NEW 0.4
//* Experiment with other values (1-255) for different blood colors.
m_bloodColor(choices) : "Blood Color" : 0 =
[
-1 : "Don't Bleed"
0 : "Red (Human)"
195 : "Yellow (Alien)"
]
//NEW 0.5
//* If you don't specify a gib model, one will be chosen based on
//* the Blood Colour you set.
m_iszGibModel(string) : "Gib Model"
]
//NEW 0.5
@PointClass base(Targetname, Angles, Appearflags,RenderFields) size(-16 -16 0, 16 16 72) = monster_generic_dead : "Generic Dead Body"
[
spawnflags(Flags) =
[
8 : "Player model" : 0
]
model(studio) : "Model (e.g. models/can.mdl)"
//* The corpse's pose will be the last frame of this sequence.
//* This overrides the 'death type' value.
netname(string) : "Sequence name"
//* If you don't specify a 'Sequence name', the monster will select a random death
//* animation of the type you specify here. Not all models have all these death types.
frags(choices): "Death Type" : 36 =
[
36 : "Just dead"
37 : "Fell backwards"
38 : "Fell forwards"
39 : "Died violently"
66 : "Head shot"
67 : "Chest shot"
68 : "Gut shot"
69 : "Shot in the back"
]
//* <b>Player:</b> 0 = gordon's head, 1 = hooded.
//* <b>Gina, Gordon, Helmet and Scientist player models:</b> 0 = original design, 1 = updated (better looking) version.
//* <b>Barneys:</b> 0 = holstered gun, 1 = holding gun, 2 = missing gun.
//* <b>Scientists:</b> 0-3 = no syringe, 4-7 = syringe in hand. 4 different heads in each set. (0 = Glasses, 1 = Einstein, 2 = Luther, 3 = Slick)
//* <b>Human Grunts:</b> 0-3 = Mp5, 4-7 = Shotgun, 8-11 = No gun. 4 different heads in each set. (0 = Gasmask, 1 = Beret, 2 = Skimask, 3 = Cigar)
body(Integer) : "Body" : 0
//* <b>Scientists and Human Grunts:</b> 1 = black skin.
//* <b>Bullsquids, Houndeyes, Slaves:</b> 1 = eyes shut.
//* <b>Ichthyosaur:</b> 0-4 = different eye positions
//skin(Integer) : "Skin" : 0
//* Experiment with other values (1-255) for different blood colors.
m_bloodColor(choices) : "Blood Color" : 0 =
[
-1 : "Don't Bleed"
0 : "Red (Human)"
195 : "Yellow (Alien)"
]
//* If you don't specify a gib model, one will be chosen based on
//* the Blood Colour you set.
m_iszGibModel(string) : "Gib Model"
]
@PointClass base(Appearflags,RenderFields) size(-16 -16 0, 16 16 72) = monster_civilian_dead : "Dead Civilian"
[
body(Choices) : "Body" : -1 =
[
-1 : "Random"
0 : "Doctor"
1 : "Gangster"
2 : "Journalist"
3 : "MI5"
4 : "Patient"
5 : "Worker"
]
pose(Choices) : "Pose" : 0 =
[
0 : "On back"
1 : "On Stomach"
2 : "Sitting"
3 : "Hanging"
4 : "Table1"
5 : "Table2"
6 : "Table3"
]
]
@PointClass base(Appearflags,RenderFields) size(-16 -16 0, 16 16 72) = monster_scientist_dead : "Dead Scientist"
[
body(Choices) : "Body" : -1 =
[
-1 : "Random"
0 : "Glasses"
1 : "Einstein"
2 : "Luther"
3 : "Slick"
]
pose(Choices) : "Pose" : 0 =
[
0 : "On back"
1 : "On Stomach"
2 : "Sitting"
3 : "Hanging"
4 : "Table1"
5 : "Table2"
6 : "Table3"
]
]
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_sentry : "Sentry Turret Gun"
[
//NEW 0.6
//* For comparison: a sentry gun usually has a health of 40. (or on Hard skill, 50.)
health(integer) : "Initial health (0 = normal)"
spawnflags(Flags) =
[
32 : "Autostart" : 0
64 : "Start Inactive" : 0
]
]
@PointClass base(Monster) size(-14 -14 22, 14 14 72) = monster_sitting_scientist : "Sitting Scientist"
[
body(Choices) : "Body" : -1 =
[
-1 : "Random"
0 : "Glasses"
1 : "Einstein"
2 : "Luther"
3 : "Slick"
]
spawnflags(Flags) =
[
//NEW 0.4
//* Sitting scientists are pre-disaster by default.
1024: "Post-Disaster" : 0
]
]
@PointClass base(Monster) size(-14 -14 22, 14 14 72) = monster_sitting_civilian : "Sitting Civilian"
[
body(Choices) : "Body" : -1 =
[
-1 : "Random"
0 : "Doctor"
1 : "Gangster"
2 : "Journalist"
3 : "MI5"
4 : "Patient"
5 : "Worker"
]
spawnflags(Flags) =
[
//NEW 0.4
//* Sitting scientists are pre-disaster by default.
1024: "Post-Disaster" : 0
]
]
@PointClass base(Monster,TalkMonster) size(-16 -16 0, 16 16 72) = monster_policeman : "Policeman"
[
spawnflags(Flags) =
[
//NEW 0.3
//* Ensure the player can't take this monster's ammo or weapons.
1024: "Don't Drop Gun" : 0
]
]
@PointClass base(RenderFields,Appearflags) size(-16 -16 0, 16 16 72) = monster_policeman_dead : "Dead Policeman"
[
pose(Choices) : "Pose" : 0 =
[
0 : "On back"
1 : "On side"
2 : "On stomach"
]
]
@PointClass color(0 200 200) base(Targetname, MoveWith) size(-16 -16 -16, 16 16 16) = monster_target : "Target for monsters to attack"
[
frags(choices) : "When active, count as:" : 11 =
[
0 : "Ignored"
//* Disliked by human military and most aliens.
3 : "Scientist"
//* Hated by human military, disliked by most aliens.
11: "Barney"
//* Hated by alien military, disliked by barneys and most aliens.
4 : "Human Military"
//* Hated by human military, disliked by barneys.
5 : "Alien Military"
//* Disliked by human miliary and barneys.
7 : "Other Alien"
//* Disliked by all humans. Hated by Bullsquids.
8 : "Headcrab"
//* Disliked by all humans and by other Bullsquids. Feared by Headcrabs.
9 : "Bullsquid"
//* Disliked by everyone, except other Faction A members.
14 : "Faction A"
//* Disliked by everyone, except other Faction B members.
15 : "Faction B"
//* Disliked by everyone, except other Faction C members.
16 : "Faction C"
]
spawnflags(Flags) =
[
1: "Start inactive" : 0
]
]
@PointClass base(Monster) size(-32 -32 0, 32 32 64) = monster_tentacle : "Tentacle Arm"
[
sweeparc(integer) : "Sweep Arc" : 130
sound(choices) : "Tap Sound" : -1 =
[
-1 : "None"
0 : "Silo"
1 : "Dirt"
2 : "Water"
]
]
//@PointClass base(Weapon,Targetx,RenderFields) = monster_teleportcharge : "Live Teleport Pad" []
//@PointClass base(Weapon,Targetx,RenderFields) = monster_hologramcharge : "Live Hologram Pad" []
@PointClass base(Targetname, MoveWith) size(-16 -16 -16, 16 16 16) = monstermaker : "Monster Maker"
[
target(string) : "Target On Release"
monstertype(string) : "Monster Type"
monsterbody(integer) : "Monster Body" : 0
netname(target_source) : "Name of Spawned Monsters"
spawnflags(Flags) =
[
//* If you don't give the monstermaker a Name, this is the default.
1 : "Start ON" : 0
//* In Cyclic mode, the maker will spawn a monster each time it's triggered.
//* (Otherwise, triggering the maker will turn it on, and it will then make monsters as
//* often as its 'delay' permits.)
4 : "Cyclic" : 0
8 : "MonsterClip" : 0
//NEW 0.5
//* By default, unless "number of monsters" is 1, the corpses of the monsters will fade out.
//* Tick here to override this. In order to prevent infinite numbers of corpses from appearing,
//* this flag is ignored if Number of Monsters is set to unlimited,
16 : "Leave corpses" : 0
//NEW 0.6
//* If this is ticked, the created monsters won't drop their weapons when they die.
1024: "Don't Drop Gun" : 0
]
//* The total number of monsters the monstermaker can create (-1 = unlimited)
monstercount(choices) : "Number of Monsters" : -1 =
[
-1 : "Unlimited"
]
//* If -1, a new monster will only be made when the last monster dies.
//* Otherwise, this is is the time to wait (seconds) between producing new monsters.
delay(string) : "Time between spawns" : "5"
//NEW 0.4
//* Mainly for use with @env_warpball. This makes a delay between the monstermaker triggering
//* its "target on release" entity and the monster appearing. For best results, set the
//* "target on release" value to the env_warpball, and set the "delay before release" to about 0.5.
spawndelay(string) : "Delay before release" : "0"
//* The maximum number of live children allowed at one time; if this is set, new children will
//* not be made until one dies. (-1 = no limit)
m_imaxlivechildren(integer) : "Max live children" : 5
//* If you just want a monster to be ignored, use the "Prisoner" flag instead.
m_iClass(choices) : "Monsters behave as" : 0 =
[
0 : "Normal"
//* Likes players and barneys; hates Human Military and most aliens; scared of Alien Military and Bullsquids.
3 : "Scientist"
//* Likes players and scientists; dislikes Machines, Human Military, and all aliens.
11: "Barney"
//* Dislikes scientists and most aliens. Hates players, barneys and Alien Military.
4 : "Human Military"
//* Machines go clang when hit, and never gib. Bioweapons (Snarks and Hornets) ignore them.
//* Otherwise, they're pretty much like Human Military.
1 : "Machine (Human Military)"
//* Hates players and Human Military. Dislikes Machines, scientists and barneys.
5 : "Alien Military"
//* Dislikes Machines and all humans.
7 : "Other Alien"
//* Dislikes all humans. Scared of Bullsquids.
8 : "Headcrab"
//* Hates Headcrabs. Dislikes humans and other Bullsquids.
9 : "Bullsquid"
//* Dislikes everyone, except other Faction A members.
14 : "Faction A"
//* Dislikes everyone, except other Faction B members.
15 : "Faction B"
//* Dislikes everyone, except other Faction C members.
16 : "Faction C"
]
//NEW 0.5
//* Replaces the old "Player Ally" flag.
m_iPlayerReact(choices) : "Monsters reaction to player" : 0 =
[
0 : "Normal"
1 : "Ignore"
//* Scientists usually use this behaviour.
2 : "Friendly until hurt"
//* Barneys usually use this behaviour.
3 : "Friendly unless provoked"
4 : "Enemy"
// Not yet implemented, but will allow any monster to act like a barney/scientist.
//5 : "Follower"
]
targetondeath(string) : "Target On Child Death"
]
/////////////////////////////////////////////////////////////////////////////////////////
//
// need to decide which of the following to keep...
//
/////////////////////////////////////////////////////////////////////////////////////////
@PointClass base(RenderFields) size(-16 -16 -36, 16 16 0) = monster_barnacle : "Barnacle Monster" []
@PointClass base(Monster) size(-16 -16 0, 16 16 16) = monster_flyer_flock : "Flock of Flyers"
[
iFlockSize(Integer) : "Flock Size" : 8
flFlockRadius(Integer) : "Flock Radius" : 128
]
@PointClass base(Monster) size(-32 -32 0, 32 32 64) = monster_ichthyosaur : "Ichthyosaur" []
@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_alien_controller : "Controller" []
@PointClass base(Monster) size(-32 -32 0, 32 32 64) = monster_alien_grunt : "Alien Grunt"
[
netname(string) : "Squad Name"
spawnflags(Flags) =
[
//* Only needed if you use the Squad Name value. If you define a Squad using the
//* Squad Name value, but none of them are flagged as a Squad Leader, then the
//* squad won't get linked together properly.
32 : "Squad Leader" : 0
]
]
//@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_alien_slave : "Vortigaunt"
//[
// netname(string) : "Squad Name"
// spawnflags(Flags) =
// [
// //* Only needed if you use the Squad Name value. If you define a Squad using the
// //* Squad Name value, but none of them are flagged as a Squad Leader, then the
// //* squad won't get linked together properly.
// 32 : "Squad Leader" : 0
// //* This monster won't attack unless provoked.
// 64 : "Start Peaceful" : 0
// ]
//]
//@PointClass base(Monster) size(-360 -360 -172, 360 360 8) = monster_apache : "Apache"
//[
// spawnflags(Flags) =
// [
// 8 : "NoWreckage" : 0
// 64 : "Start Inactive" : 0
// ]
//]
@PointClass base(Monster,TalkMonster) size(-16 -16 0, 16 16 72) = monster_barney : "Barney"
[
frags(choices) : "Weapon" : 0 =
[
0 : "Glock (normal)"
1 : "Python 357"
]
spawnflags(Flags) =
[
//NEW 0.3
//* Ensure the player can't take this monster's ammo or weapons.
1024: "Don't Drop Gun" : 0
]
]
@PointClass base(RenderFields,Appearflags) size(-16 -16 0, 16 16 72) = monster_barney_dead : "Dead Barney"
[
pose(Choices) : "Pose" : 0 =
[
0 : "On back"
1 : "On side"
2 : "On stomach"
]
]
//@PointClass base(Monster) size(-95 -95 0, 95 95 190) = monster_bigmomma : "Big Mamma"
//[
// netname(string) : "First node" : ""
//]
//@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_bloater : "Bloater" []
//@PointClass base(Monster) size(-32 -32 0, 32 32 64) = monster_bullchicken : "BullChicken" []
@PointClass base(Monster) size(-32 -32 0, 32 32 128) = monster_gargantua : "Gargantua" []
//@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_gman : "G-Man" []
//@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_grunt_repel : "Human Grunt (Repel)" []
//@PointClass base(Weapon, Targetx, RenderFields) = monster_handgrenade : "Live Handgrenade" []
//@PointClass base(Appearflags,RenderFields) size(-16 -16 0, 16 16 72) = monster_hevsuit_dead : "Dead HEV Suit"
//[
// pose(Choices) : "Pose" : 0 =
// [
// 0 : "On back"
// 1 : "Seated"
// 2 : "On stomach"
// 3 : "On Table"
// ]
//]
//@PointClass base(Appearflags,RenderFields) size(-16 -16 0, 16 16 72) = monster_hgrunt_dead : "Dead Human Grunt"
//[
// pose(Choices) : "Pose" : 0 =
// [
// 0 : "On stomach"
// 1 : "On side"
// 2 : "Seated"
// ]
// //NEW 0.5
// weapons(Choices) : "Weapon" : 0 =
// [
// 0 : "MP5"
// 1 : "Shotgun"
// 2 : "No gun"
// ]
// //NEW 0.5
// //* The "no gun" settings are only included here for backwards compatibility.
// body(Choices) : "Head" : 0 =
// [
// 0 : "Gasmask"
// 6 : "Gasmask (black skin)"
// 1 : "Beret"
// 4 : "Skimask"
// 7 : "Skimask (black skin)"
// 5 : "Cigar (black skin)"
// 2 : "(Gasmask, no gun)"
// 3 : "(Beret, no gun)"
// ]
//]
//@PointClass base(Monster) size(-16 -16 0, 16 16 36) = monster_houndeye : "Houndeye"
//[
// netname(string) : "Squad Name"
// spawnflags(Flags) =
// [
// 32 : "SquadLeader" : 0
// ]
//]
//@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_human_assassin : "Human Assassin" []
//@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_human_grunt : "Human Grunt (camo)"
//[
// netname(string) : "Squad Name"
// spawnflags(Flags) =
// [
// //* Only needed if you use the Squad Name value. If you define a Squad using the Squad Name value, but
// //* none of them are flagged as a Squad Leader, then the squad won't get linked together properly.
// 32 : "SquadLeader" : 0
// //NEW 0.3
// //* Ensure the player can't take this monster's ammo or weapons.
// 1024: "Don't Drop Gun" : 0
// ]
// weapons(Choices) : "Weapons" : 1 =
// [
// 1 : "9mmAR"
// 3 : "9mmAR + HG"
// 5 : "9mmAR + GL"
// 8 : "Shotgun"
// 10: "Shotgun + HG"
// ]
//]
//@PointClass base(Monster) size(-16 -16 -32, 16 16 32) = monster_miniturret : "Mini Auto Turret"
//[
// orientation(Choices) : "Orientation" : 0 =
// [
// 0 : "Floor Mount"
// 1 : "Ceiling Mount"
// ]
// spawnflags(Flags) =
// [
// 32 : "Autostart" : 0
// 64 : "Start Inactive" : 0
// ]
//]
//@PointClass base(Monster) size(-192 -192 0, 192 192 384) = monster_nihilanth : "Nihilanth" []
//@PointClass base(Monster) size(-480 -480 -112, 480 480 24) = monster_osprey : "Osprey"
//[
// spawnflags(Flags) =
// [
// 64 : "Start Inactive" : 0
// ]
//]
//@PointClass base(Weapon,Targetx,RenderFields) = monster_satchelcharge : "Live Satchel Charge" []
//@PointClass base(Monster) size(-16 -16 0, 16 16 72) = monster_sentry : "Sentry Turret Gun"
//[
// spawnflags(Flags) =
// [
// 32 : "Autostart" : 0
// 64 : "Start Inactive" : 0
// ]
//]
//@PointClass base(Monster) size(-16 -16 0, 16 16 36) = monster_snark : "Armed Snark" []
//@PointClass base(Monster) = monster_tripmine : "Active Tripmine"
//[
// spawnflags(Flags) =
// [
// 1 : "Instant On" : 0
// ]
//]
//@PointClass base(Monster) size(-32 -32 -32, 32 32 32) = monster_turret : "Auto Turret"
//[
// orientation(Choices) : "Orientation" : 0 =
// [
// 0 : "Floor Mount"
// 1 : "Ceiling Mount"
// ]
// spawnflags(Flags) =
// [
// 32 : "Autostart" : 0
// 64 : "Start Inactive" : 0
// ]
//]
///////////////////////////////////////////////////////////////////////////////////////////////
//NEW 0.7.1
//* To change an entity's position or velocity instantly, see @trigger_motion.
@PointClass base(Targetname) = motion_manager : "Control the movement and direction of an entity"
[
target(target_destination) : "Target to affect [LE]" : "*locus"
m_iszPosition(string) : "Position (blank = no change)"
m_iPosMode(choices) : "Meaning of Position" : 0 =
[
0 : "Set position [LP]"
1 : "Offset position [LV]"
2 : "Set velocity [LV]"
3 : "Accelerate by [LV]"
4 : "Follow position [LV]"
]
m_iszAngles(string) : "Facing (blank = no change)"
m_iAngMode(choices) : "Meaning of Facing" : 0 =
[
0 : "Face direction [LV]"
1 : "Rotate by [LV]"
2 : "Rotate by (Y Z X)"
3 : "Set avelocity (Y Z X)"
]
spawnflags(flags) =
[
1: "Debug" : 0
]
]
@PointClass base(Targetname, Target) color(128 255 128) = multisource : "Multisource"
[
//NEW 0.3
netname(string) : "Target on turning off"
globalstate(string) : "Global State Master"
]
//NEW 0.4
//* A multi_alias is an @info_alias with more than one target. It's mainly useful to group entities
//* together, while still allowing them to have individual names.
//* For example, suppose you have a set of lights in your level. Each one has its own lightswitch,
//* which allows it to be switched on and off on its own. But later in the level, you want the power
//* (i.e. all the lights) to go off. One way to do that would be to make a multi_alias which
//* targets all the lights, and simply trigger what that alias refers to.
@PointClass base(Targetname) = multi_alias : "Multi-target alias"
[
//NEW 0.5
m_iMode(choices) : "Mode" : 0 =
[
0: "Normal"
//* Each time the alias is used, one of the targets will be chosen
//* at random. Targets with higher values are proportionally more
//* likely to be chosen.
1: "Choose one (weighted)"
//* Each time the alias is used, zero or more of the targets will
//* be valid. The 'value' for each target gives the percentage
//* chance that it will be valid each time.
2: "% chance for each"
]
]
//* Triggers a sequence of up to 16 entities, at various time offsets.
//* To specify the list of entities for it to trigger, turn off Worldcraft's "smart edit" mode
//* and add fields manually. The name of the field is the targetname of the entity to trigger,
//* and the contents of the field are the time (in seconds) to wait before triggering it.
//* If a master is given, then while the master is in any state but ON, the manager will ignore
//* all signals. This won't prevent it from continuing a sequence that started while the master
//* was ON, but it will prevent a new sequence from starting.
@PointClass base(Targetname, Master) color(255 128 0) = multi_manager : "MultiTarget Manager"
[
//NEW 0.3
//* How long to wait before starting the sequence. This delay is <u>in addition to</u> the offsets given for each individual target.
wait(string) : "Time offset"
//NEW 0.3
//* If set, then each time it's triggered the manager will wait for a random length of time. The "Time Offset"
//* value is used as a minimum offset.
maxwait(string) : "Max Time offset (Random)"
//NEW 0.3
//* Message to send to the targets.
triggerstate(choices) : "Trigger to send" =
[
0: "Toggle"
1: "On"
2: "Off"
3: "Kill"
//* If you select this, the manager will send on whatever triggers (e.g. USE_ON) that it received
//* itself. So this is a way to "fork" the signal sent by another entity.
4: "Same as input"
]
//NEW 0.3
mode(choices) : "Mode" =
[
//* The 'value' for each target is the time offset at which to fire it.
0: "Normal (time offset)"
//* Choose one of the targets at random, and fire it. The 'value' gives the relative chance
//* that each target will be chosen.
1: "Choose one (weighted)"
//* Go through the list of targets, and for each one either fire it, or don't fire it.
//* The 'value' gives the percentage chance that a value will get fired.
2: "% chance for each"
//* In this mode, the number for each target specifies its position in the sequence
//* (relative to the other numbers), but all the targets will actually be fired at the same time.
//* So setting the targets to A 1, B 2 and C 3 would be almost equivalent to
//* setting A 0.00001, B 0.00002, and C 0.00003 in normal mode.
3: "No delay (ordered)"
]
//NEW 0.7.1
//* Gives threads a name of their own. This lets you kill/trigger the threads
//* without affecting the manager, and vice versa. (If this is left blank, the
//* threads have the same name as the manager.)
//* This is mostly useful on a multithreaded looped manager.
m_iszThreadName(target_source) : "Name of threads"
//NEW 0.7.1
//* Whenever a thread is created, the entity named here will be triggered,
//* with the new thread as the locus.
m_iszLocusThread(string) : "Trigger on spawn (locus = thread)"
spawnflags(Flags) =
[
//* By default, a manager will ignore all inputs while it's performing a sequence.
//* Tick this to allow more than one sequence to run at a time.
1 : "Multi-threaded" : 0
//NEW 0.6
//* NB: This flag has been moved. Apologies.
//* When the sequence ends, it will start again from the beginning. To stop the
//* loop, toggle the manager a second time.
4 : "Loop" : 0
//NEW 0.6
//* The manager will USE_KILL itself when the sequence is complete.
//* If Loop is also ticked, the manager will only USE_KILL itself when told to stop the loop.
8 : "Once only" : 0
//NEW 0.7.1
//* The manager will activate itself when the level starts, so that you don't
//* have to use a trigger_auto. (particularly useful for looping multi_managers.)
16 : "Start on" : 0
//NEW 0.7.1
//* The manager will report to the console when it fires, etc.
32 : "Debug mode" : 0
]
]
//NEW 0.3
//* A multi_watcher is like a normal @watcher, except that it watches up to 16 entities at once.
//* The entity is probably most useful when used as a master for another entity- a versatile replacement
//* for the @multisource, in a way. Note that if you need to handle a complex logical operation, you can make a
//* multi_watcher which watches other multi_watchers.
//* The list of watched entities is specified in the same way as the targets of a @multi_manager, except that the
//* 'value' should be set to 0. (Future versions of Spirit may make use of the value, but for now it's ignored.)
//* This is a very powerful entity, but is probably only useful for experienced mappers.
@PointClass base(Targetname) = multi_watcher : "State Watcher"
[
m_fLogic(choices) : "Logical test" : 0 =
[
0: "All (AND)"
2: "Not all (NAND)"
1: "At least one (OR)"
3: "None (NOR)"
4: "Exactly one (XOR)"
5: "Any number but one (XNOR)"
]
//* This entity will be sent USE_ON or USE_OFF, as appropriate, whenever the watcher's state changes.
target(target_destination) : "Entity to notify"
//* The bottom 5 flags are used to specify what states are being watched for. Default is to just watch for 'On'.
spawnflags(flags) =
[
//* If this is enabled, the watcher will always notify its target with USE_TOGGLE, instead of sending ON or OFF.
1: "Send 'Toggle'" : 0
8: "NOT 'On'" : 0
16: "'Off'" : 0
32: "'Turn On'" : 0
64: "'Turn Off'" : 0
128:"'In Use'" : 0
]
]
@PointClass base(Targetname, Angles, MoveWith) size(16 16 16) color(247 181 82) = path_corner : "Path Corner"
[
spawnflags(Flags) =
[
1: "Wait for retrigger" : 0
2: "Teleport" : 0
4: "Fire once" : 0
]
target(target_destination) : "Next stop target"
message(target_destination) : "Fire on Pass"
wait(integer) : "Wait here (secs)" : 0
speed(integer) : "Speed (0 = no change)" : 0
//NEW 0.5
armortype(choices) : "Meaning of 'Speed'" : 0 =
[
0 : "Set new speed"
//* It's very easy to get the train going 'infinitely' fast with this setting.
//* Excessively high speeds tend to cause problems, so use with caution.
1 : "Accelerate By"
//* This permanently changes the train's speed, the same way as the other
//* settings. In other words: when it reaches the next corner, the train's
//* speed won't change back.
2 : "Time to next corner"
]
//NEW 0.5
//* When the train passes this corner, its rate of turning will be set to this value -
//* just like the "speed" for a corner sets the train's linear speed.
//* NB: setting this field to "0 0 0" will make the train stop turning. Leaving the
//* field blank, on the other hand, will leave the train turning at the same rate.
turnspeed(string) : "Turn speed (Y Z X)"
//NEW 0.5
//* If set to "Yes", then as trains approach this corner, they will turn to face its
//* 'angle' value.
//* By default, the train will keep turning after passing the corner. To
//* make it stay facing your chosen direction, set "Turn Speed" to "0 0 0".
armorvalue(choices) : "Match Angle" : 0 =
[
0 : "No"
1 : "Yes"
]
]
@PointClass base(Targetname, Angles, MoveWith) size(16 16 16) = path_track : "Train Track Path"
[
spawnflags(Flags) =
[
1: "Disabled" : 0
2: "Fire once" : 0
4: "Branch Reverse" : 0
8: "Disable train" : 0
]
target(target_destination) : "Next stop target"
altpath(target_destination) : "Branch Path"
message(target_destination) : "Fire on Pass"
netname(target_destination) : "Fire on dead end"
speed(integer) : "Speed (0 = no change)" : 0
//NEW 0.5
armortype(choices) : "Meaning of 'Speed'" : 0 =
[
//* In normal Half-Life, this was the only setting available.
//* NB: This will have no effect unless the train has the "No Control" flag set.
0 : "Set current speed"
//* This sets the train's 'master speed', which means that the train's speed in
//* all gears (half speed, quarter speed, etc) will also change in proportion to
//* the number you set.
3 : "Set master speed"
//* It's very easy to get the train going 'infinitely' fast with this setting.
//* Excessively high speeds tend to cause problems, so use with caution.
//* (This changes the 'master speed').
1 : "Accelerate By"
//* This permanently changes the train's speed, the same way as the other
//* settings. In other words: when it reaches the next corner, the train's
//* speed won't change back.
//* (This changes the 'master speed').
2 : "Time to next corner"
// 3: "Change gear"?
]
//NEW 0.5
//* When the train passes this corner, its rate of turning will be set to this value -
//* just like the "speed" for a corner sets the train's linear speed.
//* NB: setting this field to "0 0 0" will make the train stop turning. Leaving the
//* field blank, on the other hand, will leave the train turning at the same rate.
turnspeed(string) : "Turn speed (Y Z X)"
//NEW 0.5
frags(choices) : "Meaning of 'Turn Speed'" : 0 =
[
0 : "Set current turn speed"
//* The value specified will be scaled to fit the speed (e.g. half
//* speed, quarter speed) the train is currently moving at.
1 : "Set master turn speed"
//* When you set Turn Speed to make a tracktrain turn around, its normal turning
//* (face along the track, turn at corners) gets suppressed. Select this when you
//* want to reenable it. (The 'Turn Speed' value isn't used when this option is
//* selected.)
2 : "Back to normal"
]
//NEW 0.5
//* If set to "Yes", then as trains approach this corner, they will turn to face its
//* 'angle' value.
//* By default, the train will keep turning after passing the corner. To
//* make it stay facing your chosen direction, set "Turn Speed" to "0 0 0".
armorvalue(choices) : "Match Angle" : 0 =
[
0 : "No"
1 : "Yes"
]
]
//
// player effects
//
@PointClass base(Targetname) size(-16 -16 -16, 16 16 16) = player_freeze : "Stop player from moving"
[
delay(string) : "Duration (0 = until retriggered)" : "5"
spawnflags(Flags) =
[
//* If you set this, then the entity expects to freeze the locus you tell it.
//* If there's no locus, or it isn't a player, nothing will happen.
//* (If you don't tick this, then player_freeze will just affect player 1.)
1: "Affect locus" : 0
]
]
@PointClass base(Targetname) size(-16 -16 -16, 16 16 16) = player_loadsaved : "Load Auto-Saved game"
[
duration(string) : "Fade Duration (seconds)" : "2"
holdtime(string) : "Hold Fade (seconds)" : "0"
renderamt(integer) : "Fade Alpha" : 255
rendercolor(color255) : "Fade Color (R G B)" : "0 0 0"
messagetime(string) : "Show Message delay" : "0"
message(string) : "Message To Display" : ""
loadtime(string) : "Reload delay" : "0"
]
// this may be the most irritating, repetitive, time-consuming entity I've ever implemented...
// HL's ammo system is _not_ set up to make this easy.
@PointClass base(Targetname) size(-16 -16 -16, 16 16 16) = player_weaponstrip : "Strip player's weapons"
[
//NEW 0.6
//* In each of these fields, either choose a preset value from the menu, or else specify
//* a number of bullets to remove (e.g. 8).
bullets(choices) : "Take 9mm bullets" : 0 =
[
0: "All"
-2: "All except clips"
-1: "Empty clips only"
-3: "None"
]
magnum(choices) : "Take 357 bullets" : 0 =
[
0: "All"
-2: "All except clip"
-1: "Empty clip only"
-3: "None"
]
shotgun(choices) : "Take shotgun ammo" : 0 =
[
0: "All"
-2: "All except clip"
-1: "Empty clip only"
-3: "None"
]
crossbow(choices) : "Take crossbow bolts" : 0 =
[
0: "All"
-2: "All except clip"
-1: "Empty clip only"
-3: "None"
]
argrenades(choices) : "Take AR grenades" : 0 =
[
0: "All"
-1: "None"
]
rockets(choices) : "Take rockets" : 0 =
[
0: "All"
-2: "All except clip"
-1: "Empty clip only"
-3: "None"
]
uranium(choices) : "Take uranium ammo" : 0 =
[
0: "All"
-2: "All except clips"
-1: "Empty clips only"
-3: "None"
]
satchels(choices) : "Take satchel charges" : 0 =
[
0: "All"
-1: "None"
]
snarks(choices) : "Take snarks" : 0 =
[
0: "All"
-1: "None"
]
tripmines(choices) : "Take tripmines" : 0 =
[
0: "All"
-1: "None"
]
handgrenades(choices) : "Take handgrenades" : 0 =
[
0: "All"
-1: "None"
]
hornetgun(choices) : "Take Hornet Gun" : 0 =
[
0: "Gun & ammo"
-3: "Ammo"
-1: "None"
]
spawnflags(Flags) =
[
1: "Remove suit" : 0
2: "Leave crowbar" : 0
4: "Leave glock" : 0
8: "Leave 357" : 0
16: "Leave mp5" : 0
// chaingun was never used
64: "Leave crossbow" : 0
128: "Leave shotgun" : 0
256: "Leave rpg" : 0
512: "Leave gauss" : 0
1024: "Leave egon" : 0
]
]
@PointClass base(Targetname) size(-16 -16 -16, 16 16 16) = player_gainsan : "Gives player sanity"
[
m_flSanGain(integer) : "Sanity Gain (negative for sanity loss)" : 10
]
// (The thing most noticeably lacking from half-life is the option to make a monster
// fire on command. So say I never give you anything...)
//NEW 0.3
//* Note that a @monster_generic won't usually do these actions correctly.
//* If you're using this to make a @monster_barney shoot, it'll look odd (as if he's shooting bullets from his
//* knuckles) unless you first use a scripted_sequence (playing the "draw" animation) or env_customize
//* (setting body = 1) to put his pistol into his hand; as seen in the SpiritDemo level.
@PointClass base(Script) = scripted_action : "Scripted Action"
[
//NEW 1.0
m_iszMoveTarget(string) : "Move target (blank = this) [LE]"
m_fMoveTo(choices) : "Move to Position" : 5 =
[
//* Don't move at all. (Turn Type will be ignored.)
0 : "No (don't turn)"
//* Walk to the move target, then turn.
1 : "Walk"
//* Run to the move target, then turn.
2 : "Run"
//* Don't move - just turn to face to whatever the turn mode.
5 : "No - Only turn"
//* Teleport to the move target. Also, the monster's angle will instantly change to
//* whatever is specified in the turn target's "turn type".
//* Spirit fixes a bug which used to freeze a monster when playing scripts with this setting.
4 : "Instant move + turn"
//NEW 1.0
//* Don't move - just change angle to whatever the turn type specifies, instantly.
6 : "No - Instant turn"
]
//NEW 0.6
//* If you specify a classname (e.g. monster_barney) here, the script will choose a random entity of that
//* type.
m_iszAttack(string) : "Entity to attack (blank = this) [LE]"
//NEW 0.3
m_fTurnType(choices) : "Turn mode" : 1 =
[
//* Turn to the same angle as the attack entity is facing.
0 : "Match Angle"
//* Turn to look (and aim) at the entity to attack.
1 : "Turn to face"
2 : "Don't Turn"
]
m_fAction(choices) : "Action to perform" : 0 =
[
//* Headcrabs: leap. Houndeye: sonic attack. Barney: fire pistol... and so on. Most monsters have a ranged attack of some kind.
0 : "Ranged Attack"
//* Grunts and assassins: throw or launch a grenade at the "attack" entity.
//* Alien Controller: big homing fireball.
1 : "Ranged Attack 2"
//* Scientist: Heal. Everyone else: Kick, punch, bite, slash with claws, etc.
2 : "Melee Attack"
//* Assassins: kick. Bullsquids:bite. Headcrab: rear up on hind legs.
//* Big Momma: lay a baby headcrab. Gargantua: Flame Thrower.
3 : "Melee Attack 2"
//* Grunts: place a grenade on the ground.
4 : "Special Attack"
//* Don't know of any monsters which use this, but feel free to try...
5 : "Special Attack 2"
//* Grunts and barneys: Reload. The same thing can be done with a @scripted_sequence, but it's available here for convenience.
6 : "Reload"
//* Assassins: jump to the "attack" entity. Houndeyes, Bullsquids and Big Momma: just jump.
7 : "Jump"
//* Just turn and/or move.
8 : "No action"
]
spawnflags(Flags) =
[
//* If this isn't ticked, the script will be ignored while the monster is in combat.
64: "Override AI" : 0
]
]
//* If no targetname is given, a scripted_sentence will play sentences as often as its "refire" rate permits.
@PointClass base(Targetname, Targetx, MoveWith) size(-16 -16 0, 16 16 72) color(255 0 255) = scripted_sentence : "Scripted Sentence"
[
spawnflags(Flags) =
[
1 : "Fire Once" : 0
2 : "Followers Only" : 0
4 : "Interrupt Speech" : 0
8 : "Concurrent" : 0
]
sentence(string) : "Sentence Name" : ""
//NEW 0.4
entity(string) : "Target Monster (blank for HEV) [LE]"
duration(string) : "Sentence Time" : "3"
//* If "Target Monster" is a classname, the game picks a random monster of that type from within this
//* search radius.
radius(integer) : "Search Radius" : 512
refire(string) : "Delay Before Refire" : "3"
listener(string) : "Listener Name/Class" : "player"
volume(string) : "Volume 0-10" : "10"
attenuation(Choices) : "Sound Radius" : 0 =
[
0 : "Small Radius"
1 : "Medium Radius"
2 : "Large Radius"
3 : "Play Everywhere"
]
]
//* If a scripted_sequence has no targetname, it will start playing as soon as the level begins.
//* If two or more scripted_sequences have the same targetname, they will be synchronised so that
//* no matter how long it takes the monsters to walk to the sequence entities, their action animations
//* will start at the same time. Also, if one of the monsters cancels its sequence (e.g. if it gets
//* hurt), the other one will too.
@PointClass base(ScriptSequence) = scripted_sequence : "Scripted Sequence"
[
spawnflags(Flags) =
[
//* Unless you tick this, the monster won't play the script when it's in combat.
64: "Override AI" : 0
]
]
//NEW 0.6
@PointClass base(Targetname, Angles, MoveWith) size(-16 -16 -16, 16 16 16) color(255 0 255) = scripted_tanksequence : "Scripted Tank Sequence"
[
m_iszEntity(string) : "Tank to affect"
m_iTurn(choices) : "Turn to" : 2 =
[
0: "Don't turn"
1: "Match angle"
2: "Face sequence"
3: "Face enemy"
]
//* Specify either a classname (e.g. monster_barney) or a targetname to look for.
//* If you leave this blank, the tank will just pick its nearest enemy.
m_iszEnemy(string) : "Enemy to face"
m_iShoot(choices) : "Fire gun" : 1 =
[
0: "Don't fire"
1: "Once (at end)"
2: "Constantly"
3: "While facing target"
]
m_iUntil(choices) : "Halt condition" : 1 =
[
0: "None"
1: "Tank faces target"
2: "Enemy dies"
]
target(string) : "Trigger on halt"
m_fDuration(string) : "Time limit (0 = no limit)" : "0"
netname(string) : "Trigger on timeout"
m_iActive(choices) : "Tank state afterwards" : 0 =
[
0: "No change"
1: "Active"
2: "Inactive"
3: "Toggle"
]
m_iControllable(choices) : "Control afterwards" : 0 =
[
0: "No change"
1: "Controllable"
2: "Not Controllable"
3: "Toggle"
]
m_iLaserSpot(choices) : "Laser Spot afterwards" : 0 =
[
0: "No change"
1: "Turn on"
2: "Turn off"
3: "Toggle"
]
spawnflags(flags) =
[
//* Usually, if a player is using the tank when the sequence is activated,
//* the sequence won't work. Tick here to override that, by dumping the
//* player when the sequence starts.
1: "Dump player" : 0
2: "Repeatable" : 0
]
]
//NEW 0.6
//* This entity is by no means complete, but is still somewhat usable.
@PointClass base(Targetname, Angles, MoveWith) size(-16 -16 -16, 16 16 16) color(255 0 255) = scripted_trainsequence : "Scripted Train Sequence"
[
m_iszEntity(string) : "Func_train to affect [LE]"
m_iszDestination(string) : "Destination to head for [LE]"
m_iDirection(choices) : "Train direction" : 4 =
[
4: "Towards destination"
1: "Forwards"
2: "Backwards"
0: "No change"
]
target(string) : "Fire on arrival"
m_fDuration(string) : "Time limit (0 = no limit)" : "0"
netname(string) : "Fire on timeout"
//* This entity will be triggered regardless of how the sequence ends:
//* by reaching the destination, by timing out, or by the sequence being
//* triggered 'off' (which causes it to abort).
m_iszTerminate(string) : "Fire at end, regardless"
m_iPostDirection(choices) : "Direction afterwards" : 3 =
[
1: "Forwards"
3: "Stop"
]
spawnflags(flags) =
[
2: "Once only" : 0
//* The train will just move straight to the destination
//* you specify, without trying to follow an existing path.
4: "Skip path" : 0
]
]
@PointClass iconsprite("sprites/speaker.spr") base(Targetname, MoveWith) = speaker : "Announcement Speaker"
[
preset(choices) :"Announcement Presets" : 0 =
[
0: "None"
1: "C1A0 Announcer"
2: "C1A1 Announcer"
3: "C1A2 Announcer"
4: "C1A3 Announcer"
5: "C1A4 Announcer"
6: "C2A1 Announcer"
7: "C2A2 Announcer"
// 8: "C2A3 Announcer"
9: "C2A4 Announcer"
// 10: "C2A5 Announcer"
11: "C3A1 Announcer"
12: "C3A2 Announcer"
]
message(string) : "Sentence Group Name"
health(integer) : "Volume (10 = loudest)" : 5
spawnflags(flags) =
[
1: "Start Silent" : 0
]
]
@PointClass base(Targetname) = target_cdaudio : "CD Audio Target"
[
health(choices) : "Track #" : -1 =
[
-1 : "Stop"
1 : "Track 1"
2 : "Track 2"
3 : "Track 3"
4 : "Track 4"
5 : "Track 5"
6 : "Track 6"
7 : "Track 7"
8 : "Track 8"
9 : "Track 9"
10 : "Track 10"
11 : "Track 11"
12 : "Track 12"
13 : "Track 13"
14 : "Track 14"
15 : "Track 15"
16 : "Track 16"
17 : "Track 17"
18 : "Track 18"
19 : "Track 19"
20 : "Track 20"
21 : "Track 21"
22 : "Track 22"
23 : "Track 23"
24 : "Track 24"
25 : "Track 25"
26 : "Track 26"
27 : "Track 27"
28 : "Track 28"
29 : "Track 29"
30 : "Track 30"
]
radius(string) : "Player Radius"
]
//
// Triggers
//
//* Be careful when using this entity; it will trigger not only when the level starts,
//* but also when a saved game is loaded.
@PointClass base(Targetx) = trigger_auto : "AutoTrigger"
[
spawnflags(Flags) =
[
1 : "Remove On fire" : 0
//NEW 0.5
//* Tick here to have the trigger_auto's "activator" be the player.
//* (Not for use in multiplayer levels.)
2 : "From Player" : 0
]
globalstate(string) : "Global State to Read"
//NEW 0.3
triggerstate(choices) : "Trigger to send" : 2 =
[
0 : "Off"
1 : "On"
2 : "Toggle"
3 : "Kill"
]
]
@SolidClass base(Targetname, Master, MoveWith) = trigger_autosave : "AutoSave Trigger" []
//NEW 0.6
//* An entity that things bounce off. Set its Angle to specify the angle to reflect them in;
//* objects already moving in this direction will be unaffected. (E.g. to make a trampoline,
//* you would specify "up". Objects which are already moving upwards will be unaffected.)
//* Try Factor = 2 and Minimum Speed = 150 to make a corridor which players can't run through,
//* only walk slowly. (Something like the force-fields in Dune.)
@SolidClass base(Trigger, TriggerCond, Angles, MoveWith) = trigger_bounce : "Bouncey area"
[
//* Acts like friction - each bounce will be scaled up or down by this amount.
//* (for instance, if the factor is 0.5, and you hit the trigger_bounce at 100
//* units/sec, you'll bounce off at 50 units/sec.)
frags(string) : "Factor (0=stop, 1=perfect bounce)" : "0.9"
//* If an object hits the trigger_bounce entity slower than this, then it'll
//* go straight through.
armorvalue(string) : "Minimum Speed" : "100"
spawnflags(flags) =
[
//* Tells the entity to reduce bounce speeds by the 'minimum speed' value.
//* (for instance, if you hit the trigger_bounce at 100 units/sec, the Factor is
//* 0.5 and the min.speed is 20, then you'll bounce off at 40 units/sec.
16: "Truncate Speed" : 0
]
]
@PointClass base(Targetname, Targetx) = trigger_camera : "Trigger Camera"
[
wait(integer) : "Hold time" : 10
moveto(string) : "Path Corner"
spawnflags(flags) =
[
1: "Start At Player" : 0
2: "Follow Player" : 0
4: "Freeze Player" : 0
]
speed(string) : "Initial Speed" : "0"
acceleration(string) : "Acceleration units/sec^2" : "500"
deceleration(string) : "Stop Deceleration units/sec^2" : "500"
m_iszViewEntity(string) : "Entity to view from (blank = this)"
]
@SolidClass base(Targetname) = trigger_cdaudio : "Trigger CD Audio"
[
health(choices) : "Track #" : -1 =
[
-1 : "Stop"
1 : "Track 1"
2 : "Track 2"
3 : "Track 3"
4 : "Track 4"
5 : "Track 5"
6 : "Track 6"
7 : "Track 7"
8 : "Track 8"
9 : "Track 9"
10 : "Track 10"
11 : "Track 11"
12 : "Track 12"
13 : "Track 13"
14 : "Track 14"
15 : "Track 15"
16 : "Track 16"
17 : "Track 17"
18 : "Track 18"
19 : "Track 19"
20 : "Track 20"
21 : "Track 21"
22 : "Track 22"
23 : "Track 23"
24 : "Track 24"
25 : "Track 25"
26 : "Track 26"
27 : "Track 27"
28 : "Track 28"
29 : "Track 29"
30 : "Track 30"
]
]
//NEW 0.3
@PointClass base(Targetname) = trigger_changealias : "Trigger Change Alias"
[
target(string) : "Alias to affect"
netname(string) : "String to Set"
spawnflags(flags) =
[
//* If this is ticked, alias references in the "String to Set" will be resolved before any changes are
//* applied. So, for example, suppose you set this entity up to affect an alias "alias1", and to set alias1
//* to target "*myalias".
//* If "Resolve references" is left unticked, then "alias1" will change to refer to "*myalias"; that is,
//* in future any changes to "myalias" will also change what "alias1" refers to.
//* By contrast, if "Resolve references" is ticked, then "alias1" will change to refer to whatever "myalias"
//* is referring to <u>at the time the trigger_changealias takes effect</u>. Future changes to "myalias" will
//* therefore not affect "alias1".
1 : "Resolve references" : 0
2 : "Debug Mode" : 0
]
]
//NEW 0.5
@PointClass base(Targetname) = trigger_changecvar : "Change Console Variable"
[
netname(string) : "CVar to change"
message(string) : "Value to set"
armorvalue(string) : "Duration (-1 = until triggered)"
]
@SolidClass = trigger_changelevel : "Trigger: Change level"
[
targetname(string) : "Name"
map(string) : "New map name"
landmark(string) : "Landmark name"
changetarget(target_destination) : "Change Target"
changedelay(string) : "Delay before change target" : "0"
spawnflags(flags) =
[
1: "No Intermission" : 0
2: "USE Only" : 0
]
]
@PointClass base(Targetname) = trigger_changetarget : "Trigger Change Target"
[
target(string) : "Entity to affect [LE]"
m_iszNewTarget(string) : "New Target [LE]"
]
//NEW 0.5
@PointClass base(Targetname) = trigger_command : "Console Command"
[
netname(string) : "Command String"
]
//* While locked by its master, the trigger_counter _will_ keep counting when fired,
//* but it won't fire anything itself.
@SolidClass base(Trigger, MoveWith) = trigger_counter : "Trigger counter"
[
spawnflags(flags) =
[
1 : "No Message" : 0
]
count(integer) : "Count before activation" : 2
]
@SolidClass base(Targetname, MoveWith) = trigger_endsection : "EndSection Trigger"
[
section(string) : "Section"
spawnflags(flags) =
[
1: "USE Only" : 0
]
]
@SolidClass base(Targetname) = trigger_gravity : "Trigger Gravity"
[
gravity(integer) : "Gravity (0-1)" : 1
]
@SolidClass base(Targetname, Target, Master, MoveWith) = trigger_hurt : "Trigger player hurt"
[
spawnflags(flags) =
[
1: "Fire once" : 0
2: "Start Off" : 0
8: "No clients" : 0
16:"Only when fired" : 0
32:"Only on touch" : 0
]
dmg(integer) : "Damage" : 10
delay(string) : "Delay before trigger" : "0"
damagetype(choices) : "Damage Type" : 0 =
[
0 : "GENERIC"
1 : "CRUSH"
2 : "BULLET"
4 : "SLASH"
8 : "BURN"
16 : "FREEZE"
32 : "FALL"
64 : "BLAST"
128 : "CLUB"
256 : "SHOCK"
512 : "SONIC"
1024 : "ENERGYBEAM"
16384: "DROWN"
32768 : "PARALYSE"
65536 : "NERVEGAS"
131072 : "POISON"
262144 : "RADIATION"
524288 : "DROWNRECOVER"
1048576 : "CHEMICAL"
2097152 : "SLOWBURN"
4194304 : "SLOWFREEZE"
]
//NEW 0.7.1
cangib(choices) : "To gib or not to gib" : 0 =
[
0 : "Normal"
1 : "Always gib"
2 : "Never gib"
]
]
@SolidClass base(Targetname, Master, TriggerCond, MoveWith) = trigger_inout : "Trigger: Activate on entering or leaving"
[
target(string) : "Fire on entering"
m_iszAltTarget(string) : "Fire on leaving"
//NEW 0.6
m_iszBothTarget(string) : "Fire on/off (entering/leaving)"
]
@SolidClass base(Master, MoveWith) = trigger_monsterjump : "Trigger monster jump"
[
speed(integer) : "Jump Speed" : 40
height(integer) : "Jump Height" : 128
]
//NEW 0.7.1
//* This replaces the trigger_setposition and trigger_setvelocity entities, which have
//* been removed. Apologies for any inconvenience.
//* If you want to control motion for a period of time, see @motion_manager.
@PointClass base(Targetname) = trigger_motion : "Set the position and movement of an entity"
[
target(target_destination) : "Target to affect [LE]"
m_iszPosition(string) : "Position (blank = no change)"
m_iPosMode(choices) : "Meaning of Position" : 0 =
[
0 : "Set new position [LP]"
1 : "Add offset [LV]"
]
m_iszAngles(string) : "Angles (blank = no change)"
m_iAngMode(choices) : "Meaning of Angles" : 0 =
[
0 : "Set new angle [LV]"
1 : "Rotate by [LV]"
2 : "Rotate by (Y Z X)"
]
m_iszVelocity(string) : "Velocity (blank = no change)"
m_iVelMode(choices) : "Meaning of Velocity" : 0 =
[
0 : "Set new velocity [LV]"
1 : "Add to velocity [LV]"
2 : "Rotate velocity by [LV]"
3 : "Rotate velocity (Y Z X)"
]
m_iszAVelocity(string) : "AVelocity (blank = no change)"
m_iAVelMode(choices) : "Meaning of AVelocity" : 0 =
[
0 : "Set new avelocity (Y Z X)"
1 : "Add to avelocity (Y Z X)"
]
spawnflags(flags) =
[
1: "Debug" : 0
]
]
@SolidClass base(Trigger, TriggerCond, MoveWith) = trigger_once : "Trigger: Activate once"
[
message(string) : "Text when triggered"
noise(string) : "Sound when triggered"
]
@SolidClass base(trigger_once) = trigger_multiple : "Trigger: Activate multiple"
[
wait(integer) : "Delay before reset" : 10
]
//NEW 0.6
//* In fact, this should probably be called watcher_onsight.
@PointClass base(Targetname, Master, MoveWith) = trigger_onsight : "Trigger when A sees B"
[
//* Put the targetname of the entity whose eyes the trigger_onsight should look through.
//* (if you want to trigger when the trigger_onsight itself sees something, i.e.
//* simulating a security camera, put the name of the trigger_onsight.)
netname(string) : "Looking entity (blank=player)"
//* Leave this blank to have it trigger when something sees the trigger_onsight.
//* You can also put a classname here, to trigger when the Looking Entity sees
//* any entity of that class.
message(string) : "Entity/classname to look at"
target(string) : "Fire when seen"
noise(string) : "Fire when no longer seen"
noise1(string) : "Fire on/off (seen/not seen)"
frags(string) : "View range (0=unlimited)" : "512"
//* Currently, only the horizontal view will be checked.
max_health(choices) : "Field of view (degrees)" : 90 =
[
-1 : "(-1): Use monster's view"
]
spawnflags(flags) =
[
//* Don't check line of sight: i.e. it doesn't matter if there's something
//* in the way.
1: "No LOS check" : 0
2: "Seethru glass" : 0
]
]
@SolidClass base(Trigger, MoveWith) = trigger_push : "Trigger player push"
[
spawnflags(flags) =
[
1: "Once Only" : 0
2: "Start Off" : 0
]
speed(integer) : "Speed of push" : 40
]
//NEW 0.3
//* Only affects dynamic (i.e. named) lights.
@PointClass base(Targetname) = trigger_lightstyle : "Trigger Change Lightstyle"
[
target(target_destination) : "Target to affect [LE]"
style(choices) : "New Appearance" : 0 =
[
0 : "On"
13: "Off"
10: "Fluorescent flicker"
2 : "Slow, strong pulse"
11: "Slow pulse, noblack"
5 : "Gentle pulse"
1 : "Flicker A"
6 : "Flicker B"
3 : "Candle A"
7 : "Candle B"
8 : "Candle C"
4 : "Fast strobe"
9 : "Slow strobe"
12: "Underwater"
14: "Slow Fade In"
15: "Medium Fade In"
16: "Fast Fade In"
]
pattern(string) : "Custom Appearance"
m_iFade(string) : "Fade time" : 0
m_iWait(string) : "Hold time (-1 = permanent)" : -1
]
@PointClass base(Targetname, Targetx, Master) = trigger_relay : "Trigger Relay"
[
//NEW 0.5
//* This field allows you to use the trigger_relay as a kind of conditional jump: it
//* looks at its master, and does different actions based on the master's state.
m_iszAltTarget(string) : "Target if locked by master"
spawnflags(flags) =
[
1: "Remove On fire" : 0
//NEW 0.4
//* If you're trying to work out what's going wrong with your level,
//* try ticking here and the relay will tell you when it triggers, etc.
//* Here's a useful trick: make a trigger_relay with this field ticked,
//* and give it the same name as an entity that you're interested in.
//* The relay will then notify you whenever that entity gets triggered.
2: "Debug Mode" : 0
]
//NEW 0.4
triggerstate(choices) : "Trigger to send" : 2 =
[
0: "Off"
1: "On"
2: "Toggle"
4: "Kill"
5: "Same as input"
//NEW 0.7.1
//* I.e. when triggered ON, send OFF. And vice versa.
6: "Opposite of input"
//NEW 0.7.1
//* Setting this will cause the target momentary door to move to a particular position.
7: "Ratio (momentary doors)"
]
//* Use this in combination with usetype Ratio, to trigger momentary doors.
//* For example, sending 1.0 tells them to go fully
//* open, 0.0 fully closed, and 0.5 half-way.
message(string) : "Set ratio (blank = no change) [LR]"
]
// don't use. This is just a test entity.
@PointClass base(Targetname) = trigger_rottest : "Trigger RotTest"
[
target(target_destination) : "Marker ent"
netname(target_destination) : "Reference ent"
message(target_destination) : "Hinge ent"
health(integer) : "Distance" : 5
armortype(integer) : "Angle Step" : 30
]
//NEW 0.6
@SolidClass base(Targetname, Master) = trigger_sound : "Brush-based DSP Sound"
[
target(target_destination) : "Fire when activated"
delay(string) : "Delay before trigger" : "0"
killtarget(target_destination) : "KillTarget"
roomtype(choices) : "Room Type" : 0 =
[
0 : "(Disable all filters)"
1 : "Generic (no filters)"
2 : "Metal Small"
3 : "Metal Medium"
4 : "Metal Large"
5 : "Tunnel Small"
6 : "Tunnel Medium"
7 : "Tunnel Large"
8 : "Chamber Small"
9 : "Chamber Medium"
10: "Chamber Large"
11: "Bright Small"
12: "Bright Medium"
13: "Bright Large"
14: "Water 1"
15: "Water 2"
16: "Water 3"
17: "Concrete Small"
18: "Concrete Medium"
19: "Concrete Large"
20: "Big 1"
21: "Big 2"
22: "Big 3"
23: "Cavern Small"
24: "Cavern Medium"
25: "Cavern Large"
26: "Weirdo 1"
27: "Weirdo 2"
28: "Weirdo 3"
]
]
//NEW 0.2
//* Suggest to the specified monster that it should follow the given path. This is a low priority
//* activity, superceded when it spots a player (for instance).
//* (The same thing happens if you give the monster a "target".)
@PointClass base(Targetname) = trigger_startpatrol : "Trigger Start Patrol"
[
target(string) : "Target monster"
m_iszPath(string) : "Patrol path start"
]
@SolidClass base(Targetname, Master, TriggerCond, MoveWith) = trigger_teleport : "Trigger teleport"
[
target(target_destination) : "Destination entity"
//NEW 0.6
message(target_destination) : "Landmark entity"
//NEW 0.6
noise(target_destination) : "Fire on teleporting"
]
@SolidClass base(Targetname) = trigger_transition : "Trigger: Select Transition Area" []
//NEW 0.3
//* A watcher watches an entity, waiting for it to be in a given state. The default behaviour is for
//* the watcher to be 'On' if the watched entity is 'On', and to be 'Off' at all other times.
//* The main use for a watcher is to fire another entity (the "entity to notify"), each time the
//* watcher's state changes.
@PointClass base(Targetname) = watcher : "State Watcher"
[
m_iszWatch(string) : "Entity to watch [LE]"
//* The watcher will revert to this state if the watched entity is missing or killed.
m_fLogic(choices) : "State if entity isn't found" : 0 =
[
0: "On"
1: "Off"
]
//* This entity will be sent USE_ON or USE_OFF, as appropriate, whenever the watcher's state changes.
target(target_destination) : "Target to notify"
//* The bottom 5 flags are used to specify what states are being watched for. Default is to just watch for 'On'.
spawnflags(flags) =
[
//* If this is enabled, the watcher will notify its target with USE_TOGGLE, instead of sending ON or OFF.
1: "Send 'Toggle'" : 0
//* If this is enabled, the target won't be triggered when the watcher turns on.
2: "Don't Send On" : 0
//* If this is enabled, the target won't be triggered when the watcher turns off.
4: "Don't Send Off" : 0
8: "NOT 'On'" : 0
16: "'Off'" : 0
32: "'Turn On'" : 0
64: "'Turn Off'" : 0
128:"'In Use'" : 0
]
]
@PointClass base(Targetname) = watcher_count : "Watcher, entity count"
[
noise(string) : "Count entities named..."
impulse(integer) : "Comparison number"
m_iMode(choices) : "Type of comparison" : 0 =
[
0 : "'On' when count = number"
//* != means "not equal"
3 : "'On' when count != number"
1 : "'On' when count > number"
5 : "'On' when count >= number"
2 : "'On' when count < number"
4 : "'On' when count <= number"
]
target(string): "Fire on changing state"
netname(string): "Fire on turning on"
message(string): "Fire on turning off"
noise1(string): "Fire when count increases"
noise2(string): "Fire when count decreases"
spawnflags(flags) =
[
//* If this is set, one set of targets (on or off) will be fired,
//* as appropriate, when the level starts.
1: "Fire at startup" : 0
]
]
//
// Weapons
//
@PointClass base(Weapon, Targetx, RenderFields) = weapon_knife : "Knife" []
@PointClass base(Weapon, Targetx, RenderFields) = weapon_swordcane : "Swordcane" []
@PointClass base(Weapon, Targetx, RenderFields) = weapon_revolver : "Revolver" []
@PointClass base(Weapon, Targetx, RenderFields) = weapon_shotgun : "Shotgun" []
@PointClass base(Weapon, Targetx, RenderFields) = weapon_tommygun : "Tommy Gun" []
@PointClass base(Weapon, Targetx, RenderFields) = weapon_rifle : "Rifle" []
@PointClass base(Weapon, Targetx, RenderFields) = weapon_molotov : "Molotov Cocktail" []
@PointClass base(Weapon, Targetx, RenderFields) = weapon_dynamite : "Dynamite" []
@PointClass base(Weapon, Targetx, RenderFields) = weapon_powderofibn : "Powder of Ibn" []
@PointClass base(Weapon, Targetx, RenderFields) size(-16 -16 -5, 16 16 27) = weapon_eldersign : "Elder Sign" []
@PointClass base(Weapon, Targetx, RenderFields) size(-16 -16 -5, 16 16 27) = weapon_rlyeh_seal : "R'lyeh Seal" []
@PointClass base(Weapon, Targetx, RenderFields) = weapon_shrivelling : "shrivelling" []
@PointClass base(Weapon, Targetx, RenderFields) = weapon_drainlife : "drainlife" []
@PointClass base(Weapon, Targetx, RenderFields) = weapon_lightninggun : "Lightning Gun" []
@PointClass base(Weapon, Targetx, RenderFields) = weapon_serpentstaff : "Serpent Staff" []
@PointClass base(Weapon, Targetx, RenderFields) = weapon_dread_name : "Dread Name" []
//@PointClass base(Weapon, Targetx, RenderFields) = weapon_charm : "Charm" []
//@PointClass base(Weapon, Targetx, RenderFields) = weapon_teleport : "Teleport Pad Ammo" []
//@PointClass base(Weapon, Targetx, RenderFields) = weapon_hologram : "Hologram Pad Ammo" []
@PointClass size(-16 -16 0, 16 16 64) color(0 128 0) = weaponbox : "Weapon/Ammo Container" []
@PointClass base(Weapon, Targetx, RenderFields) = world_items : "World Items"
[
type(choices) :"types" : 42 =
[
42: "Antidote"
43: "Key"
//44: "Battery"
45: "Suit"
]
]
//
// Xen
//
@PointClass base(Targetname, Angles, RenderFields) size(-8 -8 0, 8 8 32 ) = xen_hair : "Xen Hair"
[
spawnflags(Flags) =
[
1 : "Sync Movement" : 0
]
]
@PointClass base(Target, Targetname, Angles, RenderFields) size(-48 -48 0, 48 48 32 ) = xen_plantlight : "Xen Plant Light" []
@PointClass base(Targetname, Angles, RenderFields) size(-24 -24 0, 24 24 188 ) = xen_tree : "Xen Tree" []
@PointClass base(Targetname, Angles, RenderFields) size(-16 -16 0, 16 16 64 ) = xen_spore_small : "Xen Spore (small)" []
@PointClass base(Targetname, Angles, RenderFields) size(-40 -40 0, 40 40 120 ) = xen_spore_medium : "Xen Spore (medium)" []
@PointClass base(Targetname, Angles, RenderFields) size(-90 -90 0, 90 90 220 ) = xen_spore_large : "Xen Spore (large)" []