Pen Settings

HTML

CSS

CSS Base

Vendor Prefixing

Add External Stylesheets/Pens

Any URLs added here will be added as <link>s in order, and before the CSS in the editor. You can use the CSS from another Pen by using its URL and the proper URL extension.

+ add another resource

JavaScript

Babel includes JSX processing.

Add External Scripts/Pens

Any URL's added here will be added as <script>s in order, and run before the JavaScript in the editor. You can use the URL of any other Pen and it will include the JavaScript from that Pen.

+ add another resource

Packages

Add Packages

Search for and use JavaScript packages from npm here. By selecting a package, an import statement will be added to the top of the JavaScript editor for this package.

Behavior

Auto Save

If active, Pens will autosave every 30 seconds after being saved once.

Auto-Updating Preview

If enabled, the preview panel updates automatically as you code. If disabled, use the "Run" button to update.

Format on Save

If enabled, your code will be formatted when you actively save your Pen. Note: your code becomes un-folded during formatting.

Editor Settings

Code Indentation

Want to change your Syntax Highlighting theme, Fonts and more?

Visit your global Editor Settings.

HTML

              
                
              
            
!

CSS

              
                body {
  background: #222;
  font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
  margin: 0;
  padding: 0;
  display: block;
  text-align: center;
}

              
            
!

JS

              
                (function () {
  // Global variables
  let scr,
    pallette = [],
    flame = [],
    id,
    pd;

  // Initializes the screen, color palette, flame array, and the image buffer
  function setup() {
    scr = dcl.setupScreen(640, 480); // Set up a screen with 640x480 pixels
    scr.setBgColor("black"); // Set background color to black
    document.body.style.backgroundColor = "black"; // Set page background color

    generatePalette(); // Generates a color palette for the flame
    initializeFlameArray(); // Set up the flame array
    id = new ImageData(scr.width, scr.height); // Initialize screen buffer
  }

  // Generates a 256-color palette that transitions from red to yellow using HSL
  function generatePalette() {
    for (let i = 0; i < 255; i++) {
      let lightness = i / 255;
      let hue = i.map(0, 255, 0, 85); // Map color from red (0 degrees) to yellow (85 degrees) in HSL
      pallette.push(HSLtoRGB(hue, 1, lightness)); // Convert HSL to RGB and add to palette
    }
  }

  // Initializes the flame array where the last row is randomized, and all other rows are set to 0
  function initializeFlameArray() {
    for (let y = 0; y < scr.height; y++) {
      let row = [];
      for (let x = 0; x < scr.width; x++) {
        row.push(y === scr.height - 1 ? dcl.randomi(0, 255) : 0); // Randomize the last row
      }
      flame.push(row);
    }
  }

  // Main draw loop: calculates flame behavior and renders to the screen
  function draw(t) {
    randomizeLastRow(); // Randomize the bottom row for dynamic flame effect
    propagateFlame(); // Compute flame propagation using neighboring pixels
    renderFlame(); // Render flame pixels to the screen
    scr.ctx.putImageData(id, 0, 0); // Draw the image data onto the screen
    requestAnimationFrame(draw); // Continuously redraw the scene
  }

  // Randomizes the values in the last row to simulate the flame source
  function randomizeLastRow() {
    for (let x = 0; x < flame[flame.length - 1].length; x++) {
      flame[flame.length - 1][x] = dcl.randomi(0, 255); // Random values for flame source
    }
  }

  // Propagates the flame upward based on neighboring pixel values
  function propagateFlame() {
    for (let y = 0; y < flame.length - 1; y++) {
      for (let x = 0; x < flame[y].length; x++) {
        let y1 = (y + 1) % flame.length;
        let y2 = (y + 2) % flame.length;
        let x1 = (x - 1 + flame[y].length) % flame[y].length;
        let x2 = x % flame[y].length;
        let x3 = (x + 1 + flame[y].length) % flame[y].length;

        // Sum the surrounding pixels and average them for flame propagation
        let sum =
          (flame[y1][x1] + flame[y1][x2] + flame[y1][x3] + flame[y2][x2]) /
          4.02;
        flame[y][x] = sum; // Adjust flame height
      }
    }
  }

  // Renders the flame onto the image data buffer
  function renderFlame() {
    for (let y = 0; y < scr.height; y++) {
      for (let x = 0; x < scr.width; x++) {
        let fy = y % flame.length;
        let fx = x % flame[fy].length;
        let i = Math.floor(flame[fy][fx]);
        let color = pallette[i]; // Fetch the color from the palette

        if (!color) continue; // Skip if no color found

        // Compute the pixel index in the image data buffer (4 values per pixel: r, g, b, a)
        let idx = 4 * (y * scr.width + x);
        id.data[idx] = color.r; // Set red value
        id.data[idx + 1] = color.g; // Set green value
        id.data[idx + 2] = color.b; // Set blue value
        id.data[idx + 3] = 255; // Set alpha value to fully opaque

        // Check for the logo mask and adjust the flame accordingly
        let pr = pd.data[idx];
        let pa = pd.data[idx + 3];
        if (pr < 64 && pa > 0) {
          flame[fy][fx] = dcl.randomi(0, 255); // Intensify flame in the logo region
        }
        if (pr === 255 && pa === 255) {
          id.data[idx] = id.data[idx + 1] = id.data[idx + 2] = 0; // Render logo as black
          id.data[idx + 3] = 255; // Full opacity
        }
      }
    }
  }

  // Converts HSL color format to RGB (helper function for palette generation)
  function HSLtoRGB(h, s, l) {
    let r = 0,
      g = 0,
      b = 0;
    if (s === 0) {
      r = g = b = l; // Achromatic case
    } else {
      let hp = h / 60;
      let c = (1 - Math.abs(2 * l - 1)) * s;
      let x = c * (1 - Math.abs((hp % 2) - 1));

      if (hp >= 0 && hp <= 1) {
        r = c;
        g = x;
      } else if (hp > 1 && hp <= 2) {
        r = x;
        g = c;
      } else if (hp > 2 && hp <= 3) {
        g = c;
        b = x;
      } else if (hp > 3 && hp <= 4) {
        g = x;
        b = c;
      } else if (hp > 4 && hp <= 5) {
        r = x;
        b = c;
      } else if (hp > 5 && hp <= 6) {
        r = c;
        b = x;
      }

      let m = l - c / 2;
      r += m;
      g += m;
      b += m;
    }
    return dcl.color(
      Math.round(r * 255),
      Math.round(g * 255),
      Math.round(b * 255)
    ); // Convert to RGB
  }

  // Load the fire logo mask (logo image encoded in base64)
  let canvas = document.createElement("canvas");
  let ctx = canvas.getContext("2d");
  let img = new Image();
  img.src =
    "data:image/png;base64,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";
  img.addEventListener("load", function () {
    canvas.width = img.width;
    canvas.height = img.height;
    ctx.drawImage(img, 0, 0);
    pd = ctx.getImageData(0, 0, img.width, img.height);
    setup();
    draw();
  });
})();

              
            
!
999px

Console