History
1.30: October 31st, 2023
- Nightmare revisited as a more unique gameplay mode with role-specific monster enhancement
- Knights, Fiends, Dogs, and Rotfish move and attack faster
- Vorepods pursue more maliciously than vanilla (... until the vore dies)
- Zombies eventually return to life even if gibbed with explosives
- Grunts, Ogres, and Shamblers can fire repeatedly in fast volleys
- Ogres have their Z-awareness bumped up and rarely play their long stun animation
- Enforcers have a higher ROF and rarely play their long stun animation
- Scrags move faster when strafing, and spit bigger, faster bolts
- Death knights fire bigger, faster projectiles in two different patterns
- Spawns wake up and take flight more promptly
- Max health is 100 :P
- Heads Up Display improved in client engines that support CSQC, with new art by Sven "ptoing" Ruthner
- Classic and modern (Rerelease/Ironwail-style) HUDs both supported, selected with 'hudstyle' cvar
in Ironwail and 'saved1' cvar everywhere (0, 1, or 2)
- New Ranger face art for overlapping powerup states
- func_void screen fade uses a backup HUD-based solution if gl_cshiftpercent is below 90
- Key icons show how many keys you have as well as key type (keycard, runekey, etc)
- Implemented unused flash-on-pickup animation graphics on powerup icons, matching the weapons
- Added unique pentagram armor icon, rather than reusing the disk access indicator
- Coop HUD shows your buddies' shirt and pants color, as well as who's alive and who's dead
- Intermission screen shows map name and skill level, plus coop players' monster kill counts
- Weapons
- Added axe pickup
- Fixed broken weapon select behavior if the player has all weapons taken by a target_items, so
no-weapon starts are now possible
- Fixed axe/shotgun attacks sometimes hurting you if noclipping inside a notrace object (thx chloe)
- Fixed Thunderbolt underwater discharge crashing the game with enough cells on a big enough map
- Fixed Thunderbolt side traces converging to center when looking up or down (thx argonian)
- Impulses
- Added Alkaline-style impulse triggering: impulses 20-39 will trigger anything in the map with
a matching impulse, and impulse 40 will list all such entities in the level
- Added impulse 13/14 to select the best available shotgun/nailgun
- Added impulse 15 to select the best available weapon (per existing weapon switch rules)
- Fixed missing impulse 11 serverflags/rune cheat
- Fixed impulse 102 (dev_trigger) not working reliably
- Scrags
- Lowered the fly animation so it's no longer out of the top of the bounding box. rejoice
- Created a proper second half for the attack animation that doesn't rise out of the bounding box
- Added some feeler code to flight movement to help navigate over/under obstacles on the Z axis
- Fixed a few bugs in deciding whether to strafe or approach, should make more sense now
- Shalraths
- Sped vorepods up a little, restoring the 1.0 turn rate to compensate
- Reduced vorepods homing vertically when they don't have to leave the horizontal plane
- Restored missing Ring of Shadows homing buff
- Spawns
- Fixed falling asleep facing a wall or corner and not waking up on sight thereafter
- Fixed continuing to bounce at nothing forever once its target dies
- Trains
- func_trains with a 'health' key can be damaged to trigger them
- func_trains now support bezier curve control points via a new path_corner spawnflag
- func_flytrain completely reimplemented as a specialization of func_train
- All inconsistencies with func_train are fixed
- Ditched old crappy hard-to-control motion, curved motion now requires bezier path use
- Amount of lazy drift can be controlled with 'width' and 'height' keyvalues
- misc_teleporttrains are now always flytrains under the hood
- Angry monsters that teleport to a misc_teleporttrain will emerge facing their enemy
- Rearranged corner arrival behavior so a train can safely trigger itself
- Fixed excessive flytrain developer print spam
- Alternate Target Pattern
- Some entities now have a spawnflag to optionally fire the four target keys (target/target2/
target3/target4) at different times related to the entity's behavior
- Monsters, doors, plats, trains, flytrains and buttons are supported (see the docs for more)
- Secret Doors
- Fixed path_corner defined motion not working if the door spawns before the path_corners
- Fixed texture not changing if movement is path_corner defined
- Reduced developer print spam
- Locks
- Added target_lock support to func_voids and info_teleport_destinations
- target_lock can be set to auto-undo itself after a delay
- Fixed plats targeted by a target_lock also defaulting to 'trigger first' behavior
- Killtargets
- Added 'random' spawnflag to target_kill
- Added 'murder' spawnflag to target_kill, to kill monsters and spawners in a way that adds to
the kill count rather than subtracting from the total
- Fixed killcount not reducing when killtargeting trigger-spawned monsters like it does with
normal ones (thx comfy)
- Fixed a trigger_relay with 'Random' and a killtarget killing worldspawn when it runs out of
targets (thx comfy)
- Sounds
- Added toggle spawnflag + wait/rand to target_sound to match the effect emitters
- Added ability for target_sound to play its sounds on a target entity instead of at its origin
- Added single-channel override to force target_sound to use a certain channel
- Fog
- Fixed 'delay' key on target_fogblend causing fog stutter instead of the documented behavior
- Fixed target_fogblend not reversing on second trigger if speed is -1
- Fixed skyfog blends being weird if the map/spawnpoint doesn't specify a skyfog but the cvar
is initially non-zero
- Ring of Shadows
- Fixed reversed normals on Ring of Shadows model
- Fixed 1 second period of visibility to the monster you're attacking while invisible not always
pulling attacks
- Fixed dogs being deaf to gunfire from an invisible player who's outside melee range
- Coop
- Made 'coop 1' respawn delay and party wipe rules not apply in the start map
- Fixed not transferring enough keys to other players when dying in coop (thx mhbuur)
- Fixed kills with exploboxes not counting as coop frags
- Other Additions
- Three new startup demos played on skill 3 (thx chloe)
- Smart func_button_skill for when trigger_setskill just isn't your style
- target_debris for meat fireworks made out of things other than meat
- target_fade for interpolating entity alphas and lights, over time or positionally
- info_player_start2 can require/mask specific runes, for variable map entry points
- Entities that fade a paired lightstyle (like func_door) can invert the fade by setting the
style to negative
- misc_particlefield can center its effect on its target
- trigger_push can target an info_notnull to set its direction like a spotlight
- Fall/splat sounds on func_void can be overridden with 'noise'/'noise2'
- Start-invisible/late-spawn functionality (similar to func_wall or trigger-spawned monsters)
added to func_bobbing, func_door, func_button, and exploboxes
- Added lip and dmg keyvalues to func_plat, which never had them somehow
- Updated the help screens (thx ptoing)
- Improved medieval key and rune key models
- Fixed player getting stuck in NO_TELEFRAG spawned monsters instead of still telefragging them
- Fixed 'rand' key not working on target_explosion, target_telefog, and target_meat_fireworks if
'delay' was 0/not set
- Fixed triggered, lying zombies with a patrol path not playing the stand animation before walking
- Fixed missing activator on trigger_timers set to 'start on' (now assumes player 1) (thx markie)
- Fixed a teleporting player firing the targets of anything they teleported to, not just an
info_teleport_destination or _target (also preserved this behavior for info_notnull and
misc_teleporttrain)
- Fixed Shub sometimes centerprinting her intermission text when killed by certain setups
- Fixed misc_model ignoring 'angle'/'angles' if entity didn't animate (thx Greenwood)
- Fixed deathtype messages being ignored if the obituary counted as a suicide
- Fixed ogre and vore projectile explosions doubling up the sound (thx markie)
- Fixed grey weak-explosion sprite being world-up oriented like sprites in bad retro shooters
- Fixed air_bubbles not emitting by default without a targetname (thx chloe)
- Fixed player not always being correctly skinny to hitscan attacks when invisible
- Fixed doors with light/shadowstyles updating them when not moving
- Fixed items that might not be gettable (ammo, etc) never triggering a secret, even when the
player does pick them up (terra2) (converted objerror to warning) (thx spootnik)
- the damned fgd
- Fixed switched noise1/noise2 descriptions for func_doors
- Clarified entities that have targets but don't fire them (changing wording, removing 'delay'
key) (thx spoot)
- Fixed mislabeled 'silent' spawnflag on teleport triggers
- Fixed missing 'map' and 'message' for monster_oldone
1.20: November 27th, 2022
- Added Quake2-style armor stacking/accumulation, ONLY in cases where players have more points of
a weaker armor type than what they're trying to pick up (players can amass 200+ green armor from
backpacks or playing ctsj2_mazu and be locked out of picking up better armor, and it seems unfair
to just lose the excess) (thx mazu/fw)
- Weapons
- Fixed nailgun aim angle not quite matching the crosshair (thx jugador/luigio)
- Fixed being able to fire the thunderbolt while falling into a func_void
- Fixed crash when using weaponcycle (impulse 10/12) after subtracting weapons with target_items
- Moved axe attack trace to eye height
- Monsters
- Fixed anemic fiend leap aggression - fiends feel unhinged and crazy again \o/
- Added a little random motion to vorepods (not enough to affect dodging them), so a large group
of pursuing pods don't converge into a single unquantifiable burr
- Fixed vorepods not switching to bad homing if the vore died by func_void
- Fixed rotfish not nibbling on a player treading water with eyes above the surface (thx 4LT)
- Fixed hell knights and fiends entering zombie state if they happen to die to liquid while in
their charging states (thx fw/mazu)
- Fixed not-yet-triggered monsters being removed when 'developer' is 1 but not 0 (sry fw)
- Fixed decorative crucified monster_zombie being removed in deathmatch/nomonsters
- Fixed trigger-spawned scrags disappearing if they had a "wait" or "rand" spawn delay and were
sufficiently low above a func_void
- Fixed monsters rarely still being telefragged by a spawner with "no telefrag" set
- Fixed targets that require a player as activator sometimes not firing when monsters that fire
them are killed during infighting
- Fixed coop-only crash when a monster would teleport on top of a player
- Triggers
- Added "Tunnel" spawnflag to trigger_push, which sucks players towards the center of the trigger
in the direction of travel while pushing them, so they don't get hung up on bends and corners
in wind tunnels
- 'mangle' key on box triggers and particlefields changed to 'size' because that actually makes
sense ('mangle' still supported for backwards compatibility, just no longer documented)
- 'distance' key on triggers (for specifying tolerance on facing angle) now supports degrees
instead of apparently arcane math concepts (-1 to 1 values still work in older maps)
- 'count' key on triggers once and multiple works like on relays
- monsterjump's 'include' and 'exclude' keys now work on both classname and targetname
- monsterjumps will no longer jump a patrolling monster with no enemy if the "Only if Enemy In
Front" or "Only if Enemy Below" flags are set
- 'sounds -1' will specifically mute the default doot-doot sound that still plays if printing
a message from a trigger that would otherwise be silent (thx Esrael)
- Fixed 'no touch' spawnflag on trigger_secret (will now just spawn as a target_secret instead)
- monster_boss
- Improved telefraggability of shootable Chthons
- Fixed shootable Chthons not firing targets on death (sry zigi)
- Fixed shootable Chthons crashing to console instead of infighting (sry colossus)
- Fixed entity-hack shootable Chthons going docile after being shot (jam6_scampie bug) (thx 'enry)
- monster_oldone
- Killing a Shub now ends the map by default again regardless of being in end.bsp (sm77)
- Shubs not ending the map on death is now opt-in with a spawnflag
- Fixed classic teleporttrain sometimes hanging up on geometry (sm77_rpg bug) (thx markie)
- Fixed idiot monsters spawning a frame after shub dies and photobombing the end scene
- Fixed backpack clutter not being removed in end scene
- Doors and movers
- Generally cleaned up linked door behavior, now sensible and predictable
- Added 'toggle' spawnflag to func_trains to start and stop their motion at any time
- Fixed triggering func_trains while in motion causing them to skip corners (thx 4LT)
- Fixed off-by-one movement error on func_doors_secret that use path_corners (thx ptoing)
- Fixed func_bobbing starting too early and screwing up monsters/items placed on them (thx fw)
- Fixed timing of func_bobbing slowly wandering over time
- Added flags to func_bobbing to make them continue to a low, center, or high position before
stopping
- Fixed texture state inverting on func_doors that were triggered too rapidly (thx fw)
- Fixed target_lock interaction with targeted doors (thx porglezomp)
- Fixed movers with solid -1 phantom-touching things (ctsj2_fw lightning 'pushing' bodies bug)
- Fixed touching doors with different targetnames getting linked anyway (COMPACT.bsp bars bug)
- Effects
- Added spawnflags to target_explosion and func_explobox for tarbaby and weak-to-shambler-puff
blast styles
- Added support to target_explosion and target_telefog for random offset
- Added support to air_bubbles for burst emission and random offset
- Fixed activator not counting as attacker when activating target_explosion (thx Esrael)
- Fixed ogre and vore projectiles not doing the weak puff style explosion when hitting Shamblers
despite still doing half damage
- Sigils and func_episodegate
- Episodegates now support the same .svflags field as item_sigils, and interoperate with them
- Added 'reverse' option to episodegates, to create a bmodel that disappears when the player has
the matching rune
- Support multiple runes on episodegates, which can be configured to require the player have or
not have any or all of multiple runes
- Fixed objerror on an item_sigil when using svflags instead of one of the EP* spawnflags
- Candles
- Unsynchronized and randomized their flickering
- Reversed flame normals to look nonsolid
- Sprinkled a few more polygons for roundness
- Added lavender scented version
- Fixed groups of triggerable candles sometimes toggling incompletely
- Fog
- Added support for setting and blending the skyfog cvar through fog entities
- Added support for both 0-1 and 0-255 format on fog colors
- info_teleport_target
- Added 'act on targets' spawnflag, to teleslam a dozen shamblers into one spot the easy way
- Fixed 'trigger first' spawnflag not working
- Fixed not firing its own targets when triggered (thx fw)
- Developer cheats
- impulse 100 (invoke) defaults to .use if there's no special case function
- Removed impulse 100 eprint spam
- Fixed impulse 66 (exterminate) missing trigger-spawned monsters between triggering and spawning
- Fixed impulse 104 (serverflags) printing that all of Quake was complete if you had any rune
- Fixed armor hud icon breaking after using 'give A' cheat in Fitzquake/Quakespasm for red or
yellow armor, then taking damage
- Items
- Key carry limit raised from 15 to 16
- Rerandomize the ammo amounts from backpacks if they respawn
- Fixed backpacks respawning with corrupt amounts if any ammo was converted to armor
- Fixed killing the player with target_items not letting them restart (thx mazu)
- Raised respawn particle effect on hovering items to hover height
- Tried to improve powerup and water sounds cutting off related sounds (thx zungryware)
- Added deathmatch 3 (thx porglezomp)
- Fixed visibility toggle on misc_model again (thx bal)
- Fixed respawning with carryover velocity from your last death in multiplayer (thx mazu)
- Fixed toggleable func_walls crashing very large maps, hopefully (sry mazu)
- Big pass on most .fgd definitions, adding longer and more useful descriptions (and colors)
- Fixed appearflags missing from func_bobbing in .fgd (thx echo)
- Changed "Help" in the main menu to "Copper Info" (stfu fw ok)
- Removed 'private backpacks in coop' from help screen 6
1.19: July 1, 2022
- Reverted private backpacks in coop - it just created mystery untouchable backpacks for friends, and trips
down dead ends for you to parts of the level that might already be clear
- Fixed Shamblers not firing lightning as aggressively as vanilla (thx Zungryware/Mazu)
- Fixed late-spawned suspended backpacks appearing at the wrong height (thx bal)
- Fixed precache errors caused by late-spawn notnull "use" hacks on all item classnames (thx plaw)
- Fixed key pickup print not calling it the Runekey or Keycard in worldtype 1 and 2 maps (thx fw)
- Changed target_multiprint to send to players even if activated by a monster
- Added func_plat, func_train, and func_flytrain to dev invoke cheat
- Added support for non-solid trains ("solid" "-1")
- Added support to func_door_secret for using path_corners to define the movements
- trap_shooter and trap_spikeshooter
- Added "Aim At Activator" spawnflag to shooters to match trap_lightning
- Fixed ogre grenade shooter launch speed, supports 'speed' key for override
- Fixed shooters tracking brush entities incorrectly, now matches trap_lightning
- Tweaked pixel art on the 6 Help pages by sven "ptoing" ruthner
- Changed "Help/Ordering" in the main menu to just "Help" (stfu fw ok)
1.18: November 15, 2021
- Gibbed Grunts and Ogres now drop the same ammo they do when killed regularly
- Added base-specific non-key locked door clunk sound, switched by worldspawn worldtype
- Restored monster_hell_knight being called 'Death Knight' in def/fgd/obituary messages
- Vore projectiles no longer vanish when their target enemy dies
- Added customizable intermission text to changelevel triggers, so you don't require a custom progs.dat to bore
the player with your end-of-episode lore dump. Limited to 1 page of text.
- Added 'distance' key to misc_particlefield to skip emitting particles if players are too far away
- Liquids
- Fixed taking fall damage landing in knee-high water introduced in 1.16
- Fixed taking fall damage landing in knee-high slime or lava from vanilla, for consistency
- Fixed diving sounds overriding the slime hiss and lava ... blurp? on entering those liquids
- Fixed recovering health you didn't lose when drowning with a pentagram
- Fixed being able to gib a player hard enough to blast their head through solid geo into the void
- Undid code that fixed coop centerprint in KEXQuake, because the centerprint format was itself reverted in
'major update 1'
- Fixed 'version' requirement key on entities having the opposite sign - as of 1.18 this feature actually works
as intended hooray
- Flytrains
- fixed func_flytrain never working properly unless you built it at the origin
- fixed all flytrains acting wierd if they start exactly on their first pathcorner
- Fixed visibility not toggling on triggered misc_model
1.17: August 25, 2021
- The 'KEXQuake' Update - append "in the rerelease engine" to all of the following:
- Fixed crash on level transition
- Fixed axe vanishing randomly when using the enhanced models
- Fixed wonky Vore shrinking to a point whilst walking (the solution is omitting Seven's shalrath.mdl with
added idle animation - a better fix involves new md5anims that won't happen very quickly)
- Included mapdb.json for selecting UDOB maps from the menu (you do have UDOB, don't you?)
- The next update to KEXQuake will probaly fix the coop centerprint warning when another player dies
- Added 'impulse 210' to disable autosaves on a per-map basis since they're perma-broken and take forever
- Already-very-close grenade and rocket contact damage unified so that grenades aren't slightly weaker when
shooting ogres in their extreme bounding box corners (thx fw/Markie)
- Limited how 'count -4' scales with coop player count
- Count increases by one for the first four players, for every second player above 4, and every fourth
player above 12
- Hard-capped at 10 above 20 players
- Only tested "theoretically", so we'll see how this works in 2046 when decino has a 1000-player coop
stream for Quake's 50th birthday probably
- Water
- Added sound cues when the viewpoint dips below water, one for sinking and one for splashing
- Splashing into water hard enough spawns bubbles
- Fixed bubbles sometimes floating up into new contents
- target_sound
- Added "count" flag to auto self destruct after limited uses
- Added flag to play the sound on the activating player (to make the sound follow them)
- trigger_fogblend
- Will limit spamming of stuffcmd() to only those frames where it would change the fog significantly
enough to be noticeable, to be friendlier to whatever is harmed by spamming stuffcmd()
- Fixed riding a mover through a fog trigger not snapping to the final fog values
- Mostly fixed rare occasions when leaving a fog trigger on foot does not snap to final values either
- Func_trains and func_flytrains leaving a path_corner with a 'speed' of -1 will teleport to the next corner,
then behave normally from there
- Improved the subtlety of target_screenshake with low (<0.5) strengths
- Spawning fixes
- Fixed coop telefrag protection counting player bodies and heads as players (thx spike)
- Fixed running out of spawn points in very popular Copper Deathmatch (thx solipsist)
- Fixed info_player_start_test not actually being used
- Zombies
- Zombies with both the 'lying' and 'triggered' spawnflags no longer telefrag other monsters on spawn
- Fixed zombies navigating to their old enemy's corpse if they were killed while the zombie was knocked down
- Fixed secret doors throwing precache warnings when "sounds" is set to -1
- Fixed trap_lightning not tracking its target unless set to "oneshot"
- Fixed trigger-spawned scrags and fish dropping to floor on spawn if they had a "wait" or "rand" spawn delay
- Fixed impulse-100-invoked key doors still playing the locked clank noise on touch
1.16: June 21, 2021
- SSG fire rate had been set in experimentation to 0.75 seconds in tweaking years ago and it accidentally
snuck through - reverted to vanilla rate of 0.7 (good eye aDaya)
- Enabling god mode after dying will resurrect the player in place, for lazy playtesting
- 'netname' on a trigger-spawned monster will be converted to the targetname on the spawned monster after
triggering, so monsters can be spawned and awakened with two separate trigger events without resorting to
a telebox
- Added 'style' key to several brush entities for paired light toggles/fades
- on func_wall: toggling visibility will toggle their light styles
- on func_bossgate and func_episodegate: light style will be switched on if the gates do not spawn
- on func_door: shadows will fade across the motion of the door as it opens and closes. doesn't look that
great, and is prone to breakage if you make the doors too 'interesting' (several linked doors with
different speeds). respects the 'start open' spawnflag and creatures blocking the door.
- on func_door_secret: will behave as func_door above during the second move
- using ericw-light switchable shadows on the above entities works as well, even in combination
- a target_lightstyle targeting an entity with a switched shadow will act on the shadow's lightstyle. use
this if the above pre-packaged solutions do not support your wild and crazy vision.
- please read the ericw-light documentation (https://ericwa.github.io/ericw-tools/doc/light.html) on how
switchable shadows are implemented to understand that this is a narrow and fragile feature
- trigger_counter
- Added 'eager reset' spawnflag to reset its count if not retriggered quickly enough
- Fixed custom completion messages being silenced by the 'nomessage' spawnflag, which should only
mute the countdown
- Added 'version' key to all entities to inhibit spawning on a minimum version of Copper, to gate access
to the level and fix users reporting bugs in old versions
- Fixed multiple sight sounds playing when a lying zombie is aggroed for the first time
- Fixed idle sound cutting off the sight sound on several monsters
- Fixed noclipping out of a func_void instantly turning noclip off and dropping you back in
- Fixed func_plats with overridden trigger volumes failing if the trigger doesn't spawn before the plat (thx
Juzley)
- Fixed target_lightstyle crashing when it can't find any targets instead of printing a sensible message
- Fixed screenshake resetting the view angle of intermission cameras
- 'testplayerstart' renamed to 'info_player_start_test' to be more OCD-compliant
- Renamed tasteless 'genocide' cheat code to 'exterminate'
- light_candle
- Randomly sized/oriented candles remain consistent across plays and reloads
- Fixed candles confusing their models with other models after loading a savegame if you aren't lunaran
(thx Zothique)
- Fixed candle with targetname destroying items later in the spawn order (!) (thx Markie)
- fgd & def
- Fixed 'volume' description missing from ambient sounds in .def file and 'distance' selection missing
from .fgd file - both work on all ambient sounds and always have
- Fixed oversized bounds on light_candle
- Added model/frame/skin 3d preview support to misc_model
- Fixed every instance of 'wait' requiring an integer and not a decimal
1.15: November 20, 2020
- Armor
- Reverted degrading armor changes: strong flavors no longer degrade to weak ones
- Protection percentages for yellow and red reduced from 60/80 to 50/70
- The cutoff amounts where a stronger armor can be replaced with a greater amount of a weaker one are
rounded to whole multiples of ten (100 for Y>R, 60 for G>Y, 40 for G>R)
- Ring of Shadows
- Backed off 1.1 change making invisible players entirely non-solid to ranged attacks
- Ranged attacks against invisible players are now tested against a target half as wide as a player
- Monsters
- Reverted spawns having all-around vision when idle
- Added "impulse 200" for listing all unkilled monsters and undepleted monster spawners left in the level
- Monster spawners can now have built in pre-spawn delay using 'wait' and 'rand' keyvalues
- Triggered monsters with a movedir will jump on spawn regardless of whether or not they wake up angry
(static monsters with a movedir will still jump only on awakening)
- Added 'rmovedir' for setting a monster's jump velocity relative to its facing angle
- Many keyvalues for monster hacks now properly transferred by monster spawners to spawnees: alpha, skin,
items, armortype, armorvalue, invincible_finished, invisible_finished, super_damage_finished,
radsuit_finished, and gravity (see mon_spawner_use() in monsters.qc for complete list)
- Effort has been made to keep monster-kill-based map scripting functioning when "nomonsters" is set to 1,
but it is still by no means foolproof - consider nomonsters a semi-supported tourist mode
- Exaggerated the vertical spread on Hell Knight spray a tiny bit, to increase the chance that one of the
bolts can be jumped over at middle range
- Crammed the most salient parts of the gameplay changelist into six new help screen images
- Adopted Arcane Dimensions' method of illustrating Shambler blast resistance with a weaker grey explosion
- Quake won't switch to an explosive weapon on pickup when invisible, since you can't see the viewmodel
- The Thunderbolt's beam spreads at a wider angle when arcing between two enemies who are at least waist-deep
in water or slime
- Added trap_lightning for shooting various kinds of lightning in various directions
- Added Ogre grenade option to trap_shooter/trap_spikeshooter
- Added light_candle to shut markie up
- Added a spawnflag to target_items that will divide the 'health' keyvalue by 2 on Skill 3
- func_door_secret can finally be set to move at speeds other than 50
- target_sound now supports up to five .wavs, which can be cycled or shuffled
- func_void now finds a salvation teleport spot the moment it's needed, not at map start, so spots can be
switched with target_lock
- func_void properly cleans up all of its triggers and parts if killtargeted
- misc_particlefield
- Added optional sweep effect, for base forcefield or metmon walkway effects
- Added control over timing interval
- Fixes to target_lock behavior
- toggle doors stay in whatever position they're in when locked, rather than always 'closing'
- fixed toggle doors targeted by both a target_lock and something else still being approach-activated
- shootable doors cannot be harmed when locked
- shootable buttons cannot be harmed when locked
- locking a button depresses it and makes it non-interactive, but its friends still support it
- QSS handholding
- Fixed flashes of monsters wildly lerping across the level when spawners are triggered
- Fixed player gasping at the start of every level
- Fixed Quad axe not gibbing zombies (thx fairweather/Markie)
- Fixed the respawn lockout misbehaving after a client disconnects while dead
- Fixed monster_oldone not dying when too many trigger events are stacked in one frame
- Fixed monsters waking up when triggered by a noclip or notarget player (consistency with instawake-spawning)
- Fixed func_doors that mix triggering and health still being shootable while moving after being triggered
- Fixed movers like func_door playing their move sound forever if killtargeted while in motion
- Fixed func_trains not checking target2/3/4 for valid unlocked pathcorners (thx Juzley)
- Fixed not being able to trigger a func_train to start moving early from a pathcorner with a positive wait
- Fixed a func_train that would run off the end of its path and despawn disappearing one path_corner early
- Fixed threshold for an "only below" monsterjump being +16 units and not -16 (thx 4LT)
- Fixed func_wall erasing its .alpha when toggled (thx Pinchy)
- Custom 'noise' fields on func_button and func_door_secret now precached correctly if the 'sounds' key
doesn't override them
- Monsters that trigger-spawn or activate another monster via a monsters-only trigger now bestow their
enemy to it (thx TheSolipsist)
- Fixed a shootable (ie with health) trigger-first trigger getting the wrong solid type on reactivation (thx
TheSolipsist)
- Fixed target_state debug print happening outside developer mode (thx TheSolipsist)
- Fixed target_heal ignoring monsters who didn't have a max_health field (because now they all do)
- Fixed grenades resting on a large shootable brush entity not doing damage to it when they explode
- Keys and runes will defensively auto-suspend if they would fall out of the world at map start and despawn
- copper.fgd
- fixed target_sound missing the targetname key
- removed 'mangle' from trap_shooter/trap_spikeshooter
- added 'dmg' to func_void
- fixed description of 'mangle' on trigger push implying it was a vector and not rotations
- added 'testplayerstart'
- added a sky & fog fields to worldspawn
- etc
1.11: July 15, 2020
- Additions
- Autosaves are now signaled by a subtle sound since lunaran doesn't notice autosaves happen in maps other
than his own
- monster_boss now has a 'shootable' spawnflag, for BeyondBelief/Koohoo-style damage sponge Chthons
- target_lightstyle can cycle multiple styles (set using additional noise-noise4 keyvalues)
- A func_explobox with 'health -1' cannot be harmed and will only explode if triggered
- The undocumented Nightmare-only quick-refire behavior on Ogres and Grunts has been disabled for
philosophical reasons
- Bugfixes
- Players will fall into a func_void for the same length of time regardless of whether they will be killed
or teleported to the salvation spot
- Health and ammo pickup sounds no longer cut each other off
- Angled items no longer shrink to points when too close to walls
- Fixed monsters sometimes firing in crazy vertical directions when their target is invisible
- Fixed more cases that would sometimes cause monsters to shoot behind them
- Fixed monsters choosing not to fire up or down at targets with large height differences (thx PoolboyQ)
- Threshold for an "only below" monsterjump changed from 0 units to -16 (step height)
- 'wait -1' on trigger_monsterjump now works as expected (thx McClone)
- 'delay -1' on trigger_hurt properly sets the frequency to 0 (ie framerate-dependent as fast as possible)
- Fixed trigger_hurt ALWAYS hurting monsters regardless of the NO_MONSTERS spawnflag (thx grome)
- Fixed monsters not being hurt by a trigger_hurt if they aren't moving around in it (thx grome)
- Stepping off a func_plat after it reaches top will not shorten the delay to less than 'wait' seconds
after it reached top (thx fairweather)
- copper.fgd
- Added func_detail_fence
- Reference to the health item models no longer broken
- Certain entities no longer missing difficulty spawnflags
- Fixed func_bobbing missing the 'angle' key
- misc other things i didn't note, there will always be something wrong with this goddamn file
1.1: June 20, 2020
- Cooperative
- An improved coop mode that makes death and resources more meaningful:
- Every player death triggers a 5-second respawn lockout. If all players are dead at the same time, it's
game over: no one can respawn and the level restarts.
- Killed players respawn with only starting health and ammo, but keep their weapons
- Weapons vanish on pickup, but are immediately granted (with ammo) to all players
- The Megahealth heals all other players to full when grabbed (100 E/N/H, 50 NM)
- Backpacks dropped when players die cannot be picked up by teammates
- Vanilla coop can still be played with 'coop 2'
- Monsters no longer fixate on one player at a time, and will seamlessly attack the most convenient player if
not infighting. An attack that triggers a pain animation will also now pull aggro for a while.
- Players will be pushed off a teleport destination or spawn point if they're about to be telefragged
- Func_plats don't leave right away if another player is near to give them a chance to hop on
- Friendly fire is always disabled with 'teamplay' regardless of team or pants color
- Player backpacks do not expire in coop
- Set 'timelimit N' to allow N seconds between the first player exiting and the level actually ending
- Frag count shows monster kills instead of how many of your friends you've murdered
- Added 'target_playercount' for selectively triggering entities based on number of players
- Setting an entity's 'count' keyvalue to -4 will make it use the number of players as its count
- Trigger_multiples have an 'all clients' spawnflag to make them respond to every player standing in them per
active frame instead of just the first client, for activator-specific targets like target_heal
- Gameplay
- Ranged attacks will now pass directly through a player with the Ring of Shadows without doing harm, but
melee attacks do full damage once again. Don't get cornered.
- Enemies confused by the Ring will now misfire by a wider margin
- The Thunderbolt beam now leaps from one enemy to another in a more or less straight line, doing diminishing
damage to each additional enemy, up to three times
- Fixed the strange 'three beams' bug that causes lightning attacks to be invisibly duplicated elsewhere in
the level with an unpredictable offset. (Speedrunners will have to find another way to kill the Vores
through that wall in E2M6.)
- Shambler lightning now stops at the entity it hurts rather than continuing harmlessly through to world
- Fiends are better at aiming their leap at enemies that aren't level with them, and are now threatening from
more effective angles
- Adjusted Perforator spread and movetype to stay effective at close to mid ranges but better fall behind
the Nailgun at mid to long range
- Voreball homing turn rate raised from 224 degrees/second to 270. Still dodgeable, more threatening, easier
to lead into other enemies, but harder to ignore.
- Voreballs now home in on an invisible player just as tightly as a visible one
- All explosions strong enough to gib nearby standing zombies will properly find and gib downed zombies too
(Chthon lavaballs, exploding spawns, exploboxen), not just a player's GL/RL
- Monsters lower than their targets will shift their aim from the center of their target toward the top, to
try and clear the ledge the target is standing on more effectively
- Holding +jump while underwater propels the player upward at the same speed as holding +moveup
- Grunts deal full damage to each other again
- Assets
- Converted health/ammo items from .bsp to .mdl so they're lit by the environment like weapons and powerups
- Included seven's shalrath.mdl with added idle animation
- Fixed texture alignment on Shambler lightning bolt, replaced MSPaint-scribble skin with proper texture
- Mapping
- Monsters set to 'no telefrag' that fail to spawn do not need to be retriggered now, and will try again on
their own every half second
- trigger_push
- can have its default sound overridden, for water currents or etc
- ADD_VELOCITY mode is no longer framerate dependent
- ADD_VELOCITY can limit the player's maximum speed so it doesn't keep accelerating you to infinity
- pushes gibs now
- Added target_lightstyle: sets any style to any string at any time. Much less limited than the crummy
'oldstyle' system.
- trigger_inventory deprecated, since the same functionality is better accomplished with a target_items and
an ALL_CLIENTS trigger. the trigger_inventory spawnfunction will now create the above setup for backwards
compatibility and print a warning in developer mode.
- Added CRUSHER spawnflag to func_door
- Added misc_particlefield for a trigger brush-based version of misc_particlefield_box
- Added trigger_once_box
- Added 'mangle' keyvalue to target_meat_fireworks. still defaults to up if left blank.
- Added 'rand' keyvalue to target_explosion/telefog/meat for randomly staggering them
- Added support to target_state for < > <= >= comparisons
- Moved checks for untargeted trigger-spawned monsters to "developer 1" mode only, to reduce pressure on
SUB_VerifyTriggerable
- Removed KILL_LAST trigger_relay spawnflag from copper.def/fgd (was never implemented, flag did nothing)
- Removed CHANGE_SKIN func_door spawnflag as well (was default behavior, flag did nothing)
- fixes in copper.fgd:
- delay not showing up on all entities with targets
- renamed incorrect 'teleport fog' spawnflag on monsters to 'no teleport fog'
- trigger_secret_box was duplicate target_secret
- func_explobox was brush class named misc_explobox2
- func_flytrain was point class
- target_setskill was duplicate pointclass named trigger_setskill
- target_changelevel was named trigger_changelevel
- targets/targetname/angle not showing up on func_button or path_corner
- targets/targetname being valid properties of trigger_hurt, trigger_monsterjump, trigger_push, and
misc_meat_fireworks
- removed unhelpful direct pastes of the 'nmmonmnomasdfjketc' light style strings
- Bugs
- Hacked info_nulls that call barrel_explode no longer explode at the origin, and can be triggered more than
once to match vanilla again
- Fixed trigger_multiple/trigger_once/func_wall notnull maphacks causing disallowed-precache errors; sound and
model precaches are now wrapped in a guard function in many places to prevent a late precache from killing
the server
- Fixed 'players only' on target_heal causing it to heal nobody
- Eyeballs no longer visible when two players are looking through the same intermission camera
- Fixed keys being duped in coop when dying while holding some
- Suiciding at the console in coop now properly transfers keys to other players
- Fixed gnarly coop-only bug that caused zombies that spawn lying down to skip the standing animation and be
nonsolid and invincible forever (searching for new targets when they shouldn't)
- Fixed telefragging another player leaving behind a standing ghost
- Fixed nailgun not respecting 'sv_aim' (supernailgun left alone)
- Firing the supernailgun with only 1 nail left will not fire the lesser nailgun if the player doesn't have
one - likewise for the super shotgun (vanilla bug)
- Fixed grunts not lagging their shots if their target is standing still on a moving brushmodel (vanilla bug)
- Bounds and origin of Rotfish adjusted vertically by 8 units to help them get stuck less (thx ijed)
- Fixed trains firing their pathcorner targets not setting an activator; will use whatever player is touching
the train at that moment, and default to player 1 if none are
- Fixed monsters turning east when stopping at the last pathcorner if the corner specifies no angle
- Fixed view not fading to the fadecolor if your dead body or head gib falls into a func_void after you die
- Made func_void plunge triggers 64 units thicker on z by default to make it harder to clear the whole thing in
one hostframe if already falling very fast
- Fixed func_void with a custom deathtype string not deducting a frag from players who fall in
- -1 converts to 0 for func_void 'lip' and 'delay'
- Fixed -1 not universally signalling 0 for the 'dmg' keyvalue (a func_void with a 'dmg' of -1 no longer gives
the player +1 HP)
- Fixed being able to immediately fire a weapon after picking one up or switching due to being out of ammo,
regardless of firing rate of previous weapon
- Fixed -1 not converting to 0 for 'distance' on doors and buttons
- Fixed delay, deathtype, and message not being copied to triggered monsters from their original
- Fixed sigils overriding custom .message (zendar/bakstein start rune)
- Fixed missing 'spikeshooter_use' function (1000cuts crash)
- Bubbles now disappear when crossing any two content types, not when outside water, to emulate weird vanilla
behavior again (1000cuts health pool bubbs)
- Changed trigger message print behavior back to id1, ie fire targets and print messages both after 'delay'
(jumbled/failed message prints in dm456sp)
- Fixed monsters that were supposed to spawn on doors sometimes being stuck embedded slightly in them
(dm456sp ogre platform over the nailgun)
- func_doors with noise1/noise2 override sounds set now use them regardless of the 'sounds' value (dm456sp red
plumber's tie prop making a clunking noise)
- Fixed teleporting a monster to a misc_teleporttrain screwing up the train's path and triggering the train's
targets (SMEJ fix)
- Fixed misc_teleporttrain starting at its second pathcorner instead of its first (SMEJ fix)
- Fixed trap_spikeshooter still being stupid with delay (spawning spikes at the origin, not firing with the
right timing, etc)
- Fixed brushwork func_explobox simply never appearing
- Fixed misc_models with pos1 animations but no targetname sometimes refusing to animate
- Fixed multiple linked key doors still playing the locked noise on touch after being opened
- Fixed a trigger_relay with RANDOM not respecting its 'target2', 'target3', or 'target4'
- Fixed trigger_hurt never hurting monsters regardless of the NO_MONSTERS spawnflag
- Fixed a target_items that changes your current weapon's ammo not updating the hud until you swap weapons
- Fixed dog pain animation always being instantly resettable (vanilla bug)
- Fixed ogre idle sound sometimes immediately canceling its wakeup bark (vanilla bug)
1.05: Jul 16, 2019
- Enforcer laser damage reduced from 15 to 12, to help compensate for their more aggressive firing pattern
- PAK0.PAK renamed to pak0.pak to play nice with case-sensitive operating systems
- Shamblers no longer fire lightning at cockeyed angles when their target is invisible
- Downed zombies who've had doors or crushers invade their personal space no longer become non-solid (id1 bug)
- Projectiles no longer have a random chance of nullifying a Fiend's leap in midair (id1 bug)
- The land-on-head protection delay of Fiends, Dogs, and Spawns will no longer cause them to fail to damage a
player on impact if they've just glanced off of something else
- False positives related to the Ring of Shadows in monster attack checks fixed, so monsters always infer the
player's presence from his real origin while always trying to attack his fake one
- Weapon pickups fire their targets the first time they're touched in Coop, then forget them, so maps which
fire important triggers from weapon pickups aren't broken if everyone already has the weapon
- Chthon should be less likely to instantly snipe the player when they teleport the moment a lavaball is thrown
- Quad axe no longer corrupts monster flags or sends Shub flying (thanks to Ian 'iw' Walshaw for these fixes)
- func_trains now require a spawnflag to inherit speed from their pathcorners, and the keyvalue for setting
default corner wait time has changed from 'wait' to 'pausetime' to avoid conflicts with stale 'wait' keys
on various id and custom maps (e3m3, e4m5, k1m3) (thanks again to iw for running interference on this
issue and patching all my mistakes)
- Added a developer warning when a trigger spawned monster can't be triggered by anything (more thanks to iw)
- Player can now jump while standing in the same depth of water as /id1 (iw again)
- Door wait times are no longer set improperly in the -1 case (E3M7 zombie pit platform) (iw)
- Intentionally prevented use of boss_death10 killcount hack, as it was only ever used to balance the rotfish
killcount bug, which was already fixed (iw)
- Trigger_relay no longer objerror()s if not targeted (is a warning in Fitz+ but an error in stock engines,
which caused them to crash e1m5 & e1m6) (iw)
- Items which are targeted and killtargeted by the same entity no longer fail to spawn (E4M2 'fake' items) (iw)
- Fixed some monsters (Enforcers, Scrags) being able to see and attack the player while in water, caused
by arcane conditional failures in engine trace behavior. is this the last bug in traceline2? only the
shadow knows ... (found by iw)
- Spikeshooters that are triggered more frequently than their 'delay' no longer fail to ever fire (iw)
- Changed late monster/secret stat updates to MSG_ALL (iw)
- Monsters do their drop to floor test late enough to be properly positioned on movers that don't start at
their zero point, important if the movers start in lava/slime (iw for president)
- Fixed runaway loop error in bbin1 caused by item spawn code (iw is now my husband)
- Biosuit lava protection max depth changed to 16 units (used to be 24, which seemed too deep, and the above
water jump fix made it grow to 28)
- 'light_lev is not a field' spam in developer mode silenced
- Powerup sounds are now always precached so sounds aren't broken when using powerup impulses (registered
Quake has fewer total sounds in it than the original .exe's MAX_SOUNDS limit, and memory is free right?)
- Monster backpacks make the original ammo pickup sound, and the extended pickup noise is only for pre-placed
item_backpacks
- Doors with a +0/+a animated texture don't desync animation state when blocked or triggered repeatedly
- Fog change entities now work for all clients, not just player 1
- Gibbing a fish no longer makes bubbles
- dev_trigger and dev_invoke cheats no longer work in multiplayer
- Added 'trigger_inventory' to address the fact that a trigger_multiple targeting a target_items to test for
a player's stats/inventory only works for the first client due to default trigger touch logic
- Numerous .fgd errors fixed (monster spawnflags, etc) (thanks fairweather)
- Fixed typo in Chthon death notification
1.0: Jun 20, 2019