Skip to content

Releases: MinecraftTAS/TASmod

TASmod Beta2.0

25 Oct 19:40
Beta2.0
afccc26

Choose a tag to compare

Highlights

  • New savestate system ported from LoTAS-Light
  • Added temporary savestates for /record and /play

New

Savestate Indexing

  • /savestate now displays the savestates better, adding clickable elements into chat
  • Savestates can now be renamed
    • This can be done via /savestate rename <index> <newName>
    • When savestating via hotkey, a gui screen will be displayed for renaming the savestate you just created
  • Savestates now store the time and date, when they were created
    • Can be seen when hovering over the savestate name

Temporary savestates

Using /record and /play would be a bit limiting, since any change to the world, like breaking blocks may desync the TAS.

Now, a temporary savestate is created when starting a new recording with /record (i.e. when the input count is set to 0).
Using /play will load that savestate at the beginning.

Note

This will not impact the savestate 0 used for /fullrecord and /fullplay

Use /record nosave and /play nosave to get the old behaviour

Savestate folder structure

Savestates are now grouped in a subfolder by worldname
Whereas before, the .minecraft/saves/savestates folder would look like this:

savestates/ 
├── New-World-Savestate1
├── New-World-Savestate2 
├── New-World--Savestate1 
├── New-World--Savestate2 
├── Worldname-Savestate1 
├── Worldname-Savestate2 
├── Worldname-Savestate3 
├── New-World-info.txt 
├── New-World--info.txt 
└── Worldname-info.txt

which made the savestate folder kind of a mess when using multiple worlds.
Now it looks like this

savestates/
├── New-World-Savestates
│   ├── New-World-Savestate1
│   ├── New-World-Savestate2
│   └── New-World-info.txt
├── New-World--Savestates
│   ├── New-World--Savestate1
│   ├── New-World--Savestate2
│   └── New-World--info.txt
└── Worldname-Savestates
    ├── Worldname-Savestate1
    ├── Worldname-Savestate2
    ├── Worldname-Savestate3
    └── Worldname-info.txt

where all savestates are grouped by world.

Savestate data

Before, the savestate data was located in worldname/tasmod/savestateData.txt.
This made savestates incompatible with i.e. LoTAS which would store it in worldname/lotas/savestateData.txt.

To bring everything together, savestate data is now stored in worldname/tas/savestate.json

Tickrate 0 Warn

Added a chat message that will notify you, when the game was automatically set to 0 and what hotkey to press to unpause.

Fixes

  • Fixed /restartandplay straight up not working

TASmod Beta1.2

30 Sep 18:29
Beta1.2
5d14f86

Choose a tag to compare

Fixes

  • Fix error in console when joining a world

Dependencies

  • Update to Loom 1.11
  • Update Gradle to 8.14
  • Update Fabric Loader

TASmod Beta1.1

06 Aug 16:01
Beta1.1
37b3f92

Choose a tag to compare

Fixes

  • Fix respawning and /tp not moving the camera
  • Fix loadstates failing to move the player in some custom maps

TASmod Beta1.0

25 Jul 17:04
Beta1.0
38cfefd

Choose a tag to compare

This is the first Beta release of TASmod with a lot of reworks, better architecture and a new mod loader.

Highlights

Legacy Fabric

This release switches the modloader from Forge to LegacyFabric. The reason behind this is that forge 1.12.2 is just very old and unsupported. Plus, Legacy Fabric gives us built-in Mixin support and less modifications to the source code. The downside is that forge mods are incompatible with legacy fabric. However, some mods are already backported to legacy fabric.

Input Engine

The input engine or playback engine is the part of the code that hooks into the vanilla input system and redirects the inputs, so that they can be recorded or changed.

In Alpha, I found a flaw in how the inputs are set up. The idea behind it was that inputs can only happen once every tick, except for the mouse that can happen more times a tick, due to GUI-Screens. That idea was flawed and this introduced awkward compromises.

