Battlezone: Combat Commander

Battlezone: Combat Commander

Not enough ratings
ODF Render Documentation
By GenBlackDragon
Documentation on creating Render Effects for use in ODFs in Battlezone Combat Commander version 2.0.185.
   
Award
Favorite
Favorited
Unfavorite
Particle Render Items
What is a Particle Render?

A Render is a Particle Effect that is rendered in the World. Many things can have particle Effects, most notably Weapons and Explosions, but they can also be attached to Objects. Renders are loaded through Object Definition Files, and are referenced by various ODF Properties. Similar to Classlabels, there are very specific Render Base and Simulate Base Classes that the game supports. This guide will list all the settings for each of these Classes.

How to use Particle Renders?

Render ODFs can be referenced from any location within the game's Asset tree. They can be part of existing ODFs, or separate in their own ODFs. ODF properties that point to Renders can specify a Render by the following format:

renderName = "myrenderfile.renderheader"

This example would point to myrenderfile.odf and header section [RenderHeader].

A render placed in an existing ODF is usually placed at the Bottom, below all the other ODF Header sections. All the ODF Header rules listed in the ODF Documentation Guide still apply to Renders as well. Each Render should have it's own unique Header. Unlike the GameObject's ODF Headers, however, the names of Render Headers can be what ever you like.

Different file names can have Renders with the same Head name, and be referenced individually by their filename.headername. So, for example: ivtank.odf could have a effectHard1 = "hp_emit_1" and effectName1 = "myrenderfile.renderheader" which points to the Render of that Header name listed in myrenderfile.odf. You can have multiple Headers and reference each one individually if you wish.

You can also create a special ODF with only 1 Render item in it, and reference it directly by just the ODF name, if the [Header] matches the ODF name. For instance, you could make myrender.odf have it's first header be [MyRender] and point to it simply by saying renderName = "myrender".

Render Bases are defined by the following ODF Parameter:

[RenderHeader] renderBase = ""
Below is a list of valid renderBase names:
  • draw_null
  • draw_bolt
  • draw_emit
  • draw_geom
  • draw_light
  • draw_multi
  • draw_planar
  • draw_sphere
  • draw_sprite
  • draw_static
  • draw_tracer
  • draw_trail
  • draw_twirl
  • draw_twirl_trail
  • draw_wave

RenderBase can also be set to reference another renderBase item, the same way renderName is set. This can be used to make quick variations with only minor differences.

What is a Particle Simulate?

Particle Simulate Classes define the physics behavior of the Particle Render Effects. Not all Particle Renders need to have a Particle Simulate, such as those attached to Ordnance or Objects via renderName or effectName. But any Render Item that is disconnected from that, such as generated by a draw_emit, or an Explosion's particleClass, need to have a simulateBase specified to define their physics properties. The game will give a Console Error if a Particle is missing it's simulateBase.

Simulate Base is defined by the following ODF Property:

[RenderHeader] simulateBase = ""

Below is a list of valid simulateBase names, and how they behave:
  • sim_null
    A Particle that is stationary and does not apply velocity on it's own.

  • sim_chunk
    A Particle that falls to the Ground and bounces with 50% velocity, and can have rotational velocity. Will bounce off Ground but can clip through Collisions.

  • sim_dust
    A Particle that spawns on the Ground, and can apply velocity.

  • sim_ember
    A Particle that falls to the Ground and bounces with 50% velocity, does not apply rotational velocity. Will bounce off Ground but can clip through Collisions.

  • sim_spray
    A Particle that falls to the Ground and bounces with 50% velocity, does not apply rotational velocity. If height is below Collision height, will set height to the collision height, and cannot clip through Collisions.

  • sim_smoke
    A Particle that can apply velocity.
ParticleRenderClass
renderBase: "draw_null"

Description:
Particle Render is the base class for all Particle Effects.

