Submission #8853: jlun2's GBC Dragon Warrior Monsters 2: Tara's Adventure "save glitch" in 21:25.84

(Link to video)
Game Boy Color
(Submitted: Dragon Warrior Monsters 2: Tara's Adventure)
save glitch
BizHawk-2.9.1
76867 (Cycle Count 2696597806)
59.779690699637094
41932
PowerOn
Dragon Quest Monsters 2 - Maruta no Fushigi na Kagi - Iru no Bouken (J) [C][!].gbc
Submitted by jlun2 on 1/20/2024 5:05:12 AM
Submission Comments
Dragon Warrior Monsters 2 is a monster capture and breeding game that involves a farm boy/girl on a quest to obtain a spare plug to stop their home from sinking. With the use of save bugs, our hero retrieves the plug in half an hour. This is an improvement of 25,143 frames, or 07:00.59 over the previous run.

Game objectives

  • Emulator used: BizHawk 2.9.1
  • Plays on gameboy player mode in hopes of console verification of the bug
  • Any%

Comments

CasualPokePlayer mentioned that the current run desyncs due to a timing error, along with 3 spots I missed using the up/down bug that was done in the 58 minute run. I initially tried to resync it, but my lack of understanding of the game's RNG made it very difficult to test and resync things.
Unrelated to that, the game has an ACE entry point from the glitched NPCs. Simply looking at their stats will cause the game to jump to C9D6. There was no information on the game's RAM, so I had to find a bunch of addresses myself. While attempting to do so, I found out that follower index 109 and 110's name corresponds to item in storage 7-9, and 90-92 (Addresses E642-E646, E6E7-E6EB). I was going to change my name to get items to make a payload, but then I realized those values won't get saved. I could however, try to use stat boosting items to increase my stats to make those a payload. Unfortunately, the Japanese character set does not have any values that correspond to stat boosting items. Only the english version does.
So I made a test run, trying to replicate the current run, using the (U) ROM. The well bug used does not work in (U), so I had to think of a different way to Beavern. I decided to use save/reset to get rid of the guard blocking the well in the 1st village, so I can reach the 1st boss early. Unfortunately, it appears the (U) version does not give me index 117 when depositing Beavern to the farm, so I was not able to get the ACE entry point (yet). This test run however, made me realize that the tricks I found on (U) could be applied to (J). So I started the previously submitted run.
While writing the submission notes for it, I realized that you could use the save/reset bug to get into the tournament hall early. Trying it out, I found out that it works, and gives you the pirate key before completing the Oasis. I initially thought it was not going to be worth, since at that time, I only knew depositing Beavern gave 117. I got a bunch of monsters in Pirate world, then found that Toadstool gave an index of 117.
I restarted the entire run again, this time recruiting a GiantWorm, plus six other monsters before doing tournament early. I was experimenting with save/resetting away the tournament guard, then I noticed that saving at the farm, then save/resetting at the tournament entrance made one of the npcs act like a farm. I then tried depositing, but then it gave an index of 117. I tried the same thing, but without the save/reset, and it gave an id of 65 instead. This made me realize I don't even need Toadstool. I just need 8 monsters to obtain 117, then release 7 more to get 110.
I restarted the run for the 3rd time, and once I entered the Pirate world, I looked for ways to get 1536 XP given my lack of swimming ability. I tried using Up/Down to "walk" on water at first, but that only gave me low experience monsters on water. I then moved further away, and discovered that they gave me monsters that gave much higher experience than even the water ones. I found a combination that allowed me to do it in 2 fights, and completed the run in 79,880 frames, saving 20k frames from the last submission.
I was writing the submission notes down, then I wondered, if save/reset gave me back all the monsters I had during the farm where I last saved for real, could I duplicate monsters? So I tried releasing a monster, then save/reset. I found out that it decreased my follower index count, but gave back the monster I released. Upon this discovery, I decided to just recruit a single monster, then save/reset dupe it 7 times. This saved another 2000 frames, reducing the time to 76,867 frames.

Criticals

The important thing to figure out first is how to get critical damage during the first 8 fights. To be exact, both CactiBall and SpotSlime need 1 critical to OHKO them.
To find out how criticals were determined, first I just simply got 1 to appear. Specifically, the critical hit message box. Then I searched on RAM on an address that changes if I get a critical. I got C5E8, D80E, D820.
C5E8 seems to be a timer that goes from 0 to 127, forever. On specific values that vary by the monster fighting, it seems to always give a critical or a miss. If you get a critical, D80E or D820 will be 128. So I recorded every single instance of getting a critical and displayed it using a lua script to make testing and resyncing events much easier. This also means that criticals (or miss) will be guaranteed to appear every 128 frames, or ~2 seconds.

Version choice

In this particular case, I chose Tara because the 58 minute long run was using Tara. In that run, she does not need the Change Rod in the Sky World to obtain a treasure, unlike Cobi. In this run however, she completely skips the Sky World, so I'm not sure if there's any difference using Cobi. Both Cobi and Tara versions have the same monsters in Oasis except for TailEater which I don't recruit, and I recruit nothing in Pirate, so there shouldn't be a difference.
Japanese has an exclusive glitch regarding the storage room where you could talk to an npc the frame before you enter the room, allowing you to obtain the pie slightly earlier. It also seems to allow a follower index of 117 when depositing a duplicate follower, something that I couldn't get to happen in (U).

Monster choice

The current run uses follower index of 117. It is possible to get a follower index of 65, which corresponds to C9E5-CA89. Index 61 is C751-C7F5, which had the address C753 be Key 20 Type correspond to Name 2nd character. However, it's ID was determined by Key 22 Prefix/Suffix, which was FFFF, causing the game to crash due to it's sprite. If 61 did not crash, I could've changed my name to have the 2nd character be 6, allowing me to skip the Pirate key entirely.
The ID for follower index 117 is EB74, EB75. This seems to be related to the overworld NPC. It cycles from 0 to ~28,000, jumping several hundred values every frame. Valid IDs that didn't immediately crashed the game were:
  • 12384
  • 15712
  • 15968
  • 16224
  • 18272 (very fast)
  • 18528
  • 18784
  • 19552 (very fast)
  • 19808
  • 22368 (very fast)
  • 22624
  • 22880
I chosed monster ID 19552, since it appeared to be 4 frames faster than 18272. The other ID's cause the game to lag a lot before letting me continue.

Save/Reset

Saving and reseting is used 10 times in the run:
  1. To make my 2nd follower ID 0
  2. To duplicate my monster 7 times
  3. To remove the guard blocking the tournament hall
  4. To remove the guard blocking the castle in Limbo
The game seems to save follower index first, before the monster data. So if I had say, 1 monster, saved, then get another mosnter before save/reset, the game would save the fact I now have 2 monsters, but only data for 1. This explains 00000.
Similarly, by saving at the farm when I had 2 monsters, the next time I save/reset after releasing one, the game reduces my follower index by 1, but fails to save the fact I released a monster. So I can now release the same monster 7 times in a row.
Regarding recruiting monsters, SpotSlime is the only monster that can be recruited more than once in the starting screen, at a 1% chance after the 1st. Cacitball is apparently impossible to do without treats. The time it takes to manipulate a 20 encounter step SpotSlime, plus the fighting, then subsequent delay to recruit it meant save/reset dupe was faster by 2000 frames.

Stage by stage comments

GreatLog

The cloakroom bug allows you to get the pie a bit faster by pressing A as soon as you walk on the door tile to the storage room.
Pressing Up/Down when you return to your house saves you around 2 seconds. This was missed from the previous run, so I added back here.
Using the same cloakroom bug, it is possible to enter the egg shrine area early before you get a monster. Talking to the old man that breeds monsters would've resulted in every subsequent dialogue be empty, and automatically closed. This would've saved time, if not for the fact it goes away after save/reset. Since I save/reset at the first village before most of the talking gets skipped, it ends up losing time.
Talking to the old man twice would've also allowed the game to jump to WRAM, but due to being so early in the game, there wasn't anything I was able to exploit.

Oasis

The layout of items is determined when you leave the shrine. The address CC47 (U), CC24 (J) determines how much items appear in the overworld. The items uses 1 byte for ID, 1 byte for Map X/Y, and 1 byte for Tile X/Y. For instance, 01 00 00 30 45 would mean item id is 1 (Herb), at Map screen 3, 0, at tiles 4,5 within that screen.
It is possible to manipulate both Warp Wand, and Warp Wing to appear on the map. The Warp Wand warps you to the front of the shrine, while the Warp Wing warps you to GreatLog directly. For this run, I need a Warp Wand for use later at the Water World. Since no store stocks it, and I literally visit 4 screens in Water World, I needed to get a Warp Wand in the Oasis.
It took me over 187 frames to get a Warp Wand to spawn at the very first screen of the map, right outside the shrine. I recruited a monster, made it to 00000 by save/reset, then went back out to pick up the wand and get a duplicate monster. Then I went back to GreatLog.

GreatLog

I saved at the farm to set up the glitch, then went to the entrance of the tournament to save/reset. This made the woman there act as my brother, allowing me to deposit monsters, while also moving her away from the tournament entrance. I deposited both Slime and Cacitball to get a glitch follower index. The game tracks your follows by 3 indices: C6FE, C6FF, C700. Normally, this points to the follower's data structure in A000-BFFF. When you deposit the duplicate follower, the index gets bugged, and becomes a high value. It was discovered by others (I do not know who; it was already a thing since 2015 at least with https://www.speedrun.com/dqm2/runs/7ylko7xz.) Depositing a duplicate NPC after restarting the game in the Japanese version of the game results in an index of 117. This treats the region from EB69-EC0D as part of the follower's data structure, which still isn't useful. However, when you release monsters from your farm, the game decrements your index to reflect CartRAM being cleared. Since I was at index 117, the game decrements to 116, which is still in WRAM. By releasing 7 monsters, I can get the game to treat E6E6-E78A as their data. The save/reset is to allow me to release the same exact monster 7 times in a row, instead of needing to get 7 different monsters.
Bytes 0x58, 0x59, 0x5A in the monster's data structure is their experience gained. E6E6 + 0x58, 0x59, 0x5A is the address for Key 14 NPC Level, Key 15 Type, and Key 15 Prefix. The ID for the Limbo key is 6. To get Key 15 Type to be 6, I need to get experience. Experience is 3 bytes little endian, so I need 0x600, or 1536 experience to obtain the Limbo key.

Tournament

I need to beat 3 monster tamers in the tournament for the Pirate Key.
My monster is now dead, but I can revive them by either going to the tournament and dying, or use a key to go to GreatLog. I cannot go back to the shrine without the woman blocking the tournament again, so I decided to die at the tournament. The NPC uses heal on their first turn, before I immediately die.
The first fight consist of 2 Babbles, and 1 PearlGel. Their stats do not matter, because I deal thousands of damage every turn. My high agility means their attacks misses often. I manipulate all 3 monsters to miss me, since it is faster, while avoid using their skills. I did test using the fastest text speed in game, but all it does is auto press A at the earliest time in battle. I decided to keep with text speed of 8 to control RNG events. I noticed that I get pumped up more often than when using Slime/MadCandle. That had to be avoided as well due to an extra dialogue box.
The 2nd fight has a SpikyBoy, Pixy, and Eggplaton. The 3rd fight is 2 MadRaven, and a SkullRoo. Their fights are identical to the first. The only thing to note is that on the 3rd fight, I manipulate the encounter steps to 70, so that I can get to the Pirate World village, buy a Journal, then go back to the ocean before an encounter.

Pirate World

I searched up what NPCs appear in the 1st screen of Pirate World. I found out the water gives much higher experience than on land. On water:
IDNameXP
316Petiteel148
322Merman155
323Octokid93
325Octoreach102
332RougeWave111
On land:
IDNameXP
10Slime9
80Anteater27
147Toadstool28
However, since I have not beaten the Oasis, I could not swim. The land monsters were low experience, so I had to find an alternative way. I found out I can get to the screen to the right of the shrine, which gave the following:
IDNameXP
36DragonKid108
38Pteranod301
101CatMage288
Since I needed 1536 XP, I tested a bunch of fights. I found out it is possible to obtain over 900 XP per encounter in the area. That means it is possible to get Limbo Key in 2 fights. However, I must not get too high experience, or it would get me other keys.
I quickly bought a Bookmark in the Village. I turned left at the start to prevent the NPC from blocking my way on the way out.
The last encounter doesn't need a step count of 20, so it was far easier to obtain. I did get the step encounter to be 100 to avoid encounters on the way to the Limbo Castle, but even if it were lower it won't matter.
During the fights, normally, you would have 3 npcs attack you on the first turn, followed by 2, then 1. By delaying the screen where it says monsters have arrived, you can sometimes get them to be stunned for a turn. This allowed me to skip 2 of them from attacking me, saving 115 frames per fight. I used the warp wand I got from Oasis after the 2nd fight to return to the shrine.

Limbo

I have enough steps to walk to the castle without an encounter. I used the journal to save/reset away the guard, then had my encounter manipulated to be 84.
There is no way I can walk all the way to the final boss without an encounter normally. However, by pausing the frame before I walk onto a tile with an encounter, I can reset the encounter timer, while avoiding a battle. This means I avoid every random fight here unlike the previous run. I did need a step counter of 92 to make it to Darck.
I OHKO Darck, and warp back to GreatLog. The chest behind them is not interactable outside of the cutscene. Even if I saved/reset away Darck, I still won't get the spare plug. I am unsure why the dam looks bugged.
I did one final Up/Down move to get to the tree top 32 frames faster than walking normally. Then the next 9 minutes of the run is the credits, before I'm allowed 1 more dialogue and the ability to save.

Other comments

Last time the run was not able to sync on console due to timing. I hope this time it can.
I actually want to make an improvement to a somewhat glitchless run, but I have no idea if a save glitch minus glitch npc run would be allowed. I need to investigate more about the route however.

Possible Improvements

You can get a jump to WRAM when you deposit the duplicate monster when the id of follower 117 is the following:
  • 608
  • 11104
  • 21600
  • 21856
  • 22112
  • 23136
The list is not exhaustive. This gives a similar result as the cloakroom bug to an invalid screen mentioned in the thread. If you could corrupt game state (C5DB) to be 0 and survive, you end up in the debug menu. While the credits option there doesn't trigger the ending, you can use it's warp feature to warp directly to the last boss, skipping the Pirate key entirely.
This game doesn't check for save corruption, so there's probably some subframe reset improvement possible.

Samsara: Claiming for judging.
Samsara: As a self-proclaimed expert in the world of TASes of Japan-only games where I have no idea what's going on, I can definitely say this is one such TAS. I'm glad to see all of the effort you put into researching this game paying off with a massive improvement like this.

despoa: Processing...
Last Edited by despoa on 2/26/2024 1:51 AM
Page History Latest diff List referrers