So for Beta, the input engine was extended to allow inputs in between ticks for Keyboard and Camera Angle as well, which I named "Subticks". Now inputs should behave exactly like vanilla.

Interpolation

Storing subticks for mouse and camera also has the added benefit of allowing for better input interpolation.

Normally, cursor location in GUIs and the camera angle are processed at 20 tps, which is very apparent to the player. So for the camera, TASmod-Alpha basically guessed some camera angles to fill in between the ticks, to make it look more watchable.

Now in Beta, all camera interpolation is handled by the subticks, so it should look pretty close to vanilla.

In addition to that, the cursor in GUI screens is also interpolated the same way now, which also fixes some issues with scroll bars

Input saving/loading (Serialisation)

With a new input engine comes the challenge of actually storing the new inputs.
This required a new structure of the TASfile to allow for easy editing.

The new structure goes as follows:

1|Keyboard|Mouse|Camera
	1|Keyboard-Subtick|Mouse-Subtick|Camera-Subtick
	2|Keyboard-Subtick|Mouse-Subtick|Camera-Subtick
	3|Keyboard-Subtick|Mouse-Subtick|Camera-Subtick
2|Keyboard|Mouse|Camera
	1|Keyboard-Subtick|Mouse-Subtick|Camera-Subtick
	2|Keyboard-Subtick|Mouse-Subtick|Camera-Subtick
3|Keyboard|Mouse|Camera
4|Keyboard|Mouse|Camera

Ticks are the same as the before, with Mouse inputs having their subtick syntax removed which is now moved to the indented "subtick" part of a tick.

Serialisation APIs

After revisiting the old serialisation code it became clear, that a serious overhaul is needed, as a lot of things were hardcoded.

To get around this I created 3 APIs that modders can use to add their own functionality to the TASfile.

Metadata

Data about the TAS like credits, start position and options at the beginning of the file can now be dynamically added. Modders can also create add-ons for TASmod and you can store custom metadata in the header.

FileCommands

A feature that was prototyped by PancakeTAS during the Alpha was "Control Bytes". With a special $ syntax, you could add a line to the TASfile and when the playback passes that line, the command would've been executed, for something like disabling the HUD or a nameplate in the corner

This feature has been expanded (and renamed) so modders can add their own file commands that TASers can add to their files.

In the future I would like to rewrite LoTAS as a separate Add-On to TASmod so it uses this system. Then we can merge functionalities and have LoTAS functions with TASmod playback

Flavors

By far the greatest effort was modularizing the serialisation itself. Modders can now easily create their own file format for TASmod, maybe to support other file formats from other tools and export them back to it. I named the file syntax "Flavor" as that name exists for the many different Markdown-Flavors that different sites like GitHub or GitLab use

Savestates

Back in Alpha, savestates had tons of issues as well, so this release fixes a lot of the issues described and of course adds the new subtick functionality

Changelog

New

  • New event handling
  • Packet handling
  • Config handling
  • Serialisation APIs
  • Improved packethandling
  • [Commands] /fileCommand for enabling/disabling fCs
  • [Keybinds] , and . for decreasing and increasing the tickrate
  • [Keybinds] Secret keybinds for turning 45° left and right
  • [Flavor] Add Beta1 (File format)
  • [Flavor] Add legacy Alpha flavor for loading and saving TASes from Alpha versions
  • [Playback] Add the ability to play back TASes while being tabbed out of the game (F3 and P to activate)

Changed

  • Switched to legacy fabric
  • Added support for subticks in Keyboard and Camera Angle, improved Mouse subticks
  • Changed TASfile syntax to support subticks
  • Add relative coordinates to TASfile, prepending with a ~ lets you specify a change relative to the previous one: ~45 will turn the player 45 degrees

