During 2020 and 2021, Laura and I made some games together, including:
Here’s Laura’s thoughts on it, and here I’ll be writing about the tech behind our Tall Bagel games.
We jokingly referred to our tech as BagelTech, but we ended up saying the the term BagelTech so often that it became the de facto name.
BagelTech is primarily powered by two libraries/frameworks:
I’ve been using XNA/FNA since over 10+ years ago (including my first commercial game Flotilla!) and I highly enjoy working with it. It’s free, lightweight, open-source, cross-platform, and flexible.
BagelTech is built on an accumulation of code I started way back in Flotilla. Here’s what it mostly looks like now:
camera.cshandles the player first-person camera movement.
helpers.csis my junk-drawer of helpful functions.
inputmanager.cshandles game input.
program.csis where the program starts.
screen.csa ‘screen’ is: options menu, game world, inventory screen, etc.
screenmanager.cshandles the stack of screens (removing, adding, updating).
settingsmanager.cshandles save/load of options (volume, resolution, etc).
soundmanager.csis where we handle audio.
If you’re ever interested in checking out FNA, I made an open-source FNA Starter Kit to help get you going. It includes most of what I describe above.
Laura did all of Tall Bagel’s writing and scripting. We wanted find a way to allow her to rapidly implement and test her work. I think you can create an amazing amount of momentum when working with a good pipeline, and we wanted that kind of environment here.
We had a series of goals. We wanted to be able to:
- Implement content quickly/easily.
- Have content be data-driven (i.e. in human-readable text files, not in code).
- Test content quickly/easily.
YarnSpinner ended up being fantastic for this. YarnSpinner is a tool for game dialogue and game scripting. It’s lightweight, straight-forward, and is as extensible or minimal as you like.
Here’s a sample from Tall Bagel:
[time 3]Kim: I'm saving my dessert budget for egg nog. [time 2]Jacob: But this is egg nog. <<lookpitch kim 10>> <<jostle kim 2.5>> [time 3]Kim: No, it's egg nog ice cream!
The scripts live in a text file, and control what the characters say and do.
[time 3]command determines how long their speech bubble stays on-screen.
- We added various commands to control the characters, including
<<lookpitch>>to make the characters look up/down, and
<<jostle>>to make the characters shake in indignation.
If you’d like to see all of the various scripting commands we added to the game, we listed them all here.
We wanted to be able to easily test things, to be able to fast-forward or skip to specific parts of the game. We added debug tools to facilitate this.
R= reloads all script files, without having to exit the game.
DOWN ARROW= skip current dialogue bubble.
RIGHT ARROW= skip to next chapter.
[ ]= select chapter from dropdown box.
ENTER= confirm chapter dropdown box selection.
Here’s how our debug view looks like in-game:
For any future Tall Bagels, I’d love to re-visit how we handle how we test – perhaps something more intuitive and GUI-driven that uses less cryptic keystrokes.
Working on these games was a joy. It’s wonderful to work with Laura, it was wonderful to see these characters come to life, and it was wonderful to create tech built around our specific workflow and processes.