Skip to content

ImageLabel

An ImageLabel emitter makes flat particles on the screen: coins that fly to a counter, streaks at the screen edge, a spark over the HUD. It is made by transforming an ImageLabel, and each particle is a duplicate of the label. A particle moves in screen pixels, and it can turn, grow and fade over its life.

What it makes possible:

  • Coins that fly into a HUD counter. Emit Into set to the counter’s Frame, a Speed graph that falls to 0, Reverse Motion on.
  • Speed streaks from the centre of the screen. A thin image, Position 0.5, 0, 0.5, 0, SpreadAngle 180, rising Speed and Size Scale X graphs, a Transparency graph of 1, 0, 1.
  • An animated hit spark from a sprite sheet. Source Spritesheet, Grid 4, 4, Play Mode OneShot, Lifetime 0.4.
  • 2D particles that sit on a 3D object. Emit Into set to a BillboardGui above the object.
Made fromAn ImageLabel
One particle isOne image on the screen
Emit count starts at1
ModesEmit and Animate
SectionsEmission, Appearance, Spawn, Motion, Flipbook, Events, Advanced
Not presentLink, Shape, Displacement, Turbulence, Orientation and Z-Offset.

The Emit count starts at 1. A new ImageLabel emitter makes one picture at the first press of the Emit button.

Transform hides the original label. A background that was fully opaque is made fully transparent. Any other background transparency is kept.

Transform keepsTransform does not keep
Image, Position, Size, AnchorPoint, ZIndex, ScaleType, ResampleModeImageColor3, ImageTransparency, Rotation, BackgroundColor3, and a crop rectangle

The rows for what is not kept start at the plugin’s own values. A tinted or half-transparent label emits white and opaque until those rows are set.

The RenderTemplate keeps the label’s UI modifiers: corners, gradients, strokes, padding and constraints. Other children are removed from it, a TextLabel inside the image for one. Emitters placed inside the label are kept.

Transform adds an empty ImageFlipbooks folder to the emitter.

Every particle takes these from the rows of the Properties panel: Image, ScaleType, ResampleMode, AnchorPoint, ZIndex, Position, Size, rotation, colours and transparencies. Changing them on the RenderTemplate has no effect.

What the plugin has no row for comes from the RenderTemplate: the slice centre, the tile size, the UI modifiers, and children added to it later.

The thing a particle is drawn in is its container. The first of these that applies decides it:

OrderCaseThe container
1Advanced ▸ Emit Into is setThat instance.
2The emitter sits in a BillboardGui or SurfaceGui inside another emitter’s RenderTemplateThat BillboardGui or SurfaceGui on the parent particle.
3The emitter sits inside another ImageLabel emitterThe parent image particle.
4None of the aboveA full-screen layer that the plugin manages.

Emit Into takes any instance. For the particles to be seen, pick one that shows UI: a ScreenGui, a Frame inside one, a BillboardGui or a SurfaceGui.

With Emit Into empty, particles are drawn on a full-screen layer the plugin manages. It sits behind your game’s UI. Set Emit Into to choose your own container.

The full-screen layer
In the editorIt lies over the Studio viewport.
In a gameIt belongs to one player. Only that player sees the particles.
Its sizeThe whole screen, the top bar area included.
Its depthBehind every ScreenGui that keeps its starting display order.
When the character respawnsIt stays.
When the plugin is switched offIt is removed.

To set the container from a script, set the Value of the emitter’s EmitParent. A container that exists only while the game runs must be set that way.

  • Position and Size are in Roblox UI units: a fraction of the container plus a count of pixels.
  • Motion is in pixels. A Speed of 1 is 100 pixels a second. An Acceleration of 1 adds 100 pixels a second, each second.
  • Angles are in degrees. 0 points right and 90 points up.
  • Screen Y grows downward. A positive Y in Acceleration pushes down.
