Selves Malleable As Clay

"Most known for his revolutionary political theory, this squid scribe eventually traded away sanity in his endless quest for a truly equal society. In his utopia, each body would only be temporary refuge, and each soul would come to know the pride of commanding an Ordered garrison, the delight in using Vile business tactics, the brutality of Feral infighting and the illumination that comes with Sainthood - all in a single day."

  • Zenorium, Who Dreams of Broken Hierarchies - Artistic Function

The Games Foxes Play

(complete source code on github | view all previous posts | play 0.4.3 online in browser on itch.io!)

It's tough to still channel the discipline to hammer out lines of code after each 9-to-5 toiling in the data mines. Anyone who has released a game while simultaneously working full-time, I bow to you. I've set up a tight personal schedule and have done well in following it thus far.

Selves Malleable As Clay

I am getting waaaay too ahead of myself already working on this feature when the UI is still half-broken from last week's 16:9 aspect ratio modifications. Plus, I haven't even finished equipping every entity with cutting-edge Axioms yet to make this mechanic truly universal.

But I was just too hyped to not at least start.

Enter: Soulswapping. Currently accessible as a Function spell component (named "Zenorium"), it will shuffle around the souls of every affected creature, being quite unimpressive when used on two enemies together. However, when the player joins in on the fun... true chaos is abound. This allows one to play as any creature in the game and use their innate ability to your advantage, while the... previous owner of your new flesh vessel is now thrashing around in your body, spamming your own spells and potentially trying to swap themselves back. New meta: craft deliberately horrible suicide spells and soul swap with a boss and watch them self-detonate? We get there when we get there.

Quick video demonstration here. I, the player character on the top (@), have only 1 HP remaining. I swap my soul with this pink fellow, who is quite slow and can only move every other turn - but successfully slay my old body despite this drawback, and leave the room, my existence now cursed with constant slowness. Thankfully, one will eventually revert to their old body after a few turns.

All enemy-native Axiom spells are now also accessible to the player, allowing their abilities to be crafted and used for general purpose occasions. This has invited me to write a considerable amount of flavour text - I quite like this one.

Knowledge Forks Among Many Paths

Nope. No libraries. I am done. I spent 6 hours trying to redesign my code around PixiJS. It's not impossible and I made progress, but having to run a webserver to test any little thing is tedious beyond words, and I noticed no real performance improvements. I am not ready to make these sacrifices.

I'll do it my way. It has served me well so far. I've already cooked up a very basic tool to help me build my UI that lets me move my mouse around to place things instead of writing trial and error X and Y coordinates in my drawSprite() functions.

It's tedious work, but the UI has received a couple more repairs and overhaul following the aspect ratio transition. Unfortunately, there are some artifacts of my lack of front-end design experience that are now pretty baked into the code and which would take at least an entire week's worth of dev-time to fully root out. Notably, the game can only be devoid of visual artifacts when rendered in multiples of 16 pixels.

1792x1008, fun stuff.

Hey, it's legally a native resolution. I have tried adding an option to resize the resolution, but it completely butchers up the UI as not every element is perfectly scaled according to the window width and height. I give up for now. The default setting looks great on every normal computer I have tried, from laptops to desktops. Supporting a few edge cases (Roguelikes in the movie theatre, anyone??) will be a later thing. When I, you know, actually have a good game.

The research tree screen has received a significant overhaul, as I just had to capitalize on all this sweet extra space. Behold. It was starting to be an actual puzzle trying to place everything in the tiny space of the previous iteration - a fun puzzle I must say, but I am not here to play a game, I am here to make one. So, enter seven tabs of separated content, one for general knowledge and six others for all of the castes and their Axiom components. They are:

  • Saintly - grace, healing and non-violence
  • Ordered - authority, resilience and structure
  • Artistic - craftiness, creativity and passion
  • Unhinged - rage, destruction and zeal
  • Feral - freedom, motion and randomness
  • Vile - illusion, suffering and control

All these placements will be very relevant when I actually add the loss condition I have been designing and daydreaming about for way too long now. I have so, so much to do, but it is not like I am pressed for time. This game isn't a product to be sold, it is a vessel of self-expression.

Axioms Shape Reality

"In a realm where sheer belief draws the line between what is and what is not, pride is omnipotence. The Saints were the first to learn this primordial truth."

  • Flavour text of Haughty As The Saints Were, form component

