Archive

Development

Well, it’s been a busy month. That’s putting it somewhat mildly – the last week or so has been possibly the hardest I’ve ever worked on a project, putting in anywhere from 8-12 hours every day and culminating in one last completely brutal 14 hour day on the first of February to wrap the project up. It’s still not perfect, I could definitely find plenty to do if I wanted to spend a week or so on polish and fixes, but for now I really just need to let this one go, because I’m exhausted and I want to move on to something else.

For January, I participated in Wizard Jam, the Idle Thumbs community game jam. The premise of the jam is to create a game based on the title of an Idle Thumbs network podcast, and since many of those titles tend to be weird and imaginative to start with there’s plenty to work with. I picked The Convergence Compulsion, and then later when I found out that someone else was interested in using the same title, appended the subtitle “The Satisfaction of a Job Well Done”, another podcast title. My very early conception of a game to go with this title was a fast-paced 2d puzzle game in the vein of a match-3 or Tetris where you tried to get different laser beams to line up, but the idea that eventually captured my imagination was a game where you build machines out of elements that emit power, manipulate it, and then turn it into some sort of work. Along the way, it shifted away from the idea of building complex machines and towards figuring out a solution to a puzzle made out of a few components and a number of simple humanoids, kind of like the games The Incredible Machine and Lemmings. At the end it came out pretty close to that, except most of the humanoid behavior had to be cut/simplified.

The concept of Convergence Compulsion is that you work for The Convergence Corporation installing hardware in different locations. The hardware usually consists of at least one power orb, which emits power particles, and at least one converger, which attracts them, and then using these and some other devices which focus, reflect, or split these particles you need to power different machinery. This ended up being kind of a finicky concept – Sometimes machinery ends up getting accidentally powered on just due to random chance, sometimes it takes a while to get the equipment specifically where it needs to be to focus particles, sometimes solutions I didn’t anticipate work and sometimes solutions that should work fail to because I didn’t script the levels to account for them. For the most part, though, I think I’ve managed to achieve the game I had in mind.

Here it is:

Convergence Compulsion: The Satisfaction of a Job Well Done

 

In addition to this, Wizard Jam 8 participants created a number of other great games, many of which I commend to your attention. A few standouts among those I’ve played or seen played thus far:

I’m exhausted but generally pleased with what I accomplished during January, which brings us to February. Now, I had originally planned on making another game this month, a 2d platformer project so I could better understand the capabilities and methodologies of Unity 2d development, but right now I’m really ready to just not work in Unity for a while. Thus, the 2d platformer project is getting pushed back one month to March, and for February I’m going to be focused on writing music, ideally with the end-goal of making another album. I have a few tracks floating around already, so it will really only take maybe 5 or so more to have enough for an album, but we’ll see where I end up. Even if I don’t end up having enough it’s fine, I just want to spend this month making as much music as I can and definitely not programming.

Advertisements

Eh well the December project didn’t really go anywhere. I can at least put some screenshots of how far I got before I decided I’d kind of messed up:

I spent a week or two planning this building layout, figuring out Pro Builder (a tool for constructing 3d objects within Unity), and picking up the basics of other tools, such as Unity’s terrain system. In the end, I was… dissatisfied. I felt like I had just the very edges of what could be an interesting environment, but Pro Builder was becoming increasingly unfriendly the more I worked on it, and small issues with the geometry got harder and harder to fix – leaving me unable to make important changes, such as adding more windows.

I then decided that I needed to be able to work on this in a more full-featured 3d environment. I don’t know whether this was a good or a bad decision, but it was definitely the beginning of the end for this project. Originally, I’d hoped to just export the model from Pro Builder into Blender, a free and very full-featured 3d editing software. Unfortunately, all of the work I’d done in texturing and detailing the environment in Pro Builder came to work against me, with every separately textured subsurface of the object exporting as a separate element. I’d hoped to just drop my old work into Blender and immediately start work again, but this proved to be unfeasible. Over the next few days I studied the basics of Blender, and I began to reconstruct the building – but it is, after all, very difficult to be enthusiastic about doing the same work twice, and my capacity for enthusiasm is inconsistent at the best of times.

