Submission #9924: CasualPokePlayer's Linux Undertale 10th Anniversary in 01:57.133

Linux
baseline
(Submitted: game.unx )
libTAS 1.4.6
3514
30
2634
PowerOn
a3fcc908d071b5641ca2fa7dbcc20a60
Reproduced on Ubuntu 24.04.1 LTS

Follow the instructions in the submission notes exactly. Any missed step will cause errors.

If you don't have libcrypto.1.0.0, follow these steps
https://unix.stackexchange.com/questions/688268/package-libssl1-0-0-has-no-installation-candidate

For openal:
sudo apt install libopenal-dev
			
Submitted by CasualPokePlayer on 9/27/2025 5:52 AM
Submission Comments
Undertale's 10th Anniversary recently happened, and with it brought (among other things) a webgame with 2 battles: https://ut10-battle.undertale.com/

Porting To Linux

This is actually just a GameMaker game (and as you can expect, seems to be derived from Undertale's codebase, with some vestigal code able to be seen in decompilation). The game's game.unx file can just be downloaded at https://ut10-battle.undertale.com/game.unx
For TASing of course, a Linux runner is needed to use within libTAS. And for whatever reason, this game was not exported with something sensible like the latest GameMaker LTS (like Deltarune), or even the latest GameMaker monthly, it appears to be exported on a beta GameMaker version (and stable version runners will not work here). Luckily, this is easy to obtain here on GameMaker's website: https://gms.yoyogames.com/GameMaker-Installer-2024.1400.0.892.exe
After installing the GameMaker IDE, simply log in with a free account, create a blank game, then set the target to Ubuntu. This will prompt you to download the Ubuntu runtime, which will end up being placed in %PROGRAMDATA%\GameMakerStudio2-Beta\Cache\runtimes\runtime-2024.1400.0.879\linux. This folder will have runner.zip which contains the runner.
Create an assets folder next to the runner executable. Place in the game.unx file in this folder, along with a blank options.ini file (this ini file needs to be present, otherwise the runner crashes for whatever reason).

The Goal

This "game" is very short as it's literally just 2 Undertale battles. It's a bit hard to even define any kind of "end state" here, since winning or losing will give you an option to go back to the main menu.
However, the game appears to have it so "losing" end states will offer an option to "Play Again" immediately along with a "Return to Menu" option. "Winning" the battle will simply only offer the "Return to Menu" option (which you can proceed to do the fight again anyways from the main menu). As such, winning seems like an obvious "goal" here.
For the Mr. Sunshine & Abberant battle, there's only 4 possible "winning" end states:
  1. Spare all foes
  2. Spare Mr. Sunshine and kill Abberant
  3. Spare Abberant and kill Mr. Sunshine
  4. Kill all foes
Fleeing or dying count as "losing" end states. Out of all these options, sparing all foes is the fastest. All non-Check ACT options will bring their respective foe to a sparable state, so the most obvious route is 2 ACTs then Spare to end the battle (as opposed to trying to kill any of them which requires many more turns).
Additionally, sparing all foes brings in a "Happy 10th Anniversary to UNDERTALE!" message, while killing any foe gives snide remarks, so sparing all foes can be considered the "best ending" to the fight. Due to these reasons, only sparing all foes is done for this battle (and because I don't want to bother TASing the same fight 4 times in a row).
For Sans, there's only 1 possible "winning" end state: survive all turns before Sans dozes off, without attempting to kill Sans. If you attempt to kill Sans, he will doze off and you lose the fight.

The Actual TAS

The actual TAS isn't really that interesting. The 2 fights don't have much to offer in terms of variety (unless maybe if all 4 win states of Mr. Sunshine & Abberant are done, which this TAS declines to do), and optimization mostly just consists of optimal menuing and dialogue clearing.
Mr. Sunshine & Abberant's fight does offer some very slight optimization: performing the "Skeptic" ACT is slightly faster than the other ACTs as the resulting dialogue can be closed sooner.
Sans has effectively no real variation possible. Attempting to Spare is the fastest way to advance to the next turn (ACTing with Check or FIGHTing without actually attempting a hit both work, but are obviously much slower), and the turns are all constant timing (so it's closer to TASing an autoscroller if anything). The most that can really be done is having TAS fun with platforming.

Audio Dumping

Note that newer GameMaker versions changed up their audio handling, so they will attempt to use PulseAudio for audio output. This is bad, as libTAS can't dump PulseAudio audio. The latest libTAS interim builds will block GameMaker from doing this, forcing it to fallback on an audio API libTAS actually supports. For libTAS 1.4.6 however, you'd need to do PULSE_SERVER= libTAS when launching libTAS to prevent GameMaker from being able to use PulseAudio.

Platform

The platform listed here is "Linux" but that's just because this is libTAS, in reality this is a webgame, so perhaps some new platform ID needs to be added for proper publication.

eien86: Claiming for judging.

eien86: Help is needed to find source of desync

eien86: A fun little short game celebrating Undertale's 10th anniversary. Here the author solves the two battles as fast as possible.
Accepting to Standard
Last Edited by eien86 19 days ago
Page History Latest diff List referrers Change Log