XML:ONWC: Difference between revisions

From OniGalore
Jump to navigation Jump to search
mNo edit summary
 
(clarified unused field <MaxStartleMisses>)
 
(30 intermediate revisions by 5 users not shown)
Line 1: Line 1:
[[Main Page]] >> [[OBD:Oni Binary Data|Oni Binary Data]] >> [[OBD:File types|File Types]] >> ONWC File
{{XML_File_Header | prev=ONVL | type=ONWC | next=OPge | name=Oni Weapon Class}}


==General information==
* The XML on this page is compatible with OniSplit '''v0.9.61.0'''.
* Vanilla ONWC files are stored in AE/AEInstaller/vanilla/level0_Final.dat.


<CENTER>[[OBD:ONVL|<==]] <FONT SIZE=5>ONWC File</FONT> [[OBD:OPge|==>]]<BR>
==File structure==
<FONT SIZE=2>Oni Weapon Class - Level File</FONT></CENTER>
{{Tree list}}
*ONWC
**M3GM (embedded 3D mesh)
***PNTA <Points>
***VCRA <VertexNormals>
***VCRA <FaceNormals>
***TXCA <TextureCoordinates>
***IDXA <TriangleStrips>
***IDXA <FaceNormalIndices>
***TXMP <Texture> (link to external file)
{{Tree list/end}}


