Note:
  • My English skill is not enough to make a complete description. If you can read Japanese, I recommend you reading my blog post.
  • I don't know whether this run syncs on real console. But I believe you can use the same strategy as this run uses.

Essentials

  • Emulator used: FCEUX 2.1.5
  • Aims for fastest time
  • Corrupts memory
  • Uses a game restart sequence
  • Genre: RPG
Encode: nicovideo account

About the game

Double Moon Densetsu is a role-playing game derived from a play-by-mail game hosted on a Japanese game magazine, "Marukatsu famicom". Your goal is to beat Samoylenko, who kidnapped your sister 15 years ago. You can choose your job from Fighter, Paladin, Magical Fighter. In battles, you can "aim" at weak points of enemies.

Run overview

This run skips most events with "item-repository glitch". I will describe this glitch later. You can execute this glitch only on guilds, so you have to arrive at the towns that has guilds in the first place.
I choose Paladin as my job, because its special skill "Holy Light" is very powerful.
I go to the Cave of Fire to let the Ice Queen remove ice walls. In the cave my childhood friend Rowena joins, but I kill her on purpose because she talks for about 280 frames on the first boss battle if she is alive. I beat some enemies, and get Dagger and Short Sword to increase my firepower. I beat the first boss and escape with a glitch. The Ice Queen removes ice walls.
I beat a Lizardman and get Scimitar to increase firepower (and I convert it into money later).
I arrive at Saicon, and the princess Liona joins. I go to the Cave of Saicon to beat the turtle monster and get Map of Mountain from the king. I beat monsters and escape with a glitch. On Saicon, a minstrel Jenius joins. He has a special skill to confuse any enemies. And I buy many items needed to execute item-repository glitch. Finally, I get Map of Mountain.
I use Map of Mountain to open a way. In a mountain house, I get some items from chests. It is needed to execute item-repository glitch.
I arrive at Galganda, and this town has a guild. So I execute item-repository glitch to alter the position of the ship and to overwrite event flags. When the glitch have been executed, the ship is moved and I can sail to the final dungeon.
In the final dungeon, I fight against Samoylenko and Dark Dragon. At the moment they are extremely tough, but Jenius can confuse them. So I can beat them letting them attack themselves with critical attacks.
Note: There are some chutes on the first floor in the final dungeon. That's why I do not go straight to the stairs.

Tricks

First, I put some memory addresses:
$63FEThe item count in item-repository
$63FF-$642EItems in item-repository
$642F-$6436Chest flags
$6437Always 0 (probably)
$6438Ship position y
$6439Ship position x
$643A-$643CTown bookmark
$6477-$647ACharacter id

Item-repository glitch

On guilds, you can put items up to 48. But this item-repository has two bugs:
  • When 48 items are put, you can take the 49th empty item. If you do it, memory $63FE-$64FD is "rotated".
  • When the item count is greater than 48, you can put extra items. If you do it, you can overwrite memory out of range.

Taking the 49th empty item

You can do this by simply taking the last item on 7th page. But you can do it only if $642F is nonzero. In other words, you have to open some chest in advance. If you take the 49th empty item, you cannot get any item, but the memory $63FE-$64FD is "rotated". The details are as follows:
  • The value of $63FE is (the previous value of $63FF) - 1.
  • The value of $63FF-$642D is the previous value of the next address.
  • The value of $642E is unchanged.
  • The value of $642F-$64FC is the previous value of the next address.
  • The value of $64FD is the previous value of $63FE.
Let's see an example. Initially, you have already put 48 items. The memory is as follows:
       00 01 02 03 04 05 06 07   08 09 0A 0B 0C 0D 0E 0F
 63F0: .. .. .. .. .. .. .. .. - .. .. .. .. .. .. 30 3F
 6400: 40 41 42 43 44 45 46 47 - 48 49 4A 4B 4C 4D 4E 4F
 6410: 50 51 52 53 54 55 56 57 - 58 59 5A 5B 5C 5D 5E 5F
 6420: 60 61 62 63 64 65 66 67 - 68 69 6A 6B 6C 6D 6E 01
 6430: 02 03 00 00 00 00 00 00 - BE EF 11 12 13 00 .. ..
 ...
 6470: .. .. .. .. .. .. .. 00 - 01 02 03 00 00 00 00 00
 6480: 00 00 A0 86 01 00 .. .. - .. .. .. .. .. .. .. ..
 ...
 64F0: .. .. .. .. .. .. .. .. - .. .. .. .. .. .. .. ..
