PARP

From Battlepedia
Jump to navigationJump to search
PARP
Particle Emitter Property
Type Object
Object ID 0x2E
Games used Battle for Bikini Bottom
The SpongeBob SquarePants Movie
Rise of the Underminer

A Particle Emitter Property asset contains settings for particles created by a Particle Emitter.

Format

A Particle Emitter Property asset describes how a particle changes over its lifetime, such as its color, size, and velocity. Each of these properties are defined by an xParInterp struct:

struct xParInterp
{
    float val[2];
    unsigned int interp;
    float freq;
    float oofreq;
};
  • val is an array of 2 floats. The 1st float is the start value of the interpolation, and the 2nd float is the end value.
  • interp is the interpolation mode, which determines how the current value of the interpolation is computed over time:
    • ConstA (0 or 0x48e48e7a) - Always the start value.
    • ConstB (1 or 0x48e48e7b) - Always the end value.
    • Random (2 or 0x0fe111bf) - A new random value between the start and end value, refreshed every freq seconds.
    • Linear (3 or 0xb7353b79) - A value between the start and end value, found by using linear interpolation.
    • Sine (4 or 0x0b326f01) - A value between the start and end value, found by using sine interpolation.
    • Cosine (5 or 0x498d7119) - A value between the start and end value, found by using cosine interpolation.
    • Time (unused, 6) - The current time of the interpolation.
    • Step (7 or 0x0b354bd4) - The start value until time*freq >= 0.5, then the end value.
  • freq is the frequency of the interpolation when using Random, Linear, or Step mode.
  • oofreq is the frequency of the interpolation when using Sine or Cosine mode.

The actual asset is defined by an xParEmitterPropsAsset struct, which inherits xBaseAsset (Object Asset):

struct xParEmitterPropsAsset : xBaseAsset
{
    unsigned int parSysID;

    // This union is so that you can either access each xParInterp individually,
    // or as an "array" of xParInterps
    // value is length 1 but you'd access it as if it were a length 14 array
    // (rate is index 0, life is index 1, etc... vel_angle is index 13)
    union
    {
        xParInterp rate;
        xParInterp value[1];
    };

    xParInterp life;
    xParInterp size_birth;
    xParInterp size_death;
    xParInterp color_birth[4];
    xParInterp color_death[4];
    xParInterp vel_scale;
    xParInterp vel_angle;
    xVec3 vel;
    unsigned int emit_limit;
    float emit_limit_reset_time;
};
  • parSysID is the ID of the Particle System that the Particle Emitter should use.
  • rate is how many times per second a particle is emitted.
  • life is the lifetime in seconds of a particle.
  • size_birth is the start size in units of a particle.
  • size_death is the end size in units of a particle.
  • color_birth is the start color of a particle (red, green, blue, and alpha).
  • color_death is the end color of a particle (red, green, blue, and alpha).
  • vel_scale is unknown/unused (all set to 0).
  • vel_angle is unknown/unused (all set to 0).
  • vel is unknown/unused (all set to 0).
  • emit_limit is always -1.
  • emit_limit_reset_time is unknown (usually set to 0 but sometimes not).

At the end of the xParEmitterPropsAsset is a list of Links.

Events

Particle Emitter Property has no events.