Postmortem (plus all the diary entries I didn't make)

Here was my thought process behind this game.

"Castaway" makes me think of escaping a mysterious puzzle island, like in PyWeek 25's The Desert and The Sea. But programming walking around on ground is hard. What if you stay on the water and just travel between islands, like Wind Waker but you're stuck in the boat. Okay, but then what's to stop you from just riding off into the sea? It would be cool if that just sent you back to where you started, like the Lost Woods. You know what would do this really well? A sphere. Guess I'm making a 3d game.

So, you're on the water and we need some puzzle mechanics. Raising and lowering the water is classic. But how would that work on a tiny planet? If you raise the water everywhere, where does it come from? I guess what would be the most intuitive is raising it on one side while lowering it on the other, like a tide. So I guess you need some way to control the location of the moon.

And that was enough to start with. I'm a little surprised that someone didn't see the connection to the theme? I felt like this was one of my most overt uses of the theme. No big deal.

I enjoy puzzles where part of the challenge is figuring out what to do, but I think you have to be really careful with them in PyWeek. Judges, myself included, are likely to move on if it takes too long, which is bad if you want your entire game judged. I knew I would never be able to tweak the puzzles to the right difficulty level without play testers, so I needed an easy mode, or set of hints. I originally planned three modes: medium (the default) would not include instructions, but would include hints from the character, possibly in voiceover, (e.g. "Hmmm, those trees look dry....") Easy would have the voiceover plus the instructions, and hard would have neither. I didn't have time for voiceover, so we basically got easy and hard. But neither seemed like a good default: starting on easy would spoil some of the fun, but starting on hard runs the risk of players forgetting about easy mode and just giving up. I really like the compromise of having easy mode always available if you take a deliberate action (although I could have chosen a different key). You get a message reminding you it's available if you haven't made any progress in 60 seconds; that might have been too aggressive. You have to hold the key down instead of being a toggle so that nobody accidentally left it on and spoiled the next challenge for themselves. It's kind of weird UI, though. I guess it could just turn itself off after each challenge.

I really enjoy setting games on spheres like this. I was hoping that people wouldn't realize it was a sphere at first, and that when the camera pulled back enough to tell, it would be a big twist as you suddenly realize just how trapped you are. Commenters said the game starts out too close up, and this is why. I originally imagined the "twist" would happen at the end of Act 1, but I could tell that would really frustrate people, so I moved it up much earlier, to about 1/3 of the way into Act 1. I gave the islands suggestive and distinctive names, hoping that someone would try to map it out, and realize it was a sphere that way, before the reveal.

Judging by the comments, this completely failed. I guess most people were able to tell it was a sphere from the beginning? I wonder if there's a way to salvage it so that it actually is an impactful reveal. If not, then I definitely would start more zoomed out. I also wanted the reveal that you were moving the actual moon to be a surprise as well, which is why you can't Tab to zoom out until after you've used the Tide Summoner for one challenge. I wonder if that reveal surprised anyone.

I got a late start on the puzzle design. As late as Wednesday, I didn't really have any good way to use the changing water level, and I was considering scrapping the puzzle altogether and just making an action game. But then I thought of watering the trees and that was enough to get me unstuck. I've fallen out of the habit of thinking about my game ideas during the week before PyWeek. It definitely would have helped here. I could have used another day at the end to handle a few loose ends.

My PyWeek 17 entry Eclipsed was set on a sphere like this, and I learned from that experience that spheres are really confusing for players. I think that Mario Galaxy keeps its spherical areas manageable by having a series of small challenges on individual spheres: typically you only spend a minute or two on each one fighting a couple enemies, and you don't need to do much navigation. At any rate, because of this, I went as simple as possible. 6 islands laid out like the faces of the cube, and disks appear at one of the 8 spots corresponding to the vertices of the cube. This means that there's just not much stuff out there to keep track of, and you can find where you're going by wandering for just a little bit. I considered having you teleport from one planet to another once you complete each challenge, but decided it's more appropriate to the genre to have the world change, with objects appearing and disappearing, and the trees resetting. Fortunately the tree watering mechanic was not too hard to incorporate into the various challenges, so I could reuse the islands in multiple puzzles. I'm mostly happy with the various mechanics involving the moon, although I'm certain they could use some tweaking. The one I left out because I just couldn't get it to work was having two moons you could control separately.

A little about the graphics. The game is flat shaded. This was an early decision, made the first time I realized that if I wanted lighting then I would have to calculate normal vectors. I was concerned that flat shading would look terrible, but I think it turned out okay. The one thing that just looks bad is the player vehicle (as one commenter astutely noted). Procedural generation is apparently easier for natural objects than for vehicles. I really should have used Blender for this, but I'd already done everything else procedurally and I was worried about not getting the OBJ loader to work right, especially since I was flat shading. I did try a procedural boat-like shape at first and trust me it looked even worse. I definitely should have left myself more time for this.

I'm not really happy with my usage of PyOpenGL. I want to be off the fixed function pipeline, but I don't want to have to go all in on a library. I think I want some boilerplate shaders and example usage code that I can copy into my program and tweak as necessary. I would have liked to have written a fragment shader that would do a procedural nebula for the sky box, but I couldn't figure out how to make that work with the fixed function pipeline.

I can't believe I had some code that just happened to be a syntax error on Python 3.7 but not 3.6. What are the odds? Someone did helpfully point it out during the upload period but only with about 2 hours left so I missed it. Next time, in addition to making a post about it here, I'll ask people on Discord to test it out early.

Thank you to everyone who tried the game! Congratulations to our winners, Tee and Team E! Thank you very much to mauve for running things so smoothly, it's always a great time!

(log in to comment)


I was the one who said I didn't see the connection to the theme, though I didn't rate you any differently for it.  Having islands doesn't inherently suggest to me that I'm cast away, and the game didn't really make me feel like I was a castaway or trying to survive or escape (disclaimer: I didn't play the game until the end).  Doesn't matter to me though, since it was still a good game and impressive for PyWeek.

