[DOA2++] Moveset Editing Project

usagiZ

Well-Known Member
@Gultigargar Yeah, I'd say a lot of your criticisms are valid - and I do understand how it can come across, to you, as having a lot of DOA4 elements - and, I didn't intend for anything I did to mimic DOA4, other than the added strings. I'm definitely not trying to emulate 4's mechanics...
I DID port tons of DOA4 animations, because there were lots of animation improvements. The DOA4 2P had more range than DOA2's for most characters - which I really think is more useful to characters like Ayane, and Kasumi - though I do notice they have slower recovery, which is an easy fix.

Ein's 1P functions similarly to Tina's 1P, and even Hitomi's 1P. It has slower recovery, though. A "DOA4 1P" is the trip-stun on CH?
Ein's parry is definitely a little much, I'm not sure what to do with it though. It was originally going to be an advanced mid-kick hold, exclusively.
There was a marked effort to make the divide between Ein and Hitomi's movesets much wider.

About the stun-game: Going back to 2 from 3.1 or even from just 3, makes it clear that 2 has a less fleshed out stun-game in comparison, due to lots of hit-reactions being changed in 3 with revised animations. There wasn't a lot of "guessing" in 2, due to the stun game being very light - and that's fine, most people like that sort of thing in a fighter - but every DOA after 2 is more stun-game heavy. Even 3.1 has longer/revised strings to make up for the added focus on stuns.

Also - I saw your DOA3++ thread, I had a few things I wanted to mention, but I thought it'd be best if I stayed in my lane. :confused:
You've made pretty useful improvements to the characters with your mod. Good work, as well!

I can probably whip up a quick fix for a few of the issues you've run into - or maybe a quick tutorial on how to fix them - if you're interested.

-----------------

At the end of the day, most people really enjoy DOA3.1 and see it as the definition of the DOA series- and If I set out to make 2U like 3.1, I'd be better off just playing 3.1, because it already exists. (I hope that doesn't come across as abrasive. No hard feelings! D: )

Seeing as how It's not *complete* yet, your ideas will help me understand the changes that should be taken into consideration for the "finalized" release - so this is all useful commentary.

I encourage anyone following the thread to test the move-sets, if you can, and give me some feedback on things you do like, or things you don't! It will be extremely helpful to know what works and what doesn't.


Thanks again!
 

leidoa

Member
i really like this mod to be honest it doesn't feel like doa4 or 5 , it feels like a new game ;)
i like genfu :9::K::K: it turned out to be very nice , ayane stilll needs her :8::K::K::K: , :6::6::K::K::K:
i want kasumi to have her doa4 :9::K: placed in :8::P: and i think you should give her doa5 :2::K::K: and keep :2_::K::K: for kasumi alpha so they don't feel similar :confused:

after all i think the ideal mod is doa4 with a few new moves and smoother gameplay and that's it:)
 

Gultigargar

Well-Known Member
Also - I saw your DOA3++ thread, I had a few things I wanted to mention, but I thought it'd be best if I stayed in my lane. :confused:
You've made pretty useful improvements to the characters with your mod. Good work, as well!

I can probably whip up a quick fix for a few of the issues you've run into - or maybe a quick tutorial on how to fix them - if you're interested.
Sure, go right ahead.
 

usagiZ

Well-Known Member
Documentation has begun~
here's the first little bit of info I could get together. I'll update this post with more later.


VxfKuQd.png


This is the table of offsets to most of the important data in the .bin.

88 00 00 00 points to the beginning of the move-definitions chunk. Each move-def is 8 byte-pairs.
The first one in the chunk is 00 00 00 00 FF 03 03 00 (which you can see right after the higlighted bit) This is the fight-stance.

A better example would be something like 8B 00 03 03 2B 16 16 01.
8B 00 is the anim-def used. For more about Anim-defs, see "OFFSET 21"
The first 03 indicates a crouched stance after the move is completed.
The second 03 indicates that it's a move that does damage and is holdable.
(other values can be seen here as well. 02 has the same effect as 03, afaik, 05 is for hold animations, 06 is throws I think. There are more.)
2B is the property it uses.
I still don't know what the 16 16 01 means in this case.
Most move-defs have different values here, and holds/throws usually have similar if not matching values for the throw-ee and the thrower.

Each move-def slot has its corresponding wall-splat/tracking/camera properties stored somewhere in the executable. Changing the animation doesn't change the wall-splat, tracking, or camera properties.

Explained in depth here.
This leads to a chunk, which is a table of offsets.
Each of these point to yet another table of offsets
Each of these offsets point to an input definition (or input-def) in the Input-Chunk.

This leads to the table of properties. Each property is 0x24 byte pairs, and they look like this
4MucmdL.png

This is DOA3.1 Ayane's standing punch, or :P:

Starting with the first yellow data in the image--
Each property is 2 flipped byte-pairs.
The property data reads like this:
normal hit front facing, normal hit back facing, guard, counter hit front facing, counter hit back facing.
(the following info pertains to the color-coded text directly below)
1E 40 27 40 00 40 1E 40 27 40
the dark yellow is normal hit: front = 1E 40, and back = 27 40.
the grey is guard property = 00 40
the green is counter hit: front = 1E 40, and back = 27 40
--on a side note, something like 1E 40 would be 1E 00 in DOA2U, A2 41 in 3 would be A2 01 in 2U, etc.

Pale-red
These are the properties on crouching opponents.
It follows the same pattern as the yellow data:
normal hit ff, normal hit bf, guard, counter hit ff, counter hit bf.

In the image, it's a string of FF's.
This indicates that it doesn't hit crouching enemies.

Light blue
These two are the airborne properties, front, and back-facing.