At this point we were pretty close to Christmas anyway, and my attention went away from getting game work done and towards all of the preparations that came with that. After Christmas I was mostly focused on cleaning and thinking about what the next year is going to look like. I’m still thinking a lot about those things, but it’s time to start a new project…

Well, close to it anyway! I’m actually not quite done with holiday stuff, and will be traveling for the next several days. Once that’s past I’ll have all month free, and hopefully by the time I get back home I’ll have a solid idea of what I want to work on. I do have a general plan of approach, though, for what I want the next several projects to be, based on the skills I want to pick up and practice:

January: Wizard Jam. The Idle Thumbs community runs a semiannual game jam where people spend a couple of weeks making a game, usually based on the title of one of the podcasts. This community has been a great source of support for me over the last couple of years, and though I’ve participated in the Jam a couple of times I’d like to put some work into something I can really be proud of this time. I’d also like to collaborate with at least one other person.

February: 2d Platformer. I would like to spend a month putting together a simple but complete 2d platformer. The purpose of this is twofold: First, to create a game simple enough that I can focus on creating content for it, and second to gain an understanding of how 2d works in Unity. The latter is important because it’s going to determine if, when I return to work on EverEnding, I continue that project in Flash or reimplement it in Unity. Probably the former, but I want to be open to the latter.

March: Album. I miss writing music, and though these other projects will probably provide opportunity to do so I’d really like to make it the focus of my efforts for a while. There’s a slight chance I might swap this one to February, since I’d prefer to dedicate fewer days to it and more to the 2d game, all else being equal.

April: EverEnding, Chapter 1, Part 1. I think if I really focus for a month, I can create the introductory areas of EverEnding to a degree that is, if not finished quality, at least close enough that I can finish most of the rest of the game before I take another quality pass. If I hit this milestone, I’ll start regularly setting up work months like this. I really don’t want to abandon this project! But I don’t want to be okay with it taking forever either.

All in all, it’s hard to be upset with how this month went. I’m disappointed that the project didn’t turn into anything, but I’m hoping I can keep up the momentum I started in learning these 3d tools, which have generally been a weakness of mine for a long time. I learned a bit more about the danger of trying to do things the ‘right way’ as well – this has been a vulnerability of mine for a long time, of feeling bound to execute whatever I feel to be the ‘proper’ way of doing something. The proper approach, though, is the one that creates a game, and so far that seems to elude me.

Hopefully, in a month, this space will describe my new Wizard Jam game – or games? Until then, hopefully I can also manage to keep up on Problem Machine blog posts a little bit better than I’ve been managing the last couple of weeks.

The first of what will hopefully be many monthly projects is complete! This ended up being a little bit more along the lines of a prototype than a complete game, but I expect that most of them will – and it’s still quite playable for what it is, I think. Click this text or the above picture to download the game.

I learned a lot about how Unity works doing this. Starting from the incredibly basic Roll-A-Ball tutorial provided by the Unity team, I added a jump (which didn’t make it into the release version, but which I am quite pleased with nevertheless – if I end up creating a more complete and sellable version of the game it may find its way back in), then added an advanced camera and gravity beam. Most of the development time went into implementing and tweaking these effects, and I’m very pleased with the overall feel of it now, though certain aspects, such as the simple “X” beam cursor and the occasionally clumsy camera, could use improvement. The game is unfortunately still rather unoptimized – I’m unused to 3d optimization in general, and also more specifically unused to optimization in Unity, and also most of the few things I do know about optimization have to do with ensuring that the game doesn’t render things the player doesn’t need to see – which, in this game, is honestly not very many things, since movement speed can be so fast and can change very quickly the player really needs to be aware of where all the platforms are at all times. That’s one reason I wanted to make the player character reflective, so that you have some idea what’s around you even if you’re not looking in that direction. Unfortunately, because the character is reflective that means even the parts of the level you’re not looking at need to be rendered, so it really does affect the performance.

