Flames.st

Description

Archived legacy rasterized real-time flame graphic generation, written in 2000 using Smalltalk-80 on the Squeak platform.

Details

Source
GitHub
Dialect
squeak (25% confidence)
License
MIT
Created
Sept. 22, 2026
Updated
Oct. 5, 2026

README excerpt

[![Next: FireDemo](https://img.shields.io/badge/NEXT_→-gray.svg?style=for-the-badge)](https://github.com/redgreenshift/FireDemo/blob/main/README.md)

# Flames.st

[![Platform: Squeak](https://img.shields.io/badge/Squeak-F8F8F8?logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iODAwIiB3aWR0aD0iMTIwMCIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSItMjU2NS41OTQ3NSAtMjkxNy4yMjYyNSAyMjIzNS4xNTQ1IDE3NTAzLjM1NzUiPjxwYXRoIGQ9Ik0xMTUwMS4yMTIgNjQ1Ni42MmMuMjg0IDY2My4yNjgtNDMxLjMzIDEyMDEuMTQtOTYzLjg1NCAxMjAxLjE0LTUzMi41MjIgMC05NjQuMTM3LTUzNy44NzItOTYzLjg1My0xMjAxLjE0LS4yODQtNjYzLjI2NiA0MzEuMzMxLTEyMDEuMTM4IDk2My44NTMtMTIwMS4xMzggNTMyLjUyNCAwIDk2NC4xMzggNTM3Ljg3MiA5NjMuODU0IDEyMDEuMTM5eiIvPjxwYXRoIGQ9Ik0xMTIzNC42MjUgNjMzNy4zODdjMCAzMTkuMjQyLTE1Mi44NDEgNTc4LjA0LTM0MS4zOCA1NzguMDQtMTg4LjUzNSAwLTM0MS4zNzYtMjU4Ljc5OC0zNDEuMzc2LTU3OC4wNCAwLTMxOS4yNDEgMTUyLjg0MS01NzguMDQgMzQxLjM3Ni01NzguMDQgMTg4LjUzOSAwIDM0MS4zOCAyNTguNzk5IDM0MS4zOCA1NzguMDR6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTc1NjUuMTI5IDYyNzguOTA0YzAgNjYzLjAxOC00MzEuNTMyIDEyMDAuNS05NjMuODUzIDEyMDAuNS01MzIuMzIzIDAtOTYzLjg1NS01MzcuNDgyLTk2My44NTUtMTIwMC41IDAtNjYzLjAyIDQzMS41MzItMTIwMC41MDIgOTYzLjg1NS0xMjAwLjUwMiA1MzIuMzIgMCA5NjMuODUzIDUzNy40ODMgOTYzLjg1MyAxMjAwLjUwMnoiLz48cGF0aCBkPSJNNzI5OC41NDIgNjE2MC4xMjNjMCAzMTguOTk2LTE1Mi44NCA1NzcuNTktMzQxLjM3OSA1NzcuNTktMTg4LjUzNiAwLTM0MS4zNzctMjU4LjU5NC0zNDEuMzc3LTU3Ny41OSAwLTMxOC45OTUgMTUyLjg0LTU3Ny41OSAzNDEuMzc3LTU3Ny41OSAxODguNTM5IDAgMzQxLjM4IDI1OC41OTUgMzQxLjM4IDU3Ny41OXoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNNTg5MC40MDQgMzczMS4wMTJDMjkwMi4zNjQtMTk1OC43OCA2MTIuNTEtODMyLjU3MSAyODA3LjU0NiA2NTc1LjQwMm04MzA2LjQ4OS0yOTA0LjIzNGMyNzcwLjc2NC01MzU2LjY0IDUzNzYuNzI1LTQ5ODYuMTA4IDMwODIuODU4IDI4NDUuMjk2IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMTUwIi8+PHBhdGggZD0iTTk4MTYuNTE1IDkzNTUuNDEzYzAgNDk5LjI3Mi01MzcuNDg0IDkwNC4wMS0xMjAwLjUwMiA5MDQuMDEtNjYzLjAxOCAwLTEyMDAuNTAxLTQwNC43MzgtMTIwMC41MDEtOTA0LjAxIDAtNDk5LjI3IDUzNy40ODMtOTA0LjAxIDEyMDAuNS05MDQuMDEgNjYzLjAyIDAgMTIwMC41MDMgNDA0Ljc0IDEyMDAuNTAzIDkwNC4wMXoiLz48cGF0aCBkPSJNNjg5Ny43NzQgODgyNi43OTRDNDg3OS44IDgyOTQuOTY1IDI4MjMuNTg3IDgyODAuNzk0IDIzIDkxODMuMTM3bTY3NTYuOSAyMzQuODQxYy0yNDg1LjQ2NC0xNTYuNjkzLTQyMDguNTk2LTE5OS4zMjUtNjI4Mi42ODMgMTQyMy41NTRtNjI4Mi42ODMtNDczLjMwOWMtMjE0My4wMTctMjg4LjE3OC0yOTY1LjM0OC05OS44NDQtNDI2Ny45NDUgMTA2OC4xMm03Njk0LjQ1MS0yNDMwLjkyNGMyODk2LjExMi03NDkuMzc0IDUwMjkuNTkyLTIwNi43MzMgNjg3NS42NzkgMzU2LjM0Mm0tNjc1Ni44OTkgMjM1Ljc0OGMyNjU2LjA1LTE5OS4zMjUgNDIzMy4wNTgtMTI4LjQ4IDYyODIuNjgzIDE0MjIuNjQ4bS02MjgyLjY4My00NzUuMTIzYzIwMTkuMTA0LTI1My41NjQgMjg4NS4wNjQtMTc2LjIxMiA0MjY3Ljk0NSAxMDY4LjExOSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjE1MCIvPjwvc3ZnPg==)](https://squeak.org/)
[![Language: Smalltalk-80](https://img.shields.io/badge/Smalltalk--80-B8DAFD)](https://en.wikipedia.org/wiki/Smalltalk)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow)](LICENSE)

An archived Squeak/Smalltalk change demonstrating the real-time generation of flame graphics.

`Flames.st` is a self-contained collection of Smalltalk code written in Smalltalk-80 for the [Squeak](https://squeak.org/) platform. Squeak is a _dialect_ of the [Smalltalk-80 programming language](https://wiki.squeak.org/squeak/373).

## Algorithm

The flame effect is based on a simple cellular-automaton-style algorithm:

1. Seed the bottom edge of a grid with random "hot coal" values.
1. For each pixel, average its value with the three pixels directly below it:
    ```text
    . . .
    . 5 .
    1 2 3
    ```
1. Apply a cooling factor to the averaged value.
1. Repeat the process continuously to produce the rising flame effect.

Despite its simplicity, this process creates a convincing real-time flame animation.


## Project History

In 2000, I wrote this prototype after someone said, "Smalltalk is too slow for real-time fire generation," and I just had to prove them wrong.

I liked the result, even with plain constant cooling. The palette isn't great, but it demonstrates that real-time fire is possible in Smalltalk.

Rendered in blue, it really reminds me of the flame from a propane grill that I watched as a child while my dad cooked burgers.

It is preserved as an example of exploratory programming written in Smalltalk-80 and is **not under active development**. It may require modifications to work with current Squeak versions.

## Related Projects

### Successor Projects

[`FireDemo`](https://github.com/redgreenshift/firedemo) is the direct successor to `Flames.st`.
It expanded this prototype into a broader real-time lighting-effects playground
including fire, lightning, and plasma.


## Credits

The basic high-level flame-generation algorithm was inspired by code attributed to Evan Jones.

This implementation is not a port of the original code. None of that code is included here, and I have not been able to locate it. The pixel neighborhood, cooling behavior, and color palette were developed independently through experimentation.

A note identifying Evan Jones as the source of the algorithmic inspiration was preserved in the `Flames.st` Smalltalk prototype, so credit is given for the basic algorithmic concept.
← Back to results