JT
  • Home
  • Projects
  • Extras
  • Contact

© 2025 Joshua Tjhie. All rights reserved.

GitHubLinkedInEmail
Back to Projects
  1. Home
  2. Projects
  3. Copperfall
2024-05-10

Copperfall

A custom 2D JavaScript Canvas game engine and adventure prototype.

Early notes on the Copperfall engine architecture, tooling, and roadmap.

JavaScriptCanvas APIGame Dev
Copperfall

Quick Stats

Role: Solo Developer
Duration: Ongoing
JavaScript (ES2023)Canvas 2DEntity Component SystemWeb Audio

Links

Copperfall Repo

Copperfall Engine Overview

Copperfall is currently in heavy development. This outline captures the structure I’ll expand into a full case study once the vertical slice is ready.

Goals

  • Build a lightweight 2D engine in pure JavaScript without external frameworks.
  • Support an entity-component-system (ECS) loop, deterministic updates, and responsive input.
  • Ship a small narrative-driven prototype on top of the engine.

Planned Sections

  1. Renderer — batching sprites, parallax layers, screen shake, and post-processing.
  2. Simulation — fixed timestep loop, ECS scheduling, collision primitives.
  3. Tooling — map editor experiments, asset pipeline, debug HUD.
  4. Narrative layer — dialogue runner, scripting hooks, save system.
Copperfall concept render
Concept art stand-in until in-engine captures are ready.

Notebook Excerpt

// main loop draft (subject to change)
const STEP = 1000 / 60
let accumulator = 0
let last = performance.now()

function tick(now) {
accumulator += now - last
last = now

while (accumulator >= STEP) {
  world.update(STEP)
  accumulator -= STEP
}

world.render(ctx)
requestAnimationFrame(tick)
}

requestAnimationFrame(tick)

Next Steps

  • Capture footage of the ECS debugger overlay once the UI is stable.
  • Write up the level streaming approach and asset packing pipeline.
  • Post a build for early playtesting feedback.
Follow Development

Have thoughts?

Curious what others see or think

Feel free to reach out or leave feedback

Share Feedback

Prefer email? joshuatjhie@pm.me