OBD:BINA/OBJC/CMBT: Difference between revisions

From OniGalore
< OBD:BINA‎ | OBJC
Jump to navigation Jump to search
m (→‎Alarm behavior: cosmetics)
Line 203: Line 203:
| BGCOLOR="#C8C864" | 68 01 00 00
| BGCOLOR="#C8C864" | 68 01 00 00
| 360
| 360
| ALIGN=LEFT | alarm fight timer; same as fight timer in [[OBD:ONCC|ONCC]], but this works while AI is in run for alarm mode
| ALIGN=LEFT | alarm fight timer; see below
|}
|}


;Alarm enemy ignore distance
;Alarm enemy ignore distance
:This one specifies an "ignore range". Enemies which are inside this range are NOT ignored. Ignored are those ''outside'' this range.
:This one specifies an "ignore range". Enemies which are inside this range are not ignored but AI doesn't attack them.  
::(''well, naturally'' [[User:Geyser|geyser]])
:When AI doesn't ignore it does NOT mean it attacks. It only knows when there's an enemy nearby and it tries to face that enemy while still on the move. So it runs in a weird way.
::(''that's probably meant for more efficient auto-blocking or something'' [[User:Geyser|geyser]])
;Alarm enemy attack distance
;Alarm enemy attack distance
:WHY - IS - IT - '''ZERO'''??? Seriously. It is ''really'' set to zero by default.
:Zero by default.
::(''same reason as for the weapon dodging, heh'' [[User:Geyser|geyser]])
:This one specifies an "attack range" around an AI running for an alarm. When there is an enemy inside, AI stops running for the console and attack the enemy (if AI knows about him, of course)
:This one specifies another range around an AI that's running for a console.
:Nevertheless AI still keeps in mind that it should run for the console. So when there is no enemy inside this range and fight timer runs out, AI resumes running to the specified console.
:When there is an enemy inside this range and the AI ''knows'' about that enemy (i.e., doesn't ignore it due to the "ignore" range above), it will stop running for the console and attack the enemy.
;Fight timer
:But, at the same time, AI still keeps in mind that it should run for alarm. So when there is no enemy inside this range, AI resumes running to the specified console.
:When AI, which is running for the console, is engaged in a fight and enemy manages to disappear (either by phase-cloak or simply by hiding behind some corner), AI tries to chase him or looks for him. Alarm timer specifies how long should AI chase/look for the enemy. For chasing, timer starts when the enemy is outside *Alarm enemy attack distance*. Of course when the enemy escapes even from *Alarm enemy ignore range*, AI abandons him automatically.
;Note
:So if you have "ignore range" > "attack range" > 0, you get what I was searching for (for half a year or so):
::If an enemy is running for an alarm and you get too close, they'll stop, turn and start fighting with you.
::When you are far enough (or dead), they'll resume running ^_^'.
:You don't know how wicked this feature is until you've tried it out yourself.
::^_-
;Alarm damage threshold
;Alarm damage threshold
:it has something to do with run-to-alarm abortion, but I don't quite get it.
:Specifies how long AI, which is running for the console, remembers someone hurt it. Until this timer runs away, AI doesn't tend to use console. It only stays in fight stance near console, ready to fight. If someone hurts AI which is running for the console, then escapes and then tries to hurt it again while this timer isn't finished yet, AI remembers him and initatively attacks him the moment he steps inside *Alarm enemy attack distance*.
:It looks like an amount of damage when AI exits run for alarm state and acts as usual.
:But damage taken while fighting someone within the "alarm enemy attack range" doesn't count.
::[[User:Loser|Loser]] 11:31, 17 December 2006 (CET)
----
----
:As for the "alarm damage threshold", what would make sense to me is the following:
:*an AI is supposed to run for a console
:*there's an enemy in its way (within the ranges above)
:*it stops to fight that enemy
:*it takes more damage than a certain threshold
:*it says "So long, sucker" and resumes with its alarm job
:*(''overriding'' the "attack" range, and maybe the "ignore" range as well)
:So, it's rather the opposite of your idea, Loser:
:*alarm running would have top priority
:*it's the ''fighting'' that would be aborted
:Doesn't that seem likely? I haven't checked.
::[[User:Geyser|geyser]] 15:47, 17 December 2006 (CET)
:Another possibility (perhaps more likely), is suggested by the Big Blue Bow Beta WMDD below.
:Namely, the "damage threshold" and the timer may be meant to work together
::(note that they're grouped under the "Attack If Knockdown" label)
:The idea here is that if there's a physical contact between the runner and an enemy
::(the enemy attacking the runner)
:then the runner will stop running and start defending itself
::(provided the damage it received was above the threshold)
:and will resume running after a certain delay (the timer).
:Obviously, that "attack if knockdown" logic would be somewhat redundant if the attack range is large enough.
:If an AI has already stopped running for a console and is engaging enemies, what use is the "knockdown" check?
:So I'm not sure, maybe it's the first possibility after all.
::[[User:Geyser|geyser]] 15:47, 17 December 2006 (CET)
:Boy, that is ''so'' promising for CTF and Rugby... Thankee, Loser ^^
:Boy, that is ''so'' promising for CTF and Rugby... Thankee, Loser ^^
::[[User:Geyser|geyser]] 15:47, 17 December 2006 (CET)
::[[User:Geyser|geyser]] 15:47, 17 December 2006 (CET)
 
:Now I can say whole alarm behavior is resurrected. When somebody sees you, he runs for an alarm. If you manage to outrace him, he fights with you, but keeps his eye on every chance for escaping and running for alarm again. When alarm is tripped, it alerts all AIs with proper alarm group number and they either hunt you (if you are inside their pursuit distance) or their alert level is raised to combat or high level.
:I know there is still *Alarm search distance*, but we doesn't need it (there are plenty of other ways how to check that AI saw enemy and should run for alarm) plus it seems that both *Run For Alarm* behavior and *Run To Alarm* If no gun events are bugged in the same way and are defunct. Or there are missing labels "this is alarm console, you silly AI" in console files. I don't know and I think we can live without that. Or do you think about something else???
--[[User:Loser|Loser]] 13:43, 27 December 2006 (CET)


----
----

Revision as of 12:43, 27 December 2006

ONI BINARY DATA
AKVA << Other file types >> CBPI
BINA : Binary data
TMBD << Other BINA >> ONIE
OBJC : Objects
CHAR << Other OBJC >> CONS
CMBT : Combat profile
XML tutorial
Overview @ Oni Stuff
OBD.png




bin_r_cb.gif


Raw hex Value Meaning
54 42 4D 43 TBMC combat
70 01 00 00 368 old file ID
00 00 00 00 0 unknown
13 55 5F C3 -223.332321 x-position of ???
D4 A8 8E 41 17.832436 y-position (height) of ???
C3 05 E9 C2 -116.511253 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
Stand_and_Fire space for notes
00 00 00 00 0 combat ID (looked up from CJBOCharacter.BINA)
Below follows the behavior part.
02 00 00 00 2 long range behavior; the following behavior values are possible (values in dec):
 
0 -  none
1 -  stare
2 -  hold and fire
3 -  firing charge
4 -  melee
5 -  Barabbas shoot
6 -  Barabbas advance
7 -  Barabbas melee
8 -  Superninja fireball
9 -  Superninja advance
10 -  Superninja melee
11 -  run for alarm (not used in Oni)
12 -  Mutant Muro melee
13 -  Muro thunderbolt

 
02 00 00 00 2 medium range behavior; values as above
02 00 00 00 2 hand to hand behavior (short range behavior); values as above
02 00 00 00 2 medium retreat behavior; values as above
02 00 00 00 2 long retreat behavior; values as above
Below follows the combat part.
00 00 F0 42 120.000000 maximal combat range; you can make it visible with the script command ai2_showcombatranges = 1
01 00 00 00 1 melee overide; when 1 or higher, AI automatically switches from gunfire to melee on short distance; the following values are possible (values in dec):
 
0 - no
1 - if punched
2 - (canceled)
3 - short range
4 - medium range
5 - always melee
 
00 00 00 00 0 if no gun; ( when 1, AI tries to run if they don't hold weapon) (when 2, unknown) (when 3 and higher, they stand and seems to have no pathfinding logic); the following values are possible (values in dec):
 
0 - melee
1 - retreat
2 - run to alarm
 
00 00 20 42 40.000000 minimal combat range; you can make it visible with the script command ai2_showcombatranges = 1
00 00 48 43 200.000000 pursuit distance
Below follows the non-combatant part.
58 02 00 00 600 panic hurt (time in 1/60 seconds)
84 03 00 00 900 panic gunfire (time in 1/60 seconds)
58 02 00 00 600 panic melee (time in 1/60 seconds)
B0 04 00 00 1200 panic sight (time in 1/60 seconds)



Alarm behavior

These settings affect the behavior of an AI that's running for a console (e.g., script command ai2_doalarm).

Offsets relative to start of CMBT chunk
Offset Type Raw Hex Value Description
0xA0 float 00 00 96 43 300.000000 alarm search distance (defunct?)
0xA4 float 00 00 A0 42 80.000000 alarm enemy ignore distance (see below)
0xA8 float 00 00 00 00 0 alarm enemy attack distance (see below)
0xAC long 1E 00 00 00 30 alarm damage threshold; don't exactly know what it is (see below)
0xB0 long 68 01 00 00 360 alarm fight timer; see below
Alarm enemy ignore distance
This one specifies an "ignore range". Enemies which are inside this range are not ignored but AI doesn't attack them.
Alarm enemy attack distance
Zero by default.
This one specifies an "attack range" around an AI running for an alarm. When there is an enemy inside, AI stops running for the console and attack the enemy (if AI knows about him, of course)
Nevertheless AI still keeps in mind that it should run for the console. So when there is no enemy inside this range and fight timer runs out, AI resumes running to the specified console.
Fight timer
When AI, which is running for the console, is engaged in a fight and enemy manages to disappear (either by phase-cloak or simply by hiding behind some corner), AI tries to chase him or looks for him. Alarm timer specifies how long should AI chase/look for the enemy. For chasing, timer starts when the enemy is outside *Alarm enemy attack distance*. Of course when the enemy escapes even from *Alarm enemy ignore range*, AI abandons him automatically.
Alarm damage threshold
Specifies how long AI, which is running for the console, remembers someone hurt it. Until this timer runs away, AI doesn't tend to use console. It only stays in fight stance near console, ready to fight. If someone hurts AI which is running for the console, then escapes and then tries to hurt it again while this timer isn't finished yet, AI remembers him and initatively attacks him the moment he steps inside *Alarm enemy attack distance*.

Boy, that is so promising for CTF and Rugby... Thankee, Loser ^^
geyser 15:47, 17 December 2006 (CET)
Now I can say whole alarm behavior is resurrected. When somebody sees you, he runs for an alarm. If you manage to outrace him, he fights with you, but keeps his eye on every chance for escaping and running for alarm again. When alarm is tripped, it alerts all AIs with proper alarm group number and they either hunt you (if you are inside their pursuit distance) or their alert level is raised to combat or high level.
I know there is still *Alarm search distance*, but we doesn't need it (there are plenty of other ways how to check that AI saw enemy and should run for alarm) plus it seems that both *Run For Alarm* behavior and *Run To Alarm* If no gun events are bugged in the same way and are defunct. Or there are missing labels "this is alarm console, you silly AI" in console files. I don't know and I think we can live without that. Or do you think about something else???

--Loser 13:43, 27 December 2006 (CET)


Blue Box Beta WMDD

bina_combat.gif




Template:OBD TXT



ONI BINARY DATA
AKVA << Other file types >> CBPI
BINA : Binary data
TMBD << Other BINA >> ONIE
OBJC : Objects
CHAR << Other OBJC >> CONS
CMBT : Combat profile
[[OBD:File types/{{{family}}}|{{{family}}} file]]