If you take the 49th empty item, the memory changes as follows:
       00 01 02 03 04 05 06 07   08 09 0A 0B 0C 0D 0E 0F
 63F0: .. .. .. .. .. .. .. .. - .. .. .. .. .. .. 3E 40
 6400: 41 42 43 44 45 46 47 48 - 49 4A 4B 4C 4D 4E 4F 50
 6410: 51 52 53 54 55 56 57 58 - 59 5A 5B 5C 5D 5E 5F 60
 6420: 61 62 63 64 65 66 67 68 - 69 6A 6B 6C 6D 6E 6E 02
 6430: 03 00 00 00 00 00 00 BE - EF 11 12 13 00 .. .. ..
 ...
 6470: .. .. .. .. .. .. .. 01 - 02 03 00 00 00 00 00 00
 6480: 00 A0 86 01 00 .. .. .. - .. .. .. .. .. .. .. ..
 ...
 64F0: .. .. .. .. .. .. .. .. - .. .. .. .. .. 30 .. ..
You can do this multiple times, But some conditions are needed:
  • The value of $63FE must be greater than or equal to 0x2B (to open 7th page).
  • The value of $642F must be nonzero.
As you can see, $642F- (chest flags) is "consumed" every time you take the 49th empty item. So you have to open some chests in advance.

Putting extra items

You cannot put any item when $63FE (item count) is 48. But if $63FE is greater than 48, you can put extra items. Usually $63FE is not greater than 48, but you can manipulate this by taking 49th empty item.
When you put an extra item, the item-id is written to the address 0x63FF + (item-count), and item count is incremented. This is basically the same as you put items normally.

Saving/loading with illegal character id

You cannot manipulate event flags directly with item-repository glitch. But you can manipulate character id with item-repository glitch. And you can manipulate event flags indirectly by saving/loading with illegal character id.
For each character id, the address is asssigned and the character data is saved to/loaded from the address. But if the character id is illegal, the program refers out of the address table, and the character data is saved to/loaded from illegal address. Here is the table:
You can "save" the character data to event flags with character id 0x70 of savedata 2, and you can "load" the character data from items in item-repository with character id 0x5D of savedata 2. So, you can manipulate event flags properly as follows:
  • Put items to item-repository properly.
  • Change character id to 0x5D, save, and load.
  • Change character id to 0x70, and save.

Escaping from dungeons

When the screen is switched, you can go through walls. So you can use this as shortcut to escape from dungeons.

Run detail

Manipulating ship and event flags

I need the event flags as follows:
FlagAddressbitCorresponding address in item-repository
The final dungeon appeared$05DAbit1$6415
Got the ship Artemis$05E3bit6$641E
NOT beated Samoylenko (zero)$05E5bit3$6420
Eliminated Princess Moon$05E5bit1$6420
First of all, I put a Healing Herb (0x3C), and a Spellbook of Dispell (0x7C). And I put 48 items considering event flags. Memory is as follows:
       00 01 02 03 04 05 06 07   08 09 0A 0B 0C 0D 0E 0F
 63F0: .. .. .. .. .. .. .. .. - .. .. .. .. .. .. 30 3C
 6400: 7C 3E 3F 3F 3F 3F 3F 3F - 3F 3F 05 3F 3F 3F 3F 3F
 6410: 24 05 3F 3F 3F 3F 3F 3F - 3F 3F 3F 3F 3F 3F 3F 3F
 6420: 55 3F 03 21 74 3A 2D 3F - 3F 3F 3F 24 05 67 77 40
 6430: 12 03 00 00 00 00 00 00 - 7B AD 0D 00 00 .. .. ..
 ...
 6470: .. .. .. .. .. .. .. 00 - 03 04 01 00 00 .. .. ..
I take the 49th empty item:
       00 01 02 03 04 05 06 07   08 09 0A 0B 0C 0D 0E 0F
 63F0: .. .. .. .. .. .. .. .. - .. .. .. .. .. .. 3B 7C
 6400: 3E 3F 3F 3F 3F 3F 3F 3F - 3F 05 3F 3F 3F 3F 3F 24
 6410: 05 3F 3F 3F 3F 3F 3F 3F - 3F 3F 3F 3F 3F 3F 3F 55
 6420: 3F 03 21 74 3A 2D 3F 3F - 3F 3F 24 05 67 77 77 12
 6430: 03 00 00 00 00 00 00 7B - AD 0D 00 00 00 .. .. ..
 ...
 6470: .. .. .. .. .. .. .. 03 - 04 01 00 00 .. .. .. ..
