DOA1 Model 2 Arcade - Unlock RAIDOU

Running the machine for at least 25 days will unlock Raidou in the original arcade Dead or Alive.

(character select)
GIi5WuW.png

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
 
Last edited:
m2emulator

doaa.lua

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

function unlockraidou(value)
    I960_WriteByte(0x54fd56,0x1);
   
end

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


Bonus: Raiou Unlock plus Widescreen
Code:
require("model2")
function Init()
end
function Frame()
local gameState = I960_ReadByte(0x54F9D5)
if gameState==0x1
then
Model2_SetWideScreen(0)
Model2_SetStretchBLow(0)
Model2_SetStretchBHigh(0)
end
end


function unlockraidou(value)
    I960_WriteByte(0x54fd56,0x1);
   
end

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

These are for the doaa.zip rom included in many Model2Emulator rom-packs, which is different from the Mame redump version for some reason.
 
Last edited:
If I'm reading the assembly correctly, Raidou simply unlocks after the "Total Time" counter reaches 25 days.
Can anyone test on hardware?
 
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?
 
Actually, I just modified the LUA script to unlock Raidou by default.
Also, ideally (for me) I'd like to make it so it only is in wide screen for the Battle mode, but I'm unsure how best to find the exact hex location for the byte I need.
There's a specific byte that has the current game state, from what I recall it can have these values:
Code:
0x0 = Character Select
0x1 = Battle
0x2 = Attract mode (Tecmo, Press Start, and Demonstration cinematic)
0x3 = Credits

This is pretty close to the DOA1 Saturn byte which was the following:
Code:
0x0 Character Select
0x1 Battle
0x2 Attract Mode
0x3 Endings State (Cut content)
0x4 Name Entry
0x5 
0x6 Main Menu
0x7 Credits

If we can find the direct address of the byte then we could update the LUA script to do an if/else check for when the state is 0 or 2 and disable/enable widescreen to prevent the graphical distortions. If we also found a way to know when the demonstration cinematic is playing while the game state is 0x2 then we could enhance the script to enable the widescreen view only during the demonstration of the attract mode.
 
Figured it out.

Ideally, I'd be able to find the byte that says when the TECMO, PRESS START SCREEN, and DEMONSTRATION are playing, but until then this will set it to wide screen during Battle and the Credits and reset it to 4:3 to prevent corruption on any other state. Additionally, I have it unlocking raidou at the start of the game rather than selecting from the cheats menu (which can be turned off by selecting the cheat OFF).

EDIT: Found the byte that states if DEMONSTRATION is playing. I'd do it for Ranking display as well, but its tied to the when the same byte is 0x3 for displaying the second Press Start screen. For now I think this should be fine.

Code:
require("model2")
function Init()
  unlockraidou(0x01)
end

function Frame()
  local gameState = I960_ReadByte(0x54FC93)
  --0x0 = Character Select
  --0x1 = Battle
  --0x2 = Attract
  --0x3 = Credits
  
  local demoState = I960_ReadByte(0x5555CB)
  --0x0 = TECMO
  --0x1 = PRESS START
  --0x2 = DEMONSTRATION
  --0x3 = PRESS START + RANKING
  
  if gameState==0x1 or gameState==0x3 or (gameState==0x2 and demoState==0x2 ) then
    Model2_SetWideScreen(1)
    Model2_SetStretchBLow(1)
    Model2_SetStretchBHigh(1)
  else
    Model2_SetWideScreen(0)
    Model2_SetStretchBLow(0)
    Model2_SetStretchBHigh(0)
  end 
end

function PostDraw()
--local testState = I960_ReadByte(0x54FC93)
--Video_DrawText(20,20,testState,0xFFFFFF)
end

function unlockraidou(value)
  I960_WriteByte(0x54fd56,value);
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}
}

Theoretically, I could make a training mode script out of this if I delve enough into finding the bytes. Also, I couldn't get this to work with Cheat Engine, but using ArtMoney is what helped me locate the proper addresses.
 
Last edited:
@grap3fruitman So yeah, I added the post to the front page so feel free to add your social media links to the end of the story.

You're entitled to spruce your page up with additional information, comments and whatever else for readers. If you have any better-looking photos for the banner on the home page, also feel free to attach those. Maybe something in game or a clearer shot of the character select.

I’d like to add some of your other old school game pages, like the belly dancer character, but I’m not sure you did a write up for her specifically.

@ me if you want me to look into front paging something. Thanks for your contributions to FSD.
 
Last edited:
Someone needs to show this playable Raidou in the arcade version of Dead or Alive using an Emulator and upload it on YouTube with a 4K Quality! I want to see it so badly!! :D
 
I feel so astonished that I never know you can play as Raidou in the arcade version if you wait to wait 25 DAYS to play as him! But now I'm curious if anyone can unlock him but from the American Version of Dead or Alive with the English text Biography.
 
It's the same text.

Code:
RAIDOU
JAPAN
NO DATA
NO DATA
NO DATA
NO DATA
NO DATA
NO DATA
Yeah I know, it's just if only there's a footage of an Emulator Gameplay of the original Dead or Alive arcade game that I was wanting to look at with my own eyes especially how the Selection Screen would look if Raidou is on there. Hope someone would be kind to do that. :)
 
So I found the section of code that handles how many character select boxes to draw. If byte 0x00557bf4 is 8 then it draws four boxes on top and four on bottom; if it's 9 then it draws four boxes on top and five on bottom; but interestingly it looks like there's leftover code for 10, 11, and 12 person character selects.

Sadly there doesn't seem to be any conditions to set those values so the code goes unused. You may recall that DOA1 originally planned to have 12 playable characters (https://archive.org/details/doahistoryteamninjafreaks/page/n19/mode/2up) before Team Ninja settled on eight. Almost everything related to the unused characters has been deleted but I think it's fun finding any leftover bits.

1722411648576.png



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?
What a fantastic observation. I hadn't noticed until you pointed it out. I'm still slowly digging through the code but I'll keep an eye out and see if this is doable.
 
Hey can anyone send me an image of this Thumbnail showing DOA1 Raidou with the English Translated Text for me please? I was thinking of using it for a project.
 

@grap3fruitman If you want to attach this image to your story, I will replace the current banner with this one. I don't and can't edit an author storyline that isn't written by myself.

Hey can anyone send me an image of this Thumbnail showing DOA1 Raidou with the English Translated Text for me please? I was thinking of using it for a project.

You can always crop the image included in my post and get thumbnails for all of the characters? I'm not sure what text you would be looking for?
 
ALL DOA6 DOA5 DOA4 DOA3 DOA2U DOAD
Top