System [TUT] Fixing Anti-Air Lows

usagiZ

Well-Known Member
So, this continues to be a problem in DOA:

ThoughtfulUntimelyAmericanwirehair-size_restricted.gif
(gif by @WAZAAAAA )

Lows hitting you during airborne attacks, even when the hitbox shouldn't connect.


Other 3D fighters deal with this by making you invincible to lows during air attacks.
DOA has the capability to do this, but the coding for these moves is not consistent at all.

This problem could be still present in the upcoming DOA6:
(hopefully this will be patched by release or early update)
LoneFrighteningGermanwirehairedpointer-size_restricted.gif

(gif by @WAZAAAAA )

Obviously that's... less than ideal.

===========================================================================================================

So! Here's how to fix that:

(Guided Instructions in bottom left corner of video, via twitch chat.)

I use quite a few terms that I previously defined in the [DOA2++ thread] Look there if you have trouble following along.
Open the character.bin in a hex editor, HxD is what I'm using for this tut.
JkxRTwI.png

Find the slot (move-def) for the move you want to change, then change the move type value to 02
NznOLGz.png
UyGFcVV.png

The highlighted bit is the anim-def that this move uses. Things like hitbox, active frames, sound effects, facial expression etc. these are contained in the anim-def.
Also in the anim-def are the player status flags -- which are the things we need to edit next. Remember this value.
phoQNud.png

Go to the start of the file, and to the pointer located at 0x54
DOA2, 2U, OL, 3, and Dimensions have flipped pointers, so what would normally be AABBCCDD is now DDCCBBAA.
So we would actually read this as 0x00007AF0 (we can just ignore the leading zeroes and read it as 0x7AF0)

Now, taking the value for the anim-def that we got earlier (0x76, in my case) we need to multiply this by 0x4
76 x 4 = 1D8

And then add this to the pointer at 0x54 (0x7AF0)
1D8 + 7AF0 = 7CC8

Now we use the goto function to go to the location we just calculated:
7XZ8yEh.png

This leads to yet another pointer. Let's follow this one to finally get to the anim-def
Following the final pointer of [Step 2a], we get here, at the actual anim-def, or part of the coding for the move
r3MwvMZ.png

Since there won't be enough space here to add the flags we need, we have to copy-paste this data to an area that won't affect the rest of the file if we add things.
The quickest way to do that is to add it to the end of the file. Not ideal, but for the purposes of this tutorial it's fine.
j9lmibj.png

After copy-pasting the anim-def to the end of the file, now we can add things to the coding of this move without displacing the rest of the data.
Remember the location, circled in blue. (0x14440)
U52Jk6g.png

Highlighted in blue is the flag we need to add to make this invincible to lows.
(I placed it right after the highlighted yellow section, which is the on-hit sound effects for this move)

24 00 ?? 00 is the air/ground state for type 02 (jumping/aerial attack) move-defs - which is what we changed 3P to in the beginning of the tutorial to make this work.
We're using 24 00 01 00 to make this invincible to lows until otherwise specified (until an instance of 24 00 03 00 is reached in code)
Here's how to reactivate getting hit by lows -- for instance if your feet touch the ground, or you land later in the animation, it would be silly for lows to not hit you then.
All you have to do is specify which frame you want to reactivate that on (include 01 00 ?? 00 = on ?? frame) and then add the grounded flag (24 00 03 00)

Now, the next thing we need to do is to tell the game where the new move coding is.

So for that, we have to revisit the second to last pointer we got in [Step 2a]
The one we got after the calculation, which was 0x7CC8. Goto 7CC8

7XZ8yEh.png

Change this pointer to the new location, which we determined at the end of [Step 2b] was 0x14440.
We have to flip this pointer to make it work properly, so we need to input 40 44 01 00
ocKb7c2.png


Finally we can save and test, and the results should speak for themselves:
WoCukUt.gif