So, what did I learn from this project? What went right and what went wrong? About halfway through, I was imagining a game with approximately the same gameplay but set inside a giant office or other mundane room. This would have been difficult to do, because I have very little experience creating a realistic 3d space, so eventually I decided to make a more abstract “cyberspace” world. This helped me create a simple level quickly, since I could really just throw together whatever geometry seemed interesting without any concern as to creating textures or ensuring everything was to scale, and also allowed me to create a very open space where the player could do almost anything with the gravity beams. I knew early on that I wanted the player to be a glass sphere which shattered on hard impacts, partially inspired by Marble Madness. It took me quite a while to figure out how to create the shattering effect – I eventually found code to create something along the lines of what I needed, but had to modify it slightly but significantly to suit my purposes. I’m pleased with the final shattering effect, though it sometimes renders in ways I don’t expect.

I tend to think of music creation as coming fairly quickly and easily to me, but it was actually difficult under the time pressure of the last few days of the project. While I like the track I came up with well enough, it’s shorter and simpler and has less production work than I usually like to put into my musical work. I think it’s well suited to the game though, and I haven’t gotten tired of listening to it yet which is a good sign. The sound effects were mostly pulled from freesound.org, though I modified many of them quite significantly, mostly to make the glass sound a bit more musical when it struck or rolled.

All in all, I’m quite satisfied. It might not be the most ambitious project, it might not have a ton of content, but I do feel it offers something unique and that I have executed it to a reasonable level of quality. I may revisit this project sometime next year and try to develop it into a complete game, which would involve adding a bunch of new levels, leaderboards, and ideally some sort of head-to-head racing mode.

For December, I’d like to try to patch up a weakness of mine: The same way as P1aySpace ZER0 was an opportunity to learn Unity, I would like to take this opportunity to learn to create the kind of realistic 3d space I opted out of making for this project. I’m not sure yet what kind of game I would be setting in that environment, though I have a few ideas — first I want to plan out and construct this space, then I can see how much time I have left, during this very busy month, to build a game into it. Hopefully I will be as pleased with that project as I was with this one.

Oh, before I forget, since this game turned out quite a bit more difficult than I had initially expected it to, here are a few tips:

  1. Use the repulsor beam. Though going fast is fun and satisfying, you will almost certainly destroy yourself if you don’t use the repulsor to slow yourself down sometimes.
  2. Don’t worry if you miss a gate. Until you get down to the last couple of gates, missing one usually sets you on a trajectory to hit another. Every missed platform is an opportunity to swing around and fly in a different direction.
  3. Rapidfire the beam to climb. Once you’re holding yourself close to an edge with the beam it’s usually possible to climb or swing up, but getting there in the first place requires you to pull yourself up with the beam.

Happy rolling!

I always love hearing about the points in game development where a big decision was made not to do something. Every game has moments like that – cut features, changes in design focus, unused assets – and they’re always fascinating, because they show a vision of what the game could have been, what it almost was. Sometimes whatever it is sounds more appealing than what we got – and, just as often, it sounds like it would have been a disaster, and a bullet was dodged.

It’s not just games that undergo this process, this cycle of growth and pruning, though it tends to be far more visible in games because it takes so long to make a game and the process leaves more behind in the form of demo footage and unused content. Every creation is the sum of countless decisions, decisions so small and subtle that in the moment of creation we don’t even notice we’ve made them. Every choice folds in on itself, and builds outwards, in such a way that a single slightly different choice made early on might butterfly effect out and completely change the whole project.

