OBD:BINA/OBJC/MELE

From OniGalore
< OBD:BINA‎ | OBJC
Revision as of 17:00, 31 December 2006 by Loser (talk | contribs) (added everything I know)
Jump to navigation Jump to search
ONI BINARY DATA
AKVA << Other file types >> CBPI
BINA : Binary data
TMBD << Other BINA >> ONIE
OBJC : Objects
FURN << Other OBJC >> NEUT
MELE : Melee profile
XML tutorial
Overview @ Oni Stuff
OBD.png
Melee profiles
They are stored globally, as a collection.
There are 45 of them.
Structure
Melee profile header
List of techniques (split in 3 groups : attack, evade, maneuver)
List of moves (grouped in sequences corresponding to techniques)
Messiness
The move sequences are not listed in the same order as the techniques
For a structure that's only 16 bytes in size, the moves have really complicated parsing.
A lot of EXE hacking is necessary in order to understand and master a move's effect




Profile

Header example

Template:OBD TXT dec

Size is 0xF0 = 240 bytes. Then there's a list of techniques, and a list of moves.
Amount of techniques and moves used by the profile are declared.
Amount of moves used by every technique is declared by the technique.

bin_r_m1.gif

Raw hex Value Meaning
45 4C 45 4D MELE melee
76 02 00 00 630 unknown
00 00 00 00 0 unknown
B3 F3 2A 43 170.951950 x-position of ???
C7 0D 71 C1 -15.065864 y-position (height) of ???
CF 29 38 42 46.040829 z-position of ???
00 00 00 00 0.000000 rotation on the x-axis in degrees
00 00 00 00 0.000000 rotation on the y-axis in degrees
00 00 00 00 0.000000 rotation on the z-axis in degrees
09 00 00 00 9 melee ID
NINJA_Easy space for notes
ninja_easy_1 link by name to an ONCC model (actually looked up by the melee profile); see below
64 00 00 00 100 Notice (%); how often AI registeres incoming attack; without registration, AI will not block or dodge
64 00 00 00 100 Dodge base (%); determines how often AI tries to dodge incoming attacks
1E 00 00 00 30 Dodge extra (%); it is weird => see below
05 00 00 00 5 Dodge damage amount; see below
0F 00 00 00 15 1 vs 1 blocking skill (%); specifies how often AI blocks incoming attack when blocking one enemy
14 00 00 00 20 Group blocking skill (%); looks like amount of possibility that AI will try to block attacks incoming from more enemies
00 00 00 40 2.000000 unknown; always the same ("not blocked"?)
33 33 33 3F 0.700000 unknown ("must change stance"?)
00 00 C0 3F 1.500000 unknown ("blocked but unblockable"?)
9A 99 99 3F 1.200000 unknown; always the same ("blocked but has stagger"?)
33 33 33 3F 0.700000 unknown; always the same ("blocked but has blockstun"?)
00 00 00 3F 0.500000 unknown; always the same ("blocked"?)
00 00 00 40 2.000000 unknown; always the same ("throw danger"?)
3C 00 60 unknown
5A 00 90 unknown
1A 00 00 00 26 number of attack techniques
06 00 00 00 6 number of evade/dodge techniques
07 00 00 00 7 number of maneuver/position techniques
6D 00 00 00 109 number of moves

Overall (only my theory)
I think that every attack creates some invisible field around attacking limb (so here is possibility of some bond with unknown values in the attack part of TRAM) where is said *Here is field of some attack*. When AI collides with it, it decides thanks to Notice value if attack is accepted or not. If not, attack is ignored and AI is damaged. If yes, AI knows there is attack and decides what to do: Either nothing, dodge or block. All that is based on percentages of those possibilities. If there is same possibility of blocking and dodging, engine randomly choses one. Point is that even if AI recognized there is attack, it can do nothing and obtain damage as well as blocking it or trying to dodge it. So here we have random element.
Dodge extra
This seems to be some added chance to dodge incoming attack if attack, which is aimed at AI, causes equal or greater damage then specified in *Dodge damage amount*. But this is very questionable as it shows really some weird stuff.
About ONCC models
It seems that by selecting certain model engine allows this melee profile to execute certain moves, used by ONCC class. Example: You edit comguy melee profile (ID 04), by adding back kick throw move into it. In game, any AI who uses it will never try to perform back kick throw move.If you turn on melee checking in dev console, it says NOATTACKNOTHROW with this move. Then you edit melee profile once again, this time you change ONCC class from comguy_1 to konoko. And voila: AI will try to perform it even if it causes crash of ONI ^_^.
 
I am very sorry Geyser, but rest is unchecked. I tried, but I have no clue at the moment.--Loser 18:00, 31 December 2006 (CET)

Techniques
They are listed right after the profile's header. Their number is specified in the header, and their size is 88 bytes each.
Moves
They are listed right after the techniques. Their number is specified in the header, and their size is 16 bytes each.

All profiles

In order of appearance in the collection

1 2 3 4 5
NINJA_Easy Security_Guard TCTF_Lite STRIKER_Easy COMGUY
THUG_Air STRIKER_Medium STRIKER_Hard TANKER_Easy2 BLACKOPS_Lite
BLACKOPS_Swat TCTF_Swat ELITE_Easy MADBOMBER NINJABOT_Train1
RED_Easy SNIPER RED_Medium KONOKO BARABAS Rsrch D
BARABAS TCTF D TANKER_Medium2 TANKER_Hard2 MURO_Dream MURO_Final
MURO_Mutant NINJA_Super NINJA_Medium NINJA_Hard RED_Hard
ELITE_Medium ELITE_Hard GRIFFIN STRIKER_Mini COP Male
COP Female THUG_Mfg THUG_Neuro THUG_Pow THUG_Wh
NINJABOT_Train2 NINJABOT_PowPlant TANKER_Easy TANKER_Medium TANKER_Hard
41 42 43 44 45

