OBD:ONWC: Difference between revisions

m
Removing DEAD part... It is NOT a part of the type...
mNo edit summary
m (Removing DEAD part... It is NOT a part of the type...)
 
(22 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{OBD_File_Header | type=ONWC | prev=ONVL | next=OPge | name=Oni Weapon Class | family=Level | align=center}}
{{OBD_File_Header | type=ONWC | prev=ONVL | next=OPge | name=Oni Weapon Class | family=Character | align=center}}




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.  
ONWC files in level[1-19]_Final are 0-byte files. The actual data is in the ONWC files of level 0; below is an example.
 


Unless specified otherwise, the coordinates are relative to the weapon's mesh (x = forwards, y = left, z = up).
Unless specified otherwise, the coordinates are relative to the weapon's mesh (x = forwards, y = left, z = up).
Line 9: Line 8:


==0x000 to 0x0D7 - Weapon main part ==
==0x000 to 0x0D7 - Weapon main part ==
 
[[Image:onwc_a.gif]]
 
[[image:onwc_a.gif]]




Line 32: Line 29:
{{OBDtr| 0x020 | float    |FFC8C8| 00 40 9C 45 |5000.000000    | maximal length of laser sight vector }}
{{OBDtr| 0x020 | float    |FFC8C8| 00 40 9C 45 |5000.000000    | maximal length of laser sight vector }}
{{OBDtr| 0x024 | color    |FFFFC8| 00 00 FF FF | 0, 0, 255; 255 | laser sight color (blue, green, red); laser sight transparency }}
{{OBDtr| 0x024 | color    |FFFFC8| 00 00 FF FF | 0, 0, 255; 255 | laser sight color (blue, green, red); laser sight transparency }}
{{OBDtr| 0x028 | link    |C8FFC8| 01 94 05 00 | 1428          | crosshair texture (link to 01428-target_1A.[[OBD:TXMP|TXMP]]) }}
{{OBDtr| 0x028 | link    |C8FFC8| 01 94 05 00 | 1428          | crosshair texture (link to 01428-target_1A.[[TXMP]]) }}
{{OBDtr| 0x02C | color    |C8FFC8| FF FF FF 00 |255, 255, 255; 0| crosshair background color (blue, green, red); crosshair background transparency }}
{{OBDtr| 0x02C | color    |C8FFC8| FF FF FF 00 |255, 255, 255; 0| crosshair background color (blue, green, red); crosshair background transparency }}
{{OBDtr| 0x030 | float    |C8FFC8| CD CC 4C 3F | 0.800000      | crosshair scale factor }}
{{OBDtr| 0x030 | float    |C8FFC8| CD CC 4C 3F | 0.800000      | crosshair scale factor }}
{{OBDtr| 0x034 | link    |C8FFFF| 01 95 05 00 | 1428          | locked crosshair texture (link to 01429-target_1B.[[OBD:TXMP|TXMP]]) }}
{{OBDtr| 0x034 | link    |C8FFFF| 01 95 05 00 | 1428          | locked crosshair texture (link to 01429-target_1B.TXMP) }}
{{OBDtr| 0x038 | color    |C8FFFF| FF FF FF 00 |255, 255, 255; 0| locked crosshair background color (blue, green, red); locked crosshair background transparency }}
{{OBDtr| 0x038 | color    |C8FFFF| FF FF FF 00 |255, 255, 255; 0| locked crosshair background color (blue, green, red); locked crosshair background transparency }}
{{OBDtr| 0x03C | float    |C8FFFF| CD CC 4C 3F | 0.800000      | locked crosshair scale factor }}
{{OBDtr| 0x03C | float    |C8FFFF| CD CC 4C 3F | 0.800000      | locked crosshair scale factor }}
{{OBDtr| 0x040 | link    |FFC8FF| 00 00 00 00 | unused        | tunnel texture (link to a [[OBD:TXMP|TXMP]]) file }}
{{OBDtr| 0x040 | link    |FFC8FF| 00 00 00 00 | unused        | tunnel texture (link to a TXMP) }}
{{OBDtr| 0x044 | color    |FFC8FF| FF FF FF 00 |255, 255, 255; 0| tunnel background color (blue, green, red); tunnel background transparency }}
{{OBDtr| 0x044 | color    |FFC8FF| FF FF FF 00 |255, 255, 255; 0| tunnel background color (blue, green, red); tunnel background transparency }}
{{OBDtr| 0x048 | float    |FFC8FF| 00 00 80 3F | 1.000000      | tunnel scale factor }}
{{OBDtr| 0x048 | float    |FFC8FF| 00 00 80 3F | 1.000000      | tunnel scale factor }}
{{OBDtr| 0x04C | int32   |FFC800| 0F 00 00 00 | 15            | number of tunnel textures }}
{{OBDtr| 0x04C | uint32   |FFC800| 0F 00 00 00 | 15            | number of tunnel textures }}
{{OBDtr| 0x050 | float    |C800C8| 00 00 20 41 | 10.000000      | spacing of tunnel textures }}
{{OBDtr| 0x050 | float    |C800C8| 00 00 20 41 | 10.000000      | spacing of tunnel textures }}
|}
|}
Line 47: Line 44:


