added the TR4 main menu playing the title level behind it, alternating its flybys with the cutscenes their triggers start, as in the original game
added partial support for TR4's in-game cutscenes
added TR4 camera mode, which is similar to TR3 but more responsive to Lara's actions such as picking up items
added the ability to paste commands in the developer console (with Ctrl+V)
added autocompletion to the developer console (with Tab and Shift+Tab to cycle the matches)
added a /dry console command, to dry Lara off after a swim
added a /rule console command, to inspect and change the numbers the game plays by, such as how quickly the cold gets to Lara
added a /disco console command, which sends colored lights spinning around Lara
added an option for the wobbly geometry of the PlayStation releases (Graphic Options → Rendering → Vertex snapping)
added an option to reduce the picture to 8-bit color with a dither pattern, for the look of the software-rendered releases (Graphic Options → Rendering → Dithering)
added a water color preset, offering the underwater tint each release shipped with, per level where the PlayStation ones varied it; picking one holds the water color below it, and Custom gives the player's own back (Graphic Options → Visuals → Water color preset) (
#1619
)
added the ability to clear the gym's best times, by holding the key shown below them
added an option to turn off controller support, for players who remap their controller with external software (Gameplay → Controls → Controller support)
added internal collision to lifts when they are moving, so that Lara cannot exit through the meshes
added an option for Lara to collect stacked pickups individually, as per OG TR4 (Gameplay → Controls → Multiple pickups)
added support for Lara to use animated interactions when picking up thrown flares
added a damage property to the O_POWER_SAW object
added a bindable hotkey for using the binoculars
added the ability to change how heavily the rain or snow falls, from Lua and with the /weather console command (
#6080
)
added show_pickup_aid, rotation and glow_color properties for all pickup types
added a brightness option for background images and patterns, so that brightening the UI leaves them alone (Graphic Options → Rendering → Background brightness) (
#6074
)
improved error messages related to bad command invocations
changed the brightness options to be given as percentages, as the volume options are
changed the game mode selection option so that Never starts every new game as a regular one (Gameplay → General → Game mode selection)
changed reflections UV mapping to be more correct
changed object properties to take effect as soon as they change, rather than only when the item is first set up
changed outfits to support joints, up to two braids per outfit, and to allow positional offset adjustments for equipment meshes; refer to migration notes
changed New Game+ in TR1 so that flares Lara has collected are kept between levels rather than taken away at the start of each one
changed engine-specific music trigger behavior by defining rules settable in Lua; refer to documentation
changed where an item a defeated enemy carried lands, and which way it faces, by defining rules settable in Lua; refer to documentation (
#5883
)
added an ammo.infinite key to weapons.json5, saying which weapons and flares never run out; a game that takes it away from the pistols makes their clips worth collecting
changed the ammunition keys in weapons.json5 to say what they count; refer to migration notes
changed boxes of ammunition in the inventory to always show what Lara is really carrying, where finishing a level could round them down
fixed settings belonging to another game being dropped from the settings file
fixed the alternative ammunition pickups, such as the second kind of shotgun ammunition, going into the inventory without loading the weapon
changed the gameflow's main_menu_picture to be optional: a game that names no picture shows its title level behind the menu, and its title script says what plays there
changed the /music console command to list the available tracks when given no argument, as /sfx does; /music status now reports what is playing
changed the large medipack to answer to "big medipack" as well, so /give big medi reaches it
changed the /secret console command to take a secret number on its own, to offer the numbers it can act on in autocompletion, and to say what it expected when given something else
changed the /give console command to autocomplete what it can hand over and to reach the savegame crystal by name; /give keys now covers the plot items alone, and /keys, /guns and /moreguns are commands of their own
changed the /spawn, /kill and /tp console commands to accept a family such as pickup, door or enemy in place of a name, and to offer the families each of them can act on in autocompletion
changed the /tp console command to place Lara better at what she is sent to
changed the developer console to accept the numpad Enter key for issuing commands (
#6056
)
changed the Breeze option to allow selecting TR2 or TR3 behavior (Graphic Options → Visuals → Breeze)
changed the presets to be listed by name rather than in the order they were found (Gameplay → Presets)
changed the save crystals option to a mode: crystals can save on the spot, be collected to save from the inventory as on PS1 TR3, heal, or be collectibles (Gameplay → General → Crystal mode) (
#5939
)
changed the Target change option to allow selecting TR4 behavior, where tapping Look switches target and holding it looks around (Gameplay → Controls → Target change)
changed lift collision to force Lara out of her climbing and vaulting animations if one collides with her (
#5899
,
#5911
)
changed lift collision to be optional (Gameplay → Fixes → Fix lift collision)
changed skidoo and quad bike crashes to not kill Lara when she is immune
changed Lara to say "No" when attempting to use the binoculars when it is not possible to do so
changed the installer to explain when it cannot download the files it needs, and to offer to try again (
#6052
)
removed the carrying over of legacy settings from TRX 1.4 and older; a small number of settings from files that old may revert to defaults
removed the Japanese NG and Japanese NG+ game modes; a Japanese NG save continues as a regular game, and a Japanese NG+ save as New Game+; refer to migration notes
fixed the sun's glare staying on screen in cutscenes once the camera has looked away from it
fixed exploding deaths in TR4 showing no flames or explosions
fixed Lara's shadow in TR4 being darker than in the original game
fixed Lara's arm swinging while she runs or crouches with a flare in TR4
fixed some console commands being able to target unintended items
fixed the /spawn and /kill console commands not reaching army Winston
fixed the /teatime console command summoning army Winston rather than Winston himself
fixed console commands treating an item that has been removed from the level as though it were still alive
fixed the /trigger and /untrigger console commands crashing or doing nothing on some objects, so they now act on any item exactly as a level trigger would
fixed the /trigger, /untrigger and /kill console commands being usable in demos and cutscenes
fixed long messages in the developer console running past the right edge of the screen by 1 character
fixed being unable to drop to the secret ledge in Jungle room 76 from the ledge above (
#5818
)
fixed a crash when drawing an animating object that has no frame data (
#5869
)
fixed a crash in custom levels when an armed enemy turned ally shoots the last remaining enemy (
#5973
)
fixed the glow around gun and flare flashes lagging behind them (
#5920
)
fixed trains using extreme tilt angles when they come to a stop at a wall (
#5886
)
fixed Lara attempting to climb ladders from inside lifts (
#5890
)
fixed Lara not getting killed by lifts if standing on top of one and the ceiling space becomes too low
fixed Lara attempting to pull up into gaps that would not allow her to stand, resulting in her being pushed out (
#5891
)
fixed Lara being able to light a free/ghost flare by selecting one from the inventory while crawling (Gameplay → Fixes → Fix free flare glitch)
fixed Lara leaving ripples on ceilings that lie below the waterline (regression from 1.1)
fixed shoals of fish and piranhas jumping back to their starting spot when loading a save
fixed rain and snow starting over when a save is loaded (
#5901
)
fixed Bacon Lara flickering if she dies in a room different to where she fell from
fixed Bacon Lara remaining targetable after death
fixed Bacon Lara dying prematurely in some geometry setups
fixed Bacon Lara mimicking some of Lara's movements, such as looking or using weapons, before being triggered
fixed jittery interpolation on Bacon Lara when falling from great heights
fixed the detonator box returning to its original position after loading a save (OG bug)
fixed Lara's arms dropping for a moment when she changes target and there is nothing else to switch to
fixed crawler mutants killed by Lara's allies not being included in the stats when the option to include ally kills is enabled (
#5691
, regression from 1.7)
fixed Lara receiving twice the number of flares if given via the game flow (regression from 1.9)
fixed a crash when advancing through a flyby sequence in photo mode and the sequence reaches its end (regression from 1.9)
fixed the camera snapping aggressively to Lara after some flyby sequences (regression from 1.9)
fixed flyby sequences set to loop playing only once, then swinging the camera back to Lara
fixed a brief field of view flicker when exiting photo mode during Lara's special animations, such as turning to gold (regression from 1.5)
fixed mesh debug spheres not rendering after switching mods (regression from 1.5)
fixed the title screen starting on the wrong item after switching mods, such as the home photo in place of the passport (regression from 1.5)
fixed the demos not starting from the first one after switching mods (regression from 1.5)
fixed differing ladder/hanging behavior when Lara comes to a stop from shimmying when corner shimmying is enabled (regression from 1.9)
fixed quick saves bypassing the save crystals mode
fixed the game displaying a GUI error dialog when it fails to start in headless mode
fixed the mixed mod layout error message running off the edge of the screen, leaving the paths it names unreadable (
#6048
)
fixed the body bag trigger to also collect Bacon Lara, Qualopec Mummy and Skidoo Driver's corpses
fixed settings text running off both sides of the screen in the longer languages, most visibly at 4:3 (
#6000
)
fixed the list of settings a preset would change spilling outside its dialog, and its text now wraps (
#6000
)
fixed RX Worker 3 in custom levels always looking at Lara when setup with patrol objects, and not properly detecting when she comes into range
fixed Lara getting stuck on ropes if she enters the fly cheat while still using one (regression from 1.9)
fixed the inventory hint for using an item showing Enter rather than the key bound to Action (regression from 1.8.1)
fixed the black surround of the binoculars turning grey when looking in certain directions (regression from 1.9)
fixed a new game, or a level started from Play Any Level, running in the game mode the previous game was started in
fixed a shaky start to the QWOP animation if the option to fix the step glitch is enabled (regression from TR2X 0.8)
fixed Lara being able to collect plinth pickups while ducked (regression from 1.9)
fixed Lara being able to collect normal and plinth pickups at the same time if they share a common position (regression from 1.9)
fixed Lara moving too quickly towards targets when animated interactions are enabled, which could result in sliding in some cases during long transitions, or not being able to interact with the target at all (regression from Tomb1Main 2.7)
fixed Lara being unable to collect some pickups that are very close to edges with a drop when animated interactions are enabled (regression from Tomb1Main 2.7)
fixed changing the number of save or quick save slots mid-game discarding the progress of the levels played so far (
#6054
)
fixed Lara repeating a pickup animation if jump and roll are held during the pickup (regression from TR1X 4.14 / TR2X 1.4)
fixed not being able to perform the item duplication glitch (regression from 1.2)
TR1
changed weather to be affected by the breeze
changed Bacon Lara's anchor room to be an optional object property rather than a game flow event; refer to migration notes
fixed Lara's braid floating or being aligned to the water height when vaulting out of wading depth water (
#5900
)
fixed static meshes in Obelisk of Khamoon and Sanctuary of the Scion interfering with animated interaction pickups
TR2
changed weather to be affected by the breeze
fixed Lara being able to use a detonator box or a gong a second time by selecting its key in the inventory
fixed Lara's braid floating or being aligned to the water height when vaulting out of wading depth water (
#5900
)
fixed the Silver and Jade Dragon secrets being listed in the wrong order in the Floating Islands statistics (OG bug); saves made before this version have the two swapped
fixed music triggered from one-shot switches playing more than once (OG bug)
fixed the collapsible tiles in Wreck of the Maria Doria room 68 not triggering if Lara jumps over them, and fixed a missing trigger for barrels item 123
TR3
changed the Hand of Rathmore in Reunion to not show pickup aids, in line with the other artefacts
removed the PS1 SFX replacements option from the Sound menu, which has no relevance in TR3/TR3LA
removed the hardcoded glow color and rotation speed of artefact pickups, and moved to Lua properties instead; refer to migration guide
fixed Willard being visible outside the hut at the beginning of the cutscene following Antarctica (resolves
#5929
)
fixed scenery that leans out of its room, such as the streetlight glow in It's a Madhouse!, flickering as the camera turns (OG bug)
fixed enemies and objects that reach out of their room, such as the Loch Ness monster in Highland Fling, flickering as the camera turns (OG bug)
fixed flame emitter 103 in Jungle not triggering when entering the temple from room 0 (
#6057
)
fixed Lara, when on fire, not extinguishing at the right water depth compared with OG (regression from 1.1)
fixed the waterfall and drowning mist bunching up in one spot instead of spreading out along the water (regression from 1.2)
fixed a crash when a level holds fewer raptors than its raptor emitters can send out
fixed jittery train interpolation (regression from 1.4)
fixed one-shot music playing more than once (
#5312
)
fixed blood spawning from sentry guns when Lara shoots them (regression from 1.5)
TR4
added dead enemies fading away a few seconds after they fall, as in the original TR4
added reflections
added TR4 outfits
added seamless body and braid joints to the TR4 outfits, as in the original TR4
added water droplets dripping off Lara after she leaves water (also enabled in TR3)
added a small splash when spent shells land on water (also enabled in TR3)
added fires
added floor switches
added crowbar switches
added jump switches
added pulley switches, with properties to configure the number of required pulls, and whether or not they are single use
added underwater ceiling switches
added reach/receptacle switches
added shove button switches
added support for hidden reach-in pickups
added support for pickups that need to be pried with the crowbar
added support for Sarcophagi and pickups hidden within
added Lara catching fire, from fires and other hazards; she stays on fire across level transitions
added an option to let fires and other dynamic lights illuminate static meshes (Graphic Options → Visuals → Static mesh lighting)
added ricochets, so that shots that hit walls and other hard surfaces throw out sparks and leave a puff of smoke
changed binoculars to not make Lara put her current weapon away
improved crouch turning for Lara to allow for more responsive transitions to crouch idle, crouch roll, and crawl idle states
fixed pixel sparks, such as blood and the shell splash, drawing as squares instead of the original streaks
fixed the camera snapping to elevation and angle changes in instances such as opening floor trapdoors
fixed Lara's braid and pigtails spinning around their own axis (OG bug)
fixed a missing texture on Young Lara's left hand
fixed a misaligned texture on Young Lara's hips
fixed the camera getting stuck when Lara traverses around corner ladders (OG bug)
fixed animated textures, such as water surfaces, cycling at half their original speed
fixed flares burning red and trailing sparks and bubbles, so they now burn green and cast only their light, as in the original TR4
fixed Lara being able to light a flare while crawling; she now refuses, as in the original TR4
fixed Lara sidestepping in the wrong direction when turning off floor/crowbar switches
fixed Lara attempting to interact with one-shot pulley switches
fixed pulley switch animations not synchronizing with Lara if she continues to pull one indefinitely
fixed the camera not reacting to Lara using a shove button switch (OG bug)
fixed Lara using the wrong animation on switch item 2 in The Sphinx Complex (OG bug)
fixed one of the braziers on the title screen going out for good once the menu's flybys had passed it (OG bug)
fixed pickups that are pried with the crowbar animating indefinitely if the game is saved and loaded during the animation (OG bug)
fixed Lara being able to collect Sarcophagi pickups by crouching and glitching through the surrounding casing (OG bug)
Lua
The Lua integration was rewritten and existing scripts will need updating; refer to migration notes.
added p, a global shorthand for trx.console.log, and made the console log functions take any value, pretty-printing a table
added a new Lua module, trx.math, with the engine's own fixed-point trigonometry and the DEG_1, DEG_45, DEG_90 and WALL_L constants
added trx.math.round_to_sector(), which snaps a position or a single coordinate back to the corner of the sector it stands in
added a new Lua module, trx.strings, with fuzzy_match(), regex_match(), collapse_ranges() and dedent()
added a new Lua module, trx.json, to write a value out as JSON
added a new Lua module, trx.rules, holding the numbers the game plays by
added a new Lua module, trx.argparse, a declarative argument parser inspired by Python's argparse
added a new Lua module, trx.locale, for the text the player reads, looked up by key
added a new Lua module, trx.weather, to read and set the runtime weather
added a new Lua module, trx.mod, to list the game's mods and read the loaded one
added a new Lua module, trx.savegame, to read the save slots and start a saved game
added a new Lua module, trx.lua, with eval_expr() and eval_file(), to evaluate Lua code at runtime
added a new Lua module, trx.cutscenes, for playing TR4's cutscenes, reading or rewriting which of them have run, and framing one, with the on_cutscene_trigger, on_cutscene_start and on_cutscene_end events
added a new Lua module, trx.stats, for what a level keeps count of – its secrets, pickups, kills, crystals, timer and deaths – alongside how much of each there was to find, for any level rather than only the one being played
added a new Lua module, trx.fx, with emit_light() and emit_fog(), for a light or a ball of fog put in the world for as long as a script keeps asking for it; the volumetric fog that was TR4's alone now shows in every game
added a new Lua module, trx.random, with random(), randint(), choice(), choices(), angle() and chance(); it draws from the sequence the game itself runs on, so what a script draws comes back the same after a reload
added trx.config.reset(), to put a setting back to its default
added trx.config.describe(), to read a setting's shape and accepted values
added trx.config.format_value(), the current value spelled the way the console prints it
added trx.config.accepted_values(), what a setting takes, as text for an error message
added trx.config.declare(), for a game to add settings of its own: they are saved and loaded with the player's, translated from the game's own strings, and shown in the settings menu where the declaration asks for
added trx.config.on_change(), to hear what a setting holds now and whenever it moves
added trx.game.Level.key, what a level is called after the file it loads
added require() to a game's scripts, taking a name that carries the directory it lives in: tr1.my_module for a script belonging to a game, common.my_module for one in the shared pool beside the executable
added new Lua game state, trx.game.is_loaded and trx.game.is_playable
added trx.game.is_ngplus, which tells whether the run started from the passport's bonus entry
added trx.console.register(), for a script to add its own console command
added trx.events.on_flip_effect(), letting a script handle a flipeffect run by a trigger or an animation command (
#4108
)
added trx.events.on_room_change(), which happens whenever an item changes rooms
added trx.events.on_level_unload(), which happens as the engine lets go of a level, while the world the script was written against is still there to read
added room:on_enter() and room:on_exit(), which happen when Lara – or, with watch = "all", any item – changes rooms
added trx.events.on_trigger() and the per-item item:on_trigger(), to react to a trigger of any kind being aimed at an item, with the trigger's type, mask, timer and one-shot flag
added trx.events.on_show() and trx.events.on_hide(), with the per-item item:on_show() and item:on_hide(), which happen when an item becomes visible or hidden
added trx.events.on_finish() and the per-item item:on_finish(), which happen when an item finishes its run, such as a sprung trap or a thrown switch
added trx.events.on_enter_sim() and trx.events.on_leave_sim(), with the per-item item:on_enter_sim() and item:on_leave_sim(), which happen when an item starts or stops being simulated
added trx.events.on_activate() and trx.events.on_deactivate(), with the per-item item:on_activate() and item:on_deactivate(), which happen when a trigger activates or an antitrigger deactivates an item
added trx.events.on_destroy() and the per-item item:on_destroy(), which happen as an item is removed from the game
added trx.events.on_enter_world() and trx.events.on_leave_world(), with the per-item item:on_enter_world() and item:on_leave_world(), which happen when an item enters the world as a runtime spawn or leaves it
added trx.events.on_hit() and the per-item item:on_hit(), which happen when an item takes damage, with the amount
added trx.events.on_kill() and the per-item item:on_kill(), which happen when damage takes an item's hit points to zero
added item:take_damage(), which hurts an item the way a weapon does, and reports through on_hit and on_kill
added trx.lara.cure_poison() and trx.lara.extinguish(), to clear Lara's poison and put her out
added trx.lara.dry() and trx.lara.is_wet, to dry Lara off after a swim and to check whether she needs it
added trx.lara.is_flying, to read and toggle the fly-mode cheat
added trx.lara.teleport(), to move Lara to a position, as /tp does
added a new Lua module, trx.inventory, for reading and changing what Lara carries: it counts and walks her inventory an entry at a time, says what she holds of each weapon and how many shots she has for it, and reaches any level's own inventory the same way through trx.game.Level.inventory
added a new Lua module, trx.weapons, for what a weapon is rather than what Lara has of it: whether the game allows it, which pickup it is, and what a box of its ammunition is worth
added trx.camera.play_flyby(), to start a flyby camera sequence, and trx.events.on_flyby_end(), which happens when one reaches its last camera
added trx.camera.is_flyby_active and trx.camera.cancel_flyby(), to see and stop a flyby sequence
added trx.game.LevelType.TITLE, and a demo level type to the game flow, which could not be named before
added trx.game.play_gym(), to start the gym
added trx.game.screenshot(), to save a screenshot
added trx.game.end_level(), to end the current level
added trx.game.exit_to_title(), to leave the current game for the title screen
added trx.game.exit_game(), to close the game
added trx.items.spawn(), to place a new item in the level at runtime
added trx.objects.swap_sprite(), to exchange the sprites two objects are drawn from
added trx.objects.query, trx.items.query and trx.rooms.query, composable filters over a level's objects, items and rooms that match names, families, state and the rooms a position is in, and combine with &, | and ~
added pickup families to trx.objects.query – gun, ammo, supply, tool, key, puzzle, quest, examine, collectible and secret – so a script can ask what a pickup is
added trx.items.get(), trx.items.count(), trx.rooms.get(), trx.rooms.count() and trx.objects.get(), replacing the fn namespaces
added trx.rooms.find_valid_pos(), to nudge a position into valid room geometry
added trx.rooms.floor_height() and the room method floor_height(), the height of the floor under a position
added a new Lua module, trx.zones: script-defined trigger regions, as a box, a sphere or a single sector, reporting what enters them, what leaves, and what a flyby camera passes through
added item methods, activate(), deactivate(), trigger(), destroy(), die(), shatter(), distance_to(), is_valid(), get_property(), set_property() and get_property_names(), letting a script fire a trigger or antitrigger at an item exactly as a level would
added the writable Lua item field is_one_shot
added object methods, get_property(), set_property() and get_property_names()
added new Lua item fields, anim_state, goal_anim_state, speed, fall_speed, gravity, collidable, mesh_bits, touch_bits, max_hit_points, index, is_triggered, trigger_mask, is_reversed, was_hit, is_simulated, is_present, is_visible, is_finished, is_in_play, is_alive, is_targetable, is_hostile and is_killed, replacing the item.status enum, and made timer writable
removed the raw item.flags field; its trigger bits are read through trigger_mask, is_reversed, is_triggered, is_killed and is_one_shot
added new Lua Lara state, trx.lara.poison, trx.lara.electric, trx.lara.is_burning, trx.lara.is_crouched, trx.lara.is_climbing, trx.lara.water_status, trx.lara.gun_status, trx.lara.hit_direction, trx.lara.requested_gun and the dive, death, sprint and pose timers
added new Lua assault course functions, trx.assault.finish(), trx.assault.is_running() and trx.assault.is_visible(), and a new property, trx.assault.active_track
added new Lua config functions, trx.config.override(), trx.config.restore() and trx.config.is_overridden(), to change a setting without overwriting the player's own value
added new Lua level fields, script_path, lara_outfit, music_track, water_particles and the unobtainable pickup, kill and secret counts
added new Lua object fields, loaded, is_intelligent, mesh_count, anim_count, radius, shadow_size, smartness, pivot_length and semi_transparent
added new Lua catalog functions, trx.catalog.to_slot() and trx.catalog.from_slot(), to convert between a TRX id and the slot the current game's own files use for it
added new Lua enums, trx.items.Status, trx.lara.WaterState, trx.lara.GunState, trx.game.LevelTable, trx.catalog.Context and trx.rooms.FlipStatus
added trx.log.generic() and the trx.log.LogLevel enum, to log at a level chosen at runtime
added the braid and crowbar constants to trx.lara.ExtraMesh, which the engine had but never exposed
added indexing and the length operator to trx.items, trx.rooms and trx.objects, so `trx.items
is the first item and
#trx.items` is how many the level has
added trx.api.strict(), which checks a script's arguments against the API's own declarations – worth turning on while writing a level, and leaving off in play
added room:is_valid(), so a room handle held across a level change can be checked the way an item handle can
added the track to the assault course record functions, so the quad bike's records can be read and written at last
added a new Lua string function, trx.strings.collapse_ranges()
added trx.music.tracks, the level's tracks as trx.music.Track handles keyed by id, each with :play() and :path()
added trx.music.current_track and trx.music.looped_track, the playing and ambient tracks as trx.music.Track handles
added trx.music.streams, the soundtrack's streams as trx.music.Stream handles, each of which can be paused, resumed, sought and stopped on its own
added trx.sound.samples, the level's samples as trx.sound.Sample handles keyed by id, each with :play(), :stop() and its volume, range, randomness and pitch
added trx.sound.streams, the sound effects playing now as trx.sound.Stream handles, each of which can be paused, resumed and stopped on its own
added a script watchdog: a script that runs for over 5 seconds without handing control back is stopped with a script error, where it used to freeze the game
changed Lua scripts to be found by name rather than declared in the game flow: a level loading wall.tr2 runs scripts/wall.lua, and scripts/_game.lua runs as the game starts, for what a game sets up rather than a level – refer to migration notes
changed trx.lara.is_burning to be writable, so setting it lights Lara or puts her out
changed trx.lara.extra_anim to a boolean, where it used to be the relative animation number, or -1
changed trx.lara.mesh and trx.lara.extra_mesh to declared enums, trx.lara.Mesh and trx.lara.ExtraMesh
changed trx.items and trx.rooms to hand out opaque handles rather than { idx = ... } tables, so a handle to a killed item now raises instead of silently addressing the item that took its slot
changed handles to compare equal when they name the same thing, so trx.items[0] == trx.items[0]
changed trx.items and trx.rooms to count from zero, matching the item and room numbers level editors show, and made pairs() walk them keyed by that number
changed room handles to go stale at a level change rather than quietly naming a different room
changed trx.sound.play, trx.sound.stop and trx.music.play to take a sound or track by catalog name, which works across games, rather than the level's own slot; the slot is reached through the samples/tracks handles, and play hands back the stream it starts
changed trx.game.levels and trx.game.play_level to leave out the gym, so numbering no longer shifts and the last level is reachable
changed trx.api to hold only strict and is_strict once sealed, and trx.api.strict() to check handle method arguments too
changed a position table to require all three coordinates, rather than reading a missing one as zero; a position is documented as trx.math.Vec3 and an orientation as trx.math.Rot
changed room.idx to room.num
changed the Lua level field name to title
changed item.object_id to be read-only
changed `trx.objects
toreturn
nil` for an unknown id, where it used to return an object that answered to nothing
changed trx.config.get() to return the option's own type rather than always a string
changed the names that stand for a number to say which kind they are - item.num, item.anim_num, slot_num, object_id and the like; refer to migration notes
changed the event hooks to hand back a trx.events.Listener rather than a number, which detaches itself with listener:detach() and says whether it was still attached
changed trx.events handlers to no longer receive a dummy argument in before_control and after_control
changed the Lua level events to a single on_game_start, which every kind of level fires, with on_title_start for the title screen; refer to migration notes
changed the Lua logging functions to take a single message rather than a list of strings
changed Lua enums to answer to a constant's name in any case, so trx.catalog.objects.wolf and trx.catalog.objects.WOLF are the same constant
changed Lua enums to be read-only, including the table pairs() used to hand out; writing to one used to break every later lookup
changed writes that a field cannot hold to raise rather than truncate, so item.hit_points = 99999 no longer wraps
fixed a number too large for the engine wrapping into range rather than being refused, so trx.items[4294967297] no longer reads as the first item
removed trx.items.find() and trx.items.first(); trx.items.query does both
removed trx.console.log.LogLevel, a duplicate of trx.log.LogLevel
removed trx.events.EventType
removed trx.game.settings, which duplicated trx.config
removed trx.music.play_track, an undocumented alias of trx.music.play
removed the trx.pickup module; its enum is now trx.items.PickupMode