An update to No More Room in Hell has been released. The update will be applied automatically when you restart No More Room in Hell. The major changes include:
Source Engine upgrade
- Added 64-bit support, 64-bit binaries will automatically be launched on systems with a 64-bit OS
- Added a borderless window option to video settings
- Added bicubic lightmaps (from Half-Life 2: 20th Anniversary Update)
- Added radial fog (from Half-Life 2: 20th Anniversary Update)
- Added Steam Networking, port forwarding is no longer required
- Added UI scaling for high-resolution screens
- Added Vulkan renderer, which is now enabled by default on Linux
- Fixed a prediction bug where if the player was moved on the client, their input-based movement for that tick was not taken into account in non-player actions
- Fixed an issue where certain variables like position would not be updated correctly to match the server in certain situations
- Fixed certain breakable props not gibbing correctly
- Fixed player hull being mis-predicted in certain instances causing rollbacks every frame when e.g. crouching or against a wall
- Fixed the player's base velocity (e.g. conveyors, moving items etc.) getting subtly out of sync from client/server
- Improved networking precision for local player positions, resulting in less prediction errors and better game-feel
- Improved prediction for walking on props and other entities
- Made the game launch in native resolution by default instead of 640x480
Additions
- Added a menu in the Create Server dialog that selects a server type for Steam Networking, allowing public / friends-only / unlisted servers without port forwarding
- Added ability to pause the game when playing in Single Player mode
Changes
- Active Workshop map is now distributed to connecting players on local servers
- Certain HUD elements such as player names are now hidden during suicide blackout
- Changed default server name to "<player name>'s server"
- ConVar "viewmodel_fov" is now saved to user config
- Difficulty is now displayed in the server browser game description
- Flashlight shadows are now independent from "High" shadow quality, and can be enabled in the advanced options (off by default to reduce engine crashes)
- Improved native Linux support for significantly better performance
- Optimized network bandwidth on player and zombie movement
- Optimized zombie performance even further on crowded maps
- Overhauled rich presence to support connections for Steam Networking, both Discord and Steam will now recognize such servers for joins and invites
- Removed warning dialogs for NAT connection and Steam Deck compatibility as those are no longer relevant
- Revised voice status icons over player heads to be more readable in darker maps
- Updated FMOD Engine to version 2.03.12
- Voice commands from muted players are now blocked by default, this can be controlled with cvar "cl_voicecmd_ignore_muted_player"
- Updated the localization files:
- With thanks to community translators: Atheist, grobinho, Klowby, MakinDay, marcielcps, Plazehorta, RicecakeHuman
- Want to localize NMRiH to your own language? Visit our localization repository on GitHub.
Fixes
- Fixed extracted players occasionally appearing as "deceased" on the scoreboard
- Fixed false spawn notifications (i.e. sound plays and window flashes while "waiting for spawn point")
- Fixed ironsights not being turned off when contemplating suicide
- Fixed particle rain collision, contributed by BigHatMarley (#1579)
- Fixed several issues when restoring saves on maps that utilize level transition
- Fixed supply crate and keypad panels not properly resizing on resolution change
- Fixed zombie idle vocalization cutting short on longer moans
Changes for mappers and modders
- Added custom zombie model pools, which can be controlled by cvars prefixed with "sv_zombie_models"
- Added cvar "tonemap_debug", helps visualize active tonemap controller and its params
- Added "ent_minsmaxs" command, prints entity bounding box in a MapHack friendly format
- Added entity "npc_nmrih_basezombie", base class for a generic zombie, useful for custom zombies
- Added entity "skybox_swapper", swaps 2D skybox material
- Added entity "trigger_tonemap", changes tonemap controllers for players touching the trigger
- Added game event "inventory_box_item_taken", fired when the player picks up an item from a supply crate
- Added game event "player_voice_command", fired when the player uses a voice command, incl. automatic calls (pain, bleed, etc.)
- Added "HeadSplit" input for zombies (#1569)
- Added hull override keyfield to zombies
- Added input "RevertAllMapCvars" to entity "logic_ruleset", it reverts all cvars that were changed by an active map to a base value (when available), or default, it doesn't revert difficulty / script / mutator changes
- Added inputs "ForceRespawnPlayer" and "ForceRespawnAllPlayers" to entity "nmrih_game_state", forcefully respawns players by skipping the valid spawn point check
- Added keyfield "Despawn Ignore Population" to entity "func_zombie_spawn", by default, zombies only despawn when zone population is over the maximum, even when they're unseen; when set to 'No', it uses classic behavior where visited zones keep max. zombies, when set to 'Yes', it always despawns unseen zombies
- Added keyfield "Hide TAKE Button" to entity "item_inventorybox"
- Added keyfield "HUD Style" to entity "logic_progress", changes visual style of the progress bar, with new addition of a circle that is drawn in clockwise direction at the center of the screen
- Added keyfield "Ignore Grease" to zombies, when true, the zombie will not swap between NPC assigned collision groups to phase through each other
- Added keyfield "Ignore Wind?" to dust particle brush entities
- Added keyfield "Ignore Zombie Rules" to zombies, when true, game rules will treat them as a generic NPC
- Added line break support to entity "point_message_multiplayer"
- Added missing spawnflags to entity "point_viewcontrol_multiplayer"
- Added outputs "OnBarricade" and "OnBreak" to entity "nmrih_barricade"
- Added support for barricade prop model override
- Added support for filtering model rendering on specific clients
- FGD: Customized "base.fgd" is now shipped with "nmrih.fgd", to replace class overrides and dependency for base SDK
- FGD: Restored missing "Mark" and eyedropper buttons on Hammer when editing "Filter Name" keyfields
- Fixed dynamic "logic_progress" always completing on "StopProgress"
- Fixed entity "logic_script_proxy" calls not working on global scope when using instances
- Fixed entity "logic_script_proxy" not accepting null for input "SetTargetEntity"
- Fixed entity "player_weaponstrip" removing items improperly (#1588)
- Fixed map localization files within the BSP not being loaded
- Fixed parented model attachments on NPCs being misaligned
- Fixed "player_spawn" event being incorrectly fired when spawn points aren't available
- Fixed runners spawned via BecomeRunner not randomizing their collision groups
- Fixed sparks sound on buttons not playing
- MapHack: Fixed collision bounds on spawned brush entities
- NMRObjective: Added ability to drag-select nodes
- NMRObjective: Added scrollbars when nodes go outside the workspace
- NMRObjective: Misc. optimization and improvements
- VScript: Added CAI_BaseNPC functions CanLagCompensate(), and SetCanLagCompensate()
- VScript: Added CBaseAnimating functions SetPlayerDrawFilter(), and DrawFilterAllPlayers(), when set to true, this model won't be visible for the given player
- VScript: Added CBaseEntity function IsZombie(), returns true if the entity is considered a valid zombie by game logic
- VScript: Added CBaseEntity hook OnTakeDamage, this hook is designed as a mutable replacement for filter_script's PassesFinalDamageFilter, incoming damage info can be modified before it's applied, returning 'false' will discard received damage
- VScript: Added CBaseEntity hook TraceAttack, called when the entity is about to receive an attack trace, incoming damage info can be modified before it's applied, this hook is called *before* damage filters are checked, returning false will discard the trace
- VScript: Added CBasePlayer function IsHLTV(), returns true if the player is SourceTV
- VScript: Added CBasePlayer functions SetTonemapScale(), SetTonemapRate(), SetAutoExposureMin(), SetAutoExposureMax(), SetBloomScale(), UseDefaultAutoExposure(), UseDefaultBloomScale(), and ClearTonemapParams()
- VScript: Added CItem_InventoryBox functions IsTakeButtonHidden(), and SetTakeButtonHidden()
- VScript: Added CLogicProgress function SetCircle()
- VScript: Added CNMRiH_BarricadePoint function SetModelOverride()
- VScript: Added CNMRiH_BaseZombie functions IsRecognizedByGameRules(), SetIgnoreZombieRules(), and SetIgnoreGrease()
- VScript: Added CNMRiH_Player function DidGunshotSuicide()
- VScript: Added CNMRiH_Player function ForceTransmit(), sends network update to all clients even when the player is dormant for them (filtered by PVS)
- VScript: Added CNMRiH_Player function SetForcedRespawn(), flags next respawn as forced and skips valid spawn point check, then reverts on spawn
- VScript: Added CNMRiH_Player function SetVaccinated(), directly sets vaccinated state, and skips the chance of partial blindness
- VScript: Added CNMRiH_Player functions HasJumpAbility(), HasDuckAbility(), SetJumpAbility(), and SetDuckAbility(), overrides whether player can jump/duck or not, predicted on client
- VScript: Added CNMRiH_Player hooks OnWeaponDrop, OnWeaponEquip, and OnWeaponSwitch
- VScript: Added consistent rand() and RAND_MAX across platforms
- VScript: Added constants for NMRiH button masks, collision groups, and damage types
- VScript: Added CScriptNavArea functions GetAdjacentAreas(), and GetAdjacentCount()
- VScript: Added enum "VoiceCommand", lists available player voice commands, incl. automatic calls (pain, bleed, etc.)
- VScript: Added functions TraceEntity(), and TraceHull()
- VScript: Added recursion support for CScriptKeyValues functions TableToSubKeys() and SubKeysToTable()
- VScript: Added support for reading KeyValues from BSP pak lump via function KeyValuesRead()
- VScript: Added support for trace filter hit entity callbacks on TraceLineEx(), TraceHull(), and TraceEntity(), via "callback" value that expects a function with single argument for params, e.g. "function ShouldHitEntity(params)" where 'params' have keys: entity, contentsmask; returned value filters the hit entity
- VScript: Class CScriptNavArea now has string representation (i.e. "[<ID>] Area")
- VScript: Entity input "RunScriptCode" now converts backticks to quotes (i.e. ` -> ")
- VScript: Fixed CNMRiH_Player function IsTalkingWalkie() always returning 'false'
- VScript: Fixed crash when passing null values to TraceLineEx() function
- VScript: Fixed dangling entity script instances in some cases, which caused crashes (e.g. "prop_physics" with a script scope being deleted early due to a bad model)
- VScript: Fixed function SetActivity() allowing ACT_INVALID, which caused a crash
- VScript: Fixed hooks NPC_TranslateActivity and NPC_TranslateSchedule not checking invalid return types
- VScript: Fixed script scope leakage on entity deletion
- VScript: Updated with latest changes from Mapbase
Changes for server admins
- Added ability to modify zombie model pools, controlled by cvars "sv_zombie_models", "sv_zombie_models_kid", "sv_zombie_models_ng", and "sv_zombie_models_runner", models are set with ',' delimiter relative to models/nmr_zombie/*.mdl (or direct filename)
- Added cvar "ov_despawn_ignore_population", by default zombies only despawn when zone population is over the maximum, set to 0 for vanilla behavior where visited zones keep max. zombies, or 1 that always despawns unseen zombies (#1562)
- Added cvar "sv_ammobox_entity_legacy", for map compatibility when changes to ammobox_ entities cause problems
- Added cvar "sv_friendly_fire_ignore_infected", when set, don't apply forced friendly fire against infected players
- Added cvar "sv_gamedesc_override", to let server owners change game description without plugins
- Added cvar "sv_runner_randomize_collision_group", runners always switch collision groups (grease) on spawn, when 0 and paired with BecomeRunner, this emulates bugged behavior pre-v1.15.0
- Added cvar "sv_sprint_with_held_item", allows players to sprint while holding an item
- Added cvar "sv_tree_sway_update_time", when 0, it disables tree sway server-side (useful for map compatibility)
- Added cvar "sv_zombie_brainstem_dmg_scale", zombies take this factor of brainstem hitbox damage (if sv_brainstem is set to 1)
- Added cvars to tweak zombie vocalization, "sv_zombie_moan_freq_angry_only", "sv_zombie_moan_freq_limit", and "sv_zombie_moan_freq_random" (vanilla behavior unchanged)
- Added new method of randomizing zombie models by shuffling a model pool and pulling entries from it, this can be controlled with cvar "sv_zombie_shuffle_models"
- Fixed Steam Workshop downloads on a dedicated server (#1581)
- Game state commands (such as "respawnplayer") now support SteamIDs and partial name matches as arguments
- Game state commands can now forcefully respawn players via [-force] switch, e.g. "respawnplayer -force PlayerName"
Maps
nmo_asylum
- Attempted to fix body parts going through the ritual floor
- Fixed leg part softlock (#1565)
- Fixed weird glitch artifact on a ceiling brush
nmo_boardwalk
nmo_broadway2
- Added clips for smooth movement in the last ladder extraction area
- Little visual fixes
- Tweaked escape rope "ladder" brush to be less confusing (#1533)
nmo_cabin
- Reduced damage time from the canister explosion
nmo_chinatown
- Fixed fade distance value being too close on a Gun Shop extinguisher prop
nmo_cleopas
- Added glow for lever base
- Added power box prop in one of the houses to hide a seeping tree through a wall
- Fixed music manager not playing the correct playlist for tension state (#1604)
- Fixed softlock when lever is dropped into the electric puddle (#1537)
- Fixed softlock when objective items are thrown out of reach (#1548)
nmo_fema
- Fixed reflections on the plaster wall next to the initial spawn point
- Tweaked zombie navigation
nmo_quarantine
- Fixed barricade spots at the end of the map not working (#1561)
- Fixed godspots (#1605)
nmo_shelter
nmo_shoreline
- Disabled zombie respawning around bedrooms in the upper floor of the cabin (only on Casual and Classic difficulty)
- Fixed being able to go under the extraction zone by standing on the rear ramp of the boat
- Increased first aid kit spawn rates
- Small tweaks to make navigating the map easier
nmo_toxteth / nmo_toxtethdark
- Fixed missing X mark on the brick cemetery wall
nms_arpley
- Fixed fade distance value on some props in the house being too close
nms_midwest
- Fixed ability to block zone entrances with military crates
- Fixed visual bug on barricade prop at zone A
nms_northway
- Fixed fade distance value on extinguisher prop being too close