Video summary

I Made RuneScape in PICO-8

Main summary

Key takeaways

Technology

Overview

The video documents a full game-dev project: recreating an “old RuneScape” feel inside PICO-8 (“Pico Escape”). The creator starts with nostalgia and aims to fit RuneScape-like loop elements—grinding skills, resource gathering, leveling, UI, sounds, and leveling fireworks—into a tiny, retro-constrained system, then walks through the technical hurdles and solutions.

Key technological concepts / PICO-8 features used

PICO-8 constraints as a design driver

  • Very small display: 128×128 resolution
  • 16-color palette
  • Limited code budget, forcing creative solutions

PICO-8 development workflow

  • Uses PICO-8’s built-in tools:
    • Code editor
    • Sprite editor
    • Map editor
    • Sound editor
  • Uses PICO-8’s standard game loop structure with init and draw
  • Eventually switches to VS Code for better editing, using plugins and debug logging from the command line

Rendering & layering

  • Uses layering/sprite flags to achieve correct depth behavior (e.g., “walk behind tree tops but in front of trunks”)
  • Handles transparency contextually (see below)

Major engineering problems and solutions

Player movement and diagonal speed normalization

  • Problem: diagonal movement was faster than straight movement
  • Fix: normalize diagonal speed so overall movement speed is consistent
  • New issue: normalization creates non-integer pixel positions
    • PICO-8 snaps/auto-adjusts to pixels, producing visible “stair stepping”
  • Final improvement: snap the player’s XY to whole pixels whenever direction changes, improving diagonal smoothness

Sprite animation implementation

  • Implements walking animations using separate frames/directions
  • Notes a Lua-specific detail: arrays are 1-indexed (not 0-indexed)
  • Calls out workflow limitations compared to tools like Aseprite (frame visualization requires extra clicking)

Collision system

  • Implements reusable map object collisions by:
    • Building a vector metatable to simplify vector operations
    • Using a flag-based system on sprites/tiles so collision can apply generically (e.g., rocks)
  • Tree collisions require special care to preserve “in front of/behind” behavior:
    • It’s not fully consistent at first, then is adjusted

Camera / world scrolling

  • Adds a moving camera so the player can go beyond a single screen

Transparent background blending for sprites

  • Early method: clear the screen with green to mask tree transparency issues
    • Side effect: sprites look wrong when the underlying terrain differs (rocks on sand, trees on grass, etc.)
  • Attempts contextual transparency color:
    • Over-engineered/performance-heavy approach: sample nearby pixels at runtime to compute dominant surrounding colors for transparent corners
    • Optimization idea: precompute dominant tile colors in init and cache lookup tables
  • Result: a blending system that’s “mostly working,” determines a replacement background color for transparent (black) pixels, but isn’t perfect.

Gameplay systems implemented (RuneScape-inspired)

Interactable tiles

  • Adds tile flags for objects the player can interact with
  • Interaction requires the player to be on/next to the tile and facing it
  • Includes debug output; described as “finicky” but mostly functional

Skills/resources framework

  • Plans three skills:
    • woodcutting
    • mining
    • fishing
  • RuneScape-like resource depletion:
    • Using a resource transforms it into an empty state
    • The resource later regenerates after a timer
  • Resource access rules:
    • Each resource site has a level requirement
    • Each skill/resource grants experience

Experience/leveling math & numeric limits

  • Targets fast leveling time (about 10–15 minutes to reach a max-like experience goal)
  • Starts with a formula similar to: XP_required = 5 * level^2
  • Hits PICO-8 numeric limits:
    • Max integer around 32,767
    • To prevent overflow, reduces multipliers and changes * 5 to * 3
  • Adds multi-hit depletion so resources can drop more XP per interaction

UI

  • Bottom UI bar with skill icons and current levels
  • Top-right display shows XP remaining to next level while actively training
  • Inventory appears on button hold to save space
  • XP feedback includes floating XP text that animates upward each frame

Sound design

Adds sound effects for:

  • Harvesting resources
  • Inventory selling interactions
  • Leveling up / reaching max level

Level-up fireworks

  • Initially avoids complex particles, then fully implements fireworks
  • Fireworks are made from particles that move each frame using stored direction vectors
  • Adds richer spawning patterns:
    • Explosion sequences around center points
    • Color fading
  • Special case: max level (99) fireworks
    • Last longer
    • Have more explosions
  • Performance bug fix:
    • Fireworks list grew indefinitely (“active explosions list” not being deleted)
    • Fixed so performance improves

Economy / selling

  • Implements a “general store” interaction:
    • Talk to a shopkeeper → sells all inventory at once
  • Money display constraint handling:
    • Since integer max is low, prepends a “zero” in textual money representation
    • Extends max displayed amount to ~300,000
  • Adds a Wise Old Man who sells the party hat as an end goal item

“Finish game” scope and final content

  • Adds a RuneScape-like starting town area:
    • Castle area reminiscent of Lumbridge
    • River + bridges
    • Decorative elements (fountains/greenery)
  • Adds animated NPCs:
    • Wise old man (for party hat)
    • Dark wizard circle
      • “New players go to die”
      • Enter circle → after time → player dies
      • Includes death animation, skull left behind, hit splat, and sound effects
  • Final objective:
    • Buy the party hat after accumulating enough gold
  • Release:
    • The final game “Pico Escape” is played on itch.io

Review / guide / tutorial elements

This isn’t a formal tutorial series, but it includes practical development notes for:

  • PICO-8 setup workflow (editor + switching to VS Code)
  • Consistent diagonal movement and pixel snapping
  • Sprite flags/layer rendering for correct occlusion
  • Transparent sprite background handling (and why a naive “single color clear” approach fails)
  • Structuring:
    • collisions
    • camera scrolling
    • inventory UI
    • skill progression
    • timers
    • particle effects under PICO-8 constraints
  • Debugging/performance pitfalls (e.g., runaway particle lists causing slowdowns)

Main speaker/source

  • Single creator/developer narrator (the video author who built “Pico Escape” in PICO-8).

Original video