We have successfully turned 3P into a jumping attack that does NOT get hit by lows, despite the hitboxes touching.
I think it would be nice if a similar method could be done for every attack with legitimate jumping frames in every DOA, and hopefully the devs fix this issue for DOA6 or release a patch at a later date that fixes this problem, because it's frustrating to be swept out of the air by a low wakeup kick that doesn't even appear to touch you.

Change the move-def type to 02
JkxRTwI.png

NznOLGz.png


Find the anim-def
UyGFcVV.png

r3MwvMZ.png

Include flag [24 00 01 00] in the anim-def to specify the start of invincibility to lows
Include flag [24 00 03 00] in the anim-def to specify the end of invincibility to lows
bCJ3V50.png


Save and it should work as expected.
 
Last edited:

WAZAAAAA

Well-Known Member
While labbing DOA5LR I found some somehow related info about how jumping and airborne statuses work here https://www.freestepdodge.com/threads/details-of-the-airborne-status.6800/

so yeah there's supposed to be an aerial state that is immune to lows right:
Code:
0 Standing
1 Crouching
2 Down
3 Jumping
4 Jump (evade lows)
5 Jump
6 Squatting
it's number 4 but it's flawed, there's some kind of conflict going on:
Airborne + Jump (evade lows) = weak to Lows
Airborne + Crouching = weak to Highs (e.g. nerfed busa handstand)
 
Last edited:

Dr PaC

Well-Known Member
So, this continues to be a problem in DOA:

ThoughtfulUntimelyAmericanwirehair-size_restricted.gif
(gif by @WAZAAAAA )

Lows hitting you during airborne attacks, even when the hitbox shouldn't connect.


Other 3D fighters deal with this by making you invincible to lows during air attacks.
DOA has the capability to do this, but the coding for these moves is not consistent at all.

This problem could be still present in the upcoming DOA6:
(hopefully this will be patched by release or early update)
LoneFrighteningGermanwirehairedpointer-size_restricted.gif

(gif by @WAZAAAAA )

Obviously that's... less than ideal.

===========================================================================================================

So! Here's how to fix that:

(Guided Instructions in bottom left corner of video, via twitch chat.)

I use quite a few terms that I previously defined in the [DOA2++ thread] Look there if you have trouble following along.
Open the character.bin in a hex editor, HxD is what I'm using for this tut.
JkxRTwI.png

Find the slot (move-def) for the move you want to change, then change the move type value to 02
NznOLGz.png
UyGFcVV.png

The highlighted bit is the anim-def that this move uses. Things like hitbox, active frames, sound effects, facial expression etc. these are contained in the anim-def.
Also in the anim-def are the player status flags -- which are the things we need to edit next. Remember this value.
phoQNud.png

Go to the start of the file, and to the pointer located at 0x54
DOA2, 2U, OL, 3, and Dimensions have flipped pointers, so what would normally be AABBCCDD is now DDCCBBAA.
So we would actually read this as 0x00007AF0 (we can just ignore the leading zeroes and read it as 0x7AF0)

Now, taking the value for the anim-def that we got earlier (0x76, in my case) we need to multiply this by 0x4
76 x 4 = 1D8

And then add this to the pointer at 0x54 (0x7AF0)
1D8 + 7AF0 = 7CC8

Now we use the goto function to go to the location we just calculated:
7XZ8yEh.png

This leads to yet another pointer. Let's follow this one to finally get to the anim-def
Following the final pointer of [Step 2a], we get here, at the actual anim-def, or part of the coding for the move
r3MwvMZ.png

Since there won't be enough space here to add the flags we need, we have to copy-paste this data to an area that won't affect the rest of the file if we add things.
The quickest way to do that is to add it to the end of the file. Not ideal, but for the purposes of this tutorial it's fine.
j9lmibj.png

After copy-pasting the anim-def to the end of the file, now we can add things to the coding of this move without displacing the rest of the data.
Remember the location, circled in blue. (0x14440)
U52Jk6g.png

Highlighted in blue is the flag we need to add to make this invincible to lows.
(I placed it right after the highlighted yellow section, which is the on-hit sound effects for this move)

