The Gödel Sentence
The world has been decimated. A rogue nation launched a bio-bomb into the upper atmosphere releasing a pathogen into the world's water supply. Within weeks cities were deserted, people dying within 3 days of infection.
You are in a small group of survivors. You must distribute the remaining water amongst your group. You don't have enough water for all to survive.
Use the data available to you to decide who gets water and who doesn't.
The game can be played only once, so choose wisely.
Requires python3 and pygame
There are two known issues, let me know if you find more
Ratings (show detail)
v0.3 - final version (fixed case sensitive file)
v0.2 - final version
v0.1 - test upload
Second screen shot from Wednesday
The Gödel Sentence - Post Mortem
“The Gödel Sentence” is a true but unprovable statement. It comes from Gödel’s incompleteness theorem that says that in any closed system there are things that are true but you can never prove them. The Gödel sentence is such a truth.
My game was about making decisions with incomplete data. There are truths about the world and the people that you cannot prove and yet you still need to make a decision; you have to decide who gets water, you have to decide who lives and who dies.
The name is also a pun on the word “sentence”. Your job, in deciding the fate of the five people, is a punishment. You are sentenced to choose. There is no right answer to the game, there is no way to win and so you are a prisoner to the role.A Rhetorical Game
I read Ian Bogost’s book “Persuasive Games: The Expressive Power of Videogames” (https://kindle.amazon.com/work/persuasive-games-expressive-power-videogames-ebook/B001ITLCVS/B005VQ015W) . It describes a way of making games that are intended to give the player a deeper understanding of systems. Games designed around a “procedural rhetoric” allow the player to explore a model for how something is working.
I loved the idea and wanted to try to make this kind of game. I chose to base the “rhetoric” on the decision making process. In any decision you have a decision maker, a decision, a time deadline, some facts feeding into the decision and some outcomes that the decision maker is trying to optimize. I set up Gödel to have these very elements and pretty much nothing else.
In the game your only action is to decide who gets water and who does not. The facts come to you through the conversation and the occasional chart. At some point in the game most players will have to ask themselves what the basis is for their decision. Since there is no way to win the player may start to question and doubt the basis for their decision making. At the end of the game the player may reflect on how they came to the decisions and whether they would make the same ones again.A Single Play Game
In order for players to have the experience I wanted I felt it was important that they knew they only had one go at the game and that they could not just save and reload and try again. It was part of the “procedural rhetoric” that a decision, once made, is permanent.
And here I cheated! Anyone who tried it knows that you can play the game again. About half way through I got worried that there might be a bug or some other reason that people had to run the game multiple times and in the context of the competition this felt like too big a risk.
So I bailed on the idea of enforcing the run-once feature but I continued to refer to this in the game load screen and in the help text. I apologise for this deception! I felt it was necessary to get people to approach the game in the way I intended and I thought that saying “it’s intended you play this only once” wouldn’t achieve the same effect.World Building
World Building was a new technique for me and helped tremendously. I read Veronica Sicoe’s excellent blog (http://www.veronicasicoe.com/blog/2012/05/13-worldbuilding-questions/), which provides a list of questions to use to build a picture of the world your characters are living in. There are similar questions for your characters and their character arcs.
Answering these questions really helped me to build a clear picture of the world and who the characters were and who I wanted them to be by the end of the game. This made dialog much, much easier to write. Time spent in tuning aspects of the world paid back hugely when I got to writing specific conversations and monologues.
It’s not just about making it easier to write. Even though lot’s of the world building “facts” don’t make it into the game they tend to bring much more coherency to the experience.The Characters
I wanted all the characters to be different and bring their own strengths and weaknesses to the group. It was important that there are no obvious heroes and villains since the player is supposed to have to find their own basis for decision making.
The facts reported to you, like the hydration level etc, are intended to raise suspicion but remain ambiguous. This is part of the “incompleteness” theme.
Has Amber found another well and is she keeping it to herself? Is Dax secretly eating more food? Is Brock trying to manipulate others and turn them against each other? Is Crystal going to endanger the group by bringing strangers in? Is Eva a disruptive force? Will her anger boil over?
None of these questions are resolved in the end. That’s partially by design but I would have liked to have resolved some of them because not answering any questions makes it seem a bit too loose.The Music
I really got lucky with finding the background music on the Free Music Archive. I wanted something that would evoke the unnerving, unsettling world that the characters were in. The music had to be dynamic with highs and lows. And it had to last for the whole length of the game!
I’m so impressed that others achieved dynamic music in their games. I’d love to try this in a future game. I had to rely on the dynamism that was already in this piece.
There was a great quote from Philip Glass on making music for films where he says that he likes to create a distance between the music and the on-screen scene. Pair some sad music along with a relatively happy scene. Put some upbeat themes against a calm section of the film. He says that this creates engagement as the viewer needs to use their imagination to link the music and the action. “What is sad about this happy scene?”, “What is the underlying dynamic nature behind this calmness?”
Since most of Gödel is in the player’s mind I wanted this music to create some of the distance too. Just listening to the track on its own is a journey but not necessarily the same journey as the characters in the game.Is There a Way To Win?
I think it is impossible to save everyone, which was by design.
You can save three people and it may be possible to save four if you immediately decide to sacrifice someone but it’s unlikely that anyone could find that in a single playing. Brock drinks quite a bit and his health drops quickly when he is thirsty. Eva and Dax don’t lose health so quickly so you can allow them to go thirsty.
This assumes your decision basis is to try to maximise the number of survivors rather than, who in particular, will survive. You can easily save one or two specific people. If you try to save everyone or prolong everyone, then you can end up with nobody alive at the end!
I built a spreadsheet model of the core health / water system and used this to tune the settings. This turned out to be immensely useful as the underlying model has lots of parameters and starting properties. The spreadsheet allowed me to play around with these very quickly to make sure I had the right balance.
Playing with the spreadsheet was quite a lot of fun and I wondered if I should expose that as an alternate play mode of the game, cutting out all the dialog altogether. I didn’t have time for this but I may think of this for the future.Pygame and Pgzero
I used pygame and pgzero which turned out very well. Pgzero is quite mature considering its young age and takes on most of the heavy lifting with the sprites, sounds, and animation. The auto-loading of resources makes it quick to add content.
I had to add scaling, rotation, and visibility for pgzero’s actor classes and I built a Text actor to handle the text rendering in a consistent way. I needed dialogs and gauges but appart from that there wasn’t much work on the engine.
The animation system works very well with pgzero. I’m really happy with how the clock and water came out and this is mainly down to the animation. The core widgets are simple and the animation makes them look like they have some physics in there when they really don’t.Overall
I’m very happy with how the game turned out. Thanks to all who played, ranked, and commented. I really appreciate that. People’s comments seem to indicate that the game achieved the effect I was going for.
As always it was a challenge to get everything done within the week. This time around I only had up until Thursday to work on the game and that posed a different kind of challenge since I could not rely on the final Saturday and so had to complete during the working week.
Project management and being ruthless about working on the most important aspects of the game at any given time are always key to completing.
See you all next time!
I made a walkthrough video of the complete game. Yes, I said complete game so this is basically one big spoiler. But if the game wont run for you or something then you can use the video to see how things turned out! Of couse you would have made better decisions than the person demoing here (ie me!).
If you are having problems then let me know. There are two issues I know about.
Day 6 - End (really the end!)
Well I reached the end of my time for this pyweek and the game is done. Not done, done, but kinda done!
I'm reasonably happy, or as happy as you can be at 2AM after a day of work and 7 hours of coding. I had a nasty bug that really put a downer on the last day. I squashed half of it but the other half is lurking there. If you see some weird disjoints in the conversation, like there's a missing line ... then that's the bug. It's not my horrible writing!
There's some other weird things too. Depending on how you play you may run out of dialog right at the end. (yes, I wrote 219 lines of dialog and you can still run out ;) Also it takes like 20s to start on Linux. Just a few seconds on OSX, so I'm not sure why that is.
But overall I'm very happy with it. It has the feel I was going for, at least when I play it.
When you play, it tells you that you can only play the game once. That's the idea. You are supposed to try to experience the game as a single playthrough (12 minutes) because it is a game about using incomplete data to make hard decisions. So playing it multiple times sort of defeats the objective!
Anyway, I'm off on a short trip and back on Sunday, so I could conceivably update this version in case there were show-stoppers. Good luck to everyone. Hope you get your games finished (and not at 2AM!)
Day 5 - End
Very good progress today. One thing that really helped was that I was able to build a spreadsheet model of the core gameplay and use this to tune the parameters to get the right level of difficulty and interest. That saved me a great deal of time running the actual game because I could iterate around over parameters (there's about 20 of them!) much quicker and see how the whole game would play out
I also managed to play through end-to-end and I'm happy that the feel of the game is what I was looking for. I still need to complete the dialog (yes, still stuck at 30%!) and do some polish and tuning but I think I have enough time for that tomorrow before I have to submit.
Here's another screenshot.
Day 4 - End
Finally the core of the game is up and running. I have the main gameplay loop working alongside the story.
I can see the elements coming together but there is still a lot of tuning to make it fun, and not confusing, to play. I probably have about 30% of the dialog written but I'm less concerned with that at the moment as I need to do much more on getting the core loop fun.
I found a neat way to be able to incorporate the data charts without too much programming effort and this should help the story also.
With only two days to go (for me) I'm probably about on target but it is really going to depend on how long it takes to tune things. I think I've managed my planning and energy level a bit better than in previous pyweeks so I don't feel too tired right now.
Day 3 - End
Good progress again today. I finally got around to writing some story and dialog. I realised I had no real idea how to get the dialog and gameplay to work together so I needed to solve that problem. I have a partial solution and hope that the rest will become clear tomorrow!
Tomorrow will be dedicated to getting a playable form so that I can be tuning on Wednesday and polishing on Thursday (my last day). I'm probably a couple of hours behind although I think I have a bit more time than I originally though. Still, some of the more ambitious elements like charting might have to be regretted if the story/gameplay don't come together very quickly tomorrow.
Day 2 - End
I made a lot of progress today but there is still a long way to go and I probably am now a couple of hours behind the plan at least!
The overall engine is complete and the basics of the game logic are in place. I made significant progress on the graphics but not really any on the story. That really needs to come together tomorrow or I don't have a game!
Here is an early screenshot
Day 1 - End
The end of a short day (US timezone).
I've got the health model and the conversation engine built. These are two of the most important components.
I'm part of the way through building the visual components. Tomorrow is my only full day on the project as I'm tied up on Friday / Saturday of next week. So I need to get the game up and running and get a good deal of the dialog written and at least make a start on the graphics.
I'm probably about an hour behind where I planned but overall the progress is good.
Day 1 - Start
Just getting started on my game, "The Godel Sentence".
This is going to be a story-driven game where you have to make some tough decisions by weighing up the various kinds of data available to you. Of course there will not be enough, or maybe there will be too much, who can tell!
I'm going to use pgzero, which seems quite nice and will save quite a bit of time building an engine.
Good luck to everyone!