RowKindStarts atUnitWhat it does
ModeListEmitEmit or Animate. See Emit against Animate.
LoopSwitchOffShown in Animate mode. Repeats the cycle until switched off. Switching it on starts a cycle at once.
EnabledSwitchOffShown in Emit mode. Makes particles at the Rate until switched off.
RateNumber10Particles per secondHow many particles are made each second while Enabled is on, or during a Duration.
LifetimeTwo numbers1SecondsHow long each particle lasts. Each picks a value between the two.
LingerNumber0SecondsAfter its life ends, the particle stays in its last frame for this long.
TimescaleGraph1The speed of the particle’s own clock.

The Rate row stays on show in Animate mode. Animate mode does not use it.

Emission and the HUD describes the shared rows in full.

RowKindStarts atUnitWhat it does
ImageTextThe label’s own ImageThe image shown. It is kept exactly as typed.
ImageColorColourWhiteThe tint of the image. Drawn as a gradient, it changes over the particle’s life.
TransparencyGraph00 to 1How far the image is seen through, over the particle’s life. 0 is opaque. 1 is invisible.
BG ColorColourWhiteThe colour of the background. Drawn as a gradient, it changes over the particle’s life.
BG TransparencyGraph10 to 1How far the background is seen through, over the particle’s life. At 1 there is no background.
ScaleTypeListThe label’s ownHow the image fills the particle’s rectangle: Stretch, Slice, Tile, Fit or Crop.
ResampleModeListThe label’s ownDefault scales the image smoothly. Pixelated keeps hard pixels, for pixel art.

Enter the Image as rbxassetid:// followed by the asset’s number. With the box empty nothing is shown, unless a Decals flipbook supplies the frames.

Slice and Tile use the slice and tile settings of the RenderTemplate. The plugin has no rows for them.

The box of a graph row takes one number, or two numbers as lo, hi. Two numbers give each particle one value between them for its whole life. The ⋯ button opens the graph editor. On a colour row it opens the colour editor.

RowKindStarts atUnitWhat it does
PositionFour numbers, sx, ox, sy, oyThe label’s own PositionFraction and pixelsWhere each particle starts.
SizeFour numbers, sx, ox, sy, oyThe label’s own SizeFraction and pixelsThe base size of each particle.
Size ScaleA graph for each axis, with X and Y pills1 on both axesMultiplierMultiplies the base Size over the particle’s life, on each axis.
AnchorPointTwo numbers, x, yThe label’s own AnchorPointFraction of the imageThe point of the image that sits on Position.
ZIndexNumberThe label’s own ZIndexThe draw order inside the container.
RotationTwo numbers, min, max0DegreesThe angle a particle starts at. Each picks a value between the two.

sx and sy are fractions of the container. ox and oy are pixels.

RowTypedResult
Position0.5, 0, 0.5, 0The centre of the container.
Position0, 50, 1, -5050 pixels from the left edge and 50 pixels up from the bottom edge.
Size0, 100, 0, 100100 by 100 pixels.
Size0.1, 0, 0.1, 0A tenth of the container on each axis.

In AnchorPoint, Acceleration and Grid, one number is taken for both values. Text with no number in it is not taken. The box flashes red and shows the old value again.

Click X, Y or both. Then enter one number, enter two numbers as lo, hi, or press ⋯ to draw a graph. The edit goes to every pill that is lit. With no pill lit nothing is written.

Size Scale multiplies both parts of Size, the fraction and the pixels. An X graph from 1 to 2 with Y at 1 stretches the image to double width.

A keypoint below 0 is kept as 0.

-30, 30 starts each particle tilted somewhere between -30 and 30 degrees. One number gives every particle the same angle.

