DeadOrAutohotkey - a bot that beats DOA5LR

Ciozun

Member
Honestly Why Make this? It kinda ruins Ranked the Only Way of PC players to connect with wel other players and fight....Actually glad i chose to get a refund from steam It was Kinda slow and No lobbys killed it But The Only thing I regret Is not using it for costume mods thats the only thing that makes the PC version awesome and No Lag So lol
Well I guess it's just for fun.
 

WAZAAAAA

Well-Known Member
:D Try to use Jann Lee unblockable kick (236K) at 3-4m from Haya!
Haya(busa?) can't use Jann Lee's unblockable kick. It would be cool though.

Honestly Why Make this? It kinda ruins Ranked the Only Way of PC players to connect with wel other players and fight....Actually glad i chose to get a refund from steam It was Kinda slow and No lobbys killed it But The Only thing I regret Is not using it for costume mods thats the only thing that makes the PC version awesome and No Lag So lol
The bot was written with offline play in mind. It's not my fault if people want to cheat online
1.0
 

XVideos

Member
How did you decipher the command format from the memory? Is there some readable scripts from the game installs that you were able to obtain the format?

I have always wondered how people were able to create bots on pc and consoles, but I haven't seen people describe the process of how they came up with it.
 

WAZAAAAA

Well-Known Member
How did you decipher the command format from the memory? Is there some readable scripts from the game installs that you were able to obtain the format?

I have always wondered how people were able to create bots on pc and consoles, but I haven't seen people describe the process of how they came up with it.
Not sure if I fully understood your question, I'll just give you some general guidelines.



I have used Cheat Engine to search the memory addresses (in game.exe) required to start coding a bot. The more you can find out about what the other player is doing, the more complicated and precise your response can be.

Memory addresses tell you what's happening in a program.

In DOA's case, I had to find the addresses for the following game mechanics on both Player 1 and Player 2 side: combocounter/currentanimationframe/currentmove/direction/distance/highmidlowground/movetype/movetypedetailed/stance/striketype/totalactiveframes/totalstartup. These are the names *I* gave to each, nothing's official. You can read what each of them means (and how to find them using CE) by reading documentation.txt. Most of them were pretty straightforward to find, here some examples:
P1_combocounter:
Do a 3 hit combo ingame with Player 1, scan 3 in CE. 5 hit combo = scan 5 etc. etc...
P2_totalactiveframes:
Open the ingame Move Details screen. Do any move. Check ingame how many startup frames it is let's say 11, scan 11. Do another move that is let's say 20, scan 20 etc. etc...

After I found all the necessary addresses, I coded a program with a programming language of choice (AutoHotkey) that monitors what's happening inside of the game every millisecond on Player 1 and Player 2 at those aforementioned addresses and then chooses what to do accordingly. Here's an actual piece of code I used inside of the bot to break neutral throws:
Code:
if (p2_movetype = 4 and p2_currentanimationframe < 4)
	5T()
Which basically means: "If player 2 has landed a throw (= 4) and such throw is in its first 3 frames (< 4) then press the throw button (5T()). What those 3 variables really mean is defined elsewhere, but I hope you still get the general idea.
 
Last edited:

XVideos

Member
combocounter/currentanimationframe/currentmove/direction/distance/highmidlowground/movetype/movetypedetailed/stance/striketype/totalactiveframes/totalstartup

But how did you find these in searches? I am guessing that once you find 1 piece of information of 1 character in the memory, the other related information will be close by. But can the engine actually pinpoint which frame your opponent is currently doing? The process of coming up with that table is what I am wondering about.

Also, I remember some programs also use relative locations that are changing all the time, that's why cheats I made on my own are always low level stuff. I don't know how to always find the exact same location of a certain thing being done like that.
 

WAZAAAAA

Well-Known Member
combocounter/currentanimationframe/currentmove/direction/distance/highmidlowground/movetype/movetypedetailed/stance/striketype/totalactiveframes/totalstartup

But how did you find these in searches? I am guessing that once you find 1 piece of information of 1 character in the memory, the other related information will be close by. But can the engine actually pinpoint which frame your opponent is currently doing? The process of coming up with that table is what I am wondering about.
No, I actually searched each value one at a time for P1 and then quickly "converted" them in bulk to P2. I was afraid that the values would be too much "scattered" around the memory (and they kinda were) so I just searched them manually. I've spent more time searching for values instead of actually writing code, lol.
Most of my scans started as "Unknown initial value".