Then again, it might not. Because a decision made early on has so many later decisions stacked up after it, it is in some ways less important than a decision made later on in the creative process. For example, so many artists set out to create something new, to break their creative habits, and set out a sketch in a bold new style – only to find that, as they fill it out and polish it, it begins to look more and more like their previous work, the many intervening tiny choices of detail acting together to overwhelm the few big bold choices they meant to define the piece.

With all this in mind, it becomes increasingly difficult to see whether a given decision in the process is a good or a bad one, because what determines whether an artistic choice work or not work is entirely whether the future choices built on top of it make it work. So, what I’m saying is that every choice you make early on in building a work of art is simultaneously incredibly important and defines everything about what it will be – and also completely irrelevant because it will be outweighed by every future choice you make.

Okay. How does that make any sense?

Because art, and the decisions that go into it, are context. Every creative action you can take is only within your vocabulary because of the context of the life you live and have lived, and every choice you put into a work of art only has meaning in the context of its relationship to the preceding and succeeding choices. The specific analogy that comes to mind is, once again, playing a game of XCOM – because I’ve been playing so much XCOM and watching so much more that these analogies are coming to me very readily right now. When you move your units around the map, the early moves don’t directly bring you victory or disaster, but they do affect how likely your later moves are to be useful. The beginning of the combat is both incredibly important, because it sets the stage for all your other moves, but also largely irrelevant, since under most circumstances you have ample opportunity to course correct. Every decision matters, but even in a difficult encounter there are usually many potential paths to victory: As long as the moves you take still are contained somewhere within that victory possibility-space, you’re doing okay. This is actually all pretty much true of any tactical game, so if it makes more sense to you then feel free to substitute Chess or Go in the preceding analogy.

The point of all this is that there’s no benefit or reason to stressing over early decisions. The point of all this is that if you’re waiting to figure out where to start before you begin a project, you’re wasting your time. Begin anywhere. You can get anywhere from anywhere. Yes, I’ve made a blog post arguing pretty much the exact opposite of this as well, and yes I actually still agree with that blog post too. The first choice you make will define everything about your project, but so will all the other choices. Everything matters, but nothing matters so much, in art, that it’s worth being scared about. Just keep making choices. Just don’t run away. Eventually, somehow, you’ll have something worth being proud of.

ripxcom2.jpg

This week my first attempt at a legendary difficulty campaign of the XCOM 2 expansion, War of the Chosen, went down in flames. Also this week, I started my first real and persistent attempts at learning Unity and building a game in its toolset. It’s been a week of exploration, unfamiliarity, and uncertainty.

I’ve learned something about challenge, this week. I learned that you can either give yourself a difficult task or an unfamiliar task, and either of those might go poorly, but if you give yourself a task that is both difficult and unfamiliar you are really asking for trouble. When I started the War of the Chosen campaign, I assumed it was mostly the same as XCOM 2 with a few additions. It turned out that almost every mission type was completely different than before. It turned out that many of the things I’d learned about how to play the game from playing before the expansion either were no longer relevant or came with new caveats I wasn’t aware of. It turned out I shouldn’t position a soldier on a fire escape attached to a building that was slowly caving in on itself. It was very educational.

Not only does War of the Chosen introduce a lot of new mechanics to the game, the mechanics it introduces are comparatively opaque, driven more by narrative than mostly systems-determined missions of XCOM 2. This isn’t a bad thing, but it is a thing that will completely destroy an unprepared player who has reduced their margin for error to close to nil by playing on the hardest difficulty.

But what about Unity? Fortunately, in that case I was smart enough to not try to overlap two kinds of difficulty, and I set myself an easy task to do in an unfamiliar environment: Make some sort of game or game-like experience by the end of the month. Of course, my approach to doing that still makes things characteristically difficult for myself, such as by getting deep into the specifics of the physics system to get a jump animation to work just the way I want it to or to make a cursor in 3d space lock onto the closest available surface, but I’m getting somewhere and I’m learning a lot.

