Archive

Development

Well, I’m back to working on EverEnding. That side-project ended up being exactly what I didn’t want it to be, an excuse to work on a whole bunch of tools without ever making an actual game to go with them. We’ll call it a learning experience. What did I learn? I learned that I have a habit of avoiding the scary unquantifiable parts of a project in favor of working on parts that feel like safe investments – that I feel, somewhere inside myself, that if I pour my efforts into making tools and systems that that’s a safer gamble to me than pouring them into the actual core of a game. Art is scary! The more time you have to put into making it, the scarier it gets – in the first place, making art is like putting a message in a bottle and letting it out to float on the sea, and it only gets more stressful when you spend more than a year creating that message. The solution is not, I think, to spend another year developing new bottle and paper and ink production facilities to make creating each message that tiny bit less terrifying, but it’s an appealing option to take whenever it presents itself.

Oh, also in addition to those big existential questions I guess I learned a lot about making a scripting system and working with OpenFL. So that’s good too.

Once I decided I’d basically dead-ended, it was clearly time to head back to EverEnding. However, I’d left the project in uh… not a great place. I’d completed about half of the OpenFL port, and lots of systems weren’t running and I’d left lots of bugs in the systems that were running. Eventually, after lots of debugging and deliberation, I ended up rolling back a number of the changes I’d made and reverting back to Adobe AIR… for now. The reason for this is that switching to OpenFL would not only require me completely rewriting all my rendering systems, it would also make a couple of the special effects I’m planning extremely difficult. I really want to be actually working on a game now, so I figure rather than resolving all these issues right away I can defer them for a while. A big thing that enabled that is that OpenFL now supports Adobe AIR as a target platform, so with a few checks in my code to handle cases that are unique to OpenFL (most of which I’d already implemented) I can have something that can run on that version of OpenFL with no changes and, perhaps soon after, build to other OpenFL target platforms. Even if I’m not prepared to implement OpenFL just yet, with my experimentation here and with the side-project I think I have a pretty good idea how I’ll handle it when that time comes.

So, back to working on EverEnding: There were a few big design decisions I’d been deferring, one of which was specifically how to handle the narrative of the game and the other was creating some sort of special moves the player could unlock over the course of the game. I think I figured out a good system for creating a narrative in the style of sort of a story-book, with narration synced to music and text fading in – this is probably something I’ll want to prototype, though, to make sure it actually feels right. The special moves are like 75% figured out, but only the smallest slice of that stuff will be in the first chapter of the game, which is the one I’m focusing on right now, so I can figure out the last of that later. After I got that stuff basically sorted, I created a big task-list for creating chapter 1 of the game. I already had a task-list, but I made one that was bigger and more thorough, and had accompanying time estimates for each task. I tried to overshoot every estimate, but if they’re accurate than I have something in the region of 1300 hours to put into the project before the first chapter is complete. That’s a lot. Then again, I’ve put that much time into TF2, and I didn’t even make that game.

I have my work cut out for me. I’m going to start scheduling myself a bit more strictly again, though I may only get a few days to work to that schedule before I have to leave for a family thing, but with all this down and planned out I feel – well, not exactly optimistic, but determined I guess. I just turned 35, I’m starting to get the tiniest bit of grey in my beard, I got a blood pressure monitor for my birthday. I really do need to actually finish a project.

Advertisements

Well, I keep on getting distracted, but the distractions are all part of the project itself. There’s a distinction between the process of making a game and the process of making the game engine, the game editor, the game tools, even though these are a prerequisite – and, clearly, I’m more willing and able to focus on those right now than I am on making the game itself. I think this is okay for the time being: Part of what I wanted to do with project is to let myself go where my enthusiasm guided me to go, and clearly right now that’s in working on the tools. Now, whether that’s just because I’m more intimidated by the idea of working on content stuff, well that’s an open question. Eventually I’m going to run out of tools to work on, so I’m not stressing out about it. Yet.

Anyway. What are these tools he keeps talking about?

Well, first, I’ve got a somewhat working version of the room creator I was talking about last time. I got the solution to the point where it did maybe 80% of what it was supposed to and then tabled it, since I didn’t want to get sidetracked for too long with nothing to show for it.