The Games Foxes Play

(complete source code on github | view all previous posts | play 0.4.3 online in browser on itch.io!)

Rough days all around. Without going into too much detail, I work in the research sector, and the culture of trickling down the most grueling tasks to the bottom of the ladder is ever-present. Thankfully, when I wasn't watching video feeds of test chambers for hours and annotating hundreds of samples, I found some time to cook up a little more cyber-arcana:

Axioms Dictate What Is

I am in the process of reworking every single creature to operate according to my new spell-crafting system. This is, in a way, showing the player a simplified view of the code blocks that make them tick! For example, our dedicated Apiarist robots now hold the spell "When a step is taken, on self, apply 1 Paralysis". Before this new feature, each enemy had a special block of code dictating what they did in particular (in the case of Apiarists, it was "skip every other turn"), but now, every little bit of their behaviour is modular and - most importantly - can also be used by the player.

Why do this? Well, I am just salivating at all the doors this opens up. Polymorphing the player into any creature and having it work Nethack-style is now a feasible feature, since every entity is really just a critter with legs to move with, claws to attack with, and a list of cool spells. You might be able to permanently change a creature type's innate spells so they heal you instead. You could soul-swap with an enemy and have them attack you with your own spells that you carefully crafted while you thrash around in their body that gets stunned and confused every other turn. Now THIS is the traditional roguelike spirit I seek!

For clarity, these spells are now named Axioms. Lore-wise, they are an unshakable belief that reality works in a certain way - robots are programmed to think that their body is too bulky to move quickly, so they advance at a snail's pace. The main character's abilities are centered around ideology and identity, so it is only right that they might be able to entrance creatures into believing something entirely different - or be entranced themselves...

This ironically also makes it much easier for me to add new enemies, since all I must do is look at my ever-growing list of spell components, jam a couple that seem funny together, and go for a test run. If I'm happy, I sketch a quick sprite, give it some crispy lore and I'm done.

Hard to show off this feature in a screenshot, since everything mechanically works the same as it used to, but I guess this code looks pretty neat.

Vision Stretches Out From Squares

While I was reading about Path of Achra's awesome launch on Steam, I fell upon an interesting exchange questioning why the game had been made with a 4:3 aspect ratio. This sent me into a reading frenzy about the way games should be displayed, until I eventually came to the harrowing conclusion that my game is impossible to display in glorious fullscreen in its current state.

Following my horror, I then grabbed my big metaphorical axe and butchered up my UI to bits, expanded the screen to majestuous 16:9, and began the rather daunting task of putting everything back together. On the plus side, this gave me much more space to work with, and allowed me to add a miniature (to the right) Axiom equip screen accessible directly at any time. There are reasons why one would want to swap between two Axioms for a certain task, and speeding up the process instead of mashing the keyboard each time is such a huge improvement. It also makes me feel like I added the equivalent of an "Right arm: Steel Gauntlet" equipment display sidebar to my game, which earns bonus True Roguelike™ points.

Additionally, all Souls loaded up for future usage now spin around your casting wheel. Look at them go!

If any readers feel like this new UI has something out of place or should be improved at some location, now is the time.

At the risk of horrifying some readers of the subreddit, I will say that I build my UI by literally saying "draw this symbol at pixels x: 1473 and y: 843" and going at it trial and error style until everything looks centered and pleasant.

So far, I've been going at it pure JavaScript Canvas Vanilla style, but I am starting to get quite fed up about the graphics constantly getting in the way and sucking up my limited development time moving pixels around instead of coding actually fun stuff. Not to mention my CPU fans going brrrrrr every time I open the world map screen due to the hundreds of sprites getting drawn every 15 milliseconds on it. I've been looking into libraries - PixiJS especially, but any one would imply a complete rewrite of my rendering code. Sigh.

Long Days Ahead

I'm really excited about making all this awesome content, but work is getting really demanding with full-time hours. It comes and goes... I've had to relocate because of it and now only have an old laptop to develop on. After weeping at how slow this glorified calculator was, I surrendered to the penguin elitists and changed the OS to Linux Mint - best decision ever. This thing now works like a charm. I won't ever be able to run any of my old games on it, but honestly, that's a good thing. Those who have lost days to bashing pixelated creatures across a grid will understand what I mean.