Fixes

  • [Playback] Fix keyboard keys only being recognized after a tick
  • [Playback] Fix scroll bars sometimes desyncing
  • [Tickrate] Fixed initial tickrate not being sent, when a player joins the server
  • [Savestates] Fixed savestates failing when a player does not have playerdata
  • [Savestates] Fixed player not getting motion applied in multiplayer
  • [Savestates] Fixed loading across dimensions not working on first try
  • [Savestates] Fixed world not being visible after loading a savestate
  • [Savestates] Fixed scoreboards not being loaded after loadstate
  • [Savestates] Fixed boss bars duplicating on load
  • [Savestates] Fixed resources.zip in world folder breaking savestates
  • and so much more, but I lost track of it all...

Known issues

  • RNG is not being recorded. So mobs, loot and blocks will still be random. This will be my next focus

TASmod Alpha 9

02 May 12:52
Alpha9
dc5886e

Choose a tag to compare

TASmod Alpha 9 Pre-release
Pre-release

Last release was 1 year ago... How the time flies...

Important

This release is still for Forge 1.12.2. Future Beta releases will be for Legacy Fabric

New things

Deterministic RNG

The main feature of this release is Deterministic RNG.

This was done using the library KillTheRNG, which patches every call to an RNG to be deterministic. This meant around 400 Mixin-Classes for 2100 randomness calls. The mod for this has to be downloaded seperately from TASmod, as KillTheRNG still needs bugfixing.

Seed behaviour

To ensure deterministic behaviour, one "Global RNG" exists. The Global RNG changes to its next seed at the start of every tick. Additionally, this global seed sets the seed of all other RNGs at the start of the tick.

There are 2 Global RNGs, one on the client and one on the server. The Global Server is the one responsible while sending its seed to the Global Client every tick.

Start seed

When starting a recording, the current seed is recorded. When playing back the start seed gets applied to both client and server.

Setting the seed

The seed can be entered manually in the Main Menu. Simply typing numbers will set the seed. The seed will not advance when you are not in a Minecraft world.

InfoHUD

The current seed of the Global Client can be viewed in when enabeling KTRNG Seed in the F6 menu.

Seed Monitoring

If the seed is not the same when playing back as when you recorded the TAS, then the InfoHUD will display a warning

Command /killtherng

KillTheRNG has it's own command that gives some information about the RNG values in the game.

Command /playuntil

/playuntil runs the next playback until the specified ticks, then switches to a recording. This is useful when savestates are not available.

Changes

Networking

This release introduces a new packet server written by @MCPfannkuchenYT. This makes packets more reliable when sending between client and server.

Ticksync

Ticksync also received a massive overhaul. This makes it work better in both single and multiplayer and should get rid of random desyncs when the server is lagging.

Pause the server when a player is connecting

This ensures that the server doesn't tick while the client is connecting/joining the server.

TASfile

Smaller TASfile improvements

Changed fileending to .mctas

TASmod will now attempt to read files ending with .mctas rather than .tas. To update your existing files, simply rename the file ending.

Merged .mon and .mctas files

In the past, monitoring was stored in files ending with .mon.
Now, monitoring will appear as comments in TASfiles.

If you have existing .mon files, simply load the TASfile into TASmod. The file will be converted to the new format, and the old .mon file will be deleted.

Added 0th tick to the file

The first tick in the playback file was never played back, which caused me some issues when trying to sync things up. This is now fixed.

Fixes

I probably can't find every fix that was done in the past year...

  • Fixed playing time failing to save
  • Fixed "player moved to quickly" during a savestate
  • Removed "catchup ticks" when the server is lagging

Written by @ScribbleTAS

TASmod Alpha 8.1

09 May 15:10
Alpha8.1

Choose a tag to compare

TASmod Alpha 8.1 Pre-release
Pre-release

Does this count as a hotfix?

New things (@PancakeTAS)

Control bytes in playback

You can now add commands to the playback file that execute different functions during playback. Currently these will not save so add them at the end of your TAS.
The commands are:

  • $interpolation on/off: Turns on/off interpolation for playback
  • $hud on/off: Turns on/off hud during playback
  • $info off/String: Adds a box to the top left with a custom string

Interpolation for playback

Turn on interpolation via control bytes to enable a smooth playback.

Changes (@ScribbleTAS)

