1-Bit Fantasy: A public domain JRPG prototype

I set out on a little quest: could I make a game like Final Fantasy Legend or Dragon Quest in 2 weeks?

Two weeks later, here's what I've got: 1-Bit Fantasy:

1-Bit Fantasy Combat

It's a prototype made with Lua. After I finished the first draft of my Playdate book, I wanted to expand upon the final project to make a bigger turn-based RPG. And then share the source for those who might want to make their own JRPG.

You can download 1-Bit Fantasy on itch:

And download the source on GitHub (it's all public domain):

1-Bit Fantasy features:

  • Map exploration with 3 different maps; using Tiled
  • NPC conversations
  • Turn-based combat
  • Save and load data
  • Sound effects and music

Basically, a lot of the foundations you'd need to make your own JRPG for Playdate.

Technical Aspects

I tried to write the Lua code in such a way that's all data-driven and without too many globals. Here are some interesting bits:

OptionSelect has a draw and update function that can be used to easily add menus, since there are so many in the game:

It's used throughout combat, menus, and NPC dialog trees.

And then MessageQueue.push and MessageQueue.pop power all of the combat and NPC textboxes:

From anywhere in the game, messages can be pushed onto the queue:

MessageQueue.push({
  speaker = "Innkeeper",
  text = "Welcome to the Generic Village Inn! The finest (and only) inn in the village.",
})

Messages have optional onShow and onConfirm callbacks, which can push more messages on the queue or change game state.

Which all gets rendered by MessageBox:

The MessageBox handles rendering and updating the message on the top of the queue, if there is one.

Lastly, I think the code for handling scenes and subscenes is pretty elegant:

A scene is a table that has an update function and optional init and close functions:

main.lua calls out to the current scene and handles switching:

And the Gameplay scene has subscenes (field, combat, and menu):writing_hand:

Lua isn't the language I'm most comfortable with, so some of this may be a bit weird, but I really love how flexible Lua is. Structuring the game into scenes and subscenes and being easily able to switch between them made developing pretty quick.

Sunny

Right before I started 1-Bit Dungeon, I made a Playdate Lua template that has some of these foundations called Sunny :sunny::

It has the scene switching and some organization of the code. I'll backport some of the stuff from 1-Bit Dungeon to Sunny soon.

What I Didn't Get To

I planned to add magic spells, items, and equipment, but I wasn't able to get those done. I do think they're similar enough systems to what exists that it wouldn't be a big leap to add them. They'd be great to add in a full game.

Asset Credits

What Next

Well, that's the big question! I am going to finish editing the Playdate book. Then make some smaller prototypes before I decide what kind of bigger project I want to commit to. I have an idea for a multi-hour JRPG that'd be a good fit for Playdate. But that'd be a big commitment that I'm not sure I'm quite ready for.

Hope you enjoy the prototype and let's all make some great RPGs for Playdate!

6 Likes

I made a video playing through the game and then walking through some of the more interesting bits of the source code to help people jump in and make it their own!

1 Like