Green
These two indicate the hold-detection, and the stance effects (open vs closed)
00 00 is a high punch, 01 00 is a high kick, 02 00 is a mid punch, 03 00 is mid kick, etc.
There are special values for deflect/side-step holds
If you give someone something like a limbo stun, and it does an incorrect stun in certain stances, you need to change the stance effect value to fix it.

Light yellow
These two byte-pairs are used in specific moves, like Hayabusa's 4K
It's basically an on-hit requirement and tells the game which move to switch to on-hit.
FF FF means do nothing on-hit.

Purple
These go as follows
09 02 01 00 00
First value = ? (don't remember right now, sorry!)
Second value = Disadvantage on guard (-2 in this case)
Third value = Disadvantage on hit (only works for normal hit, I believe) (-1 in this case)
Fourth value = Anything but 00 here lowers launch height on counter hit - I used 01 in the patch for Ayane's :K::K:, iirc.
Fifth value = ? (not sure)

Red
This value is for damage
In this case, 0A means it deals 10 points of damage.

This offset leads to a table of character-specific Property-Definitions, starting with individual guard properties and moving to character specific stuns / hit effects.

 
Last edited:

usagiZ

Well-Known Member
Further Explanation of the Input-Def data chunk

Follow Offset 2, from this table:
VxfKuQd.png


And you'll end up here:

JVMqVMi.png

These offsets lead to "groups" of input offsets. There are 0x38 groups (0xE0 divided by 4) total for DOA3.1.
There are 0x30 (0xC0 divided by 4) total for 2U.

To clarify what I mean by "groups": The one highlighted in red leads to the offset group for all punch string inputs.
If we follow it, we end up here:
0Y06JBi.png

These offset groups are terminated by a zeroed offset: 00 00 00 00
The red highlighted offset points to 3.1 Ayane's :P::P:

If we follow it, we end up at the last byte of the input-def for her :P::P:
HLNiQ7Y.png

The data is as follows:
08 01 22 8A 00 12 64 00 02 02 8A 00 13
The red indicates which move-def slot this input activates.

To find out which move-def corresponds to this value, you can do some quick calculations

move-def offset (mdo) = Value x 8 (hex)
+ 88 (hex)
Everything is byte-flipped, for the most part, so you must flip Value before doing your calculations
08 01 = 01 08 = 0108 = 108 (still hex)

We end up with: 108 x 8 + 88 = 8C8

So the move-def slot for her :P::P: would be located at 0x8C8
If we go there, we see this:

Y1ExCpk.png

We now know that :P::P: uses anim-def 00 01 (or 01 00, flipped) is standing after completion (00), is an attack (03) and uses propery 1C.

Back to the input-def:
08 01 22 8A 00 12 64 00 02 02 8A 00 13
The grey 22 is constant for all DOA3 inputs. for 2U this value is always 1F.
The blue values indicate which attack this string is connected to, or comes after. These must match.
----8A 00 in DOA3 is standing punch, and it's hard-coded in the executable.
DOA3.1
8A 00 = :P:
8B 00 = :3::P:
8C 00 = :2::P:
8D 00 = :K:
8E 00 = :3::K:
8F 00 = :2::K:
The dark yellow, I'm unsure of. seems to be 12 in most cases for DOA3, and 10 in most cases for 2U.
The pink, 64 00 is how long the window of input is, in frames, I believe. In this case it's 0x64 frames (100 frames)
----I've made this number smaller for certain attacks in the patch to lessen the need for free-cancelling.
the teal values are the button requirement, in this case it's 02 02, or :P:
01 02 = :F:
02 02 = :P:
04 02 = :K:
03 06 = :F+P:
05 06 = :F+K:
06 06 = :P+K:
07 06 = :F+P+K:
Changing the value for the button requirement doesn't work on its own.
The input-def MUST be referenced in the corresponding offset group for that specific button requirement, or it won't work.
The white 13 at the end seems to be the conditions that must be met for the input to register. 13 seems to be the default for DOA3. It defaults to 11 for 2U.
Other values here change when this input can be done:
10 - only trigger if held down before move initiates
11 - standard requirement always trigger
13 - conditional (unsure)
17 - only trigger if opponent in air
1A - only trigger if move ended
20 - only if back to wall?
F1 00 22 80 03 40 03 80 03 20 00 07 06
In this case, there are directional inputs, in green.
Her taunt uses move-def 00 F1, located at 0x810

80 03 = press back, 40 03 = press forwards, so the directional input for this input-def would be :4::6::4:

----The 03's after the the directional inputs deal with the type of input.
----03 is something like :6:, while 05 would mean something like :6_: instead.
----Other values can be found here.


The input window is 0x20 frames (32 frames in decimal.)
and the button requirement is :F+P+K:

80 = :4:, 40 = :6:, 10 = :2:, 20 = :8:.
You add to get diagonals (hex):
80 + 10 = 90 = :1:
80 + 20 = A0 = :7:
40 + 10 = 50 = :3:
40 + 20 = 60 = :9:

That's all for now. I'll continue with the documentation when I can. :)
 
Last edited:

usagiZ

Well-Known Member
OFFSET 21 - "Animation-Definitions Offset Table"
Located at 0x54
C3YoF8n.png


This leads to a table of offsets that point to what I will be calling the "Animation-Definitions", or "Anim-defs"
oWvIKDa.png

The image only shows a small portion of the data chunk.
Each of these offsets point to "Animation-Definitions", or "Anim-defs"
We'll be exploring the anim-def for Ayane's :P::P:
Our previous calculations show that the anim-def used for :P::P: was 00 01, or 100(hex)
To continue, we need to first find the offset that the anim-def uses.
To find out the offset that an anim-def uses, we can do a another simple calculation, which is as follows:

anim-def * 4 + OFFSET 21 (flipped) = anim-def offset

so: 100 * 4 + 7D00 (flip 00 7D) = 8100

