Jan 4 2020
We’re leaving Florida today, and it’s raining. That’s given me some
time to get things together for the backpack quest, which I’d like to
have “working” before I post the game. I made quick, temporary graphics
for all the required items, and just wrote the code for the
LockedOpenable
, which is like an Openable
but requires an item to
open. This is what the branch-hook that’s holding your backpack is
implemented as; it doesn’t really “open” like a cabinet, but the branch
unfurling into the water and revealing the backpack works the same way -
and it looks pretty good, if I do say so myself.
Sara’s going to work on sketches for the remaining two rooms, then she’s
going to start trying to replace these test graphics. I still need to
figure out how to submit things to itch.io, which is where I expect this
to end up when it’s “done.”
Jan 3 2020
When I originally pitched this project to Sara before the vacation
started, I’d figured this kind of game would be a breeze to make, even
in an unfamiliar engine and toolset. That hubris is comin’ round to
haunt my now, as it’s clear this won’t be even close to finished by the
end of Sunday. So.. here’s what I’m thinking.
Sara is excited for this project, and committed to finishing it. I am
too; considering her work is so popular, this is a game people might
actually play! So I’m going to post what I have done before the
vacation is over, and then we’re going to keep it going and see what we
can do, I think this has the potential to be a really awesome, if
short, adventure game.
It’s not the first vacation project that I didn’t have time to finish,
and it won’t be the last.
Jan 3 2020
Part of this game is going to be searching through the house for items,
and as such some items will be contained within cabinets. I’ve added
code to Openable
to handle this; now, one item can be contained within
an Openable
, and will be revealed when it’s opened.
Unfortunately, Godot doesn’t handle propagation of click events in
overlapping Area2D
instances like it does other events; it looks like
unless I write some code to handle that myself, I’ll need to make sure
that Openables
that have items in them don’t have a description of
their own. I think that’s probably okay.
Jan 2 2020
Tomorrow is our last full day in Florida, and I already miss the
weather. I’m sitting outside on the porch working on the game right
now, as I have with many a vacation project before this one, and it’s a
very comfortable 71, which is awesome in December.
To follow up on the potion quest, I added in the LockedDoor
class;
this class is maybe more generic than it needs to be seeing as there’s
only one in the whole game, but what can I say? It is also the first
piece of the “game state” tracking, currently being done with a
Dictionary at MastterController.game_state
that holds arbitrary
values. I assume future classes that care about state will use this as
well.
Jan 1 2020
Sara and I spent some time tonight finishing the quests and concept
drawings for this project so she can finish the assets. Here’s the
second quest:

This quest happens alongside the remaining two - they can be taken in
any order, and even simultaneously. They’re all to retrieve some item
that you need in order to leave for your adventure - one of those items
is a potion.
The potion is found in the cellar - you need to pilfer the key before
you can even get in. Once there, a “grump” (some kind of creature) is
drinking the potions, and you have to give him something else to drink
to get the potion you want. That “something else” is some of Dad’s
liquor, which is too high up on a shelf for you (a child) to retrieve on
your own - so first you need a stool. Once the liquor is traded for the
potion, this quest is complete.
This is the only quest that goes into the cellar, and the only time you
need to interact with the grump, but hold on to that stool - it’ll come
in handy in another quest later on.
In this update, I added the real rooms - we finished the entire
outline of the game, so I now know where everything is and how it
connects, and all I need is for it to all be created. Two of the four
rooms still need a sketched out background, so they’re blank (but the
doors exist at approximately the right place and work). I likely won’t
be using these rooms for continued development, as I still need my test
assets in order to finish the global game state.
Jan 1 2020
Today, we kept up our New Year’s tradition of going to aquariums by
going to see the manatees down by the TECO Electric Plant’s “Manatee
Observation Area” (which is run in conjunction with the Tampa Aquarium
so it totally counts). Wild manatees are drawn to the warm (clean)
water the plant puts out, and so a small exhibit was built around it to
allow the public to see them without interfering, and proceeds from the
operation go to further help them manatees. Overall, a cool trip.
I added the ability to use inventory items; once clicked, the item
follows your mouse, and the next click is “using” the item - either on
something, or simply dismissing it. Again favoring simple interfaces,
it takes one click to “grab” the item, then the next click does
something with it (or “un-grabs” it if nothing was clicked). I also
found out how to actually use dictionaries in Godot, which is good/bad;
on the good side, they exist and work as expected (mostly), but on the
bad side editing them in-editor is a huge pain. I think I can struggle
through it for this project, but if I were to expand this to a larger
game I’d have to find a better way of doing this. Anyway, that works
well enough for now, and Clickables can respond differently when items
are “used on” them. The final piece is triggering some outcome when an
item is used on the right object, and tracking global state. Then we’ll
have a game!
Dec 31 2019
I’ve been a bit sick this whole time, and woke up in a coughing fit at
around 5:30. After fighting being awake for a while, I finally got up
and found everyone else asleep (except Sara who I’d awoken). Sounds
like a great time for more Inventory work!
I redid the InventoryItem class as a scene so that it can have all of
the nodes laid out without having to create them manually; Godot’s
ability to use scenes both as rooms and as individual objects within
rooms is super powerful. I moved the existing logic into a new script,
added a new function to create the objects from the scene, and now I’m
getting click events on my InventoryItems. I only need two more things:
to make the item follow the mouse until your next click (to use the
item), and to figure out how to map “item_id: resulting text” on
Clickables so that items can be used on them (I expected this to be an
export(Map, String, String) var responses
kindof thing, but it’s not
clear if Godot lets you do that.
Dec 30 2019
Having taken some more time to ourselves, we left the house in the
evening to go work at a coffee shop, where I got the first half of the
inventory system working (the part where you can collect stuff) while
someone played their “chili song” on the acoustic guitar in the
background. Clever diddy about how chili for supper is the true test of
love. I’ve been to a few open mic nights, and this is amongst the
better ones.
To keep the interface simple, Sara and I decided that items in the
inventory won’t have a specific description; instead, you can
(optionally) get a dialog when you collect the item, but that’s it -
subsequent clicks on the item will use it. I think it’s important that
this game is accessible to everyone, and I don’t want to bog it down in
mechanics that don’t really add anything.
Someone else is on the mic now, and he’s really good.
Dec 30 2019
Sara and I got the chance to go out by ourselves overnight on one of the
islands, and it was a great time. We got to walk the beach as the sun
set over the gulf, have some tropical drinks, and spend some quality
time together without interruption. It was awesome.
After getting back, I put in logic to handle “openable” objects; things
like cabinets that can be opened to reveal their contents. I think it’s
finally time I tackled the inventory, as that is needed for most of the
rest of what I want to do.
Dec 29 2019
We made it to Florida yesterday, but it was a long day of traveling and
visiting, and I went to bed early - no time to work on this at all.
That said, the weather down here is beautiful, and before I head back
down to the pool, here’s an update that adds arbitrary-length dialog
boxes, broken into three-line segments.
I had some issues with GoDot’s limitations around export types - namely,
I can’t define export dialog_lines: DialogTextPool
as DialogTextPool
is a custom type. I’d expected to be able to define exported variables
in my custom class, but that’s not a thing. This is going to complicate
conditional dialogs; adding a global game state is high on my list, and
I was figuring on exporting a list of “(game state, dialog text)”
objects for Clickable
, but since I can’t export custom types I might
have to be more creative.
Anyway, my son’s getting impatient, so I’ll think about it later.