I didn't realise it was a sphere right in the beginning, but I did feel like I was randomly bumping into islands because I couldn't see much.  I didn't mind having to figure out what I had to do (good choice not adding voice-overs), though did feel that I was kind of stumbling through the game until it opened up a bit more.  Nonetheless it was very pleasant and satisfying to spring the islands to life because of the excellent sound design and the decent animations.

Excellent work, in any case.  Glad to see that at least you got second place.

Hey Cosmo, congrats on an awesome game! I had to chuckle a bit when I read your comment "programming walking around on ground is hard" but then "(I'll set it on) a sphere" which is probably more difficult with all the topsy-turvy geometry and coordinate transforms etc. :). The connection of the game to the theme seemed obvious to me. Personally, I found the camera reveal worked perfectly ... I guess everyone's perceptions of these things is different, but I went through the process you describe where I thought things were flat and then got to about the 4th island when I thought "hang on, I've seen that island back from the direction I came .... I'm on a sphere!" I liked the way the camera starts off kind of frustratingly small and then zooms out to the proper level. Same deal with the moon: I had no idea what the pole thing was, just knew that I needed to put it on the island to get the thing to work and then after that puzzle saw the moon, and that was when I realised the water level was changing (didn't actually perceive this until I saw the moon).

For the sky box nebula, you could procedurally draw this to a numpy array or straight to a pygame surface and then bind to a texture and render the texture to the skybox faces? Could avoid the use of shaders?

Overall, I think this game (plus your other games) does a exceptional job of leading the player through an experience taking into account how the player will respond/react to things as they go without having to be too overt, or require me to read instructions beforehand, and communicating what is going on without having to use text etc. The hint system is a great way of having a backup for if this doesn't always go to plan: I think with a game like this where you are aiming to do something very innovative in such a short dev time, you will always need a fallback like this for some players.

Thanks for the write-up! I thought that the idea of manipulating tides was very clever.

I was one of the people who felt that the zoom at the beginning was more disorienting than anything, but now that you explained your intentions, I understand what you were aiming for. I like the idea of the reveal, but I didn't feel the effect while playing. My issue was that it was too zoomed in and it was hard to get my bearings, especially as a 3d game. You could try zooming out a bit more, but then you would reveal more of the fact that it is a sphere. Maybe you could cheat a bit by having a more orthogonal perspective in the beginning.

I'm surprised that you started designing the puzzles late, I had a lot of fun solving them (although it was a bit finnicky to get the positions right). It took me some time to figure out what was happening at first, but once I got the hang of it and understood the tides, I started getting into it. To be fair, part of the reason I figured out the tides was the name of the game. Unlike mit-mit, I first noticed the tides, and only then I realized that the pole thing was actually the moon (it wasn't obvious, it looks more like a pole than a moon). I wonder if you can make a tutorial level that is impossible to solve without figuring out the effect of the tides and understanding that you are controlling the moon. The process of discovering the main mechanic is fun but a player who stumbles around the game without fully understanding the mechanic might not enjoy the game, and I think that's more important (to be fair, I think I have a similar issue in my own game).

Anyway, this was an excellent game.