If we go to 0x8100, we end up here:
GyZIZIR.png



Following this offset will lead us to the anim-def data for :P::P:
8MWFAzK.png

*data is read in 2 byte-pairs*
Light-red is a value that I'm calling the Motion-Reference, or Mot-Ref. This value references which animation to use from the character.mot file, it's not always the same as the Anim-Def value, so it's important to arrive here by doing the calculation stated above (anim-def * 4 + OFFSET 21 (flipped)) and then doing a Goto with the resulting offset.
Light-green is the frame the animation starts on
Light-blue is an animation speed (a multiplier, I think). 02 00 is constant, while 0A 00 can be changed.
---Higher values = faster, Lower values = slower
This flag makes the animation looks strange (stop-motion / claymation effect) with any other value than 0A 00
There's another flag that I recommend using instead, which is (37 00 0A 00). This one seems to interpolate between the animation frames, giving a smooth result.
Light-purple is for animation blending. (With the previous animation in a string)
---(3B 00 ?? ??) is how long (in frames?) to blend, (25 00 ?? ??) is how far into the animation (in frames) to blend.
Dark-yellow is for hit-connect sounds (22 00 ?? ??) is for Normal Hit (I think), (2D 00 ?? ??) is for Stun Threshhold/Launch
Green is for hand shape/hand animation. 2E 00 is constant, I believe. The 02 00 means both hands change to this shape (make this value 00 00 or 01 00 to change only the left or right hand). The next value, 01 00 indicates closed fist.
00 00 - default
01 00 - closed fist
220px-Leopard_KungFu.jpg
06 00 - rigid fingers / chop
0A 00 - arched fingers
0D 00 - finger gun
Red is for sound effect. This one indicates: On frame 0x7 (01 00 07 00) play sound effect 0x14 (03 00 14 00)
03 00 ?? 00 is the play sound effect flag, and the ?? is the sound effect (different from voice clips)
11 = hit ground
16 = genfu swoosh
1c = somersault
1e = jump soft
1f = jump strong?
20 = guard
21 = throw connect
38 = tengu strong wind
39 = tengu flying swoosh
50 = menu sound / (menu select?)
53 = menu cancel
---anim-defs with voice-clips vary in the ways this part is coded.
That would look something like (03 00 AA BB 42 00 05 00) where the AA would be the sound effect from the character file BB) the (42 00 05 00) isn't constant, sometimes different values entirely.
Blue is for hitbox activation.
---This one says: on frame 0x9, initiate hitbox on left hand *I think it's left* (01 00 09), (21 00 02 00), then at frame 0xB, deactivate hitboxes (01 00 0B 00), (05 00). The (1A 00) and the (1B 00) in this bit of code that I didn't mention seem to be present in most hitbox activations, but I'm not sure what they do yet.
Grey is to allow blending/allow a follow-up. Can be added to other anim-defs to allow string follow-ups. (39 00) lets you delay an attack until the animation ends.
Another flag that allows followup is (09 00) but that one is the strict timing flag. It's used in things like Kasumi's :9::P::K: so that you can't delay it.

Other notable data is the (45 00 ?? ?? 08 00), near the end. The ??'s control character rotation upon completion, in degrees.
---B4 00 is a common value to see here. B4 00 = 00B4 = 180 = back-turned upon completion.
The (47 00 ?? ??) at the end controls how many frames it takes to transition back into your stance. This doesn't affect recovery frames, afaik. I've seen this also be used earlier in anim-defs to affect movement during transitions between moves in a string.

All anim-defs must be terminated by "FF FF"