24 00 ?? 00 is the air/ground state for type 02 (jumping/aerial attack) move-defs - which is what we changed 3P to in the beginning of the tutorial to make this work.
We're using 24 00 01 00 to make this invincible to lows until otherwise specified (until an instance of 24 00 03 00 is reached in code)
Here's how to reactivate getting hit by lows -- for instance if your feet touch the ground, or you land later in the animation, it would be silly for lows to not hit you then.
All you have to do is specify which frame you want to reactivate that on (include 01 00 ?? 00 = on ?? frame) and then add the grounded flag (24 00 03 00)

Now, the next thing we need to do is to tell the game where the new move coding is.

So for that, we have to revisit the second to last pointer we got in [Step 2a]
The one we got after the calculation, which was 0x7CC8. Goto 7CC8

7XZ8yEh.png

Change this pointer to the new location, which we determined at the end of [Step 2b] was 0x14440.
We have to flip this pointer to make it work properly, so we need to input 40 44 01 00
ocKb7c2.png


Finally we can save and test, and the results should speak for themselves:
WoCukUt.gif

We have successfully turned 3P into a jumping attack that does NOT get hit by lows, despite the hitboxes touching.
I think it would be nice if a similar method could be done for every attack with legitimate jumping frames in every DOA, and hopefully the devs fix this issue for DOA6 or release a patch at a later date that fixes this problem, because it's frustrating to be swept out of the air by a low wakeup kick that doesn't even appear to touch you.

Change the move-def type to 02
JkxRTwI.png

NznOLGz.png


Find the anim-def
UyGFcVV.png

r3MwvMZ.png

Include flag [24 00 01 00] in the anim-def to specify the start of invincibility to lows
Include flag [24 00 03 00] in the anim-def to specify the end of invincibility to lows
bCJ3V50.png


Save and it should work as expected.
Like Guile from SFV
 

usagiZ

Well-Known Member
While labbing DOA5LR I found some somehow related info about how jumping and airborne statuses work here https://www.freestepdodge.com/threads/details-of-the-airborne-status.6800/

so yeah there's supposed to be an aerial state that is immune to lows right:
Code:
0 Standing
1 Crouching
2 Down
3 Jumping
4 Jump (evade lows)
5 Jump
6 Squatting
it's number 4 but it's flawed, there's some kind of conflict going on. If you are Jump (evade lows) + Airborne at the same time, Lows can hit you.
Same conflict exists for Crouching. Crouching+Airborne = no longer immune to Highs (e.g. nerfed busa handstand)

Awesome, I didn't see this before. Nice work!
Yeah, it's weird that the player-states don't dictate what can and can't hit, by default, across the board.
The game seems to require that you include certain flags in the coding of these moves to allow / disallow certain strikes from hitting you during the moves themselves.

In DOA2U, 3, 4, and Dimensions, the flag for crouching status + immune to Highs is [10 00], so adding that to any move's code makes you immune to highs until the move is over, or until you switch animations during the attack. This flag also makes you receive crouching get-hit properties if you're hit during them.

A different player status flag [1F 00 03 00] (I think this one is counter hit?) also sometimes make you airborne - and I haven't figured out what makes it behave that way yet.
Downed is [1F 00 01 00], which is also the flag that allows tech rolling in the older games when used in a get-hit property.

Rather than allowing for more precision by using more unique values, lots of the flags seem to activate multiple things.
Like the flag for deactivating hitboxes is also the flag that allows tag switching [05 00]

Assuming they haven't completely overhauled the way they code the newer games, I'd guess that the -getting hit by lows while airborne- problem is similar to the older games, and that they probably just aren't including essential player state flags in the 'anim-def' / move coding.
 
Last edited:

usagiZ

Well-Known Member
@WAZAAAAA Wowww. I mean, they can still make that true with a patch - but I'm not sure the devs think it's an issue :/
They'd have to go through each character's moveset deciding which moves get i-frames to lows, which might take a while if only a few people were working on it.

It honestly shouldn't take too long to add a few more flags to specific moves though...
 
ALL DOA6 DOA5 DOA4 DOA3 DOA2U DOAD
Top