{
  "name": "Fire",
  "dimension": "text",
  "slot": "action_bar",
  "width": 256,
  "height": 128,
  "textBaseline": 128,
  "placement": {
    "x": 0,
    "y": 0
  },
  "shapes": [],
  "texts": [],
  "heads": [],
  "images": [],
  "bars": [],
  "triggers": [],
  "effect": {
    "glsl": "vec4 effect(Fx f) {\n    vec2 q = f.q;\n    float heat = 0.0;\n    for (int k = 1; k <= 7; k++) {\n        float fk = float(k);\n        float wob = floor((vnoise(vec2((f.o.x + q.x) * 0.5, (q.y + fk) * 0.4 + f.t * 6.0)) - 0.5) * 2.6 + 0.5);\n        heat = max(heat, G(vec2(q.x + wob, q.y + fk)) * (1.0 - fk / 8.0));\n    }\n    heat *= 0.45 + 0.75 * vnoise(vec2(floor(f.g.x) * 0.55, floor(f.g.y) * 0.5 + f.t * 8.0));\n    float lv = floor(heat * 5.0);\n    vec4 fire = lv >= 4.0 ? vec4(1.0, 0.97, 0.7, 1.0)\n              : lv >= 3.0 ? vec4(1.0, 0.82, 0.24, 1.0)\n              : lv >= 2.0 ? vec4(1.0, 0.52, 0.12, 1.0)\n              : lv >= 1.0 ? vec4(0.82, 0.2, 0.08, 0.95)\n              : heat > 0.08 ? vec4(0.25, 0.1, 0.08, 0.55) : vec4(0.0);\n    float a = G(f.p);\n    float fl = vnoise(vec2(floor(f.g.x) * 0.7, floor(f.g.y) * 0.7 + f.t * 5.0));\n    vec3 body = mix(vec3(1.0, 0.98, 0.72), vec3(1.0, 0.62, 0.16), f.q.y / f.size.y);\n    body = mix(body, vec3(1.0), step(0.72, fl) * 0.6);\n    // A dark rim round the letter is what keeps it readable through its own flames.\n    vec4 rim = vec4(0.24, 0.04, 0.0, N8(f.p) * (1.0 - a));\n    return over(vec4(body, a), over(rim, fire));\n}\n",
    "pad": [
      1,
      8,
      2,
      2
    ],
    "prompt": "",
    "preset": "blaze",
    "sample": "Hot deal!"
  }
}