(Link to video)
Submission Text Full Submission Page
Undertale is an RPG video game created by American indie developer Toby Fox in 2015.
The player controls a child who has fallen into the Underground: a large, secluded region under the surface of the Earth, separated by a magic barrier. The player meets various monsters during the journey back to the surface. Some monsters might engage the player in a fight. The combat system involves the player navigating through mini-bullet hell attacks by the opponent. They can opt to pacify or subdue monsters in order to spare them instead of killing them. These choices affect the game, with the dialogue, characters, and story changing based on outcomes.
There are 3 main endings: Neutral, True Pacifist, and Genocide. This TAS achieves none of those endings, instead going for the Hard Mode joke ending.

Game objectives

  • Emulator used: libTAS 1.4.2.
  • Plays on version 1.001 Linux.
  • Plays on the hardest difficulty.
  • Achieves the Hard Mode "ending."

Tech

Menu buffering is a movement technique where the player opens the menu and presses an arrow key on the same frame. This type of movement does not count as a step for random encounters and is not considered movement by blue lasers. Although menu buffering causes the player to move at half speed (alternating between the menu buffer and closing the menu), this technique can save time in certain circumstances where additional steps are not desirable.

Text Storage

Text storage (also called overflow) is a type of glitch where the player regains movement while text is on the screen. This can be useful in different ways, as some text can be used to set global.interact to 0 upon closing the textbox. Sometimes text storage saves time simply by being able to mash the text while moving. When text storage is used to wrong warp, this is known as an overflow wrong warp (OWW).

Wrong Warps

In Undertale speedrunning, wrong warping refers to entering a room and being placed at the default location in that room rather than the door the player entered from. When the player touches a room transition, the variable global.interact is normally set to 3. Then once the player reaches the next room, the game checks if global.interact is set to 3 and if it is, the game runs the code that places the player at the appropriate door marker. However, if global.interact is not 3, the player is not moved from the default location in the room. This default location is manually assigned per room by the game developer and is often closer to the middle of the room than the door marker is. There are several methods of triggering a wrong warp, all of which achieve the same result: setting global.interact to 0 (the value for full player control) while transitioning to the next room. This TAS does exactly one (1) wrong warp.

RNG Manipulation

Undertale's RNG is determined by a seed that advances each time RNG is called. By calling RNG a different number of times, different outcomes can be achieved. Text calls RNG twice per character per frame and so changing how many frames text is displayed is the most common method of RNG manipulation. RNG is manipulated for various reasons such as getting particular attacks and determining which step count random encounters will occur on. One thing to note is that the function randomize() is called upon loading into the game and this function sets the RNG seed based on the system time. However, after this initial seed, RNG is no longer affected by system time until the save file is reloaded or the game is restarted.

Comments

For the most part, this follows the same route as the Neutral TAS. There are 2 main differences however
  • You cannot flee a battle on the first turn. For this reason, encounters must be avoided at all costs (the Neutral TAS manips for a spareable encounter, which is not possible in this mode).
  • Toriel does much more damage, meaning different damage routing for her battle.

Other comments

  • There's a small timesave in the triple rock room by using the phone for text storage instead of the rock text.
  • Yes I copied the tech section from the Neutral TAS, it's all the same anyway.

Samsara: Oh good, I'll have something to watch while I'm waiting for the next frame of #5076: Masterjun's SNES Super Mario World "ends input early" in 01:33.26!!!
Samsara: Resetting to New for Info Teddy to pick up!
Info Teddy: Thanks sis!
Info Teddy: Replaced the movie file with one that has a corrected movie length and also advances until the last Flowey dialogue.
Info Teddy: So, this run goes for an ending that isn't one of the major three (Genocide, Neutral, and True Pacifist), which means it isn't Standard. Unfortunately, this ending doesn't seem to have much going for it besides being a joke, and doesn't have a chance to stand out from the other three routes because it immediately stops after the first section of the game. Audience votes were also a bit mixed. Fortunately, this is what Playground was meant for, and since this has a well-defined goal that's the best place it can go.

