Brackeys Game Jam 2025.2 · Long-Term Development

Biscuit
Bandits

A narrative dice roguelike where hand-authored encounters, crew state, faction relationships, and persistent consequences shape each voyage.

The video shows the current development build. The itch.io link is still the original jam version. The expanded demo shown throughout this case study will be released publicly soon.
Role
Lead Designer · Main Programmer · Writer
Team
3 people
Engine
GameMaker / GML · JSON
Time
1-week jam · ongoing since 2025
Jam Result
#28 / 2,272

My Work

Systems & Gameplay Design

I designed the voyage structure, probability model, crew passives, injury and death, Arena modifiers, recruitment, Voyage Log and Focus systems, and the Treasure system currently being added for run-to-run crew customization.

Narrative Design & Writing

I am the sole writer of the game. I reworked the full encounter library, expanded the three factions into connected arcs, strengthened parallels between recurring characters, and built the story toward a finale that reacts to the voyage that reached it.

Programming & Technical Design

I built the GML runtime and JSON-driven content architecture that connect scenario selection, crew state, roll resolution, Arenas, flags, save data, presentation, replay progression, and conditional narrative routing.

Long-Term Development

The jam ended. I kept rebuilding the game.

Biscuit Bandits began as my first serious attempt at game writing. Jam players praised the story and humor, but the gameplay and moment to moment feel did not give those ideas enough support.

The rankings showed the same split: #8 Audio and #11 Visuals , but #291 Gameplay . I continued development to make the choices more engaging and the results more satisfying without losing what worked in the writing.

The core roll is the clearest before-and-after.

The first thing I changed after the jam was the spinner. Giving the roll a stronger animation immediately made the old presentation feel flat, and that small improvement grew into a wider revamp of the interface, feedback, audio, and consequences surrounding every choice.

Jam Original Roll
One-week build
ADD GIF BBJamRoll.gif
Pick a crewmate, spin, then move on. The brief animation gave the choice little anticipation and made success or failure feel abrupt.
Demo Current Roll
Development build
ADD GIF BBDemoRoll.gif
The rebuilt spinner establishes anticipation, then procedural effects, audio, and a timed reveal give the result a clear payoff.
Current presentation

The development build still uses the original jam art assets. The visual changes visible right now are mostly procedural UI, spinner motion, Arena presentation, and effects that I implemented in code. We are creating new art assets for the public demo, and Dirk is also making expanded versions of the existing music tracks.

Meaningful Decisions

I wanted more decisions than “pick the highest stat.”

In the jam build, the best choice was usually whichever crewmate had the highest number. I wanted the player to think about who they were sending, what that character might change, and how the encounter itself could reshape an otherwise familiar roll.

I approached that from two directions: Crew Passives give each crewmate their own rule, while Arena Modifiers change the rules around the roll. I am also adding Treasure so crew stats can change during a voyage, giving each run more of a build identity instead of locking every crewmate into their starting numbers.

The best number is not always the best choice.

Each crewmate has a unique rule that changes when they are worth sending.

The Gambler

Hot Streak

Each success adds one point to every stat, up to three. One failure wipes out the streak and leaves every stat weakened until the Gambler wins again, creating pressure to keep gambling while the streak is alive.

GIF SLOTBBPassiveHotStreak.gif

Four of the 10 Passives are shown here.

Different encounters should ask different questions.

Arena Modifiers change the information, restrictions, or consequences around a roll without replacing the core system.

Fog

Hide the information.

The normal stat and odds readout disappear, forcing the player to rely on what they remember about the crew and evaluate the same roster differently.

GIF SLOT BBFog.gif

Four of the eight supported Arena modifiers are shown here.

JSON Narrative Architecture

JSON became the backbone of the narrative.

External JSON keeps authored content out of gameplay code. One encounter file can carry dialogue, choices, rolls, requirements, outcomes, persistent flags, crew references, Arena state, presentation, and routing.

The GML runtime evaluates that data against the current voyage. Encounter starters also carry tags describing their faction or vibe, such as Turkey, Brigade, Goon, Creepy, Environment, or Neutral. The voyage planner can then balance the story rather than stack similar scenes together.

REAL PROJECT ARTIFACT Annotated production JSON

Use a tightly cropped real encounter file and highlight only the fields that connect writing, gameplay, and presentation.

BBJSONAnnotated.png
Branching
choices, success/failure routes, question hubs
Persistent state
flags, outcomes, requirements, crew identity
Gameplay
rolls, difficulty, effects, Arena activation
Presentation
portraits, areas, aesthetics, dialogue/audio treatment
Story planning
faction and vibe tags used to balance each voyage

Earlier choices still reach the ending.

Faction relationships survive the run, crew identities stay stable across multi-page scenes, and later encounters can respond to what the player actually did instead of treating every event as isolated. The finale uses that history but is omitted here to avoid spoilers.

Narrative Roguelike

A roguelike story still has to feel authored.

I am the sole writer of Biscuit Bandits. After the jam, I rewrote all 45 standard encounters, strengthened recurring faction arcs, and rebuilt the story around a clearer climax.

Because each voyage uses only part of each encounter pool, those authored scenes must work in procedural order. The run planner surfaces unseen content, prevents obvious repetition, and preserves authored payoffs.

