Various things
Scotland

I'm in the middle of reorganising this post to retain only things of interest to someone, say, speedrunning hundo. Go to https://goo.gl/Ybtr6A for more technical details if you'd like to mod this game or are just into that sort of thing.

Passwords The full password list can be got from https://docs.google.com/spreadsheets/d/1zpBNCHcCoU_lidOsSlgQeEnOvB76oJkYLt5nPlhQBYk/. For convenience, the cards without a working password are listed at https://pastebin.com/LPYjSEBp

Fusion table I've put this up at https://docs.google.com/spreadsheets/d/1N1Q5uf3Xbf1KyWx0iI3REoQi7NrqdwSHb0oR06UH-LE/. It's not very convenient to use, but it's there anyway.

Deck Leader GameFAQs user Hozu found some good information on EXP gain, which they posted at https://www.gamefaqs.com/boards/589455-yu-gi-oh-the-duelists-of-the-roses/74521692?page=1/. At https://goo.gl/BfyPt3 you can find all of the leader abilities.

Slots There are 8 cards where lining them up in slots gives a special rare, and they are:

060 Dark Magician -> 087 Dark Magician Girl

061 Illusionist Faceless Mage -> 733 Brain Control

272 Harpie Lady -> 702 Harpie's Feather Duster

539 Thunder Nyan Nyan -> 700 Raigeki

716 Dark-Piercing Light -> 715 Swords of Revealing Light

722 Stain Storm -> 811 Acid Trap Hole

754 Dark Energy -> 699 Dark Hole

837 Ultimate Dragon -> 083 Lord of D.

Any other three-in-a-row will result in one of the following 22 random rares, all equally likely:

000 Blue-Eyes White Dragon

007 Red-Eyes B. Dragon

054 Right Leg of the Forbidden One

060 Dark Magician

075 Skull Knight

092 Gemini Elf

113 Temple of Skulls

115 Fire Reaper

118 Flame Ghost

151 Flame Swordsman

294 Summoned Skull

362 Toon Summoned Skull

408 Jirai Gumo

486 Labyrinth Tank

498 Cannon Soldier

502 Barrel Dragon

629 Dissolverock

635 Barrel Rock

791 Sword of Dragon's Soul

792 Enchanted Javelin

793 Anti-Magic Fragrance

819 Gorgon's Eye

The cards that do not show up as a normal card in slots are listed https://pastebin.com/iScCqmxN

Destiny Draw Your Destiny Draw draw depends on situation, rank, and some RNG (no surprises there). You must have less than 1000 LP, and your rank must meet a minimum requirement depending on your DL, either 1LT or LTC. The requirement for each card is given in the deck leader abilities section.

Think of the possible draws as laying on a grid, where you have 3 columns and 7 rows. The row is chosen by the game at the start of your turn and comes from the situation you're in, but your draw from that row isn't determined until you look at your hand.

The rows are:

row 1 - Mirror Force, Dark Hole, Woodland Sprite

row 2 - Raigeki, Dark Hole, Arsenal Bug

row 3 - Dark Hole, Earthshaker, Earthshaker

row 4 - Riryoku, Raigeki, Raigeki

row 5 - Royal Decree, Harpie's Feather Duster, Royal Decree

row 6 - Mirror Force, Dark Hole, Dian Keto the Cure Master

row 7 - Raigeki, Swords of Revealing Light, Dian Keto the Cure Master

If your rank is at most RADM, then the card chosen from the row is 20% first card/25% second card/55% last card. If you're above RADM, it's 100% for the first card.

The following are the conditions for each row; they are checked in the given order.

Woodland Sprite row: The highest attack monster* on the field • Must be opponent-controlled • Must be a Fiend • Must be less than 3 squares within your DL Your opponent must control at least three Fiends.

Arsenal Bug row: You must have an Insect as your DL. Your opponent must control at least three monsters such that • Their attacks are between 3000 and 3999 inclusive • They do not benefit from Forest (i.e., they are not Beasts, Beast-Warriors, Insects, or Pyros).

Earthshaker row: There must be at least 31 Labyrinth squares. You must control no monsters that can go through Labyrinth. Your opponent must control at least 3 monsters that can go through Labyrinth.

Riryoku row: Your opponent must control the highest attack monster*. The highest attack of cards out of your hand must be lower than said monster's attack. The difference must be lower than half your opponent's LP.

Royal Decree row: You must control the highest attack monster*. Your opponent must have at least 4 traps out.

If none of the above conditions are met and the player has less than 250 LP, then one of the remaining two rows are chosen at random. Else there is no Destiny Draw.

  • If there is a tie, highest defense is the tiebreaker. If there is still a tie, the card summoned first wins.

