(Link to video)
1001 Spikes is a platform game released in 2014, consisting of a series of levels with various traps and hazards. This TAS completes the whole game (both Ukampa and Antartica worlds) with the main protagonist Aban Hawkins.

Game objectives

  • Emulator used: libTAS 1.3.4
  • Genre: Platform

Framerate settings

The game runs at 60 fps, but if we set the framerate setting of libTAS to 60 fps, it will cause perdiodic lag frames. From what I understand, the game runs a busy loop at the end of each frame to wait for the correct frame length, but because libTAS advances time at exactly 1/60 second, the game often don't consider that enough time has passed (maybe because of large vs. strict comparison operator). Thus, libTAS failsafe mechanism operates to prevent the softlock, advancing the time slightly. Eventually, all those extra times add up to a full frame time, and libTAS adds an extra lag frame to compensate.
The function that queries time in the busy loop is clock_gettime(), which has a precision of a nanosecond. So, to make sure that the game always validate the frame length, we choose a frame length by rounding up the theoretical one to the next nanosecond, which leads to a frame length of 16666667 nanoseconds. Thus, the framerate setting in libTAS for this movie is 1000000000/16666667, or 59.9999988 fps. This fixes the issue, while minimizing the discrepancy of the movie length compared to the theoretical one. One last thing: libTAS 1.3.4 GUI does not allow such high numbers for the framerate, but it is only a limitation of the GUI, not the underlying code. Thus, the framerate will be displayed incorrectly but is correct inside the movie and is handled correctly by the game.

Basic gameplay

The move set of Aban is simple, he has two jump buttons of different height (one and two tiles height), without any gradation possible. He can also throw a knife, with a maximum of three on-screen. When close to an enemy, pressing forward+attack triggers a stab attack, with a high speed but a long recovery. Jumping or stabbing does not save time on flat ground over walking.

Stab clipping

When stabbing, Aban's hitbox is slightly moved forward, so it's back enter inside a wall. If he turns around at that point, the game will push him toward the closest free space, which can be downward, upward or to the side. When performing a high jump and a stab against a three-tiles wall, we have just enough height so that we can clip upward, resulting in doing a three-tile jump. The major limitation of this tech is that we need an enemy nearby to perform the stab. Also, at the exact frame when we clip upward, Aban is considered on the ground so we can jump immediately, or use coyote time to jump a few frames later.

Fast menu

After a level is completed, it is faster to exit to the map, then select the next stage.

Randomness manipulation

There are very few random elements in this game, but some of them do matter for the speedrun:
  • The flame throwers in level 2-5 aim at a random angle. One of them had to be manipulated to be able to jump under the flames
  • The fireballs in level 5-1 have a random angle. The last ones needed to be manipulated to take the door as quickly as possible
  • After the Ukampa boss and the jewel sequence, the right path opens at a random time. We needed the block to break as soon as possible
The only two ways of manipulating the randomness is to change the seed (set using the initial system time), or to break blocks that spawn pieces in random directions.

Thanks

Thanks twyn and berumondo for their advices and suggestions!

feos: I compared this run closely to its human speedrun counterpart. While in some areas their times are really close or even match, this is only due to obstacles and platforms moving on a set timer, or no maneuvers to execute in a level. Otherwise in every level this movie is superior in optimization and also has tricks not seen in a human run, so in general it's never slower, and most of the time quite a bit faster.
Having to create a text file (only containing this game's Steam ID which doesn't change) to be able to TAS this game is a justified exception from this rule: "no renaming/copying/deleting/replacing/editing files that affect game-play. However editing environment settings or utilizing standard third party tools in order to get a game to load is allowed as long as the game runs as it's supposed to."
But the movie is quite boring due to monotonous gameplay, having only single player, and timed patterns that slow you down all the time. And it got no feedback. This means all the routing choices made in this run ought to result in the fastest possible gameplay to serve as a Fastestcompletion category. Since using more characters or just other characters requires unlocking them, and since you can't switch to them mid-game, the character use is optimal here. Accepting to Vault.
fsvgm777: Processing.

TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 14875
Location: 127.0.0.1
This topic is for the purpose of discussing #6404: keylie's Linux 1001 Spikes in 31:34.15
keylie
He/Him
Editor, Emulator Coder, Expert player (2828)
Joined: 3/17/2013
Posts: 391
Sorry for another controversial submission. I'm aware that it breaks the rule for tampering with the files the game is composed of by requesting to add a file in the game folder. It is the only solution I could come up with (the game being only distributed on Steam), and also it is not related to the actual game code, but to Steam's library.
fsvgm777
She/Her
Senior Publisher, Player (221)
Joined: 5/28/2009
Posts: 1185
Location: Luxembourg
I noticed that you start from a save file in your YouTube encode; however, the TAS syncs just fine if no saves were present beforehand. Regarding adding steam_appid.txt: There are several games on Steam that already come with said text file (containing their own app ID), so I believe it should be fine to manually create such a file containing the game's app ID, especially if you need it to get the game to run in libTAS. The actual gameplay part is unaffected. I'd like to hear other people's opinions on it, though. Side note: The Steam client can be run in offline mode in order to not mess with the total playtime (especially if one wants to dump the TAS to AVI/MKV/whatever or just wants to watch it in libTAS).
Steam Community page - Cohost profile Oh, I'm just a concerned observer.
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11268
Location: RU
Is that ID the same for every installation/user? EDIT: <fsvgm777> feos: Yes. <fsvgm777> It's the ID from the Steam page. <fsvgm777> https://store.steampowered.com/app/260790/1001_Spikes/ <fsvgm777> In this game's case: 260790 <fsvgm777> (and I've tested it myself, so I can confirm it) <feos> then it should be fine
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Editor, Skilled player (1938)
Joined: 6/15/2005
Posts: 3246
I've heard of this game before (mainly from Youtubers willing to suffer through it). Some level solutions are pretty interesting but for a TAS it's no problem. I noticed that this game is on the libTAS non-compatibility list, yet you were able to run this in libTAS. Even though the only version available is the Steam version, you were able to add a file to trick it into not connecting with Steam. Do you know if it is possible to use this trick to run other Steam games in libTAS?
keylie
He/Him
Editor, Emulator Coder, Expert player (2828)
Joined: 3/17/2013
Posts: 391
There are a few Steam games that can be made DRM-free by adding this file, as described in this list, so it will most certainly help them to be compatible with libTAS.
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11268
Location: RU
Do such platforms and such obstacles always have fixed per-level pattern and provide no way to manipulate them? They make some rooms last in a TAS almost as long as in the RTA. Is horizontal speed constant, with no acceleration? You bump lots of corners while going around them. What about other characters mentioned here? Which of them are available from the start? How are they unlocked, if applicable? This movie happens to be quite boring, so if some other character can beat the game faster, it will have to be implemented to be acceptable.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
keylie
He/Him
Editor, Emulator Coder, Expert player (2828)
Joined: 3/17/2013
Posts: 391
Everything in this game has fixed patterns, except what mentioned in the movie description. Horizontal speed is constant with no acceleration indeed. Characters are unlocked by completing levels, taking skulls (extra collectibles), and buying them in-game money given with extra modes. When you unlock a character, you cannot switch during a run, you have to start a new one from the beginning. Indeed, several levels have a time matching the best unassisted runs, due to cycles. My initial objective was to work on a 4-players TAS actually, and this one serves as a practice run (even if it's optimized of course). Here is a WIP to show how it would look: Link to video
Site Admin, Skilled player (1236)
Joined: 4/17/2010
Posts: 11268
Location: RU
Woah this looks awesome, way better than this movie!
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Post subject: Movie published
TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 14875
Location: 127.0.0.1
This movie has been published. The posts before this message apply to the submission, and posts after this message apply to the published movie. ---- [3976] Linux 1001 Spikes "1 player" by keylie in 31:34.15
Player (236)
Joined: 3/15/2018
Posts: 229
Location: United States
You should continue that 4 player movie! Is your plan to have player 1 make a beeline for the exit, player 2 make a beeline for the key, player 3 make a beeline for the bonus skull thingy, player 4...shenanigans? Or something like that?
keylie
He/Him
Editor, Emulator Coder, Expert player (2828)
Joined: 3/17/2013
Posts: 391
It really depends on the stage. You generally want 2 players one over the other to access to the stab attack. There are also two new tricks not shown in the above WIP, including one that change the route in most stages: climbing over the stage offscreen using knife climbing, and fast recovery by mashing buttons. The run is become even more technical and difficult to optimize because of the later trick, so I'm currently taking a break.