Now the item-count is 0x3B, so you can overwrite $643A, $643B, ... (town bookmark) by putting some items. I put a Spellbook of Healing (0x91) as ship position y, and I put a Spellbook of Outflame (0x71) as ship position x (but I modify the ship position x later):
       00 01 02 03 04 05 06 07   08 09 0A 0B 0C 0D 0E 0F
 63F0: .. .. .. .. .. .. .. .. - .. .. .. .. .. .. 3D 7C
 6400: 3E 3F 3F 3F 3F 3F 3F 3F - 3F 05 3F 3F 3F 3F 3F 24
 6410: 05 3F 3F 3F 3F 3F 3F 3F - 3F 3F 3F 3F 3F 3F 3F 55
 6420: 3F 03 21 74 3A 2D 3F 3F - 3F 3F 24 05 67 77 77 12
 6430: 03 00 00 00 00 00 00 7B - AD 0D 91 71 00 .. .. ..
 ...
 6470: .. .. .. .. .. .. .. 03 - 04 01 00 00 .. .. .. ..
I take the 49th empty item again:
       00 01 02 03 04 05 06 07   08 09 0A 0B 0C 0D 0E 0F
 63F0: .. .. .. .. .. .. .. .. - .. .. .. .. .. .. 7B 3E
 6400: 3F 3F 3F 3F 3F 3F 3F 3F - 05 3F 3F 3F 3F 3F 24 05
 6410: 3F 3F 3F 3F 3F 3F 3F 3F - 3F 3F 3F 3F 3F 3F 55 3F
 6420: 03 21 74 3A 2D 3F 3F 3F - 3F 24 05 67 77 77 77 03
 6430: 00 00 00 00 00 00 7B AD - 0D 91 71 00 00 .. .. ..
 ...
 6470: .. .. .. .. .. .. .. 04 - 01 00 00 .. .. .. .. ..
Now the item-count is 0x7B, so you can overwrite $647A (character id of 4th), ... by putting some items. I put a Source of Magic (0x5D) as the character id of 4th:
       00 01 02 03 04 05 06 07   08 09 0A 0B 0C 0D 0E 0F
 63F0: .. .. .. .. .. .. .. .. - .. .. .. .. .. .. 7C 3E
 6400: 3F 3F 3F 3F 3F 3F 3F 3F - 05 3F 3F 3F 3F 3F 24 05
 6410: 3F 3F 3F 3F 3F 3F 3F 3F - 3F 3F 3F 3F 3F 3F 55 3F
 6420: 03 21 74 3A 2D 3F 3F 3F - 3F 24 05 67 77 77 77 03
 6430: 00 00 00 00 00 00 7B AD - 0D 91 71 00 00 .. .. ..
 ...
 6470: .. .. .. .. .. .. .. 04 - 01 00 5D .. .. .. .. ..
Now I save and load from savedata 2 to load the character data of 0x5D. And I modify the ship position x at the same time. When the savedata is loaded. the program adds the current town and the first town to the town bookmark. So bit0 and bit3 of $643A is enabled, and the ship position x is modified to 0x79 from 0x71:
       00 01 02 03 04 05 06 07   08 09 0A 0B 0C 0D 0E 0F
 63F0: .. .. .. .. .. .. .. .. - .. .. .. .. .. .. 7C 3E
 6400: 3F 3F 3F 3F 3F 3F 3F 3F - 05 3F 3F 3F 3F 3F 24 05
 6410: 3F 3F 3F 3F 3F 3F 3F 3F - 3F 3F 3F 3F 3F 3F 55 3F
 6420: 03 21 74 3A 2D 3F 3F 3F - 3F 24 05 67 77 77 77 03
 6430: 00 00 00 00 00 00 7B AD - 0D 91 79 00 00 .. .. ..
 ...
 6470: .. .. .. .. .. .. .. 04 - 01 00 5D .. .. .. .. ..