RowKindStarts atUnitWhat it does
EmissionAngleNumber90DegreesThe direction of launch. 0 is right, 90 is up, 180 is left, 270 is down.
SpreadAngleNumber0DegreesThe widest turn away from EmissionAngle, to either side. Each particle picks its own.
Speed (x100 px/s)Graph0Hundreds of pixels a secondThe speed along the direction of launch, over the particle’s life.
AccelerationTwo numbers, x, y0, 0Hundreds of pixels a second, each secondA steady push.
DragNumber0Slows the particle as it ages.
Reverse MotionSwitchOffThe particle starts where it would have ended and travels back to Position.
Rot ModeListOverLifeHow Rot Speed is read: OverLife or Speed.
Rot SpeedGraph0Degrees, or degrees per secondTurns the image over its life.

With Speed at 0 and Acceleration at 0, 0 a particle does not move. A Speed keypoint below 0 is kept as 0.

Motion is added to the pixel part of Position. The fraction part does not change during a particle’s life.

Each particle launches at EmissionAngle plus a random amount between minus SpreadAngle and plus SpreadAngle.

SpreadAngleResult
0Every particle leaves in the same direction.
30A fan 60 degrees wide.
180Every direction.

0, 5 adds 500 pixels a second of downward speed, each second. 0, -5 pushes up.

Drag makes the speed die away with age. At 0 or less there is no drag.

DragShare of the Speed graph’s value left at an age of 1 second
1About 37 %
3About 5 %

The speed built up by Acceleration dies away at about the same rate.

The particle’s clock runs backward. Its size, colour, transparency and rotation graphs play from end to start, and so does its flipbook.

With a Speed graph that changes very fast, a particle can end a few pixels away from Position.

Rot ModeThe Rot Speed graph isExample
OverLifeThe angle at that point of the life, in degrees. It is added to the starting Rotation.A graph from 0 to 360 turns the image once over its life, whatever the Lifetime.
SpeedA rate of turning, in degrees per second.A level 360 turns the image once every second.

A value below 0 turns the image the other way.

RowKindStarts atUnitWhat it does
SourceListDecalsWhere the frames come from: Decals or Spritesheet.
Play ModeListLoopHow the frames are played: Loop, OneShot, PingPong or Random.
GridTwo numbers, cols, rows8, 1Columns, rowsHow the sheet is cut into cells. Shown only with Source Spritesheet.
FramerateTwo numbers, min, max10Frames per secondThe pace of Loop and Random. Each particle picks a value between the two. Hidden with Play Mode OneShot.
StartRandomSwitchOffEach particle starts on a random frame. Play Mode Loop only.
ReverseSwitchOffPlays the frames in the opposite order.
SourceThe frames areNotes
DecalsThe Decals in the emitter’s ImageFlipbooks folder. Name them 1, 2, 3 and so on.Each frame replaces the particle’s Image. With the folder empty there is no flipbook, and the Image row is shown.
SpritesheetThe cells of the one Image, cut by Grid.Cells are read left to right, then top to bottom.

With Source Decals, a crop rectangle on the label is cleared at every emit.

The list of Decals is read again at every emit. A Decal added to the folder shows from the next particle.

Decals and flipbooks describes flipbook folders in full.

Play ModeWhat plays
LoopThe frames advance at the Framerate and start again after the last.
OneShotThe frames play once, spread evenly over the Lifetime. The particle ends on the last frame.
PingPongThe frames play forward during the first half of the Lifetime and backward during the second half. This happens once. Framerate does not set the pace.
RandomA new random frame is shown at the Framerate. At Framerate 10 the frame changes ten times a second.

A Framerate of 0 or less stops the flipbook in every Play Mode.

The flipbook follows the particle’s own clock. Timescale and Reverse Motion change its play.

Grid takes whole numbers of 1 or more. The box shows the cleaned value after an edit.

The number of frames is always columns times rows. There is no row for using fewer. Empty cells at the end of a sheet are shown as frames.

To cut a sheet into cells, the plugin needs the pixel size of the sheet. The plugin works out the sheet’s pixel size for you while you edit. It does so when an ImageLabel emitter is selected, and when the Image box is left.

  • The size is kept on the emitter and goes with it into the game. A running game does not work it out.
  • The Image must be entered as rbxassetid:// followed by a number, and Studio must be online.
  • The size holds for the image it was measured for. If a script changes the Image in a running game, the whole sheet is shown.

