Compare commits

...
Author SHA1 Message Date
Axle1975 9d40e90f8a Add tdraw.dll, tdraw.txt and LICENSE 2026-06-20 14:44:16 +10:00
Axle1975 0483c25ac2 tatw-2.0b86 2024-05-12 23:02:49 +10:00
7 changed files with 762 additions and 6 deletions
+1
View File
@@ -1,3 +1,4 @@
TADEMO.UFO filter=lfs diff=lfs merge=lfs -text TADEMO.UFO filter=lfs diff=lfs merge=lfs -text
online.dll filter=lfs diff=lfs merge=lfs -text online.dll filter=lfs diff=lfs merge=lfs -text
rev31.gp3 filter=lfs diff=lfs merge=lfs -text rev31.gp3 filter=lfs diff=lfs merge=lfs -text
tdraw.dll filter=lfs diff=lfs merge=lfs -text
+26
View File
@@ -0,0 +1,26 @@
Beta 86
Summary of changes (For more details and notes, see the full changelog (TAT-v2.0-Beta-Changelog.txt) included in the release):
The new TADR release (Thanks TADR devs!) is included in this beta, which includes the +autoteam command, metal extractor and wreckage "snap" functionality, showing the current wind speed and tidal strength, etc. You can bring up the control panel in game with Control F2. This includes a new totala.exe and .dlls to allow for the new functionality. For details, see tdraw.txt.
Depthcharges now continue to track targets outside their range, like missiles, making it harder for subs (Or other units) to outrun them.
Doubled the metal "weight" for being carried in multi-unit air transports (Arm Condor and Core Vindicator) for Arm Lemmings and Invaders and Core Roaches and Skuttles, so you can only carry half as many (10 Lemmings instead of 20, etc.).
Arm Gremlin mincloakdistance increased to 50 (25).
NOTE: This makes them easier to decloak, since it was really difficult before. Now a unit that comes within about a Gremlin's width of the Gremlin should decloak it.
Tripled the energy costs for the Arm Epoch and Core Black Hydra.
NOTE: Previously, Epochs and Black Hydras had the same energy to metal ratio as the Millenium and Warlord, despite the former being Gantry-level ships. Now their energy cost is tripled like other Gantry units.
Core Cauterizer attack run length and turnrate reduced.
NOTE: This should help "chain-bombing" to be less abuseable with the Cauterizer, especially while trying to change directions during it.
Arm Hermes cost reduced, armor increased, and firepower reduced to 1/2. They now use the Arm Chainsaw weapon.
Minelayer vehicles, Kbots, and ships now take 20% normal damage from mines (5% normal damage).
Arm and Core Nexus speed reduced to 1.2 (1.3).
NOTE: This gives them the same speed as Commanders.
Core Tidal Generator footprint changed to 3x3 (4x4), so they take up as little space as an Arm Tidal Generator.
+79
View File
@@ -0,0 +1,79 @@
# TA Demo Recorder and Community Patch
## LICENSE
### TA Community Patch (original filename: tdraw.dll; source directory: src/DDRaw)
The MIT License (MIT)
Copyright (c) 2023 Axle1975, FunkyFr3sh
Copyright (c) 2019 Xpoy
Copyright (c) 2003 SJ, Yeha
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
### TA Demo Recorder (original filename: tplayx.dll; source directory: src/Recorder)
The MIT License (MIT)
Copyright (c) 2015 Rime
Copyright (c) 2003 SJ, Yeha
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
### TA Demo Replayer (original filename: SERVER.EXE, source directory: src/Server)
The MIT License (MIT)
Copyright (c) 2015 Chaos
Copyright (c) 2003 Fnordia
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+71 -4
View File
@@ -1,3 +1,70 @@
April 27, 2024
TA:T v2.0 Beta 86:
The new TADR release (Thanks TADR devs!) is included in this beta, which includes the +autoteam command, metal extractor and wreckage "snap" functionality, showing the current wind speed and tidal strength, etc. You can bring up the control panel in game with Control F2. This includes a new totala.exe and .dlls to allow for the new functionality. For details, see tdraw.txt.
Arm Crusader and Core Enforcer weapon [DEPTHCHARGE] weapon timer increased to 10 (3) and noautorange set to 1 (not set previously).
Arm Archer and Core Shredder weapon [ADVDEPTHCHARGE] weapon timer increased to 10 (3.5) and noautorange set to 1 (not set previously).
Arm Anemone and Core Jellyfish weapon [COAX_DEPTHCHARGE] weapon timer increased to 10 (6) and noautorange set to 1 (not set previously).
NOTE: These changes allow depthcharges to continue tracking targets outside of their normal range. The enemy unit must still be within range to initially fire on it, but once fired, the depthcharge will keep tracking the enemy unit until it hits the target or the weapon timer runs out, which is 10 seconds for depthcharges. Previously, the depthcharge would stop tracking as soon as it went outside the firing range of the weapon, making it pretty easy for subs to outrun destroyer depthcharges, for example.
Arm Lemming metal "weight" for being carried in multi-unit air transports (Arm Condor and Core Vindicator) increased to 100 (50).
Arm Invader metal "weight" for being carried in multi-unit air transports (Arm Condor and Core Vindicator) increased to 250 (125).
Core Roach metal "weight" for being carried in multi-unit air transports (Arm Condor and Core Vindicator) increased to 250 (125).
Core Skuttle metal "weight" for being carried in multi-unit air transports (Arm Condor and Core Vindicator) increased to 700 (350).
NOTE: These explosive bomb-type units are more dangerous than their metal cost might imply, so this makes it harder to carry in large amounts of explosive units in a single transport.
Arm Gremlin mincloakdistance increased to 50 (25).
NOTE: This makes them easier to decloak, since it was really difficult before. Now a unit that comes within about a Gremlin's width of the Gremlin should decloak it.
Arm Epoch energy cost increased to 952373 (317453).
Core Black Hydra energy cost increased to 993263 (331088).
NOTE: Previously, Epochs and Black Hydras had the same energy to metal ratio as the Millenium and Warlord, despite the former being Gantry-level ships. Now their energy cost is tripled like other Gantry units.
Core Cauterizer attackrunlength reduced to 225 (502) and turnrate reduced to 70 (140).
NOTE: This should help "chain-bombing" to be less abuseable with the Cauterizer, especially while trying to change directions during it.
Core Bladewing weapon [BLADEWING_LYZER] replaced with [ARM_PARALYZER].
Core Bladewing weapon [ARM_PARALYZER] tolerance increased to 65500 (4500) and pitchtolerance set to 65500 (not set previously).
NOTE: These two weapons look the same, sound the same, have the same reload, and do the same damage. The only differences are the [BLADEWING_LYZER] has maximum tolerance and pitchtolerance to allow it to shoot in any direction and a tiny difference in range ([BLADEWING_LYZER] has 465 range compared to [ARM_PARALYZER]'s 480). This will let us free up a weapon slot.
Arm Hermes energy cost reduced to 17453 (21639), metal cost reduced to 617 (765), buildtime reduced to 15866 (19672), armor increased to 2945 (2433), acceleration reduced to 0.01045 (0.014), and turnrate reduced to 185 (251).
Arm Hermes weapon [HERMES] replaced with [ARM_CIR].
NOTE: Previously, instead of the 1/2 baseline armor and double firepower most anti-air units have, the Hermes had 1/3 armor and triple the firepower, making it fairly dangerous to ground units, despite the only doing 1/3 damage to ground, since it had such good range and speed.
This change gives the Hermes the Chainsaw/Eradicator weapon instead, and sets it to 1/2 armor and double firepower, as is standard for anti-air units. The Chainsaw/Eradicator weapon is very similar to the Hermes weapon: Almost the same range (1050 vs 1080), same reload, but about 1/2 the damage of the Hermes weapon. So the Hermes will still be very effective against air units and decent against lighter ground units, since it's a Chainsaw/Eradicator on treads, but will be harder to abuse against slower ground units. It will also have more armor and be somewhat cheaper as well. The [HERMES] weapon is still used by the Arm Archer and Core Shredder.
Changed descriptions to reflect that depthcharges do triple damage to underwater and amphibious units, not double. The damage itself did not change, as it has been triple since Beta 62, but the descriptions still showed the old damage multiplier:
Arm Anemone description changed to "Depthcharge Launcher (x3 damage to underwater and amphib units)" ("Depthcharge Launcher (x2 damage to underwater and amphib units)"
Core Jellyfish description changed to "Depthcharge Launcher (x3 damage to underwater and amphib units)" ("Depthcharge Launcher (x2 damage to underwater and amphib units)"
Arm Crusader description changed to "Destroyer w/ laser/plasma cannon/depthcharges(x3 dmg UW/amphib)" ("Destroyer w/ laser/plasma cannon/depthcharges(x2 dmg UW/amphib)"
Core Enforcer description changed to "Destroyer w/ laser/plasma cannon/depthcharges(x3 dmg UW/amphib)" ("Destroyer w/ laser/plasma cannon/depthcharges(x2 dmg UW/amphib)"
Arm Conqueror description changed to "Cruiser w/decklasers/Gauss cannon/depthcharge(x3 dmg UW/amphib)" ("Cruiser w/decklasers/Gauss cannon/depthcharge(x2 dmg UW/amphib)"
Core Executioner description changed to "Cruiser w/decklasers/Gauss cannon/depthcharge(x3 dmg UW/amphib)" ("Cruiser w/decklasers/Gauss cannon/depthcharge(x2 dmg UW/amphib)"
Arm Archer description changed to "Flak/AA missile(1/3 dmg to non-air)/AdvDcharge(x3dmg UW/amphib)" ("Flak/AA missile(1/3 dmg to non-air)/AdvDcharge(x2dmg UW/amphib)"
Core Shredder description changed to "Flak/AA missile(1/3 dmg to non-air)/AdvDcharge(x3dmg UW/amphib)" ("Flak/AA missile(1/3 dmg to non-air)/AdvDcharge(x2dmg UW/amphib)"
Arm Spotter description changed to "Radar/Sonar/Line of sight with depthcharges (x3 dmg UW/amphib)" ("Radar/Sonar/Line of sight with depthcharges (x2 dmg UW/amphib)"
Core Watcher description changed to "Radar/Sonar/Line of sight with depthcharges (x3 dmg UW/amphib)" ("Radar/Sonar/Line of sight with depthcharges (x2 dmg UW/amphib)"
Minelayer vehicles, Kbots, and ships now take 20% normal damage from mines (5% normal damage).
NOTE: Minelayers can quickly build mines next to themselves to defend against nearby attacking units while taking little damage. This changes still allows them to do that, but at a higher cost in self-damage.
Arm and Core Nexus speed reduced to 1.2 (1.3).
NOTE: This gives them the same speed as Commanders.
Core Tidal Generator yardmap changed to "www www www" ("wwww wwww wwww wwww"), FootprintX reduced to 3 (4), and FootprintZ reduced to 3 (4).
NOTE: This reduces the space a Core Tidal Generator takes from 4x4 to 3x3, which is the same as the Arm Tidal Generator. Previously, one could only fit about 7 Core Tidals in the same line that 10 Arm Tidals fit, and Core Tidals took up about 77% more space if arranged in a square.
Arm Fortification HLT Post energy cost increased to 22400 (21831), metal cost increased to 905 (882), build time increased to 18100 (17640), and armor increased to 4054 (4048).
Core Fortification HLT Post energy cost increased to 23264 (22571), metal cost increased to 940 (912), build time increased to 19282 (18708), and armor increased to 4204 (4168).
NOTE: These had a bit too much armor after the adjustment to HLT weapons, so the costs were adjusted up slightly to match.
April 13 2024 April 13 2024
TA:T v2.0 Beta 85: TA:T v2.0 Beta 85:
@@ -267,7 +334,7 @@ NOTE: Arm and Core HLTs and Fortification HLTs have been put back to half armor/
In other words, energy weapons normally get 50% more damage than the baseline, but HLTs now get another 50% damage above baseline for a total of double the baseline. So they get 33% more than the 50% above baseline they already had, but at the cost of doubling their energy per shot cost, instead of just 33% more energy per shot. This is in addition to the extra damage from the above armor/firepower ratio adjustment. In other words, energy weapons normally get 50% more damage than the baseline, but HLTs now get another 50% damage above baseline for a total of double the baseline. So they get 33% more than the 50% above baseline they already had, but at the cost of doubling their energy per shot cost, instead of just 33% more energy per shot. This is in addition to the extra damage from the above armor/firepower ratio adjustment.
This should help HLTs to hit much harder than their cost equivalent in lighter laser defenses (Such as multiple LLTs), but at a much higher energy cost. An HLT will do about 80% more damage than its cost in LLTs, but will use up about 270% more energy to do so. HLTs will destroy Flashes and Instigators in a single shot and Stumpies/Raiders in 2 to 3 shots, making them very effective and handling attacking units with heavy armor. This should help HLTs to hit much harder than their cost equivalent in lighter laser defenses (Such as multiple LLTs), but at a much higher energy cost. An HLT will do about 80% more damage than its cost in LLTs, but will use up about 270% more energy to do so. HLTs will destroy Flashes and Instigators in a single shot and Stumpies/Raiders in 2 to 3 shots, making them very effective at handling attacking units with heavy armor.
Arm Light Laser Tower energy cost increased to 556 (446), metal cost increased to 101 (81), build time increased to 3030 (2430), and armor increased to 269 (216). Arm Light Laser Tower energy cost increased to 556 (446), metal cost increased to 101 (81), build time increased to 3030 (2430), and armor increased to 269 (216).
Arm Light Laser Tower and Turtle weapon [ARM_LIGHTLASER] damage increased to 75 (60) and energy per shot increased to 28 (22). Arm Light Laser Tower and Turtle weapon [ARM_LIGHTLASER] damage increased to 75 (60) and energy per shot increased to 28 (22).
@@ -2424,7 +2491,7 @@ Arm Lancet and Core Titan weapon [ARMAIR_TORPEDO] weapon timer increased to 10 (
Core Croc weapon [CORCROC_TORPEDO] weapon timer increased to 10 (3) and noautorange set to 1 (not set previously). Core Croc weapon [CORCROC_TORPEDO] weapon timer increased to 10 (3) and noautorange set to 1 (not set previously).
NOTE: These changes allow torpedos to continue tracking targets outside of their normal range. The enemy unit must still be within range to initially fire on it, but once fired, the torpedo will keep tracking the enemy unit until it hits the target or the weapon timer runs out, which is 10 seconds for torpedos. Previously, the torpedo would stop tracking as soon as it went outside the firing range of the weapon. NOTE: These changes allow torpedoes to continue tracking targets outside of their normal range. The enemy unit must still be within range to initially fire on it, but once fired, the torpedo will keep tracking the enemy unit until it hits the target or the weapon timer runs out, which is 10 seconds for torpedoes. Previously, the torpedo would stop tracking as soon as it went outside the firing range of the weapon.
Previously, TA:T was over the 512 unit limit (If using the TA Demo Recorder TADEMO.UFO unit), which caused some issues. For example, using Control-Z while having a Core Zulu selected would cause all selected units to start a self-destruct countdown as though Control-D had been pressed. It also seems to occasionally cause different kinds of units that shared a weapon type to not fire. Previously, TA:T was over the 512 unit limit (If using the TA Demo Recorder TADEMO.UFO unit), which caused some issues. For example, using Control-Z while having a Core Zulu selected would cause all selected units to start a self-destruct countdown as though Control-D had been pressed. It also seems to occasionally cause different kinds of units that shared a weapon type to not fire.
@@ -3740,7 +3807,7 @@ Arm Albatross speed increased to 8.066 (6.05) and attackrunlength set to 250 (Pr
Core Titan speed increased to 6.666 (5.0) and attackrunlength set to 250 (100). Core Titan speed increased to 6.666 (5.0) and attackrunlength set to 250 (100).
Core Typhon speed increased to 7.333 (5.5) and attackrunlength set to 250 (100). Core Typhon speed increased to 7.333 (5.5) and attackrunlength set to 250 (100).
NOTE: This brings Torpedo Bombers and Seaplane Torpedo Bombers up to the same speeds as their advanced bomber and seaplane bomber counterparts. It also lets them fire off their torpedos from a longer distance, potentially giving them a better chance at dropping their torpedos before being destroyed. NOTE: This brings Torpedo Bombers and Seaplane Torpedo Bombers up to the same speeds as their advanced bomber and seaplane bomber counterparts. It also lets them fire off their torpedoes from a longer distance, potentially giving them a better chance at dropping their torpedoes before being destroyed.
Arm Colossus line of sight increased to 2188 (1650). Arm Colossus line of sight increased to 2188 (1650).
Core Hive line of sight increased to 1989 (1500). Core Hive line of sight increased to 1989 (1500).
@@ -5945,7 +6012,7 @@ NOTE: This matches the countdown for regular Twilights.
Arm Scarab and Core Hedgehog can now cloak (250 energy to cloak unmoving, 500 while moving). Arm Scarab and Core Hedgehog can now cloak (250 energy to cloak unmoving, 500 while moving).
Arm Lurker and Core Snake weapon [ARM_TORPEDO] weapon velocity increased to 135 (90) and start velocity increased to 135 (90). Arm Lurker and Core Snake weapon [ARM_TORPEDO] weapon velocity increased to 135 (90) and start velocity increased to 135 (90).
NOTE: This should help prevent ships from outrunning level 1 sub torpedos quite so easily. NOTE: This should help prevent ships from outrunning level 1 sub torpedoes quite so easily.
Arm Gremlin mincloakdistance reverted back to 25 (1). Arm Gremlin mincloakdistance reverted back to 25 (1).
NOTE: They were too abuseable with the change. Putting them back to what they were for more testing. NOTE: They were too abuseable with the change. Putting them back to what they were for more testing.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+580
View File
@@ -0,0 +1,580 @@
WHAT IS THIS
tdraw.dll is an upgrade for Total Annihilation. It patches the game to fix many bugs and add many features.
It is an integral component of the TA Community Patch, the other parts being tplayx.dll (the recorder) and server.exe (the replayer).
tdraw.dll has a long provenance dating back to the work of SY_Yeha, who introduced whiteboard markers and the TA Hook and new hotkeys to TA.
Later work by Xpoy extended hotkey support, added new shortcut commands, uni-code font support, megamap, weapon-id crack (not present in current release) and porting music patch from GOG version,
and later support was provided by Rime.
The present release includes contributions from Axle and FunkyFresh, and owes a debt to TAG_Venom for extensive testing and critical feeback, and to Gamma and Wotan for further testing and feature suggestions.
CONFIGURATIONS
The release .zip files are annotated with a build configuration tag: "tdraw-<config>.zip". The various configurations are:
* tdraw-full.zip: all features enabled
* tdraw-escalation.zip: built for TA:Escalation. disables the following features
- mex snap
- that is all
* tdraw-minimal.zip: disables the following features
- mex/wreck snap
- options for construction units to stay put when guarding
- options for construction units to only reclaim or onlt assist while patrolling
- auto kickout construction units that are blocking another builder
- weather report at top of screen
- sync wind speed between players
- map DT's always visible.
INSTALLATION
Drop tdraw.dll into your TA directory.
Ensure the following files are also present in your TA directory:
- ddraw.dll (available from https://github.com/FunkyFr3sh/cnc-ddraw)
- totala.ini
You may need to rename totala.ini and tdraw.dll to whatever your mod is using. See below for reference. For other mods, please consult with the mod maintainers.
ini file dll file
Beta patch 3.9.02 TA.ini tdraw.dll
Escalation 9.9.6 TAESC.ini taesc.dll
Mayhem 10.9.2 Settings.ini mdraw.dll
ProTA 4.6 ProTA.ini tdraw.dll
Zero Alpha5-060322 tazero.ini zdraw.dll
NEW FEATURES IN BRIEF:
*2026.6.8
- bugfix for VoteReject - prevent local user from rejecting himself
*2026.6.3
- add "nottounderwater" flag for weapons (see NEW FEATURES IN DETAIL)
- fix bug potentially being the root cause of since-year-1997 intermittent black screen on join games
- better quality megamap render
*2026.5.28
- Fix construction units intermittently trying to sit within the footprint of rotated structures before building them
*2026.5.15
- Fix intermittent 6x8 staircase yardmap on south-facing rotatable factories
- New "PreviewObject3D=" unit key to override the 3DO model used for the nanoframe ghost preview (see NEW FEATURES IN DETAIL)
*2026.5.9
- Lag-switch mitigation: detects and freezes local simulation when network goes dark
- Vote-to-reject system for in-progress multiplayer games (see NEW FEATURES IN DETAIL)
- add "nottoair" flag for weapons (see NEW FEATURES IN DETAIL)
- add "surfacefire" flag for weapons (see NEW FEATURES IN DETAIL)
- +autoteam bugfix for occasional players stranded by themselves
- Diagnostic logging for crashes 004cbed5 and 0049cf19
- Building rotation: press '/' (configurable) to cycle the build cursor
facing for buildings whose FBI permits it (see NEW FEATURES IN DETAIL)
- Nanoframe ghost preview at the build cursor (see NEW FEATURES IN DETAIL)
- Fix for ctrl-z (and ctrl-a / ctrl-b / ctrl-c) silently truncating selections for unit ids >= 512
- Export engine-backed player elimination status to gpgnet4ta via shared memory,
so games where a commander dies but play continues are reported with the correct outcome
*2026.2.17 - Fix false trigger on version check
*2026.2.10 - Minor adjustment to diagnostic crash detection ("ERROR: dstRect out of bounds", allow CopyScreenContext all the way to the edge of destination context)
*2026.2.7 - Disable AUTOTEAM, RANDOMTEAM and CRCREPORT buttons for non-host players
*2026.2.5 - Add support for AUTOTEAM, RANDOMTEAM and CRCREPORT buttons in battleroom (guis/lounge2.gui)
*2026.2.2 - Custom ctrl-f2 menu skin for escalation
*2026.1.29 - Create seperate builds for full-featured (tdraw-full.zip), escalation (tdraw-escalation.zip), and minimal (tdraw-minimal.zip) feature sets.
*2025.12.13 - Add diagnostics for crash at 004cbed5
*2025.12.6 - Fix crash when game installed in a long path (eg C:\Program Files (x86)\Steam\steamapps\common\Total Annihilation\PROTA)
*2025.11.26 - New keys for unit definitions (units/*.fbi) to customise per-unit veterancy
*2025.8.29 - Bugfix for multithreaded version/cheat check
*2025.8.19 - Auto kickout of units under build order is now strictly only for own units (previously allowed kickout anyone's units if cheats enabled)
*2025.8.1 - Set build square preview to yellow if user can build there but it contains a unit that will be kicked out
*2025.7.12
- Allow user to queue build orders underneath their own mobile units; and auto kickout of units that are under a build order
- Mod developers can opt-in to "Improved behaviour of con units".
Modifies what construction units that are guarding factories do after completing each unit: either stay put; cavedog; or scatter.
Set byte at TotalA.exe:0x101f1f to 0x00 to disable the feature (default) or 0x01 to enable the feature.
Note that if one player's 0x101f1f setting doesn't match that of other players, an in-game cheat warning will be triggered.
Once enabled, see ctrl-f2 menu for related user configurable options.
- Fix bug with erroneous game results reported to TAF when using in-game +autoteam
- With fixed position, start positions are assigned in order given by TAF auto balance
so that players are positioned opposite an opponent of similar skill
- Fixed bugs with player placement in 2v2+ games on maps with neutral units
- Push anticheat hashing functions into background threads so as to reduce in-game slowdown experienced by some users
*v2025.5.18
- Improved behaviour of con units when guarding a factory - they stay put after finishing a build
*v2025.4.24
- Fix crash on parsing spawned unit initial commands - its now possible to copy-paste mission scripts from campaign
- Log cheat warnings to tdrawlog.txt for offline analysis
- Fix for non functional perm-los sonar patch (which otherwise requires watcher's com to be in top-left of map to work)
*v2024.12.5
- Fix crash on print-screen (and presumably many other related crashes)
*v2024.12.3
- Fix crash on +logo
- Fix rare intermitent crash on adding / moving / deleting whiteboard markers
*v2024.10.27
- Ability to create multiplayer/skirmish maps with neutral units and/or additional per-player spawn units
- Add a controls to hide/minimise the allies resource bar
- Make the allies resource bar actually work with ctrl-f2 setting "background=None"
- Fix incorrect player logo colour for "new marker added" messages
- Player the "Mission Complete" sound upon winning a multiplayer/skirmish game
- Fix bug causing "unit limit reached" in between single player missions
- Remove shared metal/energy from player "totals"
- Get TAHook to use the click-snapped start position
- Increase size capacity of whiteboard marker messages
- Fix for 10 player (and other) VerCheck false positives
- Support for watching all 10 players in 10 player replays (pending a corresponding TAF update to activate it)
*v2024.3.31 and prior
- Set start positions based on battleroom teams (or alliances)
- Repair battleroom teams icons so they can be used to create teams before to launching
- Add +autoteam battleroom and in-game commands to automatically assign teams
- Add +randomteam battleroom command to automatically assign random teams
- Add .exereport battleroom command to report CRC32 of each player's totala.exe
- Add .tdreport battleroom command to report CRC32 of each player's tdraw.dll (may be a different filename depending on mod)
- Add .tpreport battleroom command to report CRC32 of each player's tplayx.dll (may be a different filename depending on mod)
- Add .gp3report battleroom command to report CRC32 of each player's rev31.gp3 (may be a different filename depending on mod)
- Add .crcreport battleroom command to report fingerprints of each player's totala.exe, tdraw.dll, tplayx.dll and rev31.gp3 file all at once
- ClickSnap to snap to nearest mex, geo or reclaimable feature
- Add ability to drag queued orders around the map
- Con units patrol behaviour - hold position: reclaim only
- Fix the "ghost com" bug (remote commanders appear in top left of map during first 50sec of game)
- Fix the "units exploding in factories" bug by holding back recycling of deceased units' IDs for 5 seconds
- Option to render DTs and fortwalls that belong to the map (not built by a player)
- Supress "qqqqqq" whiteboard marker lables when "q" is used as the whiteboard key
- Show clock and weather report (wind and tidal strength) on top resource panel
- Sync wind speed across all players
- Set default resolution on new installs to 1024x768 (.ini setting "DisplayModeMinHeight768 = TRUE/FALSE")
- Disable relay of F11 chatmacro text to other players
- Enable start button in multiplayer lobby if only one player + AI are present
- Add +noshake and .ready buttons to sharing menu
- Add .autopause button to battleroom screen
- Change whiteboard, mappos and resource indicator colours in response to +logo commands
- Prevent +logo commands from affecting other players
- Ctrl-B doesn't select aircraft carriers
- Ctrl-F centres view on selected factory
- Ctrl-S works correctly with mobile-units-can-build-mobile-units hack
- Set +lostype as a cheatcode (not available unless cheats enabled)
- Look for ddraw.dll in current working directory as backend, or failing that use system ddraw.dll
- Use the same .ini file as TotalA.exe
- Use the same registry path as TotalA.exe
- Add FPS counter to megamap, increase megamap FPS
- Fix blue background on scoreboard
- Grey background on mega map to distinguish from unmapped area
- Prevent Ctrl-F2 dialog and allies resource bar from moving off screen
- Improve responsiveness of whiteboard marker movements sent to remote players
- Render cursor while in megamap
- Fix crash when removing markers
- Fix crash on simultaneous whiteboard marker move and delete
- Fix rare crash on TA Hook line drawing
- Radar and sonar jammers no longer jam your own radar and sonar in >3 player multiplayer
- Use CTRL_F and CTRL_B unit category tags for ctrl+f and ctrl+b hotkeys in preference to heuristics
- Change ctrl+s to use CTRL_W and NOTAIR/NAIR categories so as not to select jammers etc
NEW FEATURES IN DETAIL:
- Start positions
Start positions are now assigned based on battleroom teams/alliances.
With fixed positions, host and their team are assigned the odd positions in the order that they joined the lobby.
With random positions, host and their team are randomly assigned the even or odd positions, and they are assigned in random order.
The Teams icons now function correctly, so they can be used to arrange teams in the battleroom if desired.
This is optional, it is perfectly fine to arrange teams by creating alliances too.
- Autoteam
In the battleroom, host can type "+autoteam" to have teams assigned automatically.
These teams will then determine the start positions as described above.
If launched from TAF, the battleroom +autoteam will assign autobalanced teams based on the player rating.
Otherwise teams are assigned randomly.
The +randomteam command is available to use should you prefer random teams over autobalanced teams.
Alternatively, if host types "+autoteam" in-game, alliances are created based on actual start positions.
For more than 2 teams, host can type eg "+autoteam 3" to create the desired number of teams.
- MexSnap and WreckSnap
This patch includes ability to snap mexes and geos to the nearest metal or geo patch (MexSnap),
and to snap reclaim commands to the nearest reclaim (WreckSnap).
While holding down shift, press q and e alternately to switch between building mexes and reclaiming features.
If Mex/WreckSnap is temporarily interfering with your wishes,
you can hold down alt to override it.
The override key can be configured in the ctrl-f2 options menu.
The Mex/WreckSnap radii can also be configured independently via the ctrl-f2 options menu.
Press ctrl-f2, click on the "MexSnap" or "WreckSnap" field and press a number 0 to 9.
0 disables the Mex/WreckSnap and a larger radius results in snapping to features further away.
Note that Mex/WreckSnap is disabled by default.
It needs to be enabled by the mod maintainer.
If your Mex/WreckSnap radius shows as "NA" in the ctrl-f2 menu,
it is likely that Mex/WreckSnap hasn't been enabled by your mod maintainer.
- Move Queued Orders
After queueing a build order or a move order,
you can later move them around by selecting the unit
and left mouse dragging the order to a new position.
- Construction Units Patrol Behaviour
Patrol behaviour of contructions units is modified depending on their movement orders:
Hold Position: your construction units will only look for reclaim
Maneuvre/roam: your construction units will both look for reclaim and for units that need repair or assist
Mash the 'v' key to get the desired movement order and then set a patrol route.
- Neutral unit and/or per-player additional unit spawn
To enable this feature add a "[units]" section under the "[Schema 0]" section of your map's .ota file. eg
[Schema 0]
{
....
[units]
{
[unit0]
{
Unitname=ARMHLT;
Ident=;
XPos=3164;
YPos=0;
ZPos=2250;
Player=11;
HealthPercentage=100;
}
[unit0]
{
Unitname=ARMPEEP;
Ident=;
XPos=268;
YPos=0;
ZPos=384;
Player=1;
HealthPercentage=100;
CreationCountdown=30;
InitialMission=p 1750 1828;
}
}
These additional units will spawn in for skirmish/multiplayer.
The "Player" key in the .ota file refers to the map position 1..10.
Whichever player is spawned into these positions will receive ownership of the respective units.
You can set Player=11. If any Player=11 units are defined, then the last player (eg the 6th in a 3v3)
receives ownership of the Player=11 units as long as they are an AI. He does not receive ownership of any other units.
If a player receives any units by this mechanism, they won't receive a commander.
If you want the player to have a commander,
then either don't define any units for that position,
or include a commander unit in the list of units.
The required fields for each unit are UnitName, XPos, ZPos and Player.
YPos and HealthPercentage are ignored.
Optional CreationCountdown is in seconds and InitialMission works.
Optional Ident makes it possible to refer to the unit in InitialMission of another unit.
You'll have to look at eg totala4.hpi/maps/*.OTA for examples of InitialMission scripts to copy.
- Vote-to-Reject
When a player is to be rejected during an in-progress multiplayer game, the rejection must now be
approved by a majority vote rather than taking effect immediately.
Manual reject (initiated via Tab → Control → player → reject prompt):
The proposer's YES is counted automatically. All other non-target players are shown a vote dialog
and may click YES or NO. The reject passes if at least 2/3 of non-target active players vote YES
(minimum 1). If the target has a teammate, that teammate must vote YES for the reject to pass.
If the vote fails by a NO majority it is cancelled immediately; otherwise the vote times out after
60 seconds with no effect and a 90-second cooldown is imposed before another vote can be proposed.
Timeout reject (triggered automatically when a player stops responding for 30 seconds):
All players are shown the vote dialog. The reject passes if at least 2 players vote YES
(or just 1 in a 2-player game), provided at least one ally of the timed-out player has voted YES.
If a NO majority makes the threshold unreachable, voting closes early and the player is
automatically rejected when the 90-second vote timer expires.
The vote dialog:
Each active vote appears as a row in an overlay dialog at the top-centre of the screen.
Each row shows the vote subject ("X has timed out - vote to reject?" or
"VOTE: X wants to reject Y"), the current tally (Ny/Nn/total, countdown), and YES / NO buttons.
Clicking YES or NO casts your vote and broadcasts it to all other players.
For timeout votes where the local player is an ally of the timed-out player, a ".take" button
is also shown. Clicking it broadcasts the chat message ".take", which the recorder (tplayx.dll)
interprets as the player taking over the timed-out player's units. Once the recorder confirms
the take, the corresponding vote is automatically cancelled.
- Per-Unit Veterancy Customization
This patch introduces new optional keys for unit definition files (units/*.fbi)
that allow you to customize veterancy behavior for individual units.
Example
[UNITINFO]
{
UnitName=ARMMART;
...
VeterancyThresholds=6 12 18 24 30; // OTA default: 5 10 15 20 25
VeterancyAccuracyBuffRate=3; // OTA default: 12
}
New Keys
- VeterancyThresholds:
Sets the number of kills required to reach each veterancy level (VetLevel).
Example: "6 12 18 24 30" means:
- 6 kills for VetLevel 1
- 12 kills for VetLevel 2
- 18 kills for VetLevel 3
- etc.
OTA's default thresholds are "5 10 15 20 25".
- VeterancyAccuracyBuffRate:
Controls how quickly a units weapon accuracy improves with kills, independently of veterancy levels.
- Accuracy starts at a factor of 1 with 0 kills.
- This factor increases by +1 every VeterancyAccuracyBuffRate kills.
- Formula: accuracyFactor = 1 + floor(kills / VeterancyAccuracyBuffRate)
- OTAs default rate is 12.
- Set to zero to disable accuracy buff altogether
Veterancy Effects (Unchanged)
This patch does NOT change what veterancy levels do, only how they are earned.
For reference, each VetLevel in OTA gives:
- Capture cost: +10% worker time needed to capture the unit
- Damage taken: -4% damage received
- Damage dealt: +6% damage dealt
- Target tracking: improved weapon target tracking (effect uncertain)
- Reload time: -6% weapon reload time
- Accuracy buff: improved firing accuracy (randomness reduced by an increasing factor)
Note: Reload time also appears to be affected by the units health.
Veterancy Limits
OTA limits:
- Capture cost: no limit
- Damage taken: up to 5 levels
- Damage dealt: up to 5 levels
- Target tracking: up to 1 level
- Reload time: up to 5 levels
- Accuracy buff: no limit
With this patch:
- Capture cost: no limit
Beyond the last specified threshold, kill requirements are extrapolated linearly from the last two thresholds.
- Damage taken: up to 25 levels or the number of VeterancyThresholds, whichever is lower
- Damage dealt: up to the number of VeterancyThresholds
- Target tracking: up to 1 level
- Reload time: up to 16 levels or the number of VeterancyThresholds, whichever is lower
- Accuracy buff: no limit
- Weapon TDF flags: nottoair, nottounderwater and surfacefire
Two new optional keys for weapon definition files (weapons/*.tdf) give mod developers
finer control over which unit types a weapon can target.
nottoair=1
The weapon cannot target or fire at flying units (units with an airborne movement state).
Useful for weapons that are physically implausible against air targets, such as depth charges
or large ballistic artillery.
Example:
[DEPTH_CHARGE]
{
...
nottoair=1;
}
nottounderwater=1
The weapon cannot target or fire at fully-submerged units (a target whose top is at or below
sea level, such as a dived submarine). Ordinary weapons already cannot reach underwater
targets; this flag is meant for waterweapon=1 weapons, letting them hit surface ships while
leaving submerged units to torpedoes and depth charges. It is the underwater mirror of
nottoair.
Example:
[NAVAL_GUN]
{
...
waterweapon=1;
nottounderwater=1;
}
surfacefire=1
Used together with waterweapon=1. Normally a water weapon can only target submarines and
other units that are at or below sea level. With surfacefire=1 the weapon can also target
surface units above sea level, such as hovercraft or land units near the shoreline.
Both auto-aim and manual targeting are affected.
Example:
[TORPEDO_SURFACE]
{
...
waterweapon=1;
surfacefire=1;
}
- Building rotation
While a building is selected for placement, press '/' to cycle through the
facings the unit allows. Shift may be held while pressing '/' so you can
rotate without lifting the line-build modifier. Most buildings only allow
their default facing, in which case the key does nothing. The rotate key
can be reassigned in the ctrl-f2 menu.
Alternatively, hold the snap-override key (default Alt — also configurable
in ctrl-f2) and scroll the mouse wheel: forward = counter-clockwise, back
= clockwise. This leaves plain mouse-wheel free for the megamap.
A third option is built into the build menu itself. Each rotatable
structure button has a small overlay marker on each cardinal it can
face (S = bottom edge, E = right, N = top, W = left). Click the
button on the corresponding edge to enter placement mode with that
rotation already chosen — clicks in the centre of the button select
the unit normally and keep the previously chosen rotation. Tick or
un-tick "Build menu rotation overlay" in the ctrl-f2 menu to enable
or disable the overlay (when off, the build menu is stock vanilla
and clicks behave as if it were never installed).
Mod authors can replace the built-in chevron art by dropping a 4-
frame GAF at anims/buildrotate.gaf beside their other animations.
Frames are interpreted in the order S, E, N, W (matching the
rotation index), and each frame's hotspot is anchored just inside
the cardinal margin band of the build button so the artwork sits
cleanly inside the button rather than straddling the edge. An
optional second file anims/buildrotateclick.gaf (also 4 frames in
the same order) is blitted in place of the idle GAF for the brief
click-feedback flash; if absent, no flash is rendered (mods opting
into a custom GAF need to ship the companion click GAF themselves
if they want one). When neither GAF loads the built-in chevrons
are used. A reference generator and example .gaf files live under
tools/make_buildrotate_gaf.py in the source tree.
Mod developers opt-in per unit by adding a "Rotations=" key to the
[UNITINFO] section of the FBI listing the cardinal letters they want
to allow, e.g.
[UNITINFO]
{
...
Rotations=SENW;
}
Limitation: a few mods script their Create() function to forcibly TURN
the unit body (e.g. so structures face the centre of the map). Such
scripts run after the build cursor's rotation is applied and overwrite
it, so the Rotations= key has no visible effect on those units.
- Nanoframe ghost preview
A small green animated preview of the building you're about to place
is drawn inside the build rectangle. It rotates in step with the
rotate-build key, and disappears on red (can't-build) squares. When
shift-line / shift-row building, the preview is shown at every
rectangle in the row.
Mod authors with upgrade-style units (where the 3DO model contains
both the basic and upgraded geometry, and the COB script controls
visibility at runtime) can list the pieces that should appear in the
preview by adding a "PreviewPieces=" key to [UNITINFO]:
[UNITINFO]
{
...
PreviewPieces=base, turret, sleeve, barrel, cover;
}
Names are matched case-insensitively against 3DO piece names; comma,
space, or semicolon may be used as separators. When the key is set,
ONLY listed pieces are rendered. When the key is omitted (the usual
case), every piece is rendered minus a small hardcoded set of
cosmetic / firing-effect names (flare, flash, muzzle, fire, flame,
wake).
Per-rotation overrides are also available — useful when the visible
pieces should differ by facing. Use any of:
PreviewPiecesS=... facing south (rotation 0)
PreviewPiecesE=... facing east (rotation 1)
PreviewPiecesN=... facing north (rotation 2)
PreviewPiecesW=... facing west (rotation 3)
Lookup order for the active rotation:
1. PreviewPieces<S|E|N|W>= if set (non-empty), uses ONLY that list.
2. PreviewPieces= the default for every rotation.
3. neither set every piece minus the ephemeral filter.
For units whose Create() script auto-rotates the structure toward
the nearest enemy Commander, the preview can be made to face the
same direction — preventing the jarring snap when the build commits
— by adding:
[UNITINFO]
{
...
PreviewFaceOpponent=1;
}
At each preview frame we find the nearest enemy commander to the
build cursor (each enemy player's first unit slot, which is the
commander in all but pathological cases), and snap the line from
the cursor to that commander to the nearest cardinal (S / E / N /
W). PreviewFaceOpponent overrides the Rotations= restriction —
setting this key is the author's explicit signal that the unit's
heading is script-driven, so the preview must face whichever
cardinal the script will pick regardless of what Rotations= permits
the player to cycle through.
To avoid leaking enemy positions through fog-of-war scanning, the
override only applies when the build cursor is within the actual
builddistance of one of the local player's selected, completed
construction units (each builder gets its own threshold from its
FBI builddistance=). Outside that radius the preview falls back to
the player's rotate-build selection — same as if PreviewFaceOpponent
were unset.
Falls back to the player's rotate-build selection in single-player
or any case where no enemy commander can be found (e.g. all enemies
dead).
Mod authors who want the preview to display a completely different
model than the unit's actual Object3D= (e.g. a simplified silhouette,
or the upgraded form of a unit whose 3DO bundles multiple variants)
can name an alternative 3DO with a "PreviewObject3D=" key:
[UNITINFO]
{
...
PreviewObject3D=corarmvp_preview;
}
The value is a 3DO base name (no extension); the file is loaded from
the HPI archive at objects3d/<name>.3DO on first use and cached
for the rest of the game session. All other preview FBI keys
(PreviewPieces, PreviewFaceOpponent, etc.) apply to this overridden
model — piece-name whitelists are matched against the OVERRIDE 3DO's
piece names, not the unit's real one.
If the named 3DO can't be found in the HPI, a warning is logged to
tdrawlog.txt and the preview falls back to the unit's real model;
no other behaviour is affected.