FractalFusion's Azure Dreams in 10:32. My quest to TAS a random dungeon RPG led me here.
Thanks to Aktan for an encode using Eternal SPU. It took him a while to resync due to the game itself. You can download MP4 or MKV, or watch online.
The TAS was made in PCSX rerecording v0.0.7, but will work in v0.0.9 . For sound plugin, Pete's MIDAS Audio Driver 1.7 is the best known one that syncs, as TAS Sound Plugin doesn't work well (although it syncs). It is also recommended to play it right away, without opening a ROM beforehand, though I haven't run into desyncs lately.
Also note that fast-forwarding may cause the names of the characters to be messed up, and other graphical glitches.

Aims

  • Best ending
  • Aims for fastest time
  • Abuses programming errors in the game
  • Manipulates luck

Programming errors abused

Only one. On floor 31, rarely but possibly Beldo doesn't show up (and there are no enemies on that floor).

About the game and the run

Azure Dreams is a random dungeon RPG (roguelike) where the floors are randomly generated. You control the main character, Koh, who trains monsters while obtaining riches while in the Monster Tower, and builds buildings and gets girlfriends while in the town of Monsbaiya. The ultimate goal though is to reach the top of Monster Tower, the 40th floor.
Due to the way the game works, it is extremely difficult (without cheating) to reach the top of Monster Tower on the first try unassisted. Extreme luck would be required, as monsters on the high floors kill an underleveled adventurer (and his trained but underleveled monsters) in one hit. Note that it's never game over when killed, you just lose all items you brought in the tower and have to start over from the first floor, if you want to try again.
Of course, with TAS, anything goes. Not only does this adventurer not pick up any items (except at the plot-driven ending), he sends his starter monster (Kewne) home right on the first floor, then scales the tower to the 40th floor armed with nothing but a Pita Fruit. Oh, and there is a way to get around the "final boss". It's required, actually.
So, how does such an adventurer survive, when all enemies on floors 15 and above not named "Pulunpa" kill him in one hit? In a TAS, apparently by manipulating the location of the elevator to the next floor so it is close by. But that is not all.
Every stage has trap tiles, whether it is relatively harmless like Upheaval or Reversal, or ridiculously deadly like Monster Den (this is very rare, fortunately). The traps are randomly scattered and only occur in rooms rather than passageways, although occasionally a trap room is designated which contains about a dozen traps.
One type of trap, Go Up, sends Koh or any enemy to the floor above; this is a useful substitute for the elevator, and is faster by about 100 frames. Koh can also run very fast (except when a non-sleeping enemy is nearby), so even if the Go Up trap is not close, he can run to it, and it may be faster than manipulating the elevator. Of course, you don't see traps before you run into them, so how do you know where they are?
Using memory watch, of course. I found character coordinates, elevator coordinates, trap coordinates, and trap IDs (traps are dynamically allocated but are always seeded into one of about twelve slots, maybe more, all at increments of 24). Go Up, the important one, has a trap ID of 184.
So to manipulate, I use waiting frames, and check if it places a Go Up trap (preferred) nearby, or the elevator nearby. Since there are many addresses involved, I only check the trap IDs, and see if any of them are 184 before checking trap coordinates. Note that if the current level has Go Up traps, the trap ID of 184 may remain; I can weed these out by seeing that the trap coordinates don't change. This of course assuming that the game is not evil enough to place Go Up traps in the same spot on two consecutive floors.
Of course manipulating the elevator or Go Up trap close by is of no use if there happens to be a non-sleeping enemy in the way.

Trap tile IDs

Trap tile IDTrap tileWhat it does
0Monster DenHuge monster ambush, cannot be detected
8CrackLowers the floor around the target
16RustPermanently lowers equipment stats by 1, except if already at 1, or rust-proof
36BumpWakes up sleeping enemies in the room
44UpheavalRaises the floor around the target
48WarpWarps target to a different spot on the same floor
60FrogTurns target into a frog with no offensive capabilities
84PrisonCauses paralysis
144SealPrevents use of magic
152PoisonCauses poison
156BombDoes damage in a cross-shaped region and destroys any items on it
160ReversalTurns the screen upside down
176BlinderCauses blindness
184Go UpSends target to the floor above
192SlamDoes damage
200SleepCauses sleep
224ChaosCauses confusion, messes up controls
248SlowCauses target to move at half speed

Important memory addresses

AddressWhat it represents
82EA4Player X
82EA5Player Y
E3CDAElevator X
E3CDCElevator Y
E39CE+0x18*nTrap n X
E39CF+0x18*nTrap n Y
E39D0+0x18*nTrap n ID

Run progress

  • Thursday, May 14, 2009 - Verified that Azure Dreams can be beaten on the first trip. Also discovered that Go Up trap is useful.
  • May 15 - Found important memory addresses, including trap ID and location.
  • May 16 - started run; into first few dialogs
  • May 17 - Entered tower and reached floor 10
  • May 18 - Reached floor 20
  • May 19 - Reached floor 26
  • May 20 - Reached floor 35
  • May 21 - Completed game (almost)
  • May 22 - Fixed desync and completed game