Reincarnation Not every card can be obtained from reincarnation. Those that can't are listed at https://pastebin.com/VH4Yw8Xw

When you reincarnate a card, the game first decides whether to give you a monster or spell. If you reincarnate a monster, it's 80% monster/20% spell. If you reincarnate a spell, it's 60% monster/40% spell.

Next it decides what DC of card to give you. There are two ranges depending on the DC of the card you're reincarnating: the high range that goes from DC + 1 to DC + 10, and the low range that goes from DC - 10 to DC + 1. The game decides which range to pick depending on the ranks of your deck leaders. It takes the maximum rank of the deck leaders of decks A and B as a number (0 for NCO, up to 12 for SD), and the chance it gives you the high range is (8 + 2 x rank)%. The chance of the low range is (92 - 2 x rank)%. (So if you want the low range, make deck C your main deck and don't have a deck leader in decks A or B.) Once the game has decided the range, it just picks a deck cost from the range at random.

Next the game gets the list of monsters or spells (as chosen earlier) with the chosen DC, except for the card you are reincarnating. If this list is empty, the game lowers the DC by 1 and tries again until either the list is not empty or the DC is below 1.

Once that is done, if the list is not empty the game returns a random card from the list. Otherwise the game gives you Fake Trap.

~ Stuff below here still needs to be edited. ~

Strings Okay, this isn't really that insane, contrary to my initial view. It's an LZ77-type thing. You'll want the character map at https://pastebin.com/znxgzEct

So, generally characters on their own are represented as 0x2000 + <code>. I've also seen 0xA000 + <code>, which I used to think was a string terminator but I've since figured it can't be that. Maybe it's some sort of instruction to the game to help it space out the font or something?

So there's a table at 0x2D19D0 in the RAM, or 0x1D82D0 in the SLUS file. This is an array of 4-byte ints telling the game where to jump to for a given string. There is then an array of 2-byte characters at 0x2D49D4 in the RAM, or 0x1DB2D4 in the SLUS file. I'm not sure exactly how the game is keeping track of the string lengths, but I found that by assuming they're just packed beside one another I got reasonable results.

However, they do a trick to try and save room. Let's take the string for BEWD's name, which is Blue-Eyes White Dragon and is string 320. We find that the string is 2057 207E 2087 2077 20A2 205A 208B 2077 2085 2070 206C 207A 207B 2086 42C3 40FD 2084 2073 2079 2081 A080.

This mostly seems reasonable enough. Apart from the strange 42C3 40FD, it spells out Blue-Eyes Whit<???>ragon. So what's going on here? Well, first the second most significant bit is set here, which tells the game these aren't normal characters but are in fact pointing to segments of other strings to save room. The second 2-byte number tells us what string it's from once you and it with 0x3FFF, so we're told to look at string 0xFD = 253. Now, take the first number and right shift it by 6, then and it with 0x7F. This tells you how far you need to jump along that string (in this case, it's 11 characters). Lastly and the first number with 0x3F to get how many characters our substring needs to be (here it's 3).

It turns out that string 253 is Play a Practice Duel, and it's taking the 'e D' bit. The 11 seems weird, but parts of string 253 are compressed so it works out. Yes, this means things can get recursive.

I've decided to check my understanding by running a short script to extract the strings according to this, My results are at https://pastebin.com/m1mcmaJ5 . Any strings skipped over are due to them containing a character not in my character map; odds are this means I need to look deeper for more characters, given the gaps in the area with the cutscene dialogue. Also some of the last strings are suspiciously gibberish,

Starter decks and names The game calculates a number between 0 and 15 from your name and grabs a pool of three starter decks using it. The pools are:

Pool 0 - Fairy King Truesdale, Patrician of Darkness, Twin-Headed Behemoth Pool 1 - Serpentine Princess, Birdface, King Tiger Wanghu Pool 2 - Luminous Soldier, Kryuel, Tactical Warrior Pool 3 - Maiden of the Aqua, Airknight Parshath, King Tiger Wanghu Pool 4 - Robotic Knight, Fairy King Truesdale, The Illusory Gentleman Pool 5 - Serpentine Princess, Airknight Parshath, King Tiger Wanghu Pool 6 - Maiden of the Aqua, Birdface, Wolf Axewielder Pool 7 - Luminous Soldier, Patrician of Darkness, Tactical Warrior Pool 8 - Fairy King Truesdale, Kryuel, Twin-Headed Behemoth Pool 9 - Serpentine Princess, Patrician of Darkness, King Tiger Wanghu Pool 10 - Luminous Soldier, Birdface, Tactical Warrior Pool 11 - Maiden of the Aqua, The Illusory Gentleman, Wolf Axewielder Pool 12 - Airknight Parshath, Maiden of the Aqua, Molten Behemoth Pool 13 - Thunder Nyan Nyan, Serpentine Princess, Luminous Soldier Pool 14 - Fairy King Truesdale, Thunder Nyan Nyan, Tactical Warrior Pool 15 - Kryuel, Injection Fairy Lily, Twin-Headed Behemoth

