This game was built by me and my friend David Wester. Our friendship dates back to our days of doing improve/sketch comedy together. I have some amount of skill with art and coding, Dave can write and compose.
There were some things we wanted to do before the jam theme was known:
- "Indirect control" of the player/game
- Something with a story and dialog
- Use of the crank
After getting the theme—scary heartbreak—we brainstormed it, and felt that "scary" mapped onto "indirect control" pretty well. We didn't want to do a romantic heartbreak, so we talked about other kinds: failed investments, dashed hopes, general disappointment.
It occurred to us that ghosts are a good candidate for "indirect control." A poltergeist doesn't just walk in and announce themselves; they mess with stuff around the house to get their message across. Something about the radial nature of the crank led us to a round seance table, where you choose the seance attendee to haunt.
The technical foundation
IWDB (I Was Dead, But…) has no visible player character. Instead, it presents a series of mini games with their own challenges. Your main room is that seance table:
The pointer-finger is controlled using the crank. This works the way you might imagine:
on turnFinger do
// remember the previous selection; it could be handy
previousTablePerson = tablePerson
if angle>280 then
// seat 1
if angle>300 then
// seat 2
if angle>340 then
// seat 3
tablePerson = 3
else
tablePerson = 2
end
else
tablePerson = 1
end
else
if angle<80 then
…
This took a little bit of sketching on paper, but it was fun and not all that challenging in terms of "math."
Probably the biggest piece of work in the game was hooking up the dialog. Instead of using simple say
statements, we wanted a custom dialog view with a large avatar:
This is its own room, which looks like this:
To say a line of dialog somewhere in code, we call
dialogLine = 1
goto 1,1 in "dialog"
On entering the dialog room, it steps through a huge if-then-else
chain to say the right line:
if dialogLine==101 then
dialogPerson = 1
call "drawDialog"
say "Oh dear, I'm feeling faint. Would you mind if I stepped into the other room and sat for a spell?"
drawDialog is a function in the same room which draws the avatar (out of 9 tiles per character) and the character description:
tell 4,10 to
swap "p{dialogPerson}t1"
end
tell 5,10 to
swap "p{dialogPerson}t2"
end
tell 6,10 to
swap "p{dialogPerson}t3"
end
…
if dialogPerson==3 then
label "PROF. MALTHUSIUS" at 9,10
label "Medium, Guru, Yogi, CPA" at 9,11
label "Seance Organizer" at 9,12
This is a little tedious, but it only had to be written once.
Another slightly slow task was drawing the "illustration"-style art, instead of sticking to 8-px mazes.
I've had some experience doing this in Pulp in the past, so it was fun.
Beyond this, we'd love it if you just played the game!