ODF Properties:
  • [RenderHeader]

    minLOD = 0
    Minimum LOD setting, used with Graphics Option's Particle settings to cull particles.

    maxLOD = 2
    Maximum LOD setting, used with Graphics Option's Particle settings to cull particles.

    StartDelay = 0.0f
    Time, in seconds, before this render Starts to animate.
    Note: This does not delay the lifeTime, only the animateTime.
    Note: For Render Items this may only be supported on draw_emit and draw_twirl_trail.
ParticleSimulateClass
simulateBase: "sim_null"

Description:
Root level Simulate base class. Particle Simulate Bases control the physics properties of Render items.

ODF Properties:
  • [RenderHeader]

    lifeTime = 1.0f
    Time in seconds this Render lasts.

    StartDelay = 0.0f
    Time, in seconds, before this render Starts to animate.
    Note: This does not delay the lifeTime, only the animateTime.

    maxCount = 128
    Maximum number of this particle that can be active on the screen at any given time before oldest ones get Culled.

    SimulateSoundEffect = ""
    If specified, this is the sound file played when this particle is emitted.
EmitRenderClass
renderBase: "draw_emit"

Class Tree: ParticleRender->EmitRender

Description:
A Render that emits another ParticleRender item. Items spawned from this should have a simulateBase to define their movement.

ODF Properties:
  • [RenderHeader]

    emitName = ""
    The Render name to emit.

    emitDelay = 1e30.0f
    Time in seconds between emitting an instance of the Render.
    Note: LOD level in Graphics Options Particle Setting increments this by * 2 or * 4.

    emitDelayVar = 0.0f
    Maximum variance in the emitDelay for this render. Adds a random between 0.0f and emitDelayVar to emitDelay each time it emits an instance of the Render.
    Note: LOD level in Graphics Options Particle Setting increments this by * 2 or * 4.

    emitPosVariance = "0.0 0.0 0.0"
    Maximum random Position variance for this Render's initial starting position from the root position of the emitter Object.

    emitVelocity = "0.0 0.0 0.0"
    Maximum random Velocity variance for this Render.

    emitVariance = "0.0 0.0 0.0"
    Maximum random Directional variance for this Render's velocity.

    emitInherit = "0.0 0.0 0.0"
    Percent of Velocity inherited from the root emitter Object's velocity. 1.0 is 100%, but is not limited.
MultiRenderClass
renderBase: "draw_multi"

Class Tree: ParticleRender->MultiRender

Description:
Renders multiple other Particle Render items simultaneously.

ODF Properties:
  • [RenderHeader]

    renderCount = 0
    How many Renders to add. This list is unlimited, try not to over do it.

    renderName1 ... renderName# = ""
    For each Count, the Render name to generate.
ColorRenderClass
Class Tree: ParticleRender->ColorRender

Description:
Color Render is the root Class for all Particle Render items. It has no renderBase of it's own.