To calculate the number from a name, you'll need the character map at https://pastebin.com/znxgzEct . All of those numbers are in hex.

Now first, extend the name to 12 characters by padding with a filler character I'll call @. Next, for each character in the name look up the corresponding number in the character map and take the remainder after division by 16. For @, the number is 14. Now add the 12 numbers together, and take the remainder after division by 16.

I'll do an example: CM Punk. The name after padding is CM Punk@@@@@, and converting to numbers we get 8, 2, 0, 5, 7, 0, 13, 14, 14, 14, 14, 14. Add these up and you get 105, which is 6 * 16 + 9 so Pool 9, which gives us Serpentine, Patrician, and Wanghu.

The info the game shows you at the deck selection screen is stored at 0x1A0600 in the SLUS file. Each deck's info is given by a 12 byte block. The first two bytes are the deck leader's ID (if this matches the correct DL then the image will display correctly). The next two bytes are the average summoning level multiplied by 100.

Next two bytes are the attributes, stored in the lower 12 bits. It's four 3 bit numbers packed together, each representing an attribute. 0 is nothing, and the normal attributes are their ID above plus 1. The highest 3 bits is the leftmost attribute, the lowest being the rightmost.

Next two bytes are padding and the final four bytes are the main types or 'races'. It's similar to the attributes, it's four 5 bit numbers packed together with 0 being nothing and the others being their usual ID plus 1. Again, highest 3 is leftmost type and so on. Note that the leftmost type is the type displayed by the DL's name, which is why Fairy King Truesdale is shown with the Insect symbol.

Edited by the author 5 months ago
Ma_Liang, froggy25 and 2 others like this

Thanks for this :)

"The biggest thing making me suspicious of this is the absence of Kinetic Soldier. On the other hand, with a quick search I've been unable to find anyone ever claiming they've got this card with Destiny Draw, although nobody would ever have any reason to try and get it so that's hardly compelling evidence."

Kinetic Soldier wouldn't necessarily need a Destiny Draw as you can use Monster Reborn etc to get him off of Manawyddan fab Llyr; Woodland Sprite and Arsenal Bug require Ddestiny Draws to obtain them without cheat devices.

I'm also convinced that the special card isn't entirely random - Barrel Rock, Labyrinth Tank etc are far more common than Blue Eyes, who I've gotten from 3 Sparks at least twice, leading me to believe that certain weaker Spells yield Blue Eyes at a better rate (though I could be completely wrong)

Edited by the author 6 years ago
Scotland

'Kinetic Soldier wouldn't necessarily need a Destiny Draw as you can use Monster Reborn etc to get him off of Manawyddan fab Llyr'

Right, that's what I meant when I said nobody would ever need to bother trying to get it off of Destiny Draw. Lots of people online do say it can happen, but this could just be because it's similar to Arsenal Bug and Woodland Sprite and so people just assume it can happen.

As for the random rares, the equally likely part comes from me looking at the code. With 22 results you don't expect people to generally get perfectly even results unless they do lots and lots and lots of three-in-a-rows. I don't want to put a number on this since I've not done any calculations, but you'd probably have to get to a couple of hundred three-in-a-rows, all recorded, before it gets convincing. E.g., right now I just generated 100 random numbers 1 to 22, and I got 10 10 times. Of course, I could have made a mistake reading the code but that bit of the code was pretty straightforward.

Edited by the author 6 years ago
Rio Grande do Sul, Brazil

Nice work GMS! One question about the AI:

-On the run we can manipulate some duels (Darkness Ruler, Necromancer, Glitch Guy) because we understand how they react to certain movements or just the general behavior of the AI (Weevil always going right to setup the perfect moth, Pegasus on T1 placing a Monster on top left or a magic card on top right and other examples). Is this sort of information written anywhere on the code? It would be nice to get an even better understanding of the duels and maybe even create more strats out of it.

Scotland

No doubt this will all be in the code, the question is how difficult it would be to read the relevant code and understand it. If you want to figure out how the AI works, I feel a better idea would be to just set up experiments and see what happens.

The first thing would be to use savestates and check if the AI's actions are determined by the RNG at all (e.g., put a savestate first turn on Seto and see if he always moves in the same direction when you do the same thing). In my limited playing around with Seto I found it didn't depend on RNG, but I wasn't specifically checking that so I could be wrong.

