Skip to content

Trail Effects

Trail effects create visual streaks behind moving entities like weapons, projectiles, and NPCs. They interpolate color, width, and texture between start and end states over a defined lifespan.

  • DirectoryAssets/Server/Entity/Trails/
    • Small_Default.json
    • Medium_Default.json
    • Large_Default.json
    • Huge_Default.json
    • Small_Charged.json
    • Medium_Charged.json
    • Large_Charged.json
    • Small_Flame.json
    • Medium_Flame.json
    • Large_Flame.json
    • Critical.json
    • Acid.json
    • Void.json
    • Void_Green.json
    • Memory_Trail.json
    • Daggers_Dash.json
    • Sword_Distortion.json
    • DirectoryWeapons/
      • DirectoryArrow/
        • Arrow.json
        • Arrow_Ricochet.json
        • Arrow_Vamp.json
      • DirectorySword/
        • Medium_Sword_Basic.json
        • Medium_Sword_Strong.json
      • DirectoryMace/
        • Weapon_Mace_Prisma.json
      • Dagger_Basic.json
      • DirectoryBomb/
      • DirectoryKunai/
      • DirectoryRubble/
    • DirectoryNPCs/
      • DirectoryBear/
        • Bear_Claw.json
      • DirectoryFen_Stalker/
        • Fen_Stalker_Claw.json
      • DirectoryCrawler_Void/
        • Crawler_Void_Claw.json
    • DirectoryFire_Trap/
    • DirectoryTests/