ODF Properties:
  • [RenderHeader]

    textureName = ""
    Texture filename applied to this Render. File extension does not matter, game internally converts it to .dds.

    textureBlend = ""
    Texture Blend mode for the Texture on this Render.
    The format is: "SourceMode DestinationMode TextureMethod"

    For SourceMode and/or DestinationMode, the following values are valid:
    • Zero //zero means no contribution;
    • One //one means full contribution;
    • Srccolor //srccolor multiplies by the source color;
    • Invsrccolor //invsrccolor multiplies by one minus the source color (per component)
    • srcalpha //srcalpha multipliles by the source alpha;
    • invsrcalpha //invsrcalpha multiplies by one minus the source alpha
    • dstcolor //and dst* uses the destination color or alpha
    • invdstcolor
    • dstalpha
    • invdstalpha
    • scralphasat //srcalphasat is source alpha with saturation.

    For TextureMethod the following values are valid:
    • decal //In this mode, the RGB and alpha values of the texture replace the colors that would have been used with no texturing.
    • modulate //In this mode, the RGB values of the texture are multiplied with the RGB values that would have been used with no texturing. Any alpha values in the texture replace the alpha values in the colors that would have been used with no texturing; if the texture does not contain an alpha component, alpha values at the vertices in the source are interpolated between vertices.
    • decalalpha // In this mode, the RGB and alpha values of the texture are blended with the colors that would have been used with no texturing, according to the following formulas: (cSrc * (1.0 - aTex)) + (aTex * cTex)
    • modulatealpha // In this mode, the RGB values of the texture are multiplied with the RGB values that would have been used with no texturing, and the alpha values of the texture are multiplied with the alpha values that would have been used with no texturing.
    • decalmask //This blending mode is not supported.
    • modulatemask //This blending mode is not supported.
    • add

    startColor = "0 0 0 0"
    Start color, in RGBA format.

    finishColor = "0 0 0 0"
    Finish color, in RGBA format.

    startRadius = 0.0f
    Start Radius.

    finishRadius = 0.0f
    Finish Radius.

    animateTime = 1e30.0f
    Time to transition between StartColor / StartRadius, to FinishColor / Radius.

    useTerrainColor = 0.0f
    The Percent value of Terrain cluster color under the Render to blend with the current Color. Valid values are 0.0 to 1.0.
BoltRenderClass
renderBase; "draw_bolt"

Class Tree: ParticleRender->ColorRender->BoltRender

Description:
Bolt Render draws a series of Trail segments with variance in direction between segments, resulting in a zigzagging Trail.

Default ODF Properties:
[RednerHeader] animateTime = 0.1f

ODF Properties:
  • [RenderHeader]

    segmentLength = 0.0f
    The length of each Segment.

    segmentVariance = "0.0 0.0 0.0"
    The X Y Z variance of each segment's direction.

    textureRate = 0.0f
    Rate which the texture can change per segment.

    textureSpeed = 0.0f
    UV Speed of the Texture along the trail.
GeomRenderClass
renderBase: "draw_geom"

Class Tree: ParticleRender->ColorRender->GeomRender

Description:
Draws a simple 3d Geometry model. It supports rotation and transparency modes.

ODF Properties:
  • [RenderHeader]

    geomName = ""
    Model file name for this Render. Can be .XSI or .FBX. The TextureName is applied to the uvmapping on the Model, and the textureMode is used on it.
    Note: This model can only be 1 single piece. It cannot have any hierarchy, and there can only be 1 texture applied to the entire surface. This means it should be a simple geometry.

    InitialPitch = 0.0f
    Initial starting Pitch value.

    InitialYaw = 0.0f
    Initial starting Yaw value.

    InitialRoll = 0.0f
    Initial starting Roll value.

    AddPitch = 0.0f
    Amount added to Pitch per second.

    AddYaw = 0.0f
    Amount added to Yaw per second.

    AddRoll = 0.0f
    Amount added to Roll per second.

    ForceDrawTransparent = true
    If this is true, it forces it to draw using transparency. If false, draws it opaque.

    ForceDraw2Sided = true
    If this is true, draws it as a 2 Sided geometry, if false, hides back faces.
LightRenderClass
renderBase: "draw_light"

Class Tree: ParticleRender->ColorRender->LightRender

Description:
Draws a Light source with the specified colorRender settings.
Note: startColor and finishColor's Alpha setting determines light intensity. startRadius / finishRadius control the Range of the light.

