What's New in ZRP 1.09? Specific changes are noted in the lists below. This third 1.09 release is still experimental. It extends the optimization of the earlier releases while fixing more bugs and addressing more issues. This release runs faster and uses less memory than vanilla, than previous ZRP releases, and than even other mods that change the game's binaries. The second release corrected a few issues and added some tweaks. Decane helpfully contributed some fixes and tweaks he used to improve the SRP for Clear Sky. A lot of changes under the covers were made to streamline the loading of the game, the game saves and the alife processing. Some of these changes are so extensive that mods added to this code base will likely need extensive tweaking to work with it. Some backward compatibility is left in the code, but many functions don't even take the same arguments, and a few assumptions have been made for efficiency as noted below. In many cases the "constant" variables are replaced with the numbers they represent. For example, modules.stype_stalker is replaced with 0. Engine constants are especially "heavy"; they take a long time to be fetched during script execution. In some cases they are now loaded as early as possible (CLSIDs can change with engine versions and modifications, and they are not valid constants at game start). The references to db.actor are being converted to just actor. This global variable will contain the same reference as db.actor. In instances where the actor is passed as a function parameter in the original game, it may be removed here. Some files/functions will be left as is if not used often in the game. One constant that will be replaced over time is the value returned by db.actor:id(), which is always 0 in vanilla. Currently, these changes will be accompanied by the original code in a comment. For readability, these comments should not be removed from the context if you edit the files. One unexpected "feature" of faster processing is the exposure of race conditions. An example is the way the gulags change state. A camp (example: the AW mercs) can switch states from "camping" to "attacking" a neighboring enemy (example: the AW loner campsite). This is done by changing a number at one level (from 0 to 1 or 2 or 3, say) because conditions are right for the change (like the number of enemy being large enough). At lower levels this can trigger a "defend the camp" task for the loner camp, as well as throw every gulag member merc off his camping job and then assigning him a new "attack the loners" job. The problem here is that the check for "job done" is a simple "Is the number of attackers zero?" which said yes because the reassignment of attacking jobs wasn't fast enough after the merc campers were released from camping. This particular race condition has an active workaround as of XR2 that prevents the population checks from returning zero on new state changes until at least one NPC/mutant takes on a job in the new state. (In the future I'll consider some sort of immediate transition to a different job instead of firing then rehiring in the next event loop cycle. --Or even after lots of cycles!) Previous ZRP optimization occurred mainly at the local code level. This version of ZRP is being heavily optimizing at the first level above that, looking at reducing system memory usage and code execution times. The next major ZRP revision will examine and possibly rewrite entire systems. (See the example above.) Version 1.09 is much lighter in code execution loops and in actual game data created. For instance, physical objects that don't have an ini function associated with them are no longer bound ("binded") by bind_physic_object.script. This keeps 40% of physical objects in the Bar level from being stuffed in db.storage and updated via update(). And se_zones.script no longer processes anomalies for SANB unless they are on the same level. It was checking the entire game's 1344 anomalies then rechecking the anomalies for the level. It now checks less than a tenth that, even none for a couple of levels. Event loop processing is sped up by avoiding the creation of unused debug tables and eliminating irrelevant data from tables that are used. So update() functions iterate through smaller lists. Faster initialization of entities also occurs by avoiding repetitive checks of the same data. Fetching data from the .ltx files originally involved checking if the section was valid and if it existed in the .ltx file each time for every related field fetched for that section. Now it is validated only once for high-usage functions like NPC schemes. See modules.script for details on what schemes are used where. Fixed lists that are constantly processed have been reorganized to move the more commonly used items to the front. Features are subject to change, based in part on testing and feedback. Changed files are noted in square brackets. Scripts are in the gamedata\scripts\ subdirectory; scripts marked with (*) indicate changes to the corresponding optional\ files as well. You should also review the earlier ZRP documentation in the docs\ subdirectory, including other ZRP_Changes_*.txt files. ===================================== Changes in 1.09 XR3a over ZRP 1.09 XR3 ===================================== ZRP 1.09 XR3a changes (NatVac and others as noted): * Implemented fix for missing sr_tip icons reported by zZz1. (MrSeyker, NatVac) [news_manager.script] * Corrected agr_u entry in secret_level table (was agru). [news_manager.script] * Reduced stamina value at which an available energy drink is consumed via Esc F1 and zx.smart_heal(). [_z.script, zx.script] * Adjusted historical dates to correspond to their string IDs (and to dates in CoP). (English) (MrSeyker) [config\text\eng\string_table_enc_zone.xml] ===================================== Changes in 1.09 XR3 over ZRP 1.09 XR2 ===================================== ZRP 1.09 XR3 changes (NatVac and others as noted): * Removed the gaps of silence when looped sounds repeat. (uds0) [ph_sound.script] * Fixed some helicopter state persistence across saves. (castl) [heli_combat.script] * Made r_str() default a string instead of number. (castl) [se_respawn.script] * Fixed xr_zones.script's save()/load() functions in case mods ever need them for anything (vanilla doesn't use them). (castl) [xr_zones.script] * Removed duplicate chimera critical_wound_* vars. (Storm Shadow) [config\creatures\m_chimera.ltx] * Changed Tolik's PDA/diary entry to reference Nimble, the actual source of the flash drive information. (easy peasy) [config\text\eng\stable_storyline_info_escape.xml] * Added task entry to permit the first task from Sidorovich to be logged as completed in the PDA quest statistics. (MrSeyker per easy peasy) [\config\misc\task_manager.ltx, \config\text\eng\string_table_tasks_escape.xml] * Tweaked doctor_meet entry; was being used by Doctor task and Guide task. Repurposed unused doctor_meet_2 for Guide task. [config\text\eng\stable_storyline_info_escape.xml, config\gameplay\storyline_info_escape.xml] * Corrected English a tiny bit more. [\config\text\eng\stable_dialog_manager.xml] * Commented out custom_data assignment for stalkers; it created a useless ini based on an empty stalker_custom_data.ltx file. [config\creatures\m_stalker.ltx] * Reduced memory usage and improved processing speed for more scripts. Commented out more unused vars/functions. [se_respawn.script, smart_terrain_params.script, xr_meet.script] * Deployed test hack to keep stalkers out of certain anomaly fields when SANB is enabled. The hack works by increasing the effective radius of a central anomaly to include other anomalies as a workaround for the inability of SANB to process more than one anomaly at a time. Only a couple of fields are on the exclusion list currently; if this works more will be added later. [se_zones.script] * Reverted SANB's get_nearest_anomaly() function to consider all anomalies on a level, not just those within 20 meters. [anomaly_evader.script] * Modified XML character supplies' ammo assignments so that all NPCs get a single bullet instead of a full box. This might be a cause of an occasional loss of the original ammo, which in turn contributed to a rare crash. The majority of instances had boxes for their pistols. [character_desc_agroprom.xml, character_desc_bar.xml, character_desc_darkvalley.xml, character_desc_escape.xml, character_desc_garbage.xml, character_desc_military.xml, character_desc_pripyat.xml, character_desc_radar.xml, character_desc_simulation.xml] * Reworked xr_kamp.script action_go_position to use msec ticks instead of software timer. When a stalled NPC is detected and resetJob() invoked, the remainder of the go_pos:execute() is canceled to fix a race condition that arose on faster PCs that left NPCs stalled (again). [xr_kamp.script] * Updated Fox's logic to work with revised xr_kamp.script. [config\misc\gulag_escape.ltx] * Re-enabled harmonica support in xr_kamp.script. Needs external support like MrSeyker's Harmonica Mod. [xr_kamp.script] * Integrated xStream's camp cleanup, removed optional versions. [xr_kamp.script; obsolete optional\*\xr_kamp.script removed] * Replaced neutral outfit/icon with monolith ones for one of the MonoMartyrs per MrSeyker. [config\gameplay\character_desc_simulation.xml] * Adapted the custom spawning code to permit the random spawns of mutants/npcs. [_custom_ext_zrp_mm.script] * Reduced damage delivered by some cut mutants (please help; this needs refinement). Fixed fracture's damage model which made them invulnerable to bullets; camel-case name didn't work. Support for their body parts is currently non-existent. [in config\creatures\: m_burer.ltx, m_cat.ltx, m_chimera.ltx, m_fracture.ltx] * Implemented a different approach to fixing the missing rain sound on level changes. [bind_stalker.script] * Commented out the contents of the weather manager's update() function, a useless call in vanilla/ZRP. Optimized the weather manager code. It's okay to replace level_weathers.script with one in a weather mod. [level_weathers.script] * Streamlined the event loop. [bind_stalker.script] * Guaranteed death manager's drop settings are initialized before create_release_item() needs them. [bind_stalker.script, death_manager.script] * Replaced level abbreviations on secrets with localized level names. Fixed npc:alive() test in send_tip(). [news_manager.script] * The (optional, not default) smart_heal() function now checks your stamina level if your health is 100%, and for stamina levels 0.5 or lower will consume an energy drink if one is available. [zx.script] * If enabled, the antirad pseudo-hotkey will result in the consumption of an energy drink (if available) when player's stamina level is low, in addition to any needed antirad application. Idea per fellow. [_z.script] * Removed useless cam_inert assignments from optional headbob settings. [config\misc\optional\effectors.ltx.*] * Added another font option: a smaller vanilla font size. (MrSeyker) See the Modifier section. [config\optional\fonts.ltx.MrSeyker] Modifier configuration changes (NatVac): * Added Fonts entry option to support a vanilla font with a smaller text size. [modcfg\_ZRP.cfg, modcfg\Vanilla.cfg] * xStream's camp cleanup support re-implemented. [modcfg\Experimental_AI.cfg] * Various configurations adapted to more accurately support actual engine behavior: immunities_sect controlled by engine, not config setting; the only hit_probability affecting NPCs is hit_probability_gd_novice in defines.ltx (again, player IS NOT affected by hit_probability); hit probability drops from 1.0 at point-blank range to hit_probability_gd_novice at hit_probability_max_dist and remains at that value thereafter. [modcfg\Actor.cfg, modcfg\FirstPersonShooter.cfg] * Documentation correspondingly changed. [modcfg\*.cfg.txt] * Added an immersive weather scheme that modifies the weather on some maps as you accomplish certain tasks in your progress through the game. [modcfg\Experimental.cfg/.cfg.txt] * Removed obsolete Weather Sound Fix. [modcfg\Experimental.cfg/.cfg.txt] * Changed secret level abbreviations to localized names. [modcfg\_ZRP.cfg/.cfg.txt, modcfg\Vanilla.cfg/.cfg.txt] * Supplied additional options to select/deselect the possible spawning of MonoMartyrs and various mutants that were cut from the original game. [modcfg\MonoMartyr.cfg/.cfg.txt] Debug changes (NatVac): * move_body_to_nearest_lc() now puts bodies at level changer reject points (where you Esc J fast-travel to). this_guy() now takes a boolean parameter, alive (nil is the same as false -- that is, don't care if alive). [optional\z.script] * Added some smart positioning for debug jumps to populated stashes and inventory boxes. See Debug changes for XR2 below. [optional\z_jump.script] * Esc D R now records the currently-visited position when returning to the starting point. Use Esc D V to re-visit. [_z.script] ===================================== Changes in 1.09 XR2 over ZRP 1.09 XR1 ===================================== ZRP 1.09 XR2 changes (NatVac and others as noted): * Tweaked get_nearest_anomaly() to use one short radius for detection (low processing demand) and a longer radius for actual anomaly avoidance (to prevent NPC stalls after successfully avoiding the nearby one). [anomaly_evader.script] * Kept space restrictors without logic out of the updateable list to reduce the update() processing (>60% reduction). [bind_restrictor.script] * Prevented trade with NPCs if they are in panic mode; panic causes an incomplete initialization. Also fixed the update() check to see if the inventory needed to be refreshed due to a switch to a different logic section. It was intended to check once a real-time hour but was doing so continuously. [trade_manager.script, xr_logic.script (*)] * Stopped processing saves and loads in trade_manager.script because the trade settings were ignored in trade_init(). The configuration is simply re-read and the condition lists are re-parsed and reset. Updates for generic traders are now ignored (nothing ever changes from what is initially set on session start). (NatVac, Decane) [trade_manager.script] * Added ph_button to the exception list of schemes that don't need to have their callbacks removed on scheme switch. [xr_logic.script (*)] * Stopped processing of dead BTRs on Chernobyl NPP's south side. [ph_car.script] * Corrected anim iteration checks to properly decrement from total anim count instead of incrementing. This stops the playing guitar music when the NPC stands up. (Decane) [state_mgr_animation.script] * Modified state change processing and gulag population checks to prevent race condition issues like arbitrary task completion due to slow re-hiring of NPCs/mutants for jobs in the new state. Removed obsolete time-delay workarounds. This change can affect saves; there is now a possibility that a ZRP 1.09 save is not backward compatible with ZRP 1.07. [gulag_general.script, gulag_military.script, xr_gulag.script] * Switched from all string_find checks to mostly string compares within try_switch_to_another_section() for speed. Adjusted related condlist processing. (per Decane) [xr_logic.script (*)] * Fixed XR1 regression issue that let the player get away with murder on the Bar level. [sr_territory.script] * Modified prod_npc_on_hit logic to force NPCs to look your way when you shoot them, after a reload has them facing where you were when the save was created. [xr_motivator.script (*)] * Modified register_target() and unregister_target() in task_manager.script to take another argument to speed up processing. Also adjusted a couple of files that used those functions. (se_item.script did not need to be adjusted.) [task_manager.script, se_stalker.script, smart_terrain.script] * Access tweaks, other optimizations in various script files. [*.script - go by modified date between 4/17 and 6/2/2017] * Set a timer to activate the player's weapon for the arena. This will work for all the matches except the surprise one. [xr_effects.script] * Player's arena inventory is no longer stored in inventory box after successful matches. This should reduce stash-based lag on the Bar level if you play in the arena. [xr_effects.script] * Let the player know during his first dialog with Arnie where his inventory will be after the match if he survives. (English) [config\text\eng\stable_dialogs_bar.xml] * Added xr_logic.script to the main_menu.script's validation check. If xr_logic.script was not valid, any attempt to start a game or load a save would hang the game. Now you will be notified that xr_logic.script has a problem and will be prevented from doing anything except quitting. [ui_main_menu.script] * Added another "cleaner fonts" option: a smaller font size. (MrSeyker tweaked ZaGaR's cleaner fonts.) See the Modifier section. [config\optional\fonts.ltx.ZaGaR_MrSeyker; renamed config\optional\fonts.ltx to fonts.ltx.ZaGaR] Modifier configuration changes (NatVac): * Added Fonts entry to support a cleaner font and a cleaner font with a smaller text size, as well as vanilla. [modcfg\_ZRP.cfg, modcfg\Vanilla.cfg] * Made some small text changes on tooltips to aid in deciding. [modcfg\_ZRP.cfg, modcfg\Actor.cfg] * Added tip on Camera Viewpoint (player's view height) to adjust Item Pickup reach as well. [modcfg\Actor.cfg, modcfg\Actor.cfg.txt] * Minor corrections/rewording on various Modifier files. [modcfg\*.cfg, modcfg\*.cfg.txt] Debug changes (NatVac): * Supplied a script to make teleporting a specific distance a little easier. It uses z.jump(), re-introduced in the XR1 release. It has some special features to permit jumping to stashes, inventory_boxes w/story_ids and those without. Copy it up a directory from scripts\optional\ if you might want to use it. SAVE BEFORE EACH USE! There currently is no smart positioning on destination, so you could find yourself inside a car or other Marked-One-mangler. (Esc D R to get back, or Esc D F to jump out.) See the XR1 debug changes for more info. [scripts\optional\z_jump.script] All.spawn changes/fixes since 1.09 XR1 -- these require a new game, but are not critical so existing saves are okay: * Removed four instances of "trader_flags = 0", one for an Agroprom stalker and one for an RPG-wielding merc in the Wild Territory, with the remaining two being the player and the Cordon trader. The engine didn't quite ignore the unused flag; in the first instance the stalker often didn't have ammo for his weapon. [alife_l01_escape.ltx, alife_l03_agroprom.ltx, alife_l06_rostok.ltx] * A zrp107r5_zrp109xr2_spawns.diff file is included. Find it in the gamedata\docs\diffs_for_modders\ subdirectory. ===================================== Changes in 1.09 XR1 over ZRP 1.07 R5 RC ===================================== ZRP 1.09 XR1 changes (NatVac and others as noted): ** Bug Fixes: * Deferred deletion of ammo on NPCs at death to eliminate those NOTFOUND and ge_destroy() log entries in 1.0006. This also prevents the e_parent && e_entity crashes if NPC is reloading when he dies. [death_manager.script] * Corrected global var of motivation_action_manager() invoked on each evaluator_state_mgr_idle_alife:evaluate() call. (from Alundaio remark) [state_mgr.script] * Gave player credit for trying if mutants killed Bullet's friend AND the bandits escorting him. [xr_effects.script] * Changed requirement for adding Yantar->AW level changer; must have Scorcher task first. (Just in case you visit AW first.) [zlc.script] * Removed ZRP legacy reference to the artifact swap program in Skinflint's starting dialog. [config\text\eng\stable_dialogs_military.xml] * Fixed one more typo in the English localization. (More to come from MrSeyker.) [text\eng\stable_task_manager.xml] * Added activation of AW bloodsucker respawner after completing Skinflint's bloodsucker task if you first talked to Skinflint before talking to Murk. [config\gameplay\dialogs_military.xml] * Fixed Rostok helicopter explosion sound location. [bind_heli.script] * Removed Murk spot if you killed the bloodsuckers before talking to him after assigned the task by Skinflint. [mil_tasks.script] * Adapted Shadows' outfit workaround so that you are always properly dressed at death or in third-person view, unless you are not to begin with (i.e., not wearing outfit). [bind_stalker.script, optional\*\bind_stalker.script] * Adjusted code to properly handle mobile (mutant) death from unknown causes. [mob_death.script, xr_conditions.script] * Re-enabled remove_from_ranking() for those newly-dead NPCs that have an assigned story_id (i.e., permabodies). [xr_motivator.script, optional\*\xr_motivator.script] * Made the "rain sound on level change" fix the default. [bind_stalker.script, optional\*\bind_stalker.script] * Changed type to t_type. (AMK Team via castl) [xr_sound.script] * Fixed wrong default_state_moving state assignments. (castl) [move_mgr.script] * Corrected wrong logic branch references. (castl) [config\misc\gulag_escape.ltx] * Added crash protection if no MM spawn_spots exist for level. (Actually didn't crash but corrupted subsequent saves, which pops up a "corrupt save" dialog warning to load earlier save.) [_custom_ext_zrp_mm.script] * Forced accelerated mental deterioration near Red Forest to Pripyat level changer if the scorcher is not disabled. While this transition-without-disabling-scorcher should be allowed, players wouldn't see loner group in Pripyat but task to follow them would still be given. [sr_psy_antenna.script] * Added a couple of safeguards if insufficient progress attained for an attempted fast-travel. You can no longer jump beyond a closed Garbage Duty blockpost gate, and you are no longer allowed to quick-jump to Pripyat level changer in Red Forest if psy emissions are still present, which would kill you as of this release. [ui_level_zip_dialog.script] * Added a precautionary Esc J jump to Arnie if post-arena-match timer somehow fails. [ui_level_zip_dialog.script] * Checked for invalid game_vertex_id which might be one cause of "there is no specified level in the game graph" errors. This test may need to be deployed in other locations; please report if you still get the error. [smart_terrain.script] * Added a missing alarm state to val_lager_bandit kamp3. [gulag_dark_valley.script] ** Tweaks: * Changed use of engine clsid table to speed up functions that use it. Modified other scripts to use the new global vars. [_g.script, anomaly_holder.script, bind_monster.script, death_manager.script, gulag_dark_valley.script, gulag_pripyat.script, smart_terrain.script, task_manager.script, xr_conditions.script, xr_gulag.script, xr_logic.script, z.script, zx.script, et alia] * Moved "is this dead body new" check from death_manager.script to xr_motivator.script to eliminate unneeded instances of the drop manager. [death_manager.script, xr_motivator.script] * Revised medkit drop (to heal NPCs) to use simpler medkit release code in _dev.script. Also prevented the act of storing medkits on bodies from healing nearby NPCs. [_dev.script, _z.script] * Adjusted NPC healing on master difficulty in dialog-based normal medkit transfer; was only 60%, now 100%. [xr_wounded.script] * Simplified level_tasks.proceed() to only call proceed() function for current level. [level_tasks.script] * The PDA has been updated a bit, although it is still a work in progress. (MrSeyker, NatVac) [config\ui\*.xml] * More optimizations and general clean-up. [xr_logic.script, most xr_*.script files, state_mgr_*.script] * Removed zombie combat support for non-zombie NPCs. This could break some zombifying mods; remove conditional check for zombied to reenable support if needed. [xr_combat.script] * Adjusted stealth tweak for neutrals and friends. If you kill one silently but you are seen doing it or are within a certain distance of his associate, you are still marked as his cold-blooded killer. [xr_death.script] * Tweaked the secrets text. [text\eng\stable_task_manager.xml] * Added ZaGaR's fonts.ltx for better widescreen support. Optional; see Modifier changes. [config\fonts.ltx] * Weakened MonoMartyrs a bit. [config\creatures\m_stalker.ltx] * Commented out more loaded but unused code. [dialogs_military.script, se_stalker.script, utils.script] * Made the attachment of grenade launcher and scope to the G36/GP37 optional, non-default. See Modifier changes below. [config\weapons\w_g36.ltx] * Moved db.sound table to xr_sound.db_sound for faster access by the only script that really uses it. [sound_theme.script, xr_sound.script] * Removed more unused sound themes from the theme table. Streamlined sound loading. [sound_theme.script] * Disabled loaded but unused TalesManager class. [xr_patrol.script] * Commented out unused stories and legends and reactions. [config\misc\script_sound.ltx, optional\script_sound.ltx.ncc] * Reworked xr_info.script to avoid creating and populating new encyclopedia/story tables for each NPC. [xr_info.script] * Stopped se_zones.script from processing all anomalies for SANB, now just processes those for the current level if any. Eliminated need for anomaly_holder.script. [se_zones.script, anomaly_evader.script, anomaly_holder.script] * Disabled config file processing by se_zones.script. The update() functions are never called, so the loaded values were never used. There are debug statements in the update() code that will tell you if it starts working. (Yes, this means artifact spawning occurs only at new game creation -- it's an engine problem.) [se_zones.script] * Tightened up code, eliminated unnecessary parameter passing, absorbed functions into other scripts where practical. [mob_*.script, ph_*.script, sr_*.script, xr_*.script, etc.] * Removed ten more unused or obsolete schemes, reworked code to avoid loading otherwise-useless schemes. [modules.script, above *.script] * Reduced use of tables in db.script that were apparently meant for debugging. Moved other tables to the only users. [db.script, bind_physic_object.script, xr_sound.script] * Changed add_to_binder() functions to add_to_binder_q() with three fewer parameters since they were unused in all schemes. NOTE that this change makes many AI mods incompatible with the new approach until they are likewise adapted. [mob_*.script, ph_*.script, sr_*.script, xr_*.script, some optional\ scripts including xrs_*.script files] * Set global 'actor' variable to db.actor value when defined. Changed a lot of files to use it already. (Don't change db.actor_proxy users.) [*.script] * Made xr_spawner.script obsolete. Its check_spawn() was rewritten and moved into the only two users of the function. [se_car.script, se_monster.script, xr_spawner.script] * Eliminated a populated but unused table in se_item.script. [se_item.script] * Eliminated the loading of an otherwise-unused class set (ce_switcher, se_switcher). This does change the numbering of the CLSIDs, which is not a problem in vanilla/ZRP. [class_registrator.script] * Added a new support function for those who repeatedly start new games to permit them to configure that new game somewhat one the fly. See _custom_ext.script's new_game_tweaks() function. [bind_stalker.script, _custom_ext.script] Modifier configuration changes (MrSeyker and NatVac): * NPC Death Crash fix can be disabled/enabled. [modcfg\Experimental.cfg] * G36/GP37 attachments can be enabled/disabled, its time_to_aim can be adjusted. [modcfg\Weapons.cfg] * Ft-200m/FN F2000 can have silencer with choice of silenced shot sounds and its time_to_aim can be adjusted. [modcfg\Weapons.cfg] * The "tagging" feature of binoculars can be disabled/enabled. [modcfg\_ZRP.cfg] * Unique weapons can drop in perfect condition. Same tweak, it just uses a different way to do it under the covers. [modcfg\_ZRP.cfg] * The bleeding reduction provided by medkits can be tweaked. [modcfg\Tweaks.cfg] * ZaGaR's fonts.ltx can be disabled for that vanilla unreadability. [modcfg\Vanilla.cfg] * Added movement dispersion adjustment to the actor difficulty settings. [modcfg\Actor.cfg, Actor.cfg.txt] * Added note on "bullet sponges". [FirstPersonShooter.cfg.txt] * Updated Experimental AI configuration to accommodate changes in AI scripts. [modcfg\Experimental_AI.cfg] * Updated Sound Management configuration to accommodate changes in sound table initialization. Removed simple NCC version; use either NCC or vanilla sound. [modcfg\SoundManagement.cfg] * New marking script: Mark Local. Works the same as Mark by Partial Name except it only marks entities on the same level. It also detects and removes objects with bad game vertex ids. ["Mark NPCs and Items" entry for modcfg\SupportUtilities.cfg] Debug changes (NatVac): * Macro processing can now take place while debug information like coordinate data or variable watch is actively displayed. This permits the direct removal of the variable watch via macro hotkey and better supports debugging functions. [_z.script, ui_main_menu.script] * As part of the change above, the debugging information is now toggled on or off via Esc D D. [_z.script] * The z.jump(distance,height) function now uses the y component of device().cam_dir as the default height adjustment if no height is provided. The value of device().cam_pos.y is added to cam_dir.y * distance to adjust for the height of your eyes from the ground. So you can now jump to that roof in the distance by turning on crosshairs, enabling "show distance" in Options, then look exactly where you want to go, note the distance, and without moving press Esc Z X and click in the edit box. Then type "z.jump(the_distance)" (without quotes, replacing the_distance with the distance you noted) and press Enter to instantly teleport there. Requires ZSU enabled and Execute Script Command installed. [z.script] * A missing or invalid modules.script or scheme script file no longer quits to desktop requiring the user to look at the log file. It now reports the problem on the lower left of the main menu and shows more info when you quit, just like a bad/missing _z.script did. This will help you debug schemes. [_g.script, modules.script, ui_main_menu.script] * The zx.grab_remote_body_property() function now also works in the same way as a direct search by checking for any info on the body. The "smart heal" routine is a little smarter. [zx.script] * Added debug function to detect and remove entities with bad game vertex values like left-over m_phantom ghosts in Red Forest. [z_mark_local.script; see Modifier changes.] * Updated some z.script functions to perform faster. You can now use one of the z.this_*() functions in Variable Watch with very little impact on framerate. [z.script] All.spawn changes/fixes since R5RC -- these require a new game, but are not critical so existing saves are okay: * Delayed the first bandit replacements for the Cordon auto park until after you help Fox or go to the Garbage. [alife_l01_escape.ltx] * Renamed Garbage's gar_zone_mincer to gar_zone_mincer_weak to avoid name conflict with Pripyat's gar_zone_mincer in the stadium. [alife_l02_garbage.ltx] * Separated two metal cases that occupied the same space near Chef. Moved one to the floor nearby. [alife_l07_military.ltx] * Reworked Chef's freezer to keep it from moving and moved the freezer and cans of Tourist Delight, etc. back into the SW corner. [alife_l07_military.ltx] * Locked the X18 refrigerator down. These chillers should not "walk" when you open them. [alife_l04u_labx18.ltx] * Fixed missing gunfire sr_sound in Duty vs. Freedom battle after X19 in Red Forest. [alife_l10_radar.ltx]