| Home Page | Recent Changes | Preferences

# XEmitter

UT2003 :: Actor >> xEmitter (Package: Engine)

To make them animate in realtime preview, edit a variable (then change it back)

Dma: I've found that the best way to test xEmitters is to bind a key to:

         SUMMON MyPack.MyXEmitter

and using the command:

         EDITDEFAULT class=MyXEmitter

to control the properties for all xEmitters that you will spawn. This allows you to test the results without exiting the game.

The Display → Skin property sets the texture of the emitter. (Do these only emit sprites? How lame!) Display

## Properties

### Main

### Force

bool bForceAffected
  This causes the particles to be affected by passing objects (including players). This only has an effect with highest physics details.

### Pclbeam - Particle Beam Properties

These are used if mSpawningType is PT_Beam.

float mBendStrength
float mWaveAmplitude
float mWaveFrequency
bool mWaveLockEnd
float mWaveShift

### Pclemitter - General Particle Emitter Properties

bool bSuspendWhenNotVisible
  Suspends emission of particles if the xEmitter is not visible. Useful for level optimization.
float mLifeRange[2]
  The particles will live for a random duration that falls between these two values.
float mDelayRange[2]
  Emission of particles will be delayed by a random duration that falls between these two values.
float mRegenRange[2]

The xEmitter regeneration cycles on and off for durations controlled by the following two variables:

float mRegenOnTime[2]
  Emission ON cycle lasts for a random duration that falls between these two values.
float mRegenOffTime[2]
  Emission OFF cycle lasts for a random duration that falls between these two values.
Name mChildName
  The Tag to give to child particles (or name? needs checking)
int mMaxParticles
  Sets a limit on the number of particles emitted (please clarify!).
bool mRegen
  Enables or disables regeneration. Note: changing this in UnrealEd somehow breaks the real time preview of the effect, and if you still want to see it in the editor you might have to re-create your emitter from scratch. IIRC Checker from DE pointed that out.
enum mParticleType
  Sets the type of particle to emit:
  PT_Sprite
  PT_Stream
  PT_Line
  PT_Disc
  PT_Mesh
  PT_Branch
  PT_Beam
float mRegenDist
bool mRegenPause
  Effectively pauses emitter regeneration. It remains ready for use but does not emit anything. Existing particles are unaffected.
Name mSourceActor
ExSpawningTypes mSpawningType
  Describes the manner in which particles are spawned.
StaticMeshActor SourceStaticMesh

### Pclmovement - Particle Movement Properties

float mSpinRange[2]
float mSpeedRange[2]
  The particles will have a random scalar speed somewhere between these two values. The direction is determined by the rotation of the xEmitter????
float mMassRange[2]
  The particles will have a random "mass" somewhere between these two values. This determines the effect that gravity has on the particles. In fact, negative values make the particles float upwards. This basically controls the gravity.
float mAirResistance
  Sets the effect that air resistance has on the particles.
float mAttraction
  Attractive force between particles
float mColElasticity
  Bounciness of particle collision. (0-1)
bool mCollision
  ? Enables collision for particles. ?
bool mColMakeSound
  ? Enables the CollisionSound notification event. ?
vector mDirDev
float mOwnerVelocityFactor
  The owner's velocity is added to the particle velocity after being scaled by mOwnerVelocityFactor.
vector mPosDev
bool mPosRelative
vector mSpawnVecA
vector mSpawnVecB

### Pclsoftbody

float springD
float springK
float springMaxCompress
float springMaxStretch

### Pclvisuals - Visual Particle Properties

color mColorRange[2]
StaticMesh mMeshNodes[8]
  if using meshes as particle nodes
float mSizeRange[2]
EAttenFunc mAttenFunc
  Attenuation function.
float mAttenKa
  Attenuation constant A.
float mAttenKb
  Attenuation constant B.
bool mAttenuate
  Enable particle attenuation.
bool mDistanceAtten
float mGrowthRate
Texture mLifeColorMap
int mNumTileColumns
int mNumTileRows
Texture mPosColorMapXY
Texture mPosColorMapXZ
bool mRandMeshes
bool mRandOrient
bool mRandTextures
  Choose a random texture for each instance of this emitter
bool mTileAnimation
  Animate the particle from the set of tiles throughout life
bool mUseMeshNodes

### Hidden - Native Stuff!

bool bCallPreSpawn
  Call the PreSpawned event.