Run notes

Any waiting is due to luck manipulation. Koh cannot run when nearby a non-sleeping enemy. Koh has to take extra or walking steps sometimes to trigger the Go Up trap, since traps do not always work.
  • After leaving the house, I use the view rotation to put Koh on a straight line to the destination.
  • Floor 1: First trip only, this is a tutorial floor. I send Kewne home. There are two reasons for this. One is that otherwise he frequently stops you to talk during this floor. The other is that on later floors it makes it easier for enemies to attack him, thus slowing you down. The weird path I take is to manipulate the Pulunpa as far away as possible as to avoid being unable to run due to a nearby enemy.
  • Floor 7: The slight pause is due to the enemy waking up. I run over a Seal trap near the Go Up trap.
  • Floor 13: I run over a Rust trap on the way to the Go Up trap.
  • Floor 20: The route was to let some monsters go by first. I was quite unlucky manipulating this floor.
  • Floor 22: An enemy, who would otherwise kill Koh, falls into a Blinder trap. :D
  • Floor 23: Another close call here.
  • Floor 28: There was actually another Go Up trap nearby. That makes two Go Up traps and the elevator near the starting point, something very rare.
  • Floor 31: Very rarely Beldo doesn't show up and there are no enemies on the floor. This is one of those times; the next one didn't show up for about 90 frames.
  • Floor 32: Who needs elevator when you have Go Up trap?
  • Floor 38: As a puzzle, find the hidden elevator.
  • Floor 40: The ending makes no sense, but whatever. I chose the "good" ending here (Kewne stays with you, and appears in the credits) even though it is about 2 seconds slower.

Thanks

Thanks to mz for giving us rerecording for PSX. Thanks also to a Pokémon Mystery Dungeon Red review (!) for introducing me to this game.

adelikat: Accepting due to positive viewer response. I'll handle the publication.


Post subject: Movie published
TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15630
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. ---- [1485] PSX Azure Dreams "best ending" by FractalFusion in 10:31.73
Joined: 1/26/2009
Posts: 558
Location: Canada - Québec
Aktan wrote:
BadPotato wrote:
In fact, he only thing that I'm worried about is why 30fps for the non-streaming videos!? mine was 60fps(with blur effect)....
What do you mean 30 fps? All the links I posted goes up to 60 fps.
My Mplayer program just keep running at 30fps...
mplayer log wrote:
$ ./mplayer.exe ~/azuredreams-tas-fractalfusion.mkv MPlayer Sherpya-SVN-r30369-4.2.5 (C) 2000-2009 MPlayer Team getch2: 6 can't get number of input events [disabling console input] Playing azuredreams-tas-fractalfusion.mkv. [mkv] Track ID 1: video (V_MPEG4/ISO/AVC), -vid 0 [mkv] Track ID 2: audio (A_AAC), -aid 0, -alang und [mkv] Will play video track 1. Matroska file format detected. VIDEO: [avc1] 320x240 24bpp 30.000 fps 0.0 kbps ( 0.0 kbyte/s) ========================================================================== Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264) ========================================================================== ========================================================================== Opening audio decoder: [faad] AAC (MPEG2/4 Advanced Audio Coding) FAAD: compressed input bitrate missing, assuming 128kbit/s! AUDIO: 44100 Hz, 2 ch, s16le, 128.0 kbit/9.07% (ratio: 16000->176400) Selected audio codec: [faad] afm: faad (FAAD AAC (MPEG-2/MPEG-4 Audio)) ========================================================================== AO: [dsound] 44100Hz 2ch s16le (2 bytes per sample) Starting playback... Could not find matching colorspace - retrying with -vf scale... Opening video filter: [scale] Movie-Aspect is 1.33:1 - prescaling to correct movie aspect. [swscaler @ 011634F4]using unscaled yuv420p -> bgra special converter VO: [directx] 320x240 => 320x240 BGRA A: 6.5 V: 6.5 A-V: -0.038 ct: 0.045 0/ 0 1% 1% 1.1% 1 0 A: 23.2 V: 23.3 A-V: -0.092 ct: -0.136 0/ 0 1% 0% 1.3% 0 0 Exiting... (Quit)
hmm, maybe I miss something..?
Publisher
Joined: 4/23/2009
Posts: 1283
There are parts of the video running at 30 FPS (the non-loading screens) and there are parts that run 60 FPS (the loading screens). Both the MP4 and MKV posted are variable frame rate. Maybe what mplayer sees is the average frame rate which is 29.088 according to MediaInfo reading the MP4. If you download the streaming version, it will be constant frame rate of 60. This is why I said it goes "up to" 60 FPS.