OBD:ONCC: Difference between revisions
m (Loser's rampage continues) |
m (wording and linking for shield types) |
||
(62 intermediate revisions by 11 users not shown) | |||
Line 1: | Line 1: | ||
{|align= | {{OBD_File_Header | type=ONCC | prev=OFGA | next=ONCP | name=Oni Character Class | family=Character | align=center}} | ||
| | [[Image:oncc_a.gif]] | ||
|- | {{Table}} | ||
{{OBDth}} | |||
| | {{OBDtr| 0x000 | res_id |FF0000| 01 DF 03 00 | 991 | 00991-konoko_generic.ONCC }} | ||
{{OBDtr| 0x004 | lev_id |FFFF00| 01 00 00 06 | 0 | level 3 }} | |||
| | {{OBDtr| 0x008 | float |00FF00| CD CC 0C 3F | 0.550000 | fall speed (always 0.55) (mostly unused, see below) }} | ||
{{OBDtr| 0x00C | float |00FF00| 8F C2 75 3D | 0.060000 | strength of gravity for this character }} | |||
| | {{OBDtr| 0x010 | float |00FF00| CD CC 8C 3F | 1.100000 | starting velocity for a simple (tap) JUMP }} | ||
{{OBDtr| 0x014 | float |00FF00| 00 00 80 C0 | -4.000000 | maximum velocity for jumping and falling }} | |||
| | {{OBDtr| 0x018 | float |00FF00| 8F C2 F5 3C | 0.030000 | upward acceleration as long as you hold JUMP }} | ||
{{OBDtr| 0x01C | int16 |00FFFF| 07 00 | 7 | fall timer (always 7) (mostly unused, see below) }} | |||
{{OBDtr| 0x01E | int16 |00FFFF| 14 00 | 20 | how long you can continue holding down JUMP to increase the height of your jump }} | |||
{{OBDtr| 0x020 | float |FF00FF| 00 00 34 42 | 45.000000 | maximum falling height without damage }} | |||
{{OBDtr| 0x024 | float |FF00FF| 00 00 07 43 | 135.000000 | maximum falling height with damage }} | |||
|} | |} | ||
;Units | |||
:times are in frames | |||
:heights are in world units (0.1m or 4") | |||
:velocities are in world units per tick (1/60s) | |||
:accelerations are in world units per tick squared | |||
;Fall speed and timer | |||
:These two fields are only looked at when predicting whether an attack will hit a target while the attacker is in midair. They are probably a development relic that is looked at in error, as the actual falling speed is determined by 0x00C and the actual fall timer is 0x01E. | |||
;Jetpack timer | |||
:You can press JUMP multiple times during the time window when it's large enough. See the [http://mods.oni2.net/node/83 Barabas Jetpack mod] for an application of this principle. | |||
:heights are in world units | |||
:velocities are in world units per | |||
:accelerations are in world units per | |||
; | |||
;Jetpack timer:You can press JUMP multiple times during the time window | |||
;Falling height: let FH1 be the height at 0x20 | ;Falling height: let FH1 be the height at 0x20 | ||
:let FH2 be the height at 0x24 | :let FH2 be the height at 0x24 | ||
Line 96: | Line 42: | ||
:if FH1 < FH < FH2, the character takes damage (FH - FH1) / (FH2 - FH1) * BH | :if FH1 < FH < FH2, the character takes damage (FH - FH1) / (FH2 - FH1) * BH | ||
{ | ;Shadow Constants | ||
| | |||
| | {{Table}} | ||
| | {{OBDth}} | ||
| 1016 | {{OBDtr| 0x028 | link |FF8000| 01 F8 03 00 | 1016 | link to 01016-shadow1.[[OBD:TXMP|TXMP]] }} | ||
{{OBDtr| 0x02C | float |FF8000| 00 00 40 41 | 12.000000 | height where the diameter of the shadow shrinks to 0x03C }} | |||
| | {{OBDtr| 0x030 | float |FF8000| 00 00 00 41 | 8.000000 | height range over which the diameter of the shadow decreases from 0x034 to 0x038 and the shadow starts to fades out from 0x040 to 0x042 }} | ||
| | {{OBDtr| 0x034 | float |FF8000| 00 00 C0 40 | 6.000000 | maximum diameter of the shadow }} | ||
| | {{OBDtr| 0x038 | float |FF8000| 00 00 90 40 | 4.500000 | diameter that the shadow shrinks to when 0x030 is reached }} | ||
| 12.000000 | {{OBDtr| 0x03C | float |FF8000| 00 00 40 40 | 3.000000 | minimum diameter of the shadow }} | ||
{{OBDtr| 0x040 | int16 |FF8000| 30 00 | 48 | starting transparency of the shadow as the character rises towards 0x030 }} | |||
| | {{OBDtr| 0x042 | int16 |FF8000| 30 00 | 48 | starting transparency of the shadow when the character begins to get above 0x030 }} | ||
| | |||
| | |||
| 8.000000 | |||
| | |||
| | |||
| | |||
| 6.000000 | |||
| | |||
| | |||
| | |||
| | |||
| 4.500000 | |||
| | |||
| | |||
| | |||
| | |||
| 3.000000 | |||
| | |||
| | |||
| | |||
| | |||
| 48 | |||
| | |||
| | |||
| | |||
| 48 | |||
|} | |} | ||
;Jump Constants | |||
{{Table}} | |||
{{OBDth}} | |||
{{OBDtr| 0x044 | float |FF0080| 00 00 C8 41 | 25.000000 | unused (always 25) }} | |||
{{OBDtr| 0x048 | int8 |FFC8C8| 16 | 22 | unused (always 22) }} | |||
{{OBDtr| 0x049 | int8 |FFC8C8| 06 | 6 | unused (always 6) }} | |||
{{OBDtr| 0x04A | char[2] |FFC8C8| AD DE | dead | pad }} | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| 6 | |||
| | |||
| | |||
| | |||
| dead | |||
| | |||
|} | |} | ||
;Cover Constants | |||
{{Table}} | |||
{{OBDth}} | |||
| | {{OBDtr| 0x04C | float |FFFFC8| 00 00 20 42 | 40.000000 | unused (always 40) }} | ||
| | {{OBDtr| 0x050 | float |FFFFC8| 00 00 96 43 | 300.000000 | unused (always 300) }} | ||
{{OBDtr| 0x054 | float |FFFFC8| 35 FA 8E 3C | 0.017453 | unused (always π/180) }} | |||
{{OBDtr| 0x058 | float |FFFFC8| DB 0F C9 3F | 1.570796 | unused (always π/2) }} | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| 0. | |||
| | |||
| | |||
| | |||
| 1 | |||
| | |||
|} | |} | ||
;Autofreeze Constants | |||
{{Table}} | |||
{{OBDth}} | |||
| | {{OBDtr| 0x05C | float |FFFFC8| 00 00 A0 40 | 5.000000 | unused (always 5) }} | ||
| | {{OBDtr| 0x060 | float |FFFFC8| 00 00 80 3F | 1.000000 | unused (always 1) }} | ||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
|} | |} | ||
;Inventory Constants | |||
{{Table}} | |||
{{OBDth}} | |||
{{OBDtr| 0x064 | int16 |C8FFC8| 06 00 | 6 | hypo regeneration rate in ticks per hit point restored }} | |||
{{OBDtr| 0x066 | char[2] |C8FFC8| AD DE | dead | ignored }} | |||
| | |||
| | |||
| 6 | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
|} | |} | ||
;LOD Constants | |||
Squares of the distance from the camera at which each LOD kicks in ([[LOD|this article]] has the full calculation for arriving at the LOD to use) | |||
{{Table}} | |||
{{OBDth}} | |||
{{OBDtr| 0x068 | float |C8FFFF| 00 10 3D 48 |193600.000000| always 440 squared }} | |||
{{OBDtr| 0x06C | float |C8FFFF| 00 10 3D 47 | 48400.000000| always 220 squared }} | |||
{{OBDtr| 0x070 | float |C8FFFF| 00 10 3D 46 | 12100.000000| always 110 squared }} | |||
{{OBDtr| 0x074 | float |C8FFFF| 00 00 00 00 | 0.000000 | always 0 }} | |||
{{OBDtr| 0x078 | float |C8FFFF| 00 00 00 00 | 0.000000 | always 0 }} | |||
|} | |||
;Hurt Sound Constants | |||
See [[XML:ONCC#.3CHurtSoundConstants.3E|HERE]] for the full calculation of whether to play a hurt sound and which sound to play. | |||
{{Table}} | |||
{{OBDth}} | |||
{{OBDtr| 0x07C | int16 |FFC8FF| 23 00 | 35 | minimum chance of playing a pain sound (always 35) }} | |||
{{OBDtr| 0x07E | int16 |FFC8FF| 5A 00 | 90 | maximum chance of playing a pain sound (always 90) }} | |||
{{OBDtr| 0x080 | int16 |FFC8FF| 0F 00 | 15 | at least this much damage must be done to play a pain sound (always 15) }} | |||
{{OBDtr| 0x082 | int16 |FFC8FF| 78 00 | 120 | time in ticks before the damage tracker used for this AI's pain sounds resets (always 120) }} | |||
{{OBDtr| 0x084 | int16 |FFC8FF| 23 00 | 35 | time in ticks that must pass between pain sounds being played (always 35) }} | |||
{{OBDtr| 0x086 | int16 |FFC8FF| 01 00 | 1 | number of times that AI will play light pain sound before "upgrading" to a medium pain sound (always 1) }} | |||
{{OBDtr| 0x088 | int16 |FFC8FF| 02 00 | 2 | number of times that AI will play medium pain sound before "upgrading" to a heavy pain sound (always 2) }} | |||
{{OBDtr| 0x08A | int16 |FFC8FF| 64 00 | 100 | chance of playing a death sound (always 100) }} | |||
{{OBDtr| 0x08C | int16 |FFC8FF| 0A 00 | 10 | minimum damage required for an AI to play the pain sound at maximum volume (always 10) }} | |||
{{OBDtr| 0x08E | int16 |FFC8FF| 0C 00 | 12 | cumulative damage before a light pain sound gets upgraded to a medium pain sound (always 12) }} | |||
{{OBDtr| 0x090 | int16 |FFC8FF| 16 00 | 22 | cumulative damage before a medium pain sound gets upgraded to a heavy pain sound (always 22) }} | |||
{{OBDtr| 0x092 | int8 |FFC800| 00 | 0 | runtime only: if sound pointers have been set }} | |||
{{OBDtr| 0x093 | char[1] |C800C8| DE | dead | ignored }} | |||
{{OBDtr| 0x094 | float |C87C64| 00 00 00 3F | 0.500000 | minimum volume of pain sound (before 0x08C is reached and volume becomes 100%) }} | |||
{{OBDtr2|0x098 | char[32] |B0C3D4| konoko_hurt_light | light hurt sound (reference to 08121-konoko_hurt_light.[[OBD:OSBD|imp.OSBD]] of level 0) }} | |||
{{OBDtr2|0x0B8 | char[32] |B0C3D4| konoko_hurt_medium | medium hurt sound (reference to 08123-konoko_hurt_medium.imp.OSBD of level 0) }} | |||
{{OBDtr2|0x0D8 | char[32] |B0C3D4| konoko_hurt_heavy | heavy hurt sound (reference to 08119-konoko_hurt_heavy.imp.OSBD of level 0) }} | |||
{{OBDtr2|0x0F8 | char[32] |B0C3D4| konoko_death | death sound (reference to 08115-konoko_death.imp.OSBD of level 0) }} | |||
{{OBDtr| 0x118 | int32 |E7CEA5| 00 00 00 00 | 0 | runtime only: pointer to light hurt sound }} | |||
{{OBDtr| 0x11C | int32 |E7CEA5| 00 00 00 00 | 0 | runtime only: pointer to medium hurt sound }} | |||
{{OBDtr| 0x120 | int32 |E7CEA5| 00 00 00 00 | 0 | runtime only: pointer to heavy hurt sound }} | |||
{{OBDtr| 0x124 | int32 |E7CEA5| 00 00 00 00 | 0 | runtime only: pointer to death sound }} | |||
|} | |||
;AI Constants | |||
{{Table}} | |||
{{OBDth}} | |||
{{OBDtr| 0x128 | bitset |E7CEA5| 17 00 00 00 | 23 | AI options bitset; see below }} | |||
{{OBDtr| 0x12C | float |FFDDDD| 00 00 80 3F | 1.000000 | AI rotation speed factor }} | |||
{{OBDtr| 0x130 | int16 |64AAAA| 06 00 | 6 | minimum number of frames AI remains in fallen position when it is knocked down }} | |||
{{OBDtr| 0x132 | int16 |64AAAA| 18 00 | 24 | maximum number of frames AI remains in fallen position when it is knocked down }} | |||
{{OBDtr| 0x134 | uint32 |EBEBEB| 0F 00 00 00 | 15 | number of frames after which AI realizes that it is in the firing spread and it starts dodging }} | |||
{{OBDtr| 0x138 | float |8C8CCC| 00 00 80 3F | 1.000000 | minimum dodge time; how long AI should perform dodging/hiding in response to being inside a firing spread (the higher it is, the longer he will hide/dodge even after firing spread disappears) }} | |||
{{OBDtr| 0x13C | float |8C8CCC| 00 00 80 3F | 1.000000 | dodge priority dampening; the higher it is, the lower priority the AI gives to dodging }} | |||
|} | |||
;AI options bitset | |||
:allows or disables some parts of the AI behavior | |||
*no flags - startle anim is enabled, rest is disabled | |||
*0x01 - startle anim disabled | |||
*0x02 - firing spread/projectile dodge enabled for melee | |||
*0x04 - requires 0x02; firing spread/projectile dodge enabled for weapons; AI tries to face shooter and shoot back while dodging | |||
*0x08 - requires 0x02, overrides 0x04 if both are set; firing spread/projectile dodge enabled for weapons; AI isn't shooting, it just tends to run away, not facing shooter | |||
*0x10 - bit not used | |||
;AI rotation speed factor | ;AI rotation speed factor | ||
:reference rotation speed is about 1 turn ( | :reference rotation speed is about 1 turn (360°) per second | ||
:the setting is only effective if the AI is in control | :the setting is only effective if the AI is in control | ||
:so it's a bit like the AI's mouse sensitivity :) | :so it's a bit like the AI's mouse sensitivity :) | ||
;AI Targeting Prediction Constants | |||
See [[XML:ONCC#.3CTargeting.3E|HERE]] for how the variables here interact to control the AI's target prediction. | |||
{{Table}} | |||
| | {{OBDth}} | ||
{{OBDtr| 0x140 | float |8C8CCC| 00 00 00 3F | 0.500000 | multiplied against target's distance to get error in AI's/turret's first wild shot (always 0.5) }} | |||
{{OBDtr| 0x144 | float |8C8CCC| 00 00 C8 41 | 25.000000 | max value for result of multiplication above (always 25) }} | |||
{{OBDtr| 0x148 | float |8C8CCC| 00 00 80 3F | 1.000000 | accuracy multiplier for prediction of target's position (always 1) }} | |||
| | {{OBDtr| 0x14C | int32 |FF00C8| 00 00 00 00 | 0 | maximum allowed frames of lookback to be used for predicting target's position (always 0) }} | ||
{{OBDtr| 0x150 | int32 |FF00C8| 05 00 00 00 | 5 | frames of delay in recognizing target's current position (always 5) }} | |||
{{OBDtr| 0x154 | int32 |FF00C8| 0F 00 00 00 | 15 | number of frames over which AI can average target's velocity to help predict position (always 15) }} | |||
| | {{OBDtr| 0x158 | int32 |FF00C8| 3C 00 00 00 | 60 | size in frames of target's history location buffer (always 60) }} | ||
| | |||
| 0.500000 | |||
| | |||
| | |||
| | |||
| | |||
| 25.000000 | |||
| | |||
| | |||
| | |||
| | |||
| 1.000000 | |||
| | |||
| | |||
| | |||
| | |||
| 0 | |||
| | |||
| | |||
| | |||
| | |||
| 5 | |||
| | |||
| | |||
| | |||
| | |||
| 15 | |||
| | |||
| | |||
| | |||
| | |||
| 60 | |||
| | |||
|} | |} | ||
;AI Weapon Skills | |||
This is an array of 13 sets of skill variables, one for each weapon. Below is the data for the first element: | |||
{{Table}} | |||
{{OBDth}} | |||
{{OBDtr| 0x15C | float |F0F096| 00 00 00 00 | 0.000000 | recoil compensation amount (0.0 <nowiki>= no compensation, 1.0 =</nowiki> no recoil) }} | |||
{{OBDtr| 0x160 | float |F0F096| 00 00 00 00 | 0.000000 | minimum aiming error as an angle in radians }} | |||
{{OBDtr| 0x164 | float |F0F096| 00 00 00 00 | 0.000000 | shot grouping error as a percentage }} | |||
{{OBDtr| 0x168 | float |F0F096| 00 00 80 3F | 1.000000 | how quickly aiming inaccuracy decreases or increases while shooting (ranges from 0.0 to 1.0) }} | |||
{{OBDtr| 0x16C | float |F0F096| 00 00 80 3F | 1.000000 | shooting inaccuracy multiplier }} | |||
{{OBDtr| 0x170 | uint16 |00C864| 00 00 | 0 | minimum delay in ticks before pulling the trigger again }} | |||
{{OBDtr| 0x172 | uint16 |00C864| 00 00 | 0 | maximum delay in ticks before pulling the trigger again }} | |||
|0x15C | |||
| | |||
| | |||
| 0 | |||
| 0.000000 | |||
| 0. | |||
| | |||
| | |||
| | |||
| | |||
| 0. | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| 0. | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| 1. | |||
| 0. | |||
| | |||
| | |||
| | |||
| | |||
| 1. | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| 0 | |||
| | |||
| | |||
| | |||
| | |||
| 0 | |||
| | |||
| | |||
|} | |} | ||
AI weapon skills can be reviewed with e.g. '''ai2_skill_select konoko_generic w1_tap''' and then either '''ai2_skill_show''' (prints to console) or '''ai2_skill_save''' (prints to file). | |||
{| | |||
|- | The first weapon (weapon 0) is not in the game anymore, whatever it was. Mutant Muro's thunderbolt is handled as animation-bound particles, although it used to be handled as a weapon (same for Mukade's Devil Star, except '''w10_sni''' is still available). Barabas' Wave Motion Cannon is a bit mixed up since the beam is made of '''w12_ba2''' particles and the grenade is a '''w11_ba1''' particle. | ||
| | |||
| | {{Table}} | ||
| | |- bgcolor="#E9E9E9" align=center | ||
| | !Weapon ||Offset ||recoil||bestangle||error||decay||inaccuracy||delays | ||
|- | |- align=center | ||
| | |'''w0_sec''' ||0x15C/0x173|| 0.0 || 0.000000|| 0.00|| 1.0 || 1.0 || 0 - 0 | ||
| | |- align=center | ||
| | |'''w1_tap''' ||0x174/0x18B|| 0.0 || 0.000000|| 0.40|| 0.4 || 0.0 || 30 - 45 | ||
| | |- align=center | ||
|- | |'''w2_sap''' ||0x18C/0x193|| 0.3 || 0.013962|| 0.13|| 1.0 || 1.0 || 0 - 0 | ||
| | |- align=center | ||
| | |'''w3_phr''' ||0x194/0x20B|| 0.3 || 0.010472|| 0.05|| 0.5 || 1.0 || 0 - 0 | ||
| | |- align=center | ||
| | |'''w4_psm''' ||0x20C/0x213|| 0.3 || 0.015707|| 0.03|| 0.2 || 1.0 || 0 - 0 | ||
|- | |- align=center | ||
| | |'''w5_sbg''' ||0x214/0x22B|| 0.3 || 0.001745|| 0.00|| 0.1 || 1.0 || 0 - 0 | ||
| | |- align=center | ||
| | |'''w6_vdg''' ||0x22C/0x233|| 0.3 || 0.001745|| 0.13|| 0.9 || 1.0 || 0 - 0 | ||
| | |- align=center | ||
|- | |'''w7_scc''' ||0x234/0x24B|| 0.3 || 0.001745|| 0.05|| 0.1 || 1.0 || 0 - 0 | ||
| | |- align=center | ||
| | |'''w8_mbo''' ||0x24C/0x253|| 0.3 || 0.005236|| 0.01|| 0.5 || 1.0 || 0 - 0 | ||
| | |- align=center | ||
| | |'''w9_scr''' ||0x254/0x26B|| 0.3 || 0.010472|| 0.04|| 0.5 || 1.0 || 0 - 0 | ||
|- | |- align=center | ||
| | |'''w10_sni'''||0x26C/0x273|| 0.0 || 0.000000|| 0.00|| 1.0 || 1.0 || 0 - 0 | ||
| | |- align=center | ||
| | |'''w11_ba1'''||0x274/0x28B|| 0.0 || 0.000000|| 0.00|| 1.0 || 1.0 || 0 - 0 | ||
| | |- align=center | ||
|- | |'''w12_ba2'''||0x28B/0x293|| 0.0 || 0.000000|| 0.00|| 1.0 || 1.0 || 0 - 0 | ||
| | |||
| | |||
| 0 | |||
| | |||
|- | |||
| | |||
| | |||
| | |||
| | |||
|} | |} | ||
;Other AI Behaviors | |||
{ | [[Image:oncc_m.gif]] | ||
| | {{Table}} | ||
| | {{OBDth}} | ||
| | {{OBDtr| 0x294 | int32 |00C8FF| 5A 00 00 00 | 90 | how long AI will continue shooting a dead body to make sure it's dead (always 90) }} | ||
| | {{OBDtr| 0x298 | int32 |00C8FF| F0 00 00 00 | 240 | how long AI will stand over dead body before returning to last job (always 240) }} | ||
| | {{OBDtr| 0x29C | int32 |00C8FF| B4 00 00 00 | 180 | how long after losing sight of target until AI engages pursuit mode (always 180) }} | ||
| | {{OBDtr| 0x2A0 | int32 |00C8FF| 28 00 00 00 | 40 | chance (as a percentage) of AI taunting a dead body }} | ||
| | {{OBDtr| 0x2A4 | int32 |00C8FF| 37 00 00 00 | 55 | chance (as a percentage) of AI running to some weapon to pick it up; can be checked in Dev Mode with the '''debug_gun_behavior''' command }} | ||
| | {{OBDtr| 0x2A8 | int32 |00C8FF| 3C 00 00 00 | 60 | chance (as a percentage) of AI performing a running weapon pickup (including acrobatics moves, slides) instead of the normal "stop and pick up"; this is calculated after the engine decides that the AI will go for a gun }} | ||
| | {{OBDtr| 0x2AC | int16 |C80040| 00 00 | 0 | combat profile ID; for example *0D* is for Mutant Muro }} | ||
| | {{OBDtr| 0x2AE | int16 |C80040| 16 00 | 22 | melee profile ID }} | ||
| | {{OBDtr| 0x2B0 | int8 |FFCD96| 64 | 100 | "taunt" sound probability (always) }} | ||
| | {{OBDtr| 0x2B1 | int8 |FFCD96| 00 | 0 | "alert" sound probability (never) }} | ||
| | {{OBDtr| 0x2B2 | int8 |FFCD96| 00 | 0 | "startle" sound probability (never) }} | ||
| | {{OBDtr| 0x2B3 | int8 |FFCD96| 00 | 0 | "checkbody" sound probability (never) }} | ||
| | {{OBDtr| 0x2B4 | int8 |FFCD96| 00 | 0 | "pursue" sound probability (never) }} | ||
| | {{OBDtr| 0x2B5 | int8 |FFCD96| 00 | 0 | "cower" sound probability (never) }} | ||
| | {{OBDtr| 0x2B6 | int8 |FFCD96| 64 | 100 | "superpunch" probability (always) }} | ||
| | {{OBDtr| 0x2B7 | int8 |FFCD96| 64 | 100 | "superkick" probability (always) }} | ||
| | {{OBDtr| 0x2B8 | int8 |FFCD96| 00 | 0 | "super3" sound probability (never) }} | ||
| | {{OBDtr| 0x2B9 | int8 |FFCD96| 00 | 0 | "super4" sound probability (never) }} | ||
| | {{OBDtr| 0x2BA | int16 |C8C864| 00 00 | 0 | probably a blank filler (always the same) }} | ||
| 0 | {{OBDtr2|0x2BC | char[32] |0096C8| c17_99_28konoko | "taunt" sound (reference to 08108-c17_99_28konoko.[[OBD:OSBD|amb.OSBD]] of level 0) }} | ||
| | {{OBDtr2|0x2DC | char[32] |0096C8| unused | "alert" sound name }} | ||
| | {{OBDtr2|0x2FC | char[32] |0096C8| unused | "startle" sound name }} | ||
| | {{OBDtr2|0x31C | char[32] |0096C8| unused | "checkbody" sound name }} | ||
| | {{OBDtr2|0x33C | char[32] |0096C8| unused | "pursue" sound name }} | ||
| | {{OBDtr2|0x35C | char[32] |0096C8| unused | "cower" sound name }} | ||
| | {{OBDtr2|0x37C | char[32] |0096C8| c18_79_14konoko | "superpunch" sound name (reference to 08110-c17_99_28konoko.amb.OSBD of level 0) }} | ||
| | {{OBDtr2|0x39C | char[32] |0096C8| c18_79_15konoko | "superkick" sound name (reference to 08112-c17_99_28konoko.amb.OSBD of level 0) }} | ||
| | {{OBDtr2|0x3BC | char[32] |0096C8| unused | "super3" sound name (only Mukade uses this slot) }} | ||
| | {{OBDtr2|0x3DC | char[32] |0096C8| unused | "super4" sound name (never used in game data) }} | ||
| | {{OBDtrBK|The following 7 vision fields are used to detect if a character can be seen by AI; see Vision Field below for explanation }} | ||
| | {{OBDtr| 0x3FC | float |FF80C0| 00 80 ED 43 | 475.000000 | central vision distance }} | ||
| | {{OBDtr| 0x400 | float |FF80C0| 00 00 16 43 | 150.000000 | peripheral vision distance }} | ||
| | {{OBDtr| 0x404 | float |FF80C0| 7D 1B 44 3F | 0.766044 | vertical vision range }} | ||
| | {{OBDtr| 0x408 | float |FF80C0| F3 B3 51 3F | 0.819152 | central vision range }} | ||
| | {{OBDtr| 0x40C | float |FF80C0| E8 D5 12 3F | 0.573576 | central vision max }} | ||
| | {{OBDtr| 0x410 | float |FF80C0| D5 D0 31 3E | 0.173648 | peripheral vision range }} | ||
| | {{OBDtr| 0x414 | float |FF80C0| 6B 61 D8 BE | 0.422618 | peripheral vision max }} | ||
| | {{OBDtr| 0x418 | int32 |D0C0AF| B4 00 00 00 | 180 | how long will AI know exactly where its enemy is even if it can't see him with central vision field, and attempt to attack him }} | ||
| | {{OBDtr| 0x41C | int32 |D0C0AF| 84 03 00 00 | 900 | how long will AI remain strongly convinced that there is an enemy, but will investigate his presence rather than attack him }} | ||
| | {{OBDtr| 0x420 | int32 |D0C0AF| 10 0E 00 00 | 3600 | how long an AI will remain weakly convinced of an enemy's presence, looking around aimlessly to find him (Glance pursuit mode) }} | ||
| | {{OBDtr| 0x424 | int32 |D0C0AF| 10 0E 00 00 | 3600 | decay time for dropping back from high alert to medium alert }} | ||
{{OBDtr| 0x428 | int32 |D0C0AF| 50 46 00 00 | 18000 | decay time for dropping back from medium alert to low alert }} | |||
| | {{OBDtr| 0x42C | int32 |D0C0AF| A0 8C 00 00 | 36000 | decay time for dropping back from low alert to no alert status }} | ||
| | {{OBDtr| 0x430 | float |EEDDFF| 00 00 80 3F | 1.000000 | hearing radius; defines size of the sound-detection sphere around an AI }} | ||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| 0 | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
|} | |} | ||
;Vision Field | |||
See [[XML:ONCC#.3CVisionConstants.3E|HERE]] for details on how this works. | |||
;File Links | |||
{{Table}} | |||
{{OBDth}} | |||
{{OBDtr| 0x434 | link |C5FF8A| 01 FB 03 00 | 1019 | link to 01019-konoko.[[OBD:ONCV|ONCV]]; defines variants and upgrades }} | |||
{{OBDtr| 0x438 | link |C5FF8A| 01 F9 03 00 | 1017 | link to [[OBD:ONCP|01017-.ONCP]]; lists the particles available for this character (trails, flashes, etc) }} | |||
{{OBDtr| 0x43C | link |C5FF8A| 01 FA 03 00 | 1018 | link to [[OBD:ONIA|01018-.ONIA]]; lists the special impact sounds (used for special combat moves) }} | |||
{{OBDtr| 0x440 | int8 |C5FF8A| 00 | unused | runtime only }} | |||
{{OBDtr| 0x441 | int8 |C5FF8A| 00 | unused | padding }} | |||
{{OBDtr| 0x442 | int16 |C5FF8A| 00 00 | unused | runtime only }} | |||
{{OBDtr2|0x444 | char[16] |C0C0C0| Light | modifier; either hardcoded or defunct (only visible in pm_mod_type.WMM_, level 0) | |||
edit: WMDD says: Effects found for Impact x on Material y with Modifier: pm_mod_types }} | |||
{{OBDtrBK|1=Array of 15 impact elements: first element }} | |||
{{OBDtr2|0x454 | char[128] |FF0080| Footstep_Walk | walk impact (reference to 04124-Footstep_Walk.Impt of level 0); always the same; without the impacts you can't hear the steps of a character }} | |||
{{OBDtr| 0x4D4 | int16 |FF0080| FF FF | -1 | set at runtime to the value stored at 0x08 in [[OBD:Impt|Impt]] }} | |||
{{OBDtrBK|1=End of array }} | |||
{{OBDtr| 0xBF2 | char[2] |FFFFA5| 00 00 | unused | padding (seen below) }} | |||
|} | |||
<br> | |||
<br> | |||
[[Image:oncc_e.gif]] | |||
{{Table}} | |||
{{OBDth}} | |||
{{OBDtr2|0xBF4 | char[64] |71FFB8| unused | special death particle; only the Mad Bomber uses it }} | |||
{{OBDtr| 0xC34 | link |0000BF| 00 00 00 00 | unused | runtime: link to death particle class }} | |||
{{OBDtr| 0xC38 | link |0000BF| 00 00 00 00 | unused | runtime: cache of derived information on body model geometry }} | |||
{{OBDtr| 0xC3C | link |0000BF| 01 E6 03 00 | 998 | link to [[OBD:TRBS|00998-konoko_body_high.TRBS]] }} | |||
{{OBDtr| 0xC40 | link |0000BF| 01 E7 03 00 | 999 | link to [[OBD:TRMA|00999-konoko002_high_texture_generic.TRMA]] }} | |||
{{OBDtr| 0xC44 | link |0000BF| 01 E8 03 00 | 1000 | link to [[OBD:CBPM|01000-.CBPM]] }} | |||
{{OBDtr| 0xC48 | link |0000BF| 01 EC 03 00 | 1004 | link to [[OBD:CBPI|01004-.CBPI]] }} | |||
{{OBDtr| 0xC4C | int32 |804040| 2C 01 00 00 | 300 | how long in ticks before character can leave fight mode }} | |||
{{OBDtr| 0xC50 | int32 |804040| 30 75 00 00 | 30000 | how long in ticks before the Idle animation can be played the first time }} | |||
{{OBDtr| 0xC54 | int32 |804040| 30 75 00 00 | 30000 | how long in ticks before the Idle animation can be played another time }} | |||
{{OBDtr| 0xC58 | int32 |804040| C8 00 00 00 | 200 | base health of the character model; specific health information for every unique character is stored in the [[OBD:BINA/OBJC/CHAR|Character.BINA]] file}} | |||
{{OBDtr| 0xC5C | int32 |804040| 48 00 00 00 | 72 | unused }} | |||
{{OBDtr| 0xC60 | float |FF22FF| 00 00 80 3F | 1.000000 | minimum body size factor }} | |||
{{OBDtr| 0xC64 | float |FF22FF| 00 00 80 3F | 1.000000 | maximum body size factor }} | |||
{{Anchor|DamageTypes}} | |||
{{OBDtrBK|The following 7 float values are ONCC-specific multipliers for each of the 7 PAR3 DamageTypes. See [[Particle damage types]] for an explanation of DamageTypes. Values range from 0.0-1.0, with 0 meaning "no immunity" and 1 meaning "total immunity".<br> | |||
Note: These multipliers only affect the stun damage and knockback components of a PAR3 action, not the HP damage dealt.}} | |||
{{OBDtr| 0xC68 | float |FF22FF| 00 00 00 00 | 0.000000 | "Normal" DamageType multiplier }} | |||
{{OBDtr| 0xC6C | float |FF22FF| 00 00 00 00 | 0.000000 | "MinorStun" DamageType multiplier }} | |||
{{OBDtr| 0xC70 | float |FF22FF| 00 00 00 3F | 0.500000 | "MajorStun" DamageType multiplier }} | |||
{{OBDtr| 0xC74 | float |FF22FF| 00 00 80 3E | 0.250000 | "MinorKnockdown" DamageType multiplier }} | |||
{{OBDtr| 0xC78 | float |FF22FF| 00 00 00 00 | 0.000000 | "MajorKnockdown" DamageType multiplier }} | |||
{{OBDtr| 0xC7C | float |FF22FF| 00 00 00 00 | 0.000000 | "Blownup" DamageType multiplier }} | |||
{{OBDtr| 0xC80 | float |FF22FF| 00 00 00 00 | 0.000000 | "Pickup" DamageType multiplier }} | |||
{{OBDtr| 0xC84 | float |FF22FF| 00 00 00 3F | 0.500000 | damage reducer, employed when the character has a [[boss shield]] (0.0-1.0 <nowiki>=</nowiki> 0%-100%) }} | |||
{{OBDtr| 0xC88 | link |808080| 01 F6 03 00 | 1014 | link to 01014-konoko_animations.[[OBD:TRAC|TRAC]] }} | |||
{{OBDtr| 0xC8C | link |808080| 01 F6 03 00 | 1015 | link to 01015-konoko_screens.[[OBD:TRSC|TRSC]] }} | |||
{{OBDtr| 0xC90 | int16 |FFAA82| 1E 00 | 30 | unused (formerly an AI's rate of fire) }} | |||
{{OBDtr| 0xC92 | int16 |FFAA82| 00 00 | 0 | time between death and deletion, in frames (0 for all characters except Mad Bomber, who is 190 ticks) }} | |||
{{OBDtr| 0xC94 | bitset |00D900| 00 | 0 | TRSC bitset; see below }} | |||
{{OBDtr| 0xC95 | int8 |00D900| 01 | 1 | character has Daodan powers (can overheal with hypos, do more damage in overpower mode) and can display a Daodan aura particle)}} | |||
{{OBDtr| 0xC96 | int8 |00D900| 00 | 0 | character has [[supershield]] }} | |||
{{OBDtr| 0xC97 | int8 |00D900| 00 | 0 | knockdown resistant (used by MutantMuro.ONCC) }} | |||
|} | |||
---- | ;TRSC bitset | ||
---- | :Determines whether character is left-handed or right-handed (weapon is attached to left or right fist bone). Must be consistent with character's TRSC or glitches appear. Possibilities are: | ||
{|align= | :NONE - Character is right-hander with both pistols and rifles | ||
:0x01 - Character is left-hander with both pistols and rifles | |||
:0x02 - Character is left-hander with pistols but "right-hander" with rifles (however, animations for rifles are treated as left-handed) | |||
;Body size factor | |||
{|align=right | |||
|[[Image:ONCC_body_size_factor-original.jpg|120px]] | |||
|- | |- | ||
|[[Image:ONCC_body_size_factor-spawn_order_change.jpg|120px]] | |||
|} | |} | ||
:The geometry specified in a character's [[TRBS]] (Totoro body set) can be multiplied by a scale factor. For example, the '''minime''' and '''behemoth''' [[cheats]] set that factor to 0.25 or 1.8, and back to 1. The size can be used for specific purposes (mini-Strikers, Mutant Muro, giant Shinatama), or it can be used to add generic variety to Oni's characters, as a complement to "character variants" ([[ONCV]]). | |||
:The floats at 0xC60 and 0xC64 define a range in which Oni can pick a random body size factor (if the two values are identical, then the body size factor is effectively fixed instead of random). Konoko, Shinatama (both regular and zombified), Griffin (both variants) and Muro all have a fixed body size of 1. Mini-Strikers have 0.5 and giant Shinatama has 7 (yes, [[seven]]). | |||
:Everybody else (including Barabas, Mukade and Kerr) has a random body size within 5% of 1 (i.e., the floats at 0xC60 and 0xC64 are 0.95 and 1.05). Mutant Muro is a bit odd because his "minimum" body size 1.75 and the "maximum" is 1.74 (the difference is barely noticeable anyway). In the [[Anniversary Edition]], some characters have altered factors (e.g., [[Shinatama Too]]). | |||
:The random value is different every time the [[ONCC]] is looked up (e.g., when a character is spawned or shapeshifted) and is not reproducible. Here is a simple script for {{C|6}} a.k.a. [[IGMD/tctf]] (remove all BSL files and leave only the one below): | |||
func main | |||
{ | |||
ai2_allpassive 1 | |||
ai2_spawn a_v3 | |||
ai2_spawn Lv_40 | |||
ai2_spawn lobby_victim05 | |||
chr_location 1 -1255 -1.5 50 | |||
chr_location 2 -1255 -1.5 60 | |||
chr_location 3 -1255 -1.5 70 | |||
chr_location 4 -1255 -1.5 80 | |||
ai2_lookatme | |||
} | |||
:This script lines up four "usual suspects" against a wall in the parking lot of the TCTF HQ. Load the level repeatedly and note how their heights vary. | |||
{{OBD_File_Footer | type=ONCC | prev=OFGA | next=ONCP | name=Oni Character Class | family=Character}} | |||
{{OBD}} |
Latest revision as of 19:08, 29 February 2024
|
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x000 | res_id | 01 DF 03 00 | 991 | 00991-konoko_generic.ONCC |
0x004 | lev_id | 01 00 00 06 | 0 | level 3 |
0x008 | float | CD CC 0C 3F | 0.550000 | fall speed (always 0.55) (mostly unused, see below) |
0x00C | float | 8F C2 75 3D | 0.060000 | strength of gravity for this character |
0x010 | float | CD CC 8C 3F | 1.100000 | starting velocity for a simple (tap) JUMP |
0x014 | float | 00 00 80 C0 | -4.000000 | maximum velocity for jumping and falling |
0x018 | float | 8F C2 F5 3C | 0.030000 | upward acceleration as long as you hold JUMP |
0x01C | int16 | 07 00 | 7 | fall timer (always 7) (mostly unused, see below) |
0x01E | int16 | 14 00 | 20 | how long you can continue holding down JUMP to increase the height of your jump |
0x020 | float | 00 00 34 42 | 45.000000 | maximum falling height without damage |
0x024 | float | 00 00 07 43 | 135.000000 | maximum falling height with damage |
- Units
- times are in frames
- heights are in world units (0.1m or 4")
- velocities are in world units per tick (1/60s)
- accelerations are in world units per tick squared
- Fall speed and timer
- These two fields are only looked at when predicting whether an attack will hit a target while the attacker is in midair. They are probably a development relic that is looked at in error, as the actual falling speed is determined by 0x00C and the actual fall timer is 0x01E.
- Jetpack timer
- You can press JUMP multiple times during the time window when it's large enough. See the Barabas Jetpack mod for an application of this principle.
- Falling height
- let FH1 be the height at 0x20
- let FH2 be the height at 0x24
- let BH be the base health of the character
- let FH be the actual falling height
- then, if FH > FH2, the character is killed
- if FH < FH1, the character takes no damage
- if FH1 < FH < FH2, the character takes damage (FH - FH1) / (FH2 - FH1) * BH
- Shadow Constants
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x028 | link | 01 F8 03 00 | 1016 | link to 01016-shadow1.TXMP |
0x02C | float | 00 00 40 41 | 12.000000 | height where the diameter of the shadow shrinks to 0x03C |
0x030 | float | 00 00 00 41 | 8.000000 | height range over which the diameter of the shadow decreases from 0x034 to 0x038 and the shadow starts to fades out from 0x040 to 0x042 |
0x034 | float | 00 00 C0 40 | 6.000000 | maximum diameter of the shadow |
0x038 | float | 00 00 90 40 | 4.500000 | diameter that the shadow shrinks to when 0x030 is reached |
0x03C | float | 00 00 40 40 | 3.000000 | minimum diameter of the shadow |
0x040 | int16 | 30 00 | 48 | starting transparency of the shadow as the character rises towards 0x030 |
0x042 | int16 | 30 00 | 48 | starting transparency of the shadow when the character begins to get above 0x030 |
- Jump Constants
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x044 | float | 00 00 C8 41 | 25.000000 | unused (always 25) |
0x048 | int8 | 16 | 22 | unused (always 22) |
0x049 | int8 | 06 | 6 | unused (always 6) |
0x04A | char[2] | AD DE | dead | pad |
- Cover Constants
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x04C | float | 00 00 20 42 | 40.000000 | unused (always 40) |
0x050 | float | 00 00 96 43 | 300.000000 | unused (always 300) |
0x054 | float | 35 FA 8E 3C | 0.017453 | unused (always π/180) |
0x058 | float | DB 0F C9 3F | 1.570796 | unused (always π/2) |
- Autofreeze Constants
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x05C | float | 00 00 A0 40 | 5.000000 | unused (always 5) |
0x060 | float | 00 00 80 3F | 1.000000 | unused (always 1) |
- Inventory Constants
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x064 | int16 | 06 00 | 6 | hypo regeneration rate in ticks per hit point restored |
0x066 | char[2] | AD DE | dead | ignored |
- LOD Constants
Squares of the distance from the camera at which each LOD kicks in (this article has the full calculation for arriving at the LOD to use)
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x068 | float | 00 10 3D 48 | 193600.000000 | always 440 squared |
0x06C | float | 00 10 3D 47 | 48400.000000 | always 220 squared |
0x070 | float | 00 10 3D 46 | 12100.000000 | always 110 squared |
0x074 | float | 00 00 00 00 | 0.000000 | always 0 |
0x078 | float | 00 00 00 00 | 0.000000 | always 0 |
- Hurt Sound Constants
See HERE for the full calculation of whether to play a hurt sound and which sound to play.
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x07C | int16 | 23 00 | 35 | minimum chance of playing a pain sound (always 35) |
0x07E | int16 | 5A 00 | 90 | maximum chance of playing a pain sound (always 90) |
0x080 | int16 | 0F 00 | 15 | at least this much damage must be done to play a pain sound (always 15) |
0x082 | int16 | 78 00 | 120 | time in ticks before the damage tracker used for this AI's pain sounds resets (always 120) |
0x084 | int16 | 23 00 | 35 | time in ticks that must pass between pain sounds being played (always 35) |
0x086 | int16 | 01 00 | 1 | number of times that AI will play light pain sound before "upgrading" to a medium pain sound (always 1) |
0x088 | int16 | 02 00 | 2 | number of times that AI will play medium pain sound before "upgrading" to a heavy pain sound (always 2) |
0x08A | int16 | 64 00 | 100 | chance of playing a death sound (always 100) |
0x08C | int16 | 0A 00 | 10 | minimum damage required for an AI to play the pain sound at maximum volume (always 10) |
0x08E | int16 | 0C 00 | 12 | cumulative damage before a light pain sound gets upgraded to a medium pain sound (always 12) |
0x090 | int16 | 16 00 | 22 | cumulative damage before a medium pain sound gets upgraded to a heavy pain sound (always 22) |
0x092 | int8 | 00 | 0 | runtime only: if sound pointers have been set |
0x093 | char[1] | DE | dead | ignored |
0x094 | float | 00 00 00 3F | 0.500000 | minimum volume of pain sound (before 0x08C is reached and volume becomes 100%) |
0x098 | char[32] | konoko_hurt_light | light hurt sound (reference to 08121-konoko_hurt_light.imp.OSBD of level 0) | |
0x0B8 | char[32] | konoko_hurt_medium | medium hurt sound (reference to 08123-konoko_hurt_medium.imp.OSBD of level 0) | |
0x0D8 | char[32] | konoko_hurt_heavy | heavy hurt sound (reference to 08119-konoko_hurt_heavy.imp.OSBD of level 0) | |
0x0F8 | char[32] | konoko_death | death sound (reference to 08115-konoko_death.imp.OSBD of level 0) | |
0x118 | int32 | 00 00 00 00 | 0 | runtime only: pointer to light hurt sound |
0x11C | int32 | 00 00 00 00 | 0 | runtime only: pointer to medium hurt sound |
0x120 | int32 | 00 00 00 00 | 0 | runtime only: pointer to heavy hurt sound |
0x124 | int32 | 00 00 00 00 | 0 | runtime only: pointer to death sound |
- AI Constants
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x128 | bitset | 17 00 00 00 | 23 | AI options bitset; see below |
0x12C | float | 00 00 80 3F | 1.000000 | AI rotation speed factor |
0x130 | int16 | 06 00 | 6 | minimum number of frames AI remains in fallen position when it is knocked down |
0x132 | int16 | 18 00 | 24 | maximum number of frames AI remains in fallen position when it is knocked down |
0x134 | uint32 | 0F 00 00 00 | 15 | number of frames after which AI realizes that it is in the firing spread and it starts dodging |
0x138 | float | 00 00 80 3F | 1.000000 | minimum dodge time; how long AI should perform dodging/hiding in response to being inside a firing spread (the higher it is, the longer he will hide/dodge even after firing spread disappears) |
0x13C | float | 00 00 80 3F | 1.000000 | dodge priority dampening; the higher it is, the lower priority the AI gives to dodging |
- AI options bitset
- allows or disables some parts of the AI behavior
- no flags - startle anim is enabled, rest is disabled
- 0x01 - startle anim disabled
- 0x02 - firing spread/projectile dodge enabled for melee
- 0x04 - requires 0x02; firing spread/projectile dodge enabled for weapons; AI tries to face shooter and shoot back while dodging
- 0x08 - requires 0x02, overrides 0x04 if both are set; firing spread/projectile dodge enabled for weapons; AI isn't shooting, it just tends to run away, not facing shooter
- 0x10 - bit not used
- AI rotation speed factor
- reference rotation speed is about 1 turn (360°) per second
- the setting is only effective if the AI is in control
- so it's a bit like the AI's mouse sensitivity :)
- AI Targeting Prediction Constants
See HERE for how the variables here interact to control the AI's target prediction.
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x140 | float | 00 00 00 3F | 0.500000 | multiplied against target's distance to get error in AI's/turret's first wild shot (always 0.5) |
0x144 | float | 00 00 C8 41 | 25.000000 | max value for result of multiplication above (always 25) |
0x148 | float | 00 00 80 3F | 1.000000 | accuracy multiplier for prediction of target's position (always 1) |
0x14C | int32 | 00 00 00 00 | 0 | maximum allowed frames of lookback to be used for predicting target's position (always 0) |
0x150 | int32 | 05 00 00 00 | 5 | frames of delay in recognizing target's current position (always 5) |
0x154 | int32 | 0F 00 00 00 | 15 | number of frames over which AI can average target's velocity to help predict position (always 15) |
0x158 | int32 | 3C 00 00 00 | 60 | size in frames of target's history location buffer (always 60) |
- AI Weapon Skills
This is an array of 13 sets of skill variables, one for each weapon. Below is the data for the first element:
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x15C | float | 00 00 00 00 | 0.000000 | recoil compensation amount (0.0 = no compensation, 1.0 = no recoil) |
0x160 | float | 00 00 00 00 | 0.000000 | minimum aiming error as an angle in radians |
0x164 | float | 00 00 00 00 | 0.000000 | shot grouping error as a percentage |
0x168 | float | 00 00 80 3F | 1.000000 | how quickly aiming inaccuracy decreases or increases while shooting (ranges from 0.0 to 1.0) |
0x16C | float | 00 00 80 3F | 1.000000 | shooting inaccuracy multiplier |
0x170 | uint16 | 00 00 | 0 | minimum delay in ticks before pulling the trigger again |
0x172 | uint16 | 00 00 | 0 | maximum delay in ticks before pulling the trigger again |
AI weapon skills can be reviewed with e.g. ai2_skill_select konoko_generic w1_tap and then either ai2_skill_show (prints to console) or ai2_skill_save (prints to file).
The first weapon (weapon 0) is not in the game anymore, whatever it was. Mutant Muro's thunderbolt is handled as animation-bound particles, although it used to be handled as a weapon (same for Mukade's Devil Star, except w10_sni is still available). Barabas' Wave Motion Cannon is a bit mixed up since the beam is made of w12_ba2 particles and the grenade is a w11_ba1 particle.
Weapon | Offset | recoil | bestangle | error | decay | inaccuracy | delays |
---|---|---|---|---|---|---|---|
w0_sec | 0x15C/0x173 | 0.0 | 0.000000 | 0.00 | 1.0 | 1.0 | 0 - 0 |
w1_tap | 0x174/0x18B | 0.0 | 0.000000 | 0.40 | 0.4 | 0.0 | 30 - 45 |
w2_sap | 0x18C/0x193 | 0.3 | 0.013962 | 0.13 | 1.0 | 1.0 | 0 - 0 |
w3_phr | 0x194/0x20B | 0.3 | 0.010472 | 0.05 | 0.5 | 1.0 | 0 - 0 |
w4_psm | 0x20C/0x213 | 0.3 | 0.015707 | 0.03 | 0.2 | 1.0 | 0 - 0 |
w5_sbg | 0x214/0x22B | 0.3 | 0.001745 | 0.00 | 0.1 | 1.0 | 0 - 0 |
w6_vdg | 0x22C/0x233 | 0.3 | 0.001745 | 0.13 | 0.9 | 1.0 | 0 - 0 |
w7_scc | 0x234/0x24B | 0.3 | 0.001745 | 0.05 | 0.1 | 1.0 | 0 - 0 |
w8_mbo | 0x24C/0x253 | 0.3 | 0.005236 | 0.01 | 0.5 | 1.0 | 0 - 0 |
w9_scr | 0x254/0x26B | 0.3 | 0.010472 | 0.04 | 0.5 | 1.0 | 0 - 0 |
w10_sni | 0x26C/0x273 | 0.0 | 0.000000 | 0.00 | 1.0 | 1.0 | 0 - 0 |
w11_ba1 | 0x274/0x28B | 0.0 | 0.000000 | 0.00 | 1.0 | 1.0 | 0 - 0 |
w12_ba2 | 0x28B/0x293 | 0.0 | 0.000000 | 0.00 | 1.0 | 1.0 | 0 - 0 |
- Other AI Behaviors
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x294 | int32 | 5A 00 00 00 | 90 | how long AI will continue shooting a dead body to make sure it's dead (always 90) |
0x298 | int32 | F0 00 00 00 | 240 | how long AI will stand over dead body before returning to last job (always 240) |
0x29C | int32 | B4 00 00 00 | 180 | how long after losing sight of target until AI engages pursuit mode (always 180) |
0x2A0 | int32 | 28 00 00 00 | 40 | chance (as a percentage) of AI taunting a dead body |
0x2A4 | int32 | 37 00 00 00 | 55 | chance (as a percentage) of AI running to some weapon to pick it up; can be checked in Dev Mode with the debug_gun_behavior command |
0x2A8 | int32 | 3C 00 00 00 | 60 | chance (as a percentage) of AI performing a running weapon pickup (including acrobatics moves, slides) instead of the normal "stop and pick up"; this is calculated after the engine decides that the AI will go for a gun |
0x2AC | int16 | 00 00 | 0 | combat profile ID; for example *0D* is for Mutant Muro |
0x2AE | int16 | 16 00 | 22 | melee profile ID |
0x2B0 | int8 | 64 | 100 | "taunt" sound probability (always) |
0x2B1 | int8 | 00 | 0 | "alert" sound probability (never) |
0x2B2 | int8 | 00 | 0 | "startle" sound probability (never) |
0x2B3 | int8 | 00 | 0 | "checkbody" sound probability (never) |
0x2B4 | int8 | 00 | 0 | "pursue" sound probability (never) |
0x2B5 | int8 | 00 | 0 | "cower" sound probability (never) |
0x2B6 | int8 | 64 | 100 | "superpunch" probability (always) |
0x2B7 | int8 | 64 | 100 | "superkick" probability (always) |
0x2B8 | int8 | 00 | 0 | "super3" sound probability (never) |
0x2B9 | int8 | 00 | 0 | "super4" sound probability (never) |
0x2BA | int16 | 00 00 | 0 | probably a blank filler (always the same) |
0x2BC | char[32] | c17_99_28konoko | "taunt" sound (reference to 08108-c17_99_28konoko.amb.OSBD of level 0) | |
0x2DC | char[32] | unused | "alert" sound name | |
0x2FC | char[32] | unused | "startle" sound name | |
0x31C | char[32] | unused | "checkbody" sound name | |
0x33C | char[32] | unused | "pursue" sound name | |
0x35C | char[32] | unused | "cower" sound name | |
0x37C | char[32] | c18_79_14konoko | "superpunch" sound name (reference to 08110-c17_99_28konoko.amb.OSBD of level 0) | |
0x39C | char[32] | c18_79_15konoko | "superkick" sound name (reference to 08112-c17_99_28konoko.amb.OSBD of level 0) | |
0x3BC | char[32] | unused | "super3" sound name (only Mukade uses this slot) | |
0x3DC | char[32] | unused | "super4" sound name (never used in game data) | |
The following 7 vision fields are used to detect if a character can be seen by AI; see Vision Field below for explanation | ||||
0x3FC | float | 00 80 ED 43 | 475.000000 | central vision distance |
0x400 | float | 00 00 16 43 | 150.000000 | peripheral vision distance |
0x404 | float | 7D 1B 44 3F | 0.766044 | vertical vision range |
0x408 | float | F3 B3 51 3F | 0.819152 | central vision range |
0x40C | float | E8 D5 12 3F | 0.573576 | central vision max |
0x410 | float | D5 D0 31 3E | 0.173648 | peripheral vision range |
0x414 | float | 6B 61 D8 BE | 0.422618 | peripheral vision max |
0x418 | int32 | B4 00 00 00 | 180 | how long will AI know exactly where its enemy is even if it can't see him with central vision field, and attempt to attack him |
0x41C | int32 | 84 03 00 00 | 900 | how long will AI remain strongly convinced that there is an enemy, but will investigate his presence rather than attack him |
0x420 | int32 | 10 0E 00 00 | 3600 | how long an AI will remain weakly convinced of an enemy's presence, looking around aimlessly to find him (Glance pursuit mode) |
0x424 | int32 | 10 0E 00 00 | 3600 | decay time for dropping back from high alert to medium alert |
0x428 | int32 | 50 46 00 00 | 18000 | decay time for dropping back from medium alert to low alert |
0x42C | int32 | A0 8C 00 00 | 36000 | decay time for dropping back from low alert to no alert status |
0x430 | float | 00 00 80 3F | 1.000000 | hearing radius; defines size of the sound-detection sphere around an AI |
- Vision Field
See HERE for details on how this works.
- File Links
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x434 | link | 01 FB 03 00 | 1019 | link to 01019-konoko.ONCV; defines variants and upgrades |
0x438 | link | 01 F9 03 00 | 1017 | link to 01017-.ONCP; lists the particles available for this character (trails, flashes, etc) |
0x43C | link | 01 FA 03 00 | 1018 | link to 01018-.ONIA; lists the special impact sounds (used for special combat moves) |
0x440 | int8 | 00 | unused | runtime only |
0x441 | int8 | 00 | unused | padding |
0x442 | int16 | 00 00 | unused | runtime only |
0x444 | char[16] | Light | modifier; either hardcoded or defunct (only visible in pm_mod_type.WMM_, level 0)
edit: WMDD says: Effects found for Impact x on Material y with Modifier: pm_mod_types | |
Array of 15 impact elements: first element | ||||
0x454 | char[128] | Footstep_Walk | walk impact (reference to 04124-Footstep_Walk.Impt of level 0); always the same; without the impacts you can't hear the steps of a character | |
0x4D4 | int16 | FF FF | -1 | set at runtime to the value stored at 0x08 in Impt |
End of array | ||||
0xBF2 | char[2] | 00 00 | unused | padding (seen below) |
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0xBF4 | char[64] | unused | special death particle; only the Mad Bomber uses it | |
0xC34 | link | 00 00 00 00 | unused | runtime: link to death particle class |
0xC38 | link | 00 00 00 00 | unused | runtime: cache of derived information on body model geometry |
0xC3C | link | 01 E6 03 00 | 998 | link to 00998-konoko_body_high.TRBS |
0xC40 | link | 01 E7 03 00 | 999 | link to 00999-konoko002_high_texture_generic.TRMA |
0xC44 | link | 01 E8 03 00 | 1000 | link to 01000-.CBPM |
0xC48 | link | 01 EC 03 00 | 1004 | link to 01004-.CBPI |
0xC4C | int32 | 2C 01 00 00 | 300 | how long in ticks before character can leave fight mode |
0xC50 | int32 | 30 75 00 00 | 30000 | how long in ticks before the Idle animation can be played the first time |
0xC54 | int32 | 30 75 00 00 | 30000 | how long in ticks before the Idle animation can be played another time |
0xC58 | int32 | C8 00 00 00 | 200 | base health of the character model; specific health information for every unique character is stored in the Character.BINA file |
0xC5C | int32 | 48 00 00 00 | 72 | unused |
0xC60 | float | 00 00 80 3F | 1.000000 | minimum body size factor |
0xC64 | float | 00 00 80 3F | 1.000000 | maximum body size factor
|
The following 7 float values are ONCC-specific multipliers for each of the 7 PAR3 DamageTypes. See Particle damage types for an explanation of DamageTypes. Values range from 0.0-1.0, with 0 meaning "no immunity" and 1 meaning "total immunity". Note: These multipliers only affect the stun damage and knockback components of a PAR3 action, not the HP damage dealt. | ||||
0xC68 | float | 00 00 00 00 | 0.000000 | "Normal" DamageType multiplier |
0xC6C | float | 00 00 00 00 | 0.000000 | "MinorStun" DamageType multiplier |
0xC70 | float | 00 00 00 3F | 0.500000 | "MajorStun" DamageType multiplier |
0xC74 | float | 00 00 80 3E | 0.250000 | "MinorKnockdown" DamageType multiplier |
0xC78 | float | 00 00 00 00 | 0.000000 | "MajorKnockdown" DamageType multiplier |
0xC7C | float | 00 00 00 00 | 0.000000 | "Blownup" DamageType multiplier |
0xC80 | float | 00 00 00 00 | 0.000000 | "Pickup" DamageType multiplier |
0xC84 | float | 00 00 00 3F | 0.500000 | damage reducer, employed when the character has a boss shield (0.0-1.0 = 0%-100%) |
0xC88 | link | 01 F6 03 00 | 1014 | link to 01014-konoko_animations.TRAC |
0xC8C | link | 01 F6 03 00 | 1015 | link to 01015-konoko_screens.TRSC |
0xC90 | int16 | 1E 00 | 30 | unused (formerly an AI's rate of fire) |
0xC92 | int16 | 00 00 | 0 | time between death and deletion, in frames (0 for all characters except Mad Bomber, who is 190 ticks) |
0xC94 | bitset | 00 | 0 | TRSC bitset; see below |
0xC95 | int8 | 01 | 1 | character has Daodan powers (can overheal with hypos, do more damage in overpower mode) and can display a Daodan aura particle) |
0xC96 | int8 | 00 | 0 | character has supershield |
0xC97 | int8 | 00 | 0 | knockdown resistant (used by MutantMuro.ONCC) |
- TRSC bitset
- Determines whether character is left-handed or right-handed (weapon is attached to left or right fist bone). Must be consistent with character's TRSC or glitches appear. Possibilities are:
- NONE - Character is right-hander with both pistols and rifles
- 0x01 - Character is left-hander with both pistols and rifles
- 0x02 - Character is left-hander with pistols but "right-hander" with rifles (however, animations for rifles are treated as left-handed)
- Body size factor
- The geometry specified in a character's TRBS (Totoro body set) can be multiplied by a scale factor. For example, the minime and behemoth cheats set that factor to 0.25 or 1.8, and back to 1. The size can be used for specific purposes (mini-Strikers, Mutant Muro, giant Shinatama), or it can be used to add generic variety to Oni's characters, as a complement to "character variants" (ONCV).
- The floats at 0xC60 and 0xC64 define a range in which Oni can pick a random body size factor (if the two values are identical, then the body size factor is effectively fixed instead of random). Konoko, Shinatama (both regular and zombified), Griffin (both variants) and Muro all have a fixed body size of 1. Mini-Strikers have 0.5 and giant Shinatama has 7 (yes, seven).
- Everybody else (including Barabas, Mukade and Kerr) has a random body size within 5% of 1 (i.e., the floats at 0xC60 and 0xC64 are 0.95 and 1.05). Mutant Muro is a bit odd because his "minimum" body size 1.75 and the "maximum" is 1.74 (the difference is barely noticeable anyway). In the Anniversary Edition, some characters have altered factors (e.g., Shinatama Too).
- The random value is different every time the ONCC is looked up (e.g., when a character is spawned or shapeshifted) and is not reproducible. Here is a simple script for CHAPTER 06 . COUNTERATTACK a.k.a. IGMD/tctf (remove all BSL files and leave only the one below):
func main { ai2_allpassive 1 ai2_spawn a_v3 ai2_spawn Lv_40 ai2_spawn lobby_victim05 chr_location 1 -1255 -1.5 50 chr_location 2 -1255 -1.5 60 chr_location 3 -1255 -1.5 70 chr_location 4 -1255 -1.5 80 ai2_lookatme }
- This script lines up four "usual suspects" against a wall in the parking lot of the TCTF HQ. Load the level repeatedly and note how their heights vary.
ONI BINARY DATA |
---|
OFGA << Other file types >> ONCP |
ONCC : Oni Character Class |
Character file |