45 standard encounters 15 Easy · 15 Medium · 15 Hard
3 major faction arcs recurring characters + relationship state
1 bespoke finale reads earlier voyage choices back
MEDIA SLOT Scenario rewrite: jam → current

Use one encounter you substantially rewrote.

BBNarrativeRewrite.gif / .png
MEDIA SLOT One faction across multiple encounters

Show the same characters returning later in the voyage.

BBFactionArc.gif / .png

The tags shape the voyage.

Every encounter carries faction and vibe tags, and the run planner uses them to keep the voyage varied while still serving the story.

Medium and Hard use the planner below. Easy is more authored: its layout is less random and guarantees the player meets the factions the rest of the story expects them to understand.

01 Start with weighted candidates

Encounter weights decide which scenes are most likely to be considered, including unseen-content and Focus weighting.

02 Build 64 random plans

The planner assembles 64 complete layouts from those candidates, with each plan ordered randomly.

03 Score tag variety

It checks the plans from the top and rewards variety across faction and vibe tags. Any plan scoring above 80 is strong enough to be considered.

04 Keep the best composition

From the qualifying plans, the highest-scoring layout becomes the voyage section.

Other Systems

Smaller problems that became important once the project grew.

These are supporting systems rather than separate case studies, but each exists because the expanded game created a specific design or implementation problem.

Replay Progression Voyage Log + Focus
More content was not enough. Repeated voyages needed visible goals.
Problem

As the encounter library grew, pure randomness could make replay feel aimless and could hide authored content the player had never seen.

Solution

The Voyage Log tracks discovery, outcomes, and Crew Records. Focus lets the player influence future weighting toward something they still want to find without turning the roguelike into a level select.

Why it matters

A new voyage can now have a player-defined goal, while unseen-content weighting still helps the larger library surface naturally.

SCREENSHOT SLOT Voyage Log menu BBVoyageLogMenu.png
Main Voyage Log screen with discovery progress, categories, Focus, and Crew Records.
SCREENSHOT SLOT Completed Easy log BBVoyageLogEasy.png
A completed Easy category showing encounter and outcome tracking across multiple voyages.
Information Timing Delayed Result Reveal
Resolve gameplay now, reveal the consequence when the player is ready to see it.
Problem

Injury or passive state could update as soon as the runtime knew the result, revealing a failure before the spinner finished.

Solution

I separated mechanical resolution from visible presentation and queue the state changes that would spoil the landing beat.

Why it matters

The code stays deterministic while the player experiences the intended suspense and result timing.

Narrative State Conversation Tags
Let dialogue refer to the actual crew in this voyage without a character changing halfway through a scene.
Problem

I wanted encounters to talk about the crew the player actually brought with them instead of using generic stand-ins. But a long scene can span several pages, and crew arrays can change after deaths, recruitment, or a Continue load.

Solution

I built conversation tags such as {crew1}, {crew2}, {crew3}, and {random_crew}. When an encounter begins, those tags resolve to stable crew IDs and that mapping is saved with the active voyage, so the same character keeps their role for the whole conversation.

Why it matters

The writing can be more specific without becoming fragile. A scene can call out a real member of this run, carry them through several pages, and still survive party changes or save / resume.

Content Pipeline JSON Migration
Remove boilerplate from a large library without requiring one risky rewrite.
Problem

The jam-era schema used fake success/failure wrappers and redundant fields even for simple deterministic dialogue choices.

Solution

Current authoring infers rolls from the presence of a stat, lets narrative pages route directly, and supports skip-result question hubs while the parser still understands legacy structures.

Why it matters

I can migrate a large narrative project gradually instead of freezing development for one enormous content rewrite.

Original Jam Result

#28

out of 2,272 entries

#8 Audio #11 Visuals #31 Theme

The one-week version placed #28 overall. I kept developing it because the project had more room to grow than the jam allowed: the presentation and writing had landed, but I wanted the gameplay, replay structure, and final narrative payoff to carry the same weight.

Play the original build ↗

Team

Biscuit Bandits began as a three-person jam game and has continued as a long-term small-team project. I own the gameplay, systems, implementation, and writing while working with George and Dirk on the visual and audio identity.

George created the original character and environment art that established the jam version's visual identity. We are now creating additional visual assets for the public demo.

Music + Soundscapes

Dirk Dammit ↗

Dirk created the original music and soundscapes. For the expanded demo he is developing longer, expanded versions of the existing tracks while I handle the in-game audio and presentation implementation.

Lead Design + Programming + Writing

Harrison Alonso

I lead the game design and programming, built the JSON/GML narrative architecture, and am the sole writer of the encounter library, faction arcs, dialogue, and finale. I also integrate the team's art and audio into the game.

Reflection

The useful part of keeping Biscuit Bandits going has been getting to revisit decisions I made under a one-week deadline. Some of the jam ideas held up, and others did not. I have rewritten scenes, changed the voyage structure, and rebuilt parts of the crew and roll systems when they stopped supporting the game I wanted.

It has also made me realize how much I enjoy the technical side of narrative design: not only writing a scene, but building the rules that let it appear at the right time, remember who is present, and pay off choices later. The demo is still in development, and I expect parts of it to keep changing as I test it.

FINAL MEDIA SLOT Current demo moment BBReflection.gif
Next Project Shuddap →