You can see that some of the logic is there, with it placing the walls and some of the tiles connecting the angles correctly, but there’s a couple of tiles that are incorrect and some that just aren’t getting placed. Part of this is just the order tiles are getting placed in right now: Since each tile has to fit with each other tile, the tiles that get placed first don’t have to meet as many constraints as the ones that get placed last, and often end up being incorrect. Obviously I have to iterate through the placement more than once, but how do I know when I’m done? How do I know which tiles I still need to match with and which are now outdated by the new placements on the second loop? This is probably a problem that’s been solved, so maybe I can look it up. That may be another reason why I set the problem aside – it didn’t seem urgent to solve any more, now that the remaining issues were relatively small and easy to describe. Most of the time, at least when it comes to programming, a sufficiently detailed description of the problem contains a solution.

After getting that sort of working-ish, I focused on creating the entity editor. Once I can build levels and place entities, I basically have everything I need to create a game. However, there’s a huge range in what constitutes a level and what constitutes an entity, and some big decisions need to be made in order to meet those simple requirements. Up front, though, I had a pretty good idea what an entity was supposed to be: I want an entity to be an object with, most of the time, a position, dimensions, and behaviors in the game world. With a bit of shuffling UI around, I came up with this entity editor:

The top bar is a toolbar where I can drop any entity I want to use more than once and save it for later. The top-right is an editing window where I can rewrite any of the entity’s scripts, and the bottom right a selection window that I can use to look at and edit any of the entity’s properties. What is going to be interesting as this progresses, I think, is that any one of the entity’s properties could be a script, could be a script that rewrites another property to be a script, could be a script that copies another entity into a variable which gets used by another script to spawn versions of that entity, and so forth. What I want here is a system that eradicates as many barriers as possible between creating, editing, and scripting entities. To begin with, I used an XML-based scripting language since that saved me a lot of the trouble of parsing the scripts, since I could just use Haxe’s built-in XML parser. However, I’ve decided instead to roll my own scripting language – after some misadventures in using a very full-featured Haxe parser, which I guess we’ll just consider research now, I decided that my needs were simple and specific enough that I should really just make my own.

While I initially considered making a new simple animation system, I decided that too much good work had gone into the EverEnding animation system to discard it completely. However, the rendering paradigm I used for that project was completely incompatible with the standards used in OpenFL – one of the big reasons I wanted to step away from that project for a while, since bringing it up to those standards was a huge logistical pain in the ass. This was, therefore, an excellent opportunity to work on something that could benefit both projects. The necessary approach was so different that, in the end, I had to fork the class, but when it comes time to work on EverEnding again I can work on integrating both versions together in a way that captures the strengths of both. For now, I have a fast and efficient way to render every entity I want to the screen.

Aside from this stuff has been some minor progress in other areas, like making decisions on what the tileset should look like, fixing bugs in the collision code, and making a rough character sprite for use in testing. However, if you’ve been following the project, you might have noticed streams abruptly ceased a couple of weeks ago, which is rather contrary to my original concept of the project as something which I worked on entirely on-stream. Unfortunately, I came to a point where a few aspects of my life and this project came into conflict with one another: As I alluded to in my Problem Machine blog post a couple of weeks ago, I tend to have sleep patterns which could be generously described as ‘erratic’. I’ve been trying out ways to restructure the way I live and work in order to help address this issue, and one of the biggest changes I’ve made is to try to get a few hours of work done immediately after waking up, before taking a shower or eating breakfast or anything. So far I find this approach tremendously beneficial, starting my day off on a good precedent and ensuring that even if later on I do end up feeling fatigued or depressed I still have a few good hours of work done, relieving much of the pressure to do work that was keeping me up later and later at night. Unfortunately, while it’s a bit stressful to stream myself work, and it’s a bit difficult to get used to waking up and working right away, the idea of waking up and streaming working right away is just too much to countenance at the moment. With time, this may be something I can approach – it may be helpful to get away from my conception of streaming as something where I need to have a constant running commentary, for instance. Or maybe I can just eventually get to the point where I’m more comfortable vocalizing my thoughts immediately after waking up. At the moment, though, trying to do two things which aren’t readily in my nature at the same time just felt like too much. Hopefully, in time, the dev streams will return. In the meanwhile I’ll probably continue streaming gameplay a few nights a week, though this past week I have been remiss due to fatigue.

That just about does it for this month’s update. Next, I plan to finish this scripting system, fix the remaining issues in the room generation code, and probably start building out the first few rooms and entities and some more finished looking art. I think by next update we may be able to start getting into actual content, rather than tools – but who knows what rabbit holes I have left to fall down?

