Video summary
I Made RuneScape in PICO-8
Main summary
Key takeaways
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
initanddraw - 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
initand 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
* 5to* 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).