bool blockOnNet
int Expire
int mAtLeastOneFrame
Box mBounds
int mbSpinningNodes
xEmitter mChildEmitter
vector mDir
int mHeadIndex
float mInvTileCols
vector mLastPos
vector mLastVector
int mNumActivePcl
int mNumSprings
int mNumUpdates
int mpAttenFunc
float mPauseTimer
pointer mpIterator
pointer mpParticles
  ptr to tarray
pointer mpSprings
  ptr to Spring class
float mRegenBias
float mRegenTimer
int mRenderableVerts
plane mSphere
float mT
  delta
float mTexU
float mTexV
float mTime
float mTotalTiles
float mWavePhaseA
float mWavePhaseB
int SystemHandle

## Enums

### ExSpawningTypes

ST_Sphere
ST_Line
ST_Disc
ST_Cylinder
ST_AimedSphere
ST_StaticMesh
ST_Explode
ST_ExplodeRing
ST_OwnerSkeleton
ST_Test

### EAttenFunc

These functions work using mAttenKa and mAttenKb.

ATF_LerpInOut
  Linearly interpolates in and out according to the following formula: (please verify, just a guess)

       x(t) = mAttenKa + t(mAttenKb - mAttenka)

ATF_ExpInOut
ATF_SmoothStep
ATF_Pulse
ATF_Random
ATF_None

### Functions

event PreSpawned()
  Called if bCallPreSpawn is true. Used for detail level stuff, among other things.
event CollisionSound()
  I suppose that this is called if mColMakeSound is true.

## Links

- http://www.unrealops.com/tutorials-xEmitters02.htm

## Misc.

### xEmitters and Glass

xEmitters seem to have problems with visibility through glass. It appears that the xEmitter will display through one translucent surface, but not through two.

In other words, a sheet would be fine (having only one face), but a box (having a bottom and a top face) would block its visiblity. (does this hold with other types of see-through surfaces like grates, or do these all count as the same sort of thing in UT2k3 anyway?)

GRAF1K: Assuming you're talking about masked sheets when you say grates, I Don't Know™. But, I'm 99.9% sure that masked sheets are treated as merely selectively translucent surfaces, making it the same.

Foxpaw: I tried this in an attempt to answer your question, and found that I couldn't hide the xemitter no matter what I did. I made an x-shaped map with an xemitter in each leg, then isolated one with a sheet, one with double sheets, and one with a box (not sealed) and one with a box. (sealed off to form it's own zone) All the "blocking" things had a smoke texture with an alpha channel on it so I could see through it. In my experiment, the xemitters were visible behind all of the blocking devices.

Having said that, I suspect that the issue of the visibility is actually due to the "line of sight" being blocked, and not due to the actual number of faces between the two objets. A sheet doesnt block anything, so you could see it through the sheet, but a box blocks your line of sight, thus blocking the xemitter. Or at least, that's what I would think.

RDGDanClark: I think it has something to do with a property setting somewhere in the xEmitter. I pulled up CTF-ComArray, and if you're familiar with that map, it uses xEmitters under the superstructure much the same way I tried to do with my map. On ComArray, you can see the xEmitter through everything; glass, grates, any texture with an alpha channel. I copied/pasted the xEmitter into my map and it worked fine through my glass floors. I'll start playing around with all the settings and post what I find.

AlphaOne: Does bForceAffected actually work? I tried it with the Emitter class (not XEmitter) and nothing happens.

AlexAC: on the subj of bForceAffected it does work a little on norm emitters, well they are affected by redemer shots, and xemitters react darn well to rockets, players and stuff i assume the setting is also bForceAffected.

Karp: Is there anybody able to complete this list?

Tarquin: Well... someone (not me, I'm too much of a grouch) could ask Rachel to come and help us on this page, maybe import some of what she wrote on UnrealOps. Or we could see what the UDN says, and write up the properties we've found there. Or we could each pick one property, play with it in UEd and try to work out what effect it has & write it up here. All three would be good

Category Class (UT2003)

The Unreal Engine Documentation Site

Wiki Community

Topic Categories

Image Uploads

Random Page

Recent Changes

Offline Wiki

Unreal Engine

Console Commands

Terminology

Mapping Topics

Mapping Lessons

UnrealEd Interface

Questions&Answers

Scripting Topics

Scripting Lessons

Making Mods

Class Tree

Questions&Answers

Modeling Topics

Questions&Answers

Log In