The new project is underway. I frequently miss working on EverEnding, and so far I haven’t gotten to do the sorts of things I really came to this project for, but I’m also getting really excited about some of the ideas I have for the future while I lay the necessary groundwork to proceed.

So, what have I been working on? There’s a lot, really. I got the basic collision system up and running, though that part is still glitchy as hell. I’ve created a simple but potentially very flexible scripting system which I’m going to use for all entity behavior in the game, which is going to make modifying entities in the editor largely a matter of literally copying and pasting the behaviors I want between entities and should make saving and loading pretty straightforward. However, the bulk of my time so far has been taking up on developing tiles, tools and editors for using them, and an understanding of how they’re going to be implemented in the game.

This is the tileset I’m testing with right now. It’s pretty ugly and rough around the edges, but right now I’m just trying to figure out a way to make all the tiles that I need for the game world fit into the minimum possible amount of space in a format that makes some degree of visual sense. If you do any art yourself, you may have noticed that the perspective here is, to put it mildly, kind of messed up. I’m working off the model established in the tilesets of the early Legend of Zelda games, particularly Link to the Past. The angles don’t really fit together or make sense, but it still creates a cohesive space for the player to navigate without obscuring anything the player needs to see. In the long run, the Escher-esque nightmare presented by this kind of world design may work in my favor, since I want the world to seem kind of surreal – but more on that later.

The big issue I’m facing at the moment is creating a tool to automatically fit these tiles together. There’s a small immediate and a big future reason I want to do this: The small reason is that figuring this out will allow me to build tools into the level editor that let me really quickly make rooms and connect them in a way that looks natural without having to individually place a bunch of tiles. The big future reason is that eventually I want to be able to generate rooms entirely using code using the same algorithm, and create procedural environments for the player to navigate.

That segues nicely into what my plans are for the project. Actually, none of these are plans yet, these are just ideas for now – plans will mostly wait until I have a playable chunk of game and can begin making hard decisions about what works and what doesn’t, what’s feasible and what isn’t. The setup I want to explore, here, is being trapped in a big creepy house – there are other people here, and it’s a bit up in the air how long they’ve been here. Some of them talk like they’ve been here a few days, some of them seem like they might have been here for centuries. Everything is blocked off in different ways though, bricked and boarded up, papered over, hidden behind secret passageways, and in order to begin to find your way out you need to explore and find tools both to open up passageways and to fight off the creatures that have taken over parts of the house.

That’s the basic idea. Let’s call that tier 1, where I just make a little Zelda clone and call it a day.

Here’s a more interesting version of that idea that I’ve been playing with. There aren’t monsters in the house, but in order to actually make progress you find different beds to rest in. Each bed you rest in puts you into a dream where you play as whoever the bed belonged to, and in reliving their story you can perhaps change it, and by so doing change the state of the house. Or maybe you just find the tool you need in the dream and bring it back directly, or perhaps you are able to recruit an NPC by telling them something they’d forgotten a long time ago. The dreams, of course, are infested with weird nightmare monsters, and you need to be able to defend yourself in the dream, so procuring equipment is still necessary.

That’s tier 2. This would be a much more substantial project, but I think there’s room to do some interesting things here.

I have an even bigger idea, though, and this is one that could get really out of hand. Take tier 2, but each dream world contains other beds, and you can keep pursuing nested dreams deeper. Past one or two levels, dreams begin to be procedurally generated, but the resources you get in each dream can be brought out of them and used to progress through the next. The game becomes an adventure game containing a roguelite, where progressing through the roguelite sub-game allows you to progress naturally through the world of the main game. Eventually, perhaps, getting lost in these many nested dreams could become a genuine danger.

Tier 3 is fun to think about, but for now I have to focus on tier 1 – or, really, tier 0, which is building the toolset that will allow me to build tier 1. That’s where I’m at right now, but if progress continues at this rate I should be able to have my toolset done by the time of the next devblog and can really start building out the most basic version of the game.

It turns out that the skill of making games is more than just the skills of making the components of a game. This is something I feel like I’ve had to confront more and more: Despite spending a lot of the last decade building up my game development skills, I have almost nothing in terms of actual finished games to show for it. For a few years, at least, I could reassure myself that I was just starting out, that eventually all my work will build to something – but, now, I can’t help but wonder if there’s a gap between the skills I have and the skills actually needed to do the thing. I have to think that maybe, rather than practicing making art and music and programming and so forth, I should have just been practicing making finished games, even if they were tiny, since that was the real skill I wanted.