A particle emitted while the size is not known shows the whole sheet for its whole life. The Output window reads, once for each image:

Part-Icles: Spritesheet flipbook - sheet dimensions unknown for <image>. Emit will render full sheet until dimensions resolve.

If Output says the sheet dimensions are unknown, reselect the emitter while online. Particles emitted after that are cut correctly.

The Events section holds On Emit, On Death and On Destruction. There is no On Hit. See Events.

RowKindStarts atWhat it does
Anim. StepsNumber100How many times the graphs are read over one Lifetime. A value of 0 or less is run as 100.
Emit IntoInstance, picked with *NoneThe container the particles are drawn in. See Where the particles are drawn.
Preload TextureSwitchOffKeeps the emitter’s images loaded, so that the first emit does not show a blank image.

Advanced describes these rows in full.

The first emit of an emitter waits until its images have loaded.

A particle’s position, rotation, size, colour and transparency change only at a step. The flipbook advances at every frame.

Take a Lifetime of 10 seconds and 100 steps. The particle moves 10 times a second, and the motion looks stepped. For smooth motion, Anim. Steps divided by Lifetime should be at least the frame rate. A 10 second particle at 60 frames a second needs 600 steps.

A particle of 1 second at 100 steps already changes at every frame.

EmitAnimate
What playsA new particle for each emit.One particle for the emitter.
Emit count and RateUsed.Not used. A count of 0 still plays.
Fired again while playingMore particles are added.The press is ignored until the cycle ends.
At the endThe particle is removed, after the Linger.With Loop off, the particle holds for the Linger. Then it is removed.
LoopNot shown.The same particle replays until Loop is switched off.

With Loop on, each pass starts again from Position. It picks a new direction and a new starting Rotation, and it reads the rows again. An edit made while the loop runs shows from the next pass.

In the editorIn a game, on a player’s machineIn a game, from a server script
Emit Into emptyDrawn over the Studio viewport.Drawn on that player’s screen, behind the game’s UI.Not visible.
Emit Into setDrawn in that container, if Studio shows it.Drawn in that container.Placed in that container. Who sees it depends on the container.
The size of a sheetWorked out while you edit.Read from what the editor kept.Read from what the editor kept.

Particles are never saved with the place.

ArrangementResult
An ImageLabel emitter inside another ImageLabel emitterIt fires once for each parent particle, with its own Emit count, Delay and Duration. Its particles are drawn inside the parent particle and travel with it.
An ImageLabel emitter in a BillboardGui or SurfaceGui, inside a Part emitter’s RenderTemplateEach 3D particle carries its own 2D particles.
An ImageLabel emitter as the target of an eventIt fires in place. An event cannot move it. An Emit count of 0 is treated as 1.

Inside a parent image particle, fractions in Position and Size are fractions of the parent image.

Only ImageLabel emitters placed inside an ImageLabel emitter are fired this way. A nested emitter with an Emit count of 0 and a Duration of 0 never fires. See Nesting.

In an event script, payload.SetColor sets the tint of the image and payload.SetTransparency sets its transparency. payload.SetSize takes a UDim2. See The event script and its payload.

ToolEffect on an ImageLabel emitter
SizeMultiplies the Speed graph, both Size Scale graphs, Acceleration, and both parts of Position and Size.
TimeMultiplies Rate, Drag, Framerate and the Speed and Rot Speed graphs. Divides Lifetime. Multiplies Acceleration by the factor squared.

Size and Time describes both tools.

  • An ImageLabel emitter emits images. A TextLabel inside the label is removed from the RenderTemplate at Transform.
  • No Link. A particle does not follow a 3D object, unless its container is a BillboardGui or SurfaceGui on that object.
  • Fired from a server script with Emit Into empty, the particles are not visible.
  • A flipbook from a sheet always uses every cell of the Grid.
  • Each particle counts as one particle toward the Particle Cap.