I put a Spellbook of Outcold (0x70). The item-count is 0x7C, so $647B becomes 0x70:
       00 01 02 03 04 05 06 07   08 09 0A 0B 0C 0D 0E 0F
 63F0: .. .. .. .. .. .. .. .. - .. .. .. .. .. .. 7D 3E
 6400: 3F 3F 3F 3F 3F 3F 3F 3F - 05 3F 3F 3F 3F 3F 24 05
 6410: 3F 3F 3F 3F 3F 3F 3F 3F - 3F 3F 3F 3F 3F 3F 55 3F
 6420: 03 21 74 3A 2D 3F 3F 3F - 3F 24 05 67 77 77 77 03
 6430: 00 00 00 00 00 00 7B AD - 0D 91 79 00 00 .. .. ..
 ...
 6470: .. .. .. .. .. .. .. 04 - 01 00 5D 70 .. .. .. ..
I take the 49th empty item again. The ship position is moved to valid address, and the character id of 4th becomes 0x70:
       00 01 02 03 04 05 06 07   08 09 0A 0B 0C 0D 0E 0F
 63F0: .. .. .. .. .. .. .. .. - .. .. .. .. .. .. 3D 3F
 6400: 3F 3F 3F 3F 3F 3F 3F 05 - 3F 3F 3F 3F 3F 24 05 3F
 6410: 3F 3F 3F 3F 3F 3F 3F 3F - 3F 3F 3F 3F 3F 55 3F 03
 6420: 21 74 3A 2D 3F 3F 3F 3F - 24 05 67 77 77 77 77 00
 6430: 00 00 00 00 00 7B AD 0D - 91 79 00 00 00 .. .. ..
 ...
 6470: .. .. .. .. .. .. .. 01 - 00 5D 70 .. .. .. .. ..
Now I can "save" the character data of 4th to event flags. And I can sail to the final dungeon with the ship.

Luck manipulation

In this game, the random number is not so drastically changed for a short time. So you might need to go back hundreds of frame to change the destiny.

Reference


Baxter: A well-made TAS and positive audience response; accepting.
Velitha: Processing...


TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15628
Location: 127.0.0.1
This topic is for the purpose of discussing #3477: TaoTao's NES Double Moon Densetsu in 19:50.34
Editor, Player (69)
Joined: 6/22/2005
Posts: 1050
I've never played this game, but I found your explanation very easy to follow, and the run looks good. I also found it somewhat funny how your friend Rowena hobbles along behind you on what looks like crutches after she dies. Yes vote. I did notice that sometimes you bought the item that costs 5 money pieces from the shop and sometimes the one that costs 200. Were those specific items necessary for the memory manipulation you did?
Current Projects: TAS: Wizards & Warriors III.
Post subject: double moon desetsu: youtube
Joined: 3/18/2006
Posts: 971
Location: Great Britain
Experienced player (942)
Joined: 9/18/2008
Posts: 154
Location: Japan
Dacicus wrote:
I did notice that sometimes you bought the item that costs 5 money pieces from the shop and sometimes the one that costs 200. Were those specific items necessary for the memory manipulation you did?
Yes. Antidote (5 gold, id:0x3F) is cheap and useful to fill up item-repository, but I need some expensive items to manipulate memory. Here is the list: * Source of Magic (1000 gold, id:0x5D) - I need this to write 0x5D as the character id of 4th. * Spellbook of Outcold (400 gold, id:0x70) - I need this to write 0x70 as the character id of 4th. * Spellbook of Outflame (400 gold, id:0x71) - I need this to write 0x71 as ship position x. * Healing Herb (200 gold, id:0x3C) - I need this to write 0x3B as item-count. Besides, I buy 32 Antidote to fill up item-repository. So I need 2160 gold (1000+400+400+200+5*32). When I return to Saicon, I have only 866 gold, so I sell these items to make money: * Scimitar (500 gold) * Earring (500 gold) * Spellbook of Multiheal (300 gold)
mklip2001
He/Him
Editor
Joined: 6/23/2009
Posts: 2227
Location: Georgia, USA
Thank you for the nicovideo encode, TaoTao! The explanations you gave were pretty good too (even if you say they're not complete). I was surprised how long the inventory glitch took to do. That was a bit of a downer. However, you can't really complain with an RPG being beaten in 20 minutes, and there are some highlights: * The glitched exit of two dungeons was funny. * Confusing the final bosses :-) Yes vote!
Used to be a frequent submissions commenter. My new computer has had some issues running emulators, so I've been here more sporadically. Still haven't gotten around to actually TASing yet... I was going to improve Kid Dracula for GB. It seems I was beaten to it, though, with a recent awesome run by Hetfield90 and StarvinStruthers. (http://tasvideos.org/2928M.html.) Thanks to goofydylan8 for running Gargoyle's Quest 2 because I mentioned the game! (http://tasvideos.org/2001M.html) Thanks to feos and MESHUGGAH for taking up runs of Duck Tales 2 because of my old signature! Thanks also to Samsara for finishing a Treasure Master run. From the submission comments:
Shoutouts and thanks to mklip2001 for arguably being the nicest and most supportive person on the forums.
Active player (378)
Joined: 9/25/2011
Posts: 652
I have three issues with this speedrun: 1) It violates the rules of the site. English versions of games are to be used. 2) It's a bad game choice. An RPG with such a horribly low random encounter rate is just too easy a game to bother TASing. 3) The route isn't even optimal. In the last dungeon, the player doesn't even take the shortest distance to the stairs, but wastes time going the long way around. With all these against it, I have to vote no. じょうだんですよ。よくやった! おめでとう!
Spikestuff
They/Them
Editor, Publisher, Expert player (2656)
Joined: 10/12/2011
Posts: 6449
Location: The land down under.
c-square wrote:
I have three issues with this speedrun: *Skipping* じょうだんですよ。よくやった! おめでとう!
For a second I was going to hunt you down just to punch you, then I voted, then I saw 6 Yes clicked that link... you're a smart cookie YES VOTE
WebNations/Sabih wrote:
+fsvgm777 never censoring anything.
Disables Comments and Ratings for the YouTube account. Something better for yourself and also others.
Experienced player (942)
Joined: 9/18/2008
Posts: 154
Location: Japan
c-square wrote:
3) The route isn't even optimal. In the last dungeon, the player doesn't even take the shortest distance to the stairs, but wastes time going the long way around.
I should have mentioned about this in my submission (even if probably you have already guessed the reason:). There are some chutes on the first floor in the final dungeon, and that's why I do not go straight to the stairs. I added a note to my submission. Thanks!
Editor, Skilled player (1441)
Joined: 3/31/2010
Posts: 2113
I didn't know at all of this game before this TAS, but it looked fairly well done with a couple of obvious TAS tricks. Going by your explanation, also a considerable amount of thought went into this TAS, so I'll vote Yes.
Active player (378)
Joined: 9/25/2011
Posts: 652
Spikestuff wrote:
For a second I was going to hunt you down just to punch you, then I voted, then I saw 6 Yes clicked that link... you're a smart cookie
Ha ha! Better a smart cookie than a smart donkey, I guess. ;)
Experienced player (878)
Joined: 11/15/2010
Posts: 267
Well, the text went too fast in the wrong language. That said I do love watching a good RPG get knocked over by way of TAS. Definitely a yes vote!
Experienced player (942)
Joined: 9/18/2008
Posts: 154
Location: Japan
Well, I played this movie on BizHawk 1.0 as a test, and it desyncs at about 20200 frame. (To load the ROM of this game on BizHawk, you have to add an entry to NesCartDB XML. I put the edited DB (the entry is not complete, but it is sufficient to load the ROM)) I don't know the cause of the desync, but anyway this movie syncs only on FCEUX.
Editor, Experienced player (570)
Joined: 11/8/2010
Posts: 4038
TaoTao wrote:
I don't know the cause of the desync, but anyway this movie syncs only on FCEUX.
It's probably because your run uses FCEUX's old PPU, while BizHawk uses a better version of FCEUX's new PPU. Also, I liked the run. It's fast for an RPG TAS, and it has high technical value with your manipulating all of those memory addresses. Yes vote!
Post subject: Movie published
TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15628
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. ---- [1998] NES Double Moon Densetsu by TaoTao in 19:50.34
Editor, Publisher, Player (47)
Joined: 10/15/2021
Posts: 377
4K 60 FPS YouTube encode: Link to video
fsvgm777
She/Her
Senior Publisher, Player (226)
Joined: 5/28/2009
Posts: 1217
Location: Luxembourg
I'd leave it on the "Presented by NCS" screen for a few more seconds, cause it appears for a split second before the encode ends (right when the song ends).
Steam Community page - Bluesky profile Oh, I'm just a concerned observer.
Editor, Publisher, Player (47)
Joined: 10/15/2021
Posts: 377
It actually appears that briefly in the game. Even the old YouTube encode had it end like that.
fsvgm777
She/Her
Senior Publisher, Player (226)
Joined: 5/28/2009
Posts: 1217
Location: Luxembourg
Huh, then I suppose it's fine after all.
Steam Community page - Bluesky profile Oh, I'm just a concerned observer.