==XML tags==
{|class="wikitable" width=100%
|width=120px| '''XML tag'''
|width=60px| '''Type'''
| '''Description'''
|-
| <LaserSight>
|
| See [[#<LaserSight>|THIS]] section below.
|-
| <AmmoMeter>
|
| See [[#<AmmoMeter>|THIS]] section below.
|-
| <Geometry>
| link
| [[#M3GM model|Weapon instance]] number (#N). For geometry importing, see [[#New method|THIS]] section below.
|-
| <Name>
| char[32]
| <font color="#777777">ONWC</font>file<font color="#777777">.oni</font> <font color="#777777">(don't use file prefix/suffix)</font>
|-
| <MouseSensitivity>
| float
| Weapon's mouse sensitivity (applies to AI too).
|-
| <Recoil>
|
| See [[#<Recoil>|THIS]] section below.
|-
| <RecoilAnimationType>
| link
| A recoil [[XML:StNA#Animation_types|animation type]].
|-
| <ReloadAnimationType>
| link
| A reload [[XML:StNA#Animation_types|animation type]].
|-
| <PauseAfterReload>
| int16
| Pause after reloading, in 1/60 seconds.
|-
|valign=top| <MaxShots>
|valign=top| int16
| Number of "shots". Let's say a weapon has 4 emitters each with <UsedAmmo>1 and the weapon shall be able to fire 3 times. Then <MaxShots> has to be 12 = 4 * 1 * 3.


All ONWC files are 0 byte files. That means, that Oni will take 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.
A mismatched <MaxShots> number creates an infinite-ammunition bug.
|-
| <ParticleCount>
| int16
| Number of attached particles.
|-
| <FiringModeCount>
| int16
| Number of used firing modes (max of 2?).
|-
| <PauseBeforeReload>
| int16
| Pause before reloading, in 1/60 seconds.
|-
| <ReleaseDelay>
| int16
| Delay between the moment the trigger is released and the moment the weapon stops firing.
|-
|valign=top| <Flags>
|valign=top| flag
| Weapon options
: NoHolster
: UsesCells
: TwoHanded
: RecoilAffectsAiming
:: Even without this flag, there will still be recoil. Recoil makes the aim travel upwards as the trigger is held down.
:: If the flag is set, the aiming will remain elevated after firing the gun.
:: If flag isn't set, the upward movement stops earlier, and when the firing ends, the weapon will fall to the previous aiming angle.
: Automatic
: StunSwitcher
:: If the enemy is within shooting distance (between <MinShootingDistance> and <MaxShootingDistance>) and is knocked down, stunned or blown up, the AI with this weapon switches to melee for a time specified in a *fight timer* field.
: KnockdownSwitcher
:: If the enemy is within shooting distance and is knocked down or blown up, the AI with this weapon switches to melee for a time specified in a *fight timer* field.
: Explosive
: SecondaryFire
: BarabbasWeapon
:: If the enemy is within shooting distance and is knocked down or blown up, the AI with this weapon switches to melee for a time specified in a *fight timer* field.
: Heavy
: AutoRelease
: HasReleaseDelay
: HasLaserSight
: ScaleCrosshair
: NoFade
: DrainAmmo
|-
| <FiringModes>
|
| Holds 2 <FiringModes> tags.
|-
| <AIFiringMode>
|
| See [[#<AIFiringMode>|THIS]] section below.
|-
| <Particles>
|
| Holds 16 <ONWCParticle> tags.
|-
| <ONWCParticle>
|
| See [[#<ONWCParticle>|THIS]] section below.
|-
| <EmptyWeaponSound>
| link
| <font color="#777777">OSBD</font>file<font color="#777777">.imp.oni</font> <font color="#777777">(don't use file prefix/suffix)</font>
|-
| <Glow>
| link
| TXMPfile<font color="#777777">.oni (don't use file suffix)</font>
|-
| <GlowAmmo>
| link
| TXMPfile<font color="#777777">.oni (don't use file suffix)</font>
|-
| <GlowTextureScale>
| float
| XZ scale factor of glow textures around weapon when lying on the ground.
|-
| <PickupHandleOffset>
| float
| XYZ offset of weapon's pickup handle when on the ground.
|-
| <HoveringHeight>
| float
| Hovering height of weapon when on ground.
|}
 
; Glow textures
: They're applied to the lower face of the M3GM's bounding box. The factors in <GlowTextureScale> 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 around the defined handle is hardcoded. The offsets are not relative to the weapon's axes, but to the world axes (!). This is a rather nasty "feature", as the offsets should definitely be relative to the weapon's orientation. The way it is now, the pickup volume of Barabas' Wave Motion Cannon is not necessarily near the handle. That's why it's hard to pick up sometimes.


===<LaserSight>===
; Crosshair
: The default crosshair appears where the laser sight contacts the environment, corpses, etc. A locked-on version of the crosshair appears when the laser sight contacts characters (including the shooter). An "aiming tunnel" is used by the w8_mbo as a complement to the crosshair (w2_sap, w5_sbg, w7_scc and w9_scr use the tunnel with no crosshair).


http://www6.fh-eberswalde.de/user/dkriesch/onistuff/images/onwc_a.gif
{|class="wikitable" width=100%
|width=120px| '''XML tag'''
|width=60px| '''Type'''
| '''Description'''
|-
| <Origin>
| float
| X, Y, Z
|-
| <Stiffness>
| float
| X component of laser sight direction?
|-
| <AdditionalAzimuth>
| float
| [[wikipedia:Azimuth|Wikipedia definition of azimuth]]
|-
| <AdditionalElevation>
| float
| [[wikipedia:Elevation|Wikipedia definition of elevation]]
|-
| <LaserMaxLength>
| float
| Maximum length of laser sight vector.
|-
| <LaserColor>
| color
| Laser sight color in BGRA
|-
| <NormalTexture>
| link
| Crosshair texture: TXMPfile<font color="#777777">.oni (don't use file suffix)</font>
|-
| <NormalColor>
| color
| Crosshair background color in BGRA
|-
| <NormalScale>
| float
| Crosshair scale factor
|-
| <LockedTexture>
| link
| Locked-on crosshair texture: TXMPfile<font color="#777777">.oni (don't use file suffix)</font>
|-
| <LockedColor>
| color
| Locked-on crosshair background color in BGRA
|-
| <LockedScale>
| float
| Locked-on crosshair scale factor
|-
| <TunnelTexture>
| link
| Aiming tunnel texture
|-
| <TunnelColor>
| color
| Tunnel background color in RGBA
|-
| <TunnelScale>
| float
| Tunnel scale factor
|-
| <TunnelCount>
| int32
| Number of tunnel textures
|-
| <TunnelSpacing>
| float
| Spacing of tunnel textures
|}


http://www6.fh-eberswalde.de/user/dkriesch/onistuff/images/onwc_e.gif
===<AmmoMeter>===
{|class="wikitable" width=100%
|width=120px| '''XML tag'''
|width=60px| '''Type'''
| '''Description'''
|-
| <Icon>
| link
| TXMPfile<font color="#777777">.oni (don't use file suffix)</font>
|-
| <Empty>
| link
| TXMPfile<font color="#777777">.oni (don't use file suffix)</font>
|-
| <Fill>
| link
| TXMPfile<font color="#777777">.oni (don't use file suffix)</font>
|}


===<Recoil>===
{|class="wikitable" width=100%
|width=120px| '''XML tag'''
|width=60px| '''Type'''
| '''Description'''
|-
| <Base>
| float
| Recoil base (e.g. for w1_tap and w2_sap)
|-
| <Max>
| float
| Recoil max
|-
| <Factor>
| float
| Recoil factor
|-
| <ReturnSpeed>
| float
| Recoil return speed
|-
| <FiringReturnSpeed>
| float
| Recoil firing return speed
|}


{| BORDER=1 WIDTH=100% CELLPADDING=2 CELLSPACING=0
===<AIFiringMode>===
|- ALIGN=CENTER BGCOLOR="#FFDDBB"
w11_ba1 is the only vanilla weapon in Oni that uses the second firing mode.
| WIDTH=15% | <B>Hex</B>
| WIDTH=15% | <B>Translation</B>
| WIDTH=70% | <B>Meaning</B>
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FF0000" | 01 75 0E 00
| 3701
| ALIGN=LEFT | 03701-w1_tap.ONWC
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFFF00" | 01 00 00 00
| 0
| ALIGN=LEFT | level 0
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFC8C8" | F5 A4 49 40
| 3.150693
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFC8C8" | F4 2C A5 3B
| 0.005041
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFC8C8" | 21 4E D2 3E
| 0.410752
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFC8C8" | 23 A6 7F 3F
| 0.998629
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFC8C8" | AA 6C 56 BD
| -0.052349
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFC8C8" | 69 66 AA B7
| -0.000020
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFC8C8" | 00 40 9C 45
| 5000.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFFFC8" | 00 00 FF FF
| -65535
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C8FFC8" | 01 94 05 00
| 1428
| ALIGN=LEFT | link to 01428-target_1A.[[OBD:TXMP|TXMP]]
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C8FFC8" | FF FF FF 00
| -256
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C8FFC8" | CD CC 4C 3F
| 0.800000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C8FFFF" | 01 95 05 00
| 1429
| ALIGN=LEFT | link to 01429-target_1B.[[OBD:TXMP|TXMP]]
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C8FFFF" | FF FF FF 00
| -256
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C8FFFF" | CD CC 4C 3F
| 0.800000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFC8FF" | 00 00 00 00
| not used
| ALIGN=LEFT | link to a [[OBD:TXMP|TXMP]] file
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFC8FF" | FF FF FF 00
| -256
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFC8FF" | 00 00 80 3F
| 1.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFC800" | 0F 00 00 00
| 15
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C800C8" | 00 00 20 41
| 10.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C87C64" | 01 7E 0E 00
| 3710
| ALIGN=LEFT | link to 03710-tap_icon.[[OBD:TXMP|TXMP]]
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C87C64" | 01 7F 0E 00
| 3711
| ALIGN=LEFT | link to 03711-tap_empty.[[OBD:TXMP|TXMP]]
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C87C64" | 01 80 0E 00
| 3712
| ALIGN=LEFT | link to 03712-tap_fill.[[OBD:TXMP|TXMP]]
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C87C64" | 01 76 0E 00
| 3702
| ALIGN=LEFT | link to 03702-.[[OBD:M3GM|M3GM]]
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#B0C3D4" COLSPAN=2 | <TT>w1_tap</TT>
| ALIGN=LEFT | name of the weapon
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#E7CEA5" | 00 00 80 3F
| 1.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#E7CEA5" | A6 92 2B 3D
| 0.041888
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#E7CEA5" | 92 0A 86 3E
| 0.261799
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#E7CEA5" | 00 00 A0 40
| 5.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#E7CEA5" | E2 A3 7B 3B
| 0.003839
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#E7CEA5" | 88 C3 E4 3A
| 0.001745
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#E7CEA5" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#E7CEA5" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#E7CEA5" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#E7CEA5" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#E7CEA5" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#E7CEA5" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#E7CEA5" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#E7CEA5" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#E7CEA5" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFDDDD" | 00 00
| 0
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFDDDD" | 95 00
| 149
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFDDDD" | A4 00
| 164
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFDDDD" | 19 00
| 25
| ALIGN=LEFT | pause after reload in 1/60 seconds
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFDDDD" | 0A 00
| 10
| ALIGN=LEFT | amount of shots
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFDDDD" | 06 00
| 6
| ALIGN=LEFT | amount of used packages (the file contains space for 16 packages)
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFDDDD" | 01 00
| 1
| ALIGN=LEFT | amount of shot modes
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFDDDD" | 0A 00
| 10
| ALIGN=LEFT | pause before reload in 1/60 seconds
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFDDDD" | 04 00
| 4
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFDDDD" | 00 00
| 0
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFDDDD" | 30
| 48
| ALIGN=LEFT | weapon options 1; the options are stored as bitsets, so the following options are possible (values in dec):


; Transform matrix
: Probably defined the orientation, scaling and position of the firing spread, but it doesn't appear to be used.


{| BORDER=0 CELLPADDING=0 CELLSPACING=0
{|class="wikitable" width=100%
|- VALIGN=TOP
|width=120px| '''XML tag'''
| ALIGN=RIGHT | 1 -&nbsp;
|width=60px| '''Type'''
| unknown, never used
| '''Description'''
|- VALIGN=TOP
|-
| ALIGN=RIGHT | 2 -&nbsp;
| <Flags>
| weapon can't be holstered
| flag
|- VALIGN=TOP
| NoWildShots is the only accepted value. When the AI first sights an enemy, their first shot will go wide if this flag is set (making them more lifelike and giving the player a break). Also see <MaxStartleMisses> tag below.
| ALIGN=RIGHT | 4 -&nbsp;
|-
| weapon reloads with energy cells
| <InverseDirection>
|- VALIGN=TOP
| matrix4x3
| ALIGN=RIGHT | 8 -&nbsp;
| Targeting inverse transform matrix. The inverse of the matrix that gives the targeting direction.
| weapon is a rifle (two-handed)
|-
|- VALIGN=TOP
| <Direction>
| ALIGN=RIGHT | 16 -&nbsp;
| vector3
| unknown, used for w1_tap and w2_sap
| Targeting direction. Sets the orientation of the firing spread.
|- VALIGN=TOP
|-
| ALIGN=RIGHT | 32 -&nbsp;
| <Origin>
| sustained fire
| vector3
|- VALIGN=TOP
| Targeting origin. Sets the deviation of the AI's aim from the target's origin
| ALIGN=RIGHT | 64 -&nbsp;
|-
| you can't shoot ...
| <PredictionSpeed>
|- VALIGN=TOP
| float
| ALIGN=RIGHT | 128 -&nbsp;
| Prediction speed. The supposed speed of the projectile, used by the AI to predict where to fire in order to hit a moving target (note that this doesn't strictly work for an accelerating projectile like the plasma rifle's).
| unknown, used for w6_vdg
|-
| <MaxInaccuracyAngle>
| float
| Maximum inaccuracy angle. Sets the max angle between the weapon's aiming vector and the target's position; when the AI exceeds this angle (whether due to recoil or the target evading them), they will stop shooting, re-aim the weapon straight at the target, then resume shooting.
|-
| <AimRadius>
| float
| Always the same. Possibly related to the inaccuracy angle above.
|-
| <AISoundRadius>
| float
| Weapon's sound sphere radius. The sound sphere is created momentarily every time the weapon fires, and is used to alert the AI (see [[AI#Vision and hearing|HERE]] to read about about AI sound spheres).
|-
| <MinShootingDistance>
| float
| Minimum shooting distance. If the target is closer than this, the AI ceases firing and moves backward from the target till at least this distance is achieved. Note that this is given as a diameter, not a radius, so the effective distance from the AI to the target is half of this value.
|-
| <MaxShootingDistance>
| float
| Maximum shooting distance. If the target is farther than this distance, then the AI ceases firing and moves toward the target until it gets below this distance.
|-
| <MaxStartleMisses>
| float
| Unused. If used, this would be the maximum number of times that an AI's shots will have extra inaccuracy when he begins aiming at a target. Also see NoWildShots flag above.
|-
| <SkillIndex>
| int16
| [[XML:ONCC#.3CWeaponSkills.3E|ONCC skill index]]
|-
| <FightTimer>
| int32
| Unknown timer; 240 for w4_psm, 200 for v6_vdg.
|-
| <ProjectileSpeed>
| float
| Ballistic projectile speed (150 for SBG, 160 for WMC).
|-
| <ProjectileGravity>
| float
| Ballistic projectile gravity, causing the AI to anticipate the arc their shot will follow. Can be negative for firing at the enemy's feet (0.5 for SBG, 0.3 for WMC).
|-
| <FireSpreadLength>
| float
| Length of weapon's supposed fire spread. The AI can utilize gunfire-dodging mechanics when it intersects with a fire spread (read [[AI#Basic combat behaviors|HERE]] for details). Can be visualized with "ai2_showfiringspreads=1" (180 for w1_tap, 150 for w2_sap, 120 for w4_psm).
|-
| <FireSpreadWidth>
| float
| Base width of weapon's supposed fire spread; can be visualized with "ai2_showfiringspreads=1".
|-
| <FireSpreadSkew>
| float
| Skew in the weapon's supposed fire spread; can be visualized with "ai2_showfiringspreads=1" (0.1 for w1_tap, 0.21 for w2_sap).
|}
|}


;Firing spread
Note that the dodging-oriented fire spread set here is entirely separate from the weapon's <u>actual</u> fire spread, that is, the conical gunfire that a weapon like the autopistol produces (see note at end of the [[OBD:BINA/PAR3#Emitters|PAR3 Emitters section]]). The dodging fire spread is separate in order to allow fine-tuning of the area from which the AI will attempt to escape, rather than simply relying on the calculated cone of weapons fire that is actually produced.


|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
===<ONWCParticle>===
| BGCOLOR="#FFDDDD" | C0
; Transformation matrix
| 192
: This is what defines particle orientation, stretching, etc. See [[OBD:CRSA|CRSA]] for details.
| ALIGN=LEFT | weapon options 2; the options are stored as bitsets, so the following options are possible (values in dec):
 


{| BORDER=0 CELLPADDING=0 CELLSPACING=0
{|class="wikitable" width=100%
|- VALIGN=TOP
|width=120px| '''XML tag'''
| ALIGN=RIGHT | 1 -&nbsp;
|width=60px| '''Type'''
| unknown, used for w4_psm
| '''Description'''
|- VALIGN=TOP
|-
| ALIGN=RIGHT | 2 -&nbsp;
| <Transform>
| unknown, used for w5_sbg and w11_ba1
| matrix4x3
|- VALIGN=TOP
| The transformation matrix (xx xy xz yx yy yz zx zy zz + x y z offset) of the particle to the weapon.
| ALIGN=RIGHT | 4 -&nbsp;
|-
| secondary fire enabled
| <ParticleClass>
|- VALIGN=TOP
| link
| ALIGN=RIGHT | 8 -&nbsp;
| <font color="#777777">BINA3RAP</font>file<font color="#777777">.oni</font> <font color="#777777">(don't use file prefix/suffix)
| weapon can't be reloaded
|-
|- VALIGN=TOP
| <UsedAmmo>
| ALIGN=RIGHT | 16 -&nbsp;
| int16
| run, jump and creep disabled
| Ammo to remove from current clip when weapon is fired (different for the 2 firing modes of w11_ba1).
|- VALIGN=TOP
|-
| ALIGN=RIGHT | 32 -&nbsp;
| <ShotDelay>
| unknown, used for w11_ba1
| int16
|- VALIGN=TOP
| Normal delay between shots, in frames.
| ALIGN=RIGHT | 64 -&nbsp;
|-
| unknown, used for w1_tap, w2_sap and w3_phr
| <RoughJusticeShotDelay>
|- VALIGN=TOP
| int16
| ALIGN=RIGHT | 128 -&nbsp;
| 'roughjustice' delay between shots, in frames.
| red line visible
|-
| <ActiveFrames>
| int16
| Minimum number of frames that the weapon will be firing for; used for w4_psm and w11_ba1.
|-
|valign=top| <TriggeredBy>
|valign=top| int16
|
: 0 (particle is triggered by fire1)
: 1 (particle is triggered by fire2)
: -1 (particle is triggered by both firing modes)
|-
| <DelayBeforeFiring>
| int16
| Delay before firing (think of the WMC's long warm-up time).
|}
|}


====Particle adjustment====
When adding particles in the <ONWCParticle> section, the last three values of <Transform> are the particle's start location.


|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
In your 3D editor, any object can serve as a helpful reference: pick one point of the object and move it to the location from where the particle should be spawned. Copy the value into the XML file. (Caution: Mod Tool uses a comma as a decimal mark, but OniSplit's XML files use a period.)
| BGCOLOR="#FFDDDD" | 02 00
| 2
| ALIGN=LEFT | weapon options 3; the options are stored as bitsets, so the following options are possible (values in dec):


==M3GM model==
===Export===
: ''onisplit -extract:obj output_folder input_folder\ONWCfile.oni''
: Version tips:
:: OniSplit v0.9.86.0 and v0.9.94.0 cannot extract OBJ or DAE using this method
:: OniSplit v0.9.61.0 can extract M3GM only as OBJ
:: OniSplit v0.9.41.0 can extract M3GM as OBJ or DAE


{| BORDER=0 CELLPADDING=0 CELLSPACING=0
===Import===
|- VALIGN=TOP
In your 3D editor, the weapon must be positioned on the XZ plane and pointing into +X space (weapon rotation {0, 0, 0}).
| ALIGN=RIGHT | 1 -&nbsp;
| unknown, never used
|- VALIGN=TOP
| ALIGN=RIGHT | 2 -&nbsp;
| unknown, used for w1_tap, w2_sap, w3_phr and w8_mbo
|- VALIGN=TOP
| ALIGN=RIGHT | 4 -&nbsp;
| unknown, never used
|- VALIGN=TOP
| ALIGN=RIGHT | 8 -&nbsp;
| unknown, used for w11_ba1
|- VALIGN=TOP
| ALIGN=RIGHT | 16 -&nbsp;
| unknown, used for w4_psm
|- VALIGN=TOP
| ALIGN=RIGHT | 32 -&nbsp;
| unknown, never used
|- VALIGN=TOP
| ALIGN=RIGHT | 64 -&nbsp;
| unknown, never used
|- VALIGN=TOP
| ALIGN=RIGHT | 128 -&nbsp;
| unknown, never used
|}


The center will be located at {0, 0, 0}, while the weapon's grip ends at the approximate position {0.3, ___, -0.5} and {0.8, ___, -0.5}.


|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
Now you can create an M3GM file from the geometry.
| BGCOLOR="#FFDDDD" | 00 00
| 0
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFDDDD" | 00 00
| 0
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | 23 A6 7F 3F
| 0.998629
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | 05 6D 56 3D
| 0.052350
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | F4 8D A9 37
| 0.000020
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | 05 6D 56 BD
| -0.052350
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | 23 A6 7F 3F
| 0.998629
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | D0 1D 0E B5
| -0.000001
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | F4 8D A9 B7
| -0.000020
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | D0 1D 0E B5
| -0.000001
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | 00 00 80 3F
| 1.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | 23 A6 7F 3F
| 0.998629
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | AE 6C 56 BD
| -0.052349
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | AF 8D A9 B7
| -0.000020
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | DC FE 08 3C
| 0.008362
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | 5C 11 23 3E
| 0.159246
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | 39 C6 2A 3F
| 0.667087
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | 00 00 61 44
| 900.000000
| ALIGN=LEFT | range of fire
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | 00 00 20 41
| 10.000000
| ALIGN=LEFT | scattering angle ? / slice ?
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | 00 00 20 40
| 2.500000
| ALIGN=LEFT | unknown; always the same
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | 00 00 96 43
| 300.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | 00 00 40 41
| 12.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#64AAAA" | 00 00 61 44
| 900.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#EBEBEB" | 05 00
| 5
| ALIGN=LEFT | unknown; always the same
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#EBEBEB" | 01 00
| 1
| ALIGN=LEFT | weapon ID
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#EBEBEB" | 00 00 00 00
| 0
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 34 43
| 180.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 40 40
| 3.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 50 77 D6 3D
| 0.104719
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; only w11_ba1 use it
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; only w11_ba1 use it
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; only w11_ba1 use it
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; only w11_ba1 use it
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; only w11_ba1 use it
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; only w11_ba1 use it
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; only w11_ba1 use it
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; only w11_ba1 use it
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; only w11_ba1 use it
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; only w11_ba1 use it
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; only w11_ba1 use it
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; only w11_ba1 use it
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; only w11_ba1 use it
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00
| 0
| ALIGN=LEFT | unknown; only w11_ba1 use it
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00
| 0
| ALIGN=LEFT | unknown; only w11_ba1 use it
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#8C8CCC" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#000000"
| COLSPAN=3 | <FONT SIZE=2 COLOR="#FFFFFF">Below follows the first package.</FONT>
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FF00C8" | 23 A6 7F 3F
| 0.998629
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FF00C8" | C2 53 90 B3
| -6.720757e-8
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FF00C8" | 23 A6 7F 3F
| 0.998629
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FF00C8" | AE 6C 56 BD
| -0.052349
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FF00C8" | AF 8D A9 B7
| -0.000020
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FF00C8" | BA 59 A9 B7
| -0.000020
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FF00C8" | 5B 02 85 35
| 0.000001
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FF00C8" | 00 00 80 BF
| -1.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FF00C8" | 6F 63 57 40
| 3.365444
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FF00C8" | B3 1D 89 BC
| -0.016738
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FF00C8" | C5 C1 2A 3F
| 0.667019
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#F0F096" COLSPAN=2 | <TT>w1_tap_e01</TT>
| ALIGN=LEFT | weapon particle (06226-3RAPw1_tap_e01.BINA)
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#00C864" | 00 00
| 0
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#00C864" | 00 00
| 0
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#00C864" | 01 00
| 1
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#00C864" | 0C 00
| 12
| ALIGN=LEFT | shot frequency in 1/60 seconds (12/60 = 0.2 = 1 shot per 0.2 seconds)
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#00C864" | 04 00
| 4
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#00C864" | 00 00
| 0
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#00C864" | 00 00
| 0
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#00C864" | 00 00
| 0
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#000000"
| COLSPAN=3 | <FONT SIZE=2 COLOR="#FFFFFF">Below follows the end of the ONWC file.</FONT>
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#00C8FF" COLSPAN=2 | <TT>weapon _empty</TT>
| ALIGN=LEFT | empty weapon sound<BR>(08992-weapon_empty.grp.[[OBD:OSBD|OSBD]])<BR>(08993-weapon_empty.imp.[[OBD:OSBD|OSBD]])
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C80040" | 00 00 00 00
| 0
| ALIGN=LEFT | unknown; always zero
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFCD96" | 01 81 0E 00
| 3713
| ALIGN=LEFT | link to 03713-w1_glow.[[OBD:TXMP|TXMP]]
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#FFCD96" | 01 82 0E 00
| 3714
| ALIGN=LEFT | link to 03714-w1_glow_ammo.[[OBD:TXMP|TXMP]]
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C8C864" | 00 00 80 3F
| 1.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C8C864" | 00 00 80 3F
| 1.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C8C864" | 76 65 EB 3F
| 1.839034
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C8C864" | 96 4C A9 3D
| 0.082666
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C8C864" | 06 E2 14 3E
| 0.145393
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#C8C864" | 00 00 00 00
| 0.000000
| ALIGN=LEFT | unknown
|- ALIGN=CENTER VALIGN=TOP BGCOLOR="#FFEEDD"
| BGCOLOR="#0096C8" | AD DE
| dead
| ALIGN=LEFT | not used
|}


====New method====
To import or change weapon geometry, simply insert the M3GM's file name into ONWC's <Geometry> tag. For example:


<HR>
<Geometry>M3GMw1_tap_new</Geometry>


Don't use the file suffix ".oni". The file prefix "M3GM" can also be absent; it's optional here.


<CENTER>Here you can download the complete overview of all used different ONWC files as a text file.<BR>Copy it to a spreadsheet calculation program like Excel.<BR><UL><LI>[http://www6.fh-eberswalde.de/user/dkriesch/onistuff/subfold/text/oni_onwc_dc.txt text file] with commas as decimal hyphens (27 kb)</LI><LI>[http://www6.fh-eberswalde.de/user/dkriesch/onistuff/subfold/text/oni_onwc_dp.txt text file] with points as decimal hyphens (27 kb)</LI></UL></CENTER>
M3GM files can be created with [[Vago_(tool)|Vago]]. When you convert the ONWC from XML back to .oni, be sure that the M3GM file is in the same folder.


====Old method====
There are various tags which compose the mesh, but all you really need to know that you can replace that content with data from another M3GM.


<HR>
You can create M3GM meshes from OBJ files.
<CENTER>[[OBD:ONVL|<==]] <B>ONWC File</B> [[OBD:OPge|==>]]</CENTER>
: ''onisplit -create:m3gm output_folder -tex:weapon_tex input_folder/weapon.obj''
<HR>
:: "-tex" is optional
:: The TXMP file must be created separately (if needed).


Then you can convert the file to XML and replace the ONWC's old M3GM XML code (in case you didn't start from scratch). Remember to change the links (#N) and instance IDs of the new data.


[[Main Page]] >> [[OBD:Oni Binary Data|Oni Binary Data]] >> [[OBD:File types|File Types]] >> ONWC File
{{XML}}

Latest revision as of 16:54, 6 March 2024

ONWC : Oni Weapon Class
XML modding tips
  • See HERE to start learning about XML modding.
  • See HERE if you are searching for information on how to handle object coordinates.
  • See HERE for some typical modding errors and their causes.
XML.png
XML

ONVL << Other file types >> OPge

switch to OBD page

General information

  • The XML on this page is compatible with OniSplit v0.9.61.0.
  • Vanilla ONWC files are stored in AE/AEInstaller/vanilla/level0_Final.dat.

File structure

  • ONWC
    • M3GM (embedded 3D mesh)
      • PNTA <Points>
      • VCRA <VertexNormals>
      • VCRA <FaceNormals>
      • TXCA <TextureCoordinates>
      • IDXA <TriangleStrips>
      • IDXA <FaceNormalIndices>
      • TXMP <Texture> (link to external file)

XML tags

XML tag Type Description
<LaserSight> See THIS section below.
<AmmoMeter> See THIS section below.
<Geometry> link Weapon instance number (#N). For geometry importing, see THIS section below.
<Name> char[32] ONWCfile.oni (don't use file prefix/suffix)
<MouseSensitivity> float Weapon's mouse sensitivity (applies to AI too).
<Recoil> See THIS section below.
<RecoilAnimationType> link A recoil animation type.
<ReloadAnimationType> link A reload animation type.
<PauseAfterReload> int16 Pause after reloading, in 1/60 seconds.
<MaxShots> int16 Number of "shots". Let's say a weapon has 4 emitters each with <UsedAmmo>1 and the weapon shall be able to fire 3 times. Then <MaxShots> has to be 12 = 4 * 1 * 3.

A mismatched <MaxShots> number creates an infinite-ammunition bug.

<ParticleCount> int16 Number of attached particles.
<FiringModeCount> int16 Number of used firing modes (max of 2?).
<PauseBeforeReload> int16 Pause before reloading, in 1/60 seconds.
<ReleaseDelay> int16 Delay between the moment the trigger is released and the moment the weapon stops firing.
<Flags> flag Weapon options
NoHolster
UsesCells
TwoHanded
RecoilAffectsAiming
Even without this flag, there will still be recoil. Recoil makes the aim travel upwards as the trigger is held down.
If the flag is set, the aiming will remain elevated after firing the gun.
If flag isn't set, the upward movement stops earlier, and when the firing ends, the weapon will fall to the previous aiming angle.
Automatic
StunSwitcher
If the enemy is within shooting distance (between <MinShootingDistance> and <MaxShootingDistance>) and is knocked down, stunned or blown up, the AI with this weapon switches to melee for a time specified in a *fight timer* field.
KnockdownSwitcher
If the enemy is within shooting distance and is knocked down or blown up, the AI with this weapon switches to melee for a time specified in a *fight timer* field.
Explosive
SecondaryFire
BarabbasWeapon
If the enemy is within shooting distance and is knocked down or blown up, the AI with this weapon switches to melee for a time specified in a *fight timer* field.
Heavy
AutoRelease
HasReleaseDelay
HasLaserSight
ScaleCrosshair
NoFade
DrainAmmo
<FiringModes> Holds 2 <FiringModes> tags.
<AIFiringMode> See THIS section below.
<Particles> Holds 16 <ONWCParticle> tags.
<ONWCParticle> See THIS section below.
<EmptyWeaponSound> link OSBDfile.imp.oni (don't use file prefix/suffix)
<Glow> link TXMPfile.oni (don't use file suffix)
<GlowAmmo> link TXMPfile.oni (don't use file suffix)
<GlowTextureScale> float XZ scale factor of glow textures around weapon when lying on the ground.
<PickupHandleOffset> float XYZ offset of weapon's pickup handle when on the ground.
<HoveringHeight> float Hovering height of weapon when on ground.
Glow textures
They're applied to the lower face of the M3GM's bounding box. The factors in <GlowTextureScale> 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 around the defined handle is hardcoded. The offsets are not relative to the weapon's axes, but to the world axes (!). This is a rather nasty "feature", as the offsets should definitely be relative to the weapon's orientation. The way it is now, the pickup volume of Barabas' Wave Motion Cannon is not necessarily near the handle. That's why it's hard to pick up sometimes.

<LaserSight>

Crosshair
The default crosshair appears where the laser sight contacts the environment, corpses, etc. A locked-on version of the crosshair appears when the laser sight contacts characters (including the shooter). An "aiming tunnel" is used by the w8_mbo as a complement to the crosshair (w2_sap, w5_sbg, w7_scc and w9_scr use the tunnel with no crosshair).
XML tag Type Description
<Origin> float X, Y, Z
<Stiffness> float X component of laser sight direction?
<AdditionalAzimuth> float Wikipedia definition of azimuth
<AdditionalElevation> float Wikipedia definition of elevation
<LaserMaxLength> float Maximum length of laser sight vector.
<LaserColor> color Laser sight color in BGRA
<NormalTexture> link Crosshair texture: TXMPfile.oni (don't use file suffix)
<NormalColor> color Crosshair background color in BGRA
<NormalScale> float Crosshair scale factor
<LockedTexture> link Locked-on crosshair texture: TXMPfile.oni (don't use file suffix)
<LockedColor> color Locked-on crosshair background color in BGRA
<LockedScale> float Locked-on crosshair scale factor
<TunnelTexture> link Aiming tunnel texture
<TunnelColor> color Tunnel background color in RGBA
<TunnelScale> float Tunnel scale factor
<TunnelCount> int32 Number of tunnel textures
<TunnelSpacing> float Spacing of tunnel textures

<AmmoMeter>

XML tag Type Description
<Icon> link TXMPfile.oni (don't use file suffix)
<Empty> link TXMPfile.oni (don't use file suffix)
<Fill> link TXMPfile.oni (don't use file suffix)

<Recoil>

XML tag Type Description
<Base> float Recoil base (e.g. for w1_tap and w2_sap)
<Max> float Recoil max
<Factor> float Recoil factor
<ReturnSpeed> float Recoil return speed
<FiringReturnSpeed> float Recoil firing return speed

<AIFiringMode>

w11_ba1 is the only vanilla weapon in Oni that uses the second firing mode.

Transform matrix
Probably defined the orientation, scaling and position of the firing spread, but it doesn't appear to be used.
XML tag Type Description
<Flags> flag NoWildShots is the only accepted value. When the AI first sights an enemy, their first shot will go wide if this flag is set (making them more lifelike and giving the player a break). Also see <MaxStartleMisses> tag below.
<InverseDirection> matrix4x3 Targeting inverse transform matrix. The inverse of the matrix that gives the targeting direction.
<Direction> vector3 Targeting direction. Sets the orientation of the firing spread.
<Origin> vector3 Targeting origin. Sets the deviation of the AI's aim from the target's origin
<PredictionSpeed> float Prediction speed. The supposed speed of the projectile, used by the AI to predict where to fire in order to hit a moving target (note that this doesn't strictly work for an accelerating projectile like the plasma rifle's).
<MaxInaccuracyAngle> float Maximum inaccuracy angle. Sets the max angle between the weapon's aiming vector and the target's position; when the AI exceeds this angle (whether due to recoil or the target evading them), they will stop shooting, re-aim the weapon straight at the target, then resume shooting.
<AimRadius> float Always the same. Possibly related to the inaccuracy angle above.
<AISoundRadius> float Weapon's sound sphere radius. The sound sphere is created momentarily every time the weapon fires, and is used to alert the AI (see HERE to read about about AI sound spheres).
<MinShootingDistance> float Minimum shooting distance. If the target is closer than this, the AI ceases firing and moves backward from the target till at least this distance is achieved. Note that this is given as a diameter, not a radius, so the effective distance from the AI to the target is half of this value.
<MaxShootingDistance> float Maximum shooting distance. If the target is farther than this distance, then the AI ceases firing and moves toward the target until it gets below this distance.
<MaxStartleMisses> float Unused. If used, this would be the maximum number of times that an AI's shots will have extra inaccuracy when he begins aiming at a target. Also see NoWildShots flag above.
<SkillIndex> int16 ONCC skill index
<FightTimer> int32 Unknown timer; 240 for w4_psm, 200 for v6_vdg.
<ProjectileSpeed> float Ballistic projectile speed (150 for SBG, 160 for WMC).
<ProjectileGravity> float Ballistic projectile gravity, causing the AI to anticipate the arc their shot will follow. Can be negative for firing at the enemy's feet (0.5 for SBG, 0.3 for WMC).
<FireSpreadLength> float Length of weapon's supposed fire spread. The AI can utilize gunfire-dodging mechanics when it intersects with a fire spread (read HERE for details). Can be visualized with "ai2_showfiringspreads=1" (180 for w1_tap, 150 for w2_sap, 120 for w4_psm).
<FireSpreadWidth> float Base width of weapon's supposed fire spread; can be visualized with "ai2_showfiringspreads=1".
<FireSpreadSkew> float Skew in the weapon's supposed fire spread; can be visualized with "ai2_showfiringspreads=1" (0.1 for w1_tap, 0.21 for w2_sap).
Firing spread

Note that the dodging-oriented fire spread set here is entirely separate from the weapon's actual fire spread, that is, the conical gunfire that a weapon like the autopistol produces (see note at end of the PAR3 Emitters section). The dodging fire spread is separate in order to allow fine-tuning of the area from which the AI will attempt to escape, rather than simply relying on the calculated cone of weapons fire that is actually produced.

<ONWCParticle>

Transformation matrix
This is what defines particle orientation, stretching, etc. See CRSA for details.
XML tag Type Description
<Transform> matrix4x3 The transformation matrix (xx xy xz yx yy yz zx zy zz + x y z offset) of the particle to the weapon.
<ParticleClass> link BINA3RAPfile.oni (don't use file prefix/suffix)
<UsedAmmo> int16 Ammo to remove from current clip when weapon is fired (different for the 2 firing modes of w11_ba1).
<ShotDelay> int16 Normal delay between shots, in frames.
<RoughJusticeShotDelay> int16 'roughjustice' delay between shots, in frames.
<ActiveFrames> int16 Minimum number of frames that the weapon will be firing for; used for w4_psm and w11_ba1.
<TriggeredBy> int16
0 (particle is triggered by fire1)
1 (particle is triggered by fire2)
-1 (particle is triggered by both firing modes)
<DelayBeforeFiring> int16 Delay before firing (think of the WMC's long warm-up time).

Particle adjustment

When adding particles in the <ONWCParticle> section, the last three values of <Transform> are the particle's start location.

In your 3D editor, any object can serve as a helpful reference: pick one point of the object and move it to the location from where the particle should be spawned. Copy the value into the XML file. (Caution: Mod Tool uses a comma as a decimal mark, but OniSplit's XML files use a period.)

M3GM model

Export

onisplit -extract:obj output_folder input_folder\ONWCfile.oni
Version tips:
OniSplit v0.9.86.0 and v0.9.94.0 cannot extract OBJ or DAE using this method
OniSplit v0.9.61.0 can extract M3GM only as OBJ
OniSplit v0.9.41.0 can extract M3GM as OBJ or DAE

Import

In your 3D editor, the weapon must be positioned on the XZ plane and pointing into +X space (weapon rotation {0, 0, 0}).

The center will be located at {0, 0, 0}, while the weapon's grip ends at the approximate position {0.3, ___, -0.5} and {0.8, ___, -0.5}.

Now you can create an M3GM file from the geometry.

New method

To import or change weapon geometry, simply insert the M3GM's file name into ONWC's <Geometry> tag. For example:

<Geometry>M3GMw1_tap_new</Geometry>

Don't use the file suffix ".oni". The file prefix "M3GM" can also be absent; it's optional here.

M3GM files can be created with Vago. When you convert the ONWC from XML back to .oni, be sure that the M3GM file is in the same folder.

Old method

There are various tags which compose the mesh, but all you really need to know that you can replace that content with data from another M3GM.

You can create M3GM meshes from OBJ files.

onisplit -create:m3gm output_folder -tex:weapon_tex input_folder/weapon.obj
"-tex" is optional
The TXMP file must be created separately (if needed).

Then you can convert the file to XML and replace the ONWC's old M3GM XML code (in case you didn't start from scratch). Remember to change the links (#N) and instance IDs of the new data.