;Crosshair
;Crosshair
:Default crosshair appears where the laser sight hits environment, corpses, etc
:Default crosshair appears where the laser sight hits environment, corpses, etc.
:Locked crosshair appears when the laser sight hits characters (including the shooter)
:Locked crosshair appears when the laser sight hits characters (including the shooter)
:"Tunnel" is used by '''w8_mbo''' as a complement to the crosshair
:"Tunnel" is used by '''w8_mbo''' as a complement to the crosshair
Line 56: Line 53:
{{Table}}
{{Table}}
{{OBDth}}
{{OBDth}}
{{OBDtr| 0x054 | link    |C87C64| 01 7E 0E 00 | 3710          | link to 03710-tap_icon.[[OBD:TXMP|TXMP]] }}
{{OBDtr| 0x054 | link    |C87C64| 01 7E 0E 00 | 3710          | link to 03710-tap_icon.[[TXMP]] }}
{{OBDtr| 0x058 | link    |C87C64| 01 7F 0E 00 | 3711          | link to 03711-tap_empty.[[OBD:TXMP|TXMP]] }}
{{OBDtr| 0x058 | link    |C87C64| 01 7F 0E 00 | 3711          | link to 03711-tap_empty.TXMP }}
{{OBDtr| 0x05C | link    |C87C64| 01 80 0E 00 | 3712          | link to 03712-tap_fill.[[OBD:TXMP|TXMP]] }}
{{OBDtr| 0x05C | link    |C87C64| 01 80 0E 00 | 3712          | link to 03712-tap_fill.TXMP }}
|}
|}