It’s important sometimes to be able to embrace ignorance. Having an appreciation of learning is only possible when you have an understanding of just how much you don’t know – the reason why so many people resent education and expertise is not resentment at the knowledge and skill people accumulate, but resentment at the implication, by having knowledge and skill, that those who do not have it are ignorant and unskilled. Learning becomes an insult, training becomes a prank. Everyone has this seed in them, a part of them that hates their limitations so much that they can’t stand to see anyone excel. Only by accepting our ignorance can we learn to move past it. It’s not like Socrates’ knowing enough to know that he knew nothing: It’s knowing that you know nothing so that you are able to replace the nothing with something.

Sometimes it helps to take a dive into the unfamiliar. Not only is it a necessary prerequisite to making the unfamiliar familiar, old assumptions and habits start to be cast into a new light and questioned anew. Scraping away superficial layers of knowledge sometimes helps one to attain a more complete, clarified knowledge.

Or, at least, these are pleasant things to tell oneself while one is being reborn, unaccustomedly ignorant, weakened, and infantilized.

I didn’t put up a devblog last month, and I’m not sure if anyone noticed. I’ve noticed a cyclical trend over the last couple of years: I work on EverEnding, hit a point where it’s difficult or tedious to progress, decide I need to take a break from EverEnding, I start working on another project, something goes wrong with that project or I get anxious about not making progress, and I come back to EverEnding. Throughout it all, progress gets made, and I learn. Slowly.

That’s what’s killing me now. What good is slow progress? How long is the rapidly deteriorating world going to sit and let me ‘perfect my art’? Can I sit down and write another blog post about how “it may take me five more years to finish this but so be it I’m in for the long haul!” when I know so little about what the world will look like in five years? Will there be a world in five years? Even if that weren’t the situation, though, I think I’d be coming to be less comfortable with this idea of finishing art ‘eventually’, ‘someday’. It’s tenable to put art out there which you’re not sure if anyone is going to care about, and it’s tenable to spend many years making art, but combining these, spending years creating something you have no idea if anyone is going to care about…

I’m increasingly tempted to focus more on things that aren’t making games, on trying to make art and music or trying to do more writing. They might not have any more of an audience, but at least they can be done to a reasonable level of quality within a few days – or a few weeks or months, depending on the scope. At the same time, I have a hard time seeing myself ever completely focusing on any one of these pursuits – one of the reasons I’ve always been enamored with the concept of game development is the promise of being able to explore all these different media through a unifying meta-medium. Now, though, I just feel scattered – it would be bad enough to spend my days carrying water to fill a well that might not have a bottom and that I’m unsure if anyone will drink from, but I find myself pouring into several such wells. What can this achieve?

I think I’m improving, but improving at what? I’m improving at working on making a game, but not at actually making games – after all, in all this time, how many games have I actually made? I’m getting better at being comfortable in a cycle of development that never ends, miniscule gains that never pay off. I don’t know that this is the correct skill to learn. I need to learn how to actually make things, not how to be ceaselessly in the process of making them.

So that’s the skill I’m going to try to practice. I’m going to spend some time studying the tools that are available, most notably Unity, and techniques that I’ve neglected. I’m going to set out blocks of time which I can use to make projects, and then complete them as best as I can within those time blocks – small games, primarily, but maybe I’ll also try to make an album or two or spend a month entirely on creating characters or environments. It doesn’t really matter what it is, as long as it’s something with a beginning and an end, instead of being ceaselessly borne on a current.

I’ll write about this more later, but you can expect posts around the beginning of every month detailing these projects and, hopefully, sharing some finished work. How do I know this time is going to be different? That this isn’t just another part of the cycle? I don’t, really – but these questions have begun to weigh on me more and more, and I don’t think they’re going to stop until I do something about it.

It’s time to finish something. Maybe I’ll know what it is once it’s finished.

