The Thief 2 Fixed Scripts are a distribution of the original Thief 2 script modules with many defects corrected and some new features added. Replacements for all first-party script modules are included and can be used as drop-in replacements for the original modules. They can be used with both the original missions and all fan missions that make use of the original modules and ought to be fully compatible with them. This collection can be used by both players seeking a more polished experience with respect to scripted events as well as mission authors looking for expanded possibilities for implementing novel effects.
Downloads:
NewT2OSM.zip (Thief 2)
NewT1OSM.zip (Thief Gold) - WIP
NewT1OSMCompat.zip (Thief Gold OM Compatibility Layer)
Improvements:
A detailed list of most of the included changes can be found below. However, other than the many bugs fixed and improved multiplayer support, likely the most important features are the inclusion of all of the previously unavailable generic Thief 1 and Thief Gold scripts and the availability of the generic modules in Thief 1 as well. This effectively serves to unify the scripting capabilities of both Thief 1 and Thief 2.
Code:
=========================
== Implemented Changes ==
=========================
(all modules)
-Now supports the multiplayer game client executable.
(convict.osm)
-Now also offered as a Thief 1 module with an equivalent feature set to the
Thief 2 module.
VictoryCheck and VictoryChecker:
-Multiple goal notifications will no longer play at the exact same time
resulting in very loud notification sounds.
-Introduced a small (1ms) delay in goal notification display so that they will
not appear prior to reading a book or other readable. The delay can be
increased with the "GoalPopupDelay" configuration variable.
-The "New Objective" notification now respects the "Goal Notification"
option in the game options menu.
-Notifications will no longer play if the script is on a starting point marker.
This prevents notifications from being shown and heard twice as they are in
the original convict module.
-Introduced optional new objective notifications. Define "FailedGoal",
"RemovedGoal", "CancelledGoal", "ReversedGoal". You can also customize the
color of the message and played schema with configuration variables. For
example, "FailedGoalSchema noluck" will play the "noluck" schema when an
objective is failed and "DoneGoalColor 32768" will show completed objective
notifications in green.
-Now also handles showing secret notifications with the same configuration
options as other notification types. This effectively obsoletes the
SecretSounds script.
-Added "NoTakeGoalCheat", "NoLootGoalCheat", and "NoGoToGoalCheat" cheat
configuration variables alongside the existing "NoKillGoalCheat".
-All cheat configuration variables can be defined to cancel the respective goal
type or set to 2 to make them optional instead.
-The "goal_satisfied_x" quest variables are now set even when a final goal is
irreversible. This fixes the behavior of such goals in several missions.
(gen.osm)
-Now also offered as a Thief 1 module with an equivalent feature set to the
Thief 2 module.
Elemental, FireElement, FireShadowEcology, FireShadowFlee, SlayHush, WatchMe,
SecureDoor, Burplauncher, WindowShade, ControlWindowShade, CollapseFloor,
FireElemSparx, ModelByCount, HotPlate, HotPlateControl, NoTweqElevator,
TrapCreate, TrapInverter, and TrapOnFilter:
-Added previously Thief 1-only scripts. Both the Thief 1 and Thief 2 script
distributions now include them.
GoalNotify:
-New script that encompasses the notification portion of VictoryCheck so that it
can be available without convict if desired. (This also allows notifications
to work in original T1 missions that cannot use convict.)
ZombieRegen:
-Type-specific zombie parts can now be specified with a "ScriptParams" link from
the zombie concrete or archetype to the parts metaproperty. The link data
should be "ZombieParts".
-Type-specific zombie weaknesses can now be specified with a "ScriptParams" link
from the zombie concrete or archetype to the weakness concrete or archetype.
The link data should be "ZombieWeakness"
-Zombies will no longer chatter after becoming dormant.
CameraAlert and CameraAlert2:
-The "Update" timer is now fired correctly at two-second intervals.
CorpseFrobHack:
-The "Auto-search bodies" option will no longer erroneously pick up
non-frobbable objects on bodies.
Corpsed:
-The body model will no longer disappear if a save is loaded while carrying a
body.
Blackjack and Sword:
-The mouse sensitivity is no longer reduced if the player has begun using a
weapon and put it away before attacking.
Crystal:
-The object substituted upon being contained can now be configured with a
"ScriptParams" link to the desired object. The link data should be
"ArrowType".
Arrow:
-Arrows will have their render scale reset after being contained by an avatar.
This prevents it from appearing the incorrect size when using the bow.
-Added option to make currently nocked arrows ignore all stimuli. To make use of
this, populate a metaproperty named "M-IgnoreStimuli".
TrigFlicker
-No longer kills an unrelated timer under certain conditions. This resolves the
infinite speed potion bug that can occur in some missions.
TrapNonFinalComplete:
-Now respects the current difficulty when determining which goals have been
completed.
TrapTeleporter:
-"AICurrentPatrol" links can now be retained if the "TeleportNoBreakPatrol"
configuration variable is defined.
TrapAddMetaProp:
-Added a generic version of this script to this module that can handle multiple
"ScriptParams"-linked metaproperties. It derives from StdTrap and can, thus,
either add or remove metaproperties. The original script without these
additional features can still be found in miss16.osm.
TrapDelayer:
-Added script to this module. It derives from StdTrap so that standard trap
flags can be used.
TrapPatrol:
-Will now set the script object to patrol if there are no outgoing
"ControlDevice" links.
TrapSetQVar:
-Added support for setting multiple quest variables at once. Separate different
arguments in the field with semicolons.
TrigRoomDelivery:
-Works as originally intended instead of sending "TurnOn" in every room.
TrigRoomDeposit:
-No longer erroneously sends "TurnOn" when dropping the relevant item outside
the destination room while the player is simultaneously inside the
destination room.
TrigQVar:
-Added support for triggering from multiple possible quest variables. Separate
different arguments in the field with semicolons. The trigger is fired if
any of the specified arguments match.
StdDoor:
-Schemas are halted when the door receives the "DoorHalt" message or begins
opening or closing.
-No longer kills an unrelated timer under certain conditions.
StdElevator:
-The "Starting" and "Stopping" messages are correctly relayed to other elevator
scripts even when the elevator itself does not move.
StdKey:
-"PlayerToolFrob" is now sent to the object being frobbed prior to trying to
use the key instead of after trying to use the key.
Extinguishable:
-The tweq system is now used to extinguish torches rather than simply setting
the model. This reduces the obvious movement of torches when doused.
SecretSounds:
-Notifications will no longer play if the script is on a starting point marker.
-Now implemented as a special case of GoalNotify.
Victrola:
-Can now be toggled on and off by frobbing the target object multiple times.
-The joint tweq animations will now play properly.
(miss1.osm, miss2.osm, and miss3.osm)
-The training tips can now be disabled with the "NoTrainingTips" configuration
variable.
(archer.osm)
-Now also offered as a Thief 1 module with an equivalent feature set to the
Thief 2 module.
(miss14.osm)
PlayerTally:
-Now differentiates between rope arrows and vine arrows.
(miss15.osm)
Loadup:
-Now differentiates between rope arrows and vine arrows.
(miss16.osm)
FusingMachine:
-No longer takes an item out of the player's inventory if it is placed in the
slot and picked up again.
Installing:
This package can installed by either using the Dark Engine Mod Manager to install directly from the archive or by manually extracting its contents to an enabled mod directory. An installation running NewDark 1.27 or newer is required. No additional configuration is necessary, though it is possible to do so using the configuration variables noted in the changelog. Installing the package in this fashion will have the new modules be prioritized over those in the game's main installation directory, but not over modules included with FMs.
Notes on Thief 1/Gold:
The generic (non-mission-specific) modules are also offered for use with Thief 1 or Thief Gold. These, as before, can be used as replacements for the original versions of these modules. They are based on the Thief 2 versions of the relevant modules and, as such, have an identical feature set to them. Any mission authors who wish to use them in a mission will very likely have to make changes to their game systems. See the gamesys dbmod included with the Thief 1 distribution for those that are most important. However, while an effort was made to resolve some of the most prevalent compatibility issues exhibited with Thief 1, there are almost certain to be issues when used with some Thief missions, particularly those that exploit specific behavior of the original Thief 1 modules. As such, it may be best to consider Thief 1/Gold support to be in a beta-like state for now. Should you notice any such issues, feel free to report them here so that they can be resolved.
Almost all of the original missions do not employ the generic script modules. As such, by default, they will not use those that are included in this distribution. An additional small companion mod that will load the generic modules for all original missions so that one can play with their changes can be found in the downloads section.
Reporting Issues:
If you have any suggestions for additional improvements or notice any issues that should be addressed, please leave a post here with a description of the problem and, if applicable, a saved game. This distribution is to be continually updated, so reasonable changes and improvements are likely to be included.
I would like to extend a special thanks to Glypher, in particular, for helping in this endeavor by testing and suggesting many of the included improvements.
Code:
Changelog:
19-11-24:
-Fixed an issue with Container when it is duplicated on an object.
10-11-24:
-Victrolas are now toggleable and will animate with the configured joints tweq
while playing.
3-11-24:
-Translating doors should now have their schemas halted when obstructed like
rotating doors.
24-7-24:
-Fixed an issue that prevented TrapSetQVar from properly setting quest variables
on only some machines.
-Prevent duplicate ropes from appearing with DeployRope and DeployVine
-Fixed the Container script so that objects appear to close when locked.