OBD:ONWC: Difference between revisions
(→0x0D8 to 0x157 - Primary firing mode: Replacing old guesses with new ones ^_^.) |
|||
Line 140: | Line 140: | ||
{{OBDtrMatrix4x3|0x0DC|EBEBEB|23 A6 7F 3F|05 6D 56 3D|F4 8D A9 37|05 6D 56 BD|23 A6 7F 3F|D0 1D 0E B5|F4 8D A9 B7|D0 1D 0E B5|00 00 80 3F|00 00 00 00|00 00 00 00|00 00 00 00|0.998629|0.052350|0.000020| -0.052350|0.998629| -0.000001| -0.000020| -0.000001|1.000000|0.000000|0.000000|0.000000| targeting inverse transform matrix - the inverse of the matrix that gives the targeting direction}} | {{OBDtrMatrix4x3|0x0DC|EBEBEB|23 A6 7F 3F|05 6D 56 3D|F4 8D A9 37|05 6D 56 BD|23 A6 7F 3F|D0 1D 0E B5|F4 8D A9 B7|D0 1D 0E B5|00 00 80 3F|00 00 00 00|00 00 00 00|00 00 00 00|0.998629|0.052350|0.000020| -0.052350|0.998629| -0.000001| -0.000020| -0.000001|1.000000|0.000000|0.000000|0.000000| targeting inverse transform matrix - the inverse of the matrix that gives the targeting direction}} | ||
{{OBDtrVector3| 0x10C |EBEBEB| 23 A6 7F 3F | AE 6C 56 BD | AF 8D A9 B7 | 0.998629 | -0.052349 | -0.000020 | targeting direction }} | {{OBDtrVector3| 0x10C |EBEBEB| 23 A6 7F 3F | AE 6C 56 BD | AF 8D A9 B7 | 0.998629 | -0.052349 | -0.000020 | targeting direction; sets orientation of firingspread }} | ||
{{OBDtrVector3| 0x118 |EBEBEB| DC FE 08 3C | 5C 11 23 3E | 39 C6 2A 3F | 0.008362 | 0.159246 | 0.667087 | targeting origin }} | {{OBDtrVector3| 0x118 |EBEBEB| DC FE 08 3C | 5C 11 23 3E | 39 C6 2A 3F | 0.008362 | 0.159246 | 0.667087 | targeting origin; sets deviation of A.I.'s aim from target's origin (target's origin + this vector <nowiki>=</nowiki> direction where to aim and fire) }} | ||
{{OBDtr| 0x124 | float |EBEBEB| 00 00 61 44 | 900.000000 | prediction speed; | {{OBDtr| 0x124 | float |EBEBEB| 00 00 61 44 | 900.000000 | prediction speed; numeric speed of the projectile A.I. prediction takes into account when calculating where to fire in order to hit moving target }} | ||
{{OBDtr| 0x128 | float |EBEBEB| 00 00 20 41 | 10.000000 | max. inaccurancy angle; sets max angle between weapon's aiming vector and target's position; when AI exceeds this angle (by recoil or target running away), AI stops shooting and aims weapon again straight to the target, then resume shooting }} | {{OBDtr| 0x128 | float |EBEBEB| 00 00 20 41 | 10.000000 | max. inaccurancy angle; sets max angle between weapon's aiming vector and target's position; when AI exceeds this angle (by recoil or target running away), AI stops shooting and aims weapon again straight to the target, then resume shooting }} | ||
{{OBDtr| 0x12C | float |EBEBEB| 00 00 20 40 | 2.500000 | aim_radius; always the same; possible related to the inaccuracy angle above }} | {{OBDtr| 0x12C | float |EBEBEB| 00 00 20 40 | 2.500000 | aim_radius; always the same; possible related to the inaccuracy angle above }} | ||
{{OBDtr| 0x130 | float |EBEBEB| 00 00 96 43 | 300.000000 | weapon sound sphere radius; when somebody shoots, weapon creates this range; AIs which are inside this range notice there was a shot + they know WHO is the shooter and WHERE he stands (threat strong), can be seen with *ai2_showsounds<nowiki>=</nowiki>1* (but you have to be in a large open area, since those ranges are quite big) }} | {{OBDtr| 0x130 | float |EBEBEB| 00 00 96 43 | 300.000000 | weapon sound sphere radius; when somebody shoots, weapon creates this range; AIs which are inside this range notice there was a shot + they know WHO is the shooter and WHERE he stands (threat strong), can be seen with *ai2_showsounds<nowiki>=</nowiki>1* (but you have to be in a large open area, since those ranges are quite big) }} | ||
{{OBDtr| 0x134 | float |EBEBEB| 00 00 40 41 | 12.000000 | minimal shooting distance; | {{OBDtr| 0x134 | float |EBEBEB| 00 00 40 41 | 12.000000 | minimal shooting distance; if target is closer than min.shoot.dist then A.I. ceases fire and moves away from the target till at least min.shoot.dis. is achieved; '''diameter, not a radius''', so effective distance form A.I. to target is half of this value }} | ||
{{OBDtr| 0x138 | float |EBEBEB| 00 00 61 44 | 900.000000 | maximal shooting distance; | {{OBDtr| 0x138 | float |EBEBEB| 00 00 61 44 | 900.000000 | maximal shooting distance; if target is further than max.shoot.dist then A.I. ceases fire and moves towards the target until at least max.shoot.dis. is achieved; }} | ||
{{OBDtr| 0x13C | int16 |8C8CCC| 05 00 | 5 | maximum startle misses; probably the maximum number of shots an ai can miss when suprised before he starts aiming }} | {{OBDtr| 0x13C | int16 |8C8CCC| 05 00 | 5 | maximum startle misses; probably the maximum number of shots an ai can miss when suprised before he starts aiming }} | ||
{{OBDtr| 0x13E | int16 |8C8CCC| 01 00 | 1 | skill index (in the [[ONCC]] shooting skill table) }} | {{OBDtr| 0x13E | int16 |8C8CCC| 01 00 | 1 | skill index (in the [[ONCC]] shooting skill table) }} | ||
Line 155: | Line 155: | ||
{{OBDtr| 0x14C | float |FF00C8| 00 00 34 43 | 180.000000 | length of firingspread which aims from weapon; when AI collides with this firingspread, it tries to dodge/hide of it; can be seen by *ai2_showfiringspreads<nowiki>=</nowiki>1* (180 for w1_tap, 150 for w2_sap, 120 for w4_psm) }} | {{OBDtr| 0x14C | float |FF00C8| 00 00 34 43 | 180.000000 | length of firingspread which aims from weapon; when AI collides with this firingspread, it tries to dodge/hide of it; can be seen by *ai2_showfiringspreads<nowiki>=</nowiki>1* (180 for w1_tap, 150 for w2_sap, 120 for w4_psm) }} | ||
{{OBDtr| 0x150 | float |FF00C8| 00 00 40 40 | 3.000000 | length of the firingspread's base side; can be seen by ai2_showfiringspreads<nowiki>=</nowiki>1 }} | {{OBDtr| 0x150 | float |FF00C8| 00 00 40 40 | 3.000000 | length of the firingspread's base side; can be seen by ai2_showfiringspreads<nowiki>=</nowiki>1 }} | ||
{{OBDtr| 0x154 | float |FF00C8| 50 77 D6 3D | 0.104719 | | {{OBDtr| 0x154 | float |FF00C8| 50 77 D6 3D | 0.104719 | firingspread's skew; can be seen by ai2_showfiringspreads<nowiki>=</nowiki>1 (0.1 for w1_tap, 0.21 for w2_sap) }} | ||
|} | |} | ||
Revision as of 05:20, 28 September 2011
|
All ONWC files are 0 byte files. That means that Oni takes the information out of the ONWC files of level 0. Below is an example of an ONWC file of level 0. The first pic shows the beginning of this file. The second pic the end of it.
Unless specified otherwise, the coordinates are relative to the weapon's mesh (x = forwards, y = left, z = up).
0x000 to 0x0D7 - Weapon main part
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x000 | res_id | 01 75 0E 00 | 3701 | 03701-w1_tap.ONWC |
0x004 | lev_id | 01 00 00 00 | 0 | level 0 |
0x008 to 0x053 - Laser sight parameters
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x008 | float | F5 A4 49 40 | 3.150693 | x-offset of laser sight origin |
0x00C | float | F4 2C A5 3B | 0.005041 | y-offset of laser sight origin |
0x010 | float | 21 4E D2 3E | 0.410752 | z-offset of laser sight origin |
0x014 | float | 23 A6 7F 3F | 0.998629 | x-component of laser sight direction |
0x018 | float | AA 6C 56 BD | -0.052349 | y-component of laser sight direction |
0x01C | float | 69 66 AA B7 | -0.000020 | z-component of laser sight direction |
0x020 | float | 00 40 9C 45 | 5000.000000 | maximal length of laser sight vector |
0x024 | color | 00 00 FF FF | 0, 0, 255; 255 | laser sight color (blue, green, red); laser sight transparency |
0x028 | link | 01 94 05 00 | 1428 | crosshair texture (link to 01428-target_1A.TXMP) |
0x02C | color | FF FF FF 00 | 255, 255, 255; 0 | crosshair background color (blue, green, red); crosshair background transparency |
0x030 | float | CD CC 4C 3F | 0.800000 | crosshair scale factor |
0x034 | link | 01 95 05 00 | 1428 | locked crosshair texture (link to 01429-target_1B.TXMP) |
0x038 | color | FF FF FF 00 | 255, 255, 255; 0 | locked crosshair background color (blue, green, red); locked crosshair background transparency |
0x03C | float | CD CC 4C 3F | 0.800000 | locked crosshair scale factor |
0x040 | link | 00 00 00 00 | unused | tunnel texture (link to a TXMP) file |
0x044 | color | FF FF FF 00 | 255, 255, 255; 0 | tunnel background color (blue, green, red); tunnel background transparency |
0x048 | float | 00 00 80 3F | 1.000000 | tunnel scale factor |
0x04C | int32 | 0F 00 00 00 | 15 | number of tunnel textures |
0x050 | float | 00 00 20 41 | 10.000000 | spacing of tunnel textures |
- Crosshair
- Default crosshair appears where the laser sight hits environment, corpses, etc
- Locked crosshair appears when the laser sight hits characters (including the shooter)
- "Tunnel" is used by w8_mbo as a complement to the crosshair
- w2_sap, w5_sbg, w7_scc and w9_scr use it with no crosshair
0x054 to 0x05F - Ammo meter
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x054 | link | 01 7E 0E 00 | 3710 | link to 03710-tap_icon.TXMP |
0x058 | link | 01 7F 0E 00 | 3711 | link to 03711-tap_empty.TXMP |
0x05C | link | 01 80 0E 00 | 3712 | link to 03712-tap_fill.TXMP |
0x060 to 0x0D7 - Weapon parameters
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x060 | link | 01 76 0E 00 | 3702 | link to 03702-.M3GM |
0x064 | char[32] | w1_tap | weapon name | |
0x084 | float | 00 00 80 3F | 1.000000 | weapon mouse sensitivity (applies on AI, too) |
0x088 | float | A6 92 2B 3D | 0.041888 | recoil base (e.g. for w1_tap and w2_sap) |
0x08C | float | 92 0A 86 3E | 0.261799 | recoil max |
0x090 | float | 00 00 A0 40 | 5.000000 | recoil factor |
0x094 | float | E2 A3 7B 3B | 0.003839 | recoil return speed |
0x098 | float | 88 C3 E4 3A | 0.001745 | recoil firing return speed |
0x09C | float | 00 00 00 00 | 0.000000 | secondHandVector X (disabled IK stuff) |
0x0A0 | float | 00 00 00 00 | 0.000000 | secondHandVector Y |
0x0A4 | float | 00 00 00 00 | 0.000000 | secondHandVector Z |
0x0A8 | float | 00 00 00 00 | 0.000000 | secondHandUpVector X |
0x0AC | float | 00 00 00 00 | 0.000000 | secondHandUpVector Y |
0x0B0 | float | 00 00 00 00 | 0.000000 | secondHandUpVector Z |
0x0B4 | float | 00 00 00 00 | 0.000000 | secondHandPosition X |
0x0B8 | float | 00 00 00 00 | 0.000000 | secondHandPosition Y |
0x0BC | float | 00 00 00 00 | 0.000000 | secondHandPosition Z |
0x0C0 | int16 | 00 00 | 0 | freeTime (unused); always zero |
0x0C2 | int16 | 95 00 | 149 | recoil animation type (149 = autopistol_recoil) |
0x0C4 | int16 | A4 00 | 164 | reload animation type (164 = reload_pistol) |
0x0C6 | int16 | 19 00 | 25 | pause after reload in 1/60 seconds |
0x0C8 | int16 | 0A 00 | 10 | amount of shots |
0x0CA | int16 | 06 00 | 6 | amount of particles |
0x0CC | int16 | 01 00 | 1 | amount of firing modes |
0x0CE | int16 | 0A 00 | 10 | pause before reload in 1/60 seconds |
0x0D0 | int16 | 04 00 | 4 | release delay; delay between the moment the trigger is released and the moment the weapon stops firing |
0x0D2 | int16 | 00 00 | 0 | padding; always zero |
0x0D4 | int32 | 30 | 0x30 C0 02 00 | weapon options; the following bits are possible (values in hex):
|
stun switcher - if enemy is inside shooting distance (between min and max) and is knockdowned/stuned or blownupped, AI with this weapon switches to melee for a time specified in a *fight timer* field
knockdown switcher - if enemy is inside shooting distance (between min and max) and is knockdowned or blownupped, AI with this weapon switches to melee for a time specified in a *fight timer* field
barabbas weapon - reload disabled; also used for ai2_barabbas_retrievegun (it teleports a weapon to a character); nearest available gun becomes chosen if character had no weapon to begin, then always this weapon is teleported back to character (when command used again)
0x0D8 to 0x1D7 - Firing modes
Every ONWC has 2 firing mode slots (128 = 0x80 bytes each.)
The number of slots actually used by the weapon is specified at 0xCA.
0x0D8 to 0x157 - Primary firing mode
Offset | Type | Raw Hex | Value | Description | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x0D8 | int32 | 00 00 00 00 | 0 | firing mode options; the following bits are possible (values in hex):
| ||||||||||||||||||||||||
0x0DC | matrix4x3 |
|
|
targeting inverse transform matrix - the inverse of the matrix that gives the targeting direction
| ||||||||||||||||||||||||
0x10C | vector3 |
|
|
targeting direction; sets orientation of firingspread | ||||||||||||||||||||||||
0x118 | vector3 |
|
|
targeting origin; sets deviation of A.I.'s aim from target's origin (target's origin + this vector = direction where to aim and fire) | ||||||||||||||||||||||||
0x124 | float | 00 00 61 44 | 900.000000 | prediction speed; numeric speed of the projectile A.I. prediction takes into account when calculating where to fire in order to hit moving target | ||||||||||||||||||||||||
0x128 | float | 00 00 20 41 | 10.000000 | max. inaccurancy angle; sets max angle between weapon's aiming vector and target's position; when AI exceeds this angle (by recoil or target running away), AI stops shooting and aims weapon again straight to the target, then resume shooting | ||||||||||||||||||||||||
0x12C | float | 00 00 20 40 | 2.500000 | aim_radius; always the same; possible related to the inaccuracy angle above | ||||||||||||||||||||||||
0x130 | float | 00 00 96 43 | 300.000000 | weapon sound sphere radius; when somebody shoots, weapon creates this range; AIs which are inside this range notice there was a shot + they know WHO is the shooter and WHERE he stands (threat strong), can be seen with *ai2_showsounds=1* (but you have to be in a large open area, since those ranges are quite big) | ||||||||||||||||||||||||
0x134 | float | 00 00 40 41 | 12.000000 | minimal shooting distance; if target is closer than min.shoot.dist then A.I. ceases fire and moves away from the target till at least min.shoot.dis. is achieved; diameter, not a radius, so effective distance form A.I. to target is half of this value | ||||||||||||||||||||||||
0x138 | float | 00 00 61 44 | 900.000000 | maximal shooting distance; if target is further than max.shoot.dist then A.I. ceases fire and moves towards the target until at least max.shoot.dis. is achieved; | ||||||||||||||||||||||||
0x13C | int16 | 05 00 | 5 | maximum startle misses; probably the maximum number of shots an ai can miss when suprised before he starts aiming | ||||||||||||||||||||||||
0x13E | int16 | 01 00 | 1 | skill index (in the ONCC shooting skill table) | ||||||||||||||||||||||||
0x140 | int32 | 00 00 00 00 | 0 | fight timer, 240 for w4_psm, 200 for v6_vdg | ||||||||||||||||||||||||
0x144 | float | 00 00 00 00 | 0.000000 | ballistic projectile speed (150 for SBG, 160 for WMC) | ||||||||||||||||||||||||
0x148 | float | 00 00 00 00 | 0.000000 | ballistic projectile gravity, can be negative for firing at the enemy's feet (0.5 for SBG, 0.3 for WMC) | ||||||||||||||||||||||||
0x14C | float | 00 00 34 43 | 180.000000 | length of firingspread which aims from weapon; when AI collides with this firingspread, it tries to dodge/hide of it; can be seen by *ai2_showfiringspreads=1* (180 for w1_tap, 150 for w2_sap, 120 for w4_psm) | ||||||||||||||||||||||||
0x150 | float | 00 00 40 40 | 3.000000 | length of the firingspread's base side; can be seen by ai2_showfiringspreads=1 | ||||||||||||||||||||||||
0x154 | float | 50 77 D6 3D | 0.104719 | firingspread's skew; can be seen by ai2_showfiringspreads=1 (0.1 for w1_tap, 0.21 for w2_sap) |
- Transform matrix
- Probably defines the orientation, scaling and position of the firing spread. It doesn't appear to be used.
0x158 to 0x1D7 - Secondary firing mode
The only original weapon for which these fields are not all zero is w11_ba1.
They are the exact counterparts of the fields at 0xD8 - 0x157.
0x1D8 to 0x6D7 - Weapon particle array
Every ONWC has 16 particle slots (80 = 0x50 bytes each.)
The number of slots actually used by the weapon is specified at 0xCA.
Offsets are relative to the beginning of a slot.
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
First of 16 elements (black outline). | ||||
0x000 | float | AE 6C 56 3D | 0.052349 | transformation matrix, xx term |
0x004 | float | 23 A6 7F 3F | 0.998629 | transformation matrix, xy term |
0x008 | float | C2 53 90 B3 | -0.000000... | transformation matrix, xz term |
0x00C | float | 23 A6 7F 3F | 0.998629 | transformation matrix, yx term |
0x010 | float | AE 6C 56 BD | -0.052349 | transformation matrix, yy term |
0x014 | float | AF 8D A9 B7 | -0.000020 | transformation matrix, yz term |
0x018 | float | BA 59 A9 B7 | -0.000020 | transformation matrix, zx term |
0x01C | float | 5B 02 85 35 | 0.000001 | transformation matrix, zy term |
0x020 | float | 00 00 80 BF | -1.000000 | transformation matrix, zz term |
0x024 | float | 6F 63 57 40 | 3.365444 | x-offset of particle to weapon |
0x028 | float | B3 1D 89 BC | -0.016738 | y-offset of particle to weapon |
0x02C | float | C5 C1 2A 3F | 0.667019 | z-offset of particle to weapon |
0x030 | char[16] | w1_tap_e01 | particle name (reference to 06226-3RAPw1_tap_e01.BINA) | |
0x040 | int32 | 00 00 00 00 | 0 | runtime only (pointer to particle class) |
0x044 | int16 | 01 00 | 1 | ammo decrement (different for the 2 firing modes of w11_ba1) |
0x046 | int16 | 0C 00 | 12 | delay between shots in frames (12 frames = 0.2 seconds) |
0x048 | int16 | 04 00 | 4 | 'roughjustice' delay between shots in frames |
0x04A | int16 | 00 00 | 0 | number in frames for active firing mode (1st frame for activate); Used for w4_psm and w11_ba1 |
0x04C | int16 | 00 00 | 0 | 0 = particle is triggered by fire1; 1 = particle is triggered by fire2; -1 = particle is triggered by both firing modes |
0x04E | int16 | 00 00 | 0 | delay before firing |
- Transformation matrix
- That's what defines orientation, stretching, etc.
- See CRSA for details.
0x6D8 to 0x71F - End of file
Offset | Type | Raw Hex | Value | Description |
---|---|---|---|---|
0x6D8 | char[32] | weapon _empty | empty weapon sound (reference to 08993-weapon_empty.imp.OSBD) | |
0x6F8 | int32 | 00 00 00 00 | 0 | runtime only (pointer to empty weapon sound) |
0x6FC | link | 01 81 0E 00 | 3713 | link to 03713-w1_glow.TXMP |
0x700 | link | 01 82 0E 00 | 3714 | link to 03714-w1_glow_ammo.TXMP |
0x704 | float | 00 00 80 3F | 1.000000 | x-scale factor of glow textures |
0x708 | float | 00 00 80 3F | 1.000000 | z-scale factor of glow textures |
0x70C | float | 76 65 EB 3F | 1.839034 | x-offset of pickup handle |
0x710 | float | 96 4C A9 3D | 0.082666 | y-offset of pickup handle |
0x714 | float | 06 E2 14 3E | 0.145393 | z-offset of pickup handle |
0x718 | float | 00 00 00 00 | 0.000000 | hovering height of unheld weapon |
0x71C | char[4] | AD DE | dead | unused |
- Glow textures
- They're applied to the lower face of the M3GM's bounding box. The factors above are the ratio between the x/z extent of that face and the half-length/width of the glow textures. So if both factors are 0.5, the glow textures fit the bounding box exactly.
- Pickup handle
- The tolerance is hardcoded. The offsets are not relative to the weapon's axes, but to the world axes (!).
- This is a rather nasty "feature" (actually, the offsets should be relative to the weapon's orientation)
- The way it's now, the pickup volume of a WMC is not necessarily next to the handle. That's why it's hard to pick up.
ONI BINARY DATA |
---|
ONVL << Other file types >> OPge |
ONWC : Oni Weapon Class |
Level file |