ODF Properties:
  • [RenderHeader]

    lightType = "point"
    The type of light. Valid values are:
    • point
    • spot

    Light Attenuation values. Use this graph to calculate the desired settings with BZCC's Shader:
    Battlezone Combat Commander Light Attenuation Graph[www.desmos.com]
    R = Radius, Kc = Constant, Kl = Linear, Kq = Quadratic. The Blue line represents BZCC's light falloff. BZCC's Shader forces the light to end at 0, which is why the dotted Red line isn't the actual light falloff curve.

    attenuateConstant = 1.0f
    Constant Attenuation, modified by Liniar/Quadratic.

    attenuateLinear = 0.0f
    Liniar Attenuation.

    attenuateQuadratic = 15.0f
    Quadratic Attenuation.

    coneAngInner = 1.570795
    Inner Cone Angle for lightType: spot.

    coneAngOuter = 1.570795
    Outer Cone Angle for lightType: spot.

    coneFalloff = 1.0f
    Cone Falloff ratio between origin and Radius. Used for lightType: spot.

    lensFlare = true
    If false, doesn't create a Sprite of "lightflare.tga" and "lighthalo.tga" at it's origin.
    Note: The size of the Lens Flare is controlled by the Alpha value of the color.
PlanarRenderClass
renderBase: "draw_planar"

Class Tree: ParticleRender->ColorRender->PlanarRender

Description:
Renders a texture along the Ground surface. Usually used for explosion splash rings.

ODF Properties:
  • [RenderHeader]

    rotationRate = 0.0f
    Rotation rate of the Render.
SphereRenderClass
renderBase: "draw_sphere"

Class Tree: ParticleRender->ColorRender->SphereRender

Description:
Draws a Sphere geometry.
Note: Despite popular belief, the ODF parameters for latitudeBands and longitudeSegments don't actually do anything. draw_sphere is hard coded to 16 and 32, respectively. Those ODF parameters only work on ShieldEffect.odf.

ODF Properties:
  • [RenderHeader]

    InitialPitch = 0.0f
    Initial starting Pitch value.

    InitialYaw = 0.0f
    Initial starting Yaw value.

    InitialRoll = 0.0f
    Initial starting Roll value.

    AddPitch = 0.0f
    Amount added to Pitch per second.

    AddYaw = 0.0f
    Amount added to Yaw per second.

    AddRoll = 0.0f
    Amount added to Roll per second.
SpriteRenderClass
renderBase: "draw_sprite"

Class Tree: ParticleRender->ColorRender->SpriteRender

Description:
A static Sprite that does not rotate.

ODF Properties:
  • [RenderHeader]

    spriteCenter.x = 0.0f
    Offsets the Center position of the Sprite texture on the X Axis. 1.0 is 100%.

    spriteCenter.y = 0.0f
    Offsets the Center position of the Sprite texture on the Y Axis. 1.0 is 100%.
StaticRenderClass
renderBase: "draw_static"

Class Tree: ParticleRender->ColorRender->StaticRender

Description:
Static Render draws randomized triangular polys in a sphere around the Emitter.

ODF Properties:
  • [RenderHeader]

    innerRadius = 0.0f
    Inner radius of sphere.

    outerRadius = 0.0f
    Outer radius of sphere.

    emitDelay = 0.0f
    Time in seconds between emitting particles.

    emitDelayVar = 0.0f
    Maximum random variance added to emitDelay.

    staticTime = 1e30.0f
    Overrides the lifeTime value, if present.

    segmentTime = 0.0f
    Overrides the animateTime value, if present.
TracerRenderClass
renderBase: "draw_tracer"

Class Tree: ParticleRender->ColorRender->TracerRender

Description:
Draws a static texture along a cross section of Geometry.

ODF Properties:
  • [RenderHeader]

    tracerLength = 10.0f
    Length of the Tracer geometry.
TrailRenderClass
renderBase: "draw_trail"

Class Tree: ParticleRender->ColorRender->TrailRender

Description:
Draws a cross section Trail geometry along the path of the Emitter.

ODF Properties:
  • [RenderHeader]

    segmentTime = 0.0f
    Overrides animateTime if specified. Controls how long each Segment takes to render.

    textureRate = 0.0f
    Rate the texture repeats across each segment.

    textureSpeed = 0.0f
    Speed the UV coordinates move the texture along the Trail.
