ATX TRESPASSER DOCUMENTATION
(best viewed with Internet Explorer or Firefox)
Current version: 1.61 BETA


DISCLAIMER

NO GUARANTEE. MAY NOT WORK ON YOUR SYSTEM OR ANY OTHER SYSTEM, FOR THAT MATTER. ALL USAGE OF THE CONTENTS OF THIS PACKAGE IS SOLELY YOUR RESPONSIBILITY. ANY LEGAL ISSUES THAT MAY ARISE WITH THE USE OF THIS PACKAGE ARE YOURS TO DEAL WITH ***.

PLEASE READ SECTION "KNOWN BUGS" AND THE FANSFAQ TEXT BEFORE USING.

Note: This documentation is a compilation of many previous separate text files, which included direct references. Some of these extinct references may still exist in this text, along with syntax errors. I apologize for the inconvenience.


CONTENTS:

- About
- Updates
- Installation
- Features
- Known Bugs
- "MAPS\" folder and sub-folders
- FANSFAQ
- ATXconfig.ini File Details
- New ActionType Reference
- ATX Source Code Info ("ATX_SOURCE\" folder)
- Archive (variable addresses, etc.)
- Credits


WHAT IS ATX?
-> BACK TO CONTENTS

ATX is a modification for the PC game Trespasser, by DreamWorks Interactive. It consists of a DLL, a single executable hack, and few other essential files; it can be applied to any v1.1-patched Trespasser executable or the demo version executable.

It allows level designers to use supplemental ActionTypes in their levels and combines many new features as well as a few older ones into a single package. The new ActionType values are defined using an external DLL that automatically detects the associated hacked executable upon loading. This system permits the update of the small DLL file without having to update the executable more than once. New ActionTypes are programmed to use existent T-Script entries and are recognized by Trespasser as valid functions. All other features use self-modifying code to be applied from the DLL.

Full documentation of new ActionTypes, cheats, and other features is provided as well as full FASM assembly source. Source is open for modification and may be base for others to take credit as long as the end result is reasonably different from the original code.

ATX has been generally tested to work with the following operating systems: Windows ME, Windows 98 SE (with and without unofficial update), Windows 2000 Professional w/Service Pack 4, Windows XP Home, Windows XP Professional (w/SP1-SP2). However, only Windows 2000 Professional w/SP4 (w/Update Rollup 1) is regularly used to test all the new features. Later versions of ATX have also been known to work on some versions of Linux (particularly WINE) (see FANSFAQ).

Please keep in mind that this is strictly a BETA-stage modification. There are still many bugs/errors/crashes present, even though they may not be initially obvious. It may perform differently depending on your system, and you may run into problems. If this is the case, I would appreciate receiving notifications of such problems via the Trescom message board or by e-mail; please include a description of the problem, your executable type and operating system, error.log and/or ATX_LOGFILE.txt log files, and screenshots if needed. However, please read the Known Bugs list beforehand to avoid submitting previously-known bugs. Thank you.


ATX BETA UPDATES/CHANGES
-> BACK TO CONTENTS
V1.61:
- reinstated KILL cheat (had accidentally been renamed to KILLDINO in 1.60)
- fixed ATX causing crash if level could not be loaded due to lack of HD space
- added SUICIDE cheat (take a wild guess)
- new ActionType - 116
- some closure for the now-officially-abandoned MaxActiveDinos hack
- tweaked ActJumpNew default settings for TendancyCheckPeriod
  in *.ini files for instance-specific sections
- added 7 new ActJumpNew jump condition *.ini settings to limit/dictate jumping behaviour
  (example settings) - includes a MaxDistance value which can be used
  to allow spitting (and other) animals to jump and this only when within a certain
  maximum distance away from their targets
- OBJ cheat (and related cheats) now displays the distance between object and player object.
- Note: The TEHG and Ollydbg plugin are included under "ATX_SOURCE\_ollydbgplugin\"

V1.60 (source re-included):
- fixed REC video recording SaveMethod 16 in software mode
  (finally! - see VIDEO RECORDING)
- changed REC default SaveMethod to 16 in ATXconfig.ini
- fixed RECCOMPRESS.exe crashing at startup
- new path tracing system for 2D maps (see PATH TRACING).
- major source rewrites/cleanups (heavy use of FASM macros)
- experimental support for level-specific additive TPAs (see ALTERNATE LEVEL TPAS)
- new hotkey system for cheats (see HOTKEYS)
- new ActionType - 115
- updated documentation for Spitter code (see SPITTER/ANIMAL PROJECTILE SETUP)
- fixed slight inconsistency in Spitter code (the MinLaunchInterval would be renewed
  immediately after the probability checks but before angle/misc checks, so it happened
  that the interval would renew itself without an actual projectile launch if the
  probability passed but the 3D checks didn't) and relocated seed random call
- updated VTABLEID program and output files for demangled class names support via
  MSVCRT.dll (see under "ATX_SOURCE\_vtableid\")
- included experimental Ollydbg plugin for class name label registration for
  Trespasser executables (see "ATX_SOURCE\_ollydbgplugin\")

V1.59 (source code not included):
- default HUD is now included in package (courtesy of Trescom's Slugger)
  (see HUD)
- updated FASM compiler to version 1.66
- added instance options to AT103 script (see Actiontype 103)
- modified ATX_SOURCE\_vtableid extractor to provide demangled class names
  (updated files will be included in later versions that will contain source)

V1.58 (unofficial):
- Updated OBJ/OBJF/OBJN cheats to display some basic mesh info (if available for instance)
- fixed some potential OBJ-based cheats crashes
- fixed AT103 holstered weapon reloading (why did nobody ever notice this?! It's been this way for over a year!)
- basic HUD system implemented (see HUD)
- new INI entry: AlternateMenuTPA, under [TPAFiles]
  (see TPA (MENU) FILE RELOCATION)
- added FLY mode in-game speed multiplier option (see FLY MODE)

V1.57 (source code not included):
- new AIM aimdot cheat and related OBJAIM cheat
  (mainly for use with THIRDP - AIM can be toggled using a
   character key as well -> default = n key)
- new randomized teleportation ActionType (114)
- moved some INI options into different sections, i.e., created new FogSettings
  (see included ATXconfig.ini for reference)
  *** These new locations will be final as of this version. These changes were
  made in the spirit of readability and consistency. I apologize for any
  temporary inconvenience/confusion it may cause.
- added game fog disabling tweaks in INI for FogPower and FogHalf values
  (these may need to be tweaked in some cases, such as when software rendering
   is used, in order to properly disable or diminish the fog effect)
- updated documentation for some features and INI entries
- tweaked some randomization code (for jumping dinos and AT114)
- documented the generally-useless-and-probably-not-fully-implemented LINST cheat
- added documentation for new HIGH-RESOLUTION PATCH entries
*** Thanks to RenderFred and -=CHE@TER=- for their help testing the
    new video troubleshooting options.

V1.56 (unofficial, source code not included):
- updated FASM compiler version to 1.56.17 (for structure definition fix)
- fixed DisableGameFog default value problem
- added AimGunToggleKey INI entry for THIRDPerson cheat (default key = b)
- new FLYTELE cheat (for use with FLY mode)
- new [Troubleshooting] option in ATXconfig.ini to force resolutions
  into the Video Options menu list of resolutions (can override detection problems)
- new CameraFOV INI entry under [Variables] in ATXconfig.ini (overrides
  initial level-load values set by level scripts using ActionType 06)

V1.55 (source code not included):
- updated ATX_PATCHER.exe description and various bad references/issues
  (thanks to -=CHE@TER=- for the heads up)
- added tweak for max resolution for high-resolution TSOrd hack in ATXconfig.ini
- tweaked Night Mode and object teleportation INI files
* Note: The assembly source was omitted from this release due to heavy development
  and package size. It will be re-included in later releases (a.s.a.p.).

V1.54 (test):
- removed obsolete camera movement rate INI options for FOLLOWDINO and THIRDP
- added DisableGameFog ATXconfig.ini option (see FOG SETTINGS)
- added FogPower and FogHalf ATXconfig.ini tweaks for Night Mode
- rewrote menu options loading code; additions are now stored in supplemental
  "MAPS\" folder DDF files (see NEW MENU OPTIONS)
- added object teleportation INI files for Night Mode ("MAPS\NMD\" folder)

V1.53 (test):
- New ActJumpNew jumping dinos jump probability option (TendancyCheckPeriod - see JUMPING DINOS (ON ACTBITE COMMAND))
  (included in slightly modified default settings)
- fixed THIRDP and FOLLOWDINO cheats camera movement being updated one frame late
  (camera is now updated on every CAnimations CMessageStep-response handler method, before
   every render)
- spit system update

V1.52 (test):
- rewrote exe addresses code using FASM macros (_much_ cleaner)
- fixed potential FOLLOWDINO function crash
- quick-save can now be disabled if F9 key causes conflicts with other
  programs
- new ActionTypes (110-113)
- spit system

V1.51:
- fixed major CAnimal issue, mainly in savegames with dinos active at level start (hangs, crashes)
- fixed "no bitmap" message for MAP cheat
- included new Quick Save key (F9) (see QUICK SAVE)

V1.50:
- new DisableFastRestart ini/menu option (see FAST LEVEL RESTART DISABLING)
- "ATX_DOCS\" documentation folder removed! All docs can now be found in ATX_README.htm
- dino randomizer is now object/instance randomizer! Will work with most instance types (see OBJECT RANDOMIZER)
- fixed randomizer limiting instance names to 49 bytes in length (now allows up to 199 bytes, though game limit unknown)
- fixed BUFSIZE cheat problem (stack memory overflow)
- added Jumping Dinos option under [ActJumpNew] in ATXconfig.ini to prevent any quadrupeds from jumping
- new optional 3DNow! optimizations (see ATXconfig.ini File Details)
- new FOLLOWDINO, OBJ, OBJN, OBJF, CDINO, and GSPD diagnostic cheats (see CONSOLE COMMANDS/CHEATS)
- new THIRDP[erson] cheat
- ALL functions that depend on time settings (Matrix Effect, TIME cheat, Jumping Dino intervals, etc.) should
  now take into account time spent by user in in-game menu (as well as F1 hints, F12 key assignments)
  HOWEVER, there is still no compensation done for time elapsed if the game is temporarily
  exited via ALT+TAB or similar accelerator commands
- added Game Speed transition settings for Matrix Effect and ActionType 100,
  rewrote much of their code, and modified some default settings and ActionType specs
- BIONICWOMAN cheat no longer interferes with Matrix Effect and ActionType 100,
  but rather disables their effect while the cheat is enabled. BIONICWOMAN can
  no longer be toggled while Matrix Effect or ActionType 100 are in effect
  (whichever feature is enabled first has priority).
- new (trigger-dependant) ActionType : 109 (set default particle type colors)
- new Night Mode (toggle in ATXconfig.ini, under [NightMode] section - play with lights off)
- FLY cheat code rewrite
- fixed null-terminators being written to log file (thanks Metapad!)
- added option for REC cheat, removed some remnants of old recording system
- 2D map load code for savegames now saves entire BMP name buffer (80 bytes)
- ActionTypes 101 (change game speed) and 106 (set new hint) now save data
  to SAVEDMAP.xxx (should now work with savegames)
  Note: Game speed loading from ATX savegames can still be disable via ATXconfig.ini,
  under the [Variables] section, if needed.
- ActionType 103 now properly checks to make sure objects held by player (to reload)
  are in fact of type CGun
- F1 Hint fix: ATX now sets the "Where Am I?" hint (ID = 100) as the default
  hint in case no hint is loaded or hint loading failed in user-made levels
  (Trespasser did not set a default hint)
- TO LEVEL DESIGNERS: New ActionType Reference updated with important info;
  some new ActionTypes' behaviours refined
- Some FANSFAQ questions added, CAnimal class data updated (see Archive)
- 'discovery' of "System Memory" Trepasser registry/ini entry (documented in VIDEO RECORDING)
- included Chronzerg's be.ini randomization file (simply use the batch files in
  the "MAPS\" folder to copy randomization files as needed from now on)
- some major source code rewrites and cleanups (CAnimal names buffer replaced, eliminated
  most large local variable buffers which lead to stack memory issues, etc.)
- Important note:
  It has come to my attention that the "facing angles" used
  throughout the source code and referred to in many files in this
  package are actually (and obviously!!!) VECTOR components
  and NOT angles. THUS, ALL MENTIONS OF "FACING ANGLE" VALUES SHOULD
  BE INTERPRETED AS "FACING VECTOR" VALUES. I consider this the most
  foolish mistake I have committed so far (DWI would have laughed at me).
  Fortunately, only the FLY cheat was affected (fixed).

V1.40:
- fixed potential FLY cheat issue
- misc. code cleanups
- slight RECCOMPRESS.exe update
- new "LOAD" (level) cheat
- all documentation previously scattered throughout "MAPS\"
  folder has been moved to "ATX_DOCS\" (all documentation updates
  will thus be in the "ATX_DOCS\" folder if you are extracting
  the package over a previous version)
- new level load background extension (see LEVEL-LOAD BACKGROUND EXTENSIONS)
- MaxActiveDinos highly experimental hack (see MAX ACTIVE DINOS)

V1.36:
- updated source of ATYPEX.DLL, ATX_PATCHER.EXE and RECCOMPRESS.EXE
  for FASM version 1.64
- REC cheat updates (see VIDEO RECORDING)
- "SHOWDD" cheat added (could already be done; simply a convenience)
- some optimizations (FLY cheat, experimental EXE code modifications)
- experimental Dinosaur vocal T-Script value additions (see DINOSAUR VOCAL T-SCRIPT ADDITIONS)
- fixed cheat table lengths (did not cause problems for previous
  versions due to lower amounts of cheats)
- fixed "DMAP.scx" file being created (did not cause problems; would
  only replace "temp.scx")
- fixed instance position modification code for dino randomizer
  (would sometimes crash in demo, though usually run fine in full version)
  -> code now uses standard teleportation method for instances
- fixed some stack overflows (dino randomizer, 2d map loading)
- new menu items updated (can be toggled via INI, now uses hotspots
  for checkboxes, checkboxes should now always toggle properly)
- fixed some potential level restart issues
- temporary mainscreen.ddf and render.ddf files are now stored
  in the "MAPS\" folder
- some misc. source cleanups

V1.35:
- experimental "REC" video(-only) capture cheat (see documentation)
- some simple new cheats: "PLAYERHEALTH" (re-implemented),
  "SUPERHP", "NORMALHP", "FPS"

V1.34:
- new menu items (game difficulty, draw distance, etc.)
- minor patcher fix (v2.1)
- 2D map bugs fixed
- MapIndex.ini format slighty modified
- fixed some level restart problems
- dino rand. list files added for levels
  as.scn
  as2.scn
  sum.scn
  (all full-version levels now supported)

V1.33:
- ActJumpNew info in CANIMAL cheat
- some jump-related fixups
- included high resolution patch (enabled by default)
  -> This patch differs slightly from the original in that it only
     writes the 4 different bytes rather than the 10 bytes, 6 of which
     remain the same. Also, for the record, the two instructions that
     the original patch modifies are 6 bytes long each and would theoretically
     require 12 bytes to change entirely, though the two extra bytes would remain
     the same.

V1.32 (test, unreleased):
- fixed bad location values for default demo level 2D map
- experimental jumping dinos! see JUMPING DINOS (ON ACTBITE COMMAND)
  and ATXconfig.ini

V1.31:
- new patcher (v2.0)
  Note: Executables created with the previous command-line patcher
  will still work with this version, the only difference in result
  being the name of the copied/patched file.
- greatly regulated FLY cheat movement speed (especially for
  slower computers)
- MatrixTres on ActBite is now only active when a dino is
  at a certain (customizable) distance/radius from player
- Default MXT and BIONICWOMAN speed changed from 0.300000 to 0.400000
- ATXconfig.ini file rewritten (previous files are now incompatible with v1.31)
- new INI entries
- added dino randomization for the following default levels:
	be.scn (for 1/4 of the 4 dinos, that is)
	jr.scn
	ij.scn
	lab.scn
- added the following entries for dino rand. list files:
	ForceWakeUp
	ForceSleep
	DisableActGetOut
- "ATX_DLLSOURCE" folder renamed to "ATX_SOURCE", and "ATX_PATCHERSOURCE"
  folder renamed and moved to "ATX_SOURCE\" (mentioned here as to not stem
  confusion with previous versions)

- major source code cleanups and general fixes

V1.30:
- new cheats: "HEALDINO" (along the lines of "KILL")
	     "CLOAK" (makes player invisible to dinos)
	     "FLY" (experimental fly mode)
  -> see "New Cheats" for details
- fixed "KILL" cheat crashing game in empty levels
- 1 new ActionType (106) - Load New (F1) Hint (see New ActionType Reference)
- several cheats/functions can now be toggled using user-defined alphanumeric
  keys (a-z, 1-9, all lowercase) via ATXconfig.ini
- draw distance can be set in real-time via specifiable keys in ATXconfig.ini
- added entries to the "CAnimal" cheat ("Fatigue", "Anger", "Pain", etc.)
- sparse info about the general CAnimal and Player classes described
  in the file CANIMAL CLASS INTERNAL STRUCTURES
- fixed potential in-game video memory leak (though hardly noticeable)

NOTES:
- The player's AIType value can no longer be set via T-Scripts (always 5).
  It can only be toggled via specific cheats (CLOAK, FLY).

- I am aware that default game videos, when played in-game, will only
  play in a resolution of 640*480 even in higher resolutions (thus windowed).
  This is normal and can currently not be fixed (due to the amount of problems
  that changing resolutions while in play introduces).

V1.25:
- removed partial IT town map from download; a much better
  version can be found in Rebel's 2D map pack (see main
  ATXTres web site)
- new dino function/browsing cheats (see "New cheats"):
  "CANIMAL", "B", "N", "KILL", "MDINO", "MSEL"
- new experimental list-based random dino locator (see OBJECT RANDOMIZER)
  (note: this package only includes an example list for the town level)
- fixed problem (in most cases) where loading an empty level
  (w/o dinos) after loading a populated level would crash the game

V1.24:
- added a few experimental INI entries (i.e.,"DSWP" to
  disable swap/.swp file deletion; some AI control entries)
- general fixes (some memory leaks; better memory management)
- updated "Known Bugs" list (odd crashes)
- included general variable information in package
  ("ATX_DOCS\ATX_OTHERINFO\" folder) and FAQ
- fixed ActionType count values (i.e., LoopCount, Frame)
  not being reset upon level restart (in most cases)
  * thanks to Rebel and Remdul for the initial info about
    the AI-related strings (cheap hacks, but they work!)

V1.23:
  (scrapped)

V1.22:
- LOC, MAP, and TIME cheats can now be used simultaneously
  (LOC and TIME supersede MAP in display)
- fixed some ATXconfig.ini file issues

V1.21:
- added ATYPEX.DLL error logging via "ATX_LOGFILE.txt"
- removed two consecutive error messages
- more protection fixes (this version was successfully
  _loaded_ on a copy of Windows XP Home Edition)

V1.2:
- fixed empty export table
- fixed some compatibility issues (for picky WinXP protection)
- DEMO_LEVEL_MAP.bmp's resolution has been reduced

V1.1:
- added new ActionType: SMK video playback
  -> IMPORTANT: READ NEW ACTIONTYPE REFERENCE FOR DETAILS
- added new cheat: counter ("TIME","RESET")


*** Note: "test" versions refer to unreleased versions.

KNOWN BUGS
-> BACK TO CONTENTS
- If you attempt to load a level and get a Trespasser message saying
  that you are out of hard drive space to load the level, you should
  exit the game before attempting to load any other levels (and, of course,
  tweak your tpass.ini or registry settings to allow more space to be
  allocated, or free up some hard drive space)

- Using the AIM function/cheat in the North Pole Chaos level may
  crash the game (thanks to GigaY2k). It seems to cause memory
  errors and occurs mainly when the aimdot ray intersects with the terrain.
  Not sure whether error occurs due to simple lack of memory (generated by CFastHeap)
  or due to terrain structure itself.

- Changing video drivers (SOFTWARE/DIRECT3D) while a game is running
  can cause problems and is greatly discouraged. Typically, doing so will
  cause Trespasser to re-initialize a level, which will cause ATX to treat it
  as a new level load. Some features may behave unexpectedly.
  Please change video modes only when doing so from the Main Menu screen.

- The Video Options menu Draw Distance slider value is not
  affected by the menu's OK and CANCEL buttons. The draw distance
  is set as soon as the slider is moved.

- The in-game draw distance hotkeys do not save the draw distance
  after the game is exited.

- All functions that depend on time values (TIME cheat, Matrix
  Effect, etc.) DO NOT compensate for time spent out of the
  game window, such as when ALT+TAB or similar keyboard commands
  are used.

- In-game videos may not play in same resolution as the in-game resolution (may seem
  windowed). They will most likely play in the resolution of the startup menu (which
  is always 640*480). I do not recommend playing in resolutions lower than 640*480 when
  playing levels with in-game videos.

- Player coordinates on the map are dependant on the accuracy
  of the custom map's settings. The example bitmap(s) provided
  in this package are not accurate.

- Setting the game speed higher than 1.000000 _may_ cause crashes under
  some circumstances (more likely when in software mode).

- TresStrDbg may occasionally not display output properly
  (i.e., white text on white background). Reboot your computer
  to fix this.

- If the level files in your "Patch" folder do not match
  the ones from the "Tres CD" directory, some features may
  not work properly upon level restart (this typically applies
  to those who installed the large 1.1 Trespasser patch).

- Some user-made levels have occasional problems using Trespasser's software
  mode. Because of this, using the windowed mode (which requires software mode)
  may cause crashes and/or lockups and is not recommended for any level
  that is meant to run in hardware video mode.

- All cheats that manipulate camera movement are prone to errors/crashes/general
  misbehavior. Please read their respective documentations in the cheat documentation
  section of this file. Also, some of these cheats may produce sudden bursts of movement
  upon keypress when encountering framerate slowdowns at the same moment. This is
  due to the custom input system; no fix will be attempted.

- While in-game, it often happens that pressing the ESC key will not
  show the menu on the first try. This is a Trespasser bug, and is not
  caused by ATX. You may have to press and hold the ESC key to be able
  to navigate the menu.

- All interval and time-based values are constant and will not be modified
  to reflect game speed changes. As a result, ANY ATX-BASED FEATURE THAT
  RELIES ON TIME VALUES WILL NOT BE AFFECTED BY CHANGES IN THE GAME SPEED
  VARIABLE.

- In some cases, after restarting a level, Trespasser does not re-initialize
  the dino instances properly, causing them to 'forget' certain actions. One
  of these is the "ActBite" behavior. The dino jump code relies on the latter and
  will not work if it does not. You may need to restart the game to fix this.

- In-game videos require that the "NoVideo" registry entry (for full game version)
  or INI file entry (for demo) be set to 0 or be absent. If its value is set to 1,
  all videos, including those summoned by ActionType 105, will be dismissed.

- Windowed Trespasser and TresStrDbg may not function properly depending on your video
  card drivers and operating system. These are provided for testing purposes only.

- Some features may not function or display properly in resolutions lower than 640*480.


INSTALLATION
-> BACK TO CONTENTS

* To use ATX with the full version of Trespasser, you must first install the official 1.1 large or small patch (1.0.117.0). You can download these patches at various locations, such as 3DGamers. If you are using a non-US version of the game, you may not necessarily be able to apply these patches to your game. You will need to acquire a pre-patched 1.1 game executable and place it in your main game directory, and then apply the following steps using this file (if it has not already been patched using the ATX Patcher).

Simply extract all contents of this package from its root folder into your main Trespasser directory or demo folder. Make sure to preserve pathnames while extracting. Then, run "ATX_PATCHER.exe" and locate your Trespasser executable to be copied and patched. The patcher will give you the name of the new file which will appear in the same directory as the selected file.

Run the newly-created executable* to play with the new features (if the DLL is unable to initialize, a message will be displayed - see "ATX_LOGFILE.txt" for error specifics). Options available directly to the user can be edited using the ATXconfig.ini and the maps defined using MapIndex.ini. All other changes (excluding cheats) can only be made via the levels' T-Scripts.

All ATX documentation can now be found in this file (ATX_README.htm). Simply follow the appropriate links to discover the new features, FAQs, etc. You can also now download supplemental 2D maps (such as Rebel's) from the main ATX website.

* if the program will not run properly under Windows XP, try enabling Windows 95 compatibility mode by right-clicking on the patched executable and selecting "Properties" and so on.

NOTES:
-> IT IS IMPORTANT TO NOTE THAT SOME FEATURES MAY NOT FUNCTION PROPERLY
   WHEN COMBINED WITH OTHERS THAT ARE OF SIMILAR NATURE.

-> YOU ONLY NEED TO PATCH THE EXECUTABLE ONCE, EVEN THROUGH DLL UPDATES. MOST
   OF THE CODE IS FOUND IN THE DLL ITSELF (THIS APPLIES TO ALL UPDATES UNLESS
   OTHERWISE SPECIFIED). ACCIDENTALLY UPDATING AN EXECUTABLE A SECOND TIME WILL
   HAVE NO EFFECT ON THE FILE.

-> ENSURE SUFFICIENT FREE HARD DRIVE SPACE BEFORE RUNNING. ATX (AND OFTEN
   TRESPASSER) DOES NOT CHECK FOR FREE SPACE LIMITATIONS.

-> THE EXECUTABLE DETECTION IS BASED ON FILE SIZE. IF MODIFICATION OF EXE FILE SIZES
   IS PERFORMED, ATYPEX.DLL AND ATX_PATCHER.EXE WILL NOT DETECT THE EXES PROPERLY.

-> IF THE "MAPS\" FOLDER OR ANY OF ITS ORIGINAL SUB-FOLDERS ARE NOT PRESENT WHEN ATX
   TRESPASSER IS RUN, SOME FEATURES MAY NOT WORK PROPERLY (SEE "MAPS\" folder and sub-folders).

-> YOU MAY WANT TO DISABLE ANY ANTI-VIRUS OR MEMORY-MANAGEMENT SOFTWARE BEFORE RUNNING.
   THERE'S A SMALL CHANCE THAT THESE WILL INTERFERE WITH THE LOADING OF ATYPEX.DLL.

-> IF YOU WANT TO USE TresEd-GENERATED SCENE FILES (*.scn) WITH ATX WITHOUT
   REPLACING THE *.scn WITH A TRESPASSER-GENERATED FILE, YOU MUST USE THE ATXconfig.ini
   OPTION DisableFastRestart=1, OR THE GAME WILL BEHAVE UNPREDICTABLY UPON
   LEVEL RESTART


"MAPS\" and sub-folders
-> BACK TO CONTENTS

The "MAPS\" folder is a folder used for all ATX-based features that require initialization files, bitmaps, and anything else that would otherwise clog up your Trespasser folder (which does not include ATXconfig.ini, savegame additions, or REC cheat video dumps). Its name is slightly misleading; it does not necessarily have anything to do with maps in general. It may contain any and all externally-implemented ATX files and data of any type. The name is a remnant of the first versions of ATX, which originally used this folder for the 2D map cheat. The dependancy on this folder has become regular enough that I not could justify renaming it at this stage.

In order to run the ATX version of Trespasser properly, it is essential that the "MAPS\" folder, as well as each of its following sub-folders, be present in the root directory of your Trepasser installation, be it full-version or demo-based:

"MAPS\RAN\" (used by the Object/Instance Randomizer for level-specific *.ini files)
"MAPS\JMP\" (used by the Jumping Dinos routines for level-specific *.ini files)
"MAPS\LBG\" (used to store new level-load background images (*.tga))
"MAPS\NMD\" (used for alternate locations for objects in levels when in Night Mode)
"MAPS\HUD\" (used to store images and location settings for HUD display)
"MAPS\SPT\" (used to store level-specific animal projectile/spitter INI data)
"MAPS\LVL\" (used for misc. level-specific data, including alternate TPAs)

These should not be deleted under any circumstances (i.e., not even if the folders are empty). The following files, with paths respective to the "MAPS\" folder, are also essential to ATX and should not be deleted under any circumstances:

(currently none; here for future reference)

Any other sub-folders or files not named in either of the lists above and found in the "MAPS\" folder may be deleted without causing any harm towards the execution of ATX. A more detailed approach to each of their functions can generally be found in the documentations of their parent features. This note is mainly directed towards those organizing any form of custom redistribution of the ATX package.


ATX SOURCE CODE ("ATX_SOURCE\" folder)
-> BACK TO CONTENTS

The ATYPEX.dll file used by Trespasser as well as all ATX-related utilities is written in assembly and assembled using the FASM compiler (Windows version). The last used FASM version is noted in the "ATX_SOURCE\SOURCE_README.txt" file. In some cases, mainly due to syntax changes, previous or newer versions of FASM may not be able to compile the ATX source.

The source code for ATX is hereby released into the public domain. Anybody is free to change, recompile the source at will, and redistribute it as long as the changes and authors are clearly noted. However, I reserve the right to modify existing code at any time without explicit notification to other developpers.

The "ATX_SOURCE\" folder itself can be deleted from your Trespasser directory at any time; ATX does not make use of this folder at all once it has been compiled.


FREQUENTLY AND NOT-SO-FREQUENTLY ASKED QUESTIONS
-> BACK TO CONTENTS
;=======================================================
Q. How do I install ATX and the new features?
;=======================================================
A. Please read the Installation section.
   Once installed, make sure you run the game from
   the newly-created ATX Trespasser executable in your main
   Trespasser folder (usually "trespass_ATX.exe"), and not
   from your start menu or other shorcuts. Once again, you
   do not have to run the ATX Patcher more than once; when
   you upgrade your version of ATX, all versions share
   the same executable patch. You only need to overwrite
   ATYPEX.dll, ATXconfig.ini, and any files in the "MAPS\" folder.

;=======================================================
Q. Is gameplay paused during in-game video playback?
;=======================================================
A. Yes, it should be. When the user presses a key other
   than ESCAPE (or if the video ends), the video will terminate
   and gameplay will continue where it left off.

   Misc. note: All videos will play in a resolution
   of 640*480, regardless of current video resolution.
   Thus, if you are using a lower resolution, you will
   be missing portions of the displayed video.

;=======================================================
Q. How do I change the draw distance/blocky 2D rendering?
;=======================================================
A. *** As of version 1.34 BETA, the draw distance can be
   modified as expected in the video options menu
   (note: "OK" and "Cancel" buttons have no effect on the Draw
   Distance slider; the new value is set as soon as the slider
   is moved).

   The draw distance variable and others can be set by changing
   values in the ATXconfig.ini file, under the section "Variables".
   Simply open the INI file, look up the appropriate entry,
   and enter a new value (no spaces) after the "=". The default value
   is 15.00000; if your computer is fast enough, try setting it to
   100.00000 or higher (make sure to save your changes afterwards).

   You can also assign hotkeys via the ATXconfig.ini file under the
   "HotKeys" section to increase and/or decrease the draw distance
   while the game is being played.

   The draw distance can also be changed for the normal Trespasser executables
   by modifying their default values with a hex editor at specific addresses.
   See DRAW DISTANCE VARIABLE ADDRESSES for details.

;=======================================================
Q. Can I set the draw distance higher than what the new slider allows?
;=======================================================
A. Yes. The Video Options ATX draw distance slider has a value range
   of 15.000000 to 315.000000. You can set a higher value in ATXconfig.ini
   by looking up the section [Variables] and setting ObjectClarityDrawDistance
   to a higher value. This will not cause any conflicts with the slider;
   as soon as you move it again, the draw distance will revert back to
   a value within the slider's range.

;=======================================================
Q. How do I enable random dinosaur start positions?
;=======================================================
A. For the full-version of Trespasser, it can be toggled
   using the appropriate checkbox in the main menu screen
   of the game or in ATXconfig.ini. Demo level users may
   enable it via ATXconfig.ini (only), but it will have no effect
   unless a corresponding list file is written for the level
   (which will not function easily as dinos are teleported via triggers
   in the default level).

   This feature is only available for certain levels. As
   of version 1.34 BETA, all default full-version Trespasser
   levels are supported. Support for other levels (user-made)
   depends on the willingness of their authors to write
   list files for these. The demo level of Trespasser is
   not supported by default.

;=======================================================
Q. What about the high-resolution patch? Will it work
   with ATX?
;=======================================================
A. As of version 1.34 BETA, the high-resolution patch is
   included in the package, with respect to its original
   authors. If you had already applied it to executable
   before patching using ATX (or after), the patch will
   work fine, but you will not be able to toggle it
   on/off via ATXconfig.ini (always enabled).

   See HIGH-RESOLUTION PATCH for details.

;=======================================================
Q. Ever since installing ATX, every time I save a game,
   a second file named "SAVEDMAP.xxx" appears. What is it?
;=======================================================
A. SAVEDMAP.xxx are files used by ATX to save your game data
   that wasn't included in the Trespasser-generated
   savegame. It typically includes info about the
   new ActionTypes incorporated in ATX, which are exclusive.

;=======================================================
Q. How can I make the raptors jump better?
;=======================================================
A. ATX 1.61 has a few settings that can help a little bit.
   The global defaults can be set in ATXconfig.ini under
   [ActJumpNew]. They are described in the ActJumpNew
   text, with a few example settings.

;=======================================================
Q. Does ATX work with my savegames or with new savegames?
;=======================================================
A. Although a lot of effort has been put into attempting to
   make features compatible with savegames, some may
   unfortunately not work properly under some circumstances
   or even not at all. As a general rule, you should be
   able to load savegames without any major issues, but
   when you save new games under ATX, I can give no guarantee that
   the state of all new features enabled at save time will be preserved when
   you next load them.

;=======================================================
Q. Can I run ATX under Linux?
;=======================================================
A. Although ATX has never been officially author-tested
   to work with Linux, it has reportedly been run successfully
   by some users under some versions of this operating system,
   particularly WINE.

   While not all features are guaranteed to work and
   may be prone to lockups/bugs/crashes, under the right
   conditions and default settings ATX should generally
   run as far as the game goes. However, in order to get
   the mod to load properly, you may have to apply the
   following setting in ATXconfig.ini:
   [General]
   UseOldVirtualProtect=1
   (keep all other values present and tweak as you wish)
   This setting instructs ATX to use a different API
   call before applying hacks in real-time. It can
   counteract an unfinished Linux implementation of
   the standard Windows VirtualProtectEx call by
   using a call to VirtualProtect instead.

   * Note: For more information on running Trespasser/ATX
   under Linux, I would suggest looking up the Linux
   section of the Trescom.org forum. Thanks to Dapper Dan
   and other members for testing ATX under this operating system.

;=======================================================
Q. The game crashes during loading or while in play. ?
;=======================================================
A. This may be due to several factors, including (but not
   limited to) bad MapIndex.ini entries, bad ATXconfig.ini
   entries, or a general flaw. Please keep in mind that
   ATX will always be a BETA. If you do run into crashes
   or unexplainable game behaviour, please e-mail a
   description of the problem at whatever address may currently
   be posted on my website, along with any "error.log" or "ATX_LOGFILE.txt" files
   created in your main Trespasser directory. If the problem
   is visual in nature, I would appreciate screenshots
   as well. Also, please specify your executable type/processor,
   the version of ATX you are using, and your operating system.

;=======================================================
Q. Why is video recording so unbearably slow?
;=======================================================
A. The biggest problem is that screen capture is done by
   copying "screenshots" directly from video memory to standard
   memory. Reading large amounts of data from video memory
   is generally slow. The only alternative I know of is
   to intercept "screenshots" before they are written to
   video memory; but, without the Trespasser source, this
   is virtually impossible to accomplish.
   Update: The ATX v1.50 Video Recording (REC) cheat
   documentation now describes a "System Memory" key that
   can be used to increase raw framerate when recording.

   The encoding process is also extremely lengthy, but fortunately
   can be left at the end of the recording in order to not
   impede on framerate. Note that the routine used by ATX may be
   poor compared to the ones of other programs due to compatibility
   issues with the Video For Windows AVIFile API functions.

;=======================================================
Q. Will ATX diminish game performance?
;=======================================================
A. It may, but the difference is hardly noticeable on
   most fairly recent computers (edit: and even on old ones)
   At its worst, it will consume
   a few extra megabytes of RAM and will slightly diminish
   framerate, but this is the case mainly when many features
   are enabled at once or when large 2D maps are displayed
   in high resolutions. There may be a few seconds
   added to general loading time and some increased disk
   activity during loading, depending on the speed of
   your computer/hard drive and the amount of RAM in the system.

   (As of ATX 1.50) If you have an older AMD processor,
   such as a K6-2 or K6-3, you may want to enable the
   ATX-based 3DNow! optimizations via ATXconfig.ini. They
   may increase performance for some specific features.

;=======================================================
Q. How do I verify which version of ATX I am using?
;=======================================================
A. Right-click on the ATYPEX.dll file where you extracted
   it and select "Properties". Then, select the "Version"
   tab. The current version will be displayed beside
   "File version:".

   * As of version 1.34 BETA, the version number is
   displayed in the top-right corner of the main menu screen,
   as long as the new ATX menus are not disabled.

;=======================================================
Q. What is the "MAPS\" folder for?
;=======================================================
A. As you may have noticed, naming things isn't quite my forte.
   See the "MAPS\" folder and sub-folders portion
   of this file for a more detailed explanation.

;=======================================================
Q. How do I enable maps for specific levels?
;=======================================================
A. See TOP-VIEW 2D MAPS.

;=======================================================
Q. This thing you call "TresStrDbg" locks up as soon as
   I run the game. What gives?
;=======================================================
A. If the wrong values are used in the ATXconfig.ini file,
   the program may stall for a good while (but not indefinitely)
   at a certain string display. You will need to learn how
   to use the keyboard commands to use this feature. Please
   read TRESSTRDBG for more details.

;=======================================================
Q. Windowed mode crashes! And why doesn't have a frame?
;=======================================================
A. The windowed mode is a very basic hack meant to trick
   the video driver into drawing a smaller screen. It does
   not manage a typical window.

   Windowed mode will not work on all systems, but here
   are a few pointers that may help:
   - Run in software mode
   - Set your desktop color settings to 16-bit
   - Use a standard 4:3 desktop resolution (i.e., not widescreen)
   - Switch video drivers
   See WINDOWED MODE (SEMI-)
   for more details.

;=======================================================
Q. How do I enable specific features (MatrixTres, etc.)?
;=======================================================
A. By setting values in the ATXconfig.ini file provided
   in this package. Most entries are described in
   ATXconfig.ini File Details.

;=======================================================
Q. Can you make a stegosaurus wear medieval armor and shoot laser beams?
;=======================================================
A. No. If I could I would have! But, animations and graphics
   in general are out of my league. This includes Anne riding cars,
   dinos riding cars, cars riding dinos, etc.

;=======================================================
Q. Why is ATX written in assembly? Couldn't it have
   been done in a high-level language such as C or C++?
;=======================================================
A. The ATYPEX.dll file could have been written easily
   in another language for the most part. However, the
   bulk of my programming experience is in the assembly
   department and I feel more comfortable using that language.
   Some parts of the DLL would have ultimately required some
   assembly anyway, mainly for code pertaining to
   executable modification.

;=======================================================
Q. Why do some of the new ActionTypes and/or values
   do what could already be done using existing T-Scripts?
;=======================================================
A. Testing purposes, and... general ignorance.

;=======================================================
Q. Why are 2D maps only assigned to levels in a single
   *.ini file, MapIndex.ini? Won't it be annoying to have
   to copy/paste into that file when installing new maps
   with top-view 2D map support?
;=======================================================
A. MapIndex.ini was designed solely for use with existing
   Trespasser levels. New levels do not have to use
   this file to incorporate 2D maps; it is highly
   recommended that new levels use ActionType 102 to
   load maps at level start instead (see New ActionType Reference).

   It would possible to easily add ActionType 102 support to existing
   levels, but this would lead to having to upload and
   download these maps as a separate package.

;=======================================================
Q. I would like to hack Trespasser. Where should I start?
;=======================================================
A. You will need to know assembly programming for this. There
   are plenty of tutorials on-line, as well as good books.
   The "Art of Assembly" (Copyright 1996 by Randall Hyde)
   is a great starting point; I highly suggest looking into the
   Win32 programming editorial from the same author as well. You will
   also need basic Win32 programming knowledge; Iczelion's MASM32 tutorials at
   http://win32asm.cjb.net are very good. I recommend downloading
   the "WIN32HLP" documentation for a standard Win32 API reference,
   as well as the Intel 386 (or later) Programmer's Reference for a standard list
   of integer-based CPU instructions.

   As for tools, there are many available. I use FASM (flat assembler)
   for assembling code, W32DASM v8.93 for disassembling executable files,
   WinHack 2.00 to edit memory on-the-fly, and XVI32 as a hex
   editor. I highly recommend XVI32 and FASM. I also recommend learning
   the MASM syntax, which differs from FASM's, as many of the online
   tutorials are written using this format.

   [Edit: I also highly recommend using the OllyDbg 1.10 disassembler 
    if you are running Windows 2000 or XP. It provides much more flexibility
    for data analysis and for setting breakpoints.]

   Once you have sufficient knowledge, it all comes down to finding
   portions of code that relate to certain aspects of the game. This
   is the difficult part that can only be described as VERY tedious
   hours of debugging. What follows is the actual code modification,
   which is just as involved but can be tricky. It can be done by
   compiling code using an assembly (i.e., FASM) and copying this
   code via a hex editor into the executable, or by using DLL-based
   self-modifying code as is used in ATYPEX.DLL.

   I will not be writing an essays on the matter; this would take
   time that would be better spent hacking. You will have to figure out
   the specifics on your own. However, feel free to ask questions
   about specific EXE addresses or such; I'll answer as long as I don't
   have to write an entire tutorial about it ;).

;=======================================================
Q. How do I set breakpoints with my debugger when running
   a Trespasser executable?
;=======================================================
A. If you're really asking this question, you've probably
   noticed that loading a Trespasser executable into your
   debugger and setting a breakpoint at a code location
   known to be run will lock up the game. That's because
   Trespasser runs in DirectDraw Exclusive cooperative mode,
   and keyboard commands (such as ALT-TAB) are ignored.
   Generally, your debugger will run into the breakpoint,
   but you'll be unable to access your debugger's interface.

   First of all, few debuggers seem to work with Trespasser.
   The game already has an error handler and manages a few
   threads at a time, and some debuggers seem to go haywire
   if you try to use them at all. The only one I've bothered
   to try to use extensively is W32Dasm v8.93, by URSoft.
   All you need to do is get yourself a legal copy, disassemble
   the ATX-modified version of the Trespasser executable, enable
   windowed mode in ATXconfig.ini, set an adequate resolution
   in tpass.ini or in the registry (640*480, 800*600, or anything
   smaller than your desktop size), and you're set for setting
   breakpoints (you'll maybe need to use ALT-TAB to access
   the interface once the breakpoint is reached).

;=======================================================
Q. How do I disable videos?
;=======================================================
A. For the full Trespasser game, this can be done by
   creating a registry entry in the main Trespasser registry
   key (HKEY_LOCAL_MACHINE\SOFTWARE\DreamWorks Interactive\Trespasser)
   with the name "NoVideo" and of type "DWORD". Setting
   the entry to a value of "1" will disable all videos,
   including in-game videos set off using ATXTres's
   ActionType 105.

   For the demo, the same can be done by adding a "NoVideo"
   entry with a value of "1" in the "tpass.ini" file in the
   demo folder.

;=======================================================
Q. How do I use the cheats/cheat-enabled features?
;=======================================================
A. During the game, press CTRL+F11 and enter the appropriate
   cheat/feature's name in the console. Then, press Enter.
   Use the ESCape key to exit the console afterwards.

;=======================================================
Q. I get an error message upon loading Trespasser and
   I have recently installed new sound drivers. Why?
;=======================================================
A. Some sound card drivers ship with a file named
   "A3D.dll". Trespasser normally uses this file in
   the windows system directory to play 3D sounds.
   However, some sound cards use the file of the
   same name for other purposes; as a result, when
   Trespasser tries to use it, it does not function
   properly. Try removing this file temporarily
   from your Windows "System\" folder; in some cases,
   this may allow the game to run with the original
   game executables. However, the better alternative
   is to read GENERAL SOUND PROBLEM FIX (A3D.DLL)
   and use the ATX feature to do this (it will not
   apply to the original game executables, unfortunately).

   It is possible that the 'A3D.dll' file be source of
   other problems as well [such as having no sound or
   corrupted video playback].

;=======================================================
Q. I get horrible flickering whenever I run Trespasser
   in software mode in the menus and in some parts
   of the screen during the game. I am using a 3dfx Voodoo 3/4/5 card.
   What's going on?
;=======================================================
A. I have noticed this problem to be frequent when using
   numerous third-party video drivers. I highly recommend
   re-installing the official 1.05.00 or 1.07.00 drivers
   (for Win9x/ME).

;=======================================================
Q. Why do objects flicker when I run the game in
   hardware mode?
;=======================================================
A. This problem has been around for awhile. Although there
   is no definite answer, using older drivers for your
   video card is generally suggested as a solution.
   If you have a Geforce 3 card running under Win98SE/ME,
   try getting a hold of the 40.72 WHQL-certified driver
   package from Nvidia.

;=======================================================
Q. Why are there many different Trespasser executables of
   the same version?
;=======================================================
A. There are three versions of the Trespasser executable
   per executable version. Each is optimized for certain
   types of processors. You can identify these by
   right-clicking on the files, selecting "Properties", and choosing
   the "Version" tab. The proper file is detected, selected, and copied
   upon installation of the game; all three can be found on
   the Trespasser CD, under the "Setup\" folder (though
   they may not exactly match your current executable if you
   have applied a patch to the game).

   The standard executable is of type Pentium (P5) and works with
   all supported processors, including AMD. However, it is only
   used if your processor is a fifth-generation Pentium or Pentium
   with MMX technology. Then comes a Pentium Pro (P6) type
   file which is designed for sixth-generation and latter pentiums
   (PPro, P2, P3, P4, Celeron, etc.). It will also work on AMD Athlon
   processors. Lastly exists an AMD K6-optimized version that will only
   work on AMD K6 or better processors. This executable is optimized
   using 3DNow! and MMX instructions (though not thoroughly). Oddly enough,
   there do not appear to be any MMX optimizations available for Intel processors
   in Trespasser.

   The Trespasser demo executable is a file of the same type as
   the 1.1-patched Pentium (P5) full version exe.

;=======================================================
Q. Are you a real hacker, as in do you have my credit card number?
;=======================================================
A. No, don't worry; that's not my thing. I haven't been "hacking"
   for all that very long either. All I have "hacked" are programs
   which I paid for in full but that did not do justice to the money I had
   paid for them (Buy four new Homeworld CDs just for LAN play? No thanks!).

   Obviously, reverse engineering a game like Trespasser might bring up
   some legal issues, but who's rights am I infringing on if there's really
   no company left to sue me? Who has anything to lose from this?

   And wait; wouldn't this have _helped_ their product, anyway?

;=======================================================
Q. ... And It All Comes Down To This: What does ATXTres stand for?
;=======================================================
A. Not much, really. Originally, it stood for
   something like "eXtra ActionTypes Trespasser" or
   "Trespasser ActionTypes X", because it was made mainly
   for the new T-Script ActionType values. I don't really
   remember what the actual wording was; it just sort of
   all merged into one acronym. I guess now I'm kind of hoping
   it'll just make a new word out of itself.


ATXCONFIG.INI ENTRY INFORMATION
-> BACK TO CONTENTS
* In the example INI below, the values have been omitted. For
a list of default values, see the original ATXconfig.ini file
from the ATX current version package.

ATXconfig.ini is the file used to enable/disable features
and change ATYPEX.DLL's default values. Generally, for
enabling/disabling functions, 0 = false and 1 = true.
YOU SHOULD NEVER ATTEMPT TO MODIFY THIS FILE WHILE THE GAME IS OPEN.

Unlike previous ATX versions, unless otherwise specified,
leaving values to 0 will NOT load specified default values
(default values are loaded if no valid entry is found or if file
is absent). All values which include decimals are necessarily
floating-point values (the opposite is not true).

Any values that begin with "0x" are hexadecimal values and
should only contain 8 characters (excluding "x") ranging between
"0" to "9" and "A" to "F". i.e., 0x1209ABDF.

The high resolutions hack is the property of Mark Grant, a.k.a.
MrLaggy, and the sadly deceased TSOrd. I do not take any credit
for their work; it is only provided here for convenience and as
a tribute to those members. If this does not conform with the
authors' wishes for any reason, it will be removed A.S.A.P.

[General]
EnableTimedTresStrDbg=			;See TRESSTRDBG. Also display interval in milliseconds (non-zero to enable).
EnableWindowedMode=			;See WINDOWED MODE (SEMI-). SOFTWARE MODE ONLY. Will crash with Direct3D enabled.
DisableDemoExitScreen=			;See DEMO VERSION EXIT SCREEN REMOVAL
EnableInstanceRandomizer=		;See OBJECT RANDOMIZER. ONLY for levels with existing list files
EnableHighResolutions=			;See HIGH-RESOLUTION PATCH
GameDifficulty= 			;See DIFFICULTY SETTINGS
EnableNewMenuItems=			;see NEW MENU OPTIONS
NewDinoSoundTypesCount= 		;See DINOSAUR VOCAL T-SCRIPT ADDITIONS
MaxActiveDinos= 			;See MAX ACTIVE DINOS
EnableNewLevelLoadBGs=			;See LEVEL-LOAD BACKGROUND EXTENSIONS
DisableFastRestart=			;See FAST LEVEL RESTART DISABLING
EnableATX3DNowOptimizations=		;See 3DNOW! OPTIMIZATIONS. ONLY for AMD processors
UseOldVirtualProtect=			;For testing purposes. Uses VirtualProtect instead of VirtualProtectEx.
UseHUD= 				;See HUD

[Variables]				;For this section, 0 = use value from exe. See
ObjectClarityDrawDistance=		;EXE default = 15.000000. See DRAW DISTANCE AND GAME SPEED VARIABLES
Gravity=				;EXE default = 10.000000
NormalGameSpeed=			;EXE default = 1.000000
OverrideSaveGameSpeed=			;As of ATX 1.50 and later, game speed is saved for specific levels; thus, changing
					;NormalGameSpeed will have no effect on savegames. In order to bypass this behavior,
					;set OverrideSaveGameSpeed=1 and the value for NormalGameSpeed will be used for savegames.
					;To be precise, game speed values will still be saved to ATX-based savegames (to prevent
					;compatiblity problems), but they will not be loaded from these savegames.
CameraFOVDegrees=			;This value can be used to override the default camera Field Of View when a level loads.
					;It is in Euler angles (i.e., typically between 20.0 and 90.0 degrees). Levels may change
					;this value for visual effects after it has been initially applied. The default game value
					;for the applied CameraFOV is about (or exactly) 75.000000.

[FlyCheat]				;See FLY
InputAutoRepeatDelay=			;Minimum delay for keyboard autorepeat, in milliseconds.
PlayerMovementSpeed=			;Every keystroke will move player by this distance.

[MatrixTres]				;See MATRIX EFFECT
EnableMXTOnActBite=			;Matrix effect for dino attacks (based on biting behavior).
MinMXTSlowdownDuration= 		;Minimum duration of Matrix effect, in milliseconds - INTEGER
BIONICWOMANMXTSlowdownSpeed=		;Game speed used for Matrix effect and BIONICWOMAN cheat.
ActBitePlayerDinoRadius=		;Maximum player-dino radius in which can be launched the Matrix effect.
MXTEnterTransitionInterval=		;(Integer) Duration of linear game speed transition at start of effect
MXTExitTransitionInterval=		;(Integer) Duration of linear game speed transition at end of effect

[HotKeys]				;See HOTKEYS
ToggleNewKeys=				;Note: This key will be intrusive.
DecreaseDrawDistance=			;Message showing new value will be shown upon keypress.
IncreaseDrawDistance=
ExitATXDRVMode= 			;ignore.
LINSTCycleLeft= 			;ignore.
LINSTCycleRight=			;ignore.
LINSTCyclePrevious=			;ignore.

[AISettings]				;See AI HACKS
AllowDinosInBuildings=
ForceNoStayNearTarget=
ForceNoStayAwayTarget=
AddHitPointsToAllDinos=
AddFreezeDistanceToAllDinos=

[Troubleshooting]
DisableA3DdllDetection= 		;See SOUND PROBLEM FIX (A3D.DLL).
					;Enable this to fix some audio problems and general errors
OutputDirectDrawVidModeEnum=		;See HIGH-RESOLUTION PATCH
ForcedVideoModesList=			;See HIGH-RESOLUTION PATCH
OverrideMaxResolutionX= 		;See HIGH-RESOLUTION PATCH
UseClassOutputter=			;DO NOT USE.
DisableSwapFileDeletion=		;Removes limit on amount of *.SWP files that can be created (for faster loading). Ensure
					;sufficient hard drive space before enabling.

[ActJumpNewSettings]			;See JUMPING DINOS
DisableActJumpNew=
DisableJumpingQuadrupeds=		;This will cause all Trikes, Stegs, Brachis and other possible
					;quadrupeds NOT to jump, while leaving all other dino physics types jumping.
DefaultPush=				;Float value (force)
DefaultJumpAngle=			;Float value (Euler angle, 0 - 90). Higher value will give more "vertical" jumping"
DefaultJumpTendancy=			;Integer value (0 - 100).
DefaultRepeatPeriod=			;Integer value (milliseconds). Minimum elapsed time between a single dino's jumps.
DefaultTendancyCheckPeriod=		;Integer value (milliseconds). Interval used for jump probability. Should be equal to or below DefaultRepeatPeriod.
DefaultMaxBodyTargetDirAngle=		;These are the defaults for the similarly-named (only omitting the "Default" prefix) values described under JUMPING DINOS.
DefaultMaxHeadTargetDirAngle=
DefaultMinTotalVelocity=
DefaultMinDirectionalVelocity=
DefaultMaxDirVelocityAngle=
DefaultMinTargetDistance=
DefaultMaxTargetDistance=

[VideoRecording]			;see VIDEO RECORDING for entries and descriptions for this section.

[FollowDinoCheat]			;See FOLLOWDINO
MouseSensitivity=			;Higher will give faster camera movement
MaxKeyInputRate=			;Affects only input "framerate" for distance change between camera and dino - FLOAT *****
DefaultDistanceFromDino=		;...
DistanceChangeSpeed=			;Speed at which movement the above distance will change (mostly independant of framerate)
VerticalMouseMvtMultiplier=		;set to -1.000000 to invert mouse for vertical movement
					;(to invert horizontal movement, use negative values for MouseSensitivity)

[ThirdPersonCheat]			;See THIRDP
MaxKeyInputRate=			;(same as FollowDinoCheat) *****
ZoomInKey=				;Character key (i.e, ZoomInKey=m for "m" key), 'a' to 'z' only
ZoomOutKey=
ZoomResetKey=
CameraUpKey=
CameraDownKey=
AimGunKey=
AimGunToggleKey=
AIMdotToggleKey=
DefaultZoomDistance=
ZoomChangeSpeed=			;(floats/millisecond)
CameraRotateSpeed=			;(Euler angles per millisecond)
CameraHeightDisplacement=
CameraAngleDefault=			;(Euler angles, -85.000000 to 85.000000)

[GameSaving]
EnableATXQuickSave=
QuickSaveCurrentFileName=		;Filename for "ATX Quick Save" (you should generally let ATX manage this, unless you move your savegames)

;***** Setting these values to lower settings (minimum 5.000000, practical minimum 20.000000)
;      may help framerate on slower systems

[NightMode]				;See NIGHT MODE
EnableNightMode=
FogNearValue=				;Overrides all level-specific values set by ActionType 13. Used mainly to hide sky in software mode.
FogFarValue=				;Overrides all level-specific values set by ActionType 13. Used mainly to hide sky in software mode.
FogColor=				;Fog color. format: 0x00RRGGBB
					;Note: There is a bug in Trespasser that causes fog color to be updated one level load late when
					;modified via ActionType 05 in hardware mode (on my video card). I do not know if it is driver/video device dependent,
					;but it does imply that Night Mode can certainly not be toggled by a menu option.
CParticlesColorMax=			;Defines the maximum color value for the default particle types, that is, only the currently-supported default
					;particle types. All default particle type colors will be resized proportionally to this value. format: 0x00RRGGBB
CParticlesTypes=31			;Specifies which of the 6 default particle types to substract color from.
					;See "ATX_SOURCE\Data\constants.inc" for definitions; simply add the constants
					;for the respective types that need to be affected and store the result here.
DefaultGlobalClutStart= 		;Overrides all level-specific default global clut values.
DefaultGlobalClutStop=
FixedAmbientLight=			;Overrides all level-specific AmbientLight values set by ActionType 06.
					;Use -1.0 to not use this value (note: any other negative values will crash the game).
SkyHeight=				;Set sky height. A very high value is used to hide the sky in hardware mode (may or may not be driver-dependent).
					;Some credit for the night feature goes to Rebel for the 'dark demo' level, as well
					;as whoever else might have contributed to its creation, and also Andres, of course,
					;for the T-Script reference.
FogPower=				;Fog setting. Set to -1.000000 to use levels' values.
FogHalf=				;Fog setting. Set to -1.000000 to use levels' values.

[FogSettings]				;See FOG SETTINGS
DefaultGameFogColor=
OverrideGameFogValues=			;This entry was previously named "DisableGameFog".
FogPowerForcedValue=
FogHalfForcedValue=

[TPAFiles]				;See TPA (MENU) FILE RELOCATION
AlternateMenuTPA=			;* should not contain "" characters. To not use this entry, simply set to 0.
DisableAlternateLevelTPAs=		;Set this to 1 to disable use of level-specific in-game alternate TPA sound files ("pack" files).
					;Can be used for troubleshooting.

[PathTracing]
EnablePathTracing=			;Set to 1 to enable feature globally, 0 to disable.
UpdateInterval= 			;In milliseconds (Integer value only). Minimum time between two recorded positions/cursors.
MaxPositions=				;Maximum number of cursors/recorded positions (Integer value only).
DisplayTimePerPosition= 		;In milliseconds (Integer value only). Total display time for a single recorded position/cursor.
FadeDelay=				;In milliseconds (Integer value only). Time before a cursor starts to fade out, from the time it first appeared.
MinPositionRadius=			;In-game distance value (Float value). Minimum distance between two cursors for the newest one to be recorded and displayed.
CursorColor=				;24-bit RGB value (Hexadecimal value). Color of cursor, blended with the map's colors (using OR logic). format: 0x00BBGGRR


NEW ACTIONTYPE REFERENCE
-> BACK TO CONTENTS

New ActionTypes are values that can be used in Trespasser levels using T-Scripts, and typically, via Andres's TresEd level editor. ActionTypes are integer values specified in trigger instances that perform certains actions, often using secondary script values to define the ActionType's behaviour. The new ActionTypes provided by ATX start at number 100 and generally work with most trigger types, except where noted differently.

Because of the limited availability of T-Script entry names, the nature of these names may not relate to the nature of the actions or values. Also, the types of data used for certain entries may differ from the types used for the same entries in the default level files. This has no effect on compatibility.

Unless otherwise specified, all T-Script values other than the ActionType ID integer are optional.

Please refrain from using ActionTypes without valid parameters. If the ActionType values dictate no real-time action upon call, space will still be allocated for the ActionType object. This is no impedance to general gameplay, but will simply waste memory.

Lastly, all new ActionTypes and values will conserve the current T-Script entry names and values throughout all DLL updates. ActionTypes and values may be added, but none of the existing ones will be modified (though recommendations may be made relating to functionality and also changed periodically). So far, the only exception to this has been a modification of the default "LoopCount" value for AT105 in ATX v1.50 (changed from true to false).

Note: Do not include brackets.

- ActionType 100 - MatrixTres effect with Timer
- ActionType 101 - Set new game speed
- ActionType 102 - Set New Map (for all map displays henceforth)
- ActionType 103 - Reload Anne's currently active gun(s) (no animation)
- ActionType 104 - Modify Anne's health (no voiceovers)
- ActionType 105 - SMK Video Playback
- ActionType 106 - Load New Hint (viewable via F1 key)
- ActionType 109 - Set CParticles Colors (CStartTrigger only)
- ActionType 110 - Set Object Fixed Speed
- ActionType 111 - End Object Fixed Speed
- ActionType 112 - Set Mouse/Keyboard Input State
- ActionType 113 - Set Player AIType
- ActionType 114 - Randomized Instance Teleport
- ActionType 115 - Use Object (a.k.a. Fire Gun)
- ActionType 116 - Force Dino Jump

;===========================================================
!!!!!!!!! IMPORTANT NOTE FOR CStartTriggers !!!!!!!!!!!
;===========================================================
(does not apply to ActionType 109)

*** For those of you who would rather not read this text, the
basic message is: do not use these ActionTypes in CStartTriggers.
Use other types of triggers that can run at level start instead.

Unfortunately, CStartTriggers will only run once per level, that is,
only at the very first level load of the original scene file.
Savegames renamed as *.scn do NOT count as "original scene files"
in this case. Thus, if you load a TresEd-generated scene file,
save a game at level start and then replace the first scene file
with the renamed saved game, CStartTriggers will NEVER be run
in your level. CStartTriggers will also NEVER run when a user chooses
the "Restart Level" menu option (whether the base scene file
was an original or not). However, this does not necessarily
affect the original game level settings, as explained later.

In order to have a trigger _truly_ run at level start and at every
level restart successfully (excluding the loading of a savegame where the
player does not start at the start area), you should use CLocationTriggers
instead of CStartTriggers. Simply place such a trigger directly
around the player's start position (with the player inside
the trigger at level start) and make sure to specify
the following script values in the trigger's script:

{
string Class = "CLocationTrigger"
int FireCount = -1
bool PlayerInTrigger = true	(do not use PlayerEnterTrigger)
...
}

If set up in this fashion, the trigger will run everytime the
player steps inside it, so you should be careful as to make
sure the changes you make will not cause problems if the player
decides to step back into the start area included in the trigger's
geometry. Any other type of trigger that can be set up to run
at every level start and restart will also do just fine.

Trespasser will save most of its internal values to its
savegames, and for the most part, values set by CStartTriggers
in the original levels will be re-applied when the savegame
is loaded. This includes sky data, fog data, etc.
Because of this behaviour, there are few cases where not having
CStartTriggers run at level restart/savegame load will cause problems if you
consider only the original game levels and settings.

However, as described, the ActionTypes functions themselves will not be called when
loading such savegames, only the predefined values that they
set that had been saved will be applied.
Because of this system, most of the new ATX ActionTypes
found below will not work properly with CStartTriggers, because
they will only run once, and never for savegames or *.scn files
recompiled as savegames. As such, the effects of these ActionTypes are not saved in
Trespasser's savegame system (despite near-perfect integration). For these,
it is STRONGLY RECOMMENDED to use CLocationTriggers as described above
or some other variant (perhaps CTimerTriggers, as was suggested to me).
In fact, IF YOU USE ANY ONE OF THE DESIGNATED NEW ACTIONTYPES AT LEAST ONCE IN YOUR
LEVEL, YOU SHOULD SET AN INITIAL VALUES WITH A CLocationTrigger or equivalent trigger.

As for savegames, because the state of these ActionTypes is not included in the normal
Trespasser savegames, they must be saved explicitly by ATX using
a second saving system. However, not all can be saved; those
that are recorded are designated in their respective descriptions
below. Some are explicitly marked as impossible to save. Others
are undefined or untested.

On a last note, it should be noted that you should always use
the FireCount setting of the new ActionType's parent trigger
to designate how many times the trigger and ActionType should
be run. By contrast, several of the new ActionTypes below provide a run-count
setting. I failed to mention that these were mostly provided
for testing purposes and would not always record properly in savegames
or in specific circumstances. I apologize for the inconvenience
this (as well as the CStartTrigger issue) may have caused.

ActionType 100 - MatrixTres effect with Timer
-> BACK TO NEW ACTIONTYPE REFERENCE
-> can also be set to be used internally on ActBite
   (via ATXconfig.ini entry MXTB)

{
int ActionType = 100
int Interval   = [duration of MXT effect, in milliseconds]*
float Speed    = [speed to use during timed MX effect]**
bool Frame     = [should this action type be run only once for this entry?]***
int X	       = [duration of linear transition at start of MXT effect, in milliseconds]****
int Y	       = [duration of linear transition at end of MXT effect, in milliseconds]*****
}
* default  = 4500 (not affected by ATXconfig.ini)
** default = 0.300000 (not affected by ATXconfig.ini)
*** default = false (Note: the parent trigger's FireCount setting should be used instead)
**** default = 0 (no transition)
***** default = 0 (no transition)

This ActionType slows the game to a certain speed for a certain amount
of time determined by the Interval parameter. It has the same effect
as the actual "MatrixTres" hacked executable. Once the interval is
done, the game will revert back to the game speed that was before the
call to this ActionType, which is the normal game speed value that
can be defined using ActionType 101.

As of ATX 1.50, this ActionType accepts two extra values, X and Y. These
are integer time values that determine the duration of the game speed
variation transitions at the beginning and/or at the end of the slowdown
effect. These values are equivalent to the ATXconfig.ini entries
MXTEnterTransitionInterval and MXTExitTransitionInterval, respectively.
In short, they will provide a smooth or smoother transition between
the two game speeds by calculating in a linear fashion and applying
intermediate game speeds using the specified time settings.

It should be noted that the X and Y settings were optimized mostly for
use with the Matrix Effect ATX feature, that is, with constant settings
across many ActionType 100 calls. If you intend to use this feature in
a level, it will work properly, but you should ensure that it is not
possible for the user to trigger an ActionType 100-based trigger while
another is already in effect. Game speed changes may otherwise not
be smooth as expected.

This state if this ActionType can not and thus will not be saved in savegames.
It will also unfortunately not distinguish whether the user is in-game
or browsing the game menu, which will cause time counters to run even
when the user is not momently playing.

ActionType 101 - Set new game speed
-> BACK TO NEW ACTIONTYPE REFERENCE
{
int ActionType = 101
float Speed    = [speed to use during timed MX effect] *
bool Frame     = [should this actiontype be run only once for this entry?] **
}
* default = 0.300000 (can be changed via INI file)
** default = false (Note: the parent trigger's FireCount setting should be used instead)

This simply sets the game speed to a certain value, which becomes the
'normal' game speed until it is modified again using this function.
This ActionType can be used to slow down the game inside a specific
location, for example, using boolean values "PlayerEnterTrigger" and
"PlayerLeaveTrigger" in CLocation triggers. As explained above, this
function also dictates the return speed value for ActionType 100, as
well as the normal "BIONICWOMAN" cheat return speed.

Note: Although the game speed is changed globally, when a new level
is loaded or if the current level is re-loaded, the original game speed
(as defined in the EXE or in ATXconfig.ini) is reset by ATX. Also,
this ActionType has priority over the NormalGameSpeed setting found
in ATXconfig.ini, as well as the EXE's default game speed.

As of ATX 1.50, game speed changes affected by this AT will be saved
in ATX-based savegames. This behaviour can be overridden in ATXconfig.ini
(by preventing game speeds from being loaded from the savegames).

ActionType 102 - Set New Map (for all map displays henceforth)
-> BACK TO NEW ACTIONTYPE REFERENCE
{
int ActionType	= 102
string Sample	= [specifies a bitmap (*.bmp) file to use as
		   map to display player location]*
float XPos	= [X position for top-left corner of map]**
float YPos	= [Y position for top-left corner of map]**
float X 	= [X position for bottom-right corner of map]**
float Y 	= [Y position for bottom-right corner of map]**
}
* default	= (none)
** default	= 0 (no use to specify)

This will load a bitmap-format map to later be displayed by the
MAP cheat. It automatically replaces any previously loaded map
for viewing. It can be used to load a map for a certain level at
start, and/or change this map once the player reaches a certain
point in the level*.

The bitmap's resolution/size is customizable. Location values will
be calculated in real-time and converted in proportion to the file's
size and anchor values. The horizontal lines of the BMP relate to the
player's X position, while the vertical parts relate to the player's
Y position. The function assumes that the map is aligned with the
level's/game's X axis and Y axis. The function will not work properly
with maps that do not follow this rule. It is the designer's
responsibility to ensure that his or her map is properly oriented and
is proportioned to the XPos, YPos, X, and Y values.

The bitmap's file name can, theoretically, be a maximum of 79 bytes,
including extension.

If the bitmap cannot be loaded due to memory contraints or other
reasons, a "no bitmap" message will be displayed. I have only tested
24-bit color BMPs that were created using MSPaint to work with this
function, but any program that can save the same types of bitmaps
should work.

* IMPORTANT: DO NOT INCLUDE PATHS. ALL BITMAPS SHOULD BE REFERENCED
DIRECTLY AND PLACED IN THE "MAPS\" FOLDER.

If you are switching maps in a level, one general tactic is to use CLocationTrigger "walls"
for every portion of the level that requires a new map, each with unlimited Firecounts,
and a more geometric trigger for the initial map-set location trigger of the level (at level start).
This way, if the played decides to go back in the level or restart, he
will inevitably have to pass through the last "wall" and reload the previous
map; or, if he restarts the level, he will enter the initial trigger and load
the initial 2D map.

This ActionType's effects are preserved in ATX-based savegames.

ActionType 103 - Reload Anne's currently active gun(s) (no animation)
-> BACK TO NEW ACTIONTYPE REFERENCE
* This AT has been updated in ATX 1.59.

{
int ActionType	 = 103
int Ammo	 = [force number of rounds for current gun]*
int AltAmmoCount = [number of rounds to substract from MaxAmmo
		    before reloading]**
int LoopCount	 = [how many times should this same ActionType be run?]***
int Frame	 = [which weapon to apply ALL above settings to]****
string A00	 = [if present, only apply reload if gun instance matches this name or
		    any of the following names specified in the consecutive Axx strings]*****
string A01	 = [see above]*****
...
string Axx	 = [see above]*****
}
* default	 = (unused)
** default	 = (unused)
*** default	 = -1 (no limit) (Note: the parent trigger's FireCount setting should be used instead)
**** default	 = 1 -> apply only to primary 'hand' weapon
 other values:	   2 -> apply to secondary weapon only
		   3 -> apply to both weapons
***** default	 = none (apply reload to any instances)

This will reload Anne's currently active gun(s) using the gun's/guns'
"MaxAmmo" value. If the extra entries are used, this value can
be overridden. The Ammo value supersedes the AltAmmoCount value.
Note that the AltAmmoCount can be a negative value that will instead
add to the "MaxAmmo" value (though not necessarily recommended in all
situations). Changes are only made to guns in the 'hand' and/or
holstered states that are present upon call. These values can also
be used to add more ammo than the gun's original clip size would allow.

Naturally, however, there is no reloading animation, but the used
trigger could be programmed to play a voiceover as the reloading
is done. This action could be used to create "reload points" from
within a level, provided the level's gun objects are properly set
(see below).

Note: The "Ammo" T-Script entry (not the one above) only appears to be
used in "CGun" classes where the "MaxAmmo" entry is not present. If
the latter is present, its value will overwrite the "Ammo" value.

However, if only the "Ammo" entry is present, the unused "MaxAmmo"
setting will still be present in the initialized class and WILL BE
SET TO 100. As a result, if this particular gun is reloaded with this
ActionType, it will contain 100 rounds and the voiceovers may not work
properly depending on the gun and other settings. Some default Trespasser
levels' guns do not have the "MaxAmmo" value, and, as a result, should be
updated to use the "MaxAmmo" setting instead to ensure compatibility
with ActionType 103.

* ATX 1.59 adds A00, A01,..., Axx entries to this AT that allow you
to specify CGun instances to limit which weapon instances can be
reloaded by this triggered AT103 instance. If no Axx strings are
specified (the default setting), AT103 will reload any weapon the
player may be carrying. To restrict which gun instances may be reloaded
when the ActionType is fired, simply put their names after the Axx strings, such as:
string A00 = "MyCGun01-00"
string A01 = "Boom02-44"
string A02 = "Bam09-36"
You may put as many of these instances as there are Axx strings (about 200).
The only restrictions are that the first instance must start with the A00 entry
and all the others (if any) must use Axx entries that are numbering consecutively.
ATX will stop scanning for instances as soon as it reaches a Axx number that
does not have an instance name. If you specify invalid instances, they will
be disregarded by ATX (no crash, but if not one of your instances is valid,
the ActionType will never reload).

ActionType 104 - Modify Anne's health (no voiceovers)
-> BACK TO NEW ACTIONTYPE REFERENCE
{
int ActionType	 = 104
float Frame	 = [hit points to substract from Anne's current health]*
bool LoopCount	 = [should this action type be run only once for this entry?]**
}
* default = 0 (restore full health)
** default = false (Note: the parent trigger's FireCount setting should be used instead)

This ActionType will substract the specified number of hit points
from Anne's health. If this value is negative, the hit points will
be added instead (obviously). If the specified number is 0, the
function will restore Anne's full health.

This ActionType does not play any voiceovers. These would have
to be added separately using T-Script entries.

ActionType 105 - SMK Video Playback
-> BACK TO NEW ACTIONTYPE REFERENCE
{
int ActionType	 = 105
string Sample	 = [video filename as "menu\[videoname]" -> NO EXTENSION OR BRACKETS]*
bool LoopCount	 = [should this actiontype be run only once for this entry?]**
}
* default = -1 (none)
** default = false (UPDATED: ATX 1.50, Dec 8, 2005)
	     (Note: the parent trigger's FireCount setting should be used instead)

This ActionType will play the specified SMK video in the
same fashion as the default game videos. It will halt gameplay
for the duration of play and end as soon as user input is
received. The emulated calls appear to work in all standard
video modes.

The only particularity is the video's filename. The file MUST be placed
in the player's "[TRES CD]\data" directory, preferably in
the "menu\" folder (if it is placed here, make sure to include
the directory in the path under the "Sample" string value as above).
It is also important that there be NO FILE EXTENSION added
to the "Sample" string and that the actual file ends with the
"*.SMK" extension.

If the demo executable is used, the video needs only to be placed
in the demo directory's "data\" folder, again, preferably in the
"menu\" sub-folder.

Note: If the registry/INI entry "NoVideo" is set to 1, videos
called by this ActionType will NOT be played, along with any
other intro or in-game videos.

You should not attempt to use this trigger in a CStartTrigger (at all).

ActionType 106 - Load New Hint (viewable via F1 key)
-> BACK TO NEW ACTIONTYPE REFERENCE
{
int ActionType	 = 106
string Sample	 = "[starting string to display as new hint]" *
string Frame	 = "[string to append to first string]" *
}
* default = (none)

This ActionType will load the specified string as the new "hint"
which is displayed when the player presses the F1 key. Carriage
returns are done automatically. String length is not that much of
an issue, but it is not recommended to store more than 3-5
lines of text in a single hint. The Sample entry must be present to
show the new cheat. The optional Frame string, if present, will be
appended to the Sample string. The latter is provided to
counter a possible bug in TresEd when entering longer strings. There
is no difference in the display of either string other than order.

Note that the game's internal string buffer can hold up to 1023 bytes
of text, but it is not recommended to use that much lettering. Also,
an extra space character will be placed between the Sample and Frame
strings (if applicable).

Note: In order to avoid compatibility problems and erronous text display,
if you use this ActionType in a level, you should not use the old ActionType
to set hints.

As of ATX 1.50, the currently displayed hint as set by AT106 will be
saved in ATX-based savegames.

ActionType 107 - ATXDRV Mode Start
-> BACK TO NEW ACTIONTYPE REFERENCE
{
int ActionType	 = 107
string Target	 = "[target instance or instance to affect - object must exist]" *
}
* default = (none)

Reserved for author testing. Do not use.

Author's note to self: Target object's front should be aligned with/facing toward the
positive end of the Y axis (facing "0.0, 1.0, 0.0") when it is imported
(TresEd-based rotation can then be performed without affecting this).

ActionType 108 - ATXDRV Mode Stop
-> BACK TO NEW ACTIONTYPE REFERENCE
{
int ActionType	 = 108
(no other values may be specified for this ActionType)
}

Reserved for author testing. Do not use.

Author's note to self: Can also be stopped by user via [HotKeys] in ATXconfig.ini.

ActionType 109 - Set CParticles Colors (CStartTrigger only)
-> BACK TO NEW ACTIONTYPE REFERENCE
{
int ActionType	 = 109
string Sample	 = [specifies name of particle type to update color] ***
int R		 = [red intensity of color to set; 0 to 255] *
int G		 = [green intensity of color to set; 0 to 255] *
int B		 = [blue intensity of color to set; 0 to 255] *
}
* default = 0 (zero intensity for this component)
*** default = none (no action)

This ActionType will set the particle type referenced by the
Sample string to the 24-bit color specified by the R, G, and B
values. The particle type string will typically be one of the following:

* "Blood"
* "Bleed"
* "Water"
* "Terrain"
* "Terrain - Sand"
"Animate"
"Terrain - Concrete"
* "Metal Hard 1"
"Metal Dull 2"
"Oil Barrel 1"
"Terrain - Metal"

The types marked with an asterix (*) compose the 6 default particle
types initialized by the game. You should make sure the names are
exactly as written above, with the the capitalization and not adding
extra spaces. Failure to do so will cause the game to (most likely)
allocate new useless instances that will waste memory. I should note
that the game disregards capitalization internally for all particle
names (note that this is confirmed only for particle names), though you
should follow capitalization as above to stay on the safe side.

IMPORTANT NOTE:
In order to avoid savegame and level restart issues, this ActionType
was designed SOLELY to cooperate with CStartTriggers. This ActionType will
always launch upon level load (it is "hacked" CStartTrigger-dependant AT).
You should not try to have more than one color assignment
per CParticle type per level, simply because there is no point to this.
Simply use this ActionType as if you were specifying a new CParticles class,
but in a CStartTrigger encapsulation and with the script entries described above.

ActionType 110 - Set Object Fixed Speed
-> BACK TO NEW ACTIONTYPE REFERENCE
{
int ActionType	 = 110
string Sample	 = [specifies instance to apply fixed speed to] *
int X		 = [X-component of speed to use] **
int Y		 = [X-component of speed to use] **
int Z		 = [X-component of speed to use] **
int Interval	 = [time during which to keep applying fixed speed, in milliseconds] ***
bool Frame	 = [determines behavior if object was already in fixed-speed mode upon call] ****
}
* default = none
** default = 0.000000
*** default = -1 (no time limit)
**** default = true (always force new settings)

ActionType 110 is a variation of ActionType 10. In fact, it has almost the
same effect as calling ActionType 10 with bool Impulse = false,
bool Frozen = false, and the X,Y,Z speed settings set. The difference is
that ActionType 110 will reset the object's speed as specified at every
frame for the period of time defined by Interval (or indefinitely if set to -1).
This will prevent the game from applying gravity to the object, which is the
main purpose, and also generally remove physics interaction for the object.

The ActionType will stop renewing the object's speed once the time limit is
reached or when ActionType 111 is called. No collision detection will be
performed, so if the instance is not destined to follow a planned path,
its collision response will need to be managed with CCollisionTriggers
and ActionType 111.

The Frame boolean is used when ActionType 110 is called for an object that
was already in fixed speed mode when the function was set off once more. If
set to true, the new speed and interval values will immediately replace the
previous ones. If set to false, the function will have no effect and the
previous fixed speed mode will continue for the specified object.

The state of this ActionType is saved in ATX 1.52 and higher-based savegames.

ActionType 111 - End Object Fixed Speed
-> BACK TO NEW ACTIONTYPE REFERENCE
{
int ActionType	 = 111
string Sample	 = [instance that is to stop receiving speed updates] *
}
* default = none

This ActionType is the conclusion to ActionType 110. It will cause the specified
object to lose its fixed speed and be treated as a standard unfrozen object
as before. It will not freeze or set the instance's speed to zero.
For example, an flying object given a horizontal speed by AT110 and then targetted
by AT111 will not stop suddenly in flight, but will be affected by gravity once more
and interact properly with the physics engine (it will behave as if ActionType 10
had just been called on the object with the speed settings previously specified
in AT110). In short, when AT111 is called, it marks the final speed-set performed by AT110.

If you want the object to stop immediately after the end of the fixed speed
state, you should call ActionType 10 and specify the Target object as well as
bool Frozen = true and/or float X = 0.000000, float Y = 0.000000, float Z = 0.000000.

You would typically call this ActionType to mark the end of an object's
fixed-speed trajectory or in a CCollisionTrigger upon collision with any object.
The latter is particularly important, because AT110 does not attempt to detect
collisions nor coordinate with the physics engine.

ActionType 112 - Set Mouse/Keyboard Input State
-> BACK TO NEW ACTIONTYPE REFERENCE
{
int ActionType	 = 112
int Frame	 = [specifies keyboard state to use] *
int LoopCount	 = [specifies mouse state to use] *
}
* default = -1 (not used/do not modify state)

ActionType 112 will set the state of in-game keyboard and mouse input. It
will not affect console input, menu controls, or any other feature-specific
input commands. It can, however, interfere with the FLY cheat and similar
cheats that disable keyboard commands and/or mouse input.

The value of the Frame integer determines the specific keyboard state to set,
while LoopCount does the same for mouse movement. Mouse clicks are included
in the Frame value as keyboard input and are not related to the LoopCount
setting. You can specify either or both settings in a single call to this ActionType.

Frame values (keyboard/mouse clicks):
  int Frame = 0       -> Disables all player keys and mouse clicks
  int Frame = 1       -> Enables all player keys and mouse clicks
  int Frame = 2       -> Enables all keys and mouse clicks, but disables movement keys (move and jump)
  int Frame = -1      -> No change to keyboard state or mouse clicks

LoopCount values (mouse):
  int LoopCount = 0   -> Disables in-game mouse movement
  int LoopCount = 1   -> Enables in-game mouse movement
  int LoopCount = -1  -> No change to mouse movement state

If you use this ActionType in your level, it is strongly recommended that you warn the user not
to enable cheats such as FOLLOWDINO, THIRDP, or FLY while the game is in play, or specify
the locations in which not to engage in the use of these.

The state of this ActionType is saved in ATX 1.52 and higher-based savegames.

ActionType 113 - Set Player AIType
-> BACK TO NEW ACTIONTYPE REFERENCE
{
int ActionType	 = 113
int Frame	 = [integer value to use for the player instance's AIType value] *
}
* default = 5 (standard player AIType)

This sets the AIType for the current player instance. You will typically set this
to 0 or 5, the first value being to hide the player's AI presence, and the second to
restore it to a visible default. It is recommended that the user be warned not to use the
CLOAK or FLY cheats where this ActionType is used.

The state of this ActionType is saved in ATX 1.52 and higher-based savegames.

ActionType 114 - Randomized Instance Teleport
-> BACK TO NEW ACTIONTYPE REFERENCE
Note: This ActionType is mainly functional, but still undergoing tests. Please
report any problems you run into (taking into account you've read this text).

{

int ActionType	     = 114

group A00 = {	     = MAIN GROUP. Declares instances to be teleported and basic info (REQUIRED)
      int Frame      = [number of A01...Axx LOCATION GROUPs to be used. Value must be between 1 and 199, inclusively] (REQUIRED)
      int Sample     = [number of instances to potentially teleport. Value must be between 1 and 199, inclusively] (REQUIRED)
      string A01     = [first instance to teleport] (REQUIRED)
      string A02     = [second instance to teleport] (MAY BE REQUIRED - DEPENDS ON Sample VALUE)
      ...
      string Axx     = [last instance to teleport, where xx = (int Sample value)] (MAY BE REQUIRED - DEPENDS ON Sample VALUE)
}

group A01 = {	     = LOCATION GROUP 1. first A01...Axx group containing possible locations for instances
      int LoopCount  = [probability of this group being selected during randomization when teleporting] (default = 0 = never use this group)

      group A01      = {		    = SUB-GROUP 1. If LOCATION GROUP 1 is selected by randomization,
					      this A01 sub-group will give the position for the A01 instance defined in the MAIN GROUP.
	    string TeleportDestObjectName   = [name of object of which to use position/orientation] **
	    float X			    = [if TeleportDestObjectName is omitted, use this value as instance's X position] **
	    float Y			    = [if TeleportDestObjectName is omitted, use this value as instance's Y position] **
	    float Z			    = [if TeleportDestObjectName is omitted, use this value as instance's Z position] **
	    float XFree 		    = [if TeleportDestObjectName is omitted, use this value as instance's X orientation, in Euler angles] **
	    float YFree 		    = [if TeleportDestObjectName is omitted, use this value as instance's Y orientation, in Euler angles] **
	    float ZFree 		    = [if TeleportDestObjectName is omitted, use this value as instance's Z orientation, in Euler angles] **
	    bool SetPosition		    = [if true, use position values when affecting instance, either from TeleportDestObjectName or from X, Y, and Z values] *
	    bool SetOrientation 	    = [if true, use orientation values when affecting instance, either from TeleportDestObjectName or from XFree, YFree, and ZFree values] *
	    bool OnTerrain		    = [if true, teleport instance on terrain] *
	    bool HeightRelative 	    = [also same as ActionType 18] *
      }

      group A02      = {		    = SUB-GROUP 2. This is the same as SUB-GROUP 1, but the values used
					      here will give the position for the A02 instance defined in the MAIN GROUP.
	    (...)
      }

      (...)

      group Axx 			    = SUB-GROUP xx. This is the same as the above SUB-GROUPs, but will assign
					      a position to whatever instance is referred to by the Axx name in the MAIN GROUP.
	    (...)			      The value of xx should be between 01 and the value defined by the Sample entry in the MAIN GROUP.
      }

}

group A02 = {	     = LOCATION GROUP 2. This is the exact same as LOCATION GROUP 1, but
		       may contain different sets of positions so that if the randomizer
		       selects this group, different positions will be given to the same instances from MAIN GROUP.
      (...)
}

(...)

group Axx = {	     = LOCATION GROUP xx. This is simply another LOCATION GROUP. There can be as many
		       LOCATION GROUPs as the number defined by the Frame value in the MAIN GROUP. Thus,
		       the value of xx in this case must be between 01 and the value of the Frame entry, inclusively.
      (...)
}

}

* default = true (same as ActionType 18)
  Note: Default ActionType 18 values for these booleans for all 1.1-patched Trespasser
  executables are set to TRUE, and not to FALSE, as might have been believed.
  If SetPosition and SetOrientation are both set to false, the entire SUB-GROUP will be ignored.
** default = Checks for presence of TeleportDestObjectName object. If the entry is omitted
	     or if the object does not exist, checks for and uses X, Y, Z, XFree, YFree, and/or ZFree values
	     for position/orientation, depending on which boolean values are enabled.
	     TeleportDestObjectName is never used at the same time as the aforementioned position/orientation
	     values within the same SUB-GROUP.
	     If TeleportDestObjectName is not found AND if at least one of the required position/orientation
	     entries is not found (also depending on set boolean values), the entire SUB-GROUP
	     will be ignored. Thus, if boolean value SetPosition is set and one of the X, Y, and Z values
	     is absent as well as TeleportDestObjectName, the group will be ignored. The same goes
	     for SetOrientation and XFree, YFree, and ZFree.
	     For example, in order to teleport an object using only position values, you must
	     omit TeleportDestObjectName, explicitly set SetOrientation to false, and ensure
	     that the X, Y, and Z values are present and valid (leaving XFree, YFree, and ZFree present
	     will have no effect). This is only true because the default value of
	     SetPosition is true.

* Note: Axx named strings range between A00 and A199 (inclusively). Names with numbered labels
	lower than 100 must have at least two characters (padded with 0 to the left if necessary, i.e., A01),
	and names with over 100 must have exactly three characters.


This ActionType is a variation of ActionType 18, "Teleport Instance". It uses almost
the same basic parameters, but can also teleport multiple instances (up to 200) as well
as randomly select from sets of destination locations (up to 200 sets, which each
set containing up to 200 locations, one for each instance). Randomized locations
are grouped into these sets so that randomized teleportation will be done in patterns,
contrary to the ATX Instance Randomizer, which selects random values for each instance
individually (regardless of where other instances are teleported).

The definition for ActionType 114 starts off with a group labeled A00, placed
in the same group as the "int ActionType = 114" entry. This group is the MAIN GROUP;
it determines the instances that are to be teleported and the number of location
sets to use. Within this MAIN GROUP are Frame and Sample values which determine
the number of location sets (LOCATION GROUPs) and the number of instances to
teleport, respectively. Following these values should be a series of consecutively-named
strings, A01, A02, A03, etc. (A00 is unused) These strings define the names of
the instances to teleport. There should be exactly as many strings/instances as
the number you define with the Sample value, and the instances must exist.
The order in which the instances are named (i.e., which Axx string they are
each associated with) will later determine which locations to assign to which instance.

Following the MAIN GROUP are a series of consecutively-named LOCATION GROUPs,
A01, A02, A03, etc. (A00 is the MAIN GROUP). These are in the same group as
the definition for the MAIN GROUP and the line "int ActionType = 114". While
it is not strictly required, you should always have the same number of these
groups as the value you defined with the Frame value in the MAIN GROUP.
Each LOCATION GROUP group can hold a LoopCount value and a variable number
of Axx SUB-GROUPs, up to as many of these as there are instances defined
in the MAIN GROUP.

In this context, a LoopCount value is an int that defines the probability
that this specific LOCATION GROUP will be chosen when the ActionType goes off,
out of all the LOCATION GROUPs that have these values defined.
Its default value is 0, which means 'never choose this group'. Thus, if
you do not include a LoopCount entry with a value above 0, this entire LOCATION GROUP
will appear as non-existent.

The total probability value from which a certain group-associated LoopCount value will be selected
is calculated by adding the LoopCount values of every defined LOCATION GROUP.
This way, you can set the total and proportions for these probabilities manually.
For example, if you have four LOCATION GROUPs, A01, A02, A03, and A04, you could
define the values for each of their LoopCount entries as 4, 7, 1, and 3, respectively.
In this case, the total probability value will be (4+7+1+3) = 15.
This value is calculated implicitly, i.e., you do not have to set it anywhere.
With a total value of 15, the LoopCount value 7 has the most importance, and thus
LOCATION GROUP A02 will have the best chance of being picked, while the LoopCount
value 1 (which is the minimum allowed value other than 0) gives LOCATION GROUP A03
the least chance of being picked. If you set the values to 1, 1, 1, and 1 or
2, 2, 2, and 2 (or some other set of equal values), then all LOCATION GROUPs have
the same chances for selection when AT114 is triggered. According to your preferences,
you could even simply put the total out of 100, i.e., set values 25, 25, 25, and 25, and
start adjusting from there. In practice, all LoopCount values should be between
1 and the total probability value you're adding up to, inclusively. You may use
the value 0 for diagnostic purposes (i.e., for disabling groups to test specific
sets of position values).

You could also simply use AT114 to teleport many instances but without randomization.
In this case, you would need only one LOCATION GROUP (A01) and assign it a LoopCount
value of 1 (or higher - will make no difference).

Every LOCATION GROUP can then hold (as mentioned) a variable number
of Axx SUB-GROUPs, up to as many of these as there are instances defined in the MAIN GROUP.
SUB-GROUPs hold the position/orientation values, destination objects, and teleportation
settings for certain instances, in the same fashion as ActionType 18.
Every SUB-GROUP and its position values, within this LOCATION GROUP, are assigned to a
certain instance defined in the MAIN GROUP: the MAIN GROUP instance with the entry name
of A01 is assigned to SUB-GROUP A01, instance string A02 is assigned to SUB-GROUP A02, etc.,
all the way to the last instance's entry number.
For example, if you have the following entries defined in your MAIN GROUP:
int Sample = 2
string A01 = "MyInstance00-00"
string A02 = "MyInstance00-01"
Your LOCATION GROUP(s) could look like this (where xx = LOCATION GROUP number):
group Axx {
      int LoopCount = 1
      group A01 = {
	    (position values for MyInstance00-00)
      }
      group A02 = {
	    (position values for MyInstance00-01)
      }
}
SUB-GROUPs are completely optional. If there is no SUB-GROUP for a certain instance
in a certain LOCATION GROUP, if this LOCATION GROUP is selected at run-time, the
instance will simply not be teleported. For example, you could simply leave a
LOCATION GROUP without any SUB-GROUPs, and when selected, no instances would be
teleported. This can be useful if you have a scenario where you want to teleport
instances but, say, only 50% of the time. In such a case, you could have one
LOCATION GROUP with valid destination positions and a LoopCount of 50, and then
have a second LOCATION GROUP holding only a LoopCount value of 50. If the first
group is selected, the corresponding SUB-GROUPs and their positions will be applied
to the instances, and if the second is selected, no instances will be teleported.

SUB-GROUPs themselves hold values similar to ActionType 18 (AT18), but also add the possibility
of inputting position/orientation values directly, without having to specify
a destination object. First, as in AT18, you can specify the bool values
SetPosition, SetOrientation, OnTerrain, and HeightRelative. It is important to
note that these values are TRUE by default. If you do not wish to use one of
them, you must explicitly set it to FALSE. Also, ATX requires that either
SetPosition, SetOrientation, or both be set to TRUE for every SUB-GROUP, or an
error will be generated. As for the four values' usage, if you use a
destination object, then these have the exact same meaning as if they had been set
by AT18. If you use raw position/orientation values instead of a destination object,
you must explicitly set the SetPosition and SetOrientation bools according to the
values you have supplied (discussed next).

In order to use a destination object for the destination location of an instance,
you simply need to specify the name of the object in the SUB-GROUP such as:
string TeleportDestObjectName	=   "MyDestObject00-00"
It will generally behave in the same way as if it has been specified using
the AT18 TeleportDestObjectName entry. There is, however, one difference:
while the game fetches the destination object's position during level load,
ATX does this in real-time. This would imply that if you specified a destination
object with AT114 and it had moved during gameplay, the teleported instance would
also teleport to a different location than if it had been specified using AT18.
In practice, however, destination objects never move in a level, which discards any
noticeable difference.

If you omit the TeleportDestObjectName, then you must specify all three values
for at least one of the following groups of float entries:
X, Y, and Z or
XFree, YFree, and ZFree
Here, floats X, Y, and Z are direct position values. These are the same coordinates
that you would specify using "Instance Properties" in TresEd or with the Instance
Randomizer.
Floats XFree, YFree, and ZFree are a more recent addition. These hold the
Euler angle rotation values to set for the teleported instance. These are the same
as the angles you would specify under "Instance Properties" in TresEd when
rotating an object.

As noted, if you use the X, Y, and Z or XFree, YFree, and ZFree entries, you
absolutely must set the SetPosition and SetOrientation booleans accordingly.
For example, if you use only X, Y, and Z, you must explicitly set:
bool SetOrientation = false
Because all four booleans are TRUE by default, if you attempt to use only X, Y, and Z
without setting SetOrientation to FALSE, ATX will assume TRUE and look for
the XFree, YFree, and ZFree entries, eventually failing and causing an error.
The same goes for setting only the XFree, YFree, and ZFree entries. Note, however,
that there is no harm in setting extra values. For diagnostic purposes, you
may want to disable orientation forcing but still leave all 6 floats in your
SUB-GROUP as to not have to delete them. In this case, you can simply
specify SetOrientation = false without removing any values.

In general, using X, Y, Z, XFree, YFree, and ZFree values is more efficient
than using a TeleportDestObjectName object, because the game then has one
less object to manage. In practice, however, it might not always be tempting
to copy-paste location and orientation values, and so TeleportDestObjectName
is still fully implemented into AT114.

ActionType 114 has a built-in partial error checker. While it will not detect
invalid destination values or all possible issues, it will try to find
basic errors that may prevent AT114 from working properly. If the game
crashes during level load, make sure to check ATX_LOGFILE.txt to see
if there may be any AT114-related details. AT114 can also crash in-game (upon trigger).
If one of the TeleportDestObjectName objects is invalid, a message will
be printed to ATX_LOGFILE.txt. However, if one of the source instances from
the MAIN GROUP is invalid, you will not get an error message, because
ActionType 18 is internally used to process these in real-time.

The following is an example of an ActionType 114 instance incorporated
inside a CLocationTrigger. The example is commented; anything in a
line that comes after (and including) "//" is not part of the script and
should not be included.

group Trig_MyLocationTrigger = {
    string Class = "CLocationTrigger"
    int BoundVol = 1
    int FireCount = -1
    int AlphaChannel = 0
    group Action00 = {
	int ActionType = 34
	string OverlayText = "Oh no, ambush!"
    }
    group Action01 = {
	int ActionType = 114

	group A00 = {	// MAIN GROUP
	    int Frame = 5			// 5 LOCATION GROUPs to choose from, 5 possible sets of location values
	    int Sample = 4			// 4 instances to teleport, potentially
	    string A01 = "MyInstance00-01"	// names of instances to teleport (case-sensitive, as always)
	    string A02 = "MyInstance00-02"
	    string A03 = "MyInstance00-03"
	    string A04 = "MyInstance00-04"
	}

	// note: total probability count here is: 20+15+40+20+5 = 100

	group A01 = {
	    int LoopCount = 20
		      // this LOCATION GROUP, if selected, will teleport
		      // all 4 instances to different locations using different methods.
	    group A01 = {   // this SUB-GROUP is assigned to "MyInstance00-01"
		string TeleportDestObjectName = "MyDest1ForInstance00-01"
		bool OnTerrain = false		// all other bools will be true
		bool SetOrientation = false
	    }
	    group A02 = {   // this SUB-GROUP is assigned to "MyInstance00-02"
		string TeleportDestObjectName = "MyDest1ForInstance00-02"
	    }
	    group A03 = {   // this SUB-GROUP is assigned to "MyInstance00-03"
		float X = 234.000000		// teleports directly to this position, but keeps instance's orientation
		float Y = -3.000000
		float Z = 0.400000
		bool OnTerrain = false
		bool HeightRelative = false
		bool SetOrientation = false	// this is required, since no XFree/YFree/ZFree
	    }
	    group A04 = {   // this SUB-GROUP is assigned to "MyInstance00-04"
		float X = 3435.000000		// teleports to this position with OnTerrain setting (since default = true)
		float Y = 5555.000000
		float Z = -9.00000
		float XFree = -20.000000	// uses these angle orientation values when teleporting instance
		float YFree = 87.000000
		float ZFree = -0.770000
	    }
	}

	group A02 = {
	    int LoopCount = 15
		      // this group, if selected, will only teleport "MyInstance00-04"
	    group A04 = {   // this SUB-GROUP is assigned to "MyInstance00-04"
		string TeleportDestObjectName = "MyDest2ForInstance00-04"
		bool SetOrientation = false
		bool SetPosition = true 	// not necessary since default is TRUE, but does no harm
	    }
	}

	group A03 = {
	    int LoopCount = 40
		      // this group, if selected, will only teleport the first two instances
	    group A01 = {   // this SUB-GROUP is assigned to "MyInstance00-01"
		float X = -333.000000
		float Y = 55.000000
		float Z = -6.00000
		float XFree = 120.000000
		float YFree = 0.000000
		float ZFree = 0.000000
		bool OnTerrain = false
		bool HeightRelative = false
	    }
	    group A02 = {   // this SUB-GROUP is assigned to "MyInstance00-02"
		string TeleportDestObjectName = "MyDest2ForInstance00-02"
	    }
	}

	group A04 = {
	    int LoopCount = 20
		      // this LOCATION GROUP has no SUB-GROUPs. If it is selected
		      // by the randomizer, none of the "MyInstance00-0x" instances
		      // will be teleported. Since LoopCount is 20 and total is 100,
		      // when the ActionType is triggered, there will thus be
		      // a 20% chance that no instances will be teleported.
	}

	group A05 = {
	    int LoopCount = 5
		      // this is a variation of LOCATION GROUP A01, but doesn't teleport second instance
		      // the destination locations for the two last instances are the sameas LOCATION GROUP A01
	    group A01 = {   // this SUB-GROUP is assigned to "MyInstance00-01"
		string TeleportDestObjectName = "MyDest2ForInstance00-01"
		bool OnTerrain = true
		bool HeightRelative = true
		bool SetOrientation = true
		bool SetPosition = true 	// none of these are necessary, but again, may help keep script clear and readable
	    }
	    group A03 = {   // this SUB-GROUP is assigned to "MyInstance00-03"
		float X = 234.000000		// teleports directly to this position, but keeps instance's orientation
		float Y = -3.000000
		float Z = 0.400000
		bool OnTerrain = false
		bool HeightRelative = false
		bool SetOrientation = false	// this is required, since no XFree/YFree/ZFree
	    }
	    group A04 = {   // this SUB-GROUP is assigned to "MyInstance00-04"
		float X = 3435.000000		// teleports to this position with OnTerrain setting (since default = true)
		float Y = 5555.000000
		float Z = -9.00000
		float XFree = -20.000000	// uses these angle orientation values when teleporting instance
		float YFree = 87.000000
		float ZFree = -0.770000
	    }
	}

    }
}


ActionType 115 - Use Object (a.k.a. Fire Gun)
-> BACK TO NEW ACTIONTYPE REFERENCE
{
int ActionType	     = 115
string Target	     = [Name of instance to 'use']
bool Sample	     = [if true, do not automatically decrease ammo and no voiceovers if CGun instance] *
bool LoopCount	     = [if true, decrease ammo 'manually' at each AT115 launch if CGun instance] *
bool Interval	     = [if true and LoopCount is true, omit gun 'click' when out of ammo]
bool Frame	     = [if true, do not send CMessageUse message for each AT115 launch] *
}
* default = false

This AT will simply call the "Use" method for the instance specified in the Target
string. Different objects will handle this method differently. For CGun instances,
this means effectively firing the gun and decreasing the ammo count. Recoil and
other factors will be applied by the game.

There is one annoyance related to firing a gun with this AT: the game always treats
it as if it was fired by Anne. That means that it WILL play voiceovers for ammo count
and will also naturally decrease ammo count. To overcome this, you can set bool Sample = true,
which will toggle a quasi-WOO cheat temporarily for this function, which will nullify
both of these factors. If you still want ammo count to decrease but without voiceovers,
then you must also set bool LoopCount = true. If LoopCount is set to true, you
can also set bool Interval = true to disable the gun 'click' when it is out of
ammo. You cannot use the Interval boolean if LoopCount is not enabled, and it is
not recommended to use LoopCount = true if bool Sample is not set to true.

The last setting is the Frame bool. If set to true, the function will omit sending
the CMessageUse setting and incrementing the message count when AT115 is launched,
that is after performing the main 'use' method on the instance. This is a simple
technical source-level issue that may however cause the game to respond differently.
It is currently unknown whether sending this message is required for any or all
instances, so you may have to experiment with this setting if you experience
problems.

ActionType 116 - Force Dino Jump
-> BACK TO NEW ACTIONTYPE REFERENCE
{
int ActionType	     = 116
string Target	     = [Name of dino to induce jump upon]
float Push	     = [Force to give dino as jump push] *
float Frame	     = [Jump angle for dino] *
}
* default = 0.000000

A very simple ActionType. Will immediately force the dino to jump upon
launch, unconditionally. You must specify a valid CAnimal instance via
the Target script, as well as valid Push and Frame (angle) values, or
no action will be performed. The Push and Frame values are the equivalents
of the ActJumpNew Push and JumpAngle values, respectively.

This ActionType will not affect the dino's regular jumping behaviour,
so it is possible that normal jumping coincides with jumps initiated
by this AT. Also note that this AT will launch regardless of whether
or not jumping dinos are disabled globally in user settings, and regardless
of any possible ActJumpNew settings, effectively bypassing any values
that may be set in the same dino's *.ini settings.

FEATURES
-> BACK TO CONTENTS

What follows is a list of all major incorporated features found in the current version of ATX. Simply follow the links to obtain information about that feature or group of features. Some are meant for general use, while others are level-dependant and/or will run only when incorporated in or used with custom levels. Any feature not detailed here will be described in the ATXconfig.ini file's documentation.

- 3DNOW! OPTIMIZATIONS
- AI HACKS
- BACKGROUND IMAGE EXTENSIONS FOR LEVEL LOADS
- CONSOLE COMMANDS/CHEATS
- DEMO VERSION EXIT SCREEN REMOVAL
- DIFFICULTY SETTINGS
- DINOSAUR VOCAL T-SCRIPT ADDITIONS
- DRAW DISTANCE AND GAME SPEED VARIABLES
- FAST LEVEL RESTART DISABLING
- FOG SETTINGS
- HIGH-RESOLUTION PATCH
- HOTKEYS
- HUD
- JUMPING DINOS (ON ACTBITE COMMAND)
- MAPS (TOP-VIEW, 2D)
- MATRIX EFFECT
- MENU OPTIONS (NEW)
- NIGHT MODE
- PATH TRACING
- QUICK SAVE
- RANDOMIZER (OBJECT)
- SOUND PROBLEM FIX (A3D.DLL)
- SPITTER/ANIMAL PROJECTILE SETUP
- TPA (MENU) FILE RELOCATION
- ALTERNATE LEVEL TPAS
- TRESSTRDBG
- VIDEO RECORDING
- WINDOWED MODE (SEMI-)

The following features are either incomplete or have been abandoned. Not all abandoned features will be documented here, but rather only some of the ones that are kept part of the ATX package as reference.

- MAX ACTIVE DINOS


GAME DIFFICULTY SETTINGS
-> BACK TO FEATURES

The new menu components included in ATX provide a game difficulty slider, which can increase game difficulty by diminishing or increasing the player's and each of the dinosaurs' health points. This option can also be set in ATXconfig.ini, under the [General] section, as the GameDifficulty key.

There are five difficulty levels, from 0 to 4 (very easy to very hard), which are the values that you would use for the GameDifficulty key. The following describes the health multipliers for each difficulty setting:

Difficulty Setting	Multiplier For Dino Health     Multiplier for Player Health
	0			0.250000			2.000000
	1			0.750000			1.300000
	2			1.000000			1.000000
	3			1.500000			0.700000
	4			2.000000			0.400000

It should be noted that this feature is always enabled in ATX. If you wish to use the original or closest-to-original game settings, use difficulty setting 2 (Normal, which is the default).

This feature has been found to be non-destructive. It does not replace the values Trespasser uses to reset Hitpoints, only the current ones. It will NOT apply the difficulty settings if you load from a savegame (or any other file that does not end with the extension *.scn or *.SCN), but they will apply whenever you load a level via the Quick Load menu (or quick-load cheat), via the New Game button, or whenever you restart a level, even from a savegame. However, the new Hitpoints values will be saved to savegames (but non-destructively).

In short, the only particular behaviour is that if you load a savegame that was saved with a certain difficulty setting and you choose to "Restart Level" from within that same game, the difficulty setting that it will use upon level restart will not be the original difficulty setting for that game, but rather the one that is currently set in the main menu (with the slider), or in ATXconfig.ini (if you disabled the menus).


NEW CONSOLE COMMANDS/CHEATS
-> BACK TO FEATURES

While many of the original Trespasser cheats were not included in the official releases, they have been almost entirely restored in ATX for all four supported executables (including the demo). This includes the INVUL, DINOS, BIONICWOMAN, and WOO cheats. The DINOS and WOO cheats function exactly as the originals, while additional changes had to be made to the two other cheats (see list).

There have also been numerous new cheats implemented into the game. These are individually documented below.

To bring up the console in-game, simply press and hold CTRL and F11 at the same time. To exit the console, do the same or press ESC. As a general rule (though not necessarily for all cheats or new cheats), you enable cheats by entering their command once, and disable them by re-entering the same command at the console. A few of these cheats have quick-access keys that can be set in ATXconfig.ini

Here is the list of all new or modified Trespasser console commands included in ATX (as you would type them at the prompt, excluding possible parameters):

- AIM
- B & N
- BIONICWOMAN
- BUFSIZE
- CANIMAL
- CDINO
- CLOAK
- FLY
- FLYTELE
- FOLLOWDINO
- FPS
- GSPD
- HEALDINO
- INVUL
- LINST
- LOAD
- MAP
- MDINO
- MSEL
- NORMALHP
- OBJ
- OBJAIM
- OBJN
- OBJF
- PLAYERHEALTH
- REC (video recording)
- RESET
- SHOWDD
- SUICIDE
- SUPERHP
- TRACES
- TELEDINO
- THIRDP
- TIME
- (other notes)


AIM
-> BACK TO CONSOLE COMMANDS

(New in ATX 1.57) This cheat was designed to add better weapon precision when using the THIRDPerson cheat. The feature can also be toggled using a character key as noted in the THIRDP cheat description. When enabled, when Anne is holding a gun, an aimdot of varying size will be projected onto the screen, giving a precise location for the next shot, regardless of type of weapon used. It will also work in first-person mode. Unfortunately, the cheat suffers from the same problem as the BONES cheat: it does not fully take into account depth of objects in a scene and thus may project the aimdot where it should have been hidden from camera view by a closer object. It is also less useful at long range than it is at medium and short range.

This feature uses a RayCast Trespasser function used when calculating gunshot trajectories. Such paths are displayed by the BONES cheat as grey lines, and only one at any given time. Because of this last point, enabling both AIM and BONES at the same time will cause the BONES cheat to report the grey RayCast line used by AIM as if it were a typical gunshot, even though it is not. This has no effect on gameplay.


OBJAIM
-> BACK TO CONSOLE COMMANDS

This cheat works in coordination with the OBJ and AIM cheats. When AIM is enabled and OBJAIM is as well (OBJ need not be), ATX will display an OBJ cheat-type information listing about the object currently pointed to by the AIM aimdot. Due to depth sorting issues discussed in the AIM cheat description, in some cases, the dot will appear where it should not and may give misleading information about which object is currently designated.


INVUL
-> BACK TO CONSOLE COMMANDS

This cheat toggles invulnerability. It will also prevent the grey overlay effect used when Anne is hurt. However, it will not work in all situations, such as level-scripted "death" areas. You should combine this with the SUPERHP cheat for complete protection.


LINST
-> BACK TO CONSOLE COMMANDS

This function displays info about the current instance from one of Trespasser's internal instance 'trees'. Every time this cheat is toggled, the current instance will be set to the one at the root of the tree. To cycle through the tree nodes, custom key entries are provided in ATXconfig.ini, under [HotKeys]: LINSTCycleLeft (jumps to 'left' tree node from current if existing, which should hold an instance with an Instance ID of lower value than that of the current instance), LINSTCycleRight (same, but for 'right' tree node with higher Instance ID), and LINSTCyclePrevious (goes to 'previous' tree node). The tree is standard: nodes going to the 'left' contain lower values (in this case, lower Instance IDs) than the current node, while nodes going to the 'right' contain higher values than the current node. This particular tree is used by Trespasser to fetch instance addresses from instance IDs. *** Note: This cheat is detailed for experimental purposes only. I can not guarantee that it makes proper use of the tree at this time.


BIONICWOMAN
-> BACK TO CONSOLE COMMANDS
This toggles slow/fast game speed. However, unlike the original cheat,
it will use the custom speed settings from the MatrixTres feature defined
in ATXconfig.ini, under the [MatrixTres] section (see ATXconfig.ini description).

MAP
-> BACK TO CONSOLE COMMANDS -> BACK TO FEATURES
This cheat will display a 2D map of the current level if existing.
This will give you a real-time map view with a cursor indicating
your position if the map's settings were set correctly. If you
are not within the specified map coordinates, the cursor will
be 'inverted' and follow your position at the edge of the map,
indicating your general direction. This cheat supersedes the
"LOC" cheat, but functions similarly.

Here is the documentation regarding the defining and usage of 2D maps.

;============================================================
;MAPS
;============================================================

!!!!!!!!!
IMPORTANT NOTE: ALL BITMAP NAME STRINGS MUST SPECIFY _ONLY_
THE BITMAP'S NAME WHICH IS TO BE FOUND IN THE "MAPS\" FOLDER. BITMAP
NAMES CAN BE NO LONGER THAN 79 BYTES, INCLUDING ".BMP" EXTENSION.
FAILURE TO FOLLOW THESE GUIDELINES MAY RESULT IN GAME CRASHING.
!!!!!!!!!
AS OF VERSION 1.34, THE FORMAT OF THE MAPINDEX.INI ENTRIES HAS
CHANGED TO ACCOMODATE SOURCE CODE CLEANUPS AND BUG FIXES.
!!!!!!!!!

Maps are the most potent feature of ATYPEX.DLL. They are top-view
2D representations that can be loaded and associated with certain
levels, or changed in real-time within a certain level via
T-Scripts.

The view the currently active map, bring up the console using
CTRL+F11 and type the word "MAP" (press escape to exit console).
This will give you a real-time map view with a cursor indicating
your position if the map's settings were set correctly. If you
are not within the specified map coordinates, the cursor will
be 'inverted' and follow your position at the edge of the map,
indicating your general direction. This cheat supersedes the
"LOC" cheat, but functions similarly.

If no map is present at loading, a message will be displayed
instead. There are a few default maps for a few specific levels
for demonstrative purposes, but these have not been made with care.

There are two initial ways to load (a) map(s) for a certain level.
The first is via ActionType 102 (Load New Bitmap). This method uses
a level's T-Script to specify a certain map. It is described in
New ActionType Reference. This permits loading maps at any time during a
level and is highly recommended over the next method for user-made
levels.

The second method is to use the "MapIndex.ini" file situated in the
"MAPS\" folder to assign maps to specific levels. The values needed
to do this are the same as in AT102. This file will only assign a
bitmap at loading time, but permits using maps with pre-existing levels
without having to modify their scripts. The syntax for the entries
is described in the INI file and is fairly straightforward.

In both cases, the only information needed besides the bitmap's file
name are the player positions (X,Y) at the upper-left and lower-right
corners of the map. Maps can ONLY be aligned with the level's X
and Y axises.

The last feature worth mentionning is the ability to associate certain
maps to savegames. Using ATYPEX.DLL, when you save a game, a second
save file will automatically be created (i.e., "SAVEDMAP.XXX") and
will hold information describing the active bitmap at the time of
save. The information will be loaded along with the savegame later,
so you will re-enter the game with the proper map. This permits
level designers to incorporate more than one map in their levels via
ActionType 102 without having to worry whether the right maps will
be loaded when games are saved in different locations. If there is
no currently loaded bitmap, no secondary file will be created.

If a savegame does not have a secondary save file, the game will
load a bitmap from the MapIndex.ini file if an entry for the savegame's
specified level exists.

If a bitmap cannot be loaded for any reason, the previous map will
be kept instead. If no map was loaded beforehand, a
"NO BITMAP LOADED FOR MAP" or similar message will be displayed.

Note that there is no bitmap "stretching" performed (this kind of
resizing can be CPU-intensive); as a result, I recommend using a
maximum resolution (for the bitmap) that corresponds to the game's
minimum resolution.

;=================================================================
; MapIndex.ini file
;=================================================================

This file allows association of bitmap maps in the 'MAPS\' folder with
specific level files. They will be used as default maps for these levels,
but can be overridden by T-Script level entries and savegames created
by the hacked executables' DLL.

The file also allows custom positions for customized map regions and
scales, which can also be overridden in the same fashion.

-ALL ENTRIES ARE SENSITIVE TO ORDER AND SPACE/TAB CHARACTERS. IMPROPER
 ORDER AND/OR STRUCTURING OF VALUES MAY CAUSE GAME TO CRASH.
-ONLY ASSOCIATE ONE BITMAP PER LEVEL.
-ONLY SPECIFY DIRECT BITMAP FILENAMES, AND THESE CAN BE NO LONGER
 THAN 79 BYTES INCLUDING EXTENSION.
-NO PATHS; ALL BITMAPS SHOULD BE PLACED IN "MAPS" DIRECTORY.
-MAPS MUST BE ALIGNED WITH THE LEVEL'S X AND Y AXISES,
 THE X AXIS REPRESENTED HORIZONTALLY AND THE Y AXIS REPRESENTED
 VERTICALLY ON-SCREEN.
-PLEASE FOLLOW EXACT SYNTAX.

;=================================================================
EXAMPLE ENTRY:
;=================================================================

[LevelName.scn] 	;SCN level name
Bitmap=BitmapName.bmp	;name of bitmap to load from 'MAPS\' folder, with extension
X1=XXXX.XXXXXX		;X position at upper-left map corner (float)
Y1=XXXX.XXXXXX		;Y position at upper-left map corner (float)
X2=XXXX.XXXXXX		;X position at bottom-right map corner (float)
Y2=XXXX.XXXXXX		;Y position at bottom-right map corner (float)

;=================================================================


TIME
-> BACK TO CONSOLE COMMANDS

Displays the elapsed time from level start (hours:minutes:seconds).


RESET
-> BACK TO CONSOLE COMMANDS

Resets the counter as shown by the TIME cheat to 0.


TRACES
-> BACK TO CONSOLE COMMANDS

This cheat/feature (new from ATX 1.60) can display a series of cursors on a 2D map activated by the MAP cheat that represent some of the last positions the player has visited in the level. If there is no 2D map for the current level, this cheat will not produce any output. For this cheat to function, you must first open ATXconfig.ini, find the [PathTracing] section, and set EnablePathTracing to 1. Entering the TRACES cheat will not toggle the feature, but only whether or not it is currently being displayed on the 2D map. When you first start the game, TRACES display is disabled by default. The other values in the [PathTracing] section affect the display characteristics (cursor color, duration, etc.). See ATXconfig.ini File Details for brief descriptions of these value.

Note: Player paths recorded using this function are NOT preserved in savegames or across level restarts/loads.


CANIMAL
-> BACK TO CONSOLE COMMANDS

This displays the currently selected (active) dinosaur from the complete list of CAnimal instances and related information from the current level, if the level has dinosaurs. It works in conjunction with other cheats (N, B, etc.).

NOTE: This cheat was conceived to work within a resolution of 640*480 or higher.


CDINO
-> BACK TO CONSOLE COMMANDS

This cheat works in conjunction with the CANIMAL, B, and N cheats. It will select the CAnimal dino instance that is currently closest to the player. If two dinos are at the same distance, the first one in the list will be selected.


B & N
-> BACK TO CONSOLE COMMANDS

These single-character console commands cycle through the list of active animals in the currently loaded level, as used by the CANIMAL cheat. These cheats can also be assigned character keys via ATXconfig.ini for efficiency.


KILL
-> BACK TO CONSOLE COMMANDS

This kills the currently selected CAnimal instance by setting its health to 0. The dino's health value may continue to decrease until it reaches its "ReallyDie" value afterwards.


SUICIDE
-> BACK TO CONSOLE COMMANDS

Kills Anne by setting HitPoints to 0.000000.


MDINO
-> BACK TO CONSOLE COMMANDS

Displays all animals within coordinates on the 2D map (if present), including non-visible instances (i.e., dinos in the 'basement'), as red cursors. As a result, depending on the level, some dots may not actually represent dinosaurs, though this does not happen often in the original game levels.


MSEL
-> BACK TO CONSOLE COMMANDS

Displays the currently selected CAnimal instance as a blue cursor on the map (change instance using "B" and "N" cheats). If it does not show up on the map, then the dinosaur is not within map coordinates.


GSPD
-> BACK TO CONSOLE COMMANDS

Displays the current game speed value. The message will only disappear once you re-enter the cheat or exit the game.


HEALDINO
-> BACK TO CONSOLE COMMANDS

This works in the same fashion as the "KILL" cheat. It will set the selected dino's HitPoints value (health) to the value of its MaxHitPoints entry, thereby healing the dino up to full health. If dino was already dead, it may be revived but may not behave properly (if the dino's body was turned on its side or up-side down, its legs will not orient as they should; this is a Trespasser bug that is also noticeable in the Test Scene level via the "Summon();" button).


CLOAK
-> BACK TO CONSOLE COMMANDS

Makes player invisible to dinos by setting the player's AIType values to 0 (in-game). If a dino was already biting Anne at the time the cheat was entered (if the player doesn't move), it may keep on attacking Anne for a while. It should be noted that the incorporation of this cheat has the side-effect of not being able to change the player's AIType value via T-Scripts.


TELEDINO
-> BACK TO CONSOLE COMMANDS

This will teleport the currently selected dino from the "CANIMAL" list to the specified location (defined by three floating-point values; same as the "TELE" cheat). Failing to enter proper/insufficient values may teleport dino out of bounds and possibly crash game. Note that dead dinos may be teleported, but may not be affected by gravity once transported

Edit: This cheat is generally unreliable and should not have been documented (but since it's here...).


FLY
-> BACK TO CONSOLE COMMANDS
This cheat activates the "CLOAK" and "INVUL" cheats and allows the player to
access fly-mode. This cheat may be unstable, but usually works.
You can set the movement speed in ATXconfig.ini. Controls will be
the same as the normal player movement keys. The run key (default = "w") will
double the normal fly speed/distance and will increase speed even more when
combined with the walk key (default = "s"); this gives a total of three speed
settings. Speed/input settings for this feature are available in ATXconfig.ini.
Generally, lower values will smooth input but _may_ diminish overall performance if your processor is slow.

This cheat MAY crash the game under certain circumstances. Also, the player can still
die even in FLY mode, again, depending on circumstances. Refrain
from using this cheat when standing on slanted rooftops, as the "invisible"
part of the player will remain and may interact physically with the environment
at the location at which the "FLY" cheat was first entered. However, the player
at the "camera" position (flying) will not contribute to any health damage except
when collision problems occur. The (flying) player will set off triggers and voiceovers, though.

When the cheat is disabled, the player will return to the position from the time
at which the cheat was enabled (the "invisible" player's position).

Known bugs/recommendations for this cheat:
- DROP ALL GUNS/OBJECTS before enabling (may otherwise cause oddities).
- you should not try to save or load games while fly mode is enabled (always turn off first)
- the "CLOAK" cheat may interfere with this cheat.
  If "CLOAK" is enabled while "FLY" is active, dinos will be attracted to
  the position of the player at the time at which the "FLY" cheat was entered
  (hence the "invisible" part of Anne while in this mode). Dinos can also still kill Anne
  if "INVUL" is toggled at this same invisible location (for example, load up SUM.scn -
  the summit level - and enter "FLY", "CLOAK", and "INVUL" cheats in that order right upon entering).
- passing through or rubbing against objects/terrain may cause Anne to die (even with INVUL)
- if Anne dies while in fly mode, the player may still be able to move Anne's body (only the visible part).

Lastly, please note that this cheat was entirely homemade and may not work
under certain undocumented circumstances. The keyboard input handler and 3D movement code
were completely rewritten for this cheat alone.

Misc. note: The reason why it is impossible to make the player's position entirely
movable (i.e., no invisible portions left behind) is that the high-level function that
the game provides via the "TELE" cheat does not prevent gravity from being applied after
teleportation, and this can currently cannot be prevented (resulting in "bouncing" tendancies). The workaround
is to move only the player object whose function can be intercepted to discard gravity (as there are at least
two objects, possibly more). This is a real gamble to implement but, luckily, works (this object in particular,
which seems to define mainly Anne's body and chest, has a function that is called automatically by the game
before every frame; all that is thankfully required is to overwrite all location values passed to that function,
these values being based on previous user input).

* New in ATX 1.58 is the option of specifying a movement speed multiplier at
the cheat entry prompt. You may specify a float value after the "FLY" cheat
when entered that will act as a multiplier for the player movement distance,
that is, for the value of "PlayerMovementSpeed" under ATXconfig.ini ([FlyCheat] section).
The command follows the following format:
FLY [multiplier]
(without brackets)
i.e.,
FLY 2
FLY 10.3333
FLY 0.50000
FLY 1.0
You can specify a multiplier when first enabling the cheat or while you are
already in FLY mode. If you are already in FLY mode, the FLY command will not
disable the mode, only set a different speed; otherwise, typing "FLY" without
parameters will disable the feature. The multiplier is always applied only
to the original speed value found in ATXconfig.ini, and not to the current speed
value. Thus, to reset speed, simply enter "FLY 1".

FLY
-> BACK TO CONSOLE COMMANDS

When in FLY mode, this cheat will disable FLY mode and teleport the player to the position where FLY mode left off. HOWEVER, it will have no effect on the invulnerability state set by the FLY cheat. By default, FLY enables invulnerability, so if you teleport with FLYTELE, invulnerability will stay enabled. This is mainly to prevent accidents when teleporting the player to unsafe heights. You will need to use the INVUL cheat if you wish to disable invulnerability thereafter. Note: FLYTELE will have no effect if FLY mode is not enabled.


REC (video recording)
-> BACK TO CONSOLE COMMANDS -> BACK TO FEATURES
The REC cheat starts and ends video recording. Here is the documentation
regarding the usage of this cheat as well as the RECCOMPRESS.EXE video-compression
utility provided with ATX (that compresses videos recorded using this
cheat, from the ATX format to a standard AVI video format). You should
keep in mind that this cheat and the compressor are mainly programming
experiments, rather than full-blown features.

;=========================================================
;REC Cheat - Video Recorder
;=========================================================

* Important note (05/08/2006): DO NOT attempt to set recording
  resolutions with odd numbers. ATX unfortunately does not take
  into account a few particularities about the bitmap format,
  but these will have no effect as long as you use Width and
  Height values that are a multiple of 2.

;-------------------
Updates (includes REC cheat and compression utility updates):
;-------------------
V1.4 (RECCOMPRESS and REC cheat updates update):
- fixed startup crash
- fixed SaveMethod 16 not working in software mode
- changed default INI savemethod to 16

V1.3 (REC cheat update only):
- added REC cheat option (UseWriteThroughToDisk)
- new "System Memory" key performance tweak info (see "SaveMethod Settings")

V1.3:
- slight fix

v1.1:
- New frame saving methods (see options section)
- Shortened frame buffer for RECCOMPRESS.EXE (problems with some
  older systems)
- In-game recording statistics simplified (for performance)
- It was previously noted that there would be no difference in
  quality between 16 and 24-bit videos due to Trespasser using
  a 16-bit color depth in-game. However, there is a very slight loss
  in 16-bit due to the game usually using a 5-6-5 bit pixel format and
  the 16-bit RGB bitmap using a 5-5-5 pixel format. In a 16-bit
  video, the least significant bit of the Green color field is
  scrapped, while in a 24-bit video, it should be preserved
  (at least in the algorithms used by the included utility).
  This slight bit loss applies to all REC 16-bit encodings but
  is hardly noticeable (given the already significant quality
  loss during most encodings).

;-------------------
REC
;-------------------

* IMPORTANT NOTES:
- If you experience problems recording with the new default values,
  try setting SaveMethod to 33 (24-bit) or 32 (16-bit) to tell ATX
  to use the old frame-save methods.
- ALWAYS ENTER RECORDING RESOLUTIONS THAT ARE A MULTIPLE OF 2 (EVEN NUMBER).
  Not all savemethods have been written to take into account some
  of the alignments required in the bitmap image format, but this is
  of no important as long as you use even numbers to X and Y resolution values
  when recording.

This cheat starts and ends a REC file video dump of in-game screens.
It initially accepts one parameter specifying a REC video filename to which a *.rec
extension will automatically be added (i.e., "REC tresvideo" + ENTER).
The recording must be stopped by re-entering the "REC" cheat at the console,
but without parameters. The resulting file will be placed in your root Trespasser
or Trespasser demo folder.

During recording will be displayed the total video time, current and maximum frames
saved, and number of repeated frames ("rep"). This display will not be included
in the output video. The "rep" count is incremented every time the in-game framerate
drops below the fixed video framerate. It determines the amount of frames that
are doubled, tripled, etc. in order to compensate for low framerates. HOWEVER,
the compensation is not guaranteed to be accurate and may introduce some latency
in the final product; you should ensure as much as possible that the game's framerate
remains higher than the video's fixed framerate (i.e., decrement video detail or draw
distance). [Update: Low framerate compensation can now be disabled]

Recording will end ONLY when you bring up the console and enter the REC
cheat once more. If the maximum number of saved frames is reached before,
frames will no longer be saved, but the video will not be fully complete until
the cheat is re-entered. DO NOT exit the game or change resolutions before
recording has ended.

;-------------------
Options
;-------------------

Some options are available in ATXconfig.ini under the [VideoRecording] section.
Unless you have a fast system and much memory, I recommend keeping the default values and
setting your screen resolution to 320*240 for the duration of the recording process.

[VideoRecording]
Width=320		;Width of video (in pixels, from top-left corner) ***
Height=240		;Height of video (in pixels, from top-left corner) ***
Framerate=20		;Fixed/maximum capture framerate (integer value, frames per second)
MaxFrameCount=2500	;Maximum number of frames to save. It limits video
			;size and length to avoid errors. If this number
			;is too high or if you do not have enough available space,
			;the recording will contain errors.

SaveMethod=16		;This option tells ATX which method to use to store
			;the bitmap data. This includes all old and new methods.
			;The new save methods use assembly optimizations to
			;boost recording framerate by a decent amount (20+ fps on my
			;Athlon 900Mhz in an empty level). All new save methods require
			;an MMX-compatible processor. See further below for settings.

InvertAtComp=0		;This value is used only by the compression utility (ATXconfig.ini
			;must be placed in the same folder as the executable for the utility
			;for this value to be recognized). This will invert the final video
			;image if set to 1 for any and all 16-bit videos (top-down only),
			;preceding compression. It is relative to the image inversion
			;performed by the save method used to record the video, which may vary.
			;It will have effect neither on videos created prior to version 1.1 nor on
			;24-bit videos. Some methods automatically flip videos accordingly before the
			;utility is run. In general, you will probably only use this value if your videos
			;all turn out upside-down for a given save method.
			;Note: The "To be inverted" text in RECCOMPRESS.exe directly determines if the explicit
			;software algorithm used to flip the image up-down will be used during encoding. This
			;algorithm will slow down encoding but is required by some of the encoding methods, as
			;they do not flip images automatically when copying from video memory. The
			;algorithm requires an MMX-compatible processor in any case (Pentium MMX/AMD K6-2 3DNow! or higher).

NoLowFPSCompensation=0	;Final video will omit frame repetitions caused by low framerates. Video will appear
			;smoother, but may seem "sped up", depending on original framerate. If your in-game
			;framerate is always higher than the fixed video framerate, this setting will have no effect.

MCIAudioCapture=0	;Enables EXPERIMENTAL/PARTIAL audio capture using the standard MCI device
			;interface. In order for this to work, you MUST specify a recording device
			;in the standard Windows "Volume Control" window (double-click on the speaker icon in
			;your taskbar). Typically, you will have to "Adjust Volume" for "Recording"
			;and select or enable a recording source such as "Stereo Mix" or "Wave" (and adjust/un-mute
			;the actual volume as well). Different sound cards will provide device sources (you may use
			;other and/or multiple sources, depending on your system). You may have to
			;experiment with different sources to find the desired recording input. THE ABILITY TO RECORD
			;IN-GAME SOUND DEPENDS SOLELY ON YOUR SOUND CARD FEATURES AND INSTALLED DRIVERS.
			;This feature will have an impact on framerate and disk activity.
			;
			;The default audio output format is a *.WAV file (by default, 22050Hz, 2 channels, 16 bits,
			;and 88200-byte buffer size stamp**). The filename (excluding extension)
			;will be the same as the REC video file created (i.e., if you entered "REC aaaa", the result will be
			;"aaaa.rec" + "aaaa.wav"). The WAV file will NOT be combined or compressed in any way with the video file
			;at recording time or in the compression utility. You will have to use a third-party program to add
			;the sound file to the AVI video-only file created by the utility.
			;!!! AUDIO MAY NOT NECESSARILY BE SYNCHRONIZED WITH VIDEO. Again, this feature is experimental
			;    and very simple in nature; it does not attempt any type of coordination between the two, which
			;    are recorded completely separately. You may want to edit sound/video samples via a third-party video
			;    editing utility and ensure that your framerate is maxed out before recording to minimize
			;    the gravity of the sync issue. It is important to note that it is virtually impossible to
			;    keep video rate intact when recording from the original source and thus impossible to keep
			;    synchronized at 100% with the audio track. Standard AVI video files use a fixed framerate upon which
			;    it is very difficult to exactly imprint a video sequence with a source varying constantly in framerate.
			;    Frame rate compensation is also inaccurate and contributes to the miscoordination. Furthermore,
			;    the ATX functions were written by someone with very limited video and audio knowledge and may
			;    not be entirely adequate (and yes, that someone would be me; you get what you pay for, right?).
			;!!! I GIVE NO GUARANTEE THAT THE FINAL PRODUCT WILL BE FREE OF AUDIO ARTIFACTS (sound card dependent).
			;-> The feature may add CPU usage during and particularly at the end of a recording (when "REC"
			;   is re-entered, you should expect a delay before return to prompt, with length depending on quality/video time)
			;-> If the feature is enabled and SaveMethod is set to 64, only audio will be captured. No visual
			;   cues will be displayed until the REC cheat is re-entered at the prompt.
			;-> Pressing ESC to open the in-game menu does NOT pause audio recording as it instinctively
			;   does for videos.

MCIxxxxxxx=(various)	;These entries describe the output sound format for the feature described above. If
			;MCISamplesPerSec=44100 (Hz, others=defaults), using a value of 172000 for MCIBytesPerSec may eliminate some
			;of the sound artifacts, but may cause compatibility issues with some programs.
			;In general, the value of MCIBytesPerSec should be calculated based on the other
			;values as follows:
			;       MCIBytesPerSec = (MCIBitsPerSample/8)*MCIChannelCount*MCISamplesPerSec
			;This value should represent the average number of bytes per second of audio. It
			;is provided explicitly and not automatically calculated for experimental purposes.
			;The standard block alignment is calculated automatically by ATX (as (MCIBitsPerSample/8)*MCIChannelCount).
UseWriteThroughToDisk=0 ;(set to 1 to enable) This option instructs Windows to "write through any intermediate cache and go directly to disk" (as quoted
			;from the Microsoft CreateFile API call documentation). It will generally decrease framerate and
			;increase disk activity, but can reduce the usual sporadic framerate variations associated
			;with write operations flushed in batches. Faster hard drives (SCSI) may benefit from this
			;features, while others may not support it at all. Note that some Microsoft Windows operating
			;system (Windows NT, older version of Windows 2000) have a bug associated with this feature (in
			;the operating systems themselves).

The following INI entries are now obsolete:
EnableVideoRecording
BitsPerPixel

;-------------------
SaveMethod Settings (use as value for "SaveMethod" INI entry):
;-------------------

-> Old save methods
	32 - 16 bpp, standard Windows blitting functions
	33 - 24 bpp, standard Windows blitting functions
	64 - No video save (if MCIAudioCapture is set to 1, will record audio only)
-> New save methods, all save in 16 bpp format (all require MMX support for compression utility)
	0 - standard 32-bit code (slightly faster than old save methods)
	1 - MMX-optimized (recommended if method 16 is unavailable)
	2 - FPU-optimized
	16 - DirectX-optimized (recommended for D3D mode; may be hardware-accelerated; may slow down encoding in utility)
-> UNTESTED new save methods, 16 bpp (require MMX for compression utility)
	3 - SSE-optimized (requires Pentium 3 or higher)
	4 - SSE2-optimized (requires Pentium 4 or higher)

Notes:
*** All 16 bpp modes save or eventually encode video bitmap data to 15 bpp
*** All methods are software-based unless otherwise noted.
*** On a technical note, for the new save methods, the Width value
    must be a multiple of 4 (for the MMX/FPU instructions), 2 (for the standard
    32-bit code), or 8 (for all SSE-based instructions).
*** ATX does NOT attempt to detect if your processor supports a certain instruction
    set. It will basically crash if it tries to execute an unsupported instruction.
    Use at your own risk.

;-------------------
"SYSTEM MEMORY" PERFORMANCE TWEAK
;-------------------

Trespasser supports an registry/ini option to determine whether video
buffers (for double/triple buffering or such) are to be stored in video
memory or in system memory.

For the full version of the game, you must specify a DWORD registry entry in the key
HKEY_LOCAL_MACHINE\Software\DreamWorks Interactive\Trespasser
with the name "System Memory". For the demo version, you must specify
an ini entry in "tpass.ini" under the [Settings] section and have
an entry named "System Memory".

To force Trespasser to generate video buffers in System Memory, set
the "System Memory" entry to 1. By default, this is disabled. In
all general circumstances, using system memory for this purpose
is slower. However, for the REC cheat, if you are using a SaveMethod
other than the DirectX-optimized 16, setting "System Memory" to 1 may
increase REC cheat recording performance, because the software algorithms
will perform faster if they read from system memory instead of video
memory (as reading from video memory with software algorithms is always
very slow).

;-------------------
Misc.
;-------------------

*** You MUST ensure that the specified resolution values are both valid for
your current video adapter/drivers and are equal or lower to the ones of the in-game
resolution. Failure to do so will lead to unpredictable results.

Maximum recording time can be calculated by dividing the
MaxFrameCount value by the Framerate value. As such, the default
maximum length is 2500/20 = 125 seconds.

I do not recommend recording videos larger than 4 gigabytes in total
file size. I do not guarantee that the REC cheat will function properly
with such files.

;-------------------
Warning
;-------------------
This cheat will SEVERELY affect framerate on many systems. I strongly recommend
using it only on computers running 1Ghz or faster processors with fast hard drives.
I also highly recommend setting the in-game screen resolution to 320*240 before
using. Due to poor performance, video capture does NOT resize the final images
to fit the desired video resolution. If the video resolution is set to 320*240 (default)
and the in-game screen resolution is set to a higher value, only a portion of
the screen will be recorded [Update: "Portion" may refer to different parts
of the image depending on save method used].

The cheat itself does not require massive amounts of RAM, but due to
its constant disk access, it is recommended to have at least 256 MB RAM
(6400000 MB RAM for Windows XP) to ensure that Trespasser does
not slow down the recording process needlessly with further disk writes.

Please ensure that you have AT LEAST a few hundred megabytes of free space on
your hard drive before using. Videos recorded in real-time are NOT compressed
in real-time due to an even higher performance hit. This will require MUCH hard
drive space. Video dumps can be compressed later using the "RECCOMPRESS.EXE" utility.

I do not guarantee that this cheat will work on all systems. I have only tested
it on an Athlon 900Mhz w/256 MB RAM and Windows ME, and on a Celeron 1.7Ghz w/128 MB RAM
and Windows XP Home Edition (the latter ran very poorly).

;=========================================================
;RECCOMPRESS.EXE Utility
;=========================================================

Once you have successfully recorded a REC video dump, you can open
the file named RECCOMPRESS.EXE to compress the file to a standard
AVI file. You need only to select a *.REC dump file to compress
using the "Select File" button and browser. Once you have selected
a valid file, you will be presented with a "Compression Options"
dialog box, which will permit you to select a CODEC to encode the
final AVI file. The list shows all of the CODECs available on your system;
however, NOT ALL CODECS WILL WORK PROPERLY. Some may target specific
image formats and may not accept the REC image dumps.

The following is a list of CODECs that have been successfully tested
with the last version of the utility in 16 bpp mode:

Cinepak Codec by Radius (very slow)
Microsoft Windows Media Video
Intel video 5.04
XviD MPEG-4 codec (will compress to AVI) *
[Note: DivX codec version 5.2.1 would only compress 24-bit RGB videos]

* I recommend downloading and installing the XviD MPEG-4 codec, especially if you do
not plan on editing/recompressing your videos after converting them to AVI. It works
very well, and supports 16-bit recordings. It is free, compresses quickly and thoroughly,
and sports many options.

Others may work as well. You can also select a "FULL FRAMES" option
that will not compress the video. This will result in a very large video that may only
work with certain desktop BPP color values, but that will not show any quality loss.
This is the equivalent of directly converting a *.REC file to an *.AVI file without
encryption.

Some codecs will not work with the native 16-bit RGB bitmap format (15-bit to be precise)
used by the REC data files.

Once you have selected a codec and data rate, press OK to begin compression.
You will be supplied with encryption progress and general file info. If you receive
the message "Unable to set compressed stream format" or a similar stream-related
message, the CODEC you have chosen most likely does not support the input video
format (BPP value and/or other).

Note: Some CODECs (such as XviD) will display intermediate windows while encoding.
      You will have to refer to their separate documentation for more information
      regarding these (for XviD, you can disable the "Display encoding status" window
      option in the advanced options).

When encoding terminates, a file with the same name but different extension
as the source file (*.rec -> *.avi) will be created, usually in the same folder.
Cancelling encoding before completion will not delete the target file. The latter may
still be partially encoded and valid after cancellation.

;-------------------
Notes
;-------------------

- RECCOMPRESS.EXE requires an OS which incorporates the VFW (Video for Windows) system.
- Ensure MUCH hard drive space and sufficient swap file space.
- Do not reboot your computer while the video is being encoded (may be long).
- Do not exit the game without terminating the recording manually.
- All standard cheat displays (excluding video information, FPS cheat, and LOC cheat)
  will be shown in the final output. Neither letters entered at the console
  nor screen flashes (i.e., when Anne is hurt) will be included in the video.
- If an error occurs during capture, displayed values may be inexact.
- Do not quit to the menu while capturing video or audio.
- Do not change screen resolution, video driver, or any other option
  while recording.
- For optimum disk performance, defrag your hard drive prior to recording a sequence.

;-------------------
Background
;-------------------

Video recording is slow because ATX must copy every frame directly
from video memory and then save it directly to the hard drive. It is a
known fact that reading any data from video memory (even with faster cards)
is a slow process that should be avoided whenever possible. However, because
the source code to Trespasser is not available, it is almost impossible to
intercept frames before they are drawn to VRAM; they must thus be captured using software
algorithms (MMX, Windows API, etc.) from the back buffer. Some of the new saving methods,
however, can make use of hardware blitting using DirectX (such as method 16), under some circumstances.

Writing every frame to the hard drive is also slow, but generally inevitable.
Attempting to compress frames to save memory and HD cycles is possible, but robs
many CPU cycles. The method used by ATX for these writes is decent, though not
necessarily optimal. There is no buffering; each frame is written directly. Writing
frames in batches may causes even more uneven framerates and would require unwanted
overhead. There is also NO asynchronous disk operation done by ATX. This could improve
performance under some versions of Windows, but would not function in Windows 9x/ME
(thanks to Win32Asm community board members for this info).

High resolutions are very difficult to attain because they affect both
video memory reads and disk writes exponentially. For example, doubling
the recording resolution (from 320x240 to 640x480, for say) will quadruple
the required memory to store a single frame, and thus (theoretically) quadruple
the bandwidth required to copy it from vidmem and then to disk. Using a
hardware-accelerated save method can render the first part feasible, but
the disk access needed for frame storage will still be demanding.

;-------------------
RECCOMPRESS.exe Known Bugs
;-------------------

30/08/2005:
- Using XviD for 24-bit recordings (SaveMethod=33) seems to crash after the first
  batch of frames read from the dump file. According to my debuggers,
  this error may lie within the XviD DLL itself (from package
  XviD-1.1.0-Beta2-04042005.zip). It would be assumed to be amongst
  a flurry of MMX code that appears to read 24-bit bitmap data
  aligned to 3 bytes. The problem would be that a 32-bit movd instruction
  would be used to fetch every 24-bit color pixel. This would work
  with all pixels in such an image, but would access one extra byte
  after the end of the image when reading its last pixel (though disregarded).
  If the buffer used to store the image would not be at least one byte
  longer than the size required by the image itself, this would result
  in a memory access violation error. I have not attempted to work
  around this issue, as the other codecs do not seem to have this problem.

;-------------------
Thanks
;-------------------

Many thanks go to the Win32Asm community board members for their help
(http://win32asm.cjb.net/), as well as to Ray Mercer and his own thanked
for the much-needed Shrinkwrap AVIFile (Video For Windows) Tutorial
(http://www.shrinkwrapvb.com/). Also, thanks to Agner Fog for his extensive
pentium optimization documentation.


FPS
-> BACK TO CONSOLE COMMANDS

Shows an approximate in-game framerate. This implementation is not the same as the original FPS patch. I do not guarantee accuracy (nor do I guarantee anything else, for that matter).


PLAYERHEALTH
-> BACK TO CONSOLE COMMANDS

Displays Anne's current HitPoints and MaxHitPoints values.


SUPERHP
-> BACK TO CONSOLE COMMANDS

Sets Anne's HitPoints and MaxHitPoints values to approximately 2 billion.


NORMALHP
-> BACK TO CONSOLE COMMANDS

Resets Anne's HitPoints and MaxHitPoints values to their original quantities.


SHOWDD
-> BACK TO CONSOLE COMMANDS

Temporarily shows the current Draw Distance variable's current exact value. This can also be triggered by HotKeys that can be set in ATXconfig.ini


LOAD
-> BACK TO CONSOLE COMMANDS

This command followed by a valid *.scn filename (including extension) will load the specified level. Once the level is loaded, you will need to press the ESC key to get rid of console input.


BUFSIZE
-> BACK TO CONSOLE COMMANDS

This shows the size (in bytes) of some of ATX's internal buffers. These values are only valid if there were no errors during initialization. The map buffer is only valid if the current level has a 2D map, or it will otherwise hold the value for the last successfully or non-successfully-loaded map (from a previous level). The CAnimal buffers are only valid for levels with one or more CAnimal instances (or may otherwise hold data from previously-loaded levels).


OBJ
-> BACK TO CONSOLE COMMANDS

This cheat, when accompanied by one parameter, a memory location in hex format (may be preceeded by "0x" or not) designating the base address of an instance, will give general information about the specified instance. Unless you are debugging or hacking Trespasser, this is generally not useful. You should use the "OBJN" cheats instead. Example: "OBJ 2526233" will access the instance with a base address of 0x02526233. This cheat will also attempt to retrieve the object's class/VTable type from the "?.AVCxxxxxxxxxx@@" list of strings in the Trespasser executables. To turn off the info display, simply type "OBJ" at the console without any parameters. It is VERY important to note that this cheat is not 100% fool-proof and may lead to crashes if you enter random addresses.


OBJN
-> BACK TO CONSOLE COMMANDS

This works in conjunction with the OBJ cheat, but is generally more useful. It will display the same information, but instead of accepting an address as parameter, it will take an instance's name as found in the level's T-Script. For example, typing "OBJN RaptorB" will display info about that specific instance (for a level which has a RaptorB-named instance). This cheat is mingled with the OBJ cheat, and they may turn each other off if used alternatively. It is also prone to the same problems as the OBJ cheat, so you should not enter random strings as parameters. Note that the strings are case-sensitive and may be sensitive to extra space characters (before and/or after). This applies to both the OBJN and the OBJ cheats.


OBJF
-> BACK TO CONSOLE COMMANDS

This cheat will give camera focus to the object last set by the OBJ or OBJN cheats. You will not be able to disable camera focus unless you re-enter the "OBJF" cheat at the prompt. This uses the same camera and controls as the FOLLOWDINO cheat and shares the same ATXconfig.ini values. This cheat will have no effect if you have not selected a valid instance with the OBJ or OBJN cheats since the beginning of a level load. If you wish to view a specific instance without having the instance's info displayed on-screen, simply use OBJN to set an instance, turn off the OBJN at the prompt (by typing "OBJN"+enter), and then enable OBJF.


FOLLOWDINO
-> BACK TO CONSOLE COMMANDS

This cheat works in conjunction with the "N" and "B" cheats (which can also be assigned keys in ATXconfig.ini for faster access). It will kill all keyboard and mouse input to the player object and allow the camera to follow the dinosaur instance (CAnimal) that is currently selected with the aforementioned cheats. Some options are provided in the *.ini (under [FollowDinoCheat] section). You can decrease the distance between camera and dino with the "move forward slow" key, and move the camera further back with the "move backward" key. The "move forward fast" key will reset the distance between the two to its default value. This cheat does NOT protect the player while enabled, so use carefully. You will not be able to enable this cheat if any other camera-controlling cheats are enabled (i.e., FLY, OBJF, etc.).


THIRDP
-> BACK TO CONSOLE COMMANDS
Do I really have to explain this...? It'll enable a chase-cam mode.
The camera behaviour can be modified via ATXconfig.ini, under
[ThirdPersonCheat]. In-game up-down camera movement keys can also
be defined, though they are generally restricted to character keys ('a' through 'z').
The default keys are as follows:

i - zoom in
k - zoom out
o - camera up
l - camera down
u - reset zoom and camera orientation
v - gun-follow mode (hold to use)
b - gun-follow mode (toggle to use)
n - toggle AIMdot (see AIM cheat description)

If you regularly use these keys for other game functions, you will want to
change these in ATXconfig.ini. They are non-destructive (will not replace
whatever other functions they may be assigned to externally).
NOTE: There is a bug with improperly-assembled *.scn files that will completely
      mess up the game if the level is restarted while the player is both dead
      and third-person mode has been enabled. You should always turn it off
      when exiting to the menu or starting a new level with these types of files.

MISC. NOTES FOR CONSOLE COMMANDS
-> BACK TO CONSOLE COMMANDS
;========================================================
;Note for "FOLLOWDINO", "THIRDP", and "FLY" cheats:
;========================================================
These cheats have NOT been optimized, nor checked for all possible inconsistencies
in their 3D programming. They may be CPU-intensive; you should check ATXconfig.ini
for fraterate or input interval values. Generally, these values are set to provide
smooth controls and may be overkill for systems that go nowhere near the full 60 fps mark.
As well:
- YOU CANNOT USE THESE CHEATS AT THE SAME TIME
- CHEATS MAY BE DISABLED UPON LEVEL LOAD/RESTART TO ELIMINATE POTENTIAL MEMORY-RELATED
  CRASHES
- THESE CHEATS DO NOT CHECK FOR BAD CAMERA PLACEMENT/CAMERA-OBJECT COLLISION/OCCLUSION
- THESE CHEATS MAY INTERFERE WITH THE MENU AND EVEN CERTAIN LEVELS.

;========================================================
;General Note
;========================================================
  Not all new cheats are necessarily documented. Some may be too incomplete
  for official use or may work only partially and have been left out of
  this text for these reasons. The full list can be found inside the source file
  "ATX_SOURCE\Data\generaldata.inc" under the section "HACKED CONSOLE VARIABLES"
  (open as text file using Notepad or similar program). If you use any undocumented
  new cheats, you do so at your own risk. They may cause errors/crashes/freezes.
  I will not answer any questions regarding their intended uses or nature.


MATRIX EFFECT
-> BACK TO FEATURES

MatrixTres is a Trespasser hack "designed" to add a little spice to the game. It features a Matrix-style slowdown whenever a dinosaur exhibits a "biting" behavior, courtesy of the game speed variable. This behavior is only done around prey (most importantly the player), so the game will slow down by a factor of 0.40000 (customizable) around crucial action sequences. Only dinosaurs that exhibit biting behavior (TRex, raptors, etc.) will trigger this. However, in this version, it is possible to trigger MXT via T-Script entries in level files, via ActionTypes 100 and 101. This can only be enabled via T-Scripts.

The default MatrixTres values can be changed via the ATXconfig.ini file, under the section "MatrixTres". The minimum interval in milliseconds, the slowdown speed, and the max dino-player radius can all be set. The feature is also to be enabled/disabled via the INI file. The dino-player radius is the maximum distance that dinos can be from the player to be able to set off slowdowns. This prevents far-away dino battles from causing spontaneous slowdowns.

New in ATX 1.50 are game speed transition settings, to ease the stuttery effect of game speed changes. They can be set in ATXconfig.ini. The game speeds used in transition are calculated from the normal and slowdown speeds, along with the interval and time settings. The changes are linear. These settings can be set to 0 to disable transitions (to emulate the old system). They are more clearly explained under ActionType 100 - MatrixTres effect.

MatrixTres works generally well, but you might run into some instances where a dinosaur will be close enough to damage you and no Matrix-effect will be shown. This is due to the fact that only the ActBite AI command is used to set off this behavior, and from time to time, a dinosaur will attack you without displaying it (this is more frequent when loading saved games). There is nothing I can currently do to address this; it is more of a Trespasser bug than anything else (it also tends to apprea.

The following is an issue found only in ATXTres versions prior to 1.31: "The other problem you might run into is the game slowing down suddenly, without any dinosaurs chasing you. This is because the dinosaurs exhibit the Bite command while attacking each other as well, and thus set off the Matrix scene from a distance (the slowdown will stop once one of the dinosaurs is killed). Despite these inconveniences, so far, the ActBite command still remains the best code location for the main MatrixTres calling code that has been found."

Note: This feature was originally created as a separate (non-ATX) executable hack. However, the last release (and all previous releases) of that hack contained a fatal flaw that has been fixed in the ATX version.


GENERAL SOUND PROBLEM FIX (A3D.DLL)
-> BACK TO FEATURES

A common source of many sound and even video issues in Trespasser has been found to be the A3D.dll file often found in the Windows "System" folder. Although Trespasser assumes this file to be used for 3D sound management, many sound drivers provide a file of the same name for other or even similar purposes (for example, that poor-quality 3D-stereo emulation many low-end sound card drivers provide). Trespasser doesn't seem to check thoroughly the authenticity of this file, which will to its improper use and thus sound and even video problems. In some cases (i.e., with some SiS 7012 drivers), the game will not even load at all.

Fortunately, there is an easy fix for this in ATX. It is done by opening ATXconfig.ini with any standard word editor and locating the section named [Troubleshooting]. From there, the DisableA3DdllDetection only needs to be set to 1. The next time Trespasser is run with the ATX executable, the game will treat the file as if it did not exist in the system.

You can also find the A3D.dll file yourself and remove it from your system folder. In some cases, there may be more than one and in more than one folder. However, this may lead to problems with other programs and possibly your sound drivers.


SPITTER/ANIMAL PROJECTILE SETUP
-> BACK TO FEATURES

In ATX 1.52 (unreleased) appeared an INI file-based system for projectile launching from animals, essentially allowing such effects as a spitting dino. The proper operation of a spitter requires more than the system described below, but this is necessary to begin with.

The spit-system is level- and animal-specific. Similarly to other features, it requires you to place in the "MAPS\SPT\" folder an *.ini file named after your level's *.scn filename. For example, for the demo level, this would be "MAPS\SPT\demo.ini", since the demo level is named demo.scn. Once you have created this file, you may open it with a text editor.

The *.ini file can be set to contain as many sections as there are projectile-spitting animals in your level. The sections are named after the CAnimal instance names and can each hold the following key entries (described in comments) that will apply to the animal instances designated by their respective sections:

[CAnimalInstanceName]
ProjectileName1=		;Name of instance to use as first projectile (case/space/tab-sensitive)
ProjectileName2=
ProjectileName3=
ProjectileName4=
ProjectileName5=	
ProjectileName6=
ProjectileName7=
ProjectileName8=		;Name of last projectile (will cycle 1 to 8, one at every launch).
				;Can have any number between 1 and 8 projectiles. Different dinos (thus
				;different sections) can share the same projectiles and use different
				;launching parameters for these same projectiles.
MinDistance=			;Minimum absolute distance between target and dino for launch to happen.
				;Must be greater (at least slightly) than MinDistanceHoriz.
				;Maximum Distance should be set via T-Script value BiteTargetDistance.
				;-> float value
MinDistanceHoriz=		;Similar to MinDistance, but calculated strictly horizontally.
				;Must be greater than ForwardDistanceFromHead.
				;-> float value
ForwardDistanceFromHead=	;Offset from dino's head (strictly forward), where to first teleport projectile upon launch.
				;Must ensure does not touch head, or might trigger CCollisionTrigger and/or wound/kill dino.
				;If you've paid attention, you know these three last values are dependant
				;of each other and need to be valid, as well as greater than zero.
				;-> float value
ProjectileSpeed=		;Speed to use for ActionType 110 and 10. Should be below 100.00000; game
				;does not respond well to high values.  
				;-> float value
LaunchProbability=		;Integer - between 0 and 100 (same as ActJumpNew). Calculated randomly.
MinLaunchInterval=		;Integer, milliseconds - minimum time between projectile launches (same as ActJumpNew).
ProbabilityInterval=		;Integer, milliseconds - This is the equivalent of the ActJumpNew TendancyCheckPeriod interval.
				;It is used in conjunction with LaunchProbability and should always be equal to or lesser than
				;MinLaunchInterval. It can increase launch randomness. See ATX_README.htm under the ActJumpNew
				;documentation for the description of TendancyCheckPeriod. It does the same but for dino jumps
				;instead of projectile launches. You may omit this value (if omitted, it will be set to the same 
				;value as MinLaunchInterval, which acts as if this feature was disabled).
AnimalViewAngle=		;Euler angle - target must be within this angle from dino's head orientation (horizontally only)
				;on each side, or will not set off launch. Should be between 0.000000 and 90.000000 (exclusively).
				;-> float value
UseHorizontalAutoAim=		;Set to 1 to enable, 0 to disable.
UseVerticalAutoAim=		;Set to 1 to enable, 0 to disable. Currently, both vertical and horizontal aiming should
				;be enabled if auto-aim is to be used at all, or the projectile may not
				;orient properly.
ProjectileZSpeedAdjust= 	;Set to 1 to enable, 0 to disable. Will only be used if UseVerticalAutoAim is enabled.
				;It represents a height aiming adjustment for the vertical aiming system.
				;A positive value will cause dino to always shoot higher. It is calculated
				;from the dino's target location (which is usually at center of target).
ProjectileExtinguishTime=	;Integer, milliseconds - timeout interval for fixed-speed mode. It represents
				;the maximum time during which the projectile will be assigned a fixed speed.
				;After this time, the projectile's physics speed manipulation will be surrendered
				;to the game. This value should always be used in case a projectile is fired
				;into the sky.

* Some of the entries provided here resemble the entries used by the Jumping Dinos feature; you may want to consider those descriptions for further reading.

** ALWAYS INCLUDE EVERY ONE OF THESE VALUES UNDER EVERY SECTION (default value selection does not mimic the ActJumpNew tendancies). This does not apply to ProbabilityInterval (only). There are no default values for any of these (except ProbabilityInterval), resulting in unpredictable results if omitted.

The ProjectileName# values are strings that should hold the name of valid CInstances from the level. These are the projectiles that will be launched by the animal. You can have up to 8 of these, but you must at least have one. If you have more than one, the projectile launch will simply rotate between these instances (in order) after every launch (for variety). These instances can be shared between animals, but know that if an animal launches a projectile and another animal launches right after, the instance will be teleported right out of the air for use by the second animal, so only share instances if there is little of chance of having two launches at once.

MinDistance is a float value giving the minimum distance between the spitting animal and its target for the spitter to launch a projectile. It is important to keep a certain minimum so that the spitter doesn't launch items "through" its targets. MinDistanceHoriz is the same as MinDistance except that it is calculated purely horizontally (on the X-Y plane), so that this distance will be respected regardless of the height difference between the animal and its target.

BiteTargetDistance is NOT a value that you set in the *.ini file. It is a float T-Script value that you set within a CAnimal dino's script. In this context, increasing the animal's BiteTargetDistance emulates the distance at which a dino will starting "biting at" and thus launching projectiles at its target. It acts as a complement to the MinDistance value (i.e., as a "MaxDistance" value).

ForwardDistanceFromHead is the distance from the dino's head from which the projectile will first appear when launched. It is VERY IMPORTANT to find an appropriate minimum value for this distance; if it is too low and/or the projectile/dino head is too large, the projectile might be teleported "into" the dino's head, both killing him and potentially causing level crashes. Of course, having values much too high will cause the projectile to appear too far from the dino's head and possible "into" other objects, so it is important to find an appropriate value (also for realism, of course).

ProjectileSpeed is a float value that should be below 100.000000. This speed will be giving and kept applied to the projectile once it is launched by the animal. Note that the game engine cannot handle very high values. This is why a fixed-speed mode is required, otherwise the projectile decelerates too quickly and drops prematurely.

LaunchProbability is an int value between 0 and 100 that gives in percentage the probability of the animal launching its projectile every time it has a chance. Of course, this should practically always be above 0, unless testing.

MinLaunchInterval is the minimum time between two projectile launches by a one animal. This is not considered through save games and different level loads. ProbabilityInterval is a similar value that is used in conjunction with LaunchProbability and MinLaunchInterval. It should be lower than or equal to MinLaunchInterval to have any effect. Usually, when launching a projectile, the dino will give a MinLaunchInterval period of time between its attempts at launching a projectile, whether they are launched or not. This limits the spitting intervals to multiples of the MinLaunchInterval only (assuming a constant in-range scenario). With ProbabilityInterval, whenever a projectile launches does not happen after a MinLaunchInterval period of time, the animal will only wait a ProbabilityInterval amount of time until the second next attempt instead of waiting an entire MinLaunchInterval cycle. Basically, if you decrease LaunchProbability and ProbabilityInterval at the same time with certain proportions, you can randomize the spitting patterns, or keep ProbabilityInterval similar to MinLaunchInterval and a higher LaunchProbability value to have more regular launching.

AnimalViewAngle is the minimum angle between the current orientation of the dino's head and the position of its target (via its own position) for a launch to happen. It basically keeps the animal from launching projectiles from the back of its head. This is only considered horizontally. This value should be between 0.000000 and 90.000000, exclusively.

UseHorizontalAutoAim and UseVerticalAutoAim control the auto-aim for the projectile launching when the dino has a specific target. Due to current arrangements, you can either set both of these values to 1 or both of them to 0. Do not set them to different values.

ProjectileZSpeedAdjust is a simple distance value that is added to the target's position when the dino is performing and "calculating" a launch. Increase this value so that it aims more towards the head, or decrease so that it aims more towards the feet.

ProjectileExtinguishTime gives the time-out value for the projectile. It does not control the disappearance of the object, only the time after which it starts to lose its speed. This value is a consequence of the fixed-speed setting used for the spitter code.

Here is an example entry (taken from the original Trescom Enhanced Spitter):

[FrillSpitter]
ProjectileName1=DiloSpit
MinDistance=2.500000
MinDistanceHoriz=2.250000
ForwardDistanceFromHead=2.00000
ProjectileSpeed=45.000000
LaunchProbability=100
MinLaunchInterval=12000
AnimalViewAngle=60
UseHorizontalAutoAim=1
UseVerticalAutoAim=1
ProjectileExtinguishTime=2000
ProjectileZSpeedAdjust=0.50000
AnimalViewAngle=90.000000
Other Considerations

As demonstrated by the Trescom Enhanced Spitter, you need a lot more than the above INI script to successfully implement a spitting dino. First of all, you may want to explicitly disable jumping for the dino you are choosing for spitting. You can do this by including an INI for (and named after) your level in the folder "MAPS\JMP\", including a section for that animal in particular, and setting its JumpTendancy to 0. See see JUMPING DINOS (ON ACTBITE COMMAND) for more details. Second, DO NOT FORGET to set the BiteTargetDistance under your animal's T-Script to control spitting distance, but make sure it is not set too high as you may run into behavioral issues.

UPDATE (ATX 1.61): The ActJumpNew scripts now allow you to set a MaxDistance value to limit the range at which a dino may jump. It is thus now possible to tweak the spitter/actjumpnew distance settings to allow the animal to spit at longer range and jump at closer range without having both systems interfere.

Third, you should modify the T-Scripts for the instances you plan on using as projectiles, particularly values such as Mass and Damage. These will control the damage dealt to targets and objects when the animal spits accurately (or not).

Fourth, and MOST IMPORTANT, is that you ABSOLUTELY NEED a CCollisionTrigger to control impact between the projectile and, well, anything. The spit system DOES NOT manage collisions, it only launches the projectile and stops updating its position after a certain time. In fact, the spit system uses ActionType 110 just as described in this documentation to keep speeds, so in order for the projectile to stop receiving speed injections when it hits anything, you ABSOLUTELY MUST include a call to ActionType 111 with the projectile's name as Sample value in your CCollisionTrigger. In your script, you may also want to include a call to ActionType 18 to teleport your projectile out of sight after it hits anything, as well as a call to ActionType 10 to freeze it after. ALWAYS make the call to ActionType 111 the first in the list of calls in your CCollisionTrigger, or it might nullify the calls to the two other ones (18 and 10). For a example on applying this, see the Trescom spitter.

Of course, none of this has anything to do with an animation such as an unfurling frill on a dilo. In general, you can control such animations by including a CLocationTrigger in your level that holds your projectile whenever it is not being launched. That way, whenever the projectile is teleported out of the trigger volume, you can set a script value (ObjectLeaveTrigger) to detect the event and launch a set of ActionTypes, including the ones required for texture animations. Of course, you will then tweak your CCollision trigger to teleport your projectile back into the CLocationTrigger for later launching. You may also have to have a start trigger at the beginning of your level to first teleport the projectile into your CLocationTrigger, because if the projectile starts inside the CLocationTrigger, the latter may not fire properly upon the very first projectile launch during play.

Again, please see the Trescom Enhanced Spitter for examples and further details. This spitter was developped by the Trescom TC-Ops.


JUMPING DINOS (ON ACTBITE COMMAND)
-> BACK TO FEATURES
* This feature and its documentation have been updated in ATX v1.53 and v1.61.

This new feature can be used to allow jumping dinosaurs whenever a dino exhibits the 'biting' behavior, in the
same tradition as the MatrixTres mod. The feature as a whole can be enabled/disabled
in the ATXconfig.ini file (via [ActJumpNew] section, with the DisableActJumpNew key,
the feature itself being enabled by default), as well as via the ATX menu option. It causes
dinos to receive an impulse from an invisible object, which emulates a jump. The default
jump settings can be set under the [ActJumpNew] section of ATXconfig.ini (they are the entries
who's names start with "Default"); these settings will be used for any levels/animals that do not
have level- and animal-specific settings (described later).

ATX v1.50 also includes an option to ensure that quadrupeds such as Trikes, Stegs,
and Brachis do not jump as a result of this. However, it is DISABLED by default.
This is not to impede on level designer territory, because it is a global setting,
and by default, the jumping dinos setting applies to all dinosaurs. If you are like
me and find jumping quadrupeds a little distracting in some of the user-made levels,
simply open ATXconfig.ini, find the [ActJumpNew] section, and set the
DisableJumpingQuadrupeds key to 1. Thanks to Tatu for posting the "jumping triceratops"
screenshot which led to the development of this option.

ATX v1.53 includes an option called TendancyCheckPeriod. It can be set under an ini file's
[General] or [InstanceName] sections like all the other values. It is described further below.
It has a corresponding entry for its default value in ATXconfig.ini (DefaultTendancyCheckPeriod).
However, this usage of the ATXconfig.ini default value differs from the others to maintain
backwards compatibility with older ATX versions and *.ini files. This is also described further below.

A good deal of credit goes to the Trescom team for the TC-Isle
"jumping raptor", which I based myself upon to derive this.

Dino jumping behavior can be level-customized using the *.ini files found in the
"MAPS\JMP\" folder. Filenames must reflect the levels' scn filenames, in the same way
as the dino randomization list files. For example, for the town level, "IT.scn",
the file used for jump data should be named "IT.ini".

Please feel free to write and distribute your own *.ini files, whether
it be for the default levels or for user-made levels.

There are four different values that can be tweaked generally or for
specific dino instances under their respective sections:

[General] AND/OR [FullDinoInstanceName]
Push=
JumpAngle=
JumpTendancy=
RepeatPeriod=
TendancyCheckPeriod=	      (new in ATX 1.53)
MaxBodyTargetDirAngle=	      (new in ATX 1.61...)
MaxHeadTargetDirAngle=
MinTotalVelocity=
MinDirectionalVelocity=
MaxDirVelocityAngle=
MinTargetDistance=
MaxTargetDistance=

If these values are placed within a section named [General] in the INI, the specified values
will become the defaults for all instances of that level (* subject to additional conditions).
If no [General] section exists, the DLL's default values will be used OR the overall defaults
specified in ATXconfig.ini. HOWEVER, if you use at least one instance-specific section in your
file, it is highly recommended that you have a [General] section as well at the beginning of
the file (or the default values for the other dinos will be fetched from ATXconfig.ini).
If the values are placed under a section whose name reflects a valid
CAnimal instance from that level (i.e., [RaptorB02-00]), they will
be assigned to that instance alone, regardless of default or general section values. Not all
four entries need to be present under a certain section, but assigned values must be valid,
or the game may crash.

*** If you plan on using these level-specific settings, it is recommended that you explicitly
    include every one of the aforementioned entries (i.e., not just one or two), because the user is free to modify
    his own ATXconfig.ini defaults. These default values will be used for your level if you do not
    override them yourself with level-specific settings, either in your [General] section
    or in instance-specific sections (if you include all of them in your [General] section, however,
    then it is not necessary to have all of them in each of your instance-specific sections, because they
    will now use the values from [General] by default).

Below is a description of each value's significance and data type:

Push - Floating-point value - This is the equivalent of the T-Script value of the same name.
       It determines the amount of force to be applied to the dino to cause a jump,
       in the direction determined by the dino's orientation (forward and up/down) and the
       JumpAngle entry. Evidently, higher values will lead to higher jumps, but may cause
       oddities and/or hilarious gameplay.

       One thing to remember is that dinos of different masses and shapes will naturally
       react differently (less or more) to the Push value. This is mainly why it is necessary
       to have INI files for all levels and animals.

JumpAngle - Floating-point Euler angle (0 to 90) - This modifies the direction in which the Push force
       will be applied to the dino. This angle adds to the dino's Z or up/down facing value (preserving X-Y orientation)
       and uses the result for the new direction. Higher values will cause more vertical jumping,
       and lower values will tend to project horizontally forward.

JumpTendancy - INTEGER value (no decimals!) from 0 to 100 - This controls the dino's probability of jumping
       when exhibiting biting behavior in the form of a percentage (do not include a % sign after the
       value). This value is based on random number generation, so it will not determine
       whether it is 'smart' for a dino to jump at a certain moment based on his surroundings.
       If this value is set to 0, the dino will never jump (use to contradict General section values
       for specific animals); setting to 100 will ensure that the dino jumps whenever possible (limited
       by biting tendancy and RepeatPeriod). Theoretically, a value of 50 would make a dino jump about half
       of the time, but this depends on random results and may not always project an accurate statement.

RepeatPeriod - INTEGER value, in milliseconds - This determines the minimum interval between
       a dino's jumps, in milliseconds. Despite naming, do not confuse with the T-Script value
       which has the same function but is used as a floating-point number. Beware of using very low
       values, because the applied force may cause a dino to jump more than once before it hits the
       ground, which would greatly dampen atmosphere. NOTE: The RepeatPeriod values found in [General]
       sections and in ATXconfig.ini affect individual dinos and not overall jumping behavior (i.e., there may
       be more than one jump performed within this period, but only if they are done so by different animals).

TendancyCheckPeriod - INTEGER value, in milliseconds - This value should always be equal to or lesser
       than RepeatPeriod. It works in conjunction with JumpTendancy in the following fashion:
       The absolute minimum time between dino jumps is determined by RepeatPeriod. Once the RepeatPeriod
       time expires, another attempt at a jump can be initialized by ActBite. Previously, without TendancyCheckPeriod,
       when this attempt would take place, ATX would check for JumpTendancy, and if the random value did not pass the tendancy,
       the dino would not jump and the RepeatPeriod time would be reset. Then, the dino would have to wait
       a whole other RepeatPeriod time for its next chance to randomly check for jumping time.

       TendancyCheckPeriod is the solution. Using this value, if a dino does not jump because the JumpTendancy was
       not met, instead of waiting a RepeatPeriod time for the next chance to jump, it will
       wait a TendancyCheckPeriod time. As such, there will always be at least RepeatPeriod milliseconds
       between jumps, but you can set TendancyCheckPeriod to a lower value than RepeatPeriod so
       that there are more occasions for the dino to evaluate its JumpTendancy once the RepeatPeriod time
       has expired. In short, you can achieve more random jumping by using this value. Typically, you would
       add this value to an existing ActJumpNew script by setting it to a value lower than RepeatPeriod and also
       diminishing the affected instance's JumpTendancy value. Note that if you only set TendancyCheckPeriod without
       changing JumpTendancy, the dino will be prone to jumping more often. By keeping a certain proportion between
       TendancyCheckPeriod and JumpTendancy, you can increase randomness of jumps without necessarily increasing
       jump counts.

       To maintain backwards compatibility with older files, the default value for TendancyCheckPeriod is fetched as follows:
       - If a "JMP\*.ini" file has neither a RepeatPeriod nor a TendancyCheckPeriod in its [General] section,
	 the default value for TendancyCheckPeriod for the level will be the value found in ATXconfig.ini (DefaultTendancyCheckPeriod).
	 Thus, DefaultTendancyCheckPeriod will become the value for all dinos that do not have instance-specific sections
	 or TendancyCheckPeriod values in their instance-specific sections.
       - If a "JMP\*.ini" file has a TendancyCheckPeriod in its [General] section (not matter if RepeatPeriod is present or not),
	 it will automatically be the default value for the level (as you would expect, and same as the other values).
       - If a "JMP\*.ini" file has a RepeatPeriod but NOT a TendancyCheckPeriod in its [General] section,
	 the default value for TendancyCheckPeriod for the level will be the value of RepeatPeriod. This is
	 what maintains backwards-compatibility (for the most part).
       * New in ATX 1.61:
       - If a "JMP\*.ini" file has a section for a specific dino with a RepeatPeriod value but not a TendancyCheckPeriod
	 value, the TendancyCheckPeriod value will be set to the RepeatPeriod value. If both values are absent, the default
	 value for TendancyCheckPeriod for this dino will be the default value for the current level and
	 is determined by the above conditions.

* The following 7 values are new to ATX 1.61. They are all float values and are used in limiting dino jumps to
  certain conditions. If they are set to 0 or any other value of 0 (i.e., 0.0, 0.000000), they will not be used
  (individually). This is the default value (i.e., if you do not specify them and the user hasn't specified
  new defaults in ATXconfig.ini, they will not be used). You can thus choose which conditions to enable by setting
  those you do not wish to use to 0 and the others to valid floating-point values. All angle values are in Euler
  angles and should range between 0 and 90, exclusively.

MaxBodyTargetDirAngle - Euler angle value. This is the maximum angle of view on either side of the dino's body
       from which the target (player or animal) can fall within to allow the jump. This is analogous to the
       animal projectile (spitter) AnimalViewAngle value, but using the dino's current body direction instead of its head.
       For example, if the dino is to jump only when the target is in front of the dino within a 120 degree view
       from the body's direction, you will set MaxBodyTargetDirAngle=60.

MaxHeadTargetDirAngle - Euler angle value. This is the exact same as MaxBodyTargetDirAngle, but uses the dino's
       head for the view span instead of its body. It can be useful to set both values to ensure that the
       dino's body and head are always facing the target when it jumps, and not have situations where the body
       faces the player but the head faces away and the animal jumps anyway.

MinTotalVelocity - Speed value. This is the minimum velocity the dino must have to allow a jump. In contrary to
       some other values, the maximum velocity is calculated in 3D, i.e., including the dino's current vertical
       velocity. It must be a positive value.

MinDirectionalVelocity - Speed value. This is the minimum velocity the dino must have in the direction in which
       its body is facing to allow a jump. This value should be typically lower than MinTotalVelocity if both
       are present (or it will have no meaning) and is also calculated in 3D (not just on the horizontal x-y plane,
       but including the vertical z component - this simplifies a few of the calculations).

MaxDirVelocityAngle -  Euler angle value. This is similar to MaxBodyTargetDirAngle in function, but uses the
       dino's current speed and direction instead of the distance with the target. It limits jumping by comparing
       the direction in which the dino is moving compared to the current orientation of its body. If the direction
       in which it is moving compared to the orientation of the body makes an angle greater than the
       MaxDirVelocityAngle, no jump will occur. Thus, this value also represents half of a "view angle" from
       the dino's body. You can set this value so that the dino doesn't jump while it's moving sideways or backwards.
       You should only use this value if you use at least one of the other minimum-speed values (i.e., at least
       one of them is greater than 0).

MinTargetDistance - Distance value. Minimum distance between dino and target to allow jump. You can measure distances
       using TresEd or, if you are unsure of where the central location is based in the dino mesh, you can use the OBJN
       cheat in-game; it now displays this distance.

MaxTargetDistance - Distance value. Maximum distance between dino and target to allow jump within. This value was
       introduced mainly to allow spitter-type animals to keep their jumping behaviour at closer range while
       being able to launch their projectiles at longer range (animal projectile behaviour must be tweaked
       to achieve this as well).

While this new set of values is fully implemented in ATX 1.61, they have all been kept to the default
of 0 in ATXconfig.ini as to preserve compatibility with level files which do not set these new values. This means
that these settings won't be used unless you set them in ATXconfig.ini or in level-specific files.


EXAMPLE SETTINGS

Below are a few recommended settings that you can use to improve jumping behaviour in ATX 1.61+.
Simply overwrite all corresponding entries in ATXconfig.ini under the [ActJumpNew] section.

* Default settings (for ATX 1.59-1.60 behaviour)
[ActJumpNewSettings]
DisableActJumpNew=0
DisableJumpingQuadrupeds=0
DefaultPush=65.000000
DefaultJumpAngle=65.000000
DefaultJumpTendancy=75
DefaultRepeatPeriod=8000
DefaultTendancyCheckPeriod=6000
DefaultMaxBodyTargetDirAngle=0
DefaultMaxHeadTargetDirAngle=0
DefaultMinTotalVelocity=0
DefaultMinDirectionalVelocity=0
DefaultMaxDirVelocityAngle=0
DefaultMinTargetDistance=0
DefaultMaxTargetDistance=0

* Increased frequency and precision of raptor jumping.
[ActJumpNewSettings]
DisableActJumpNew=0
DisableJumpingQuadrupeds=1
DefaultPush=65.000000
DefaultJumpAngle=65.000000
DefaultJumpTendancy=100
DefaultRepeatPeriod=3000
DefaultTendancyCheckPeriod=1000
DefaultMaxBodyTargetDirAngle=45.0
DefaultMaxHeadTargetDirAngle=30.0
DefaultMinTotalVelocity=0
DefaultMinDirectionalVelocity=1.5
DefaultMaxDirVelocityAngle=30.0
DefaultMinTargetDistance=3.0
DefaultMaxTargetDistance=6.0

* Slightly longer-range jumping, more random, 'straighter'
[ActJumpNewSettings]
DisableActJumpNew=0
DisableJumpingQuadrupeds=1
DefaultPush=70.000000
DefaultJumpAngle=65.000000
DefaultJumpTendancy=50
DefaultRepeatPeriod=2000
DefaultTendancyCheckPeriod=1000
DefaultMaxBodyTargetDirAngle=20.0
DefaultMaxHeadTargetDirAngle=20.0
DefaultMinTotalVelocity=0
DefaultMinDirectionalVelocity=0.5
DefaultMaxDirVelocityAngle=20.0
DefaultMinTargetDistance=4.0
DefaultMaxTargetDistance=8.0

Feel free to experiment with any of these settings. Just remember that angles must be between
0 and 90 exclusively and are in Euler angles, and that time values are integer-only (no decimals).
Also, if the level you're using has its own jump settings, the values you set in ATXconfig.ini
will have no effect.

;============================================================
Notes:
;============================================================

- Jumping, by default, will be performed by any dino capable of exhibiting the ActBite AI command.
  This includes raptors, albertosaurs, and Rexes (some user-made levels also have Trikes and others
  perform this action). You will have to explicitly disable jumping
  using JumpTendancy=0 in the levels' INI files to ground a T-Rex or such dino.

- The force that causes jumping can still be applied if the dino has not yet landed from a previous
  jump or if it is already in-air. To prevent this from being a problem, disable jumping for dinos
  in level areas that are prone to cause falling and/or set RepeatPeriod to higher values. There may still
  be some situations where dinos will jump twice before touching ground, despite prevention.

- The base scripting/coding for the entire jump behavior uses equivalent ActionType 10 (Physics) settings
  to the jumping raptor in TC-Isle. The "Impulse" script value is always set to "true", and the
  "Emitter" object is always located directly below the "Target" instance, its orientation depending
  completely on the latter's, and on the JumpAngle setting. No velocity script entries are used, only
  the force applied by the "Push" control.

- Obviously, though easily overlooked, a dino must have the T-Script bool ActBite set to "true" for it
  to jump ("bool ActBite = true"). If the boolean is set to "false" or missing, it will not jump.

- For diagnostic purposes, the CANIMAL cheat now includes ActJumpNew info. The five displayed
  values are, respectively, the Push, JumpAngle (in radians), JumpTendancy, and RepeatPeriod values, followed
  by the last recorded tick count used by the RepeatPeriod code.

- Tip: Diminishing the values of both JumpTendancy and RepeatPeriod
  will produce less predictable jumping patterns. Increasing both (which is
  nearer to the default values) will ensure more regular interval
  between jumps.

;============================================================
Below is an example INI file for jump settings (example.ini):
;============================================================

[General]
Push=65.000000
JumpAngle=40.03
JumpTendancy=70
RepeatPeriod=12000

;(any instances not listed below and present in the level will use values
;from the General section above)

[RaptorA09-01]
Push=40.000
JumpAngle=75.77
RepeatPeriod=10000
JumpTendancy=43

[TRexX01-00]
JumpTendancy=0		;(no jumping for this T-Rex)

[RaptorB05-300] 	;(this raptor will use the RepeatPeriod from the General section)
Push=65.000
JumpAngle=33
JumpTendancy=100

;============================================================

LEVEL-LOAD BACKGROUND IMAGE EXTENSIONS
-> BACK TO FEATURES
This simple feature allows load-time background images to be easily
added to levels. The feature itself can be toggled
in ATXconfig.ini, via the EnableNewLevelLoadBGs option
under the [General] section (enabled by default).

To assign a *.tga file to a certain level, simply place
the image file in the "[Trespasser folder]\MAPS\LBG\" folder
and rename the file to reflect the SCN level name, excluding
extension. For example, for the level "be.scn", you would
have "[Trespasser folder]\MAPS\LBG\be.tga".

There can also be a file named "default.tga" in the "LBG\"
folder. This file will be a substitute for the default
background used by Trespasser for levels without background
images (by default, this applies to all non-default-named
game levels).

The files placed in the "LBG\" folder have priority over
any and all default background files used by Trespasser
(defined directy in the executable).

Thanks to Slugger for requesting this feature.

WINDOWED MODE (SEMI-)
-> BACK TO FEATURES
This is a hack to provide semi-windowed support in
software mode. It does not have an actual 'window', but draws
on a smaller part of the screen. It has only been tested on
Windows ME. The hack is done by setting the main DirectDraw
SetCooperativeLevel with a parameter of DDSCL_NORMAL instead
of FULLSCREEN | EXCLUSIVE and removing the main call to
SetDisplayMode. Despite the presence of a "Full Screen" registry
key that is used by the executable, the game cannot normally be
run in a window, partly because the game doesn't even use or manage
a standard window (the handle returned by the CreateWindowEx call
is discarded).

To enable this feature, simply set the appropriate entry in ATXconfig.ini
to 1, or 0 to disable. This feature is also required for TresStrDbg.

This will only work in software mode. Make sure you set software
mode with the normal Trespasser exe before running this one,
preferably in 640*480 resolution. Also, you MUST set your desktop
to 16-bit color and I recommend a minimum resolution of 800*600
(or else it will fill the screen). The game menu is always drawn
as a 640*480 window, while the actual game can run at a user-defined
resolution. You may run into re-drawing problems with the menu if
the game is not in 640*480 as well, however.

Also, DO NOT try to set the game resolution using this hack.
The game will end up crashing.

Note that the "greying" effect that takes place when Anne is hurt
is not displayed in windowed mode. I believe Trespasser uses DirectX
functions to accomplish this effect; these would be unusable in a
forced window mode.

WDASM
This windowed hack permits the usage of the WDASM disassembler's
breakpoint system without hanging the game. Other debuggers may
not seize window control properly and may run into problems when
a breakpoint is reached (i.e, OllyDbg). You should be able to use
most of WDASM's standard functions, such as (auto) single-stepping
after a breakpoint. However, the "Pause" function does not seem to
work properly and will crash Trespasser.

To return to Tres after a break, make sure you press the "Run"
command (F9) and THEN return to Trespasser using ALT-TAB or by
clicking on the game's taskbar entry (as you would normally);
failure to do this can result in mouse problems. Do NOT attempt to
return to Trespasser simply by clicking inside the window.

You may, however, run into problems with WDASM's window re-drawing;
Trespasser's lack of a window forces DirectDraw to draw over the
desktop and other windows. One way to go around this is to set the
game resolution to 640*480 while setting your desktop resolution
much higher; you should be able to put WDASM or a good part of it
in the unused part of the screen. Also, beware of the mouse problem
that surfaces from time to time; when using breakpoints, even though
the debugger may take control, the mouse movement will be limited to
the game's window. To get rid of this restraint, use ALT-TAB or drag
around one of the debugger's windows.

OBJECT RANDOMIZER
-> BACK TO FEATURES
;--------------------------
;UPDATE
;--------------------------
As of ATX v1.50, the dino randomizer has been replaced
by the instance randomizer! The file format remains the same,
the only difference being that instances of types other than
CAnimal can be used. HOWEVER, the following entries will
ONLY have effect on CAnimal-type instances:
- DisableActGetOut
- ForceStayNearMax
- ForceStayNearOK
- ForceSleep *
- ForceWakeUp *
(* Even though most instances have these values, the INI
   entries will only work with those of the CAnimal class
   because the locations of these values in each class varies)
The randomizer will ignore these values if they are
assigned in any fashion to instances not of the CAnimal class.
Also, note that there are types of instances which
you should not attempt to randomize. While I do not currently
have a comprehensive list, it is known that you should not try
to move triggers (misc. problems) or CInstances not marked
as moveable (as the changes will not be recorded in savegames).
Other objects, such as guns and boxes for example, should
behave properly, or at least as well as the dinosaurs do.

Also included in ATX v1.50 are custom randomization files (by people
other than me). In order to use these custom randomization files,
simply go into the "MAPS\" folder and double-click on the
batch file (*.bat, icon looks like an MS-DOS program) that goes
with the files you would like to use. They are named "InstRandxxxxxx.bat",
where xxxxxx is the pseudo-name of the pack to use. For example,
opening "InstRandOriginals.bat" will apply the default ATX randomization
files to the "RAN\" folder. They will simply copy the available files from
the other sub-folders (under "RAN\") to the main "RAN\" folder, overriding the current ones.
Credit is due and goes to any and all contributors of these files. I should
note that the original ATX files, although originally lengthy to write, were and are imperfect;
you may have a better experience with the randomizer if you use
the custom files that were graciously supplied to me.
Note: You can delete the "RAN\RANxxxxx\" sub-folders, but this will cause
the batch files to have no effect (so you would then delete these as well).
The "RAN\", folder, however, should always be present. Deleting this folder
may cause ATX to misbehave.

;--------------------------

This feature allows random selection of instance locations
from pre-written lists specific to certain level files. These
lists can be found/created/edited as INI files in the "MAPS\RAN\"
folder; the INI filename must reflect the level's SCN name (for
example, the town level, "IT.SCN", will have an INI name of
"IT.INI"). Selection is randomized upon all level restarts, new games,
and games loaded from the Quick Load menu (quick-load cheat).

To enable random selection (provided a list exists for the level
you are playing), open the "ATXconfig.ini" file and set the
"RAND" entry to 1 (assign 0 to disable).

Please feel free to write and distribute your own randomization
seed files, whether it be for the default levels or for user-made levels.

The selection process is fairly powerful; it allows the randomizing
of locations for specific instances and the limitation of certain
locations to certain instances.

Included in this package are randomization files for all default
full version game levels. You can use the "MAP" and "MDINO" cheats to
examine the changes in positions upon level restart.

Note: Random instance locator will not affect saved games in any way
      (and games saved from a randomized level load should save
      properly). However, if you load a game from a savegame that
      was saved with the randomizer enabled, but restart the level
      with the randomizer disabled, the dino positions may not be
      the same positions that were present at first randomization,
      but most likely the level's default instance positions.
Note2: The randomization routine used is the one used by the MSVCRT
       C standard library and is only as random as that routine may be.

;============================================================
LIST FILE DETAILS
;============================================================

Note: A "section" refers to an INI file entry that is enclosed
in square brackets []. A "key" refers to a member of that section
which can be identified by its following "=" character (which is
then followed by a value/string).

The INI file starts with an "Instances" section, which
holds all of the instance names which will be assigned random
positions. These names should be specific to the loaded level.
Instances are defined via consecutive "Instance#" keys (Instance1,
Instance2, Instance3, etc.). Order is not important as long as
the numbering is consecutive (i.e., bad: 1,2,3,5; good: 1,4,2,3).
Also in the "Instances" section are found keys named
"NumberOfENTRYSections" (required) and "Reserve#" (optional). These
will be discussed shortly.

The core of the list lies in the other sections. There are two types
of sections: random selection sections, named "ENTRY#", and instance-reserved
sections, named anything but "ENTRY#" (naming such a section "ENTRY#"
may cause crashes or faulty behaviour).

Random selection sections are assigned (only once each) to
random "Instance#" key instances in the "Instances" main
section, at the exception of "Instance#" instances which have
an extra "Reserve#" section of the same numbering. Like "Instance#",
the naming/numbering of the sections MUST be consecutive (though not
in appearance in the file). For example, if there
are three such sections, they should be named ENTRY1, ENTRY2, and ENTRY3.
Like all other values, these names are assumed to be CASE-SENSITIVE.

* The number of such sections MUST be declared in the "Instances"
section using the key "NumberOfENTRYSections".

Once a random section is assigned to a certain instance,
a certain random "Location#" value from that section is finally
assigned to the instance. The other "Location#" keys from the section
will not be used following this (if there are any). The "Location#"
keys MUST each hold three floating-point values, structured as follows:
	Location#=X, Y, Z
If values are missing or if the space characters between the values
are absent, the game may crash upon loading. Make sure to NOT add
extra space characters.

* There MUST be an "Entries" key somewhere in the section
that defines the number of "Location#" keys in the section.

* If there are not enough "ENTRY#" sections for the instances defined,
some instances will use their default level spawn locations.

* There are also optional values that can be used within the sections:
	ForceStayNearMax
	ForceStayNearOK
	ForceWakeUp
	ForceSleep
	DisableActGetOut (set to 1 to disable ActGetOut)

Instance-reserved sections are sections which can be referred to
in the "Instances" section. If an "Instance#" entry has a "Reserve#"
entry of the same numbering in the "Instances" section, the name
pointed to by the "Reserve#" key will define the instance-reserved
section to assign explicitly to the instance defined by the "Instance#"
key. Neither the section nor the instance will be used in random
section selection; it will be proper to the specified instance.

The instance's start location will then be randomly selected from the "Location#"
keys under the specific section in the same way as the random selection
sections (also using the "Entries" value).

Note that you can use this feature to give an instance a non-random starting
location without having to modify the level's script: simply
assign a specific section to an instance using "Reserve#"
and only put one "Location#" entry in the section.

IMPORTANT NOTES:
- Almost all names/values are CASE-SENSITIVE.
- Many values are SPACE/TAB-SENSITIVE.
- DO NOT add extra 0's before a number in a key/section name
  (i.e., BAD: "ENTRY000022"; GOOD: "ENTRY22")
- For location values, strings must follow the exact format:
  [X Position],[SPACE CHARACTER][Y Position],[SPACE CHARACTER][Z Position]
- Instance names must NOT be longer than 49 characters.
- Section names MUST BE UNIQUE.
- Non-random selection section CANNOT be named "ENTRY#".
- In some cases, setting WakeUp/Sleep values different from the originals
  may cause lockups and/or other problems (especially if the original script
  defines only one of the two or if they are both absent)

OTHER NOTES:
- I've noticed that abusing the "DisableActGetOut" setting and allowing
  too many dinos into the same buildings may crash the game. Use sparingly.
- I've experienced lockups (in the lab level) when setting the "ForceStayNearOK/Max"
  values to 5 or lower, as well as culling problems. I am uncertain as to whether
  the lockup pertains to these values directly, but I have not experienced those problems
  under any other circumstances.

Below is an example of a random location list INI file.

;============================================================
;EXAMPLE INI LIST FILE (exclude comments)
;============================================================

[Instances]			;Main section
NumberOfENTRYSections=3 	;Number of ENTRY# sections
Instance1=RaptorA00-00		;CAnimal instances
Instance2=RaptorB00-02
Instance3=RaptorC01-08
Reserve3=ExtraSection		;Reserves/assigns locations section "ExtraSection"
				;to dino "RaptorC01-08".

[ENTRY1]			;First random section of locations
Entries=2			;2 location entries in this section
Location1=-99.33, 100.33, 93333.43	;possible spawn location
Location2=346436.24234, 234, 5235.444	;possible spawn location
ForceWakeUp=100.89		;selected dino will wake up at this distance from player

[ENTRY2]			;Second random section of locations
Entries=4
ForceStayNearMax=135.00 	;force the StayNear values for the
ForceStayNearOK=125.00		;instance assigned to this section
Location1=23235.435, 4545646, -324.77
Location2=444, 6456, 666
Location3=-5, -8, -5.8
Location4=55.55, 55.55, 55.55

[ENTRY3]			;Third random section of locations
Entries=1
Location1=-34, 6, -9
ForceSleep=46			;selected dino will freeze at this distance from player

[ExtraSection]			;Section devoted to RaptorC01-08
Entries=3
Location1=2342342342, 456, 567
Location2=-435, 345.456, 74666
Location3=9999, 4534, -455
DisableActGetOut=1		;disables ActGetOut for this dino
ForceStayNearMax=135.00 	;force StayNearMax value for RaptorC01-08

;============================================================

DINOSAUR VOCAL T-SCRIPT ADDITIONS
-> BACK TO FEATURES
This experimental feature can let level makers define
additional 'Dinosaur' types for audio. As far as could
be noticed, the Dinosaur Integer T-Script value originally ranged
from 0 to 6, leaving no room for more than 7 different types
of audio compilations for different behaviours. Using higher
values would often crash the game.

As far as I can discern, these crashes were simply the result
of Trespasser allocating a fixed amount of memory for the 7
possible values, and then using the values as indexes into
that memory without checking for reads past the allocated buffer
(the total amount of allocated memory is not known, but the
raw amount required for 7 values can be calculated).

The procedure responsible for this problem has been intercepted
in ATX 1.36. ATX can thus be instructed to allocate a separate
buffer to hold data from successive Dinosaur T-Script values (this
is done when the game is started, not during level load). This
enables level designers to assign sets of Vocal Boxes (AI Command
class) to their new dinos (CAnimal class).

By default, ATX will allocate memory for 23 extra Dinosaur values.
This gives a total of 30 values, ranging for 0 to 29. This amount
can be modified using the ATXconfig.ini entry, NewDinoSoundTypesCount.
This count does not include the original 7 values. If set to 0, no
extra Dinosaur values will be supplied, and the feature will be
disabled completely (no limit checking, old EXE code only).

This quantity must be regulated, because every additional value
costs 1680 bytes of memory. For 23 values, this means 38 640 bytes. This
is very reasonable, but close to the size of ATX 1.36 itself; it
probably means nothing to you, but it is a sin to any assembly
programmer. Nevertheless, as previously stated, this value can
be increased if needed (i.e., if ATX is included in a separate mod
or level pack).

It is important to note that every Dinosaur value can be assigned
a maximum of 14 Vocal values for the Vocal Boxes (0 to 13). The
Trespasser executable reserves 120 bytes for each Vocal value,
but by default does not check whether or not the memory index
calculated from the Vocal values surpasses 120 bytes. Depending
on the combination of Vocal and Dinosaur values used, this could
lead the game to use inappropriate data from the albeit valid
Dinosaur buffer, without signaling an error.

The new ATX procedure has been written to check for Vocal values
higher than 13 and Dinosaur values higher than (NewDinoSoundTypesCount+6).
If any are detected during level load or in-game, ATX will 'safely' crash
the game (with an easily handleable error); if this happens, check
'ATX_LOGFILE.txt' to see if any of these two possible errors were
detected. The value in question will be indicated, though in
hexadecimal (use the Windows calculator for conversion).

For examples on using Dinosaur and Vocal T-Script values, simply
open a level using TresEd and use the "Hacking" menu to dump
the data to a text file ("levelname_values.txt"). Search for
"int Dinosaur" or "int Vocal" to see and compare their usage.

Thanks to MikeTheRaptor and JPDS for requesting this feature
and providing info.

TRESSTRDBG
-> BACK TO FEATURES
====================================================
WARNING: I CANNOT GUARANTEE THIS WILL WORK ON EVERYONE'S COMPUTER.
USE AT YOUR OWN RISK.
====================================================

====================================================
TresStrDbg Debug String Displayer - DLL-based version
====================================================

TresStrDbg is a hacked Trespasser executable coded to display
various debug strings in real-time during the game as they are
referenced by the program. During game development, programmers
will use these strings to track and debug parts of their code.
This technique was used in Trespasser, and the proof of this is
the presence of many unused strings inside the executable. The
actual code that was used to display these strings was removed
before release. The game still references these strings very often
during execution, however, but they are passed as parameters to a
single empty function, that has remained empty until now.

This new DLL version sports a few important changes:
-> Can be enabled/disabled via the ATXconfig.ini file. Set the
   appropriate entry to a non-zero value to enable (read next).
-> Time-based string display. It will cycle through displayed strings
   at a certain rate, separately from keyboard commands. The amount
   of time spent per display can be set via the INI entry
   This interval is in milliseconds. If this value is not 0,
   TresStrDbg will be enabled, provided the next condition is met.
-> ONLY runs in windowed mode. To run TresStrDbg, the windowed mode entry
   in ATXconfig.ini must be set to 1. This permits more efficient
   drawing code by using only the windows GDI functions to display
   the strings. Also, if the game crashes or becomes unstable, it can
   be terminated using CTRL-ALT-DEL. It is important to note that you
   still cannot switch processes even in windowed mode. This is due
   to the fact that TresStrDbg will constantly attempt to gain input
   focus from the user (this feature prevents input problems when
   other windows are open). All conditions for running the game in
   windowed mode thus apply (i.e., 16-bit desktop color...).
-> NEW INPUT CONTROL. Because of Windows' use of of the function keys,
   the control keys had to be changed. They are now all keys on the
   numeric keypad. See KEYBOARD COMMANDS for further details.
-> Support for four different executables, including the Demo.

====================================================
NOTES:
-> I still highly recommend closing all windows before running
   TresStrDbg. Refresh your desktop to clear garbage pixels.
-> Make sure "NUM LOCK" is enabled on your keyboard LEDs.
-> If text appears corrupted or appears as white (on white background),
   try restarting your computer. This especially applies if the game
   experienced errors prior to running TresStrDbg.
-> Make sure to read the text file on "windowed" Trespasser.

====================================================
STRING DISPLAY
When you run the program, consecutive strings will be displayed in
the top-left corner of the screen. Below each string will be the
return address to the procedure which called the previously-empty
function. This can be used to track the calls back into the executable
with a disassembler.

If you have open windows upon running TresStrDbg (which can corrupt text
display) or notice strings not appearing for any reason, you will at
least be able to save the strings to a file in order to examine them
properly using the numpad1 key (described later).

KEYBOARD COMMANDS
TresStrDbg now uses numpad keys 1,5,8,9 to handle debug strings.
They are [still] slightly cumbersome, but you'll get the hang of it after
awhile ;). It is [still] possible that they interfere slightly with Windows
commands before the main screen is loaded, but not severely.
As stated before, make sure "NUM LOCK" is ENABLED on your keyboard prior
to running TresStrDbg.

Here is a list of the keys and their functions:

NUMPAD 5 - This is the PAUSE key. As TresStrDbg cycles through strings,
you can press and hold this key to pause the game and the display
indefinitely. As soon as you release the key, the next string will
be displayed (assuming there is one). This key can also be used if
pressed quickly to cycle quicker through strings if the timed interval
is long.

NUMPAD 8 - This is the pass-through key. It will cycle quickly through
all passing strings. Speeds depend on your computer. It is 'slightly'
cumbersome when it comes to moving around in the game, but a fun
challenge ;). When no longer pressed, the game will go back to displaying
strings at a certain interval.

NUMPAD 9 - This is the EMERGENCY EXIT key. I do not recommend constant
usage of this key, especially during loading, because it aborts the
program safely but without unloading any files (it only calls
ExitProcess). A simple touch of this key will cause an exit. Use with
care.

NUMPAD 1 - This key dumps the current string info to a file. The current
string info is APPENDED to the file (and its order inverted), which
is created if non-existing. This key ONLY works when used with
keys NUMPAD 5 and 8; it does not while the game cycles strings automatically.

The output file is "SDBG_DUMP.txt" and is placed in your root "C:\"
directory. If the file is not created, you may have run out of disk
space or have run into some other random problem.

To save a single string, use NUMPAD 5 to pause display, and simply press
NUMPAD 1 once. The info will only be saved once per string, despite
excess key presses.

To save a batch of strings, hold NUMPAD 8 and 9 at the same time.
As soon as either is depressed, the string storing will halt. Use this
feature cautiously, as the dump file can grow largely and very quickly.

====================================================

OTHER IMPORTANT MENTIONS
TresStrDbg is by NO MEANS perfect, and should not be used to provide
exact debugging info. It is mostly only an example of how Trespasser
runs and loads (as well as the excess of useless code). I would say
that it is exact about 75% of the time.

The main obstacle is that the empty function which is called every
time these strings are referenced is also called by every other
piece of code that calls an empty function (which happens to mean
thousands of extra calls per execution). As a result, the only way
to verify whether the calling code is doing so in reference to a
string is by verifying the two first parameters for a valid string
address (in some areas, the string is passed as the first parameter,
and in others, the second). But there are problems with this.

The first is that, to avoid displaying hundreds (if not thousands)
of excess strings, the address parameter must be verified and limited
to a certain range. The range used here is that of the executable's
data section. However, it is possible and even very probable that
the program passes valid strings out of this address range (in the
stack, for example), causing TresStrDbg to dismiss these strings
completely. Thankfully, however, there aren't too many of these.
Previous versions of the program that allowed stack addresses did
not report huge differences in shown strings with this one (but
they reported way too many wrong strings).

The second problem is that it is still possible to have bogus
strings show up. For example, if you use the Quick Load
(see trescom.org) menu and load a level, there will be a string
displayed that shows the file(s) for a completely different level.
In fact, after having checked the code for this, the value passed
to the function is valid but has nothing to do with the caller's
current execution. The value passed is the result of the caller
saving a register onto the stack (which passes values) before
running, and, coincidently, this value being the address of a
valid string. There are only a few of these throughout the exe,
again thankfully, but there is no clear way to distinguish them
from real calls.

The last problem is more or less Trespasser's own fault. You
might notice, from time to time, that TresStrDbg will output
a string which will seem to introduce another string that ends
up missing. Examples of this include "Terrain shadow buffers:"
and "Terrain textures:" that are printed once the game is loaded.
I looked at some of the code for these strings; the problem lied
in the fact that Trespasser simply didn't include code to display
a second string, skips to the next one instead. This simply can't
be remedied.
====================================================

NIGHT MODE
-> BACK TO FEATURES

* Night Mode has been updated in ATX v1.57.

This feature, introduced in ATX v1.50, allows you to play almost any Trespasser level at night, or at least as closest to a night setting as I could make it. It can be enabled in ATXconfig.ini, under the [NightMode] section, with the EnableNightMode key (set to 1). There are many color options that can be specified as well (see ATXconfig.ini File Details). Custom settings may be desirable if you find the default settings too dark, or if you don't share my tastes.

The feature can unfortunately not be toggled once the game is loaded. This is due to many problems imposed by the game system as well as bugs in the game itself. You will have to exit, toggle the feature, and re-enter the game to successfully turn it on/off.

Generally, it should function adequately with savegames, with the exception being that games saved while Night Mode is activated will not run properly if they are then loaded in another game session with Night Mode disabled.

There is a chance that the feature does not work properly with some video cards and drivers. This is an issue with the fog color and sky height properties. However, it should almost always work in software mode, according to my tests.

The hack itself works by changing the Default Global CLUT settings at every level start (see Andres's T-Script Reference), along with fog color, some fog properties (for software mode), sky height (for hardware mode), some default particle colors, and ambient light (though this has a negligeable effect). The Global CLUT settings were taken from Rebel's "Dark Demo" level, which deserves credit for parts of this feature. It should be noted that most of the time spent on this went into creating the feature itself, so I in no way promise that the other default colors are aesthetically correct.

Note that some objects will not be darkened by this mode. This especially applies to translucency effects, which will not be affected at all. I did not even attempt to cover these up, because it would nullify all potential for flashlights (which some levels, such as the great TC-Isle, have). Also, not all particle effects are covered, only the most essential ones, which do not include gun shot particles. The muzzle flash effects and animated textures are also not explicitly affected.

New in ATX 1.55 are two options available in ATXconfig.ini to tweak the fog settings in Night Mode (FogHalf and FogPower). They have the same definitions as their ActionType 05 counterparts.

Also new in ATX 1.55 is an *.ini system that can be used to give alternate locations to objects in a level when in Night Mode. The *.ini files should be placed under "MAPS\NMD\" and named after their related levels' *.scn filenames, but with an *.ini extension instead of *.scn (i.e., be.scn -> be.ini). These files contain a single [General] section and under it, three possible entries for every instance to teleport when in Night Mode (or in normal mode, or in both): InstanceX, NormalModeLocX, and NightModeLocX, where X is a number between 1 and the total count of instances to teleport.

InstanceX designates the name of the instance to teleport, while NormalModeLocX and NightModeLocX designate the positions to use for the instance for normal mode and and Night Mode, respectively. These positions use the standard position format: X, Y, Z. The numbers are used to relate instances and positions. For example, Instance1=SomeInstance will use the position NormalModeLoc1=xxx.xx, xxx.xx, xxx.xx when Night Mode is disabled, and the position NightModeLocX=xxx.xx, xxx.xx, xxx.xx when Night Mode is enabled. Any or both of the positions can be specified (both can be used at the same time to avoid modifying a level's files). If either of the values is not to be used (i.e., to use the object's default position from the level), simply omit the entry altogether or set it to =none ("none" is case-sensitive). Any values other than full location values, the none keyword, or omittance of entries will cause errors.

You can have any number of instances (supported by the INI format) as long as the entry names are consecutive. ATX will stop recognizing entries as soon as an InstanceX instance name is not found, where X starts from 1 up to 4 billion. So if you have an Instance1, an Instance2, and an Instance5, regardless of other values, only Instance1 and Instance2 will be detected for teleportation.

An example file is provided. See "MAPS\NMD\example.ini".

* The default Night Mode settings in ATXconfig.ini have been changed in ATX 1.57, tweaks provided by Chupacabra from Trescom forums. The settings are yet darker, but also more realistic. In case you find those settings inappropriate for certain levels, you may use your own settings or try the settings provided below:

ATX 1.55 Default Night Mode Settings:
[NightMode]
EnableNightMode=1
FogNearValue=-2.0
FogFarValue=-1.0
FogColor=0x00080818
CParticlesColorMax=0x002D2D2D
CParticlesTypes=31
DefaultGlobalClutStart=0x00101010
DefaultGlobalClutStop=0x003A3A3A	
FixedAmbientLight=0.001000
SkyHeight=10000000.0
FogPower=0.6
FogHalf=0.5

QUICK SAVE
-> BACK TO FEATURES

You can now use the F9 function key to initiate a quick-save of the game state. The file will appear in the "Load Level" dialog under the name "ATX Quick Save". Depending on the exact moment at which the game was saved, there might or might not be a snapshot to go along with the save file.

ATX records the name of the current quick save file in ATXconfig.ini, under [GameSaving], via the QuickSaveCurrentFileName key. Make sure you don't have ATXconfig.ini open before you launch the game, or this key will not be written to properly. You DO NOT need to use ATXconfig.ini to enable this feature. Pressing F9 will do this automatically. In general, you should not change the contents of the QuickSaveCurrentFileName key unless you are sure that you know what you are doing (as a general rule, the file indicated by that key will be deleted and re-created at some point, possibly under a different name, so putting another name might erase one of your savegames if the filenames match).

Update (1.52): If the F9 key causes conflicts with other programs running on your system, you can disable the ATX Quick Save function in ATXconfig.ini, under [GameSaving], by setting EnableATXQuickSave to 0.


DRAW DISTANCE AND GAME SPEED VARIABLES
-> BACK TO FEATURES

These variables are used thoroughly by ATX and throughout. The new defaults for both can be set in ATXconfig.ini, under the [Variables] section. They are both floating-point values. If they are set to 0, they will keep their default values as stated in the executable. They can also be set manually using a hex editor at their respective addresses, which are enumerated in another part of this document.

The Draw Distance can more easily be set using the new ATX menu slider, which by default shows up in the game's Video Options menu. While its values are not noted on the slider, they range from 15.000000 (far left - default) to 315.0000000 (far right). It can also be set in real-time using hotkeys found in ATXconfig.ini (DecreaseDrawDistance and IncreaseDrawDistance). The SHOWDD cheat can be used to display it in-game. Note that while increasing the Draw Distance will generally make graphics look much better (i.e., by diminishing the 2D-ization of objects past certain distances), it can have a severe effect on framerate if not used moderately.

The game speed variable is a bit more involved. It is used by the BIONICWOMAN cheat, the Matrix effect, and even level-based scripts from the new ActionTypes. As a general rule, levels that customize the game speed variable have priority over most other features. It is strongly discouraged to use more than one feature that exploits the game speed variable at once.

You should note that game speeds are by default saved in savegames explicitly by ATX. This is to make sure levels that use the new Actiontype 101 to modify game speed do not lose their effect when games are saved and reloaded. However, this has the side effect of causing all game speeds to be saved in savegames, regardless of what feature set it. If you would rather override this feature and force ATX to use your game speed setting, you should set the OverrideSaveGameSpeed key in ATXconfig.ini under the [Variables] section to 1. This will not prevent the saving of game speeds to save games, but will keep ATX from applying them when the savegames are loaded.


DEMO VERSION EXIT SCREEN REMOVAL
-> BACK TO FEATURES

DISCLAIMER: BY USING THIS FEATURE, YOU CONFIRM THAT YOU OWN AND HAVE PURCHASED A LEGAL COPY OF THE PC GAME TRESPASSER BY DREAMWORKS INTERACTIVE. IF YOU DO NOT OWN NOR PLAN TO OWN A COPY IN THE NEAR FUTURE, PLEASE DISCONTINUE USAGE OF THIS FEATURE IMMEDIATELY.

This hack (though not new) can be applied via ATXconfig.ini, under the [General] section, using the DisableDemoExitScreen key. It will remove the game exit advertisement screen if set to 1 (which is the default value).


HOTKEYS
-> BACK TO FEATURES

*** ATX 1.60 introduces a new hotkey system for all in-game cheats. Some of the old key entries under the [Hotkeys] section in ATXconfig.ini are now obsolete, will have no effect, and thus have been removed from the default listing.

Some ATX features provide quick-access HotKeys for increased efficiency or necessary controls. Many can be set in ATXconfig.ini, under the [Hotkeys] section. You should only specify lowercase alphanumeric characters, without spaces. This implies the 'a' to 'z' and '0' to '9' keyboard characters. For example, "SomeFunction=m" will make the 'm' key toggle or use the SomeFunction function. Notice the lowercase character and the lack of spaces or tabs.

The key input rate may depend on your keyboard repeat rate as set in the Windows Control Panel. In general, all hotkeys are non-intrusive (will not replace existing functions for those keys, only add to them), except for "ToggleNewKeys", which you may be required to use when activating the console to prevent hotkeys from triggering functions as you type text. Note, however, that you can not have two hotkeys sharing the same key, because they are based on the same input system, despite not interfering with the standard Trespasser controls (since this one uses a different input system). *** Some ATX features such as THIRDP have their own set of hotkeys and some of these do use the same system as the ones from [Hotkeys]; you will not be able to use these keys unless you reassign them. For example, THIRDP uses the "n" and "b" keys to toggle some aiming features, so these keys will not work as [Hotkeys] entries unless you disable them under the THIRDP settings.

ATX 1.60 allows you to assign hotkeys to any and all existing cheats for Trespasser, both original and ATX-based. In fact, ATX places no restrictions on what cheats you may want to try to toggle using these new hotkey entries, so *BE WARNED*: if a specific cheat requires parameters to function properly or to prevent crashing, ATX will not prevent you from toggling the cheat anyway. Use at your own risk, and have fun.

The default ATXconfig.ini ships with a few default key entries, notably ToggleNewKeys and keys for setting a temporary draw distance. To use the new ATX 1.60 cheat hotkeys, you simply need to add entries labeled with the same name as the cheats you want to use, and then assign a key after the equality symbol as usual. The format is as follows:

[Hotkeys]
CHEAT1NAME=x
CHEAT2NAME=x
CHEAT3NAME=x
...

... where CHEATNAME is the cheat's name as you would type it at the console, and x is the key you want to assign it, different for every cheat (following the usual rules for valid hotkeys). Here's an example:

[Hotkeys]
ToggleNewKeys=y
MAP=m
LOC=l
FLY=i
CANIMAL=u
N=o
B=p

Again, do not forget that you cannot use the same key twice, and some keys are by default reserved for other function such as THIRDP (aim gun keys).

Note: Features can also have customized input systems which are not defined using HotKeys in the [HotKeys] section. These systems are defined separately for their parent features.


TPA (MENU) FILE RELOCATION
-> BACK TO FEATURES

This simple option allows you to change the location of the Menu.tpa file to a folder within the user's root Trespasser folder. To enable this, simply place your alternate Menu.tpa file within the Trespasser folder (i.e., C:\Program Files\Dreamworks Interactive\Trespasser\ by default) or any folder within that folder, and rename Menu.tpa to whatever you wish. Then, open ATXconfig.ini, locate [TPAFiles] section, put your tpa's sub-folder and filename as the value for the entry AlternateMenuTPA. For example, for you place it directly in the main folder and name it asdf.tpa, you should have something like AlternateMenuTPA=asdf.tpa. If you place it in a sub-folder such as MAPS\, you would have something like AlternateMenuTPA=maps\asdf.tpa.

Filenames and paths are not case-sensitive. They should not contain apostrophes (""). If you no longer wish to use the feature, simply set the appropriate entry to 0.


ALTERNATE LEVEL TPAS
-> BACK TO FEATURES

* This feature is currently experimental. This documentation applies mainly on a theoretical level and may not behave as expected.

Note: In this description and its descriptees, the term "alternate" is loosely interchanged with the term "additive" when referring to the new optional level-specific TPAs.

ATX 1.60 allows level makers to use additive TPAs with their levels via the MAPS folder, enabling sounds to be added without having to modify the users' existing TPAs and the level's T-Script. These TPAs are simply extensions to the usual Stream.tpa, Effects.tpa, and ambient.tpa sound files, with the files being potentially portable between levels as well as unique between the levels if necessary. They are loaded into memory only when a new level is loaded, and are released from memory as soon as a different level is loaded or when the game exits ***. The TPAs themselves can be modified using Andres James's TPAAdd command-line utility.

You can specify up to 3 additive TPA files for your level, each mimicking one of the original TPA file types (Stream, effects, ambient). Instead of adding sounds to the user's TPAs using TPAAdd after level download, you can put all of your sounds inside the additive files and distribute these with your level instead. When ATX detects that a level is using an additive TPA, it will load the file atop the already-loaded original game TPA files, and everytime a T-Script is set to play a sound from one of the original files, it will first scan its respective additive file. If the sound is found in the additive, it will be played immediately. If not, ATX will let the game process the sound in the original TPA as usual. This way, you do not have to modify your T-Scripts to accomodate a new sound system; it is all done externally and automatically. An added bonus is that you can replace the original Trespasser sounds simply by adding them with the same name in the additive TPAs, since the additives are scanned first in real-time (the original sounds in the original TPAs will be ignored if sounds with the same names are found in the additive TPAs).

Which sounds you put in which additive TPA will matter. i.e., if you are using a sound that you would normally add to Stream.tpa, you will put it in its own associated additive file. You can designate the files by including an *.ini file in the "MAPS\LVL\" folder that now comes with ATX; the *.ini file, as usual, must be named after your level's SCN filename (i.e., it.scn -> it.ini). Inside the *.ini you will have to place the following section and keys:

[AdditiveTPAFilenames]
Stream=
Effects=
Ambient=

Each of the above keys (Steam, Effects, Ambient) can be assigned a filename for its additive TPA file, with extension and partial path. You can specify any or all of the above; those with keys not included in the *.ini will only use the original Trespasser TPA files. In turn, you can put the additive TPA files themselves either directly in the "MAPS\LVL\" folder or in a subfolder of this folder which you will have to designate in the key values. If there is only a filename (no path), the files will be taken from the LVL folder, otherwise from whichever subfolder is included in the filename. You must separate subfolders using the backslash "\" character. THE PATH CANNOT CONTAIN SPACES OR APOSTROPHE CHARACTERS. Here is an example (do not include comments):

[AdditiveTPAFilenames]
Stream=mysupersubfolder\addStream.tpa	     ;-> "[Tres folder]\MAPS\LVL\mysupersubfolder\addStream.tpa"
Effects=myeffects.tpa			     ;-> "[Tres folder]\MAPS\LVL\myeffects.tpa"
					     ;-> (Ambient key omitted) do not use an alternate ambient file, use original Ambient.tpa only

The possibility of using *.ini files to designate your filenames allows you to re-use the same files for multiple levels; all you need is an INI for each level name, with keys pointing to the same files.

Three empty TPA which you can use as additive files have been provided in the folder "MAPS\LVL\ExampleTPAs\", with an example INI in the preceding LVL folder. These files were graciously provided by Rebel of Trescom (many thanks). They have the same names as the original TPAs, but with an "alt" prefix. In general, although it is not necessary, I would recommend giving unique names to either your sub-folder containing your additive TPAs or to the TPAs themselves. This will prevent users from accidentally overwriting essential level files when installing levels.

For diagnostic purposes, you can disable the entire feature in ATXconfig.ini, under [TPAFiles], via the DisableAlternateLevelTPAs key (set to 1). This does not affect the alternate Menu.tpa feature.

* IMPORTANT NOTE: While Stream and Ambient additive TPAs have been tested to work properly, support for the additive Effects.tpa is still very experimental. This TPA is different from the others in that its original contains a "foley table", as noted in the Trespasser File Formats reference. This table is responsible for assigning which sounds to play when different SoundMaterials collide. It is "built-into" the file and cannot be managed by ATX. As a result, you may experience problems with sounds originating from collisions; please notify me if you run into such issues (or any other, for that matter).

*** TPA files are loaded into memory at every new GRF file load. If the "Disable Fast Restart" option is checked, they will be reloaded at every level restart of the same level (the time required to load these files is not very significant, however).


HEADS-UP DISPLAY
-> BACK TO FEATURES

ATX 1.58-1.59 showcases a basic HUD system capable of displaying a few common game items such as player health and ammo. You can enable the HUD in ATXconfig.ini, under [General], by setting UseHUD=1. This setting will instruct ATX to use the images and settings found under the "MAPS\HUD\" folder for screen display. You can also toggle the HUD in-game with the "HUD" cheat; however, this does not remove the files from memory as does the INI entry when set to 0. You must restart the game to completely toggle the feature with the INI entry.

The default HUD images and configurations for ATX 1.58-1.59 were designed and provided by Slugger of Trescom, who also spawned the idea for this feature (as it is).

The HUD is customizable. It can be modified by changing the files found in the "MAPS\HUD\" sub-folder of ATX. The file "ImagesLocations.ini" contains the settings and required info. Other files present in this folder should include 24-bit bitmaps (i.e., from MSPaint).

ImagesLocation.ini

ImagesLocations.ini contains 4 possible section: [ImageFilenames], [PlayerHealthCountBG], [PrimaryAmmoCountBG], and [SecondaryAmmoCountBG].

[ImageFilenames] contains a series of key entries that define the bitmap filenames to use as images for the HUD, including *.bmp extension. These bitmaps should be found in the HUD folder and follow the 24-bit uncompressed RGB format. For every bitmap, the color for the top-left pixel defines the color-key for transparency when displaying the image. For example, if this pixel is white, then any other white pixel in the image will appear as transparent and will not be shown. It is important to note that Trespasser uses 16-bit display, so there will be some color loss in your 24-bit bitmaps. It is recommended that you keep a simple or contrasting color-key such as white, green, blue, etc. if you use many shades of the same color(s) in your images, to avoid possible transparency problems during pixel conversions.

There are 13 possible image entries: PlayerHealthCountBG, PrimaryAmmoCountBG, SecondaryAmmoCountBG, and Digit0Image-Digit9Image. PlayerHealthCountBG is the background image for player health display, PrimaryAmmoCountBG is the background image for the ammo value for the gun the player is currently holding (if any), and SecondaryAmmoCountBG is the background image for the ammo value for the gun the player currently has holstered (if any). Digit0Image-Digit9Image are 10 different bitmaps that will be used to display the numerical values for ammo, health, etc., starting from digit 0 to digit 9, respectively. Simply put, instead of using default fonts to display numbers, you must store the digits in images. This is a little more work, but provides extra flexability.

If any of the 3 background images is not specified or is invalid, it will not be displayed in the HUD, along with its related numerical values. For example, if you do not want a display or values for secondary weapon ammo (holstered), you can simply omit the SecondaryAmmoCountBG INI entry. For the 10 digit bitmaps, you should always have all 10 bitmaps valid and specified, and preferably have all of them share the same width and height attributes, though this last point is not required.

The next sections, [PlayerHealthCountBG], [PrimaryAmmoCountBG], and [SecondaryAmmoCountBG], are generally optional, but considered required if their corresponding entries under [ImagesFilenames] are present. Each of these sections holds the same entries, but applies them to the different displayed values. Each of the 3 possible sets of values (health, primary ammo, secondary ammo) can display up to 3 things: a background image (to 'hold' the values), a current value (i.e., current health, current ammo), and a maximum value (i.e., an 'out of' value, such as max health, max ammo). The following entries define how these are displayed:

AlignmentX=
AlignmentY=
DisplacementX=
DisplacementY=
DigitsOffsetX=
DigitsOffsetY=
Digits2OffsetX=
Digits2OffsetY=
UseDigitPadding=
UseResizing=
DefaultResizeXRes=
DefaultResizeYRes=
UseDisplayMaxValue=
* All of these values are integer (int) values.

AlignmentX and AlignmentY specify the general area on-screen where to place the main background image. For AlignmentX, a value of 0 indicates left of screen, 1 is center, and 2 is right. For AlignmentY, 0 indicates top, 1 is center, and 2 is bottom. So, for example, to have an image placed at center-right of screen, you should have AlignmentX=2 and AlignmentY=1. Alignment is implicitly calculated from the image's width and height.

DisplacementX= and DisplacementY= are offsets applied to the image's position on-screen after alignment has been done. If UseResizing (explained later) is set to 0, these values are always absolute pixel position values, while if UseResizing is set to 1, these values will follow screen resolution accordingly. Setting DisplacementX to a positive value will move the image toward the right of the screen while a negative value will move it left. Setting DisplacementY to a positive value will move the image downward, while a negative value will move it upward. * BE CAREFUL when using these values. If any part of your image (even one scanline) is thrown out of screen as a result of offsetting its position with displacement values, DirectDraw will not output the image at all.

DigitsOffsetX and DigitsOffsetY respectively define the horizontal and vertical offsets from the top-left corner of the background image where the first (current) numeric value associated with the image will be displayed (DigitsOffsets should be positive values). i.e, player health, ammo remaining, etc. If UseResizing is set, these values will be adjusted depending on resolution so that the numeric values are printed at the same location even with image resizing. If not, these are absolute pixel offsets. The displaying of the individual digits for the number will begin at this offset but be done automatically by ATX. The number may consist of up to 3 digits, which will be positioned adjacently. By default, there will be no extra spacing between the digits; they will simply be separated by width. In cases where digits are omitted, spaces reflecting the width of the omitted digit will be added. Values are constrained to being between 0 and 999, naturally, and any value out of bounds will be represented by 0 or 999.

Digits2OffsetX and Digits2OffsetY have the exact same behaviour as DigitsOffsetX and DigitsOffsetY but give the offset for the second (max) numeric value to be printed. i.e., max player health, max ammo gun can hold, etc. UseDisplayMaxValue defines whether the second number is to be printed in the first place. If set to 1, it will be displayed and Digits2OffsetX/Digits2OffsetY will take effect, and if set to 0, it will not be shown and Digits2OffsetX/Digits2OffsetY will have no effect.

UseDigitPadding applies to the display of any number that does not take up 3 digits, i.e, 1, 2, 99, etc. If set to 1, when either of the first or second numbers are printed over the background image, numbers will be padded to the left with 0's, i.e., 1 -> 001, 99 -> 099. If set to 0, when printing occurs, no 0's will be printed, but spaces (of size determined by the width of the omitted 0 digit image bitmap) will be placed to the left instead.

UseResizing determines whether to use DirectDraw-based image resizing whenever the user uses the HUD in a screen resolution other than the ideal resolution for this specific HUD. If set to 1, all images' widths and heights as well as some of the offset values described above will be resized according to screen resolution. If set to 0, no resizing will be performed, so all images will be displayed on-screen with their original pixel sizes, and all offset values will represent absolute pixel values, all regardless of the resolution the user has chosen. Although disabling resizing is faster and avoids image distortion, you may run into problems in lower resolutions if your images are too large (i.e., out-of-screen coordinates - which causes the image to disappear entirely, or screen crowding).

If UseResizing is enabled, you MUST specify the values DefaultResizeXRes and DefaultResizeYRes (must be greater than 0). These define the optimal resolution for the HUD and thus which proportions to keep when the user chooses a different resolution. For example, if your HUD looks good in or is meant for 800x600, you would have DefaultResizeXRes=800 and DefaultResizeYRes=600.

Notes:
- The ATX HUD system uses DirectX's DirectDraw. Some older video
  cards may not implement all functions properly.
- All tests have been performed using video cards capable of
  displaying 16-bit 5-6-5 RGB video. While 16-bit 5-5-5 RGB video
  is theoretically supported, it has never been tested and you
  may run into problems with some video cards.
- The ATX bitmap-loading code has not been tested to load anything
  other than 24-bit MSPaint-generated bitmaps. If you run into problems
  creating compatible bitmaps, I would suggest designing them from
  whichever software and copy-pasting the result into MSPaint and
  saving it to a *.bmp from that program.
- If your images do not appear on-screen, make sure that:
  a) Your images are uncompressed 24-bit RGB bitmaps
  b) The images are stored directly in the "MAPS\HUD\" folder
  c) The ImagesLocations.ini file contains the proper filenames
     under the [ImagesFilenames] section
  d) The ImagesLocations.ini file does not contain offset values
     that might throw any part of your image off-screen (if so,
     the entire image would not be shown)
  e) Your images are not larger than typical screen resolutions
     (if they are most likely to be larger than some resolutions,
      you should consider enabling image resizing)

AI HACKS
-> BACK TO FEATURES

Some AI options are available in ATX via ATXconfig.ini, under the [AISettings] section. They include allowing dinos in buildings, adding or substracting health from dinos, removing limits on dinosaur movement, and increasing their 'activation' distance (from the player). These are generally experimental.

The AddFreezeDistanceToAllDinos setting (floating-point value) is more specifically prone to causing crashes. It also causes dinos to 'freeze' in areas with more than 3 or 4 dinos active at once. You should not set this setting very high. It is mostly useful in levels where few dinos will encounter the player at any given time. It will apply to all savegames, all level restarts, all new levels, etc. However, changes are not saved in savegames, so this value can be changed for existing savegames.

The AllowDinosInBuildings, ForceNoStayNearTarget, and ForceNoStayAwayTarget are very simple hacks that simply remove animal-bounding features from the game altogether. Their applications were originally suggested to me by Rebel and Remdul of Trescom. Set them to 1 to enable each individually. Although they generally do not cause major problems, they may result in oddities, such as dinos leaping off cliffs, dinos freezing, dinos not recognizing and running into objects, and dinos being very out of place (in short, nothing really new).

AddHitPointsToAllDinos is a floating-point value. It will add the specified amount of hitpoints to every dino in every level. Although it was originally conceived to increase game difficulty, the implementation of the new game difficulty settings renders this setting rather obsolete. It is still implemented, though, and will work under the same conditions as the Game Difficulty settings (i.e., at same new level/restart level/save game patterns).


FAST LEVEL RESTART DISABLING
-> BACK TO FEATURES

This feature has been included in ATX v1.50. It can be set in ATXconfig.ini, under the [General] section, with the DisableFastRestart option. A menu option is also provided for this feature.

Setting the option to 1 will simply instruct Trespasser to treat every level restart/savegame load as if it were loading a different level. This will cause the loader thread to re-load the GRF file associated with the level and re-set all possible values. It will not, however, cause the re-creation of swap files (*.swp), which is only necessary for level designers.

While it does increase loading time for level restarts and savegame loads within same levels, it also ensures that the game re-loads all instances properly. The game has been known to exhibit bugs at level restart time. More importantly, it causes all user-made (TresEd-compiled) levels that were distributed without proper scene files (*.scn) to restart as they should.

I will note in advance that future and present ATX features may use this feature implicitly. It ensures reliability and simplifies the programming of some. It is generally recommended to use this feature, though slower system may find it less attractive.


NEW MENU OPTIONS
-> BACK TO FEATURES

ATX now makes use of some new menu options incorporated into the game's menu system at run-time, using the *.ddf file format (thanks to madppiper of Trescom for the tutorial and specifications). They are fully enabled by default, but can be turned off entirely or partially in ATXconfig.ini, under the [General] section, using the EnableNewMenuItems key. 1 indicates full integration, 0 indicates the feature is disable completely, and 2 tells ATX to display only the Draw Distance slider in the Video Options menu.

It should be noted that this feature, along with many others, relies on the presence of the "MAPS\" folder in the root Trespasser or Trespasser demo directory (not the "tres cd" directory) for proper function.

*** As of ATX 1.54, all ATX menu script additions are implemented in the form of editable DDF files in the "MAPS\" folder. These are enumerated and commented on further below.

The following note is directed to and should be read by anyone implementing custom menus alongside a redistribution of the ATX package:

;======================================================
NOTE FOR MENU EDITING
;======================================================

ATX uses the following IDs to identify some of its
menu objects. These must remain unique across ALL DDF
files used by a copy of Trespasser, not only the DDF in which
their respective definitions are to be found. Unless
you plan to disable the new ATX menu items, DO NOT
USE THESE IDs.

SLIDER_GAME_DIFFICULY_ID	equ	1956
SLIDER_DRAW_DISTANCE_ID 	equ	1794
CHECKBOX_MATRIX_ID		equ	1869
CHECKBOX_JUMP_DINOS_ID		equ	1868
CHECKBOX_RANDOM_INST_ID 	equ	1867
CHECKBOX_FAST_RESTART_ID	equ	1866
HOTSPOT_MATRIX_ID		equ	1669
HOTSPOT_JUMP_DINOS_ID		equ	1668
HOTSPOT_RANDOM_DINOS_ID 	equ	1667
HOTSPOT_FAST_RESTART_ID 	equ	1666

ATX 1.54 also uses the following 4-character case-sensitive
keywords to identify and modify parts of the DDF files upon loading:
GDIF (mainscreen.ddf - replaced with initial game difficulty value for slider)
ATXV (mainscreen.ddf - replaced with ATX version indicator)
DCUT (mainscreen.ddf - when loading the demo executable, anything after this
		       will be cut from file)
DDST (render.ddf - replaced with initial value of draw distance for slider)

These keywords are used in the following files from the "MAPS\" folder:
atx_mainscreen_ext.ddf
atx_render_ext.ddf
You may edit these files at will, but keep in mind that every occurrence
of the above keywords in these files will be replaced with their
corresponding values, whether in comments or in general text. This may
cause errors if there is misuse.

In general, when editing the ATX menu options, you should leave all of the
above keywords and IDs as they are. You may modify other values, such
as item positions, without any major problems, provided you move checkboxes
and their associated hotspots together, for example.

It is also strongly recommended that you leave extra spaces and carriage returns (empty lines)
at the end of *.DDF files in general. In some cases, the Trespasser *.DDF
handler will omit values at the end of these files if they are not padded
this way (this is why the ATX DDF extension files have "; EOF" at the end,
that is, to discourage accidental deletion of this padding).

For EnableNewMenuItems entry in ATXconfig.ini:

Set to 0 to disable _all_ ATX integrated new menu items,
including draw distance option. All values can still be toggled
via ATXconfig.ini. Set to 2 to disable all new ATX-related
mainscreen.ddf menu items, while preserving new render.ddf items
(draw distance slider).

Misc. source code note:
- The checkbox method is never called if the checkbox area is
  overlapped with a hotspot-defined area. Only the hotspot
  method is called. This applies to the default "audio.ddf" checkbox
  items.

ATX 3DNOW! OPTIMIZATIONS
-> BACK TO FEATURES

This feature must be enabled explicitly in ATXconfig.ini, under the [General] section, using the EnableNewLevelLoadBGs key (set to 1). It is only valid for the AMD K6-2 and newer AMD processors which support 3DNow! instructions. If you enable this for Intel processors, the game will crash at some point, because no processor-detection algorithm has been implemented.

Despite expectations, this feature can be set for any of the four ATX-supported Trespasser executables, and not just the AMD K6 1.1 version. But, again, this requires an AMD processor. I did not restrain this feature to the AMD K6 executable, because it could be useful for the demo version.

I in no way promise large (edit: or any) performance gains, and the degree of optimization is left at my discretion. Only ATX features will be optimized, with the possible exception of a few Trespasser functions, again all at my discretion. The feature should be more noticeable on AMD K6-2 and K6-3 processors, though it can be seen occasionally on my Athlon as well, in more detailed scenes, using some features.


DEFAULT GAME FOG SETTINGS
-> BACK TO FEATURES

The game's default fog color can be overridden in ATXconfig.ini, under the [FogSettings] section, via the DefaultGameFogColor key. It is a hexadecimal value. It is stored as a 24-bit color, under the format 0x00RRGGBB, where R = Red, G = Green, and B = Blue. It will be loaded for levels that do not set fog color via the level script ActionType 05 or in cases where the fog color is not set properly.

You will most likely not notice the effect of this value in software mode. Most levels do use ActionType 05, and in software mode, setting fog color this way for a specific level always works. However, there appears to be a bug in hardware mode that causes fog colors to be set one level-load late (one GRF-load late, to be precise), and in some other circumstances as well. One way around this bug is to use a single fog color across all levels to be designed, and use DefaultGameFogColor to set it, indicating to the user not to load other levels in-between.

Added in ATX v1.54-1.57 is an option to disable/modify fog for all levels. It can also be found under the [FogSettings] section, as OverrideGameFogValues (previously known as DisableGameFog under the [General] section). Set to 1 to enable. The feature works by setting the ActionType 05 FogPower and FogHalf settings to specific values at/for every level load, bypassing the level settings. It will override the Night Mode settings. Under the same section, you will find FogPowerForcedValue and FogHalfForcedValue INI entries. By default, these have the value 0.000000 (0). When OverrideGameFogValues is enabled, these are the floating-point values that will be used to modify fog appearance as described. Using their default values (0), they will generally disable fog when using hardware rendering. In some cases (often under software rendering), the default values may not properly disable fog or produce visual anomalies. These settings are thus provided to tweak fog Power and Half (~density, distance, and similar aspects) when fog is disabled/modified, if needed. These have the same definitions and behaviours as the T-Script ActionType 5 FogPower and FogHalf values. As such, they may be used to remove fog completely or simply tweak its density/distance globally.


HIGH RESOLUTION PATCH
-> BACK TO FEATURES

This hack, originally created by TSOrd and Mark Grant, to which all credit for this feature should be diverted to, is enabled by default in ATX. It can be disabled if needed in ATXconfig.ini, under the [General] section, via the EnableHighResolutions key (set to 0). It has been included in ATX for ease of use, but also to commemorate the sadly-deceased TSOrd, whom I unfortunately never had a chance to communicate with.

ATX 1.55 has an extra setting in ATXconfig.ini (under [Troubleshooting]) to override the maximum detectable resolution (OverrideMaxResolutionX). By default, it uses 2048 (x portion of the resolution), which is the value used by the original hack. Depending on video drivers, you may get different results by tweaking this value.

There have been observations that different executables can report different lists of available resolutions on the same system. This has been clearly shown in one case with the P5 1.1 and P6 1.1 executables. The cause is unknown, but you may use this result to attain higher resolutions by trying different executables.

ATX 1.56-1.57 add a few INI entries in the [Troubleshooting] section of ATXconfig.ini relating to video mode enumeration issues. The first is OutputDirectDrawVidModeEnum. Setting this value to 1 will cause ATX to print to ATX_LOGFILE.txt all of the DirectX-enumerated resolutions when visiting the game's Video Options menu. These printouts only include the values enumerated by DirectX itself, and not the ones that may be forced into the resolutions list using other INI entries. To effectively use this function, you should set the INI entry to 1, open the game, open the Video Options menu once and once only, exit the menu immediately by clicking "CANCEL", and then exit the game. This will append two lists of resolutions at the end of ATX_LOGFILE.txt which describe the game's two main enumeration procedures. These may be of some help for diagnostic purposes.

The second new entry is named ForcedVideoModesList. You may use this value to force resolutions into the list found in the game's Video Options menu which you may then select in the menu to use as in-game resolution (as usual). In some cases, DirectDraw will not properly enumerate all resolutions that you hardware may support. If you are 100% certain that your hardware supports a certain resolution in 16-bit color, you can specify it via the ForcedVideoModesList key. You may include up to 9 or 10 resolutions to add to the menu options by using the key in this fashion:
ForcedVideoModesList=800x600, 1024x768, 7456x2343
As seen above, you simply need to specify resolutions using the WIDTHxHEIGHT format ("x" is case-sensitive, and no extra spaces) for each resolution and separate each different resolution with a comma and a space character. Failure to follow this format may lead to unpredictable results. If you no longer wish to use this feature, simply set the value:
ForcedVideoModesList=0

WARNING: As you may have noticed in the above example, you can enter a ridiculous/non-supported resolution such as 7456x2343 into the list. It will appear into the Video Options list and the game will attempt to use it WITHOUT checking for its validity. If your hardware does not support such video modes, this may lead to grave errors including blank screens, crashes, flickering, etc. (ALT-TABing out of the game may or may not work, depending on the severity of the error). In short, DO NOT ATTEMPT TO FORCE A RESOLUTION INTO THE LIST UNLESS YOU ARE 100% SURE THAT IT IS SUPPORTED BY YOUR GRAPHICS CARD/MONITOR/OPERATING SYSTEM/DRIVERS.


MAX ACTIVE DINOS
-> BACK TO FEATURES
;---------------------------------------------------------
UPDATE (26/08/2006): It has recently been discovered that
the Trespasser physics engine has a built-in fixed limit
of 8 total active animate instances at one time, which
means 1 player and 7 dinosaurs at the very most. Beyond
this, instances will freeze, warp, and do really weird
stuff nobody wants. Also, one of the game's major
physics buffers that holds active boundary boxes is
capped at a hardcoded 50 boxes. So, if you have 7
active raptops with 5 boundary boxes each and a
player with 3, you effectively fill up 38 of those
50 slots and leave few for gameplay.

The bottom line is that even though it *might* be possible
to increase the limit of active animates within the physics
system to go over 8, such as has been painstakingly done
with the AI system hardcodings, there would then be the
even bigger problem of busting the physics engine limitations
on active physics boxes. You could argue that the same could
then be done with the box buffer to go over 50, but unfortunately
this buffer is even more hardcoded than the AI or
other physics list and is probably accompanied by a whole slew
of other buffers. Basically, you would end up spending a year
finding every little hardcoded address in assembly and probably break the
engine in the process.

As a result of this, I will officially NOT be continuing
the MaxActiveDinos hack. What this information does provide,
however, is the max number of dinos the current MaxActiveDinos
INI entry can be set to: 7 dinosaurs. THIS ASSUMES
THAT THE PLAYER WILL NEVER BE PUT IN A SITUATION WHERE HE/SHE
MAY ENCOUNTER MORE THAN 7 DINOSAURS AT ONCE. The reason for
this is that, as already discussed, the AI system has a possible
bug that causes it to 'blur the line' by plus/minus 1 or 2 the max
number of active dinos. So if you put MaxActiveDinos to 7 and
the player encounters 8 or 9 dinos, things may go horribly awry
physics-wise. Of course, don't put MaxActiveDinos to over 7, either;
that'll make it even worse. To play on the safe side, I would
recommend keeping it at 5 or 6 if you can't control how many dinos
the player encounters. Theoretically, you should be fine
setting it to 6, but I have seen a few cases where the number was
busted by two, and you simply don't want to go past 7 active dinos,
physically.

However, because of that possible AI bug, for any number you set
MaxActiveDinos to, you'll want to keep the max possible encounter-able
dinos to that number or less, for best experience. And so, the bottom line is
that 7 dinos will work as long as you set MaxActiveDinos=7
and never, ever have more than 7 dinos active at once.

The End
;---------------------------------------------------------

This hack attempts to trick Trespasser into increasing
the amount of dinos allowed to be active at a single time.
This can prevent the "frozen dinos" effect that appears
when too many are active, and even fix some odd dino
behaviours when the limit is reached (simply by setting
the value to one higher than the max possible value within
a level).

To active it, set the MaxActiveDinos value in ATXconfig.ini
(under the [General] section) to the desired value (i.e., 8).
There is some discordance in the way the game treats this
value; it is unclear whether the default value is 3 or 4 ***,
because it varies in different parts of code. I do not know
if this is a bug or if it is intentional ****. Either way, ATX does not
attempt to work around this issue for compatibility reasons.
As such, you should generally add 1 to the MaxActiveDinos value
you wish to set, or experiment if you are trying to set a
fixed limit. Setting MaxActiveDinos to 0 (default) disables
this feature and uses the original code and values instead.

If you choose to use this hack, keep in mind that it is
HIGHLY EXPERIMENTAL and has not been thoroughly tested (mainly
because there's no way to know what to test in the first place).
It is a _very_ extensive project compared to other hacks. This
means that it was not created by modifying some isolated variable,
but rather by modifying dozens of code instructions throughout
every one (over 30 addresses for each of the 4). The exact constraints
and workings of the code are not known, and for that reason,
the hack may not be entirely stable. In fact, IT IS NOT KNOWN
IF THE HACK IS COMPLETE. I STRONGLY ADVISE LEVEL DESIGNERS NOT TO RELY
ON THIS HACK FOR LEVEL DEVELOPMENT. It is provided for testing purposes
only. You're swimming with the sharks, my friend.

Known bugs (partial list) *:
- Some crashes
- The MaxActiveDinos value itself can be set very high, but
  the game may not be able to handle this value at run-time if this many
  dinos are activated at once in a level (see next point).
- Currently will not allow more than 4-6 dinos truly active (others will
  appear frozen and intangible, often distorted when they get out of WakeUp/Sleep range).
  Inactive dinos do not have a "physical" presence.

* There is no way of knowing definitely if these problems are directly
  related to this hack.

*** As the true number of maximum active dinos can be noticed in-game,
    the question about the values mentioned here does not necessarily
    refer to the actual number of maximum active dinos, but rather
    to the way it treats the active dino instances. For the MaxActiveDinos
    value set in ATXconfig.ini, the direct value corresponds to the default
    value of 3 used by the game, while the value of (MaxActiveDinos+1)
    corresponds to the value of 4 used by the game. This means, that, in
    theory (not taking into account the extra code changes), setting MaxActiveDinos
    to 3 should have the same effect as disabling the hack (whether
    the end result is 3 or 4 max active dinos at once). Note: After a
    few tests, it becomes evident that the MaxActiveDinos value corresponds
    to the true value of max active dinos PLUS the one "bogus" dino (explained below).

**** A more detailed explanation of the problem would be as follows:
     The active dino instances recognized by the main AI System method
     are found as fixed members of the AI System main class at a
     high offset (which allowed the dozens of references to be tracked
     down and encoded in ATX). According to some parts of the executables,
     mainly the initialization functions, by default, there are indeed 4 slots
     reserved for dino instances and 4 extra slots for instances which may
     or may not be related to these (but which are taken into account by ATX
     for compatibility reasons). However, other parts of code, including
     the main AI System method, only scan in the last 3 slots. Using data
     tracked down in real-time, I have found that the first slot is used
     under some circumstances, but generally randomly. Now, taking into
     account the fact that Trespasser often has one "bogus" dino when there are
     4 active dinos of the same kind (i.e., spins in circle, walks toward infinity, etc.),
     it would be only natural to assume that the mistreatment of the first slot
     could be the cause of this bogus behaviour. However, I have tried
     "forcing" all scan values to 4, but this results in crashes to desktop
     without error.log, which is the kind of crash that's not worth trying
     to mess with. This is all conjecture, however, and has not been proven
     despite all likelyhood (the bug does indeed exist, but it is not 100% certain that
     this possibly misused slot is the cause). Currently, the only way to truly bypass
     this bug is to set MaxActiveDinos to a higher value and design levels so that this value
     minus one can never be reached. However, using this feature as a base
     for level development is discouraged due to possible instability.
     So the answer?... Just don't. Yes, in a way, I wrote all of this
     for nothing. But then you don't expect me to just delete it, do you?
     I mean, this took time for me to write. And if I wrote it, it's because in
     some way someone was meant to read it, no? Alright, enough.



ARCHIVE
-> BACK TO CONTENTS

This section holds miscellaneous information regarding variable addresses, internal class structures, and anything else that has to do with the modding of the game. These documents are especially provided 'as-is' and may be changed without notice, or never updated at all.

- ACTIONTYPE CLASSES INTERNAL STRUCTURES
- ACTIONTYPE OFFICIAL CLASS NAMES
- CANIMAL CLASS INTERNAL STRUCTURES
- DRAW DISTANCE VARIABLE ADDRESSES
- ERROR.LOG PARTIAL DESCRIPTION
- GAME SPEED VARIABLE ADDRESSES
- GRAVITY VARIABLE ADDRESSES
- REGISTRY ENTRIES
- SCRIPT NAMES NOTE


ACTIONTYPE CLASSES INTERNAL STRUCTURES
-> BACK TO ARCHIVE
These describe some ActionTypes' classes as they appear
in memory. All values are assumed 32-bit (DWORD) unless otherwise
specified. Booleans are usually addressed as BYTEs and set in
bit 0 of a byte. Only known entries are documented.
For every VTable, the following members are as follows:

[VTable+08h] = Main ActionType function (called upon trigger)
[VTable+14h] = Function called upon (re-)initialization, usually at level load

;========================================================
ACTIONTYPE 10 (PHYSICS) CLASS (total size = 40h bytes)
;========================================================

[AT10+00h] = VTable
[AT10+04h] = Ref count
[AT10+08h] = X velocity
[AT10+0Ch] = Y velocity
[AT10+10h] = Z velocity
[AT10+14h] = Frozen boolean (BYTE)
[AT10+18h] = Target instance memory pointer (not instance name)
[AT10+1Ch] = Impulse boolean (BYTE)
[AT10+2Ch] = X facing value, default = 0.000000 (???)
[AT10+30h] = Y facing value, default = may be 1.000000 (???)
[AT10+34h] = Z facing value, default = (???)
[AT10+38h] = Push value
[AT10+3Ch] = Emitter instance memory pointer (not instance name)

;========================================================
ACTIONTYPE 16 (LOAD LEVEL) CLASS (total size = 24h bytes)
;========================================================

[AT16+00h] = VTable
[AT16+04h] = Ref count
[AT16+08h] = Level name string length (not including null-terminator)
		-> should be 15 or lower if found in AT16 instance
[AT16+0Ch] = Always 00000010h (at initialization)
[AT16+10h] = Level name string (*.scn, including extension, null-terminated)
		-> only 16 bytes in total for string here
		-> may be elsewhere in memory (but usually here by default)
[AT16+20h] = Pointer to level name string (usually AT10+10h)

;========================================================
ACTIONTYPE 18 (TELEPORT) CLASS (total size = 2Ch bytes)
;========================================================
-> Uses same teleportation method as TELE cheat.
-> All booleans are TRUE by default.

[AT18+00h] = VTable
[AT18+04h] = Ref count
[AT18+08h] = Instance to teleport *
[AT18+0Ch] = X position of target instance (destination)
[AT18+10h] = Y position of target instance
[AT18+14h] = Z position of target instance
[AT18+18h] = Rotation value w (of quaternion) of target instance
[AT18+1Ch] = Rotation value x (of quaternion) of target instance
[AT18+20h] = Rotation value y (of quaternion) of target instance
[AT18+24h] = Rotation value z (of quaternion) of target instance
[AT18+28h] = HeightRelative boolean (BYTE)
[AT18+29h] = OnTerrain boolean (BYTE)
[AT18+2Ah] = SetPosition boolean (BYTE)
[AT18+2Bh] = SetOrientation boolean (BYTE)

* This member is not a direct pointer to the instance in memory
  (contrary to most other cases, such as ActionType 10). It
  is an indirect value used internally by Trespasser and retrieved
  using only the instance's name (during level load).

ACTIONTYPE OFFICIAL CLASS NAMES
-> BACK TO ARCHIVE
These are the names of the 36 default Trespasser ActionTypes
as they would have appeared in the Trespasser source. They
are, in truth, the names of the classes of each ActionType.

AT00 - CVoiceOverAction
AT01 - CAmbientAction
AT02 - CMusicAction
AT03 - CFadeMusicAction
AT04 - CShowOverlayAction
AT05 - CSetFogAction
AT06 - CSetRendererAction
AT07 - CSetTerrainAction
AT08 - CSetImageCacheAction
AT09 - CSetAIAction
AT10 - CSetPhysicsAction
AT11 - CSubstituteMeshAction
AT12 - CSetSortAction
AT13 - CSetSkyAction
AT14 - CSetAlphaWaterAction
AT15 - CWaterOnOffAction
AT16 - CLoadLevelAction
AT17 - CSetAnimatePropertiesAction
AT18 - CTeleportAction
AT19 - CSaveLevelAction
AT20 - CMagnetAction
AT21 - CAnimateTextureAction
AT22 - CHideShowAction
AT23 - CSoundEffectAction
AT24 - CWakeAIAction
AT25 - CDelayAction
AT26 - CScriptedAnimationAction
AT27 - CSetVariableTriggerAction
AT28 - CSetHintAction
AT29 - CAudioEnvironmentAction
AT30 - CSubstituteAIAction
AT31 - CEndGameAction
AT32 - CControlPlayerAction
AT33 - CAISystemAction
AT34 - CTextAction
AT35 - CWaterDisturbanceAction

CANIMAL CLASS INTERNAL STRUCTURES
-> BACK TO ARCHIVE
;========================================================
CANIMAL CLASS AND SUB-CLASS DEFINITIONS (PARTIAL)
;========================================================
;Note:  All values/member are considered DWORDs (32-bit) unless otherwise specified.
;Note2: Many of the members found in this structure are the same
;       for the "Player" class. The Player class is not necessarily
;       the holder of all player-related values (such as the camera's facing values).
;Note3: All members described here are assumed to be valid for the CAnimal class only,
;       despite resemblance to Player class(es).
;Note4: I do not guarantee that all known members and values will be
;       kept up to date.
;Note5: The symbol "h" following a series of characters designates a HEXadecimal
;       number/address/offset. It is the usual assembly equivalent to the "0x" notation preceding
;       such a number.
;Note6: "CANIMAL" class should have been written as "CAnimal".
;Note7: Sub-classes described further belowmay vary and should only
;       be assumed valid in specified structure for CAnimal references.

Maximum CAnimal class size: 888 bytes (222 members)
Theoretical CAnimal class size: 224 bytes (56 members) (excludes sub-classes included in
	total allocated memory (888 bytes) of CAnimal class which are also directly
	referred to by CAnimal class members or sub-class members; ONLY includes first
	224 bytes of data in class; does not include possible valid members later in
	total allocated size)

;========================================================
CAnimal (main)
;========================================================
[CANIMAL+000h] = VTable
	METHODS (AS POINTERS):
		-> PARAMS are in C-calling convention (1 = [esp+4], 2 = [esp+8], 3 = [esp+12], etc.)
	[VTable+010h] = Get Current Location
		PARAMS: 1: pointer to structure to fill (32 bytes)
		NOTES:	- The executable overcomplicates and misuses this method
			- Also valid for Player class
			- Filled structure is same as 32 consecutive bytes starting at [CANIMAL+030h]

	[VTable+038h] = Set New Location/Orientation
		PARAMS: 1: modified new location structure returned from Get Current Location
			2: usually NULL
		NOTES:	- Also valid for Player class
			- This method is used constantly by the EXE. If it is removed/diverted,
			  the player's position and orientation become fixed.

	[VTable+20Ch] = alter dino's "pain" value (this method is not yet documented properly)
		Params: 1: (float value of unknown significance)
			2: usually NULL
			3: usually NULL

[CANIMAL+028h] = Pointer to CInfo class
[CANIMAL+030h] = X position (read-only)
[CANIMAL+034h] = Y position (read-only)
[CANIMAL+038h] = Z position (read-only)
[CANIMAL+03Ch-048h] = w,x,y,z format quaternion determining the object's current orientation
		      ("Facing" VECTOR values are calculated from these)

[CANIMAL+050h] = Current health (Hitpoints) (can be modified)
[CANIMAL+054h] = Max health (MaxHitpoints) (can be modified)

[CANIMAL+094h] = (not a pointer to) Start of CBoundVolBox class (CBoundVolBox class VTable pointer)

[CANIMAL+0ACh-0C0h] = various pointers (some may be absent depending on dino type) to
		 CBoundaryBox classes that hold values and info about the dino's different parts.
		 For example, the two first classes in the "Player" class (+0ACh, +0B0h) are used by the new
		 "CLOAK" cheat to track down and modify Anne's 'AIType' values a few
		 sub-classes into the hierarchy (the third one might have been important
		 as well, but the final address is the same as the second one).
	[CANIMAL+0ACh] = root dino BODY object (usually)
	[CANIMAL+0B8h] = root dino HEAD object
	[CANIMAL+0BCh] = root dino TAIL object
	The following is usually valid for all three objects (referred to as OBJ):
		[OBJ+28h] = sub-object pointer (SUBOBJ1), usually in higher memory
			[SUBOBJ1+0Ch] = sub-object pointer (SUBOBJ2), usually lower in memory,
					object holding some of the physics objects' values
				[SUBOBJ2+0Ch] = Damage T-Script value
				[SUBOBJ2+10h] = Armour T-Script value
	*** It might have been possible that, at some point, there were other
	    objects as there is space for them between and after the ones
	    incorporated in the CAnimal class, and it is hinted to by some
	    T-Script values (i.e., "Neck"). Space may also have been reserved for
	    differences between animal types and the player class.

[CANIMAL+0DCh] = Pointer to CBrain class (for AI system)
		 -> Main AI sub-class containing pointers to the main instance's
		    Actxxxxxxx AI classes and other AI-related values

[CANIMAL+0E0h] = (It appears that the CBoundaryBox classes pointed to earlier than this
		 point are stored here in the CAnimal class itself, depending on assumed class size).

;========================================================
CBrain
;========================================================

Maximum CBrain class size (assumed): 896 bytes (224 members)

[CBrain+000h] = VTable
[CBrain+004h] = Pointer to CMentalState class
[CBrain+008h] = Pointer to CWorldView class

[CBrain+010h] = Pointer to CActivityCompound class
[CBrain+014h] = Pointer to CActivityEat class
[CBrain+018h] = Pointer to CActivityBite class
[CBrain+01Ch] = Pointer to CActivityFeint class
[CBrain+020h] = Pointer to CActivityRam class
[CBrain+024h] = Pointer to CActivityDrink class
[CBrain+028h] = Pointer to CActivity class ("Not implemented" - type activity)
[CBrain+02Ch] = Pointer to CActivity class
[CBrain+030h] = Pointer to CActivityTailSwipe class
[CBrain+034h] = Pointer to CActivity class
[CBrain+038h] = Pointer to CActivity class
[CBrain+03Ch] = Pointer to CActivity class
[CBrain+040h] = Pointer to CActivityVocalSnarl class
[CBrain+044h] = Pointer to CActivityVocalCroon class
[CBrain+048h] = Pointer to CActivity class
[CBrain+04Ch] = Pointer to CActivityMoveCommandToward class
[CBrain+050h] = Pointer to CActivity class
[CBrain+054h] = Pointer to CActivity class
[CBrain+058h] = Pointer to CActivity class
[CBrain+05Ch] = Pointer to CActivityMoveHintWander class
[CBrain+060h] = Pointer to CActivity class
[CBrain+064h] = Pointer to CActivity class
[CBrain+068h] = Pointer to CActivityMoveCommandStayNear class
[CBrain+06Ch] = Pointer to CActivityMoveCommandStayAway class
[CBrain+070h] = Pointer to CActivityFlee class
[CBrain+074h] = Pointer to CActivityPursue class
[CBrain+078h] = Pointer to CActivityJumpBack class
[CBrain+07Ch] = Pointer to CActivityGetOut class
[CBrain+080h] = Pointer to CActivityApproach class
[CBrain+084h] = Pointer to CActivity class
[CBrain+088h] = Pointer to CActivityMoveBy class
[CBrain+08Ch] = Pointer to CActivity class
[CBrain+090h] = Pointer to CActivity class
[CBrain+094h] = Pointer to CActivitySniffTarget class
[CBrain+098h] = Pointer to CActivityCockHead class
[CBrain+09Ch] = Pointer to CActivityRearBack class
[CBrain+0A0h] = Pointer to CActivity class
[CBrain+0A4h] = Pointer to CActivityCower class
[CBrain+0A8h] = Pointer to CActivityGlare class
[CBrain+0ACh] = Pointer to CActivitySniffAir class
[CBrain+0B0h] = Pointer to CActivityLookAround class
[CBrain+0B4h] = Pointer to CActivityNothing class
[CBrain+0B8h] = Pointer to CActivity class
[CBrain+0BCh] = Pointer to CActivity class
[CBrain+0C0h] = Pointer to CActivity class
[CBrain+0C4h] = Pointer to CActivity class
[CBrain+0C8h] = Pointer to CActivity class
[CBrain+0CCh] = Pointer to CActivityDOSubBrain class
[CBrain+0D0h] = Pointer to CActivityDOSubBrain class
[CBrain+0D4h] = Pointer to CActivityDOSubBrain class
[CBrain+0D8h] = Pointer to CActivityDOSubBrain class
	* for all CActivityxxxxxx classes, bit 2 of member
	[CActivityxxxxxxx+34h] is boolean for enable/disable act (instance-specific)

[CBrain+0E0h] = Pointer to CSynthesizer class
[CBrain+11Ch] = Pointer to CAnimal class (parent class?)
[CBrain+128h] = (not pointer to) start of CMessagePhysicsReq sub-class (CMessagePhysicsReq VTable)
[CBrain+130h] = Pointer to CAnimal class (parent class?)
[CBrain+140h] = Name of Master instance for parent instance (string) (i.e., RaptorB for instance RaptorB00-00)
		-> Often true, but not always the case
[CBrain+1E8h] = Pointer to CValueTable class
[CBrain+1ECh] = Pointer to CObjectValue class
[CBrain+220h] = Name of parent instance (string) (i.e., RaptorB00-00 for instance RaptorB00-00)

[CBrain+264h] = "Bravery" value
[CBrain+340h] = "WakeUp" value
[CBrain+344h] = "Sleep" value

;========================================================
CMentalState
;========================================================

[CMentalState+000h] = VTable
[CMentalState+004h] = "Fear" value
[CMentalState+008h] = "Love" value
[CMentalState+00Ch] = "Anger" value
[CMentalState+010h] = "Curiosity" value
[CMentalState+014h] = "Hunger" value
[CMentalState+018h] = "Thirst" value
[CMentalState+01Ch] = "Fatigue" value

;========================================================
CInfo
;========================================================

[CInfo+000h] = VTable
[CInfo+00Ch] = Pointer to CPhysicsInfoBiped or similar class (depends
	       on dino's "Type" name)
[CInfo+010h] = Pointer to CAIInfo class

DRAW DISTANCE VARIABLE ADDRESSES
-> BACK TO ARCHIVE
The variable for the draw distance in Trespasser is found in
the main executable's 'rdata' section. It is a 32-bit single-
precision floating-point value which is, by default, 15.000000
(in the same units used for object positions and player location
in the levels). The hex string for this float is [00 00 70 41].
This value can be incremented to increase draw distance of all
objects in-game. The following addresses indicate the variable's
location from the start of the executable file and its offset in
memory once loaded.

In every executable, there is also a single direct reference where
this value is accessed, which can be examined using a disassembler
(disassembler used was URSoft W32Dasm V.8.93). The address of this
line of code is indicated as it is seen in memory (not by file
offset). It is possible that this value is accessed at other points
in the file, but this would only be verifiable at run-time.

NOTE: If you are unsure of the executable version you are using,
go into the game's main directory, right-click on "Trespass.exe",
select properties, and then the "Version" tab.

CAUTION: Using very high values will severely degrade game performance.

------------- PATCHED EXECUTABLES -------------

EXECUTABLE VERSION: Pentium Pro (P6) build 1.0.117.0 (w/Patch v1.1)
Offset in file: 0x0024A760
Address in memory: 0x0064A760
Referenced by code at address: 0x00527B08

EXECUTABLE VERSION: Pentium (P5) build 1.0.117.0 (w/Patch v1.1)
Offset in file: 0x00250774
Address in memory: 0x00650774
Referenced by code at address: 0x00528EA2

EXECUTABLE VERSION: K6-2 build 1.0.117.0 (w/Patch v1.1)
Offset in file: 0x00218774
Address in memory: 0x00618774
Referenced by code at address: 0x005211A2

------------- ORIGINAL GAME EXECUTABLES (ON CD) -------------

EXECUTABLE VERSION: Pentium Pro (P6) build 1.0.116.0 (original)
Offset in file: 0x0024E458
Address in memory: 0x0064E458
Referenced by code at address: 0x00543948

EXECUTABLE VERSION: Pentium (P5) build 1.0.116.0 (original)
Offset in file: 0x0025446C
Address in memory: 0x0065446C
Referenced by code at address: 0x005451E2

EXECUTABLE VERSION: K6-2 build 1.0.116.0 (original)
Offset in file: 0x0021D47C
Address in memory: 0x0061D47C
Referenced by code at address: 0x0053D372

------------ TRESPASSER DEMO ------------

EXECUTABLE VERSION: Pentium build 1.0.117.0
Offset in file: 0x00254334
Address in memory: 0x00654334
Referenced by code at address: 0x00527732

ERROR.LOG PARTIAL DESCRIPTION
-> BACK TO ARCHIVE
This file is created anytime Trespasser encounters a handle-able
error/exception. Through trial and error and a good amount of
disassembly, I've been able to find the meaning of part of the
Context Record. The following is an example of an ERROR.LOG file
with all currently known and possible descriptions.

Trespasser Build: 1, 0, 117
Trespasser Fault: Sun Dec 19 08:28:37 2004

Exception Record
----------------
Code : 0xC0000005
Flags : 0x00000000
Address: 0x006059FD
Info 0: 0x00000000
Info 1: 0xFFFFFFFF

Context Record
--------------
0: 0x0001001F, 0x00000000 ;unknown...
2: 0x00000000, 0x00000000
4: 0x00000000, 0x00000000
6: 0x00000000, 0xFFFF027F
8: 0xFFFF0220, 0xFFFFFFFF
10: 0x00000000, 0x00000000
12: 0x00000000, 0xFFFF0000
14: 0x00000000, 0x00000000
16: 0x00000000, 0x00000000
18: 0x00000000, 0x00000000
20: 0x00000000, 0x00000000
22: 0x00000000, 0x00000000
24: 0x00000000, 0x80000000
26: 0xF8003FFF, 0x1ACC0433
28: 0x3FF9A646, 0x252D0000
30: 0x9107B1F4, 0xC0003FFC
32: 0xDAA22168, 0x3FFEC90F
34: 0x0000000A, 0x00000000
36: 0x00002A37, 0x00000177 ;DWORD fs(?), DWORD ds/es/ss(?)
38: 0x00000177, 0x0094FC80 ;DWORD ds/es/ss(?), edi
40: 0x00400000, 0x00400000 ;esi, ebx
42: 0x00000000, 0x0094FB08 ;edx, ecx
44: 0x0000000A, 0xBFF67B08 ;eax, ebp
46: 0x006059FD, 0x0000016F ;eip, DWORD cs(?)
48: 0x00250212, 0x0094FAD0 ;?, ?
50: 0x00000177, 0x00000000 ;DWORD ds/es/ss(?), [esp-16]*
52: 0x0094FB08, 0x00400000 ;[esp-12], [esp-8]
54: 0x0000000A, 0x0040E3F3 ;[esp-4], [esp]
56: 0x00000000, 0x0062B69C
58: 0x0094FB08, 0x90080000
60: 0x00000000, 0x00000000
62: 0x00000280, 0x000001E0
64: 0x00000000, 0x00000000
66: 0x00400000, 0x00000000
68: 0x0062B80C, 0x73657254
70: 0x73736170, 0x37007265
72: 0x13E20000, 0x016FBFF6
74: 0x424A0000, 0xED04BFF6
76: 0xED040001, 0x2FB50001
78: 0x0022BFF4, 0x00080000
80: 0x06940000, 0x0000358F
82: 0x37270000, 0x00002FEF
84: 0x0000073E, 0x00000000
86: 0x00002E7F, 0x80006E78
88: 0x00000000, 0x0B3B8B6C
90: 0x00208040, 0x00030000
92: 0x0A6F002C, 0x00000000
94: 0x0094FD8C, 0xBFF6269C
96: 0xBFF42FA2, 0x00947000
98: 0xBFF41315, 0x0094FBEC
100: 0x00000001, 0x00620430
102: 0x0094FC80, 0x00000000
104: 0x00400000, 0x0094FBD4
106: 0x0094FC80, 0x00000010
108: 0xBFF6BB26, 0x8194F13C
110: 0x00000010, 0x78001DE8
112: 0x7803B600, 0x0094FBF4
114: 0x7800CD1B, 0x00000009
116: 0x7800CD04, 0x0094FC80
118: 0x0062B80C, 0x00400000
120: 0xBFF67B08, 0x00B800B0
122: 0x0094FBE4, 0x0062B80C
124: 0x0094FD8C, 0x7800F56A
126: 0x78033238, 0xFFFFFFFF
128: 0xBFF67B08, 0x78001026
130: 0x00000010, 0x780021F9
132: 0x00000010, 0x0040DD23
134: 0x00400000, 0x00000001
136: 0x00000000, 0x8194F969
138: 0x0094FD9C, 0x00000000
140: 0x00000001, 0x0094FC68
142: 0x000CAE48, 0x00AA40D8
144: 0x000010E4, 0xBFF6A501
146: 0x00A70000, 0x00AA51BC
148: 0x000CAE48, 0x00000000
150: 0x00A7000C, 0x00A70000
152: 0x00AA40D8, 0x00000000
154: 0x545C3A43, 0x20534552
156: 0x645C4443, 0x5C617461
158: 0x756E656D, 0x6170745C
160: 0x6E697373, 0x2E6F7274
162: 0x006B6D73, 0x8194F969
164: 0x00000000, 0xBFF613EE
166: 0x0000016F, 0xBFF6A444
168: 0x00000AA7, 0x0094FCD8
170: 0x000C8E50, 0x00AA61B0
172: 0x00001004, 0xBFF6A501
174: 0x00A70000, 0x00AA71B4
176: 0x000C8E50, 0x81943BE4
178: 0x00000000 ;**

* = start of stack dump
** = end of stack dump
(?) = uncertain
Note: The value of esp should be the one from the time at which
the exception occured.
Note2: The Trespasser error handler is not perfect and does not
always report all values properly. It cannot handle all values of
esp (stack pointer) properly and may lock up if its value is out
of range. It also does not handle misuse of segment registers very
well.
Note3: The error handler seems based from or in MSVCRT.dll.

Note that this dump was retrieved after running the K6 1.0.117
Build (patched at 1.1), and results may vary with a different
executable (though this would not be practical). Within the same
executable (and possibly amongst others), the line number associated
with a description should remain the same for every error encountered
and every log file created.

GAME SPEED VARIABLE ADDRESSES
-> BACK TO ARCHIVE
Unsurprisingly, there is a game speed variable inside each
executable, at different addresses in each. Like the draw distance,
it is stored as a 32-bit floating point value; it has a default
value of 1.000000. This variable is modified in-game by the
"BIONICWOMAN" cheat; it sets this value to about 0.300000, which
slows down the game by a factor of approximately 3 (this cheat may
vary between executables). This value can be greater than 1 (making
the game faster) or between 0 and 1 (making the game slower). Like
the draw distance, I do not recommend setting this to a negative
value. And now, here are the addresses of this variable for each
executable:

------------- PATCHED EXECUTABLES -------------

EXECUTABLE VERSION: Pentium Pro (P6) build 1.0.117.0 (w/Patch v1.1)
Offset in file: 0x0026678C
Address in memory: 0x0066678C

EXECUTABLE VERSION: Pentium (P5) build 1.0.117.0 (w/Patch v1.1)
Offset in file: 0x0026C77C
Address in memory: 0x0066C77C

EXECUTABLE VERSION: K6-2 build 1.0.117.0 (w/Patch v1.1)
Offset in file: 0x002347EC
Address in memory: 0x006347EC

------------- ORIGINAL GAME EXECUTABLES (ON CD) -------------

EXECUTABLE VERSION: Pentium Pro (P6) build 1.0.116.0 (original)
Offset in file: 0x0026B6FC
Address in memory: 0x0066B6FC

EXECUTABLE VERSION: Pentium (P5) build 1.0.116.0 (original)
Offset in file: 0x0027168C
Address in memory: 0x0067168C

EXECUTABLE VERSION: K6-2 build 1.0.116.0 (original)
Offset in file: 0x0023A734
Address in memory: 0x0063A734

------------ TRESPASSER DEMO ------------

EXECUTABLE VERSION: Pentium build 1.0.117.0
Offset in file: 0x00271864
Address in memory: 0x00671864

NOTE: Using the [original] "BIONICWOMAN" cheat will effectively put a value of
0.300000 as the speed variable. Turning off the cheat will reset it
to 1.000000, not the value you will have set it to (you will have to
restart the game to undo this). This could be fixed by modifying the
"BIONICWOMAN" cheat function, but that might not be worth the effort.


GRAVITY VARIABLE ADDRESSES
-> BACK TO ARCHIVE
Even though there are useable gravity control script entries that can
be used through level files, there also happens to be a variable that
controls the overall gravity (which I assume is valid unless
overwritten by the program). Like the other variables, it is a
32-bit floating-point value. The default value is of 10.000000
(N/kg, I assume), which is represented by the string [00 00 20 41]
in hex notation.

Even though it does affect gravity adequately when modified,
setting this variable to a lower value can have very odd and
frustrating effects. For example, if you set it to 1.00000, there's
a good chance your character (and camera) will immediately start
spinning wildly in the air, along with the dinosaurs, and your
character will lose her gun and it will start "running away". Some
of this behavior might be explained by a lack of friction, which
would be partly realistic since most friction is a result of gravity.
It might also be possible (but not necessarily probable) that the
gravity variable is used as a constant for other physics code as well
(but there are many other floats valued at 10.00000 in the data
section, so it is not all that likely). Also note that this problem
is not present when the gravity is increased. As well, I don't
recommend setting it to a negative value; this causes Anne and
objects/dinos to "fall into the sky", usually while spinning wildly
out of control. Lastly, because of the lowered friction, your
character will possibly walk more slowly.

------------- PATCHED EXECUTABLES -------------

EXECUTABLE VERSION: Pentium Pro (P6) build 1.0.117.0 (w/Patch v1.1)
Offset in file: 0x00245CAC
Address in memory: 0x00645CAC

EXECUTABLE VERSION: Pentium (P5) build 1.0.117.0 (w/Patch v1.1)
Offset in file: 0x0024BCAC
Address in memory: 0x0064BCAC

EXECUTABLE VERSION: K6-2 build 1.0.117.0 (w/Patch v1.1)
Offset in file: 0x00213CAC
Address in memory: 0x00613CAC

------------- ORIGINAL GAME EXECUTABLES (ON CD) -------------

EXECUTABLE VERSION: Pentium Pro (P6) build 1.0.116.0 (original)
Offset in file: 0x00247750
Address in memory: 0x00647750

EXECUTABLE VERSION: Pentium (P5) build 1.0.116.0 (original)
Offset in file: 0x0024D750
Address in memory: 0x0064D750

EXECUTABLE VERSION: K6-2 build 1.0.116.0 (original)
Offset in file: 0x00216754
Address in memory: 0x00616754

------------ TRESPASSER DEMO ------------

EXECUTABLE VERSION: Pentium build 1.0.117.0
Offset in file: 0x0024FDA4
Address in memory: 0x0064FDA4

REGISTRY ENTRIES
-> BACK TO ARCHIVE
For the full version, these keys can be found
in the Windows registry via:
HKEY_LOCAL_MACHINE\Software\DreamWorks Interactive\Trespasser
For the demo version, they are stored in tpass.ini in
the main folder, under the [Settings] section (generally the
only section).

This list is a rough sketch; I promise in no way that I will keep it updated.

;-----------------
"NoVideo"
;-----------------
This is a boolean value (as DWORD). Set to 1 to disable all game videos.

;-----------------
"System Memory"
;-----------------
This is a boolean value (as DWORD). Exact usage is unknown, but seems
almost definitely to determine whether video buffers are stored
in video memory (faster) or in system memory (slower). The effect
appears to apply in-game (not just in menu).


SCRIPT NAMES NOTE
-> BACK TO ARCHIVE

Update: 29/08/2005

It has come to my attention that the game does NOT necessarily use T-Script value names ("Target", "Sample", etc.) strictly as labels during loading. For quite some time, it had seemed as if the game's script value fetch function would simply fetch the appropriate values and data type IDs from the level files. These would then be passed to the caller, which would deal with the raw data accordingly (process strings, convert floats, set defaults, etc.).

However, it has become obvious that the game pre-processes some of the values based on their names. Any entry that is used to refer to specific instances ("Target", "Emitter", etc.) can be used via the ATX-supplied Trespasser EXE-based GetInstanceFromString function to retrieve any instance within a level. On the other hand, trying to use other script names to retrieve instances (such as "Sample") that were not recognized for this function or that were recognized for another function CANNOT be used by the EXE-based function to retrieve any instance within a level. It has been witnessed, for example, that attempting to acquire instances using [string Sample = "SomeInstance-01"] will only work with some instances (mainly master instances). Using "Target" instead would usually work for all instances.

It was also previously noted (but disregarded) that using instance-referring script names for other string-related purposes would often cause problems or crashes during initialization.

In conclusion, instance-referral T-Script values should be used instead of other general values whenever instance retrieval is required; it should also be ensured that they be used solely for their intended purpose. It is currently not known whether or not this applies to script names with different intial purposes.


Credits
-> BACK TO CONTENTS

There have been many direct and indirect contributors to this mod. I should take this opportunity to thank everybody who supported me on writing this, as well as everybody who has helped and who will help with the testing and the tedious writing of INI files. Also, many of the features are based on ideas from various people, all of which deserve credit. This includes the Trescom team and many from the Trescom message board. Special thanks goes to Rebel for much help and info, Remdul, and madppiper.

Additional thanks:
Andres - TresEd, which a good deal of this would not have been possible without.
Tomasz Grystar - Creator of the excellent and free Flat ASseMbler (which
		 pretty much none of this would have been possible without).
TSOrd - R.I.P. Many thanks for the original high resolution patch and other info.
Mark Grant - Also for the original high resolution patch.
Win32asm MASM/FASM community (Hutch, Iczelion, etc.) - Too many to name! Thanks for the
       extensive documentation, tutorials, and huge database of examples.
Mike Bouffler - Creator of Icon Edit (free component of Icon Suite).
Asjad - Taking the time to upload extra disassemblies.
JPDS Developpers - Feature requests, feedback, and info.
Chronzerg - Dino randomization contributions.
Slugger - Feedback, requests, ideas, testing.
The bug reporters - I can't stress it enough! Thanks to all those who took the time
       to give feedback, point out problems, etc., and thus helped make this software better.
Trescom.org - For existing.
Dreamworks Interactive - For never actually finishing the game, hah!

Lastly, I have to point out that I sacrificed a lot more than I should have to work on this. So you better enjoy it!!!



























*** (this interpretation of the legal system may differ from the
     latter's actual nature)

EOF