OBD:ONCC: Difference between revisions
Jump to navigation
Jump to search
m (bunch of small discoveries) |
mNo edit summary |
||
Line 262: | Line 262: | ||
{{OBDtr| 0xC68 | float |FF22FF| 00 00 00 00 | 0.000000 | unknown; always the same }} | {{OBDtr| 0xC68 | float |FF22FF| 00 00 00 00 | 0.000000 | unknown; always the same }} | ||
{{OBDtr| 0xC6C | float |FF22FF| 00 00 00 00 | 0.000000 | unknown; always the same }} | {{OBDtr| 0xC6C | float |FF22FF| 00 00 00 00 | 0.000000 | unknown; always the same }} | ||
{{OBDtr| 0xC70 | float |FF22FF| 00 00 00 3F | 0.500000 | | {{OBDtr| 0xC70 | float |FF22FF| 00 00 00 3F | 0.500000 | stun timer; specifies how long should be this char stunned when hit with w6_vdg; the longest time possible to be stunned is when this byte is zero. Then this ONCC is stunned for 200 frames (30 frames for initial stagger + the rest of the frames is stun animation). The shortest time is for 1.000000 (no stagger/stun at all) }} | ||
{{OBDtr| 0xC74 | float |FF22FF| 00 00 80 3E | 0.250000 | unknown }} | {{OBDtr| 0xC74 | float |FF22FF| 00 00 80 3E | 0.250000 | unknown }} | ||
{{OBDtr| 0xC78 | float |FF22FF| 00 00 00 00 | 0.000000 | unknown; always the same }} | {{OBDtr| 0xC78 | float |FF22FF| 00 00 00 00 | 0.000000 | unknown; always the same }} |
Revision as of 18:27, 19 September 2007
|
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 | downwards velocity? (unknown, always 0.55) |
0x00C | float | 8F C2 75 3D | 0.060000 | downward gravity acceleration |
0x010 | float | CD CC 8C 3F | 1.100000 | starting velocity for a simple (tap) JUMP |
0x014 | float | 00 00 80 C0 | -4.000000 | limit velocity for jumping and gravity flight |
0x018 | float | 8F C2 F5 3C | 0.030000 | upward acceleration (jetpack) if you hold JUMP |
0x01C | int16 | 07 00 | 7 | gravity timer? (unknown, always 7) |
0x01E | int16 | 14 00 | 20 | jetpack timer; time during which you can use the jetpack |
0x020 | float | 00 00 34 42 | 45.000000 | maximal falling height without damage |
0x024 | float | 00 00 07 43 | 135.000000 | maximal falling height with damage |
- Units
- times are in frames
- heights are in world units
- velocities are in world units per frames
- accelerations are in world units per frames squared
- Downwards velocity
- could correspond to the steady push experienced when neither jumping nor falling
- would be roughly equivalent to the starting velocity of a fall
- although the value .55 seems right, the "sinking" seems to be hardcoded now
- Gravity timer
- Seems to be hardcoded now (could be the time until gravity switches on)
- Jetpack timer
- You can press JUMP multiple times during the time window (quite fun!)
- 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
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 shadow fades out completely |
0x030 | float | 00 00 00 41 | 8.000000 | height where the diameter of the shadow decreases and the shadow fades out half |
0x034 | float | 00 00 C0 40 | 6.000000 | height where the diameter of the shadow decreases |
0x038 | float | 00 00 90 40 | 4.500000 | height where the diameter of the shadow decreases |
0x03C | float | 00 00 40 40 | 3.000000 | height where the diameter of the shadow decreases |
0x040 | int16 | 30 00 | 48 | transparency of the shadow for the first part of a jump |
0x042 | int16 | 30 00 | 48 | transparency of the shadow for the second part of a jump |
0x044 | float | 00 00 C8 41 | 25.000000 | unknown; always the same |
0x048 | int8 | 16 | 22 | unknown |
0x049 | int8 | 06 | 6 | unknown; always the same |
0x04A | char[2] | AD DE | dead | unused; always the same |
0x04C | float | 00 00 20 42 | 40.000000 | unknown; always the same |
0x050 | float | 00 00 96 43 | 300.000000 | unknown; always the same |
0x054 | float | 35 FA 8E 3C | 0.017453 | unknown; always the same |
0x058 | float | DB 0F C9 3F | 1.570796 | unknown; always the same (1.57 = pi/2) |
0x05C | float | 00 00 A0 40 | 5.000000 | unknown; always the same |
0x060 | float | 00 00 80 3F | 1.000000 | unknown; always the same |
0x064 | int16 | 06 00 | 6 | (inverse) hypo regeneration rate in frames per hitpoint |
0x066 | char[2] | AD DE | dead | unused |
0x068 | float | 00 10 3D 48 | 193600.000000 | unknown; always the same |
0x06C | float | 00 10 3D 47 | 48400.000000 | unknown; always the same |
0x070 | float | 00 10 3D 46 | 12100.000000 | unknown; always the same |
0x074 | float | 00 00 00 00 | 0.000000 | unknown; always the same |
0x078 | float | 00 00 00 00 | 0.000000 | unknown; always the same |
0x07C | int16 | 23 00 | 35 | unknown; always the same |
0x07E | int16 | 5A 00 | 90 | unknown; always the same |
0x080 | int16 | 0F 00 | 15 | unknown; always the same |
0x082 | int16 | 78 00 | 120 | unknown; always the same |
0x084 | int16 | 23 00 | 35 | unknown; always the same |
0x086 | int16 | 01 00 | 1 | unknown; always the same |
0x088 | int16 | 02 00 | 2 | unknown; always the same |
0x08A | int16 | 64 00 | 100 | unknown; always the same |
0x08C | int16 | 0A 00 | 10 | unknown; always the same |
0x08E | int16 | 0C 00 | 12 | unknown; always the same |
0x090 | int16 | 16 00 | 22 | unknown; always the same |
0x092 | int8 | 00 | 0 | used at runtime only: if one sound pointers have been set |
0x093 | char[1] | DE | dead | unused; always the same |
0x094 | float | 00 00 00 3F | 0.500000 | unknown; always the same (sound volume?) |
0x098 | char[32] | konoko_hurt_light | hurt light sound (reference to 08121-konoko_hurt_light.imp.OSBD of level 0) | |
0x0B8 | char[32] | konoko_hurt_medium | hurt medium sound (reference to 08123-konoko_hurt_medium.imp.OSBD of level 0) | |
0x0D8 | char[32] | konoko_hurt_heavy | hurt heavy 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 hurt light sound |
0x11C | int32 | 00 00 00 00 | 0 | runtime only: pointer to hurt medium sound |
0x120 | int32 | 00 00 00 00 | 0 | runtime only: pointer to hurt heavy sound |
0x124 | int32 | 00 00 00 00 | 0 | runtime only: pointer to death sound |
0x128 | bitsets | 17 00 00 00 | 23 | general AI option bitset collection ; see below |
0x12C | float | 00 00 80 3F | 1.000000 | AI rotation speed factor |
0x130 | int16 | 06 00 | 6 | minimal fallen time; (???number of frames???time in miliseconds???) for which AI remains in *fallen* position when it is knockdowned |
0x132 | int16 | 18 00 | 24 | maximal fallen time; (???number of frames???time in miliseconds???) for which AI remains in *fallen* position when it is knockdowned |
0x134 | int16 | 0F 00 | 15 | minimal realize firingspread time; (???number of frames???time in miliseconds???) after which AI realizes that it is in the firing spread (and it starts dodging) |
0x136 | int16 | 00 00 | 0 | maximal realize firingspread time; (???number of frames???time in miliseconds???) |
- 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 :)
- General AI options bitset
- allows or disables some parts of the AI behavior, incomplete so far...
- NONE - startle anim is enabled, rest is disabled
- 0x01 - startle anim disabled
- 0x02 - firingspread/projectile dodge enabled for melee
- 0x04 - requires 0x02; firingspread/projectile dodge enabled for weapons; AI tries to face shooter and shoot back while dodging
- 0x08 - requires 0x02, overrides 0x04 if both are set; firingspread/projectile dodge enabled for weapons; AI isn't shooting, it just tends to run away, not facing shooter
- 0x10 - unknown
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x138 | float | 00 00 80 3F | 1.000000 | minimal firingspread dodge amount; IMO similar to maneouvre variable, it tells AI how long it should perform dodging/hiding in response to some time spent inside firing spread (so setting this very high means that once enemy starts dodging/hiding, he will perform it even after firing spread disappears) |
0x13C | float | 00 00 80 3F | 1.000000 | maximal firingspread dodge amount; IMO similar to maneouvre variable |
0x140 | float | 00 00 00 3F | 0.500000 | unknown; always the same |
0x144 | float | 00 00 C8 41 | 25.000000 | unknown; always the same |
0x148 | float | 00 00 80 3F | 1.000000 | unknown |
0x14C | int32 | 00 00 00 00 | 0 | unknown |
0x150 | int32 | 05 00 00 00 | 5 | unknown |
0x154 | int32 | 0F 00 00 00 | 15 | unknown |
0x158 | int32 | 3C 00 00 00 | 60 | unknown |
First of 13 elements (grey outline) | ||||
0x15C | float | 00 00 00 00 | 0.000000 | recoil compensation amount (0.0 = min, 1.0 = max) |
0x160 | float | 00 00 00 00 | 0.000000 | best aiming angle in radians |
0x164 | float | 00 00 00 00 | 0.000000 | shot grouping error |
0x168 | float | 00 00 80 3F | 1.000000 | shot grouping decay |
0x16C | float | 00 00 80 3F | 1.000000 | shooting inaccuracy multiplier |
0x170 | int16 | 00 00 | 0 | minimum delay between shots in frames |
0x172 | int16 | 00 00 | 0 | maximum delay between shots in frames |
- SHOOTING SKILLS
These 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)
- Fields
- recoil compensation amount, between 0 and 1 (float)
- best aiming angle, in radians (float)
- shot grouping error (float)
- shot grouping decay (float)
- shooting inaccuracy multiplier (float)
- minimum delay between shots, in frames (short)
- maximum delay between shots, in frames (short)
The first weapon (weapon 0) is not in the game anymore, whatever that was. Muro's thunderbolt is handled as animation-bound particles, although it used to be handled as a weapon (same for Mukade's ball, except w10_sni is still available) (w12_ba2 and w11_ba1 are a bit mixed up : the beam is made of w12_ba2 particles, and the grenade is a w11_ba1 particle...)
See screenshot for the raw hex (example is konoko_generic from level3_Final)
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 |
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x294 | int32 | 5A 00 00 00 | 90 | unknown; always the same |
0x298 | int32 | F0 00 00 00 | 240 | unknown; always the same |
0x29C | int32 | B4 00 00 00 | 180 | unknown; always the same |
0x2A0 | int32 | 28 00 00 00 | 40 | unknown; always the same |
0x2A4 | int32 | 37 00 00 00 | 55 | go for gun chance (55%); determines possibility that AI will run to some weapon and take it; can be checked in devmode by *debug_gun_behavior* command |
0x2A8 | int32 | 3C 00 00 00 | 60 | running pickup chance (60%); this value is possibility of AI running weapon pickup (acrobatics, slides) instead of normal "stop->pickup";this is calculated AFTER engine decides that AI should run for weapon |
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 slot is used |
0x2B1 | int8 | 00 | 0 | "alert" sound slot is empty |
0x2B2 | int8 | 00 | 0 | "startle" sound slot is empty |
0x2B3 | int8 | 00 | 0 | "checkbody" sound slot is empty |
0x2B4 | int8 | 00 | 0 | "pursue" sound slot is empty |
0x2B5 | int8 | 00 | 0 | "cower" sound slot is empty |
0x2B6 | int8 | 64 | 100 | "superpunch" sound slot is used |
0x2B7 | int8 | 64 | 100 | "superkick" sound slot is used |
0x2B8 | int8 | 00 | 0 | "super3" sound slot is empty |
0x2B9 | int8 | 00 | 0 | "super4" sound slot is empty (always the same) |
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 | |
0x2FC | char[32] | unused | "startle" sound | |
0x31C | char[32] | unused | "checkbody" sound | |
0x33C | char[32] | unused | "pursue" sound | |
0x35C | char[32] | unused | "cower" sound | |
0x37C | char[32] | c18_79_14konoko | "superpunch" sound (reference to 08110-c17_99_28konoko.amb.OSBD of level 0) | |
0x39C | char[32] | c18_79_15konoko | "superkick" sound (reference to 08112-c17_99_28konoko.amb.OSBD of level 0) | |
0x3BC | char[32] | unused | "super3" sound (only the superninja uses this slot) | |
0x3DC | char[32] | unused | "super4" sound (never used in Oni) | |
0x3FC | float | 00 80 ED 43 | 475.000000 | central vision field range; you can make it visible with the script command *ai2_showvision =1* |
0x400 | float | 00 00 16 43 | 150.000000 | peripheral vision field range; you can make it visible with the script command *ai2_showvision = 1* |
0x404 | float | 7D 1B 44 3F | 0.766044 | horizontal angle between two couples of "eye-rays" (one couple is left, one if right eye); works for both vision fields |
0x408 | float | F3 B3 51 3F | 0.819152 | vision field curve for central vision field; vision field looks like something between cone and cylinder; this value affect central angle of that; the higher this value is, the more is this field wrapped in order to achieve shaper angle; when set lower, vision field unwraps totally and it looks like radar antenna, attached to a character by two couples of straight strings(one couple left, one right) |
0x40C | float | E8 D5 12 3F | 0.573576 | vertical angle between eye-rays in one couple; this is for central vision field |
0x410 | float | D5 D0 31 3E | 0.173648 | vision field curve for peripheral vision field |
0x414 | float | 6B 61 D8 BE | 0.422618 | vertical angle between eye-rays in one couple; this is for peripheral vision field |
0x418 | int32 | B4 00 00 00 | 180 | hostilethreat definite timer; how long will AI know exactly where its enemy is even if it can't see him with central vision-field; AI attacks him; can be checked by *ai2_report_verbose* command (this command causes random crashes, beware) |
0x41C | int32 | 84 03 00 00 | 900 | hostilethreat strong timer; how long will AI remain in strong feeling that there is the enemy, but will not attack him but investigate; can be checked by *ai2_report_verbose* command |
0x420 | int32 | 10 0E 00 00 | 3600 | hostilethreat weak timer; how long will AI remain in weak feeling of an enemy, just looking around aimlessly (Glance pursue mode); can be checked by *ai2_report_verbose* command |
0x424 | int32 | 10 0E 00 00 | 3600 | friendlythreat definite timer; how long will AI know exactly where its ally (Syndicate saw Syndicate for example) is even if it can't see him with central vision-field; AI simply knows there is someone else nearby; maybe has further possibilities; can be checked by *ai2_report_verbose* command (this command causes random crashes, beware) |
0x428 | int32 | 50 46 00 00 | 18000 | friendlythreat strong timer; how long will AI remain in strong feeling that there is someone else, but will not try to find him or look at him; can be checked by *ai2_report_verbose* command |
0x42C | int32 | A0 8C 00 00 | 36000 | friendlythreat weak timer; how long will AI remain in weak feeling of ally, doing its usual job; can be checked by *ai2_report_verbose* command |
0x430 | float | 00 00 80 3F | 1.000000 | earshot radius; defines size of the sound-collision sphere around AI |
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 | link | 00 00 00 00 | unused | unknwon; always the same; maybe an unsed link? |
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 | |
First of 15 impact elements. Every element ends always with FF FF. | ||||
0x454 | char[32] | 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 |
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0xBF2 | int16 | 00 00 | 0 | unknown; always the same; maybe only a filler |
0xBF4 | char[64] | unused | special death particle; only the mad bomber use it | |
0xC34 | link | 00 00 00 00 | unused | unknown; always the same; maybe an unused link? |
0xC38 | link | 00 00 00 00 | unused | unknown; always the same; maybe an unused link? |
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 | fight mode timer in 1/60 seconds |
0xC50 | int32 | 30 75 00 00 | 30000 | first idle animation timer in 1/60 seconds |
0xC54 | int32 | 30 75 00 00 | 30000 | second idle animation timer in 1/60 seconds |
0xC58 | int32 | C8 00 00 00 | 200 | basic health of the character model; extra health information for every unique character are stored in the OBD:BINA/OBJC/CHARCharacter.BINA file |
0xC5C | int32 | 48 00 00 00 | 72 | unknown; always the same |
0xC60 | float | 00 00 80 3F | 1.000000 | minimal body size factor |
0xC64 | float | 00 00 80 3F | 1.000000 | maximal body size factor |
0xC68 | float | 00 00 00 00 | 0.000000 | unknown; always the same |
0xC6C | float | 00 00 00 00 | 0.000000 | unknown; always the same |
0xC70 | float | 00 00 00 3F | 0.500000 | stun timer; specifies how long should be this char stunned when hit with w6_vdg; the longest time possible to be stunned is when this byte is zero. Then this ONCC is stunned for 200 frames (30 frames for initial stagger + the rest of the frames is stun animation). The shortest time is for 1.000000 (no stagger/stun at all) |
0xC74 | float | 00 00 80 3E | 0.250000 | unknown |
0xC78 | float | 00 00 00 00 | 0.000000 | unknown; always the same |
0xC7C | float | 00 00 00 00 | 0.000000 | unknown; always the same |
0xC80 | float | 00 00 00 00 | 0.000000 | unknown; always the same |
0xC84 | float | 00 00 00 3F | 0.500000 | unknown |
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 | unknown; always the same |
0xC92 | int16 | 00 00 | 0 | time between death and deletion, in frames (about 3 seconds for mad bomber) |
0xC94 | bitset | 00 | 0 | TRSC bitset; see below |
0xC95 | bitset | 01 | 1 | unknown |
0xC96 | bitset | 00 | 0 | unknown |
0xC97 | bitset | 00 | 0 | when set to 1, generically turns on canttouchthis cheat for this ONCC (used by MutantMuro.ONCC |
0xC98 | char[8] | AD DE | dead | unused |
- Last 4 bytes before the blank filler
- Something to do with left-hand/right-hand aiming (must be consistent with TRSC link)
- TRSC bitset
- determines whether character is left-hander or right-hander (weapon is attached to left or right fist bone) Must be consistent with 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)
ONI BINARY DATA |
---|
OFGA << Other file types >> ONCP |
ONCC : Oni Character Class |
Character file |