FieldTypeRequiredDescription
TexturePathstringYesPath to trail texture (relative to Common/)
LifeSpanintYesTrail segment duration in ticks
RollfloatNoRotation around trail axis (degrees)
StartobjectYesStart state (color, width)
EndobjectYesEnd state (color, width)
LightInfluencefloatNoHow much lighting affects the trail (0-1)
SmoothboolNoEnable smoothing between segments
RenderModestringNoBlending mode
AnimationobjectNoAnimated texture settings
FieldTypeDescription
ColorstringColor in hex (#RRGGBBAA) or rgba format
WidthfloatTrail width at this point
FieldTypeDescription
FrameSizeobjectFrame dimensions {X, Y}
FrameLifeSpanintTicks per frame
FrameRangeobjectFrame index range {Min, Max}
ModeDescription
BlendLinearStandard alpha blending
BlendAddAdditive blending (glowing effect)

Trails support multiple color formats:

// Hex with alpha
"Color": "#ffffff65"
"Color": "#FFFFFF00"
// RGBA function
"Color": "rgba(#ffffff, 1)"
"Color": "rgba(#ff2c00, 0.4)"
// Hex without alpha (full opacity)
"Color": "#483d6aff"
Medium_Default.json
{
"TexturePath": "Trails/White.png",
"LifeSpan": 8,
"Roll": 0,
"Start": {
"Color": "#ffffff65",
"Width": 0.4
},
"End": {
"Color": "#FFFFFF00",
"Width": 0
},
"LightInfluence": 0.524,
"Smooth": true,
"RenderMode": "BlendLinear"
}

This creates a white fade trail that tapers from 0.4 width to 0 over 8 ticks.

Large_Flame.json
{
"TexturePath": "Trails/Fire.png",
"LifeSpan": 5,
"Roll": 0,
"Start": {
"Color": "rgba(#ffcf00, 0.9)",
"Width": 0.6
},
"End": {
"Color": "rgba(#ff2c00, 0.4)",
"Width": 0
},
"LightInfluence": 0,
"Smooth": true,
"RenderMode": "BlendAdd"
}

Key features:

  • Color gradient: Yellow to red (fire effect)
  • Additive blending: Creates glowing appearance
  • No light influence: Consistent brightness
Arrow.json
{
"TexturePath": "Trails/Arrow.png",
"LifeSpan": 20,
"Roll": 90,
"LightInfluence": 0,
"Start": {
"Color": "#ffffff40",
"Width": 0.2
},
"End": {
"Color": "#ffffff00",
"Width": 0.1
},
"RenderMode": "BlendAdd",
"Smooth": true
}

Key features:

  • Long lifespan: 20 ticks for projectile motion
  • 90° roll: Rotated to align with flight
  • Thin width: Subtle arrow trail
Weapon_Sword_Frost.json
{
"TexturePath": "Trails/Ice.png",
"LifeSpan": 4,
"Roll": 90.0,
"Start": {
"Width": 0.65
},
"End": {
"Width": 0.4,
"Color": "#483d6aff"
},
"LightInfluence": 0.1,
"Smooth": true,
"RenderMode": "BlendLinear"
}

Note: Start color is inherited from texture when not specified.

Void.json
{
"TexturePath": "Trails/Void.png",
"LifeSpan": 6,
"Roll": 90,
"Start": {
"Color": "rgba(#ffffff, 0.9)",
"Width": 0.4
},
"End": {
"Color": "rgba(#2f0f53, 0.733)",
"Width": 0.1
},
"LightInfluence": 0.3,
"Smooth": true,
"RenderMode": "BlendLinear"
}
Critical.json
{
"TexturePath": "Trails/Critical.png",
"LifeSpan": 6,
"Roll": 0,
"Start": {
"Color": "rgba(#ffffff, 1)",
"Width": 0.45
},
"End": {
"Color": "rgba(#ffffff, 0.404)",
"Width": 0
},
"LightInfluence": 0,
"Smooth": true,
"RenderMode": "BlendLinear"
}
Daggers_Dash.json
{
"TexturePath": "Trails/Daggers_Dash.png",
"LifeSpan": 8,
"Roll": 90,
"Start": {
"Color": "rgba(#ffffff, 1)",
"Width": 0.5
},
"End": {
"Color": "rgba(#ffffff, 1)",
"Width": 0.1
},
"LightInfluence": 0.0,
"Smooth": true,
"RenderMode": "BlendLinear",
"Animation": {
"FrameSize": {
"X": 256,
"Y": 96
},
"FrameLifeSpan": 2,
"FrameRange": {
"Max": 3,
"Min": 0
}
}
}

Key features:

  • Animated texture: 4 frames (0-3)
  • Frame size: 256x96 pixels per frame
  • Frame lifespan: 2 ticks per frame
Bear_Claw.json
{
"TexturePath": "Trails/Claws/Claw_4.png",
"LifeSpan": 7,
"Roll": 0,
"Start": {
"Color": "rgba(#ff7f31, 0.8)",
"Width": 0.2
},
"End": {
"Color": "rgba(#ff0000, 0.526)",
"Width": 0
},
"LightInfluence": 0.5,
"Smooth": true,
"RenderMode": "BlendAdd"
}
Memory_Trail.json
{
"TexturePath": "Trails/Ice.png",
"LifeSpan": 10,
"Roll": 90,
"Start": {
"Color": "#00e9ffdd",
"Width": 10
},
"End": {
"Color": "#000cffb8",
"Width": 0
},
"LightInfluence": 0.516,
"Smooth": false,
"RenderMode": "BlendLinear"
}

Note: Very wide trail (10 units) with smoothing disabled.

SizeDefaultChargedFlame
SmallSmall_DefaultSmall_ChargedSmall_Flame
MediumMedium_DefaultMedium_ChargedMedium_Flame
LargeLarge_DefaultLarge_ChargedLarge_Flame
HugeHuge_Default
WeaponTrail
SwordsWeapons/Sword/Medium_Sword_Basic, Medium_Sword_Strong
DaggersWeapons/Dagger_Basic, Daggers_Dash, Daggers_Signature
MacesMedium_Mace_Normal, Medium_Mace_Charged, Mace_Signature
ArrowsWeapons/Arrow/Arrow, Arrow_Ricochet, Arrow_Vamp
BombsWeapons/Bomb/Bomb
KunaiWeapons/Kunai/Kunai
ElementTrails
FireSmall_Flame, Medium_Flame, Large_Flame
Ice/FrostWeapon_Sword_Frost, Memory_Trail
VoidVoid, Void_Green
AcidAcid
NPCTrail
BearNPCs/Bear/Bear_Claw
Fen StalkerNPCs/Fen_Stalker/Fen_Stalker_Claw
Void CrawlerNPCs/Crawler_Void/Crawler_Void_Claw
MyPlugin_Trail_Basic.json
{
"TexturePath": "MyPlugin/Trails/Custom.png",
"LifeSpan": 6,
"Roll": 0,
"Start": {
"Color": "#00ff00cc",
"Width": 0.35
},
"End": {
"Color": "#00ff0000",
"Width": 0
},
"LightInfluence": 0.5,
"Smooth": true,
"RenderMode": "BlendLinear"
}
MyPlugin_Trail_Glow.json
{
"TexturePath": "MyPlugin/Trails/Glow.png",
"LifeSpan": 10,
"Roll": 0,
"Start": {
"Color": "rgba(#ffaa00, 1)",
"Width": 0.5
},
"End": {
"Color": "rgba(#ff0000, 0.5)",
"Width": 0.1
},
"LightInfluence": 0,
"Smooth": true,
"RenderMode": "BlendAdd"
}
MyPlugin_Trail_Animated.json
{
"TexturePath": "MyPlugin/Trails/Animated.png",
"LifeSpan": 8,
"Roll": 90,
"Start": {
"Color": "#ffffffff",
"Width": 0.4
},
"End": {
"Color": "#ffffff00",
"Width": 0.2
},
"Smooth": true,
"RenderMode": "BlendLinear",
"Animation": {
"FrameSize": { "X": 128, "Y": 64 },
"FrameLifeSpan": 3,
"FrameRange": { "Min": 0, "Max": 5 }
}
}
  • Format: PNG with alpha channel
  • Location: Assets/Common/Trails/
  • Animated textures: Horizontal sprite sheet
  • Recommended width: Power of 2 (64, 128, 256, etc.)
  1. Match lifespan to animation speed - Faster attacks need shorter lifespans
  2. Use additive blending for glow - Creates light-emitting effect
  3. Keep width reasonable - 0.2-0.6 for weapons, larger for effects
  4. Taper width to zero - Natural fade at end
  5. Use light influence sparingly - 0 for consistent brightness, >0 for world-lit trails
  6. Roll for projectiles - 90° aligns trail with flight path
  7. Smooth for organic motion - Disable for sharp/mechanical trails