DOA1 Model 2 Arcade - Unlock RAIDOU

grap3fruitman

Well-Known Member
Standard Donor
Running the machine for at least 25 days will unlock Raidou in the original arcade Dead or Alive.

(character select)
OVPI7pV.jpeg

Total runtime is stored in ram at 0x01d00000, which gets compared to value 0x20f57f (2,159,999 seconds) and sets flag 0x54fd76 to true when the counter is greater, unlocking Raidou. (0x54fd56 in doaa, doaab, doaae, doab)

(machine code with notes)
stob       g4,SettingsGameMode_Nation_0054fcb0 ld         DAT_0054f3d4,g4                                  0x0 cmpibne    0x0,g4,LAB_000044b0                              compare integer branch if not equal ld         Bookkeeping_TotalTime_01d00000,g4                = 2B82h subo       0x1,0x0,g1                                       -1 cmpibe     g4,g1,LAB_000044b0                               compare integer branch if equal lda        0x20f57f,g1                                      2,159,999d seconds = 600 hours = 25 days  cmpoble    g4,g1,LAB_000044b0                               compare ordinal branch if less or equal mov        0x1,g1 stob       g1,SettingsUnlisted_UnlockRaidou_0054fd76*



(bookkeeping screen)
1719474766033.png


Here's a Mame code to skip the wait and simply set the flag.

doaa.xml, doaab.xml, doaae.xml, doab.xml
Code:
<cheat desc="Unlock Raidou">
    <script state="run">
    <action>:maincpu.pb@0x54fd56=01</action>
    </script>
</cheat>

doa.xml
Code:
<cheat desc="Unlock Raidou">
    <script state="run">
    <action>:maincpu.pb@0x54fd76=01</action>
    </script>
</cheat>

(workspace)
eqLy0CG.jpeg
 

Attachments

  • 1719474466306.png
    1719474466306.png
    241.8 KB · Views: 2
Last edited:

grap3fruitman

Well-Known Member
Standard Donor
m2emulator

doa.lua

Code:
require("model2")
function Init()

end

function unlockraidou(value)
I960_WriteByte(0x54fd56,0x01);

end

Options =
{
cheat={name="Unlock RAIDOU",value={"Off","On"},runfunc=unlockraidou}
}


Bonus:
Code:
require("model2")
function Init()
end
function Frame()
local gameState = I960_Readbyte (0x54F9D5)
if gameState==0x1
then
Model2_SetWideScreen(1)
Model2_SetStretchBlow(1)
Model2_SetStretchBHigh(0)
end 
end

function unlockraidou(value)
I960_WriteByte(0x54fd56,0x01);

end

function unlimitedtimesetting(value)
I960_WriteByte(0x54fd58,0xff);

end

function hidehealthbar(value)
I960_WriteByte(0x5555c8,0x00);

end

Options =
{
cheat1={name="Unlock RAIDOU",value={"Off","On"},runfunc=unlockraidou},
cheat2={name="Unlimited Time Setting",value={"Off","On"},runfunc=unlimitedtimesetting},
cheat3={name="Hide Health Bar",value={"Off","On"},runfunc=hidehealthbar}
}

Forgive me for any typos. Typed these up on a mobile device since the utility company knocked out the internet a few days ago. I was too excited not to share.
 
Last edited:

grap3fruitman

Well-Known Member
Standard Donor
If I'm reading the assembly correctly, Raidou simply unlocks after the "Total Time" counter reaches 25 days.
Can anyone test on hardware?
 

Derock

Well-Known Member
Mame

doaa.xml, doaab.xml, doaae.xml, doab.xml
Code:
<cheat desc="Unlock Raidou">
    <script state="run">
    <action>:maincpu.pb@0x54fd56=01</action>
    </script>
</cheat>

doa.xml
Code:
<cheat desc="Unlock Raidou">
    <script state="run">
    <action>:maincpu.pb@0x54fd76=01</action>
    </script>
</cheat>

eqLy0CG.jpeg

OVPI7pV.jpeg
So damn cool!!!

The only downside is that because P1 and P2 cursors starts at Kasumi and Jann Lee, this will look very awkward when starting the game after unlocking Raidou. Are you able to move Raidou's slot to a different location, maybe between Kasumi and Jann Lee or on the top row, maybe after Tina or between Bayman and Lei-Fang?
 
ALL DOA6 DOA5 DOA4 DOA3 DOA2U DOAD
Top