OBD:ONWC
|
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.
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 the origin |
0x00C | float | F4 2C A5 3B | 0.005041 | y-offset of the origin |
0x010 | float | 21 4E D2 3E | 0.410752 | z-offset of the origin |
0x014 | float | 23 A6 7F 3F | 0.998629 | something like the stiffness (try setting it to 0.001 and lower) |
0x018 | float | AA 6C 56 BD | -0.052349 | additional azimuth |
0x01C | float | 69 66 AA B7 | -0.000020 | additional elevation |
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 | CD CC 4C 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 |
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 (e.g. for w1_tap and w2_sap) |
0x08C | float | 92 0A 86 3E | 0.261799 | unknown |
0x090 | float | 00 00 A0 40 | 5.000000 | unknown |
0x094 | float | E2 A3 7B 3B | 0.003839 | unknown |
0x098 | float | 88 C3 E4 3A | 0.001745 | unknown |
0x09C | float | 00 00 00 00 | 0.000000 | unknown |
0x0A0 | float | 00 00 00 00 | 0.000000 | unknown |
0x0A4 | float | 00 00 00 00 | 0.000000 | unknown |
0x0A8 | float | 00 00 00 00 | 0.000000 | unknown |
0x0AC | float | 00 00 00 00 | 0.000000 | unknown |
0x0B0 | float | 00 00 00 00 | 0.000000 | unknown |
0x0B4 | float | 00 00 00 00 | 0.000000 | unknown |
0x0B8 | float | 00 00 00 00 | 0.000000 | unknown |
0x0BC | float | 00 00 00 00 | 0.000000 | unknown |
0x0C0 | int16 | 00 00 | 0 | unknown; 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 | unknown |
0x0D2 | int16 | 00 00 | 0 | unknown; always zero |
0x0D4 | bitset | 30 | 48 | weapon options 1; the following bits are possible (values in dec):
|
0x0D5 | bitset | C0 | 192 | weapon options 2; the following bits are possible (values in dec):
|
0x0D6 | bitset | 02 | 2 | weapon options 3; the following bits are possible (values in dec):
|
0x0D7 | bitset | 00 | 0 | unused bitstet? |
0x0D8 to 0x1D7 - Firing modes
Offset | Type | Raw Hex | Value | Description
|
---|---|---|---|---|
0x0D5 | bitset |
| ||
0x04 | char[64] | Easy | entry name |
ONI BINARY DATA |
---|
ONVL << Other file types >> OPge |
ONWC : Oni Weapon Class |
Level file |
ONI BINARY DATA |
---|
ONVL << Other file types >> OPge |
ONWC : Oni Weapon Class |
Level 0 file |
Struct def for OUP |
Overview @ Oni Stuff |
TXT overviews (27 kB each) : "," decimals or "." decimals |
There's an empty ONWC file in every level, and the 12 actual ONWC files are in level 0.
- File size
- 1824 = 0x720 bytes
- Example
- w1_tap.ONWC (unless specified otherwise)
- Structure
- 0x08 - 0xD7 : MAIN WEAPON DATA (216 = 0xD8 bytes)
- 0x08 - 0x53 : laser sight
- 0x54 - 0x5F : ammo meter
- 0x60 - 0xD7 : various weapon parameters
- 0xD8 - 0x1D7 : FIRING MODE ARRAY (2 elements, 128 = 0x80 bytes each)
- 0xD8 - 0x157 : primary firing mode
- 0x158 - 0x1D7 : secondary firing mode
- 0x1D8 - 0x6DC : WEAPON PARTICLE ARRAY (16 elements, 80 = 0x50 bytes each)
- 0x6D8 - 0x71F : TRAILING CHUNK (68 =0x48 bytes)
- weapon sounds, unheld weapon parameters, blank filler
- Coordinates
- Unless specified otherwise, they are relative to the weapon's mesh
- (x = forwards, y = left, z = up)
0x00 - 0xD7
- MAIN PART
Offset | Hex | Translation | Meaning |
---|---|---|---|
0x00 | 01 75 0E 00 | 3701 | File ID (03701-w1_tap.ONWC) |
0x04 | 01 00 00 00 | 0 | level ID |
0x08 - 0x53
- LASER SIGHT PARAMETERS
Offset | Hex | Translation | Meaning |
---|---|---|---|
0x08 | F5 A4 49 40 | 3.150693 | x-offset of the origin |
0x0C | F4 2C A5 3B | 0.005041 | y-offset of the origin |
0x10 | 21 4E D2 3E | 0.410752 | z-offset of the origin |
0x14 | 23 A6 7F 3F | 0.998629 | something like the stiffness (try setting it to 0.001 and lower) |
0x18 | AA 6C 56 BD | -0.052349 | additional azimuth |
0x1C | 69 66 AA B7 | -0.000020 | additional elevation |
0x20 | 00 40 9C 45 | 5000.000000 | maximal length of laser sight vector |
0x24 | 00 00 FF FF | Red, opaque | laser sight color (RGBA) |
0x28 | 01 94 05 00 | 1428 | crosshair texture (link to 01428-target_1A.TXMP) |
0x2C | FF FF FF 00 | White, transparent | crosshair background color (RGBA) |
0x30 | CD CC 4C 3F | 0.800000 | crosshair scale factor |
0x34 | 01 95 05 00 | 1429 | locked crosshair texture (link to 01429-target_1B.TXMP) |
0x38 | FF FF FF 00 | White, transparent | locked crosshair background color (RGBA) |
0x3C | CD CC 4C 3F | 0.800000 | locked crosshair scale factor |
0x40 | 00 00 00 00 | not used | tunnel texture (TXMP link) |
0x44 | FF FF FF 00 | White, transparent | tunnel background color (RGBA) |
0x48 | 00 00 80 3F | 1.000000 | tunnel scale factor |
0x4C | 0F 00 00 00 | 15 | number of tunnel textures |
0x50 | 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
0x54 - 0x5F
- AMMO METER
Offset | Hex | Translation | Meaning |
---|---|---|---|
0x54 | 01 7E 0E 00 | 3710 | link to 03710-tap_icon.TXMP |
0x58 | 01 7F 0E 00 | 3711 | link to 03711-tap_empty.TXMP |
0x5C | 01 80 0E 00 | 3712 | link to 03712-tap_fill.TXMP |
0x60 - 0xD7
- WEAPON PARAMETERS
Offset | Hex | Translation | Meaning | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x60 | 01 76 0E 00 | 3702 | link to 03702-.M3GM | ||||||||||||||||
0x64 | w1_tap | name of the weapon | |||||||||||||||||
0x84 | 00 00 80 3F | 1.000000 | weapon mouse sensitivity (applies on AI, too) | ||||||||||||||||
0x88 | A6 92 2B 3D | 0.041888 | recoil (e.g. for w1_tap and w2_sap) | ||||||||||||||||
0x8C | 92 0A 86 3E | 0.261799 | unknown | ||||||||||||||||
0x90 | 00 00 A0 40 | 5.000000 | unknown | ||||||||||||||||
0x94 | E2 A3 7B 3B | 0.003839 | unknown | ||||||||||||||||
0x98 | 88 C3 E4 3A | 0.001745 | unknown | ||||||||||||||||
0x9C | 00 00 00 00 | 0.000000 | unknown | ||||||||||||||||
0xA0 | 00 00 00 00 | 0.000000 | unknown | ||||||||||||||||
0xA4 | 00 00 00 00 | 0.000000 | unknown | ||||||||||||||||
0xA8 | 00 00 00 00 | 0.000000 | unknown | ||||||||||||||||
0xAC | 00 00 00 00 | 0.000000 | unknown | ||||||||||||||||
0xB0 | 00 00 00 00 | 0.000000 | unknown | ||||||||||||||||
0xB4 | 00 00 00 00 | 0.000000 | unknown | ||||||||||||||||
0xB8 | 00 00 00 00 | 0.000000 | unknown | ||||||||||||||||
0xBC | 00 00 00 00 | 0.000000 | unknown | ||||||||||||||||
0xC0 | 00 00 | 0 | unknown; always zero | ||||||||||||||||
0xC2 | 95 00 | 149 | recoil animation type, (149 => autopistol_recoil) | ||||||||||||||||
0xC4 | A4 00 | 164 | reload animation type, (164 => reload_pistol) | ||||||||||||||||
0xC6 | 19 00 | 25 | pause after reload in 1/60 seconds | ||||||||||||||||
0xC8 | 0A 00 | 10 | amount of shots | ||||||||||||||||
0xCA | 06 00 | 6 | amount of particles | ||||||||||||||||
0xCC | 01 00 | 1 | amount of firing modes | ||||||||||||||||
0xCE | 0A 00 | 10 | pause before reload in 1/60 seconds | ||||||||||||||||
0xD0 | 04 00 | 4 | unknown | ||||||||||||||||
0xD2 | 00 00 | 0 | unknown; always zero | ||||||||||||||||
0xD4 | 30 | 48 | Flags 1 :
| ||||||||||||||||
0xD5 | C0 | 192 | Flags 2 :
| ||||||||||||||||
0xD6 | 02 00 | 2 | Flags 3 :
|
stun switcher -if enemy is inside shooting distance (between min and max) and is knockdowned/stuned or blownuped, 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 blownuped, AI with this weapon switches to melee for a time specified in a *fight timer* field
I don't know how to call this - If you press and HOLD the fire (mouse1), it ONCE triggers particles for shooting, then drains ammo as if it was sustained fire, but particles are NOT emitted (you just stand and watch as ammo drops). Used by w4_psm, probably because w4 particles works constantly (beam) after triggered.
I d.k.h.t.c.t.2 - try this: set I don't know how to call this on some weapon, then set this on that weapon too. You will see that once you press the shooting button, it keeps *shooting* (altough you can't see any particles coming) even after you release shooting button. You can't stop it. It keeps shooting until all ammo is drained. So, basically, it works like an automatic hold of the mouse button.
P.S.: Someone please think off nice names for those two poor flags :)) --Loser 07:52, 29 July 2007 (CEST)
0xD8 - 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.
0xD8 - 0x157
- PRIMARY FIRING MODE
Offsets are given with respect to the start of the file.
Offset | Raw hex | Value | Meaning |
---|---|---|---|
0xD8 | 00 00 | 0 | unknown (1 for w9_scr) |
0xDA | 00 00 | 0 | unknown; always zero |
0xDC | 23 A6 7F 3F | 0.998629 | transform matrix XX |
0xE0 | 05 6D 56 3D | 0.052350 | transform matrix XY |
0xE4 | F4 8D A9 37 | 0.000020 | transform matrix XZ |
0xE8 | 05 6D 56 BD | -0.052350 | transform matrix YX |
0xEC | 23 A6 7F 3F | 0.998629 | transform matrix YY |
0xF0 | D0 1D 0E B5 | -0.000001 | transform matrix YZ |
0xF4 | F4 8D A9 B7 | -0.000020 | transform matrix ZX |
0xF8 | D0 1D 0E B5 | -0.000001 | transform matrix ZY |
0xFC | 00 00 80 3F | 1.000000 | transform matrix ZZ |
0x100 | 00 00 00 00 | 0.000000 | translation X; always zero for original weapons |
0x104 | 00 00 00 00 | 0.000000 | translation Y; always zero for original weapons |
0x108 | 00 00 00 00 | 0.000000 | translation Z; always zero for original weapons |
0x10C | 23 A6 7F 3F | 0.998629 | unknown; something with angle proportions between firingspread base's angles, the higher you set it the more it is taller than wider; can be seen with ai2_showfiringspreads=1 |
0x110 | AE 6C 56 BD | -0.052349 | unknown; something with firingspread's aim in the "x,z plane". This value is forcing firingspread to aim more left or more right than weapon is aiming or to even aim firingspread backwards; can be seen with ai2_showfiringspreads=1 |
0x114 | AF 8D A9 B7 | -0.000020 | unknown; something with firingspread's aim in the "y plane". This value is forcing firingspread to aim more up or more down than weapon is aiming or to even aim firingspread backwards; can be seen with ai2_showfiringspreads=1 |
0x118 | DC FE 08 3C | 0.008362 | unknown |
0x11C | 5C 11 23 3E | 0.159246 | unknown |
0x120 | 39 C6 2A 3F | 0.667087 | unknown |
0x124 | 00 00 61 44 | 900.000000 | unknown; it is some angle. If this angle is for example 90°, then AI, which is shooting this weapon, will try to copy target's movements eg. when target strafes left, armed AI stops shooting and runs left too. If you set it 270°, armed AI is performing opposite actions eg. when you run left, armed AI runs right. While running, AI stops shooting. |
0x128 | 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 | 00 00 20 40 | 2.500000 | unknown; always the same |
0x130 | 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 | 00 00 40 41 | 12.000000 | Minimal shooting distance; When AI is closer then min.shot.dist., it will stop shooting and attempt to go away from the target until it again reaches higher distance then min.shot.dist. is. You can see its effect when AI is operating SBG and you get too close. |
0x138 | 00 00 61 44 | 900.000000 | Maximal shooting distance; When AI is further then max.shot.dist., it isn't shooting but running towards target until it reaches max.shot.dist. limit. Then AI opens fire. You can see its effect when AI is far away and has w2_sap. |
0x13C | 05 00 | 5 | unknown; always the same |
0x13E | 01 00 | 1 | weapon ID (used by AI shooting skills) |
0x140 | 00 00 00 00 | 0 | Fight timer, 240 for w4_psm, 200 for v6_vdg |
0x144 | 00 00 00 00 | 0.000000 | unknown, something with grenades (150 for SBG, 160 for WMC) |
0x148 | 00 00 00 00 | 0.000000 | unknown, something with grenades (0.5 for SBG, 0.3 for WMC) |
0x14C | 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 | 00 00 40 40 | 3.000000 | Lenght of the firingspread's base side. Can be seen by ai2_showfiringspreads=1 |
0x154 | 50 77 D6 3D | 0.104719 | angle between firingspread's base and its altitude(length). 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. Didn't check.
0x158 - 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 - 0x6D7
- PARTICLES
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 | Raw hex | Value | Meaning |
---|---|---|---|
0x00 | AE 6C 56 3D | 0.052349 | transformation matrix, xx term |
0x04 | 23 A6 7F 3F | 0.998629 | transformation matrix, xy term |
0x08 | C2 53 90 B3 | -6.720757e-8 | transformation matrix, xz term |
0x0C | 23 A6 7F 3F | 0.998629 | transformation matrix, yx term |
0x10 | AE 6C 56 BD | -0.052349 | transformation matrix, yy term |
0x14 | AF 8D A9 B7 | -0.000020 | transformation matrix, yz term |
0x18 | BA 59 A9 B7 | -0.000020 | transformation matrix, zx term |
0x1C | 5B 02 85 35 | 0.000001 | transformation matrix, zy term |
0x20 | 00 00 80 BF | -1.000000 | transformation matrix, zz term |
0x24 | 6F 63 57 40 | 3.365444 | x-offset of particle to weapon |
0x28 | B3 1D 89 BC | -0.016738 | y-offset of particle to weapon |
0x2C | C5 C1 2A 3F | 0.667019 | z-offset of particle to weapon |
0x30 | w1_tap_e01 | weapon particle (06226-3RAPw1_tap_e01.BINA) | |
0x40 | 00 00 | 0 | unknown; always zero |
0x42 | 00 00 | 0 | unknown; always zero |
0x44 | 01 00 | 1 | ammo decrement (different for the 2 firing modes of w11_ba1) |
0x46 | 0C 00 | 12 | delay between shots in frames (12 frames = 0.2 seconds) |
0x48 | 04 00 | 4 | unknown (looks like another delay) |
0x4A | 00 00 | 0 | number in frames for active firing mode (1st frame for activate). Used for w4_psm and w11_ba1 |
0x4C | 00 00 | 0 | 0 : particle is fired with fire1 1 : particle is fired with fire2 -1 : particle is triggered by other particles |
0x4E | 00 00 | 0 | delay before firing |
- Transformation matrix
- That's what defines orientation, stretching, etc.
- See CRSA for details.
0x6D8 - 0x71F
- ENDING
Offset | Raw hex | Value | Meaning |
---|---|---|---|
0x6D8 | weapon _empty | empty weapon sound (08992-weapon_empty.grp.OSBD) (08993-weapon_empty.imp.OSBD) | |
0x6F8 | 00 00 00 00 | 0 | unknown; always zero |
0x6FC | 01 81 0E 00 | 3713 | link to 03713-w1_glow.TXMP |
0x700 | 01 82 0E 00 | 3714 | link to 03714-w1_glow_ammo.TXMP |
0x704 | 00 00 80 3F | 1.000000 | x-scale factor of glow textures |
0x708 | 00 00 80 3F | 1.000000 | z-scale factor of glow textures |
0x70C | 76 65 EB 3F | 1.839034 | x-offset of pickup handle |
0x710 | 96 4C A9 3D | 0.082666 | y-offset of pickup handle |
0x714 | 06 E2 14 3E | 0.145393 | z-offset of pickup handle |
0x718 | 00 00 00 00 | 0.000000 | hovering height of unheld weapon |
0x71C | AD DE | dead | blank filler |
- 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.
Notes
ONI BINARY DATA |
---|
ONVL << Other file types >> OPge |
ONWC : Oni Weapon Class |