Assuming it doesn't depend on RNG, then the next thing to check would be to see what can change their plays. Cheat Engine could help you look at face-down cards, and also edit your and your opponent's decks before either of you draw cards. Hopefully after some of that you'd have some new general observations that would give you an idea of what to test next.

Smosism likes this
Rio Grande do Sul, Brazil

Thanks a lot for the reply! Sadly I can't run the ps2 emulator on my potato pc but Gcah did find a lot of great info back in the day when he were testing. I guess I'll wait and see what happens, maybe these new runners coming into the leaderboard bring some life back into everyone so we get back on testing and running.

Keep up the good work sir.

Edited by the author 6 years ago
Limousin, France

Amazing work there. I'm baffled at how they handle strings in this game, sounds like something out of a 1980 game where space was actually a problem.

Australia

First of all, this is insane. Just when I thought I knew so much about this game, this bombshell is dropped! The passcodes is the biggest one. I think from a speedrunning standpoint the Dimensionhole code could definitely be part of a world record route.

Traversely this information would make any dotr fan (i mean, it is 2017 now after all) cream their pants mad. The passcodes and the manip for arsenal bug/woodland sprite are big.

Also, while I'm here, I've had the idea lately to do an 'x amount of things you didnt know about duelists of the roses', not sure what else I could include (would have to include some reaaaal basic stuff for the noobies then have the mindblowing ones at the end) so if you'd like to suggest ideas I'd love to make a video including some of these details and give you credit ofc.

Also @froggy25, I have an interesting hypothesis about development for DotR. a lot of the menu/ui/interface seems to be extremely similar with most other Konami PS1 games (just take a look at the menus in Castlevania Symphony of the Night for example), was intended to be a direct sequel to Forbidden Memories, and was released pretty early in the ps2's lifecycle. So I honestly think its extremely likely that that is actually the case - that space was a problem and maybe they wanted to slate this game for a ps1 release. IIRC the game's disc itself barely goes over 1gb, which a CD's max data holding is what, 700/800 mb? And considering how detailed the monster model/arena/attacks graphics are, they would hold quite a big chunk of the size of the game (so lets say the game was just under the CD threshold, then they were able to add all these flashy graphics for the new gen).

So basically, while this isnt fact and hardly decent evidence, I genuinely believe that this game started development before the ps2 came out, and they'd maybe have already programmed all this stuff in using old tactics with CD size limit where disc space was actually an issue, then the new gen came out allowing them to for more stuff into the game after they'd already programmed the game tight fitting this way where disc space mattered less. Ofcourse this isnt fact, but it is DEFINITELY a possibility. This game is like a fucking science man, holy shit i love it.

froggy25 likes this
Australia

Anyways, need more idea brainstorming now that these passcodes are in the pool. I plan on trying a route within the next few days that would just swap in an early dimensionhole, maybe after Mai or something

Australia

I'm thinking, play up til Mai, then you take out skullbird and maybe zanki as well, chuck in a Dimensionhole and a Dancing Elf from Tea that way you have a female card for fusion material and its same DC as a fake trap, then you can continue (not sure if this drops dc below 757 but will check soon regardless) with that up past the entire side, then on Red Rose you go Rex > Bonz then maybe even input a shadow ghoul and swap an insect out for that

I dunno, would have to play with this and actually figure out the dc levels which isnt even hard but im just dead tired and writing this down in case I forget

Australia

Also, just writing this down while its in my head, Change Slime is 12 dc and the code is very easy to enter, so thats definitely something to consider

I tried to have Seto Destiny Draw a Woodland Sprite by using a Fiend deck against him. His rank should be high enough to guarantee the draw, but he got Mirror Force instead. Is there another calculation for opponent's Destiny Draw?

Scotland

Yes, the opponent's Destiny Draw is calculated differently. Only Yugi and Seto get it, the only condition is they're under 1000 LP, and it's 50/50 for Raigeki or Mirror Force.

Aw, too bad. I tried using a combination of fiends, Rigras Leever and Monster Reborn against him, because I lost against Darkness Ruler one too many times trying to reach low life points. Well, at least I managed to summon the Blue Eyes Ultimate Dragon while trying that. Thanks for this guide, by the way. It helped me a lot already.

Edit: I guess using Jirai Gumo against Darkness Ruler would work. I can control the damage to my life points and on Forest it should offer enough defence against his fiends, especially with its other effect of cancelling power increases.

Edited by the author 5 years ago
Scotland

The easy way to rig it is to set it up in free duel, that way you can put Labyrinth in good spots and control the deck.