Between Scylla and Charybdis Developer Diaries, October 2013
I made the giant kelp ropes, but I don’t think I like the idea of using them as fish food anymore. Well, I do like the idea, but I'm not OK with how it would have to work out in implementation. I'm limited by the physics engine in a lot ways, but no matter what, you need to get the kelp to the turtle’s back so that the fish can feed on it, and there’s no nice way to do that. I suppose you could distract from this with an elaborate animation, but I don’t think the result would be up to par, nor do I think that it would be worth it. The kelp is pretty cool anyway, so I'll probably keep it as an interesting piece of benign debris.
So, bearing fish and kelp in mind, I've been thinking of other ways of fulfilling the same purpose. Collectively, fish and kelp provide an engaging way to indicate powerups and also to discourage the player from camping. The role of kelp was just to deepen the fish collection mechanic, so it’s no huge loss to get rid of it, but fish don’t feel substantial enough to stand on their own. There’s nothing solid yet, but certain species of shrimp and crabs are also known to clean turtle shells, so that’s the direction I'm going. It would be cool if crabs behaved like benevolent polar bears, because then they could share AI. Crabs can hang out on pieces of debris, and you can collect them on your back, and they will use their claw to protect you from one fatal impact, dying themselves in the process. Sounds good maybe.
I've been working on resolving some design issues that cropped up in relation to the removal of kelp and possible addition of crabs. The “fish bring you back to life” mechanic was never fully implemented, and I've been opposed to discrete “lives” since the beginning. Even though I drifted off track, upon re-evaluating the lives concept, I still hate it. It feels antiquated, and seems to accomplish very little. Lives are one of many features that one can use to cover up bad design with familiar structure. Still, the need for familiar structure is real, so I may go back to lives eventually, but for now I think I have something better.
One of the problems with lives, to me, is that they don’t make sense. Lives imply reincarnation, which implies magic, which doesn’t fit the theme of games that otherwise lack magic. Also, their purpose seems arbitrary to me. “Sure, you can try again, but only this many times. Then you've got to go back to the beginning.” I think this is a design remnant of coin operated arcade games that can safely be put to bed now. It’s tired.
If your character can die, you probably do need a way to reincarnate it. The only unmagical way to do that is to turn back time. So that’s what I'm thinking of doing. If your character dies, we rewind from that point all the way back to the beginning of the wave. The problem of magical healing still exists, in that your character should probably be magically healed when its reincarnated, even if it’s rewinding to a point where the character was actually injured during the normal flow of time, but some magic is always necessary.
Today I deimplemented the life mechanic that I started working on, and now I'm back to an infinite respawn mechanic. I wanted to clarify why I don’t consider the rewind mechanic to be excessively magical. It’s because I'm suggesting that the rewind resurrection is occuring outside the reality of the turtle, but rather in the meta space of the player playing the game. There’s no magical spell being cast, no time machine, no divine intervention, it’s a rewind that occurs in the world of the player, providing them an opportunity to pursue an alternative timeline in which they do not die. It’s a very philosophical way to rationalize things for myself, but that’s how I work.
I wanted to start working on polar bears, who I thought would sit on the ice sheets and swat at the turtle, but quickly realized this to be impossible. The scale of the ice sheets, the number that can be onscreen comfortably at once, and the way that they break when they touch the eye make it an infrequent occurence for unbroken ice sheets to exist for very long, which is just about the only place a bear could position itself. A single shard of ice is too small, and I don’t think the bear would be a very good aquatic predator in this situation…not having flippers and all. So one way to fix this bear idea would be to let the bears sit on the icebergs, rather than the ice sheets. I looked this up to see if it happens, and it apparently does, but rarely. I say, this is the apocalypse, there’s some rare shit happening, so it’s OK for me. The scale of the current icebergs is already just about right to fit a bear with some room to walk around, which is nice.
I ended the BSAC work day by experimenting with some new behaviors for icebergs. I've never been sure of how immovable they should be, but now I'm thinking that that they can’t be stationary, because it makes them too easy to abuse for their ability to provide cover. I do like using them as cover though, and it allows me to increase the amount of debris onscreen—if the player can in fact figure out how to use the icebergs as cover ;P. I just switched them from being completely immobile to having an infinite mass but very slowly creeping toward the eye of the whirlpool, and that seems pretty cool, but I'll have to save finding out for a little later.
I've done so much recently, I can’t recount it all, but I've severely tweaked the turtle’s movement, made the cracking and freezing mechanics more fair, developed a new way for icebergs to move, and made a bullet-hell style system for the debris.
I don’t completely like the changes I've made to the turtle’s movement, so I'll probably be rolling back to a happy medium some time soon, but it’s still never been quite right. It will stabilize eventually, but I've had to tweak it in response to the way I'd like for the ice level to play, so I'll have to reconfigure the tsunami level to account for these changes as well.
Icebergs now follow arcs across the play area instead of moving towards the eye. This behavior is more interesting, and saves us from having to have an iceberg breaking animation. Any object of a particularly large size needs to have a breaking animation in order to be sucked in to the eye.
Until now, most of the game’s debris was generated offscreen in random positions. Some exceptions to this are the nuclear barrels and the corner-clearing metal beams from the tsunami level. Now I've added positionable emitters that can be configured to emit an assortment of debris at a particular rate. An arrangement of these emitters, coupled with the forces imparted by the whirlpool, can be used to create bullet-hell style patterns easily, as the whirlpool forces will draw floating objects along approximately logarithmic curves into the eye. Actively moving the emitters can be used to create visually interesting and mechanically challenging patterns of debris that are fun to play and that, though rooted in randomness, feel orderly. I'll be using this bullet-hell system throughout the ice level. I think more complex patterns can be created by modulating the rate of emission, so I might play with that in the coming weeks.
I just rewatched some old footage of the game as I was organizing some files, and I'm surprised to see how much it has changed for the better. I wasn’t sure the design was headed in the right direction, but now I'm sure everything is on track.
The last 5 days have been extremely active, so I haven’t had the energy to write diary entries at the end of the day.
I continued exploring the arc-following idea for the icebergs and that turned out well. I spent a lot of time trying to balance the first 2-3 waves of the ice level, which consist of ice sheets, icebergs, snow balls, warm currents, and wind. Due to their size, ice sheets needed the most tuning, and I ended up moving to a 16:9 play-area resolution from an intentionally 4:3 play-area resolution. I tweaked the various physical properties of the sheets for a while, before deciding that the problem ran deeper than that. The sheets were just too big for the visible size of the world. I liked the scale of them in relation to the turtle though, which meant that I either had to scale the world down in order to fit more into a 4:3 visible area, or expand some available dimension of the screen in order to fit more at the same scale.
The play area was widescreen for the first few weeks of development, but I intentionally narrowed the play area in order to focus energy on the eye of the whirlpool. Since then, the game has changed significantly enough that I feel that the whirlpool can maintain its energy to the very edges of a wide play area. I've found the widescreen ratio to be more immersive, but it requires a differently parameterized level design in order to stay balanced with the standard play area. If appropriately tuned, I think widescreen can provide a better experience, but I won’t compromise the gameplay for the sake of it. So we'll have to see if I can make it work.
I changed the movement of the turtle a little bit, as I slowly hone in on what will one day be the perfect locomotion parameters.
The rotating system of debris emitters that I've got going on can make some really cool patterns, but it takes a bit of work to make them actually playable. I like stuff that works so naturally like this. I don’t need to lay out interesting patterns of debris/bullets on a grid, because I can make a few emitters spew some objects out in rhythm and it can make interesting and dynamic patterns with very little design work.
The game has become more fast paced lately. Debris moves faster, waves are shorter, fatally broken shells from a poorly chosen course are common. It’s strange, as I design, I work by trying to constantly keep the game fun and challenging for me. This produces a constantly advancing goalpost, because no one has played the game more than I have. I know everything before it’s going to happen, and I've seen it all. I've played this shit for a thousand hours I bet. I have to push the game further and further in order to pull even the slighest bit of fun out of it for myself. I'm not complaining, it just sometimes feels like I'm standing still with a constantly enlarging todo list in front of me. It’s true in a way, but I remain confident. Current goal: have the game in a fundable state within a month. Two levels, three songs, full sound fx, gui, art, and all the other shit. Back to work.
I fixed a huge bug today with the turtle’s movement. Apparently my lateral drag forces have been non-existent for a while. I knew it didn’t feel right, but now it’s back, and it’s certainly a big improvement to the handling of the turtle.
I tried to get gamepad input working, but something is wonky with Game Maker. Their gamepad support may or may not be only for XBox 360 controllers, and certainly doesn’t work with my old Saitek. The deprecated joystick API does work with it, but it took me so long to figure that out that I gave up before I pursued it any further. Besides, I don’t really want to build a deprecated API into the game, but I guess it’s better than nothing. I think it would be fun to play it on a gamepad, but also useful. I find different perspectives on the same project to be generally enlightening. When I added a zoomable camera to the game, I got a bigger picture view of the game world that helped me to tune debris patterns and character locomotion. I can envision a similar approach applied to a first person shooter, where a playable third person view could enable one to experience and tune different aspects of the gameplay that ultimately enhance the originally intended experience. My brief excursion with hacky gamepad input this morning was encouraging enough to continue down that path as soon as I slay a couple of more impending issues.
The ice level is in a fairly playable state at the moment, and I'm honestly enjoying the game, which is a relief. The ice level is extremely fragile right now though, with regard to changes in the flow of time, such as for rewinding and fast forwarding through the waves for testing purposes, but I'll fix that up tonight or tomorrow, and then clean up a bit and start working on the finale of this level. With any luck, we're still on track for a big release in just a few weeks, but it’s hard to tell. There’s so much left to do and the list never stops getting bigger.
I've gained renewed confidence in the project over the last several days. I can tell it’s going to be worth my while, and that I'll be able to get people to like it enough to pay for it. How much I stand to earn is another question, and this being my first published title, I don’t expect to be pulling in Notch money or anything, but 16-20 hour days have to amount to something. Luckily, Lux and I live poorly enough to stretch our earnings until our next release, but some cushioning would be nice.
Today was design-heavy, as I was able to fix the bugs on my todo list more quickly than I expected. The finale of the ice level will definitely be some kind of land-based challenge. I'm thinking that ice covers the whirlpool, and the turtle walks around on it, but it’s slippery, so they slide around, and there are polar bears, and piles of spiky ice detritus, and the ever-present eye of the whirlpool. There are lots of other ideas for hazards, including divebombing birds, crashed airplanes, sunken ships, and holes in the ice. I'm going to get the land-based locomotion code working again, and then start playing with this land-based gameplay before I roll it back into the level flow. This just makes it a little easier to test.
I'm still stuck on how to end the level, or any level really, but I tried some things many moons ago that might still have code floating around the engine somewhere. I'll approach that soon. I'm also getting really into the Ouya lately. Maybe I'm behind the times and against the grain, it seems to me that everyone hates the thing. I've actually been uninterested since the beginning, until now. It seems like a great way for indies to break into the console space. So I've been considering BSAC for Ouya, but I don’t even have an Ouya yet, so I'll have to see if I actually like it or not in real life before I say anything for certain.
Things have been going well. I'm going to finish the ice level tomorrow or the next day. The “screen freezing over” idea turned out to not be very fun on its own, and hard to get right, so I had to change it up. Now, instead of being forced onto a meta landmass, the player can climb onto moving icebergs in order to avoid an unsurvivable increase in the power of the whirlpool. Polar bears are seen standing on these icebergs earlier in the level, which will clue the player in to this possibility. I'll knock the bears off of the bergs while they're offscreen in order to make room for the turtle when the bergs come back around.
I also came up with the most cohesive story for the game that we've yet had, but it’s basically just a mashup of all of the stories I had written before it. I don’t want to spoil it, but it’s very emotional. I don’t really like sad things, but sadness is both powerful and easy, so that’s my direction. There’s a somewhat victorious climax, but wouldn’t the player remember more if they were crying? I think so.
I figured out an overall flow for the game, and it’s quite similar to my original vision. Each level can be stitched together with interstitial cutscenes, I don’t need any dialogue, and any GUI or menus are sparse. I want initial startup to skip any startup menu that there might be, but that might be overly romantic of me. Beating the game will unlock a special area, currently called “the island,” where players can access a single-play mode, change characters, and have an all around good time. The island provides an “in-world” or “canonical”, as I say, way of navigating certain end-game content. This is similar to the idea of kneeling in front of the statues(single-play mode) and altars(save-game) in Shadow of the Colossus.
I got my Ouya, and I like it, even though I got one with a shit controller. I actually have BSAC running on it, but I don’t have an HDMI input at my workstation, and my monitor will only run it at super low resolution through a HDMI to DVI cable. Ouya’s latest firmware update apparently broke debugging for Game Maker, so you have to do a full deployment, which takes several minutes. I'm putting it off for another day, hopefully when the bug is fixed. It seemed to run slowly, which isn’t surprising, but I don’t think I'll have a problem making it work. There’s plenty of room for optimization in the game logic, and apparently it’s standard procedure with the Ouya, and probably consoles in general, to render to a texture smaller than the screen, and then upscale that before blitting it to the screen.
The ice level is done, with the exception of polar bears and maybe birds, finalized wave layouts, and music, but most of the leg work is done. I was able to generalize most of the components of the tsunami level, in light of what I've discovered and developed for the ice level, and have since stitched it back into the game flow, fully functional, with cutscenes on both ends. I'm intentionally avoiding text, for the art of it, but also to trivialize i18n. So, I'm intending to tell the story with only cutscenes and gameplay. If the story is a little ambiguous as a result, that’s OK, as long as it’s still engaging. The specific details of the story don’t matter anyway, the player can fill in the blanks for themselves. For instance, the gender of the character is ambiguous at the moment, and I'd like to keep it that way, because I think people will be inclined to assume the turtle to be like themselves, which, I posit, will improve immersion.
If I keep working 20 hour days, I think we can release a 2 level, feature-complete single-player beta in about a month. This will also be Kickstarter time if we're going to do it at all, but we need to do some private playtesting first. The only way around Kickstarter would be to get enough pre-orders, from press coverage of the beta, to sustain us until we complete the game, which could be another 6 months if we want to do it right. I wouldn’t be surprised if we can’t get press coverage though. It’s better to fail with a 2-level beta than a 5-level masterwork that no one will pay attention to.