I always hate doing these updates where there’s not a lot of progress to report. The last couple of weeks in particular have been devoid of any progress on the project, or even any work on it – at first because of a shoulder injury, which was making it particularly difficult to focus on any of the complex problems I needed to solve to work on the code part of the project, and then on a short family vacation. Before that, I was working regularly on the project – well, except for the week or so where the new meds I was trying out were making me too groggy to think straight – but, still, not making a lot of progress.

Part of the problem with working on a project the size of a game is that sometimes even the components of the project, the discrete chunks you’ve written down as tasks on a task list, come to substantial undertakings in their own right. Especially when one’s focus is split between several of these, it can be entirely possible to spend a lot of time working on them, not running into any particular roadblocks and making what feels like good progress in the moment, and look back and not see anything new actually finished. This is basically how things have been for the last month – In particular, the storytelling system has taken much much longer than I’d expected it to, leading me to do a bunch of rewriting of the music system. The reason why the music system had to be rewritten was so that I could readily sync the storytelling lines with the music when I wanted to, in a way which I didn’t have to custom code for every story and every music track. I now have a system where any music track playback can intelligently jump around – that is, once I put in a number of valid points it can jump to in a track, say if a certain section can end in three different ways, I can give it a destination range in the music and it will find the shortest path to get there. I didn’t expect to have to read up on pathfinding algorithms for my music code, but here we are.

Now that I’ve got that component of the storytelling system figured out, there’s still one major roadblock to finishing it: Text rendering. This is something that should be easy in Flash/AIR, but just due to how I have entity rendering set up is a bit tricky. At this point, I have two options: Either I modify the entity rendering system, which would be a nuisance but not too difficult, or I find a way to convert the text into graphics rendering commands that I can send to the entity draw command queue. I’ve found a library that does this, but it hasn’t been updated for 8 years, so it might not be an ideal choice. If it doesn’t work out and I don’t find an alternative, though, then I’ll just have to rewrite the entity draw command system, because writing a whole text renderer to handle this problem would be an obscene waste of time, albeit presumably an educational one. At some point, as well, I’ll have to create a typeface for the game to use, possibly several. I think that will be fun.

The other two major things I was working on last time were the health bar and the awakening animation. The awakening animation has turned out to be a bit of a quagmire as well – I had the motion of standing and grabbing the weapon looking pretty good when I realized that I hadn’t really planned out how it was actually going to fit into the level where it was supposed to happen. This was something I can only describe as an extremely foolish oversight on my part. I’ve begun reworking the animation and I think I figured out a way to do so without completely starting over (again), but it required me to redraw the tree which was the main prop in that area. Honestly, I’m glad I was forced to do so, because the previous tree looked pixelated in a way which I had thought looked okay – but, I can see now, really did not. It looks much better now.

Of course, now I have to be concerned that making this tree look better will make the rest of the game look worse in comparison, and lead to an endless cycle of revisions. For now I’ll just have to enjoy the journey I guess, because I can’t say when things will start looking ‘good enough’ to me.

As for the health bar, progress is being made on it, but the storytelling code took priority and I didn’t want to split my attention between two programming tasks. I’ve also been working here and there on music for the next area, but though I have a number of promising ideas down, most of which will probably find their way into the finished version somewhere, none of them really feel like the right place for the song to start. For now, there, too, I keep experimenting, waiting to be visited by the spirit of satisfaction.

So, for this next month, I intend to finish the storytelling system, finish the awakening animation, finish the health bar. From there I’ll probably start in on other necessary animations – though I also think it quite likely that I’ll look at the tilesets I have to bring their level of quality up to this tree asset. It’s gotta be about the pleasure of the journey, because at this point I have frankly no idea when this project is going to go anywhere. I wish I knew how to work on it faster, but at this point it seems like it’s work slowly or not at all, and hope one day to accidentally, habitually, fall into a more rapid pace.