A downloadable asset pack

Buy Now$1.99 USD or more

A smithy that visibly works, for side-view pixel-art games. Hearthforge is four animated workstations (a charcoal furnace, a great bellows, a cam-driven trip hammer with its anvil, and a quench trough) plus impact embers and quench steam that fire on named animation events. Everything is drawn at 32 pixels per unit and delivered as RGBA PNG frames and strips, with a JSON manifest of frame timings, pivots, anchors and events.

The whole forge at 2x running one cycle: the bellows pumps three times and the furnace flares, the billet is carried to the anvil, the trip hammer strikes it three times with sparks while the furnace takes a charcoal feed, then the billet is dipped into the trough with a plume of steam and returned to the fire.

The included workflow demo, one 10.68 s loop at 2x. The wall is the pack's illustrative demo backdrop, not a tileset. The billet and tongs are moved by timed commands that stand in for your character or script.

Try it first: the free sampler contains the complete furnace (all 6 states) and the impact ember burst, as the same PNG files and manifest data as the full pack.

Work log: one heat, timed to the demo

Each entry is a moment from that same 10.68 s timeline, with the animation event you would hook in your own game.

0.30 s · Pump: why the bellows moves

Bellows and furnace at 3x: the chain grip is pulled down, the rocker lifts the weighted top board and the leather folds fan open; after a short hang the board falls, and the furnace flames flare and lean away from the nozzle before settling back to their normal burn.

One real-speed pump (980 ms) driving the furnace's blast state (560 ms), 3x, looping every 2.02 s.

Pulling the chain grip tips the rocker, which lifts the weighted top board: the leather folds open and the intake flap draws air. After a 120 ms hang at the top, the board falls and air leaves the nozzle on frame 5, which fires blast. The manifest link turns that event into the furnace's blast state, in which the flames lean away from the tuyere. The pump's last frame is its rest pose, so pumps chain without a jump.

4.62 s · Strike: contact on the 3 px billet

Close-up at 4x of the trip-hammer head over the anvil: the head rises, hangs, drops onto the glowing billet and holds there while two fans of sparks leave both edges of the face and arc down, then it rebounds, taps once and settles.

One 1100 ms strike plus a 200 ms rest, at real speed and 4x. The sparks are the delivered ember burst, spawned on the hammer's impact event.

The helve rocks on a fixed trunnion, with the head on one side and a short iron-shod tail on the other. As the cam shaft turns one tappet pitch at a constant speed, a tappet presses the tail down onto the spring leaf, so the head rises over four frames. It hangs for 120 ms at release, where the tappet slips off the tail end, and drops in two 40 ms frames while the tail swings back up. On frame 8, 620 ms into the strike, the face lands on the billet. That frame fires impact and holds for 120 ms with a 1 px helve flex. A rebound, a small tap and a settle follow. The contact is authored for the included 20×3 px billet placed on the billet_pivot anchor, and the ember burst goes on the contact anchor, so the sparks start exactly where the iron is struck, every time.

Eight key poses of the strike at 3x in two columns, each labelled: frame 1 cam engages, frame 4 lift, frame 5 release, frame 7 drop, frame 8 contact with a flash at the face, frame 9 rebound with sparks, frame 11 tap, frame 13 settled.

Key poses, with times from the start of the strike: F01 cam engages (80 ms, event cam_engage) · F04 lift (320 ms) · F05 release, held 120 ms (420 ms, release) · F07 drop (580 ms) · F08 contact, held 120 ms (620 ms, impact) · F09 rebound (740 ms) · F11 tap (860 ms, tap) · F13 settled, identical to the rest pose (1000 ms, settled).

8.40 s · Quench: water, steam and a cold billet

The oak quench trough at 4x: the red billet arrives in the tongs and is plunged behind the front planks, the water splashes and boils, a cloud of steam rises, spreads and breaks up, the cold billet is lifted out dripping and carried away, and the water settles to its idle ripple.

A 3 s excerpt of the same demo at 4x, from the billet's arrival to calm water.

The trough's quench state (1320 ms) plays a crown splash, a boil with spitting drops, and rings that run to both ends. Its plunge event spawns the quench steam on the trough's dunk anchor: overlapping puffs rise, spread and break up over 1400 ms, then the effect hides on its empty last frame. At lift (740 ms) drips fall as the work comes out. The billet's cooling is a swap between its three delivered heat poses (hot, red, cold), not a gradual colour animation. Dunked work is drawn behind the trough, whose opaque water and planks hide it.

All day · The furnace

The furnace has six states: cold (held), ignite (640 ms), burning (an 800 ms loop of five flame tongues, glowing coal seams, rising embers and a stack wisp), feed (1000 ms: lever pull, four charcoal lumps down the chute, smother, flare, lever return), blast (560 ms) and bank (1160 ms, ending on the cold pose). In the demo it takes a feed at 4.88 s while the hammer works. All six states are in the free sampler.

Set it up

  1. Godot 4: open the extracted hearthforge folder as a project and run it. The main scene is the workflow demo; minimal_strike.tscn is a short example with a furnace, a hammer and embers.
  2. Unity: copy the folder into Assets/. The included importer sets every PNG to Sprite, 32 PPU, Point filter, no mipmaps and no compression, with the manifest pivots. Then run Tools → Hearthforge → Build Library And Demo Scenes and press Play.
  3. Other engines (untested): use the frame PNGs, or the strips where frame i sits at x = i × canvas width with no margin or spacing. Take durations, pivots and anchors from manifest.json. A null duration is a held pose, and one-shots continue with next_state.

Hooking sparks to the strike takes one signal connection in the Godot example (C# in Unity is the same idea with EventFired):

hammer.event_fired.connect(_on_hammer_event)

embers.position = hammer.position - lib.pivot("trip_hammer") + lib.anchor("trip_hammer", "contact")

Requests made while a one-shot is playing queue just one follow-up state, the latest request: five strike requests during a strike give exactly one more strike. QUICK_START.md in the download has complete Godot and Unity examples.

What is included

  • 6 original animated designs: 4 workstations (furnace, bellows, trip hammer with anvil, quench trough) and 2 effects (ember burst, quench steam).
  • 14 states, 109 frame slots, 105 unique frame images. The 4 repeats are one-shots that end on their rest or idle pose so the next state starts without a jump.
  • Support pieces, counted separately: 2 designs in 5 poses, a 20×3 px billet (cold, red and hot) and smith's tongs (carry and dip).
  • No recolours and no size variants. One illustrative demo backdrop (448×192) is included for the demos. It is not a tileset and is not counted as a design.
  • Formats: 109 RGBA PNG frames, 14 horizontal strips (the widest is 1792×96), manifest.json, two demo timelines (10.68 s and 5.76 s) with 1x preview GIFs, a Godot 4 project with three demo scenes, Unity C# reference scripts, and the Python source that generates the art (optional).
  • Style: a 32-colour palette, alpha only 0 or 255, side view lit from the upper left. Scale is 32 pixels per game unit; each object keeps its own canvas, from the 20×3 billet to the 128×96 trip hammer and the 80×144 furnace.

Tested versions

  • Godot 4.7.2 (Compatibility renderer): imported the exact release ZIP and ran the demo scenes. Every rendered frame matched images rebuilt from the PNGs, and the playback rules passed their tests.
  • Unity 6000.3.26f1 and 6000.0.58f1 (Built-in Render Pipeline, Gamma and Linear colour space): import with no compiler errors or warnings from the pack, the menu step, Editor Play Mode, a Linux player build, pixel-exact renders of every frame and two-loop timing captures.
  • All tests ran on Ubuntu 24.04 with Mesa software rendering (llvmpipe). Not tested: URP or HDRP, other engine versions, Windows or macOS editors, mobile or web exports, physical GPUs and other engines. COMPATIBILITY.md in the download lists every check.

Limits

  • No characters or smith, no item icons or crafting economy, no building tileset, no physics and no audio.
  • Transitions are authored one-shots. They cannot be interrupted or reversed halfway; queue the next state instead.
  • The hammer's contact pose fits the included 3 px billet. Other workpieces need their own placement.
  • Steam and smoke are opaque pixel clusters, not semi-transparent particles.
  • This is the universal edition. A Unity Asset Store edition with ready-made clips, controllers and prefabs is planned; it is not released and not part of this download.

Licence and AI disclosure

You may use and modify the art in personal and commercial games and other interactive projects, with or without credit. You may not resell or redistribute the files as assets, modified or not. The example code and generator source may be used and changed in your own projects. LICENSE.txt is the binding text.

Every pixel is placed by Python code written for this product with Claude (Anthropic) AI assistance. The art was not drawn by hand in a paint program, and no image-generation model, tracing or third-party art was used. The Godot and Unity example code, the documentation and this page were also written with Claude's help.

Free sampler or full pack

Two labelled bands of sprites at 2x. Free sampler: the furnace and the ember burst. Full pack adds: the bellows, the trip hammer with anvil, the quench trough, the quench steam, the tongs and the billet in its hot, red and cold poses.

One representative frame of each design. Top band: what the free sampler contains. Lower bands: what only the full pack adds.

Free sampler

  • The furnace, complete: all 6 states, 39 frame slots (38 unique images).
  • The impact ember burst: 10 frames.
  • PNG frames, strips, manifest data and two preview GIFs, under the same licence as the full pack. Art and data only: no scripts, demo scenes or generator source.
  • Its README gives import settings for Godot 4.7.2 and Unity 6000.3.26f1; both were tested with it.

The full pack adds

  • The bellows, the trip hammer and anvil, the quench trough and the quench steam.
  • The billet (hot, red, cold) and the tongs (carry, dip).
  • The heat-strike-quench and furnace-lifecycle demo timelines and the demo backdrop.
  • The Godot 4 project and Unity reference scripts with ready demo scenes, and the editable Python art source.

Buy the full Hearthforge pack to get the complete working cycle, or download the free sampler first.

Purchase

Buy Now$1.99 USD or more

In order to download this asset pack you must purchase it at or above the minimum price of $1.99 USD. You will get access to the following files:

Hearthforge full pack v1.0.0 (PNG frames, strips, manifest, examples, source) 727 kB
Version 1.0.0

Download demo

Download
Free sampler: complete furnace (6 states) + impact ember burst 291 kB
Version 1.0.0

Development log

Leave a comment

Log in with itch.io to leave a comment.