Line 65: Line 62:
{{Table}}
{{Table}}
{{OBDth}}
{{OBDth}}
{{OBDtr| 0x060 | link    |C87C64| 01 76 0E 00 | 3702          | link to 03702-.M3GM }}
{{OBDtr| 0x060 | link    |C87C64| 01 76 0E 00 | 3702          | link to 03702-.[[M3GM]] (3D geometry) }}
{{OBDtr2|0x064 | char[32] |B0C3D4| w1_tap                      | weapon name }}
{{OBDtr2|0x064 | char[32] |B0C3D4| w1_tap                      | weapon name }}
{{OBDtr| 0x084 | float    |E7CEA5| 00 00 80 3F | 1.000000      | weapon mouse sensitivity (applies on AI, too) }}
{{OBDtr| 0x084 | float    |E7CEA5| 00 00 80 3F | 1.000000      | weapon mouse sensitivity (applies to AI, too) }}
{{OBDtr| 0x088 | float    |E7CEA5| A6 92 2B 3D | 0.041888      | recoil base (e.g. for w1_tap and w2_sap) }}
{{OBDtr| 0x088 | float    |E7CEA5| A6 92 2B 3D | 0.041888      | recoil base (e.g. for w1_tap and w2_sap) }}
{{OBDtr| 0x08C | float    |E7CEA5| 92 0A 86 3E | 0.261799      | recoil max }}
{{OBDtr| 0x08C | float    |E7CEA5| 92 0A 86 3E | 0.261799      | recoil max }}
{{OBDtr| 0x090 | float    |E7CEA5| 00 00 A0 40 | 5.000000      | recoil factor }}
{{OBDtr| 0x090 | float    |E7CEA5| 00 00 A0 40 | 5.000000      | recoil factor }}
{{OBDtr| 0x094 | float    |E7CEA5| E2 A3 7B 3B | 0.003839      | recoil return speed }}
{{OBDtr| 0x094 | float    |E7CEA5| E2 A3 7B 3B | 0.003839      | recoil return speed }}
{{OBDtr| 0x098 | float    |E7CEA5| 88 C3 E4 3A | 0.001745      | unknown }}
{{OBDtr| 0x098 | float    |E7CEA5| 88 C3 E4 3A | 0.001745      | recoil firing return speed }}
{{OBDtr| 0x09C | float    |E7CEA5| 00 00 00 00 | 0.000000      | unknown }}
{{OBDtr| 0x09C | float    |E7CEA5| 00 00 00 00 | 0.000000      | secondHandVector X (disabled IK stuff) }}
{{OBDtr| 0x0A0 | float    |E7CEA5| 00 00 00 00 | 0.000000      | unknown }}
{{OBDtr| 0x0A0 | float    |E7CEA5| 00 00 00 00 | 0.000000      | secondHandVector Y}}
{{OBDtr| 0x0A4 | float    |E7CEA5| 00 00 00 00 | 0.000000      | unknown }}
{{OBDtr| 0x0A4 | float    |E7CEA5| 00 00 00 00 | 0.000000      | secondHandVector Z }}
{{OBDtr| 0x0A8 | float    |E7CEA5| 00 00 00 00 | 0.000000      | unknown }}
{{OBDtr| 0x0A8 | float    |E7CEA5| 00 00 00 00 | 0.000000      | secondHandUpVector X}}
{{OBDtr| 0x0AC | float    |E7CEA5| 00 00 00 00 | 0.000000      | unknown }}
{{OBDtr| 0x0AC | float    |E7CEA5| 00 00 00 00 | 0.000000      | secondHandUpVector Y}}
{{OBDtr| 0x0B0 | float    |E7CEA5| 00 00 00 00 | 0.000000      | unknown }}
{{OBDtr| 0x0B0 | float    |E7CEA5| 00 00 00 00 | 0.000000      | secondHandUpVector Z}}
{{OBDtr| 0x0B4 | float    |E7CEA5| 00 00 00 00 | 0.000000      | unknown }}
{{OBDtr| 0x0B4 | float    |E7CEA5| 00 00 00 00 | 0.000000      | secondHandPosition X}}
{{OBDtr| 0x0B8 | float    |E7CEA5| 00 00 00 00 | 0.000000      | unknown }}
{{OBDtr| 0x0B8 | float    |E7CEA5| 00 00 00 00 | 0.000000      | secondHandPosition Y}}
{{OBDtr| 0x0BC | float    |E7CEA5| 00 00 00 00 | 0.000000      | unknown }}
{{OBDtr| 0x0BC | float    |E7CEA5| 00 00 00 00 | 0.000000      | secondHandPosition Z}}
{{OBDtr| 0x0C0 | int16   |FFDDDD| 00 00      | 0              | unknown; always zero }}
{{OBDtr| 0x0C0 | uint16   |FFDDDD| 00 00      | 0              | freeTime (unused); always zero }}
{{OBDtr| 0x0C2 | int16   |FFDDDD| 95 00      | 149            | recoil animation type (149 <nowiki>=</nowiki> autopistol_recoil) }}
{{OBDtr| 0x0C2 | uint16   |FFDDDD| 95 00      | 149            | recoil animation type (149 {{=}} autopistol_recoil) }}
{{OBDtr| 0x0C4 | int16   |FFDDDD| A4 00      | 164            | reload animation type (164 <nowiki>=</nowiki> reload_pistol) }}
{{OBDtr| 0x0C4 | uint16   |FFDDDD| A4 00      | 164            | reload animation type (164 {{=}} reload_pistol) }}
{{OBDtr| 0x0C6 | int16   |FFDDDD| 19 00      | 25            | pause after reload in 1/60 seconds }}
{{OBDtr| 0x0C6 | uint16   |FFDDDD| 19 00      | 25            | pause after reload in 1/60 seconds }}
{{OBDtr| 0x0C8 | int16   |FFDDDD| 0A 00      | 10            | amount of shots }}
{{OBDtr| 0x0C8 | uint16   |FFDDDD| 0A 00      | 10            | amount of shots }}
{{OBDtr| 0x0CA | int16   |FFDDDD| 06 00      | 6              | amount of particles }}
{{OBDtr| 0x0CA | uint16   |FFDDDD| 06 00      | 6              | amount of particles }}
{{OBDtr| 0x0CC | int16   |FFDDDD| 01 00      | 1              | amount of firing modes }}
{{OBDtr| 0x0CC | uint16   |FFDDDD| 01 00      | 1              | amount of firing modes }}
{{OBDtr| 0x0CE | int16   |FFDDDD| 0A 00      | 10            | pause before reload in 1/60 seconds }}
{{OBDtr| 0x0CE | uint16   |FFDDDD| 0A 00      | 10            | pause before reload in 1/60 seconds }}
{{OBDtr| 0x0D0 | int16   |FFDDDD| 04 00      | 4              | release delay; delay between the moment the trigger is released and the moment the weapon stops firing }}
{{OBDtr| 0x0D0 | uint16   |FFDDDD| 04 00      | 4              | release delay; delay between the moment the trigger is released and the moment the weapon stops firing }}
{{OBDtr| 0x0D2 | int16   |FFDDDD| 00 00      | 0              | unknown; always zero }}
{{OBDtr| 0x0D2 | uint16   |FFDDDD| 00 00      | 0              | padding }}
{{OBDtr| 0x0D4 | int32   |FFDDDD| 30          | 0x30 C0 02 00  | weapon options; the following bits are possible (values in hex):
{{OBDtr| 0x0D4 | uint32   |FFDDDD| 30          | 0x30 C0 02 00  | weapon options; the following bits are possible (values in hex):


:0x'''02''' 00 00 00 - weapon can't be holstered
:0x'''02''' 00 00 00 - weapon can't be holstered
Line 103: Line 100:


:0x00 '''01''' 00 00 - knockdown switcher; used for w4_psm, see below
:0x00 '''01''' 00 00 - knockdown switcher; used for w4_psm, see below
:0x00 '''02''' 00 00 - unknown; used for w5_sbg and w11_ba1
:0x00 '''02''' 00 00 - explosive; used for w5_sbg and w11_ba1
:0x00 '''04''' 00 00 - secondary fire enabled
:0x00 '''04''' 00 00 - secondary fire enabled
:0x00 '''08''' 00 00 - barabbas weapon; see below
:0x00 '''08''' 00 00 - barabbas weapon; see below
Line 118: Line 115:




'''stun switcher''' - if enemy is inside shooting distance (between min and max) and is '''knockdown'''ed/'''stun'''ed or '''blownup'''ed, AI with this weapon switches to melee for a time specified in a *fight timer* field
'''stun switcher''' - if enemy is inside shooting distance (between min and max) and is '''knockdown'''ed/'''stun'''ed or '''blownup'''ped, 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 '''knockdown'''ed or '''blownup'''ed, 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 beginn, then always this weapon is teleported back to character (when command used again)
'''knockdown switcher''' - if enemy is inside shooting distance (between min and max) and is '''knockdown'''ed or '''blownup'''ped, 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==
==0x0D8 to 0x1D7 - Firing modes==
Every ONWC has 2 firing mode slots (128 = 0x80 bytes each.)
Every ONWC has 2 firing mode slots (128 = 0x80 bytes each.)


The number of slots actually used by the weapon is specified at 0xCA.
The number of slots actually used by the weapon is specified at 0xCA.


===0x0D8 to 0x157 - Primary firing mode===
===0x0D8 to 0x157 - Primary firing mode===
{{Table}}
{{Table}}
{{OBDth}}
{{OBDth}}
{{OBDtr| 0x0D8 | int32   |64AAAA| 00 00 00 00 | 0              | firing mode options; the following bits are possible (values in hex):
{{OBDtr| 0x0D8 | uint32   |64AAAA| 00 00 00 00 | 0              | firing mode options; only the following bit is used (value in hex):
:0x'''01''' 00 00 00 - unknown; something to do with keeping/altering "prediction" when the target changes
:0x'''01''' 00 00 00 - No wild shots}}
}}
 
{{OBDtr| 0x0DC | float    |EBEBEB| 23 A6 7F 3F | 0.998629      | transform matrix XX }}
{{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}}
{{OBDtr| 0x0E0 | float    |EBEBEB| 05 6D 56 3D | 0.052350      | transform matrix XY }}
 
{{OBDtr| 0x0E4 | float    |EBEBEB| F4 8D A9 37 | 0.000020      | transform matrix XZ }}
{{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 }}
{{OBDtr| 0x0E8 | float    |EBEBEB| 05 6D 56 BD | -0.052350      | transform matrix YX }}
{{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 AI's aim from target's origin (target's origin + this vector {{=}} direction where to aim and fire) }}
{{OBDtr| 0x0EC | float    |EBEBEB| 23 A6 7F 3F | 0.998629      | transform matrix YY }}
{{OBDtr| 0x124 | float    |EBEBEB| 00 00 61 44 | 900.000000    | prediction speed; the speed of the projectile that AI prediction should take into account when calculating where to fire in order to hit a moving target }}
{{OBDtr| 0x0F0 | float    |EBEBEB| D0 1D 0E B5 | -0.000001      | transform matrix YZ }}
{{OBDtr| 0x128 | float    |EBEBEB| 00 00 20 41 | 10.000000      | max. inaccuracy 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| 0x0F4 | float    |EBEBEB| F4 8D A9 B7 | -0.000020      | transform matrix ZX }}
{{OBDtr| 0x12C | float    |EBEBEB| 00 00 20 40 | 2.500000      | aim_radius; always the same; possibly related to the inaccuracy angle above }}
{{OBDtr| 0x0F8 | float    |EBEBEB| D0 1D 0E B5 | -0.000001      | transform matrix ZY }}
{{OBDtr| 0x130 | float    |EBEBEB| 00 00 96 43 | 300.000000    | weapon sound sphere radius; defines radius of the AI sound sphere (gunfire type, see {{SectionLink|AI|Vision and hearing}} to learn about AI sound spheres) which is created for a short moment when this weapon is fired }}
{{OBDtr| 0x0FC | float    |EBEBEB| 00 00 80 3F | 1.000000      | transform matrix ZZ  }}
{{OBDtr| 0x134 | float    |EBEBEB| 00 00 40 41 | 12.000000      | minimal shooting distance; if target is closer than this, the AI ceases fire and moves away from the target till at least this distance is achieved; this is a '''diameter, not a radius''', so effective distance from AI to target is half of this value }}
{{OBDtr| 0x100 | float    |EBEBEB| 00 00 00 00 | 0.000000      | translation X; always zero for original weapons }}
{{OBDtr| 0x138 | float    |EBEBEB| 00 00 61 44 | 900.000000    | maximum shooting distance; if target is further than this, the AI ceases fire and moves towards the target until it is below this distance }}
{{OBDtr| 0x104 | float    |EBEBEB| 00 00 00 00 | 0.000000      | translation Y; always zero for original weapons }}
{{OBDtr| 0x13C | uint16   |8C8CCC| 05 00      | 5              | UNUSED; maximum startle misses; the maximum number of shots to which extra inaccuracy can be added when an AI begins firing at the player (always 5, but Oni does not use this field) }}
{{OBDtr| 0x108 | float    |EBEBEB| 00 00 00 00 | 0.000000       | translation Z; always zero for original weapons }}
{{OBDtr| 0x13E | uint16   |8C8CCC| 01 00      | 1              | skill index (links weapon to the [[ONCC]] shooting skill table); here are the values used by Oni's ONWCs:
{{OBDtr| 0x10C | float    |EBEBEB| 23 A6 7F 3F | 0.998629      | firing spread direction X component }}
:0x'''01''' 00 - w0_sec (not in game)
{{OBDtr| 0x110 | float    |EBEBEB| AE 6C 56 BD | -0.052349     | firing spread direction Y component }}
:0x'''02''' 00 - w1_tap
{{OBDtr| 0x114 | float    |EBEBEB| AF 8D A9 B7 | -0.000020     | firing spread direction Z component }}
:0x'''04''' 00 - w2_sap
{{OBDtr| 0x118 | float    |EBEBEB| DC FE 08 3C | 0.008362      | targeting vector origin X component? }}
:0x'''08''' 00 - w3_phr
{{OBDtr| 0x11C | float    |EBEBEB| 5C 11 23 3E | 0.159246      | targeting vector origin Y component? }}
:0x'''10''' 00 - w4_psm
{{OBDtr| 0x120 | float    |EBEBEB| 39 C6 2A 3F | 0.667087       | targeting vector origin Z component? }}
:0x'''20''' 00 - w5_sbg
{{OBDtr| 0x124 | float    |EBEBEB| 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 }}
:0x'''40''' 00 - w6_vdg
{{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 }}
:0x'''80''' 00 - w7_scc
{{OBDtr| 0x12C | float    |EBEBEB| 00 00 20 40 | 2.500000      | unknown; always the same; possible related to the inaccuracy angle above }}
:0x00 '''01''' - w8_mbo
{{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) }}
:0x00 '''02''' - w9_scr
{{OBDtr| 0x134 | float    |EBEBEB| 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 }}
:0x00 '''04''' - w10_sni (not in game)
{{OBDtr| 0x138 | float    |EBEBEB| 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 }}
:0x00 '''08''' - w11_ba1
{{OBDtr| 0x13C | int16   |8C8CCC| 05 00      | 5              | unknown; always the same }}
:0x00 '''10''' - w12_ba2}}
{{OBDtr| 0x13E | int16   |8C8CCC| 01 00      | 1              | skill index (in the [[ONCC]] shooting skill table) }}
{{OBDtr| 0x140 | uint32   |8C8CCC| 00 00 00 00 | 0              | fight timer, 240 for w4_psm, 200 for v6_vdg }}
{{OBDtr| 0x140 | int32   |8C8CCC| 00 00 00 00 | 0              | fight timer, 240 for w4_psm, 200 for v6_vdg }}
{{OBDtr| 0x144 | float    |FF00C8| 00 00 00 00 | 0.000000      | ballistic projectile speed for AI prediction purposes; if this field is unused, the projectile is assumed to be infinite speed; field is always zero except 150 for Superball Gun and 160 for Wave Motion Cannon's secondary trigger }}
{{OBDtr| 0x144 | float    |FF00C8| 00 00 00 00 | 0.000000      | ballistic projectile speed (150 for SBG, 160 for WMC) }}
{{OBDtr| 0x148 | float    |FF00C8| 00 00 00 00 | 0.000000      | ballistic projectile gravity for AI prediction purposes; always zero except 0.5 for SBG and 0.3 for WMC's secondary trigger }}
{{OBDtr| 0x148 | float    |FF00C8| 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) }}
{{OBDtr| 0x14C | float    |FF00C8| 00 00 34 43 | 180.000000    | length of a firing spread; AI will perform gunfire dodging when it finds itself inside of a firing spread (see {{SectionLink|AI|Basic combat behaviors}}); can be visualized with *ai2_showfiringspreads{{=}}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      | width of the firing spread's base; can be seen by ai2_showfiringspreads{{=}}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      | firing spread's skew; can be seen by ai2_showfiringspreads{{=}}1 (0.1 for w1_tap, 0.21 for w2_sap) }}
{{OBDtr| 0x154 | float    |FF00C8| 50 77 D6 3D | 0.104719      | angle between firingspread's base and its altitude(length); can be seen by ai2_showfiringspreads<nowiki>=</nowiki>1 (0.1 for w1_tap, 0.21 for w2_sap) }}
|}
|}


Line 178: Line 170:


===0x158 to 0x1D7 - Secondary firing mode===
===0x158 to 0x1D7 - Secondary firing mode===
 
The only vanilla weapon for which these fields are not all zero is '''w11_ba1'''. They are the exact counterparts of the fields at 0xD8 - 0x157.
 
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==
==0x1D8 to 0x6D7 - Weapon particle array==
 
Every ONWC has 16 particle slots (80 at 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.
 
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.




Line 211: Line 192:
{{OBDtr| 0x02C | float    |F0F096| C5 C1 2A 3F | 0.667019      | z-offset of particle to weapon }}
{{OBDtr| 0x02C | float    |F0F096| C5 C1 2A 3F | 0.667019      | z-offset of particle to weapon }}
{{OBDtr2|0x030 | char[16] |00C864| w1_tap_e01                  | particle name (reference to 06226-3RAPw1_tap_e01.[[OBD:BINA/PAR3|BINA]]) }}
{{OBDtr2|0x030 | char[16] |00C864| w1_tap_e01                  | particle name (reference to 06226-3RAPw1_tap_e01.[[OBD:BINA/PAR3|BINA]]) }}
{{OBDtr| 0x040 | int32   |00C8FF| 00 00 00 00 | 0              | runtime only (pointer to particle class) }}
{{OBDtr| 0x040 | offset   |00C8FF| 00 00 00 00 | 0              | raw offset of the particle class (raw pointer to it); runtime only }}
{{OBDtr| 0x044 | int16   |00C8FF| 01 00      | 1              | ammo decrement (different for the 2 firing modes of w11_ba1) }}
{{OBDtr| 0x044 | uint16   |00C8FF| 01 00      | 1              | ammo decrement (different for the 2 firing modes of w11_ba1) }}
{{OBDtr| 0x046 | int16   |00C8FF| 0C 00      | 12            | delay between shots in frames (12 frames <nowiki>=</nowiki> 0.2 seconds) }}
{{OBDtr| 0x046 | uint16   |00C8FF| 0C 00      | 12            | delay between shots in frames (12 frames {{=}} 0.2 seconds) }}
{{OBDtr| 0x048 | int16   |00C8FF| 04 00      | 4              | 'roughjustice' delay between shots in frames }}
{{OBDtr| 0x048 | uint16   |00C8FF| 04 00      | 4              | 'roughjustice' delay between shots in frames }}
{{OBDtr| 0x04A | int16   |00C8FF| 00 00      | 0              | number in frames for active firing mode (1st frame for activate); Used for w4_psm and w11_ba1 }}
{{OBDtr| 0x04A | uint16   |00C8FF| 00 00      | 0              | number in frames for active firing mode (1st frame for activate); Used for w4_psm and w11_ba1 }}
{{OBDtr| 0x04C | int16   |00C8FF| 00 00      | 0              | 0 <nowiki>=</nowiki> particle is triggered by fire1; 1 <nowiki>=</nowiki> particle is triggered by fire2; -1 <nowiki>=</nowiki> particle is triggered by both firing modes }}
{{OBDtr| 0x04C | uint16   |00C8FF| 00 00      | 0              | 0 {{=}} particle is triggered by fire1; 1 {{=}} particle is triggered by fire2; -1 {{=}} particle is triggered by both firing modes }}
{{OBDtr| 0x04E | int16   |00C8FF| 00 00      | 0              | delay before firing }}
{{OBDtr| 0x04E | uint16   |00C8FF| 00 00      | 0              | delay before firing }}
|}
|}




;Transformation matrix
;Transformation matrix
:That's what defines orientation, stretching, etc.
:That's what defines orientation, stretching, etc. See [[OBD:CRSA|CRSA]] for details.
:See [[OBD:CRSA|CRSA]] for details.


==0x6D8 to 0x71F - End of file==
==0x6D8 to 0x71F - End of file==
 
[[Image:onwc_e.gif]]
 
[[image:onwc_e.gif]]




Line 234: Line 212:
{{OBDth}}
{{OBDth}}
{{OBDtr2|0x6D8 | char[32] |C80040| weapon _empty                | empty weapon sound (reference to 08993-weapon_empty.[[OBD:OSBD/OSIm|imp.OSBD]]) }}
{{OBDtr2|0x6D8 | char[32] |C80040| weapon _empty                | empty weapon sound (reference to 08993-weapon_empty.[[OBD:OSBD/OSIm|imp.OSBD]]) }}
{{OBDtr| 0x6F8 | int32    |FFCD96| 00 00 00 00 | 0              | runtime only (pointer to empty weapon sound) }}
{{OBDtr| 0x6F8 | offset |FFCD96| 00 00 00 00 | 0              | raw offset to the empty weapon sound; runtime only }}
{{OBDtr| 0x6FC | link    |C8C864| 01 81 0E 00 | 3713          | link to 03713-w1_glow.[[OBD:TXMP|TXMP]] }}
{{OBDtr| 0x6FC | link    |C8C864| 01 81 0E 00 | 3713          | link to 03713-w1_glow.[[TXMP]] }}
{{OBDtr| 0x700 | link    |C8C864| 01 82 0E 00 | 3714          | link to 03714-w1_glow_ammo.[[OBD:TXMP|TXMP]] }}
{{OBDtr| 0x700 | link    |C8C864| 01 82 0E 00 | 3714          | link to 03714-w1_glow_ammo.TXMP }}
{{OBDtr| 0x704 | float    |0096C8| 00 00 80 3F | 1.000000      | x-scale factor of glow textures }}
{{OBDtr| 0x704 | float    |0096C8| 00 00 80 3F | 1.000000      | x-scale factor of glow textures }}
{{OBDtr| 0x708 | float    |0096C8| 00 00 80 3F | 1.000000      | z-scale factor of glow textures }}
{{OBDtr| 0x708 | float    |0096C8| 00 00 80 3F | 1.000000      | z-scale factor of glow textures }}
Line 242: Line 220:
{{OBDtr| 0x710 | float    |0096C8| 96 4C A9 3D | 0.082666      | y-offset of pickup handle }}
{{OBDtr| 0x710 | float    |0096C8| 96 4C A9 3D | 0.082666      | y-offset of pickup handle }}
{{OBDtr| 0x714 | float    |0096C8| 06 E2 14 3E | 0.145393      | z-offset of pickup handle }}
{{OBDtr| 0x714 | float    |0096C8| 06 E2 14 3E | 0.145393      | z-offset of pickup handle }}
{{OBDtr| 0x718 | float    |0096C8| 00 00 00 00 | 0.000000      | hovering height of unheld weapon }}
{{OBDtr| 0x718 | float    |0096C8| 00 00 00 00 | 0.000000      | hovering height of dropped weapon }}
{{OBDtr| 0x71C | char[4]  |FF80C0| AD DE      | dead          | unused }}
|}
|}


Line 250: Line 227:
: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.
: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
;Pickup handle
:The tolerance is hardcoded. The offsets are not relative to the weapon's axes, but to the world axes (!).
: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" because the offsets should be relative to the weapon's orientation. The way it is now, the pickup volume of a weapon is not necessarily next to the handle. That's why the WMC is so hard to pick up that some players conclude it's not possible; being the largest weapon, it has the largest potential discrepancy between its visual handle location and its pickup volume.
: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.




{{OBD_File_Footer | type=ONWC | prev=ONVL | next=OPge | name=Oni Weapon Class | family=Level}}
{{OBD_File_Footer | type=ONWC | prev=ONVL | next=OPge | name=Oni Weapon Class | family=Character}}


{{OBD}}
{{OBD}}
279

edits