Alkaline was originally built upon Rubicon 2 codebase. But over our development period, a great deal of code ended up being changed. Lots of new features, monsters, items, powerups, bug corrections... So it grew up into its own thing. We've borrowed ideas (or entire features altogether) from all the great mods and mod frameworks of our time. Copper, Arcane Dimensions, progs_dump, Zerstorer, Malice, Rubicon Rumble Pack, Quoth... you name it. Also we've got a bunch of exclusive features. Our main focus was on things that we felt would be nice to have in all kinds of base-themed maps.
We've decided to not change anything gameplay-related. All original weapons, monsters and items behave almost exactly the way you've known and loved for the last 25 years. We think it's laudable what mods like Copper or AD have done to improve balance and gameplay, but our intention was to expand over the solid gameplay foundations that vanilla Quake laid, and add a load of new features and mapping quality-of-life enhancements on top of it.
We'll do a more in-depth walkthrough into Alkaline's features, so any mapper can take it as a framework for their own map or mod. We've decided to go through everything that's been changed from vanilla instead of pure Rubicon 2, for an easier understanding.
Monsters have a multitude of new features.
By setting the Trigger Spawned spawnflag, the monster will only show up after it's been triggered. The following spawnflags can be used together with it:
Checking the Monster spawner flag turns this entity into a monster spawner, that creates a new instance of the monster whenever it's triggered. They always spawn angry, and have a telefrag check, so they may wait for a few seconds until they have room to spawn. The spawned monsters inherit all of the spawner entity's target* fields, so you can use it to add to a counter when they're killed for example. If you want it to spawn monsters in a defined time interval, you can set it up in conjunction with a trigger_repeat.
The following keys are related to it:
The path_angry point entity makes monsters follow a path automatically when angered for the first time, either by sight or trigger. They'll always follow the path up to its end, where they return to their normal movement behavior. While following this path, they can still see and attack you normally. It's useful when you need a monster to reliably come out of somewhere or run through complex pathways when angered, without randomly bumping into things while trying to get to you.
It works the same way as a path_corner, as in, you chain path_angry entities by their target/targetname fields to form a path, and make the monster target the first one - but it'll only act when the monster get angered or triggered.
Note that the chained path_angry entities must have an endpoint that doesn't target any other if you want the monster to get out of its path-chasing behavior. Also flying monsters don't work with it yet.
The target_startpath point entity makes a monster start following a path upon being triggered. Works with both path_corner and path_angry. target is the monster's name, and target2 is the destination path.
If 'target2' is a path_corner, the monster will start walking towards it only when not angry. If it's a path_angry, on the other hand, it'll only do it while angry at something.
You can set up more than one target_setpath entity for a monster, if you need both walking/angry pathing situations to happen at different times. Or you can even have more than one of the same path type, if you want to route it to a different direction depending on some event.
Point entity that makes target monster angry at target2 when triggered.
By default, the infighting doesn't start mutually, that is, target2 monster will only get mad back at target after it's been attacked. If you want to make them angry at each other instantly, you can set the spawnflag Mutual hate.
Last, but not least, here's the list of the baddies that come with Alkaline. The other non-base vanilla monsters not mentioned here behave and look the same, and they're all still available to use.
All of the original monsters whose visuals/sounds were modified (Death Knight, Scrag, Ogre and Fiend), are also available in their original versions, selectable through the spawnflag Original version.
Poor scientists that have nothing to do with the Ranger's struggles through eldridtch dimensions. They won't fight, just keep doing their jobs, or run aimlessly in panic. Select that behaviour through the spawnflag Ignore player.
Set wait and angle on path_corners for them to stop and work.
By default they won't count into total monster count, unless you set Count After Spawn flag.
By activating the Health trigger spawnflag, the monster will fire target2, target3 and target4 when it takes 25%, 50% and 75% damage, respectively. Only target will be fired immediately when the monster dies in this case.
You don't have to assign targets to each health trigger level, just the ones you need. So, for example, you can ignore target2 and target3 if you only need a trigger to fire at 75% damage. Also, all assigned targets WILL fire when their thresholds have passed, even if they happen at the same frame - so if you gib or 1-hit-kill an enemy for example, all its remaining targets will be fired at the same time.
Alkaline has some new items and item features.
Deployed through the point entity item_circuitboard, the circuitboard (or rather the "17-centimeter Fromitz board") is a completely customizable dummy item that does nothing on its own, nor adds anything to your inventory. It merely fires its targets when picked up. But don't be fooled by its simplicity, because it's where lies all its power. You can use it to trigger any event, say, spreading various circuitboards throughout your map, all targeting the same trigger_counter, that unlocks a door or a super secret for example. Almost every map in Alkaline used it in some way.
You can set a custom model (mdl key), pickup sound file (noise key), and pickup name (netname key). By default the pickup text will be shown at the top of the screen like any other item, but if you want to suppress that and just centerprint a message instead, you can set the No pickup text flag and define the message in the message field.
The new awesome powerup in Alkaline. Gives you quad-damage, invincibility, and a mega health boost, all in one.
This well-known powerup is available as well. Comes in two versions:
Gives 5 armor points. It adds up to the player's current armor if it has one, and can go up to 25 points more than the armor type's maximum points. So, up to 125 for green armor, 175 for yellow, and 225 for red. If the player doesn't have any armor, it'll always count as green.
Alkaline borrows the custom key system from progs_dump. You can create a key using the item_key_custom entity, and define a custom model, skin, sound and name. Then on any door you can set the name of the key that will open it. For more details, please refer to the in-editor documentation.
Also from progs_dump comes the trigger_usekey brush entity. You can use it to "consume" a key from the player's inventory (custom or not) and trigger some event - like a door would, but with no need for a door. It can be used by a player touching it, or by triggering.
Setting an item's ritem key to 1 makes it respawns after a few seconds, customizable through the respawndelay key. You also can set the maximum number of respawns through respawncount.
By default, the item makes the traditional teleport sound/fog effect when respawning, but you can change it to the more discreet deathmatch-style respawn effect, through the spawnflag Spawn with DM effects.
Like monsters, items also support trigger-spawning. Just set the Trigger spawned flag and it'll only show up after triggered. You can make it spawn silently using the Spawn silent flag.
The Suspended in air spawnflag makes the item stay in place and never drop to the floor, so it hovers in midair. Quoting Lunaran in a similar Copper feature:
It's a useful hackaround for items that insist on falling out of the world and vanishing because they don't like where you placed them. This also provides a handy solution to the irritating problem that a monster and an item cannot overlap without pushing the item out of the world. Even if items don't fall out of the world when you test your map in your Quake engine port of choice, inconsistent droptofloor() results are not unheard of across ports. Consider it best practice to always mark as SUSPENDED any progression-critical items like keys, or any other item that fires a necessary targetname, even when placed on the ground.
The Don't start dropped flag, on the other hand, makes the item to still be affected by gravity, but it will not spawn already dropped the floor directly below it (I.E. it won't run droptofloor() upon spawn). This way the item will fall to the floor only after it has been spawned.
By default, Alkaline uses the higher-detail BSP item box models from Rubicon Rumble Pack, but you also have the option to use MDL item boxes by Markie - with proper fullbright parts so you can still see them in the dark. You can select it through the itemstyle key, either on worldspawn to set it globally, or directly on a per-entity basis.
In your arsenal, some old acquaintances have made a return in Alkaline, but there's new stuff too.
The Laser Cannon and the Plasma Rifle are placed in the same slot as the Lightning Gun, and alternate between them when you press their key, but can be selected directly through impulses 225 and 227, respectively, so you can bind them to an individual key if you like. Also the Lightning Gun can be directly selected with the impulse code 228 without cycling through the other energy weapons.
The same happens to the Chainsaw, which sits along with the Axe, but can be directly selected through impulse 224.
You can define a completely custom loadout at map start using the take_weapons and give_weapons worldspawn keys, as well as each of the ammo types.
First, Alkaline will remove the ones checked in take_weapons, then give the ones selected in give_weapons. So, if your map would begin with a "shotgun start" (I.E. default inventory), taking away the axe and the shotgun will make the player start with no weapons at all.
Setting any of the ammo_* keys will override the current amount with the defined one.
Also, setting the reset_items worldspawn key to 1 will force a "shotgun start" on your map regardless of inventory/stats coming from a previous map. Note that the inventory reset is made before applying take/give weapons.
Since you have the option to remove the axe and the shotgun from your inventory, we've added them as traditional weapon pickups as well. Deploy them through the weapon_axe and weapon_shotgun point entities.
Acts the same way as the take_weapons worldspawn key, but can be used mid-level. Trigger it to remove the selected weapons from the activating player.
You can override the default particle effect when shot for every shootable entity, including monsters, breakables, buttons and doors. For that, you must manually add a bloodtype key to it, and give it one of the following values:
In Alkaline we've gone great lengths to allow advanced scripting and events.
Following Copper's fashion, Alkaline also supports the target2/target3/target4 keys but not multiple targetnames, as it increases code complexity and stack usage multi-fold. Having only multiple targets is usually enough to cover most cases, and you can always set up some relays if necessary.
An exception is made for some entities that must control or modify other entities that could have their behavior changed when given a targetname, so they can also target a targetname2 field. Note that the targetname2 field isn't displayed on any entity by default, so you must add it manually when needed. The following entities have that ability:
One of the first changes to triggers that every mod usually do is allow them to be trigger spawned, and with Alkaline that wouldn't be different. Set is_waiting to 1, and the trigger won't be active until you target it. It works with all touchable trigger brush entities.
trigger_once and trigger_multiple can be set to be activated by monsters as well as players, so you can set them to fall into traps for example.
Every entity that can centerprint a message may be set to broadcast it to all connected players. Good for when you have some map-wide event that you want to communicate in a co-op game for example. Just set the spawnflag message all players on the messaging entity.
The trigger_repeat entity is a point entity that fires its targets repeatedly on a defined interval after activated. Can keep firing indefinitely or for a limited number of times. Targeting it again stops the firing.
The counter can be optionally not be reset after triggering it again (spawnflag 1), so it functions more like a pause/unpause.
The trigger_monsterjump entity comes with some new features. You have now a simple monster-class-based filter, so you can let only a single monster class to be affected by it, or exclude a specific one from it.
The trigger_hurt brush entity works the same as before, but has 2 new features:
The new target_hurt entity is a point version of that. It hurts any entity activating it, or the entities defined in its target-target4 fields.
Stealth mode can be set on both trigger_teleport (when teleporting out) and info_teleport_destination (when teleporting in).
A single trigger_teleport can target multiple info_teleport_destination entities with the same targetname.
There are 3 ways in which the trigger can deal with that:
Refer to the in-editor documentation for both trigger_teleport and info_teleport_destination for more info.
Mapvars are miscellaneous flags (only true/false values) that can be freely used by the mapper whose values persist across level changes. Useful to track completion progress on mapjams for example. You have a total of 44 flags availabe to use, each identified by a number in the 1-44 range.
You can access them through 2 point entities:
Also, you can define a mapvar to be enabled automatically in trigger_changelevel entities when the player goes through it.
You can have multiple player start spots in your map. trigger_changelevel entities accept a count key, which on the next map will try to direct the player to an info_player_start spot with a matching count value. That's also true for coop starts.
The good old func_door in Alkaline has been completely revamped.
You have various ways of setting the door's movement:
Note that those methods are mutually exclusive, so if you use one of those, remember to remove the keys relative to the others, or else you might have some unexpected behaviour.
You can now set a different closing speed for the door with the speed2 key. If unset, it'll use the same value as speed.
With this feature you can create more complex multi-entity doors with parts that move independently, but still act like a single door. You can set delayed movement for a door part with the delay key, and the timings are automatically reverted when closing, which means that the first door entity to open will be the last to close.
delay2 sets an additional delay for when the door closes. Useful if you need to wait for another door part to set in position before moving.
For the delayed movement feature to work as intended, a great deal of work was put into making sure they'll link correctly. By default, all doors whose bounding boxes touch or intersect will belong to a single group, and will always move at the same time. But now you also have the option to manually group them through the groupname key. Doors with this field set will ignore the touching algorithm for linking, and will only group with other doors that have the same groupname, regardless of where they're positioned in the map.
That also means that the old-time bug with toggling dual-doors was corrected, so you don't need to set "don't link" anymore for toggling doors.
It's recommended that you set the same key values on all doors in the group, like targets, wait, messages, keys, except those specific for each door part, like angle, distance, speed, delay, sound, etc.
You can set completely custom sounds to doors. They'll override the default sounds selected through the sounds key (either on the door itself or on worldspawn).
Due to the new delayed movement features, the new spawnflag Sound during delay was added. When set, it'll make this specific door part to start its move sound at the instant the whole group starts moving, and only play the stop sound when all doors finished moving. This way you're able to set a single door in the group to sound during the whole movement sequence, and avoid multiple start/stop sounds overlapping for each entity.
You can set a door to demand a custom key through the keyname field. The keyname must match the one in a item_key_custom entity. Refer to the item_key_custom documentation in-editor for more details.
There are two other key-related options:
The target_setdoor point entity can directly command a door to open or close, regardless of which state it's in. The style key sets the command issued to the targeted door when this entity is triggered. Note that doors with a wait time set will still close again normally afterwards.
If you need to command a door and still want it to retain its "touch to open" behavior, you can make the setdoor entity target the door's targetname2 field..
The door's trigger field is the built-in trigger that makes the door open when something gets close to it. Alkaline gives you some more control over how it's created, or allows to make a completely custom one.
The default door trigger field size in Quake extends 60 units beyond the whole door's bounding box in both X and Y directions. Through the spawnflags Expanded/reduced trigger field, you can set the trigger field to be expanded by another 24u, or reduced by 52u, in either X or Y direction. If you set both expand and reduce at the same time, they'll sum up, so you'll get a smaller reduction of 28u.
Also, you have the option of using the trigger_doortriggerfield brush entity. With it you can define a custom trigger field. Just make it target a door, and it'll override the built-in one.
Last but not least, standing monsters won't open doors anymore, so you can safely put an enemy ambushing behind one without it staying open.
Besides the traditional func_plat, we've added DoE's func_new_plat entity, which is a lot more flexible and feature-packed.
You can select between multiple plat modes through its spawn flags:
It's a plat that starts at the top and when triggered, goes down, waits, then comes back up. The health field sets the number of seconds to wait (default 5)
Creates a plat that will change between the top and bottom each time it is triggered.
Makes an elevator plat. You can have as many levels as you want but they must be all the same distance away. Use the func_elvtr_button entity as the trigger. Each floor must have its own panel with func_elvtr_buttons for the elevator to move correctly.
"Elevator Start at Top" is an optional flag for elevators. It just tells the elevator that it's position is the top floor. (Default is the bottom floor) USE THIS ONLY WITH ELEVATORS!
'Plat2' is a fixed version of the original plat. If you want the plat to start at the bottom and move to the top on demand, use a negative height. That will tell Quake to lower the plat at spawn time. Always place this plat type in the top position when making the map. This will ensure correct lighting, hopefully. If a plat2 is the target of a trigger, it will be disabled until it has been triggered. Delay is the wait before the plat returns to original position.
The following features are present in both func_plat and func_new_plat:
func_train have got some more tricks.
The flags above are mutually exclusive and will cause an objerror when selected simultaneously.
misc_modeltrain works the same way as a func_train, but for using with external models.
The model can smoothly orient itself towards the next path_corner when moving. The turning speed is automatic and based on the movement speed, but you can set a multiplier for the turning speed with the multiplier key. Set it to -1 to turn instantly.
You can define two different frame ranges and animation speeds, for when the model is stopped and moving. If you don't need different stopped/moving animations, only setting first_frame/last_frame/frtime is enough. If you don't need any animation at all, just set first_frame to the desired frame and all other fields can go blank.
Make sure to check the in-editor documentation for more details on other specific options.
Alkaline has a state system somewhat similar to AD's "estate" system and Copper's target_lock entity. With it you can disable/enable entities at will, giving you greater control over complex map scripting and events. Entity behaviour when disabled is class-dependant.
You set an entity's state using the target_setstate point entity. You can directly disable, enable, or toggle the state. Target entities can start the map already disabled through the spawnflag Targets start disabled.
If you need to target an entity that has its behaviour changed when given a targetname (like func_door or trigger_teleport), you can make the target_setstate target the entity's targetname2 field.
This system is integrated with dormant triggers (is_waiting key), meaning that you can "wake" a trigger not only by triggering it, but also by using a target_setstate on it.
The entity's state is kept under the estate field, which 0 meaning enabled/normal operation, and 1 disabled. So for triggers, you're able make them start off by to directly setting this value to 1. You cannot do that to doors nor buttons though, in those cases you need to use a target_setstate with "start disabled" set.
A lot of entities support enabling/disabling:
When disabled, all trigger_* brush entities get their touch action turned off. This includes self-sufficient entities that don't need to target anything, like fog triggers, ladders, monsterjumps, changelevels, etc.
Also, any entity that fire their targets won't do it while disabled (like trigger_relay), and a trigger_counter won't get its use count increased.
Like in Copper, disabling a door makes it not respond to touches or triggers, and disables its trigger field.
Doors will also close immediately when disabled. Toggling doors or with wait -1 set won't close by default, but you can change that behaviour using the spawnflag Close all doors. In this case, if re-enabled, the door will return to the position it was before disabling.
Also similar to Copper, buttons depress themselves when disabled and cannot be activated.
If the button have a wait -1 value (that is, it's a press-once button), when re-enabled it'll reset back to its un-pressed state regardless if it had been activated before. You can change that using the spawnflag Don't reset button state, in which case it'll revert to its previous state when re-enabled.
Alkaline has some very advanced scripting through some specialized entites.
This point entity relays only if a given condition evaluates to true, unleashing ultimate scripting capabilites. You can test various fields on the entity targeted by the include field (you can target another entity's targetname2 as well). If you let the include field empty, it'll test against the activating entity instead, be it a player, a monster or anything else - see trigger_everything below for more details.
You can, for example, relay a trigger only if a door or plat is in a certain position, or if a targeted enemy is alive or dead or below a certain health amount, or if the player is carrying some specific weapon or item, or if the activator is a certain type of weapon projectile - the possibilites are almost endless.
In case you're filtering to activate only in case if it's a specific weapon projectile (like a grenade for example), you can make the targets fire with the activating entity's owner as the activator with the spawnflag Relay activator as owner - say, if the trigger is activated by a player's grenade, it'll fire with the player as activator, instead of the grenade itself.
There are various fields available to test, selectable through the style key. They all fall into three field types (float, flag and string), and for each there's a set of operations available to evaluate, selectable through the weapon key.
You can set the trigger to fire if the condition evaluates to false by activating the spawnflag Trigger if false. It'll never fire if the entity targeted by include isn't found, regardless of this spawnflag.
If you need to evaluate more than one condition, you can chain multiple filters in a row. Also, the state of the last evaluation is stored in this entity's state field (1 for fired, 0 for not fired).
A no-holds-barred touchable solid trigger. Everything triggers it. Players, monsters, projectiles, gibs, even other solid entities like doors and plats.
It can only fire targets matching its target field. Due to its "fire-all" nature, it doesn't have support for the 'target2-4' fields, neither 'message' nor 'killtarget'. Useful when used in conjunction with the trigger_filter point entity to filter out its firing.
By default it'll fire for each and every registered touch, even if simultaneous. If given a wait value, it'll act like a trigger_multiple, where a single activation puts it on hold for wait seconds. If the target is a trigger_filter, you can set it to wait only if the filter evaluates to true through the spawnflag Wait only if trigger_filter evaluates to true.
Changes the targeted entity's count field. Targets both targetname and targetname2 fields. Can be used with a trigger_filter to dinamically change its float comparing value, or to reset/change a trigger_counter's current use count.
You can either replace the current value with a new one, or add to/subtract from it (using a positive or negative count), by selecting into the style field.
func_shadow is a brush entity with a simple function: cast shadows. It's not visible nor clips nor does anything else ingame. In order for it to work correctly you need to either set a _shadow 1 or a _switchableshadow 1 key in it.
It's useful if you need to simulate a shadow being cast by a misc_model for example, or create more complex lighting schemes using switchable shadows (more on that below).
Alkaline has full-on support for switchable shadows if your compiling tools can handle it. Every brush entity, except triggers and func_detail_* ones, can have togglable shadows by adding a _switchableshadow 1 key to it.
func_door, func_breakable and toggle_visiblewall already have built-in support for that, so all you need to do is add the key for it to work automatically. Also, any killtargeted entity (like a func_wall) with a switchable shadow will have it removed automatically.
For other entity classes, like func_shadow, you need to set up a misc_shadowcontroller point entity to control their switchable shadows. That's how you do it:
Currently, ericw's LIGHT tool supports switchable shadows only when the map isn't using bounce lighting. That's been already corrected in development versions however, and should be out in its next release.
Lights in Alkaline have some new notable features.
A feature brought over from progs_dump, animated lights (flickering/pulsing) can now be toggled. Give it a targetname as usual, but set the light style into the style2 key. Then it'll toggle like any other light.
You can also set the light to fade it in/out when toggling by setting the spawnflag Fade in/out, and control the fading time with the speed key. Note that this effect won't work when toggling animated lights.
The target_lightstyle point entity can modify a light's style. It's the same one from Copper, so quoting its docs directly:
target_lightstyle gives the mapper direct control over the pattern of any of the 64 lightstyles when triggered. Styles 1-31 are the preset lightstyles, and 32-64 are assigned by the compiler to triggered lights, and both can be overridden. Set style to the lightstyle you want to override, and set message to the brightness pattern you want to set it to. If style is not set, and this entity targets any triggerable lights, it sets the brightness pattern of those lights when triggered instead. (Note that targeting anything at a light makes it a triggerable light with its own style automatically.) This is compatible with any Quake map compiler, because light.exe only cares about the style number - the pattern is only applied in-game.
Setting style to -1 will override the style of all static, unstyled lights in the level (style 0).
Multiple additional stylestrings can be specified in order using the noise and noise1-noise4 keyvalues. The target_lightstyle will cycle to the next unused one each time it is triggered.
Quake's light patterns are sequences of characters where each letter represents a brightness from 0-200% lasting 0.1 seconds, allowing long animations to be packed into an editable string. a represents total darkness, m is normal brightness, and z is double brightness. For example, the painful disco strobe in the Fiend-filled corridor in E3M5, The Wind Tunnels, is "mamamamamama". Implementing a standard on/off toggle would use a message of "a" and a noise of "m" or "z".
There are 2 new decorative light entities.
Alkaline comes with an improved version of Copper's dynamic fog system.
You can set a fog value into all player start entities, teleport destinations, and intermission cameras, so the fog will change instantly to the set value when a player makes use of them. This way, the player's view can move to a different fog zone without having to pass through a fog trigger.
An important note from Copper about this fog system:
The fog keyvalue that goes on Worldspawn doesn't interact with this system. It is a feature of various engines (such as those in the Fitzquake family) and isn't interpreted by game code. The reason for this is that it's interpreted as four values (one for density and three for color) and set by the engine at load time. The numeric fields that are passed on to the game code (ie Copper), however, can only be one value (a float) or three (a vector). If you set fog in your world with a fog parameter on worldspawn, and never bother with fog_color and fog_density on any entities, you'll get the usual static global fog the way it's always worked. Color and density on a player start will be evaluated on the first frame of gameplay, and will override any fog set by the engine.
Setting the fog density to -1 will disable the fog.
Using the trigger_fogblend brush entity, you can smoothly blend between two fog values as the player moves across the trigger. It's not temporal-based, instead it's based on how far the player moves within it.
This way, you can place one along a corridor for example, and the fog will seamlessly change as the player walks.
The trigger_fog brush entity blends the player's current fog into another when touched, within a customizable transition time.
And the target_fogblend point entity toggles the activating player's fog between two different settings, also with a custom transition time. The first activation makes it blend in from the current fog, and the subsequent ones make it toggle between two values. You can optionally set the fog to be applied to all players.
All entities that change the fog can change skyfog density as well, with the key skyfog_density/skyfog_density2. The same transitions to the usual fog apply to skyfog.
If you want to disable skyfog, set the field to -1. Leaving it unset, or set to 0, will keep the skyfog unchanged. In case you want to change only the skyfog density and not change the standard fog, set fog_density to 0.
A func_breakable is a visible object that can be destroyed by shooting it. If it has a targetname, it will only be destroyed by targeting it.
You have 4 debris variations, each with a different debris model and accompanying sound effect (style key). You can also customize which particle effect will be spawned when the breakable get shot (bloodtype key).
There are 2 togglable brush entities:
You can add any custom model to your map through the misc_model entity to use as props or decoration. Targeting the entity toggles its visibility.
Any frame or skin can be selected. If the model doesn't animate automatically from a frame group, you can manually define a frame range and animation speed.
The model's bounding box can be totally customized by setting its size and center offset. Also it can be set to be affected by gravity and/or be solid.
Alkaline comes with the well-known Hipnotic's rotate entities. You can refer to czg's in-depth tutorial over Preach's Blog on how to use them.
Besides the usual misc_explobox point entities, there's a func_explobox brush entity that works exactly the same way but can be made in any shape.
Both misc_explobox and func_explobox fire their targets when exploding, and can be blown up remotely by triggering them.
The func_laser brush entity creates a togglable laser with a faint flickering alpha effect. Hurts to touch, can be used to block players. We recommend to use it with a fullbright-colored texture for better looks.
trigger_ladder creates an invisible ladder entity. When player is touching it, he can climb by pushing "jump".
You can create entities that gently moves back and forth in any direction. func_bob is a brush entity, and misc_bob is a point entity that uses external models.
The mod comes with various options for you to play your custom sounds.
Use the play_sound_triggered to plays an one-off sound when triggered.
The play_sound entity plays a sound on a periodic/random basis, like thunder effects for example. Not recommended for ambient sounds.
The ambient_general point entity lets you place a customized ambient sound. For it to work, make sure the sound file contains cue points for looping. Can be given customized volume and attenuation settings.
Also, the built-in ambient_* entities now can have their default volume/attenuations changed as well.
The misc_changemusic entity changes the current map's music track number to the one specified in the sounds field when triggered. If you set the track to 1, the music will stop.
The trigger_void brush entity removes from the world everything that touches it, such as monsters, items, gibs and weapon projectiles. Players get instantly killed, even while wearing the Pentagram or the Trifecta.
Also, the func_wall can be made non-solid, making it similar to a targetable func_illusionary.
You can change the gravity in two ways:
target_explosion creates explosions on demand, with the same appearance as a rocket/grenade blast. Can explode once on triggering, or be set to fire off on a periodic basis.
Damage can be customized - for reference, an Ogre's grenade blast does 40 damage, while a player's rocket hit deals 120 damage. Set it to 0 for a purely cosmetic effect.
The misc_particlefield brush entity makes dots appear continuously within its bounds. Trigger to toggle on/off.
You can create lightning trails using the misc_lightning_start, misc_lightning_relay, and misc_lightning_end point entities.
The trail always must start with a misc_lightning_start and end with a misc_lightning_end, but you can place some misc_lightning_relay between those if you need the trail to go into a different direction midway.
target_screenshake, from Copper:
Shakes the screen when triggered. Jostles the view of all clients, but doesn't physically move their bounding boxes or apply velocities. Set its intensity with strength. 1 is a hearty rumble, 10 is spasmodic bordering on hilarious.
Follows an attack-sustain-release curve: it builds for delay seconds, holds at full strength for length seconds, then fades back toward zero for wait seconds. Total quake duration is therefore delay + length + wait. All three have defaults, but any of them can be forced to 0 by setting them to -1. (You might want a quake with no delay to be caused by a sudden blast, for example.)
To show long story texts, for logs, terminals, books, etc., you can use the trigger_textstory brush entity. It shows a message that remains on-screen while the player is inside the trigger volume.
You can set it to be show the message only when the player is facing a certain angle within the trigger. Set the central angle with mangle, and the maximum angle offset with view_ofs (both in 'pitch way 0' format).
You can define custom sounds as well, both for when the message is shown (noise1) and when it fades away (noise2). Use "misc/talk.wav" for the default centerprint beep.
There's a point entity variant called target_textstory. When triggered, it'll show the message on-screen for the duration defined in wait.
The target_autosave point entity saves the game when triggered, and does so by default in a slot named "auto". We've included a default bind for the F8 key that loads from this slot.
The same autosave entity can be used multiple times, so you don't need to place a new one for each save point if you don't want to.
You can create a custom episode-ending screen by giving the trigger_changelevel a text into the message field.
Note that the screen width available only fits 40 characters at most, so you need to manually include line breaks (\n) into your text if necessary.
Using this point entity you can move any other entity to its origin upon triggering. Works with any entity type. Think of it as a simplified, general-purpose teleport.
If the targeted entity changes behavior when given a targetname, you can target its targetname2 field instead.
Resizes the targeted entity's bounding box. Targets both targetname and targetname2 fields. The activator's bounding box can be changed as well by activating spawnflag 1.
Besides the well-known Quake cheats, Alkaline adds some others.
Note that the old give # cheat to get a specific weapon won't work in this mod.
To everyone responsible for the mods that we've gathered ideas and code from, especially Lunaran (Copper), dumptruck_ds (progs_dump), and sock (Arcane Dimensions). Alkaline wouldn't be what it is without your huge contributions to the Quake community.
To mr. John "metlslime" Fitzgibbons for creating Rubicon2 in the first place, and to ijed for the Rubicon Rumble Pack.
To Spike for the FTEQCC compiler and for being a walking encyclopedia regarding everything engine- and QuakeC-related.
To ericw for creating the awesome map compiling tools that were able to take modern Quake maps into another level in map complexity and lighting features.
To Preach, necros, czg, Kell and other modders of old, whose work led to where we are today in terms of modern mod features and monsters.
To the awesome community of mappers, modders and players at the Quake Mapping Discord, Quaddicted and func_msgboard for all the support and feedback.