Redbud Falls

Genre: Interactive fiction / point-and-click adventure
Engine: Ink / Unity
Solo project
Development time: 3 weeks

Ink-only version written for Narrative Driven Jam 4, September 2021
Theme: The Tomato Incident
Optional sub-themes: Cats, Break the Rules

Play on
Read script excerpts

During the introduction, Ruby reunites with her childhood friend, Rusty.
The mouse cursor changes to indicate that action can be taken. Here, footsteps appear to inform the player they can move to the parking lot.
A speech bubble with three dots indicates that the player can start a conversation by clicking.


Coming into this game jam, I had the goal to write a romantic comedy using Ink. The theme of “the tomato incident” inspired the small-town rural setting, and a farmers market seemed like a perfect venue to limit the number of map locations and focus on conversations.

Ruby Salerno arrives in the town of Redbud Falls to stay at her late grandmother’s house for a while, but she hasn’t been there in years and can’t remember the way. She finds her childhood friend Rusty at the farmers market, and he promises to guide her once the market closes. In the meantime, Rusty asks Ruby if she’ll snoop around and try to figure out who recently dug up some of Rusty’s tomato plants.

Ruby explores the market, buying produce and engaging in gossip with the vendors. She can take tomatoes from other vendors to Rusty for examination, which triggers “catching up” conversations. Ultimately, she learns that Rusty is thinking about selling his farm, something they agree to discuss over dinner.

Alternatively, once Ruby knows the culprit, she can confront them directly. If she also gets a wi-fi password to look up directions and convinces the ice cream truck blocking her car to move, Ruby can leave the market for her grandmother’s house without Rusty’s help.


  • Turn-based play: each action takes a fixed amount of time, which affects several resources.
    • Time limit: the game ends when the market closes.
    • Energy: Ruby will fatigue as time passes.
    • Sun exposure: Ruby risks getting burned if she spends too much time in the sun.
  • Ruby can move between 5 locations, 2 of which are “in the shade” and reduce her sun exposure.
  • Ruby can go to her car and rest to recover energy.
    • The car is in the shade, so resting reduces sun exposure as well.
  • If Ruby exhausts her stamina, she is forced to rest for 6 turns.
  • Ruby’s energy cannot exceed a fixed maximum.
    • If Ruby is sunburned, her maximum energy is halved.
  • Ruby begins the game with a limited amount of money to buy items from the market vendors.
    • Ruby has one opportunity to gain more money during the course of the game.
  • Buying items can reveal clues about who stole Rusty’s tomatoes.
  • Some items can be traded for other items and information.
  • A sun hat can be purchased to reduce the rate of sun exposure, but it’s very expensive.
  • Ruby can buy a snack from the concession stand to restore some energy.
  • The player is given a score at the end of the game based on which ending the player reached, remaining resources, whether or not Ruby got a sunburn, and certain player actions.
Excerpt from my design notebook outlining the various items and information the player can collect, which character provides it, and what condition must be met before they do. The map shows each game location and the paths between them.


The first version of the game was written completely in Ink and exported to the default web player. Each location and character conversation is a knot, with functions used to display the player’s status and a tunnel to advance each turn.

I used Inkle’s Unity API to add graphics and a point-and-click API with very few changes to the Ink source. Notably, I added a variable to indicate whether the current player choice is map-based or dialogue-based.

  • Map-based choices allow the player to interact with areas on the screen as indicated by animated cursors.
  • Dialogue-based choices use buttons to choose conversation options when interacting with characters.

Map-based choices include the identifier of the mouse hover area within the choice text so the Unity code can associate the selection with the correct object.

This function updates the player on Ruby’s status each turn.
Ink code for the Parking Lot area and Ruby’s Car. Note that the choices contain identifiers for the map hover object and the mouseover text.