Citadel of Celestial Cascades is a Touhou themed puzzle platformer where the player takes control of Youmu and utilises her varied moveset to kill every ghost enemy on each level, thus unlocking the exit. Each level features a collectible which while initially seeming like a bonus challenge for completionists, is actually required to reach the credits.
Pretty much every one of Youmu's abilities has some interesting quirks to it, all of which are used to complete the game as fast as possible.
Game objectives
- Aims for fastest completion
Sync instructions
- OS: Ubuntu 20.04.2 LTS
- Game must be ran in a desktop environment, as outlined in the discussion thread
- Unsure about this given the discussion thread but, the command-line option
--audio-driver ALSA
may be necessary for the encode to have audio
- Virtual screen resolution may be altered freely
Mechanics & Exploits Used
Jump: The game features fairly standard jumping mechanics - the longer you hold the key, the higher Youmu will go. The interesting thing is buffering a jump with horizontal speed will maintain that speed. This will be referred to as bunnyhopping from now on.
Walljump: Youmu can jump off walls! Doing so will give her the highest horizontal speed possible in the game, so it will be done as much as possible, and then that speed will be preserved with bunnyhops.
Sword slash: Youmu can swing her sword! This basic attack has 4 active frames where it can hit enemies or boxes, killing the former and pushing the latter. As all attacks, it can be aimed in one of 8 directions. Normally there is a bit of a cooldown between swings, but successfully killing an enemy allows Youmu to skip said cooldown and swing again right away.
Dash: After killing an enemy, as long as Youmu remains midair or on a wall, I can press jump again to dash in one of eight directions. The direction of the dash can be changed mid-dash, making it quite versatile for all kinds of platforming. Dashing horizontally is faster than walking, but slower than walljumping, so it is rarely used for purely horizontal traversal. Dashing down is also slower than simply falling any time Youmu has enough room to accelerate downwards. The dash does however interrupt the freeze from clearing all enemies on the screen and opening the exit, so it will often be used to save a couple frames by continuing to move. Dashes can be refreshed by killing another enemy after dashing, until there are no more enemies left, however the dash must be used between kills as only one can be held at a time.
Bullet: After killing two consecutive enemies without touching the floor Youmu will gain a bullet which she can fire at any time in one of the eight directions. This bullet deals the same amount of damage as a sword swing, but has the advantage of being a ranged attack. Firing a bullet will freeze the game for a couple frames, after which the projectile is fired. Killing a third enemy will refresh the bullet as well as the dash, and any further kills will do the same. Same as the dash, only one bullet can be held at a time. By using the bullet it is possible to kill two enemies on the same frame, stacking the freeze from killing them and saving a handful of frames. Doing this on the last two enemies of the level will softlock the level, but as long as the last remaining enemy is a solo kill, kills can be doubled up for timesave.
Pause: While it might seem counter intuitive, pausing the game can in fact help with going fast. The usual cooldown from slashing the sword without killing an enemy runs during the pause menu, meaning I can wait out the cooldown without having Youmu move an inch, and slash again right away in the same spot. This comes in especially handy in encounters with shielded enemies. Additionally, 1-frame pauses are utilised to release jump without letting Youmu move, allowing for some otherwise impossible walljumps and wallslides.
Wallslide: This is a glitch resulting from buffering a walljump input on the first possible frame. I'm not sure the exact conditions under which the glitch occurs, however I believe it to have something to do with Youmu's horizontal position aligning just right with the wall that's being slid on. This means sometimes touching another wall to set up the correct align for a slide is required. Wallslides are useful for gaining height in places where it wasn't intended, or just doing so quicker than one would by simply jumping between two walls.
Box Redirect: Slashing a box normally sends it in the direction where the attack was aimed. Hitting the box on any frame of the attack that is not the first one allows me to change the direction Youmu is aiming and with it also the direction the box will fly.
Time Control: Pausing the game has the effect of stopping everything but Youmu for the first frame of the pause screen. Pressing pause and confirm on the same frame performs a 0-frame pause, effectively letting the game continue at seemingly full speed, while all objects other than Youmu get stopped for 1 frame. This is used in a couple levels to slow down falling boxes to perform otherwise impossible jumps off them midair.
Start
There is no menu delay so the intro cutscene can be skipped and the first level chosen in just a couple frames.
1
Fairly basic level. Use horizontal dashes and don't bonk into walls.
2
Downwards dash to cancel all upwards momentum from the jump. Dashing into the exit trigger is still faster than just standing on top of it due to the dash cancelling the 'level clear' freeze.
3
As is the case with a lot of the early levels, not much to comment on here. Simply optimised gameplay.
4
First time using walljumps as a way to gain horizontal speed, though due to the level geometry it's not possible to use bunnyhopping to my advantage.
5
First instance of wallslides being used to speed up upwards movement.
6
Wallslide into walljump into bunnyhop all on 1x1 tiles to get directly to the collectible and be able to kill the enemy on the way.
7
More wallslides to grab the collectible in an unintended way, then a pause-assisted walljump to continue with the level.
8-11
Not much to say here.
12
The ability to redirect the dash at any point allows me to manipulate Youmu's h position in such a way that allows a slide on the upcoming wall. After which comes a long chain of bunnyhops in the low ceiling corridor to preserve walljump speed.
13-16
Nothing new here.
17
First level to introduce eye blocks, which just kill Youmu when touched. The hitboxes are fairly forgiving and that fact is abused to its maximum potential.
18-20
Nothing new here.
21
First and only instance of killing two enemies on the same frame by using a bullet and a sword slash.
22-26
Nothing new.
27
First instance of a moving enemy. These will move towards Youmu when they have line of sight. This generally does not impact much of the routing for the levels though, as any puzzles that would require manipulating them can be skipped.
28-29
Nothing new.
30
Another walljump into low ceiling bunnyhops.
31
First occurrence of a box. This one is easily skipped with a wallslide.
32
Second instance of a pause-assisted walljump, used to skip moving the box again and doing some slower platforming.
33
Just optimised platforming.
34
Attaching to the side of a box kills its vertical speed, allowing me to put the box on Youmu's head and be able to push it into a good position right away. This level also features the first instance of Time Control, allowing me to slow the box as it's flying towards the exit. This lets Youmu catch up to the box midair and jump off to grab the collectible a bit earlier than normal.
35
Wallslides allow me to skip the entire box puzzle in this level.
36
Tough level to optimise! I tried different combinations of up and diagonal slashes, as well as Time Control but couldn't figure out a more optimal chain.
37
The entire puzzle aspect of this level is skipped thanks to one conveniently exposed corner.
38
Couldn't figure out a way to get down to the goal without jumping all the way to the left, since all dashes need to be used to get to the collectible.
39
Walljump speed is fast so bnuuyhopping is preferred to keeping dashes.
40
Mild flashing lights warning. First instance of pausing the game to wait out sword swing cooldown. Simplified a lot of the routing for these levels and made them a lot faster.
41
Another puzzle easily skipped, this one didn't even require any glitches!
42
Doubling up on sword slash and bullet to instantly kill a 1 shield enemy, allowing me to forego the pause abuse.
43-44
Nothing new.
45
Another usage of Time Control to slow down the box after pushing it up-right. This allows me to walljump off it midair and jump over the eye blocks. Normally this section requires baiting the eye enemy over to use it for a dash, which takes approximately 5 seconds longer than using this exploit.
46
First usage of a box redirect, to pull a box along with Youmu as she falls.
47
Bonking the box from below allows me to slow down its fall and walljump off it.
48
Second use of Time Control, this time to slow down the falling box, allowing me to jump off it and not die to the eye blocks. It's also the only way I found to quickly collect the item.
49
Nothing new.
50
Going into this level from the level select seems to get the collectible countdown to start quicker. I didn't do extensive testing as pausing during a level transition doesn't lose time, so it might be unnecessary, just didn't feel like testing it. Killing the two overlapping enemies with one slash crashed the game, so I'm forced to kill them separately instead. As with any normal level, every enemy must be killed for the level to end, so killing the extra ad is required after slashing the boss enemy. As such last meaningful input happens when the slash comes out.
Special thanks
- -7 for encouraging me to optimise this TAS and submit it here
feos: Claiming for judging.
feos: libTAS 1.4.3 has just been released and this movie works great on it. The movie itself is great too, so accepting. I fixed the movie to point to that version of libTAS too.
The ending music is the main tune of the game just slowed down to about 23%, and it's not played from the start, and it's barely possible to recognize what it's playing without resampling it back to normal speed, and hard to spot loop end, so I'm not sure it really matters where the encode should end.
fsvgm777: Processing (got an AVI dump from feos).