Random Thoughts on Making a Free Software Adventure Game

Random Thoughts on Making a Free Software Adventure Game

I’ve been wanting to get back into game development as a hobby for a while – I used to do it years ago, but can no longer rely on Adventure Game Studio as a tool, due to the editor being windows-only with little chance of a port happening anytime soon.

I have been looking at the Godot game engine, which is Free Software and has many powerful capabilities for 2D games. I’ve played a number of game demos with it, and I believe that it could be just the system I need. It’s very different from what I’m used to, and will take a long period of practicing tutorials and building stupid demo games before I start making any real progress anywhere.

I really, deeply, truly love adventure games in the style of the Sierra titles that I played as a kid – these include King’s Quest, Space Quest, and most notably, Quest for Glory. I have spent a lot of time attempting to better approximate the visual styles and the type of gameplay that these older titles used to offer.

I recently had an idea about implementing different cursor modes in a Godot engine. Although I know very little of how Godot’s internal code system works, I believe that I could effectively create different interaction cursors by declaring global variables. Something like:

def cursorMode {
cursorMode() = c

function cycleCursor() {
  if cursorMode(c) = 0 & RightClick {
  setCursorMode(c) + 1

else if cursorMode(c) > 5 & RightClick {
  setCursorMode(c) = 0

Mind you, I’ve never been a particularly great coder, so there are probably some conventions that I am missing here in one form or another.

The main idea is that you have cursor modes 0-5, which covers Walking, Looking, Interacting, Talking, and Inventory. If a player right clicks on the final cursor mode, the mode variable is reset to the first one.

You could then define interactions with objects in their relative scripts, such as this:

// Rock
object Rock {

if cursorMode(c) = 1 {
  display("You see a rock.");

if cursorMode(c) = 2 {
  display("You touch the smooth, cold surface of the rock.");

Obviously, I will need to crack open some books to better understand the semantics, especially in relation to Godot system syntax, but I would be very interested in figuring out how to put these fundamental building blocks together.