Making a spooky game with F#

For the October F# Game Jam, I made Orb Light, a 1-bit platformer with fading light the player restores by collecting orbs. For this post, I want to share my approach to making games with F#. You can find a subset of the game code here.

Game State Persistence

At a high level, Triverse resembles an actor model where independent actors send messages to each other using a message bus. They have no shared state, making them suitable for parallel processing. Actors are reactive in that they are triggered only by incoming messages.

Grid Projectiles

Triverse gives the player control of a drone made of triangle parts moving on a hex grid. Low-level gameplay resembles a grid-based bullet hell roguelike, where the player dodges incoming projectiles while looking for vantage points to fire back from.

Triangle Text Grids

Triverse uses a simple text format for triangle grids to allow hand editing and inspection. Almost everything within the game, from drones to projectiles to terrain, is a grid composed of cells, and players can define their own grids and store them as blueprints.

Building Mechanics

Designing and building units is a core mechanic of Triverse, so it needs to be streamlined and fun. Among games in general, there are two basic ways to implement player building controls:

Introducing Triverse

Triverse is a 2D triangle-grid-based game where players build drones from scavenged or manufactured parts, leading their fleet to explore and survive in a procedurally-generated world.