TASVideoAgent
They/Them
Experienced Forum User, Moderator
Joined: 8/3/2004
Posts: 12264
Location: 127.0.0.1
This topic is for the purpose of discussing #7419: IAmAnIssue's Linux Undertale "hard mode" in 07:54.20
CoolHandMike
He/Him
Editor, Experienced Forum User, Player (210)
Joined: 3/9/2019
Posts: 409
Woah what is wrong with the time and framerate?! https://puu.sh/ISgBh/4f568592ff.png #7419: IAmAnIssue's Linux Undertale "any%" in 10675199:02:48:05.47 Frame Rate 5.390653196207275E-16 Frame Count 9944
discord: CoolHandMike#0352
Experienced Forum User
Joined: 9/8/2021
Posts: 4
CoolHandMike wrote:
Woah what is wrong with the time and framerate?! https://puu.sh/ISgBh/4f568592ff.png #7419: IAmAnIssue's Linux Undertale "any%" in 10675199:02:48:05.47 Frame Rate 5.390653196207275E-16 Frame Count 9944
Don't question it
Editor, Experienced Forum User, Skilled player (1794)
Joined: 6/15/2005
Posts: 3133
Glitchy TAS of 2013Gameboy TAS of 2013PSX TASer of 2010
Curiously, the time given here appears to be the largest time that tasvideos can display. It comes out to be 922337203685.47 seconds, or 2^63-1 ten-millionths of a second. (2^63-1 is the largest possible signed 64-bit integer.)
Masterjun
He/Him
Experienced Forum User, Site Developer, Skilled player (1809)
Joined: 10/12/2010
Posts: 1152
Location: Germany
Exotic platforms TAS of 2020Speedy TAS of 2018PC TAS of 2018Glitchy TAS of 2015TASer of 2014SNES TASer of 2014TAS of 2014SNES TAS of 2014Funny TAS of 2014Glitchy TAS of 2014TASer of 2013SNES TASer of 2013NES TAS of 2013SNES TAS of 2012Funny TAS of 2012
If the site detects nonsense it will default to TimeSpan.MaxValue. There is even an intentionally designed test for exactly this value here.
Warning: Might glitch to credits I will finish this ACE soon as possible (or will I?)
Experienced Forum User, Skilled player (1499)
Joined: 7/1/2013
Posts: 418
Arcade TASer of 2017Arcade TAS of 2016Exotic platforms TASer of 2014Exotic platforms TAS of 2014
FractalFusion wrote:
It comes out to be 922337203685.47 seconds, or 2^63-1 ten-millionths of a second.
That's a lot of seconds!
Experienced Forum User
Joined: 9/8/2021
Posts: 4
Ok so, I'm going to give an actual answer to the timing thing. This movie was made using variable framerate on a slightly older version of libTAS. That particular version has a problem with not saving the movie time until you frame advance past the end of the movie - which I didn't do. In that case, libTAS defaults to -1. You can see the result of that here.
Info Teddy
She/Her
Experienced Forum User, Judge, Moderator, Player (109)
Joined: 7/15/2021
Posts: 59
Location: United States
First off, we don't use the "any%" branch label, due to its ambiguity (this RTA run calls itself "any%" too, but it goes for the neutral ending). The more appropriate branch label for this run is probably going to be "hard mode". Anyways, this syncs fine and dumps fine. Here's the movie file with the length corrected. Note that the best way to run this game is to use the Steam runtime, i.e. launch libTAS with ~/.steam/bin/steam-runtime/run.sh libTAS. Make sure to select the old_version_101 Steam beta. I would also like to note that the submitted movie file ends on Frisk slashing Toriel, and stops at her saying "You..." whereas the temporary encode advances past that dialogue and gets to the "UNDERTALE [HARD MODE] Coming... Maybe, Eh. don't count on it." screen. The movie file should probably be updated to get to that screen. The movie seems optimal, but I can't check because for whatever reason (some weird GameMaker jank, probably), Undertale wants the XFree86-VidModeExtension and will refuse to launch without it, so I can't launch it inside my Xephyr X server, so I can't use savestates. Speaking of awful GameMaker jankiness, this game is horrible in a tiling window manager. By default it launches maximized, but I can't blacklist it in my i3 config because its class and instance are completely blank, and i3 doesn't seem to be able to support blacklisting blank names (it results in a syntax error), and libTAS modifies its title so I can't use title either!
Samsara
She/They
Experienced Forum User, Senior Judge, Skilled player (1687)
Joined: 11/13/2006
Posts: 2502
Location: Northern California
Exotic platforms TAS of 2020Sega TAS of 2016
Info Teddy wrote:
I would also like to note that the submitted movie file ends on Frisk slashing Toriel, and stops at her saying "You..." whereas the temporary encode advances past that dialogue and gets to the "UNDERTALE [HARD MODE] Coming... Maybe, Eh. don't count on it." screen. The movie file should probably be updated to get to that screen.
This makes sense to me as well. I'll hold on replacing the file and making my judgement until a new fixed file is provided.
TASvideos Senior Judge <3 Ask me anything! Twitter
warmCabin wrote:
You shouldn't need a degree in computer science to get into this hobby.
Experienced Forum User
Joined: 9/8/2021
Posts: 4
(New ltm files were sent via discord since for some reason I can't make userfiles)