TwirlRenderClass
renderBase: "draw_twirl"

Class Tree: ParticleRender->ColorRender->TwirlRender

Description:
Draws a Texture that can Rotate and modulate with Terrain.

ODF Properties:
  • [RenderHeader]

    rotationRate = 0.0f
    Maximum random Rotation that can be applied.

    BottomInteractsWithTerrain = true
    If true, squishes vertically to avoid clipping through Terrain.
TwirlTrailRenderClass
renderBase: "draw_twirl_trail"

Class Tree: ParticleRender->ColorRender->TwirlRender->TwirlTrailRender

Description:
Similar to draw_emit, draws a trail of TwirlRender items behind it.

ODF Properties:
  • [RenderHeader]

    emitDelay = 1e30.0f
    Time in seconds between emitting an instance of the Render.
    Note: LOD level in Graphics Options Particle Setting increments this by * 2 or * 4.

    emitDelayVar = 0.0f
    Maximum variance in the emitDelay for this render. Adds a random between 0.0f and emitDelayVar to emitDelay each time it emits an instance of the Render.
    Note: LOD level in Graphics Options Particle Setting increments this by * 2 or * 4.

    emitPosVariance = "0.0 0.0 0.0"
    Maximum random Position variance for this Render's initial starting position from the root position of the emitter Object.

    emitVelocity = "0.0 0.0 0.0"
    Maximum random Velocity variance for this Render.

    emitVariance = "0.0 0.0 0.0"
    Maximum random Directional variance for this Render's velocity.

    emitInherit = "0.0 0.0 0.0"
    Percent of Velocity inherited from the root emitter Object's velocity. 1.0 is 100%, but is not limited.

    emitLife = 1.0f
    Time in seconds that each emitted TwirlRender lasts.

    maxDist = 400.0f
    Distance from Camera for it to stop Rendering.

    maxRadii = -10.0f
    Radius outside of Camera view for it to skip Rendering.

    groupDelay = 0.1f
    Delay between Groups.
WaveRenderClass
renderBase: "draw_wave"

Class Tree: ParticleRender->ColorRender->WaveRender

Description:
Draws a flat semi circular Wave.

ODF Properties:
  • [RenderHeader]

    waveAngle = 0.5f
    Angle of the Wave. Pi is fully circular.

    waveDepth = 0.1f
    How wide the Wave is.

    waveColorCenter = "255 255 255 255"
    Color of the wave in the Center.

    waveColorEdge = "255 255 255 255"
    Color of the Wave at the Edge.

    waveTextureRepeats = true
    If true, repeats the texture for each Segment. If false, applies the texture across the whole Wave.

    waveSegments = 4
    Number of Segments in the Wave.
6 Comments
GrizzlyOne95 25 Dec, 2023 @ 1:27pm 
Oh ok I'm a dingus. Thank you!
GenBlackDragon  [author] 25 Dec, 2023 @ 1:22pm 
Ah. Since those are only part of [ExplosionClass], they are documented in the main ODF Documentation guide linked in the first paragraph of this guide.
GrizzlyOne95 19 Dec, 2023 @ 9:29am 
Would be nice to have all the possible values here and what precisely they do (like bias???)
GrizzlyOne95 19 Dec, 2023 @ 4:15am 
I'd be interested in what the difference is in explosion files, where they use particleTypes = # and particleClass2 = "xhealin.flame1"
particleCount2 = 2
particleVeloc2 = "0.0 1.0 0.0"
particleBias2 = "0.3 1.0 0.3"

The system seems to work a bit differently there and the format is also a little different. I checked but don't see info on the particleVeloc/Bias etc in this guide.
GenBlackDragon  [author] 17 Apr, 2020 @ 3:19pm 
these guides are the full documentation for the steam version.
scav395 17 Apr, 2020 @ 11:17am 
this is grate and all but I would like to see a modlog for the steam version.