This is not a new insight. I’ve heard similar things from lots of solo developers, people who get stuck in one project and only manage to shake free by creating lots of small projects. It’s easy to rationalize reasons to stay in your comfort zone, though – or, at least, a comfortable distance away from your comfort zone.

It’s a common fallacy to believe that every problem can be broken down into smaller components. We believe this because it’s necessary to believe this: Large and complex problems cannot be wholly comprehended in their entirety, so we develop methods of breaking them down to make them manageable, to allow them to be solved piece by piece instead of all at once. However, the map is not the territory: When you create a task list, when you write down every anticipated facet of the problem, it still isn’t the real problem you were trying to solve. You can solve every component of the problem as you understand it without solving the actual problem. You can know how long the boards should be and still cut them short, you can know how to perfectly cut a board and fail to hammer the nails in straight, you can know how to hammer the nails but not how to fit the pieces – in the end, you actually need to know how to make a chair if you want to make a chair. Making a chair is the skill you should be training – so why do I worry so much about practicing my measuring, my cutting, my nailing?

When you lose sight of the forest, it seems like the same trees keep showing up, over and over. I focus on architecting and crafting bits and pieces of my imagined game and yet very little of the game seems to get made. I plan what I need, build it, and then when I get there I realize it wasn’t quite what I needed and I go back and I rebuild it, and then when I get back there I realize it wasn’t quite what I needed and I go back and I rebuild it, and then when I get back there I realize it wasn’t quite what I needed and at some point, if you find you keep going back to the drawing board, maybe it’s time to invest in a portable drawing board. Maybe it’s time to buy an eraser if you keep redrawing. Maybe it’s time to buy a straight-edge, if the lines keep turning out crooked. What I mean to say is, I need to be working on the game, not the engine, not the animations, not the design, not the story.

It’s hard to know which one you’re doing sometimes. I was able to spend this much time working on these things because I convinced myself that this was the game and that this was how you work on a game. Indeed, I will probably be able to use much of this work at some point, I will be able to integrate these constructs at some point – but they’re not part of the game, not yet. It’s easy to rationalize an awful lot by saying “this will probably come in handy, eventually”. Even if it’s true, why not just do it when eventually happens, instead of now? How much time will you save by having it ready ahead of time, as compared to the time you will have wasted if the time you were ahead of never arrives?

This is why I put EverEnding on hiatus. I needed to get my hands on a project, to actually work on the game itself and expand it out from its core, to build something relatively simple and straightforward and develop it and see what it could be by slowly turning it into that. And yet, already, I see myself doing the same thing as before: Figuring out scripting systems, building editors, planning tilesets, prepping ingredients instead of cooking. To a certain degree these things are necessary, but certainly to far less of a degree than the one I’m cooking at. Maybe it’s worth it, too, because I’m building these tools with the intent of making the process of developing and expanding the game as rapid and iterative and intuitive as possible, so it’s really just one step removed from doing things the way I want to be doing them. That’s what I hope, anyway.

I think it’s mostly fear that pushes me away from the game itself, the core skill of making a game. Never asking means never being rejected, never creating means never failing, except in small ways, learning failures, failures you wanted all along because they were really successes. The technical problems I keep finding myself solving are imposing, but quantifiable. I don’t need to have anything to say, because I have a problem to solve – I don’t need to access beauty or meaning, because right now I just need to make the tools that I can use later to express that beauty and meaning. So I can kick the can down the road a bit longer, and not worry for a bit more whether I can actually make a game that people will care about. And, as long as I keep doing that, I never will.

Oh well this is awkward.

Effective, um, like 5 days ago, the EverEnding project is going on hiatus. For how long? I’m not sure! I’m pretty confident it’s not permanent, but I’m also pretty confident it’s going to be for at least a month or two, and maybe as much as a couple of years depending on how those next couple months go.

The natural question to ask at this point is: Why? Good question! I’ve been feeling for a while that, while I still feel passionate about this project, I also have it backwards. I really feel that the optimal game development process is about getting a simple version of the game up and running and then iterating on that and navigating by your artistic sense towards the most interesting version of that game. However, with EverEnding, I’m constantly stopping and planning and designing and concepting before I even have part of the system up and running. This is still true even now when, OpenFL port notwithstanding, there’s nothing stopping me from getting the game playable and iterating on that bit by bit and improving it that way, rather than constantly trying to make Big Design Choices and Sweeping Revisions. I keep thinking about the forest that will grow here someday and forgetting to plant the trees.

Which segues naturally into what I’m going to do now: I haven’t decided. Or rather, I’m specifically avoiding deciding anything but the most basic generalities of the project. It is going to be a game, and I’m going to be streaming its creation – I dunno if it’s a stream anyone will be interested in watching (so far it seems not to be, judging from the 4 streams I’ve done already) but these streams are just as much for me as for any hypothetical audience. The streaming is to keep me honest, keep me focused on the task at hand for a couple of hours with no web browsing or procrastinating. It also provides a way to document the history of the project, so I can see exactly how much progress I’ve made in a week or a month or a year from now.

Now, while I’m trying to avoid deciding as much as possible, I know this much about the project: First, it’s a top-down adventure game in the vein of the Zelda series. Second, it takes place in one big area instead of discrete dungeons, probably a mansion, possibly haunted. Third, I want to fill it with secrets and details, most of which I’ll figure out on the fly as I work on it. Right now the working title for the game is The Third Story, as a slight play on words both for a large mansion and for uncovering the stories contained therein, but that’s likely to change any time I think of something better. For the time being I’ve been mostly just laying the foundational code – which is mostly pretty tedious to watch, likely one reason the streams haven’t been popping. However, as the project progresses I want to do all of the scripting and level-building within the game itself – so, once I reach that point, the streams will be a lot more level editing/scripting and a lot less walls of code.

That’s all in the future, though! For now, the game is just blocks that move around and spit text at each other – no graphics, no collision, no sound. I intend to keep up the monthly DevBlogs here, but the contents will be related to the new project. I don’t want to rule out the idea of doing more work on EverEnding, though: Since I’m developing this new thing in OpenFL, I should be accumulating a lot more familiarity with how things work in that API, and this may give me exactly the energy and confidence I need to finish the port and get the project up and running again. Also, just looking at and listening to the materials I’ve created already makes me a bit homesick for the EverEnding project, so I’m not sure how long I want to stay away… But I’m confident this is the right thing to do. For now.

I already feel tremendously better morale-wise, just being able to work on a project where I feel like it’s always moving forward. If nothing else, I’ll be able to apply some of the methodology I’m picking up here – not just in terms of OpenFL and game development, but also in terms of livestreaming and documenting development and using that process to bolster my creative energy.

It feels good to be seen – even when no one’s watching, just to be willing to be seen is worth a lot.

Work In Progress

I’ve been trying to stream more. So far I just stream myself playing lots and lots of video games, which is… nice. It’s nice to have a reason to play games, because a lot of the time, without any direct impetus, I will just not do that. I do have concerns about whether this is a good use of my time and energy, whether I’m burning valuable mental and physical resources I could be using on my writing or developing my game. I worry about whether I’m making myself enjoy games less by playing them for an audience or whether it’s pushing me towards a narrower band of games. I think these worries can be adequately combated by the knowledge that if I were not streaming I’d be worried just as much about how I’m not putting myself or my ideas out there enough, not playing enough games to stay abreast of the trends and ideas, and that I was generally shrinking back into silence and isolation.

The grass always looks greenest on whichever side of the fence we have most recently vacated.

Okay then: Say I want to keep doing the streaming thing, but I want to try to channel all this time and energy into something that advances my ambitions of being a Well Known Creative-Type Person. At that point the obvious thing to start doing is to start streaming creative work as well as gameplay. This is eminently logical and also obviously terrifying – or perhaps that’s overstating the case, but it is at least intimidating, for several reasons. One reason is that a huge part of creating something is not having any idea what you’re doing and going down a bunch of dead ends before you begin to catch a hold of what kind of thing you’re actually creating. This can be an uncomfortable process here, at home, by myself, but the thought of exposing that process live on-stream? Oof. On top of that, it’s always deeply frustrating and depressing to me when I put a lot of work into something and share it and it gets absolutely no reaction: Streaming myself working would both amplify the amount of work I’m putting in and give me real-time feedback over how many (or few) people actually are interested and watching. It’s hard to believe that this would be conducive to creating more or better work.

Being okay with sucking at things was a necessary step for me to start actually improving – in particular with art, accepting that most of my drawings would be bad, at least for a while, was the only way I could silence my internal voices long enough to start drawing. Conversely, with music and writing, I think I benefited a bit more from a sort of blissful ignorance in not being able to see as clearly how not-great my early work was… it’s always easy to make yourself feel either good or bad about your work by when comparing yourself to different artists: Just choose whether to view yourself as a big fish or a small fish by calibrating the size of your pond as necessary. It’s easy to be the best writer in your class: It’s hard to be the best writer at your school. Of course, ‘best’ doesn’t mean anything in the first place, but try telling your brain that.

My perception of the inadequacy of my earlier work is a double-edged sword: I can be proud of how far I’ve come, but at the same time it leads to acute worry that I’m actually still incredibly far behind some hypothetical future me. How can I possibly put my work out there when I’m so much worse than I might hypothetically be in the future? How can I share work that isn’t my best work, even if this better work is entirely hypothetical? If I put any of this temporally inferior work out there now I’d only be embarrassing myself.

So, if I want to stream my imperfect creation, I have to not only be okay with sucking, but be okay with sucking publicly. I may suck less frequently now than I used to but every piece of music has a point where it sounds like crap and every portrait has a period of time where it looks like some grotesque misshapen caricature. In the past the main thing that has made me feel okay about these moments is that I was the only one who ever saw them: That’s a tough security blanket to burn.

Along with these doubts other doubts like to surface. I wonder if I’m actually as creative as I think I am, when it feels so much of the time like my work feels so constrained and fuzzy and meandering, when other peoples’ feels so extravagant and full of color and detail and purpose. I doubt whether the things I make are intrinsically interesting to people who are not myself, if there’s a gap between my idea of art and what audiences want to see, whether as I improve my ability to hew closer to my own creative ideals the actual output created by that work will become less interesting and my skill will only alienate me further. I doubt that there will be any place in the world that can accommodate the entirety of what I am or want to be, and I know that other people split themselves up into pieces and find places for parts of themselves bit by bit and I wonder why I find that so difficult.

Being full of doubts and questions is something that I have to resign myself to, the same way I had to resign myself to being bad at art to become better at art. The only way to find my way is to accept that I am lost, because otherwise I will march confidently off in the wrong direction forever, just like almost everyone else seems to end up doing.

I’ve been procrastinating on writing this post, since it’s always galling to admit this: Very Little progress has been made on the project over the last month.

This is not to say I haven’t been working on it – though between a week-long trip and focusing on more immediate work to pay rent I have perhaps not been working as much on it as I ought to. The issue is more that most of the work I’ve been doing has involved slowly revising the code base to work in OpenFL, which really doesn’t give me a lot to show.

It can be discouraging sometimes when the project is in this state. In general I kind of enjoy the work of refactoring, streamlining, and optimizing that goes into revisiting an existing part of the code base like this. However, particularly when it comes to a major restructuring like this, it means there’s a long period of time where the game as a program that can be run and experimented with ceases to exist. Right now, when I want to work on EverEnding, there is precisely one part of the project available for me to work on, and that’s this programming work. Not even especially interesting programming work, at least for now – once the fundamentals are in place I’ll also have a job of making sure the drawing routines are optimal and testing/improving the replacement displacement map filter code I wrote (as it turns out shader programming wasn’t necessary to create it, but I may look into creating a version implemented that way once I have this version working).

For now, there’s not much to say. I don’t know, a lot of the time I feel like I might just be wasting my time here, like I don’t know how to access the kind of discipline and productivity to make a project of this scope feasible, at least not in my current living situation. I wonder a lot if a different project might be a faster or better way to achieve the expression I have been straining towards with EverEnding, or if there’s some way to scale back or streamline this game conceptually which would allow me to work on it in a more effective and productive fashion. It is always difficult to tell which doubts are warning signs to be taken seriously and which are just self-sabotage.

Regardless, I am nearing completion of the changes I’ve made to the Particle System to make multi-threading stuff entirely self-contained within the system itself so I don’t need to negotiate that in the game program, as well as I guess in any other games I hypothetically make with the same tool in the future. There’s definitely a hint of programmer-itis there, where I find myself creating a more general purpose and fool-proofed tool than is actually needed – after a certain point I just gotta accept that sometimes I take the long route just because I feel that it’s more proper, even if it’s less pragmatic. Within this week sometime I think I’ll be able to get back to more interesting work on the project. It sucks getting stalled, but it doesn’t last forever – and, regardless of my doubts about where all this will eventually go, I think I can pursue it with no regrets as long as I enjoy and believe in my process.