A bit of terminology:

  • Savestates are the world files on the server side, loading savestates is changing the world.
  • Client Savestates are copies of the inputs and stored on the client side. Those get loaded together with the server savestates

Loading savestates won't automatically load the client savestates anymore

In the past, parts of recordings were lost when accidentally loading a savestate.

Loading savestates, but without an associated Client Savestate won't clear the recording anymore

Imagine you made savestate 1 before recording anything, start the recording, stop it and load savestate 1. This cleared your recording since no client savestate was associated with the server savestate. This was a bit annoying and totally unnecessary...

/fullplay won't change the savestate index anymore

This is useful when making a TAS and having e.g. 7 Savestates, but then playing the TAS back with /fullplay. The result was that the savestate index was set from 7 back to 0. Continuing with the TAS afterwards and trying to make savestate 8, will accidentally overwrite savestate 1.

Fixes (@ScribbleTAS)

TASmod-Alpha8

27 Feb 14:17
Alpha8
9f2b6e3

Choose a tag to compare

TASmod-Alpha8 Pre-release
Pre-release

New things

Log4J

With this release you will have to update to the newest forge version, since it fixed the log4j exploit on client and server. This is because with TASmod you are still vulnerable to that exploit in singleplayer, since another person can send you a TAS that writes stuff in your chat, which may trigger the exploit. So please update your Minecraftforge!

Fullrecord

Start a recording or a playback from the main menu with /fullrecord or /fullplay. This will save and quit to the main menu and record to the buffer or play back the current buffer.

The command /restartandplay <filename> will quit minecraft, but when launching, it will load the specified file and will start playing that file. This is useful for sending your TASes to other players.

Credits in chat

When doing /fullplay credits will display in the chat upon joining a world. To change these credits, save the file via /saveTAS <filename>, open the saved file with a text editor, and change the parameters at the top of the document. Once that is done, save the file and load the file via /loadTAS <filename> to apply these changes

Input Container View (Preview)

Pressing numpad zero ingame should launch a second window that displays all inputs in the current buffer. It will also display the current index when playing back. This feature is still experimental and more used to debug some things, so expect some bugs.

Pause recording/playback

You can now pause and resume the recording or playback. This is pretty useless for the average user but has a big use for development purposes. So you may sometimes see "Paused" in the F6 menu under State

Fixes

  • Removed unnecessesary libraries
  • Fixed recording not running in the main menu
  • Fixed stop key (F10) not working in the main menu
  • Fixed desync monitor not recording the main menu
  • Fixed pointers scaling not working in multiple gui screens
  • Removed Access Transformers (@MCPfannkuchenYT)
  • Fixed a game freeze when loading the world in tickrate 0

TASmod-Alpha7

24 Oct 19:10
Alpha7
28e96e0

Choose a tag to compare

TASmod-Alpha7 Pre-release
Pre-release

New things

Introducing a new savestating system that is hopefully easier to get used to... The system only changes how files are created and not how the savestating itself function, which should allow for easier navigation.

The old savestates (TASTools-Savestates)

This old system started all the way back in TASTools. If you press J, a savestate will be created in .minecraft/saves/savestates . If you savestate again, the first one won't be overwritten, instead it will create a new folder.

Worldname-Savestate1/
Worldname-Savestate2/
Worldname-Savestate3/

However if you press K it will always load the latest savestate, in this case Savestate 3. To load Savestate 2 you would have to delete Savestate 3. Another disadvantage was, that if you had a gap in the numbering, the rest after the gap would be ignored, so if you had 300 savestates and wanted to clear out the first 100, you couldn't do that.

The new savestates

The new system works exactly the same as the old system. J creates a savestate, K loads the savestate. But now, there is an internal number that represents the "latest" savestate instead of the files in the savestates folder. This allows you to delete previous savestates, while the number, which I call the "current index" btw, is still stored in memory. With the new /savestate command, you can load or save savestates in different indexes... For instance in the example above, if you want to load Savestate 2, you can just type in /savestate load 2. The system now thinks that savestate 2 is the latest savestate and after creating a new savestate, it will overwrite savestate 3.