Sorted by ID

The IDs start at 0 and increase by 1 for every next profile
with the exception of the last 3, the IDs of which are 55, 56, 57
(instead of 42, 43, 44)
0 1 2 3 4
Security_Guard TCTF_Lite STRIKER_Easy THUG_Air COMGUY
STRIKER_Medium STRIKER_Hard TANKER_Easy RED_Easy NINJA_Easy
TANKER_Medium BLACKOPS_Lite BLACKOPS_Swat TCTF_Swat ELITE_Easy
TANKER_Hard RED_Medium MADBOMBER NINJABOT_Train1 SNIPER
ELITE_Medium ELITE_Hard KONOKO BARABAS Rsrch D RED_Hard
BARABAS TCTF D NINJA_Medium NINJA_Hard NINJA_Super MURO_Dream
MURO_Final MURO_Mutant GRIFFIN STRIKER_Mini COP Male
COP Female THUG_Mfg THUG_Neuro THUG_Pow THUG_Wh
NINJABOT_Train2 NINJABOT_PowPlant TANKER_Easy2 TANKER_Medium2 TANKER_Hard2
40 41 55 56 57




Technique

Template:OBD TXT

The amount of techniques (attack, evade, maneuver) is declared in the header.
The list starts directly after the header. Every technique takes up 0x58 = 88 bytes.
The example below is the first (attack) technique of the NINJA_easy profile

bin_r_m2.gif

Offset Raw hex Value Meaning
0x00 Spinning Suplex technique's name
0x40 00 00 00 00 0 1 = "interruptible" (see below), 2 = ???
0x44 50 00 00 00 80 unknown
0x48 0A 00 00 00 10 unknown
0x4C 58 02 00 00 600 unknown (technique repeat delay?)
0x50 02 00 00 00 2 number of moves used by this technique
0x54 57 00 00 00 87 position of the first move for this technique in the profile's list of moves
Guesses
The unknown parameters can be :
  • the technique's "weight"
  • the technique's "repeat delay" (probably the one at 0x4C)
  • things (flags?) called "Interruptible", "Generous Dir" and "Fearless"
0x40 set to 1
interruptible : technique will be stopped when opponent is outside specified range
Loser
A range specified where? Some moves have ranges as parameters, but a technique has a set of moves.
Do you mean that one of the technique parameters (either 0x44 or 0x48) is a range? Please confirm.
geyser 00:00, 20 November 2006 (CET)
For everybody's convenience, I've grouped the techniques with the 0x40 field set to 1 HERE.
geyser 00:00, 20 November 2006 (CET)
0x40 set to 2
This is true for the following techniques :
  • Furies :
    • Body Surf Front
    • Running Kick
    • Running Punch
  • Ninjas :
    • Lightning Stomp
  • Strikers :
    • Jump Kick
    • Running_Kick
    • Running_Punch
  • Tankers :
    • Circle Left
    • Circle Right
    • Run/Dive-Left
    • Run/Dive-Right
    • Run/Drop Kick
    • Run/Jump Kick
    • Run/Jumpkick Back
    • Run/Jumpkick Left
    • Run/Jumpkick Right
    • Slide
For an exhaustive listing (complete with actual classes), see HERE.
That has to be either "Fearless" or "Generous Dir" (whatever that means).
"Somebody better investigate soon." ^^
geyser 00:00, 20 November 2006 (CET)




Move

Template:OBD TXT dec

The amount of moves is declared in the header.
The list starts directly after the list of techniques.
Every move takes up 0x10 = 16 bytes.
The example below is the last move of the NINJA_easy profile
(actually the one and only move of the Pause technique)

bin_r_m3.gif

Offset Raw hex Value Meaning
0x00 04 00 00 32 4, 32 move id, move type

the move id belongs to the move type; these move identifications are possible
the move type comes as a high bit; the following types are possible (values in dec):
 

0 -  attack
16 -  position
32 -  maneuver
48 -  evade
64 -  throw

 
0x04 CD CC 4C 3F 0.800000 move parameter 1 (in this case, "min" : something like the minimum duration of the "Pause")
0x08 00 00 00 00 0 move parameter 3 (in this case, none : "Pause" only takes one parameter)
0x0C 00 00 00 00 0 move parameter 3 (in this case, none : "Pause" only takes one parameter)
Move types
0 : Attack, struct array starts at 0x140A88 in the English EXE
16 : Position, struct array starts at 0x1435B0 in the English EXE
32 : Maneuver, struct array starts at 0x143AB0 in the English EXE
48 : Evade, struct array starts at 0x143E30 in the English EXE
64 : Throw, struct array starts at 0x144370 in the English EXE




Blue Box Beta WMDD

bina_melee.gif




PART 1 - PROFILE

Template:OBD TXT dec

PART 2 - TECHNIQUE

Template:OBD TXT

PART 3 - MOVE

Template:OBD TXT dec



ONI BINARY DATA
AKVA << Other file types >> CBPI
BINA : Binary data
TMBD << Other BINA >> ONIE
OBJC : Objects
FURN << Other OBJC >> NEUT
MELE : Melee profile
[[OBD:File types/{{{family}}}|{{{family}}} file]]