Yes the game engine actually pinpoints the current animation frame for both player sides, thank God. Just start scanning from an Unknown initial value, play to the next frame > "Increased value by..." 1. CE Speedhack at 0,02 is useful to play in super slow motion.

Also, I remember some programs also use relative locations that are changing all the time, that's why cheats I made on my own are always low level stuff. I don't know how to always find the exact same location of a certain thing being done like that.
Addresses listed as green = static = good. They don't change the next time you open the game so you can "reuse" them.
Addresses listed as black = dynamic = bad. They will change the next time you open the game. You need POINTERS (they don't change) in case the game has Dynamic Memory Allocation on those... you can complete the CE tutorial for more information. In my bot, not even a single pointer was needed (thank GOD, they were all "green").
 

WAZAAAAA

Well-Known Member
Releasing version 1.3
- added compatibility with the Ver.1.05 update
- updated classMemory.ahk to version 2.4
- added low throw ceiling Izuna followup
- added a check to stop mashing Izuna inputs if certain followups failed to connect

EDIT: messed up the P2_stance value which is now fixed, the download link is the same
 
Last edited:

Adam2nt

New Member
Hello. A few days ago, DOA5 has been updated to version 1.06.
Should we wait for the new version of the bot?
 

WAZAAAAA

Well-Known Member
Hello. A few days ago, DOA5 has been updated to version 1.06.
Should we wait for the new version of the bot?
yes, done


21/APRIL/2016 - version 1.4
- added compatibility with the Ver.1.06 update
- added various stage transition Izuna throws/holds followups
- moved the memory addresses list into an external file. This way updating to newer versions in the future will be much easier even though the CPU usage has slightly increased as a consequence
- updated LAUNCHER.EXE to make the GUI smaller
- updated documentation.txt, explained a faster way to update .CT files
 

lampuiho

New Member
combocounter/currentanimationframe/currentmove/direction/distance/highmidlowground/movetype/movetypedetailed/stance/striketype/totalactiveframes/totalstartup
Also, I remember some programs also use relative locations that are changing all the time, that's why cheats I made on my own are always low level stuff. I don't know how to always find the exact same location of a certain thing being done like that.
if the game uses a singleton, you will find a pointer that always lead to the same spot. If you use a script to aobscan for a pattern that allocates memory for such singleton, then the script will find the pointer for every single version of the game (as long as the structure doesn't get changed).

most games are built with vc++ and may contain class information (if any class is inherited). You can also use that to your advantage. This is the basics that 15 years ago you don't find on the internet. (only if you join some secret irc chat group)

But you get to learn them when you try to understand how compilers work and want to optimise your code in assembly.
 

lampuiho

New Member
I was trying this thing out in survival mode and it got beaten when Kasumi showed up and kept doing some unholdable combos
 

WAZAAAAA

Well-Known Member
25/MAY/2016 - version 1.5
- added compatibility with the "Gust Mashup Set" update
- added followups to the Ongyoin throw even though it's never used by the bot itself
 

synce

Well-Known Member
This is kind of cool, reminds me of Tool Assisted/RZR Infiltration. Has anyone beat it yet?
 

CookingMama

Active Member
Someone was using a hold bot online (might have been this one might have not) but it fell to Honoka's shoulder easily. The shoulder forces the side step and the bot whiffs a grab and you shoulder again on the recovery for hi counter juggle damage.

From this I assume other people with unholdable attacks like this can beat it easily (LeiFang and Gen Fu come to mind).
 

WAZAAAAA

Well-Known Member
This is kind of cool, reminds me of Tool Assisted/RZR Infiltration. Has anyone beat it yet?
Someone was using a hold bot online (might have been this one might have not) but it fell to Honoka's shoulder easily. The shoulder forces the side step and the bot whiffs a grab and you shoulder again on the recovery for hi counter juggle damage.

From this I assume other people with unholdable attacks like this can beat it easily (LeiFang and Gen Fu come to mind).
It is very beatable online. Just keep doing what works, I haven't coded frame advantage punishes yet.
The problem arises when someone modifies it to play TOGETHER with the human player on command, pretty much like a win button. That's when it becomes nearly unstoppable (that 2.5% being mostly disconnections, going AFK, or my first DOA5 matches ever). In that unfortunate case, you're only winning rounds because the opponent lets you.

But even in that 50% human 50% tool assisted situation, unbearable lag can render the tool assisted part useless.
 
ALL DOA6 DOA5 DOA4 DOA3 DOA2U DOAD
Top