You can find more help ingame by typing /savestate or /savestate help

Bugfixes

  • Interpolation is in the wrong direction after loading a savestate (@MCPfannkuchenYT )
  • Fixed an issue where unbinding TASmod keybinds breaks mouse buttons
  • You can now bind keybindings to mousebuttons
  • Fixed an issue where sometimes, when pressing a TASmod keybind, it will spam the keybind 10 times in a row.
  • Fixed #118
  • Reintroduced #119
  • Fixed #121

TASmod-Alpha6

28 Sep 21:52
Alpha6
67ff57f

Choose a tag to compare

TASmod-Alpha6 Pre-release
Pre-release

Bugfix and QOL update:

  • Removed KillTheRNG from this mod and added support for this KillTheRNG mod
  • Removed gradle stuff (@MCPfannkuchenYT)
  • Updated Info HUD (@MCPfannkuchenYT)
  • Fixed vanilla mouse tutorial not advancing correctly
  • Fixed transparency issues
  • Added a keybind to open a seperate window that displays the inputs that get sent to minecraft when a TAS is loaded
  • Fixed keybinds being pressed multiple times when you are on high framerates
  • Added custom shields
  • Added more labels to info hud
  • Removed .mon and other files when tab completing in /loadTAS
  • Fixed Encoding issues with playback files
  • Fixed Arrows being typed when pressing arrow keys in signs
  • When loading savestates the gamemode will be correctly applied
  • Fixed a bunch of multiplayer issues
  • Rearranged and cleaned up a lot of things behind the scenes that shouldn't give me headaches in the fututre

TASmod-Alpha5

11 Aug 19:05
Alpha5
253c83c

Choose a tag to compare

TASmod-Alpha5 Pre-release
Pre-release
  • Rewrote the input, recording and playback systems to allow for savestates and more!
  • Added savestates
  • Added new commands
  • Disabled hotkeys when chat is open and in text fields in general
  • Added savestates on the client
  • Continued on multiplayer support
  • Started working on KillTheRNG (@MCPfannkuchenYT)
  • Added a better gui to display information (@MCPfannkuchenYT
  • Added a system that checks if the playback desyncs
  • Unpatched DragonSkip (@MCPfannkuchenYT)
  • Added interpolation to the camera (@MCPfannkuchenYT)
  • Removing the tutorial for now
  • A LOT of bugfixes

Tutorial

In the bottom left of your screen are several things. Probably the number 0 and the inputs you are pressing.
The white buttons are what the game currently recognises, the green buttons are what you press on the keyboard currently.
On lower tickrates you can see that the green one is updated faster than the white inputs

Commands

-/record: To start a recording. This records the inputs to RAM. The number should now increase because it detects the inputs.
-/clearinputs: Clears the currently stored inputs. Do this before starting a new recording, since /record only adds inputs and does not clear them.
-/play: Plays back the stored inputs. Before that, it teleports you to the location where you started recording.
WARNING Unfortunately the vanilla teleporting takes some time, so the player won't be able to move in the first few ticks, which oftentimes desyncs the TAS immediately. So record like 7 ticks at the start where you not move to account for that. Will be fixed sometime...
/saveTAS <filename>: Stores the current inputs under the given filename in .minecraft/saves/tasfiles.
/loadTAS <filename>: Replaces the current inputs with the inputs from the file with the given filename.
/folder <savestate|tasfiles> Opens the savestate or tasfile folder on your disk

Hotkeys

F8 Toggles between tickrate 0 and other tickrates. Pauses the game on both client and server side.
F9 You can advance one tick at a time while you are in tickrate 0.
J Makes a savestate under .minecraft/saves/savestates. If you are recording, a savestate of the recording will be made under .minecraft/saves/tasfiles/savestates
K Loads the savestate. It will also work during recording or playback.
F6 Customize the HUD. Leftclick and drag to change the position, Rightclick to add a background
F10 Aborts a playback