Happy new year! Here are some updates, mostly targeted towards mappers and modders.
Map Changes
- Fixed a navigation issue near an optional supply room in Rydberg.
- The fire extinguisher near the end of Rydberg now uses the new temporary pickup mechanic.
Stats
- Fixed the stats option in briefing going to an obsolete website.
- Fixed stats not being recorded for the 22A5 Heavy Assault Rifle, IAF Medical SMG, and TG-05 Gas Grenades.
Lobbies
- Kicking a lobby's original leader no longer prevents them from creating lobbies for 5 minutes.
- The lobby creation UI will remember whether the last lobby you created was public or friends-only.
- Fixed a delay when restarting the mission if a player disconnected during the vote.
- The "Take a Break" option on the ESC menu is now disabled if the server doesn't allow it to be used.
Dedicated Server
- Added rd_adjust_mod_dont_load_vertices, which sets mod_dont_load_vertices on dedicated servers. This prevents the dedicated server from loading the vertices for models, reducing memory usage.
- Enabled the rm_welcome_message and rm_welcome_message_delay cvars.
- The server now performs a cleaner shutdown when rd_server_shutdown_after_num_secs is set.
- Fixed the 64 FPS server limit on Windows 10 build 2004 and newer.
- Fixed physics simulation issues when the tick rate is changed from the default.
Dedicated servers now update workshop items asynchronously at startup.(reverted for now)
Misc
- Fixed the heal beacon's first heal reading uninitialized memory.
- Fixed a sentry duplication exploit.
- The game instructor will no longer suggest interacting with disabled button and computer areas.
- Fix computers that have just been hacked not allowing options other than download data and remote turrets to be selected until the user logs out.
- Added rd_prediction_strategy. Set this cvar to 1 to test the new prediction error handling, which works better on moving platforms but may be buggy.
- Bot marines can now use the secondary fire on the IAF Medical SMG.
- Fixed some cases where the game would try to write to the files of an unpacked addon rather than its own base directory.
- If no env_tonemap_controller exists on the level, one will be automatically created and sent the input SetBloomScale 0.25.
- The director will only warn once about a level not having a nodegraph.
- Fixed escape chatter happening early if the escape objective was not last on the list.
- Explicitly failing an optional objective no longer fails the mission.
- "Keep Mouse Inside Window" is usable in exclusive fullscreen mode for multi-monitor setups.
Challenge ConVars
- Added rd_biomass_damage_from_explosions for challenges; if set to 1 then biomass will take full damage from explosions.
- asw_marine_friction, asw_marine_gravity, and asw_sv_maxspeed are now cheat cvars.
- Added asw_turret_dmg_override to change the damage per shot of the remote turret.
- Added asw_sentry_top_machinegun_dmg_override and asw_sentry_top_flamer_dmg_override.
- Added asw_sentry_top_machinegun_fire_rate and asw_sentry_top_cannon_fire_rate.
- Added asw_sentry_top_cannon_dmg_override. This affects the base damage. The actual damage is determined by the marine's explosives skill.
Modding / SDK
- Weapons can be set as "temporary", which makes them use a new weapon slot and forces them to be dropped instead of stowed.
- Added rd_weapon_generic_object, which can be used for generic carryable objects.
- Added rd_tilegen_instance for further randomization of tilegen tiles.
- Added trigger_asw_marine_melee for detecting a melee attack aimed at a target.
- Added asw_filter_marine_class.
- Added rd_boss_bar. See example_boss_bar.vmf for examples of how to use the new entity.
- Reorganized trigger_asw_computer_area to put related fields closer together in Hammer.
- Up to 3 cameras and remote turrets can be assigned to a trigger_asw_computer_area. The computer UI still has a limit of 6 options on the menu.
- Fixed trigger_asw_door_area not using its Start Disabled field.
- Added a field to trigger_asw_button_area that allows mappers to require a button be held down for an amount of time.
- Added "Can Player Weld" to asw_door.
- Added an Extinguish input to asw_alien_goo.
- Added ResetMarineIntensity and SpawnHordeSoon inputs to asw_director_control.
- Added OnStartedUsing and OnStoppedUsing outputs to asw_remote_turret.
- Added outputs for failed fast hacks to trigger_asw_button_area and trigger_asw_computer_area.
- Corrected the skins for many pickups in Hammer.
- VRAD now runs with an automatic number of threads by default (previously 4).
- Added several VScript functions to CDirector and many functions for nodes.
- Added support for multi-layer minimaps.
- Added a JumpUp VScript function for asw_parasite.
- Added a field to asw_stylincam that allows changing the commander face sprite.
New VScript Functions
Global
- Vector GetHullMins(int hullType) - Returns a Vector for the hull mins (hullType)
- Vector GetHullMaxs(int hullType) - Returns a Vector for the hull maxs (hullType)
CDirector
- void SpawnHordeSoon() - Queue a horde to spawn soon (the same logic as when a hack starts)
- float GetTimeToNextHorde() - Get the current number of seconds until the director will try to spawn a horde
- void SetTimeToNextHorde(float seconds) - Force the horde countdown timer to be set to this number of seconds
- Vector FindHordePosition(bool north) - Get a random position where a horde can spawn (returns null on fail)
- int IsSpawningHorde() - Get the number of aliens remaining to spawn in the current horde
InfoNodes
- CAI_Node GetNearestNodeToPoint(CBaseEntity npc, Vector position) - Returns the node nearest to origin with optional npc parameter
- int GetAllNearestNodes(CBaseEntity npc, Vector position, int maxNodes, table) - Fills a passed in table of x nearest nodes to origin with optional npc parameter
- void GetAllNodes(table) - Fills a passed in table of all nodes
- CAI_Link CreateLink(int srcID, int destID) - Creates a new link from srcID to destID and returns the link
CAI_Node
- int GetId() - Get node ID
- Vector GetOrigin() - Get node origin
- Vector GetPosition(int hullType) - Hull specific position for a node
- float GetYaw() - Get node Yaw
- int GetZone() - Get node zone
- void SetZone(int zone) - Set node zone
- int GetType() - Get node type
- void SetType(int type) - Set node type
- bool IsLocked() - Returns true if node is locked
- void Lock(float duration) - Locks the node for x seconds
- void Unlock() - Unlocks the node
- int NumLinks() - Number of links for node
- void ClearLinks() - Clears all links from node
- CAI_Link GetLink(int nodeID) - Get link to dest node ID
- CAI_Link GetLinkByIndex(int index) - Get link by index
- int GetInfo() - Get node info
- void SetInfo(int info) - Set node info
- void AddLink(CAI_Link newLink) - Adds a link to this node
- void RemoveLink(CAI_Link link) - Removes a link from this node
- void DebugDrawNode(int r, int g, int b, float duration) - Draw node as a box of the given color for x seconds
CAI_Link
- int GetSrcNodeID() - Get the ID of the node that 'owns' this link
- int GetDestNodeID() - Get the ID of the node on the other end of the link
- int GetAcceptedMoveTypes(int hullType) - Get the Capability_T of motions acceptable for passed hull type
- int GetLinkInfo() - Get other information about this link
- float GetTimeStaleExpires() - Returns the amount of time until this link is available again
- int GetDangerCount() - Returns how many dangerous things are near this link
- void SetLinkInfo(int info) - Sets information about this link
- void SetTimeStaleExpires(float duration) - Sets the amount of time until this link is available again
- void SetDangerCount(int count) - Sets how many dangerous things are near this link
- void SetAcceptedMoveTypes(int hullType, int moveType) - Set the Capability_T of motions acceptable for passed hull type
- CAI_DynamicLink GetDynamicLink() - Returns the info_node_link entity for this link or null if it doesn't exist
CAI_DynamicLink
- bool IsLinkValid() - Returns true if the dynamic link has a corresponding node link
- void TurnOn() - Enables node link connections
- void TurnOff() - Disables node link connections
- CAI_Link FindLink() - Returns the node link or null if not found
- CAI_Node GetSrcNode() - Returns the node that 'owns' this link
- CAI_Node GetDestNode() - Returns the node on the other end of the link
Added the following enums to script:
- AI_NODE_ZONE_UNKNOWN
- AI_NODE_ZONE_SOLO
- AI_NODE_ZONE_UNIVERSAL
- AI_NODE_FIRST_ZONE
- bits_LINK_STALE_SUGGESTED
- bits_LINK_OFF
- bits_LINK_PRECISE_MOVEMENT
- bits_PREFER_AVOID
- bits_LINK_ASW_BASHABLE
Multi-Layer Minimaps
The AS:RD version works similarly to the CS:GO version, apart from the following changes:
- We use vmt and vtf files as usual, not dds.
- The "default" section can be omitted and the previously-existing "material" field is used for any space that does not have a vertical section assigned to it.
- Instead of "lower" and "higher" in the example being part of the material name, they are the entire material name.
- If an altitude value is omitted, it takes the largest value (positive or negative) that a coordinate can have in Hammer.
Implementation details:
- The altitude values correspond to the position of the player's feet.
- There is a maximum of 64 "slices", which can be from 32 to 64 actual layers depending on whether the max matches the next one's min.
- This does NOT affect the briefing or ingamebriefing maps, only the minimap.
Changed files in this update