I met with Evan to discuss various effects and interruptions that happen while you’re trying to navigate the web.
I deleted the old syllable mode, and implemented a new one that uses the structure of the web, instead of having free-floating thought bubbles. This works much better with the new UI (especially the speech bubbles at the top). Also, coding will be much easier from here on out, because you’re always on the same structure when finding words/syllables.
And I implemented one of the interruption effects that Evan and I talked about: “Mind Rush”. In the screenshot below the human has just shouted “Answer me!!” while I was trying to find “apple” and then lots of new, useless thought bubbles appeared with words like “hurry”, “quick”, etc..
We have audio!
I pulled in another library (SDL2_mixer), and now there’s music on the menu screen (that fades in and out nicely) and sound effects when the goblin talks, when you click on a word/bubble, and when you arrive at a new node/bubble.
I’ve been sick, so it’s been a slow week.
I did some reorganizing of the code, so that the web effects (such as the letters wiggling around) can run on their individual schedules, and be triggered by anything, instead of being hard-coded to a progress bar.
And I met with Evan, and discussed the various web effects we’re going to have, and what will trigger them.
Once the human you’re talking to pulls out a pitchfork, all the years of composure training fail you.
Panic is one of the primary struggles in the game. You’ll rarely be able to avoid it – humans are just too scary. A goblin simply must do their best to communicate through the fear.
Panic can have a number of mechanical effects on the word web. They can also have overlapping effects, compounding the problem. Right now, there are five effects planned:
- individual text characters bob and twist about
- the greater the unease, the more extreme the character movement
- patience bar running low
- human threats
- MIND BLANK
- thought bubbles in the web poof away
- the greater the blank, the longer it takes to recover the web
- certain characters of words being wrong or cycling through wrong alternates
- as the panic grows, you must wait longer before the characters correct themselves. and more characters are affected
- low patience bar
- inexperience with new words
- words are replaced by their phonetic construction
- as the panic grows, more words are replaced, and they take longer to correct themselve
- severe human threats
- very low patience bar
- messing up a word
- inexperience with new words
- MIND RUSH
- web links spew out rapidly
- as the panic grows, words appear even faster, breaking the normal limits.
- very low patience
- a human demand – “Answer me!”
As you progress deeper into the human lands, panic will become a larger and larger part of the gameplay. Managing it will depend on skillfully handling the more difficult situations, and relying on the help of some objects or traits (for example, a romantic goblin can calm herself down by thinking of her paramour back home).
In addition to the panic effects, there are a number of status effects that also make navigating the web more challenging: being hungry, hurt, homesick, or hunted. More on those next week!
As I hoped, I’ve now got it set up so you can script conversations. Here’s the script for our sample conversation:
Now that I’ve got the code organized in a way that the sequencing can be driven by such a script, we can add some dynamic features, so you aren’t always looking for the same words every time you play.
I’m not sure yet if such scripts will be generated dynamically, or if we’ll add more dynamic options within the script (such as replacing “apple” with a list of words that would work there.) Probably some combination of both approaches, ie we’ll have lots of conversation snippets with some variability to them (such as lists of words that work) and code to dynamically assemble full conversations out of those pieces.
As promised, I made the speech bubbles more dynamic. The letters appear one at a time (quickly) and the next speech bubble appears after the previous one has finished typing. Also, the thought bubble web in the brain doesn’t appear until the dialog is almost done. That part of the screenshot looks almost the same though, since I mostly just changed how/when they appear.
I finally sat down to fix a long-standing bug where the whole web lurches a bit when you click on a node. The angles and distances of the links wobble/sway a bit over time. This creates a very cool visual effect, since it’s applied recursively throughout the web, but makes it tricky to get the code right when switching nodes.
I updated the rendering of the nodes to use the new, higher-resolution white blobs from Evan, and also made them bigger, and the links bigger, etc.. Now you can read the smaller nodes, even at 500×500 pixels (the size of the screenshot above). The individual letters in the thought bubbles noodle around a bit. It looks very cool while playing, but looks a little wonky when frozen in time in the screenshot.
Oh, I also put the finishing touches on the layering code, so that when the thought web doesn’t fit in the brain (which happens as you get frantic as the time runs out) the bubbles don’t float into the foreground outside the head.
I did some code cleanup, and got the code a lot closer to being able to script meaningful/interesting conversations. I’m looking forward to playing a conversation that makes some sense, instead of just hunting for words chosen at random (or the hard-coded starting word “hat” as shown above.)
Over the last week, I spent most of my project time reorganizing the code. Very early on in the coding for this project I focused on getting things on screen as quickly as possible, and not building up infrastructure that I thought I’d need later. Now that I’ve got basic gameplay working, and I’m starting to build more of the different screens (main menu, level map, gameplay) I know what sort of things I need from code organization, and so I’m doing that now.
It seems like boring progress for this week, but I think in the grand scheme of things, this is the quickest way to build the game.
My organization of the code makes it easier for me to work with graphical elements in groups that make sense. For example, when transitioning from the main menu to gameplay, there are a lot of elements that should fade in together (see screenshot below.) It also gives me an easy way to get the right layering.
Below you can see that I’ve started mocking up the code for speech bubbles. Currently their position and contents are hard-coded, but it will come to life soon.
Sorry the thought bubbles are so small and hard to read. I’m not quite done switching to the new target resolution / coordinate-system.
Most of my updates since last week have been on the graphics. I’m mid-way through reorganizing the code to handle our target screen resolution/coordinate system. The game will render to whatever resolution the screen is, but I need a coordinate system for coding, and also it’s nice to have a target resolution when deciding how big to make the graphics.
I’ve got a fun thing to share that I did finish though, and that is parallax scrolling. I brought some of Evan’s art to life by scrolling his layers behind the menu:
Sorry it doesn’t go all that far. My animated-gif-making-skills are a little rusty.
That’s all for now. More next week!
I thought I’d introduce myself, and then start posting weekly-ish updates about the coding side of things.
I’m Jason Woofenden (aka JasonWoof). I’m the programmer for this fine project. You can see a couple cool things I’ve built in the past on my site: https://jasonwoof.com/
So far I’ve mostly worked on the gameplay and rendering the word web. It’s playable (if you know what to do). Recently I added some fun stuff like animated talking heads.
I’m doing the vast majority of the coding for this project in coffeescript… because I like it. Since I’m expecting to spend about a year building this before any money comes in, I thought it was important to pick languages/libraries/etc. that are fun to work with. Since it’s more fun, I can work on this project even after a long day of freelance work.
That’s about it for code/libraries/etc..
Hopefully my next post will have a screenshot.
The plan is to have a number of short cutscenes – an introduction, interludes between the major sections of human society (farmers->city-folk->royalty), and for a number of possible endings.
At this point, we’re still not sure how those will be included – as movie files, or animated by the code itself.
I’m most comfortable animating in Flash, but we’ll see what works best!
For today, I whipped up a quick animation for us to play around with: