It’s a little confusing to keep calling these posts studio notes, since I no longer have a studio space. I’m sitting in a room at our place back in Austin that’s still filled with unpacked boxes. Settling back in is a slow process, and the last month has been really busy with moving a relative out of this space as we move back in. We also got a new kitten, who we are slowly acclimating to our other cat through a pet gate, carefully negotiating their two territories and resources (is there a strategy game idea somewhere in cats claiming or sharing litter boxes, food dishes, toys and sunbeams?)
I’m still toying with this roguelike experiment, but the code is hitting that level of complexity where there’s a lot of friction in making big refactors or adding features. This is the point where Derek Yu reminds you not to start over again in his wonderful book on the making of Spelunky, but it’s always hard to resist. Going to school definitely gave me a little time to work on my coding skills, but there was really very little in the way of instruction in design patterns for code, that’s a discipline I am expected to learn and adhere to on my own and in accordance to whatever design philosophy I’ve cooked up on my own.
Right now in the game I am using both pixi.js for handling graphics and rot.js for roguelike convenience functions, like dungeon map generation and figuring out game turns. I’ve come up with my own kind of jumbled way of keeping track of game objects and their sprites, using arrays and pixi.js containers for rendering. I have an objectMap array that is currently keeping track of things like keys, weapons, but also fire, smoke and doors. While I was careening forward just trying to get things on the screen, I added some methods to classes like item and fire that bring up a text window that reports an object name when you hover over the sprite. Of course that didn’t prepare for the eventuality that there would be both an item and some fire or smoke, or a monster on the same tile, which can currently happen. So now the decision is, do I use CA board game logic and restrict tiles to holding one object, maybe moving fire and smoke to a separate layer if I want those to co-exist, or do I create a more complicated system with stacking objects at a location, like lots of existing roguelikes? I kind of like the one object per tile, plus maybe fire, and a monster or player on the tile automatically picks up, so we don’t have to stack entities and objects, but even then, I need a much more complex inspector system that knows how to serve up a text window that says, “hey, there’s a key here and it’s on fire.” Initially I tried to come up with this complex Cursor class that got everything at a location and reported it all as a list, but it got very unruly very fast and started to expose the shitty slapdash nature of some of the other design decisions. Now I am trying to come up with the best solution that doesn’t “start over from scratch” but also doesn’t bury design flaws in dependent code that will make rework even more laborious. I think the answer is to embrace the trajectory of the project, not try to make the game “everything”- what a game doesn’t do is part of the simplicity and character of its form.
With that in mind I think I am going to go with a one item or entity per tile rule with fire and smoke being on their own array (atmosphereMap?) so that we just have items or entities self report on hover and those reporting methods also check the tile for any fire or smoke and add it to the description.
I am going to crack open Tales of Old Bohemia and look for a good name/scenario. I had called the hero Bivoj and the enemy Basilisk from two separate legends, but both of those are already overburdened names (Bivoj is the name of several czech-made military weapons and there are a hundred things named Basilisk).
In other news, I accepted a lecturer job co-teaching an intro to game interactivity class at the University of Texas. While a full time position would have been preferable for kind of keeping up my momentum from school with prof. development, and would have had benefits, I guess adjuncting also keeps a lot of my time free to polish off work and try to get a show together for winter.
edit, got a version working that lets items report their names on hover and they also check for fire or smoke