Game Information
Dragon Quest 5 Tenku no Hanayome (ドラゴンクエスト5天空の花嫁) is one of the most popular games in Japan, though it is not so famous in other countries. In this game, the life of a man is described -- his adventurous childhood, tragic adolescence, joyful marriage and travel to beat the evil with his family. Illustrations designed by Akira Toriyama, who is famous for Dragonball and Chrono Trigger, also make the story so fantastic.
This game is JPN only, but you can play the translated version on NDS, named “Dragon Quest 5 Hand of the Heavenly Bride”. Also, there is a fan translation. The storyline can be read at GameFAQs, though proper names are different between the fan-translated and NDS version.
SNES: http://www.gamefaqs.com/snes/588292-dragon-quest-v/faqs/14945
NDS: http://www.gamefaqs.com/ds/942423-dragon-quest-v-hand-of-the-heavenly-bride/faqs/56092
Game Objectives
- Genre: RPG
- Emulator used: SNES9x-1.51-rerecording-svn147
- Allows L+R/Up+Down input
- Aims for fastest time
- Takes damage and uses death to save time
- Abuses programming errors
- Heavily manipulates luck
Glitches and Tricks
Half Step Trick
If you press arrow keys before certain messages appear or disappear, you can move before that. This trick is infeasible at some places.
Faster Movement of the Cursor in the Menu
In the menu, the cursor moves upward faster than downward. Similarly left is faster than right. For instance, when the option is like this “->Yes No” (-> is current cursor) and if you want to choose “No”, pressing left is usually faster than pressing right.
As for another notice, in the item inventory, the number of items one owns determines the speed of the cursor movement. If one has fewer items, the cursor speed is faster, and vice versa. I optimized this trick as hard as possible in the last half in which I open the item inventory many times.
Action Order Glitch No.1
In the beginning of a battle turn, the order is decided as below.
- Get the modified speed (= Actual Agility * (0.75 to 1)) from the first character of hero's party to the last character of enemy side.
- Compare the next character's modified speed and regard higher one as the “interim fastest”.
- Compare the ”interim fastest” and the next character .. and it goes.
- When the comparison finishes, add the current”interim fastest” to the “action order list”.
- Return to 1 and conduct the same processing without the characters in the order list.
In this process, there is a bug at No.2, that is, if the “interim fastest” and the next character's modified speed are the same, this subroutine will be finished.
(Translated Kri's Japanese explanation)
Example: (Alliance) A:10 B:10 C: 60 (Enemy) D:10
- Compare A with B. They are the same, so the process finishes. “List 1=A”
- Remove A and compare B with C, C is the “interim fastest”. C is faster than D. so the list is..”List 1=A, 2=C”
- Remove A and C. B and D are the same, so the process finishes. “List 1=A, 2=C, 3=B, 4=D”
Action Order Glitch No.2
Whether or not he/she is a party member or an enemy, the dead character's actual agility is the top character of the alliance. So, if there is a dead character, the members' action order will vary.
Application: Hela's armour is cursed and makes the equipped character's agility 0. Equip the first character with this armour and put a dead man in the second, then the first and the second character's agility and speed is absolutely 0. So the first character acts first necessarily, even his/her agility and speed is 0. But I didn't use this in the run.
Here is Japanese documents written by Kri.
Skip the Event Tile
When you encounter enemies at the same time you enter the event tile, the tile event is delayed. Abusing this, I can skip certain events.
Avoid the Spike Trap at Nightmare Towers
If you press the keys diagonally, the spike traps don't appear. This trick is discovered by Tamanahito(玉な人, the previous speedrunner on Nicovideo).
Borongo Glitch
What is this glitch?
This glitch allows you to manipulate RAMs which we usually cannot have the access. Usually, the number of party members is limited by 8, but by this glitch you can see the members after No.9. The RAMs after 9th party member corresponds to some event flags, so abusing this, you can quickly set the ending flag and finish the game. The list of the memories you can manipulate is here (this list is made by Pirohiko(ピロ彦) ).
[dead link removed]
How this glitch happens
Before this glitch, you must recruit a monster and farm it at Monty the Monster Monitor. So I cannot abuse this in the childhood. To cause this glitch..
- Arrange the party order not to make the hero first. Then talk to Monty and open a farmed monster's status.
- Weirdly, the hero's status is displayed.
- When you close the menu, the hero disappears and the monster is copied.
- If you enter the town again, the resurrection event happens because the hero is not alive.
- But nothing changes and a glitched character appears (the last character disappears).
The glitched character is No.256 (memory number is 0xFF).
How to control the character
The glitched character 0xFF refers to the graphical RAMs, so his/her status easily changes. If you farm a monster, the number of the glitched character decreases by 1, and if you arrange your party, the number becomes -> (Current Number % 0x10).
How to set the ending flag
The ending flag is 9th (0x08) character's ID. If you insert a number more than 127 (0x7F) in this ID, the ending flag will be set. But usually character ID cannot be accessed. So you must use Patty's Bar. When you remove a person there, the data of the removed character will be replaced by the data of the next person. By the way, seeing the rocks at the Nightmare Towers makes 0x0B's character ID increase by 0x80. So sliding this data to 0x08 character's ID will take you to the ending.
Also, 0x08 character's current MP (lower byte) must be over 0x7F to display “THE END” message. So I must control the flag and 0x0B character's current MP.
Here is a script that displays various data. -> http://pastebin.com/GJ7nBEfM
That's all for this TAS. For more details, here is Japanese documents about Borongo Glitch written by Fami(ファミ).
Luck Manipulation
There are two RNGs in this game. They are used for different purposes. I analyzed them (and other things) by disassembling, using Geiger's snes9x 1.51. I feel grateful to the author of this software, Geiger.
Encounter RNG
RNG Seeds and how to generate the number
There are 4 RNG Seeds and they are stored in RAMs 0x7E0993 to 0x7E0996. Each number excluding 0x7E0996 increments by 1 every frame. Every Seed changes according to the formula each time the RNG is used.
The RNG is used each half step you make when you are walking in the encounter-able maps. If the generated number goes under the “Encounter Number”, enemies appear. Also, every time an encounter occurs, the RNG is used a few times to determine the enemy group.
Encounter Number
Encounter Number increases as the step counter (0x7E1A9B) grows. The counter is reset after an encounter or map changing, and increases by 1 each time you make a half step.
It depends on the maps how the Encounter Number grows. For example, in some maps it will be.. “0 (0-5 steps)”, “1 (6-7 steps)”, “3 8-9 steps”, “4 (10-34)steps”, “10 (35-71 steps)”, “28 (72- steps)”.
How to manipulate luck
Basically, you can avoid an encounter by just stopping for a step (loses 8 frames). You must note that, if you change the timing when to stop, the RNG Seeds in the future also totally changes. So it is not enough to just re-record and stop right before the future encounter, but you should try all the possible patterns when to stop for a while. I made a brute-force lua simulator and used it. But it takes too much time to calculate with my laptop computer in a large maps. So I should have needed another method of approximation like these.
Also, here is the lua script I used, though it is so unrefined. EncounterLua, EncounterSimulator
Common RNG
The RNG Seeds
There are 3 Seeds and they are stored in RAMs 0x7E075B, 0x7E075C, 0x7E075D. 0x7E075B increments per a frame. When the RNG is used, 0X7E075B and 0x7E075C change differently depending on when to use it. 0X7E075D increases by 1 every time the RNG is used.
When this is used
The Common RNG is used to determine various randomness in the game. NPCs' movement, many things in the battle, the judge of the first strike or enemies' sudden attack, and so on. For example in a fight..
- Right after the message “〇〇のこうげき!(〇〇's attack!)”
- about 3 times the RNG is used. - Right after the message “…のダメージ!(… points damage!)”
- about twice the RNG is used. - When you escape from enemies
- Once the RNG is used.
How to manipulate luck
The numbers of two Seeds varies depending on the timing when to use the RNG. So ideally, I should have try almost all the timings for optimization when I could press A button. But in a fighting scene, the RNG is used many times. So I used some lua scripts and compromised to some degree. I searched a few optimized candidates in one turn and tried them to select the best in the next turn.
There is a lua script to display this RNG and the value (though I mainly used other simulators which are so badly made) -> http://pastebin.com/wtTHUFRJ
Route to the Ending
I will explain with proper nouns used in NDS version.
- Entering the name
Naming “あ(A)” is the fastest. I used Y button properly to save some frames.
- On the Ship and Littleheaven (ビスタ港)
Used Half Step Trick once. Also I manipulated when to close messages so as to draw good RNG Seeds in the battle against Slimes.
- Whealbrook (サンタローズ) and its Cave
To manipulate the enemy appearance fully, I delayed to close the message by 1 frame. Also I used the brute-force lua script to decide when to stop for 8 frames. I asked 2 Bunicorns to help the hero go out of the Cave. There is no possibility of enemies' sudden attack, for this is the first dungeon maybe.
- Roundbeck (アルカパ) and Uptaten Towers (レヌール城)
In Roundbeck, I delayed totally 2 frames to manipulate the encounter and the common RNG of Uptaten Towers. To manipulate the common RNG, I had to consider when to delay because the timing decides the future Seeds. At Uptaten, I ignored one treasure chest whose content is “Chimaera Wing (キメラのつばさ, fly to the previous town)” to control the event flags. If you open the chest, the value in RAM 0x7E2212 increases by 0x80. This corresponds to the glitched 0x0B person's current MP lower byte, and if I had got this, I would have lost the chance to cast 0x0B person's spell, for the value must be more than 0x80 at the ending.
4 Wax Murderers
I tried to optimize this battle like this.
1st turn
- Change the Bianca's AI pattern to “ガンガンいこうぜ (Give greatest damage!)” from manual, and manipulate manually to avoid the enemy's first strike (or give the first critical hit).
- Fill in the proper values in a lua script (which calculates optimized 20 patterns when to press A button) and use it.
2nd turn and 3rd turn
- Prepare for 5 savestates and search the pattern in which the hero can act faster than a Wax (by the Action Order Glitch) in the fastest order.
- Search the optimized first strike manually and use the lua script again.
4th turn
- Bianca must take damage twice from this turn. Manually search for the RNG in which Bianca can give first critical hit.
- Kill Bianca with the Wax's attack and beat the Wax by the hero's critical hit, and finally get the treasure chest (using the lua script).
Haunted Housekeeper
He acts in a particular order. “(Attack or Frizz(メラ) ) -> (Sizz(ギラ) or Sap(ルカニ) ) -> (Attack) -> ...”
In this battle, the strategy is almost the same as the Wax Murderers. I cannot speak more than that.
When I returned Roucdbeck, I purchased 3 Chimaera Wings. Borongo obtains 2 of them to reduce lags (in the item inventory, fewer items take advantage).
- Whealbrook again and Faerie Lea (妖精の村)
I delayed 3 frames total to manipulate the enemy appearance. Also, I had to find the RNG by which enemies suddenly attack. So I used a movie editing lua script and went back 10000 frames again and again to delay the timing of NPCs' movement by changing when to close the message.
In the Dwarf's Den, the hero must find a book about the thief and be killed by Lava Larvas' sudden attack. Lava Larva is sometimes sleeping when the battle begins (50%). The possibility that everyone is awake is 1/16. And the sudden attack happens once in 32 times. Totally 1/512 probable. That's why I had to manipulate again and again. Also I had to manipulate the enemy appearance. But thanks to the lua scripts, this was not so much hard.
- Winter Palace (氷の館)
On the slipping floor, there is a trick to move smoothly. If you press arrow keys vertically to the wall right before you hit the wall, you can walk slightly to the vertical direction.
There are two bosses, but luck manipulation is not so different from previous battles. So I omit the explanation.
- Coburg (ラインハット) to the Ancient Ruins (古代の遺跡)
At Coburg, nothing is particular. In the Ancient Ruins, the map is so large to use a brute-force lua script. So I used the script a few times to find the better enemy appearance.
In the event when Pankraz dies, Pankraz's current HP is taken over. I optimized to kill Pankraz faster.
- Enslavement, Heaven's Above Abbey and Fortuna
In the Abbey, the hero was sent 1000 gold by Maria. This is the fastest way to make more than 300 gold as far as I know.
Before arriving at Fortuna, I walked around to wait for the night (to purchase the carriage). On the town in the field map, the Encounter RNG is not used. So I could manipulate luck of the next encounter.
After purchasing the carriage, I had to recruit 2 slimes. Heavily manipulating luck, I could find the best encounter (in which 2 slimes appear, only 0.1%) twice.
- Borongo Glitch
I abused the glitch and set the ending flag as mentioned above. I explain what I did after I used this glitch and made a glitched character.
After 0xFF person appeared, farm and get a monster twice (0xFF -> 0xFD) to obtain “Hermes' Hat (かぜのぼうし, which can be used like a Chimaera Wing)”. Then make 0xFC character and escape by Hermes' Hat. When entering the town, Borongo Glitch occurs again. The resurrection event doesn't happen this time. Again farming party members, make 0xFD and 0xFA persons. Draw a Staff of Resurrection and Hermes' Hat. Then arrange the party order to summon 0x0D and 0x0A persons.
Before going outside, resurrect 0A person to avoid the resurrection event. 0D's item inventory corresponds with the number of items deposited at the item bank. Taking out items from the bank, the item of 0D transforms. From the bank, take out Night Light to 0D and take out 2 Steel Fangs, which corresponds with 0D's 12th item. Night Light (C5) decreases by 2 (C3) and gain the unused item “Monster Hoihoi (モンスターほいほい)”, which has the same effect as Flying Carpet.
Again talking to Monty, make 0x08 and 0x0B characters. 0B can cast glitched Zoom (ルーラ) spell and can fly to anywhere. Fly to Gotha (グランバニア) because I will later fly there by Hermes' Hat. Use Monster Hoihoi to go to the Nightmare Towers. Climb the towers and see the rock to increase 0x0B's character ID by 0x80. Then use Hermes' Hat to fly to Gotha and slide the ID using Patty's Bar. When you enter the throne room, the adventure will end.
Thanks to …
- Fami(ファミ): A speedrunner on real console. He planned the original run with Borongo Glitch. Of course I referred to that so much.
- Pirohiko(ピロ彦): A glitchy Japanese TASer. His quality research for this glitch and event flags was also helpful for me. And he gave me some good ideas.
- Kri: A Japanese speedrunner on Dragon Quest series. His analysis about Action Order Glitch was so helpful.
- The site manager of “プレハブ小屋 (Prefab House)”: I referred to this website when I tried to disassemble. [dead link removed]
- Tamanahito (玉な人): He made the previous run on Nikovideo, which was long but optimized run. I used some tricks that he discovered.
- (Square)Enix: Published this great game.
I encoded myself with some explanations. [dead link removed]
Also, I made an easy translation subtitle file. [dead link removed]
I hope many of you who watch this game first will be interested in this game. Enjoy the run!
ledauphinbenoit: Uploaded Touch-me's encode and English subtitles to YouTube.
Baxter: Very positive audience response. Accepting for publication.