02 00 0A 00 speed control, normal speed
03 00 ?? 00 play sound effect
11 = hit ground
16 = genfu swoosh
1c = somersault
1e = jump soft
1f = jump strong?
20 = guard
21 = throw connect
38 = tengu strong wind
39 = tengu flying swoosh
50 = menu sound / (menu select?)
53 = menu cancel
04 00 activate hitbox (used for throws and holds mostly)
05 00 deactivate hitbox during animation
07 00 infinite loop (used in fight stances / idle poses / falling down stairs / etc)
10 00 crouching hitbox / can add to an attack to force a high crush
11 00 01 00 low crush? / 11 00 00 00 default (doesn't seem to work unless the move-def type is set to 02)
13 00 wall hit status? (I've seen this used in wall-hit anim-defs)
14 00 01 00 can be hit in air? (This is in a lot of hit property anim-defs)
15 00 ?? 00 to pause animation for ?? frames
16 00 stop animation
18 00 rotate animation (and hitboxes) 180 deg
19 00 enable throw hitbox/enable holds? (can be added to a stun to allow throwing the opponent during that stun)
1C 00 enables ground commands (down attack / ground throw) during the animation that this flag is in
1F 00 ?? 00 Player state
00 00 = default
01 00 = ground state / invincible to everything except down attacks / ground throws
02 00 = in air?
03 00 = counter?
04 00 = attacking
20 00 ?? 00 player state 2?
00 00 = invincible to strikes, can be thrown
01 00 = default?
You can combine both player states to effectively make an invincibility state
1F 00 01 00 20 00 00 00
or you can just use 1F 00 01 00
without the 1C 00 flag accompanying the 1F 00 01 00 the opponent can't initiate down attacks, which would be the only way they could damage.
21 00 ?? 00 activate hitbox
00 00 = doesn't connect
01 00 = all-body hitbox (can be used to allow a move like a tackle hit an opponent that's very low to the ground during a juggle)
02 00 = hand (left, I think)
03 00 = other hand
05 00 = foot
06 00 = other foot
I'll update this later. All characters seem to have special character specific hitboxes.
22 00 ?? 00 25 00 ?? 00 = on hit sound effect 1 and 2 (normal hit / counter hit)
23 00 play hit effect sound (this one's used during hit property anim-defs to allow the hit sounds from the flag above to play during it)
35 00 ?? 00 ground shake
36 00 ?? 00 pause for ?? frames while moving forward??
37 00 0A 00 speed control 2, better result - has frame interpolation
46 00 loop, no hitboxes
48 00 multi-hit flag. Multi-hit moves have this flag before the next hitbox activation. (can be used on holds to allow hicounter throw punish post-active-frames)
4A 00 ?? 00 appear - the ?? is how many frames it takes to appear completely (used in teleport moves)
4B 00 ?? 00 disappear - the ?? is how many frames it takes to disappear completely (used in teleport moves)

An attack I just made up for this example:
00 00 95 00 01 00 02 00 0A 00 01 00 0D 00 21 00
01 00
1A 00 01 00 0F 00 05 00 1B 00 39 00 01 00
1F 00
2A 00 01 00 45 00 00 00 0A 00 FF FF

This move uses animation 0x95 starting at frame 1 (95 00 01 00)
Uses normal speed (02 00 0A 00)
And at frame 0xD initiates an all-body hitbox (01 00 0D 00) , (21 00 01 00)
Then at frame 0xF, the hitbox is terminated, and allows a string follow-up (01 00 0F 00) , (05 00), (39 00)
At frame 0x1F the rest of the coding is info for open vs closed stance, rotation after animation ends, and finally, number of frames it takes to blend back into stance (2A 00 01 00), (45 00 00 00), (0A 00)
Move coding is always terminated with FF FF
(the move ends at the end of the animation, not at the last "at this frame" flag.)

A quick note -- Because I didn't add the 22 00 ?? 00 25 00 ?? 00 flag, when this example move hits, there won't be correct sound effects unless the hit property calls its own sound effects.
 
Last edited:

usagiZ

Well-Known Member
Hey again, to anyone watching the thread.
Here's what's been worked on while I've been away:

There have been a few global changes in the general gameplay since the last update.
The juggles have been very slightly toned down - along with the stun game.
Too many moves had re-launch properties / too many moves had deep stuns on normal hit.

Along those lines, I've figured out how to make stuns that can't immediately be hold-escaped, and stuns that can't be hold-escaped at all - like the "Critical Burst" from DOA5.

I pulled the download from the OP due to several errors in the move-sets. There were far too many problems, because they were rushed so I could get some feedback. I hope the amount of errors in the test characters didn't disappoint anyone. :confused:

1. Should parries do more damage (a constant 50 or something) to give an incentive to use them, seeing as they don't scale?
Hitomi and Ein had been given parries, which can't be performed while in stun.
Parry damage was a constant 25 - while holds normally do 43 and scale with counter and hi-counter.
Due to the hardcoding, the parries don't damage-scale with counter-hold and hi-counter-hold.

2. Should there be stuns that aren't immediately hold-escapable? (a "Critical Burst" of sorts) (Why / Why not, and, How / For which character)

3. If you main a character, or have character-specific ideas, and are able to play-test the patch, feel free to share your ideas here. Alternatively, you can invite me to a conversation and we'll discuss ideas there.

As for the documentation, that will continue as soon as possible.
Thanks for your time.
 

Gultigargar

Well-Known Member
My 5 cents:

Just having a parry makes a character pretty scary to go up against. Deflecting both mid- and high attacks at once is no joke, and they usually allow for follow-ups or at least give frame advantage, so I think keeping them at 25 damage is what I prefer. Alternatively, you could also make the damage identical to the damage of attacks from other characters with parries that do no damage but have guaranteed follow-up attack.

It's really cool that you found a way to change when you can hold out of stun, but it seems like something where even a minor tweak could drastically alter the game balance and create unforeseen side effects. (I'm assuming that the change is applied to the animation itself, and isn't possible to modify on just individual attacks...?) Unless you have done so already, I'd start by seeing if there are any changes between when you can hold in DOA2, 3 and 4 and compare.

Other than that, I think you should be good using your own judgement. You do seem like you have pretty clearly in mind what you want to do with your mod.
 

leidoa

Member
Hey again, to anyone watching the thread.
Here's what's been worked on while I've been away:

There have been a few global changes in the general gameplay since the last update.
The juggles have been very slightly toned down - along with the stun game.
Too many moves had re-launch properties / too many moves had deep stuns on normal hit.

Along those lines, I've figured out how to make stuns that can't immediately be hold-escaped, and stuns that can't be hold-escaped at all - like the "Critical Burst" from DOA5.

I pulled the download from the OP due to several errors in the move-sets. There were far too many problems, because they were rushed so I could get some feedback. I hope the amount of errors in the test characters didn't disappoint anyone. :confused:

1. Should parries do more damage (a constant 50 or something) to give an incentive to use them, seeing as they don't scale?
Hitomi and Ein had been given parries, which can't be performed while in stun.
Parry damage was a constant 25 - while holds normally do 43 and scale with counter and hi-counter.
Due to the hardcoding, the parries don't damage-scale with counter-hold and hi-counter-hold.

2. Should there be stuns that aren't immediately hold-escapable? (a "Critical Burst" of sorts) (Why / Why not, and, How / For which character)

3. If you main a character, or have character-specific ideas, and are able to play-test the patch, feel free to share your ideas here. Alternatively, you can invite me to a conversation and we'll discuss ideas there.

As for the documentation, that will continue as soon as possible.
Thanks for your time.


make a gameplay video so we can see if it's good idea or not ;)

also have you find a way to change old reaction animation with new ones ??
 

usagiZ

Well-Known Member
@Gultigargar You're probably right - It seems like a good idea to keep it at 25 damage, considering all of that. And, yeah, with the help of everyone who's contributed to the thread, I have a clearer idea of where this is headed.
Thanks for your input.

They can be changed globally, or for individuals. Each character has a few of their own stuns defined within their character.bin. Most characters have unused stuns, which can be overwritten with new ones. I forgot to mention that character-specific stuns can also ignore the stun threshold.

Stuns have properties based on how their anim-def's are coded, but there's also a section in the character.bin that specifically defines stuns.
I was able to include some stun animations in an individual's motions as a flawed workaround to the file size limit on the shared motions. (flawed, because individuals' motions have a size limit as well, though much higher than the shared-motions limit.)

I honestly don't understand why stuns aren't all globally defined. Character-specific only makes sense for the guard properties, because characters use unique animations for guarding - but the rest of the stuns use global animations. :confused:

Also, the filesize limit on the motions may have something to do with data in the character.bin. If so, there should be a way to increase the filesize limit - which would mean porting more hit-reactions, and porting more throws. Testing will continue.

@leidoa I'll see if I can put together a short demonstration of the stun edits. I can't really say when that will happen though.
There's a better way of manually porting animations that reduces the file inflation, but the filesize limit on the common motions (the hit-reactions, or "Stuns") is VERY strict. I added a very small new stun, and it was a glitchy mess in-game. Due to the limit, the new stun data was overwritten with other data in ram.


As the info on stuns is a relatively new finding, I'll probably explain this section of the .bin in depth as soon as I collect my thoughts on this.
 

usagiZ

Well-Known Member
Update:
Thanks to anyone still watching the thread, I know it's been a long time.

Work on the gameplay patch will resume as planned.
Documentation will also resume. Probably the most drastic modification one can do to these movesets is importing an animation, which is what the next tutorial will cover. Stay tuned~

In the mean time, I've finally figured out how to create teleport attacks, in a similar fashion to DOA4 Hayabusa and 5U/LR Phase-4.
 
Last edited:

KasumiLover

xX_APO_Prince_Xx
Premium Donor
Update:
Thanks to anyone still watching the thread, I know it's been a long time.

Work on the gameplay patch will resume as planned.
Documentation will also resume. Probably the most drastic modification one can do to these movesets is importing an animation, which is what the next tutorial will cover. Stay tuned~

In the mean time, I've finally figured out how to create teleport attacks, in a similar fashion to DOA4 Hayabusa and 5U/LR Phase-4.
This move list looks WAYYY more fun than Phase's current one!☆
 

usagiZ

Well-Known Member
This move list looks WAYYY more fun than Phase's current one!☆
Thanks, I'm glad you think so~
Phase's teleports need quite a bit of precision to execute, but that doesn't really fit with the general mechanics of 2U's engine, so I decided that Alpha's teleports would be a lot simpler with much less strict timing.
 

usagiZ

Well-Known Member
Alright, so here's the animation porting tutorial, in all its tedium. This will cover both porting the animation and getting it to work in game over an existing move.
We're going to be porting Jann Lee's 4P from DOA4 over his 46P in DOAO.
The difference in those animations is only subtle, so it might not be as much of a wow factor as you'd hoped.

There is a LOT of information in this tutorial, so it might be a little hard to understand. Please only use this tutorial as a guide for the methods used. If you try to follow along exactly, you'll get different values, because we won't be starting off with the same files. I didn't have much time to proofread so there may be spelling, grammar, syntax errors, etc.

If you have questions about something in the tutorial, I may be able to answer them. Feel free to ask.
I won't port an animation for you though~ lol.

A hex editor - preferably one that can perform operations like addition / subtraction / byte flip. I'll be using Hex Workshop for this tutorial. There's a bookmarking tool in this program that I use at every opportunity when porting to make the workflow easier. I'll be talking about bookmarking things very often, so I definitely recommend it.
Multiple moveset files for porting (character.bin, character.mot)
This tutorial uses the terminology previously defined, such as "Anim-Def", "Move-Def", "Input-Def", etc. If you aren't familiar with those terms, please visit this post for more information.
Before we start, make sure you have a backup of your original DOAO "*\data\ingame\bin" folder and all your original files.
Open up janlee.bin in the editor. First we need to find the anim-def for 46P. A "quick" way to do that is to ctrl+f and search for the input in the Input-Def data chunk that's located directly after all the data of OFFSET 9 (character specific property-definitions).
08iR5mb.png

OFFSET 9 highlighted in red.
cQvLXDz.png

Highlighted in red marks the beginning of the input-def chunk. Dark grey is OFFSET 9's property-defs.

Based on the info in the OFFSET 2 explanation, we know that 02 02 is for punch inputs, so we can now do a search for 02 02, starting at the input-def highlighted in red above, until we get to an input-def that also contains something like 80__40__ for the 46 directional input like in the image below.
Z4GmoV8.png


Now we know the move-def slot is 15 01 or 0x115, so let's use the calculation to get to its location.
If you want to double check that you have the correct input-def, backup the original file, then change the move-def slot value from 15 01 to something else, like 16 01, save, and test the command in-game. It should do something completely different with different hit properties and such, because you've referenced a different move-def. Make sure you change it back after testing.
The calculation is as follows: move-def * 8(bytes in each move-def) + 88(OFFSET 1) = move-def location
115 * 8 + 88 = 930
So the move-def slot is at 0x930

Hit Ctrl+G to open up the Goto Menu and put 930 in the blank to Goto 0x930.
b68jUc0.png

Now we can see this Move-Def uses Anim-Def 99 00 (00 99)
We need to do another calculation to find the anim-def data for 99 00, so we can find out the Motion-Reference, or "Mot-Ref"
Anim-Def * 4 + OFFSET 21 (flipped) = Anim-Def Offset
(OFFSET 21 is at 0x54 of the character.bin file)
99 * 4 + 6AC8 = 6D2C

Goto 0x6D2C, and now we know the anim-def data for anim-def 99 00 is at 0x9826
cFiFk4I.png


Goto 0x9826
R38qhQt.png

Now we know that the Mot-Ref is 99 00, the same as the anim-def. They're not always the same, so it's important to arrive here using the calculations and the Goto command.
We could have done a ctrl+f for 99 00 01 00 02 00 0A 00 and arrived here as well, but that would've been cutting corners, and if you get the wrong Mot-Ref, you'll end up replacing the wrong animation. (the 01 00 02 00 0A 00 after the 99 00 is how most anim-defs are set up)
Open janlee.mot in the editor.
We discovered the Mot-Ref for 46P's animation is 99 00, or 0x99.
Multiply that by 0x4 (number of bytes in each offset) to get to the offset for the location of the "Bones Table" of this animation.
99 * 4 = 264
Goto 0x264, and highlight this offset + bookmark it for future reference (ctrl+b), I would name it something like "Old 46P Offset".
QSaQwrZ.png

We see that the location of the Bones Table is at 44 04 05 00. Flip it to get (00 05 04 44)
Goto 0x50444, and we've arrived at the bones table for this animation.
mQXm9Dr.png


An animation's Bones Table consists of 44 offsets because there are 44 bones for the skeleton of DOA characters (with the exception of Tengu, who has extra bones for his wings, iirc) Each offset points to data for a specific bone's movements during this animation.

Starting from 0x50444, highlight the entire bones table for this animation (descending) and bookmark it for future reference. It should be 0xB0 bytes long. Name it something like "Old 46P Bones".

Take note of the first offset in the bones table, which is 0x4F7D8 (D8 F7 04 00).
Starting from 0x50444, highlight the entire chunk of data going up from 0x50444 all the way to 0x4F7D8 and bookmark it for future reference. Name it "Old 46P Motion".

Next, we should zero out the contents of the "Old 46P Motion" and "Old 46P Bones" bookmarks we just made. Highlight all of the contents of those two bookmarks together, bookmark it and name it "FREE" or something. We then highlight all the contents of the "FREE" bookmark and ctrl+ins (or right-click, then fill) to use the fill tool. Fill it with 0's. You can now delete the Old 46P Motion and Old 46P Bones bookmarks. DO NOT CLICK THE GIANT RED X, IT WILL CLEAR ALL OF YOUR BOOKMARKS. Instead, there's a small book with a red X in the bookmark toolbar that you should click if you want to remove individual bookmarks.
QAYXC45.png


If you want to port another animation and it's small, you might be able to fit it into the free space we just created from the Old 46P, but we won't be using this new free space for this tutorial.

--It's very important to replace unused animations instead of adding them to the end of the character.mot file, because there is a file size limit, and any animation data that surpasses the limit will be a glitchy mess or crash the game. You might get away with it if it's a relatively small animation, but it's generally a bad idea to inflate the .mot file.--

In this case, the animation we're porting is from DOA4, so it's probably larger than the original 46P, which means we'll have to free up more space by zero-ing out a few extra unused animations.
To save us some time, I know that the developers left in a few useless test animations for all characters at Mot-Ref 122, and Mot-Ref 123 in all DOA games from 2 to 4. We're going to do the same process that we did for the old 46P animation to zero-out these unused animations.
122 * 4 = 488
123 * 4 = 48C

Goto 0x488, bookmark this offset. The location of the data is 0x77A84.
Goto 0x77A84, highlight the Bones Table, bookmark it, highlight the Motion data, bookmark it.
Goto 0x48C, bookmark this as well. The location is 0x78ECC.
Goto 0x78ECC, highlight the Bones Table, bookmark it, highlight the Motion data, bookmark it.

Highlight the contents of these 4 bookmarks ((motion + bones table) * 2), and bookmark the entire thing, name it something like "FREE 2".

Zero-out the contents of "FREE 2" by highlighting its contents and using the fill command to fill it with 0's.
Open the other character.mot, in this case, it's Jann Lee's DOA4 moveset. "janlee.mot"

We need to find the Mot-Ref for the new 46P or DOA4's 4P. Luckily this animation is a direct replacement for 46P in DOA4, so the Mot-Ref is the same as the other animation.

99 00 is the mot-ref for the new 46P, so let's do the calculation again.
99 * 4 = 264

Goto 0x264.
9BCEx9d.png

For DOA4's files, the offsets are flipped, so you read from left to right, instead of right to left like in DOAO's files.
So the location is 00 07 FF C0, or 0x7FFC0

Goto 0x7FFC0.
uWAWLFZ.png

These offsets are also flipped. Select the bones table and bookmark it, label it "bones". The first offset in the bones table is 0x7EB88, so starting at 0x7FFC0, highlight the entire chunk of data going upwards from 0x7FFC0 all the way to 0x7EB88. Bookmark this and call it "motion".
Going back to the DOAO janlee.mot, let's go to the FREE 2 bookmark, because it has enough free space for the new data.
If we go to the "motion" bookmark in the DOA4 mot file, we can see that our new motion data is 0x1438 bytes. (The Length 16 column is hex, Length 10 is decimal)
wrXyUOc.png

Ctrl+C Copy the data you bookmarked in "motion" for the next part.

Go to the start of the FREE 2 bookmark that we made by zeroing out the unused animations earlier. Start highlighting downwards until you've highlighted 0x1438 bytes, and bookmark the highlighted part. Name it "New 46P Motion".
Highlight the newly bookmarked section and paste the DOA4 motion data into it.

Next, starting right after the data we just pasted, highlight 0xB0 bytes going downwards. You guessed it - bookmark it. Name it "New 46P Bones" go to the "bones" bookmark of the DOA4 file, copy the data and paste it in the "New 46P Bones" bookmark we just made.

Skip the part in this spoiler if you're not porting from DOA4.
DOA4's movesets have a weird byte flipping thing going on, so we need to flip them back to be compatible with DOAO.

Highlight the data in "New 46P Motion" and press Ctrl+1. This will open up the byte flip operation menu.
Yvexg11.png

Make sure you select 16 Bit Unsigned Short and hit OK. Now the motion data is compatible with DOAO.
Highlight the data in "New 46P Bones" and press Ctrl+1.
GxBUQd3.png

But this time, make sure you select 32 Bit Unsigned Long instead, and hit OK. Now the Bones Table offsets will be readable by DOAO.

We're still not quite done with the character.mot portion of the tutorial, because we need to fix the pointers/offsets in the Bones Table of "New 46P Bones", because those offsets now point to the wrong place.

Highlight the first offset in "New 46P Bones" and copy it (88EB0700).
Next, highlight everything in "New 46P Bones" and hit Ctrl+[ -- this will bring up the subtraction operation menu.

For "Treat Data As:" make sure you select 32 Bit Unsigned Long
(signed/unsigned doesn't really matter, afaik).
Byte Ordering isn't important, afaik.
Paste the offset you copied into the Value: section and hit OK.
HFXGsAf.png


You've now subtracted the original position of the motion data from the bones table offsets. Now we can add the New position to all of the offsets to fix the pointers.

Highlight the New 46P Bones data again, but this time hit Ctrl+] to bring up the addition operation menu.
Treat Data As: 32 Bit Unsigned Long
Byte Ordering: doesn't matter
Value: Put the address of "New 46P Motion" here. You can find that in the bookmark menu.
(You can see what I mean in the image below next to "New 46P Motion")
00 07 6D 68 is the address of New 46P Motion, but we need to flip it so it works with DOAO.
Put 68 6D 07 00 in the Value: section and hit OK.

You've now fixed the pointers for the data.

Now we need to go back to the very first thing we bookmarked, which was "Old 46P Offset" and put the address of "New 46P Bones" here.
Make sure to flip it first. 00 07 81 A0 = A0 81 07 00
uYH1NUN.png


To finish work on the character.mot, Ctrl+G and Goto 0x488 and we should be back at the offsets to the two Unused Animations we bookmarked earlier. We need to place "filler offsets" here to avoid crashing the game if it tries to use these animations that no longer exist. If you look around to the surrounding offsets, there's tons that point to 68 19 00 00, that is the filler offset for this .mot. Realistically, you can just use any offset that points to a working animation, but I use the filler offset to avoid complicating things down the line.

Place 68 19 00 00 in both of these slots, Save the file and the bookmarks, and we're done with the character.mot for now.
In order for the new animation to have proper hit detection, sound-effects, etc, we need to also port the anim-def from DOA4 and make a few changes to the data before it will behave correctly.

Open DOA4's janlee.bin in the editor. We need to find the anim-def data for 99 00 yet again, but this time in the DOA4 file.

The calculation is the same as it is for DOAO files, but the offsets are already flipped in DOA4 files, so we don't need to flip again.
8bitf0b.png

Anim-Def * 4 + OFFSET 21 (NOT flipped) = Anim-Def Offset
99 * 4 + BB00 = BD64

Goto 0xBD64
Z4qwcYH.png

The location of the anim-def is 0xED48.
Goto 0xED48, copy all the data starting at 0xED48 and ending after the two FF bytes.
HeZcdW7.png


---------
Open up DOAO janlee.bin and go all the way to the end of the file. I like to add a couple rows of FF bytes as a divider between the new data and the original data to keep track of everything. Unlike the character.mot file, the character.bin file is very forgiving with filesize and probably won't freeze the game -- but as a rule, I still replace unused things with new things in the character.bin to minimize file inflation.
pUlkFZn.png


Paste the DOA4 anim-def after the rows of FF's.
ifGCMy3.png

This data is also byte flipped, so we need to flip it back. Highlight the data and hit Ctrl+1 to open the byte flip operation menu.
Yvexg11.png

Set it to 16 Bit Unsigned Short and hit OK.
azRT2yi.png


The data is now in DOAO format. We still need to change a few things so that it doesn't crash, because the data still references Jann's DOA4 sound effects and DOA4 hit sounds. The DOA4 anim-defs sometimes use DOA4-specific hitboxes that don't exist in DOAO, so that might be something you need to change as well. I don't think we'll run into that problem with this specific attack, though.

Let's go back to Jann's original anim-def for 99 00 which we found out earlier was at 0x9826
Goto 0x9826. Copy the data starting here and ending after the two FF's. Ctrl+N to open a new blank document and Ctrl+V paste the data in the new document for later reference.
Mjf3uIP.png


Go back to janlee.bin and go all the way to the end of the file again to get back to the new 99 00 anim-def.
lUp9kSm.png
h
We're going to edit a few values so that it doesn't crash the game. We need to replace the on-hit sound effect section (the 22 00 __ __ 2D 00 __ __ ) the character voice section (in this case it's the 20 10 42 00) and the movement swoosh sound effect (the 62 00)

Replace these values with the corresponding values of the original anim-def for 99 00 that we pasted into the blank file. They're color-coded to show which ones to replace with which data.

Now we need to change the anim-def offset for the old 99 00 to the location of this new 99 00. The new 99 00 anim-def starts at 0xF4D0, so we'll flip that to get D0 F4 00 00. Let's do the calculation again to find the anim-def offset for the original 99 00.

Anim-Def * 4 + OFFSET 21 (flipped) = Anim-Def Offset
99 * 4 + 6AC8 = 6D2C

Goto 0x6D2C and replace that offset with the location of the new 99 00, which is D0 F4 00 00.

Save the file, test in game and it should work.

A quick side note: The sound effect from the previous 46P might not "fit" the new 46P, so play around with the first value of the character voice section until you find a sound effect that "feels right". The new on-hit sound effects might not really match either, so you might need to play around with those values as well, or even study the on-hit sound effects of other attacks and use those instead.

If you've made it to the end of the tutorial, congratulations! This is a somewhat overwhelming amount of information, and compiling this was not very easy, lol. I hope this helps anyone that wants to explore animation porting. These methods could be used for DOA3 as well.

 
Last edited:

Gultigargar

Well-Known Member
Sorry for the thread necromancy, but I updated my DOA2U/DOA Online mod a tiny bit: http://www.mediafire.com/file/gjz99or27ii5tcg/DOA2to3_Mod.rar
I fixed an oversight that sometimes caused Ryu's :K::P: to put the opponent into a crouching block, depending on if he was open or closed stance.
I also made it possible to use Tengu's season change animation from story mode as a taunt with :6::4::6::F+P+K:. (:4::6::4::F+P+K: still does his old/normal taunt.)

Also, usagiZ has been putting some preview videos on their channel lately, and I think they're pretty cool and worth checking out: https://www.youtube.com/user/ayane4ev
 

usagiZ

Well-Known Member
Hey everyone, I hope you've been well.
The project's still being worked on, I just haven't posted any updates here in forever.

@Gultigargar Thank you for linking the YT channel ++
Here's a playlist for the preview videos I've done so far.
Playlist for Time Attack Preview Videos

I tried to mimic some of DOA5's bound properties and gave them to a few characters, which you can see in the preview videos for Leon, Tina, and Kasumi.

There have been global changes to some of the stuns that change when you can hold out of them, mainly the slip/water stuns and the trip/sitdown stuns. The 3K sitdown stun is only on certain attacks now, and allows for a guaranteed launch for most of the characters that have it. This is best demonstrated in Leon's preview video.

There was a global change to the half-wall mechanic. The invincibility was removed from forward and bt half-wall splats - which allows for a small followup for some characters, and a good chunk of extra damage for others. This can be seen in the preview videos for Leon, and Ayane.
To get some followup damage from the half-wall splats, you need to wall splat on fences/half-walls with something that has quick recovery - and once you half-wall splat, you can't re-splat until the opponent touches the ground (I'm guessing that's part of the hard coding to prevent infinites)

I was able to port animations from DOA:Dimensions, which I used to give Kasumi the 2KK low-high from Dimensions instead of the double-low 2_KK from the DOA4 beta build.
Hitomi's new 4KK is the string from Dimensions as well.

Some "High Crush" attacks have true high crush properties now, and I also figured out how to make attacks low-crush properly, so now the problem of getting hit with the low wakeup kick during a move that's supposed to crush lows won't happen in those cases.

After some digging, I found a way to convert sounds to 2U's sound effect file format - which means I was able to give Kasumi Alpha her DOA:Dimensions fighting voice clips - I also added in Tengu's evil laugh from DOA4 to his 41236T (This was done after I made Tengu's Time Attack video, so you won't see it there) There's a size limit to voice files, sadly - so I can't give characters a ton of new sounds.

There seems to be some weirdness with character rotation in certain circumstances, like the transition from the new bound/knockdown property animations to the "on floor" animation is sometimes not smooth, and I think it's because the character.bin's have been inflated so much to fit the new data. It's mainly a cosmetic issue, and doesn't really interfere with gameplay as far as I can tell.

--edit--
I seem to have fixed the character rotation issue with the new bound properties - I had overlooked a small error at the end of each anim-def. I accidentally left in a section that usually seems to allow interrupts, so I replaced it with the standard ending section, and the rotation issue hasn't happened since then.
---------

Another issue is that certain throws that knock the opponent down with long recovery didn't function correctly, and they were instead letting the opponent get up way too soon after the throw ends - such as Kasumi's 8T4T or Genfu's standard T -- which I think is related to the character rotation issue. I ended up having to add recovery frames in the coding to the end of those throws to make them function similarly to how they should.

Thanks to some info provided by @leidoa I was able to do some initial tests on the character select screen. Unfortunately, changing which character shows up in which slot on the CSS doesn't change which character loads in to the match. (One of the values in the data changes which sound effect files are loaded, and the amount of costumes you'd see associated with the character)
Because of this, I think having Christie or Brad as a selectable character with their own costume slots/voice files/etc is pretty much never going to happen, so I wouldn't be too hopeful for that.

@PrincessPeachfan2016 this is a very late response, but I'm glad you enjoyed the Kasumi Alpha moveset~ the 1.3 build with teleports, I hope? (A small side-note, the moveset isn't really complete without the edits that had to be done to the hardcoding, so the version you tested had incorrect wall splat data.) It was pretty fun to try using all the experimental things I've learned so far to make a moveset. It can't really be ported to DOA4, sadly - I'd have to start over from scratch using DOA4 Kasumi as a base, but it can be done. Moveset editing in 4 isn't too different from moveset editing in 2U, tbh. It might even be easier, since the data is organized much more efficiently.

Thanks again to everyone watching the thread and checking in for progress / updates.
I'll be uploading more preview videos on the YT channel so feel free to subscribe there for more frequent updates/previews of the patch.
I updated the OP as well.
 
Last edited:

WAZAAAAA

Well-Known Member
Another issue is that certain throws that knock the opponent down with long recovery didn't function correctly, and they were instead letting the opponent get up way too soon after the throw ends - such as Kasumi's 8T4T or Genfu's standard T -- which I think is related to the character rotation issue. I ended up having to add recovery frames in the coding to the end of those throws to make them function similarly to how they should.
Oh yeah I knew about those 2 cases with Kasumi and Gen Fu. Jann Lee 214T without wall splat can also be punished by long range moves like Hayabusa 3H+K after a quick recovery.
 
ALL DOA6 DOA5 DOA4 DOA3 DOA2U DOAD
Top