Postmortem: He's dead Jim


With the 2021 'So Bad It's Good Jam' starting soon, I thought I'd look back at the last game I attempted to make for it. I say attempted because I was late by about 6 weeks. So far I'm 1 for 3 with SBIG because I tried to make one for 2018 but didn't submit, I submitted to 2019 and surprisingly won, and I didn't submit in 2020. I'd like to improve that ratio, so I'm going to review last years entry Ja Wizardman and analyze where I went wrong, what worked, and what I should do for this years jam.

Ja Wizardman was made as a sequel to a game made by XCVG for the 2017 SBIG jam. He always joked he would make a sequel but never did, so I decided to make my own sequel, with blackjack and hookers! My idea was to attempt to make an ambitious janky RPG along the lines of Morrowind, Gothic, Fallout: New Vegas, and Arx Fatalis. I wanted a whole bunch of features I had never tried before and tie them all into one game. As a sort of meta joke for the game I tried to make it feel like a "modern reboot" similar to the Gothic Remake demo, and at the same time some sort of weird European fan mod. Hence why my title in the game is written in google translate Russian and there's items like "Gamer Juice" kicking around.

The game is stuffed to the brim with referential humor, for better and for worse. Some were incredibly obscure, like how Giralt wears a purple suit like Geralt wore in the 1997 version of The Witcher video game. Others were incredibly on the nose, like the major warring factions mirroring the war over Hoover dam in Fallout: New Vegas. I mean, one side is literally called the Federal Legion. I think I'd prefer to stay away from more overt political satire or commentary or whatever the hell it was. While it certainly provided no shortage of ideas, it already feels dated. In general I'd like to avoid it, because for anyone who didn't get the references, several jokes just seemed weird or fell flat.

Ja Wizardman was one of the greatest learning experiences of my game dev "career". I learned how much I can get done in a short period of time, I took a giant leap in combat and AI mechanics, and I actually managed to implement a decent degree of player agency. To remind myself of the lessons I learned, I'm going to dive into what went wrong and what actually went to plan.

What Went Right

Modular Thinking

One of the smartest things I did was to implement several features in a fairly abstract fashion. Scripting sequences like the battle of stone pass became easy once I created generalized functions for moving and spawning characters. And creating quests was fairly quick since I was able to create them by filling out fields in the inspector. Now, for an actual game that's supposed to be worked on for a longer term than a couple weeks the implementation was likely a horrible idea since there was no way to really "save" the quests. But for my purposes it worked fine.

The main point is that once a feature was complete (or as complete as it was going to be),  it was easy to pump out a lot of content with it. I try to apply this thinking across all of my projects, and whenever I'm working on something my mind always plays with alternate uses in the current project  or ways a feature could be used in the future. Some ideas I had for Ja Wizardman eventually came to life in future projects through this thinking.

Dialogue

From the players perspective, the dialogue system seemed to be one of the most popular aspects of the game. And it was one of the more fun parts to work on since I got to make a bunch of crappy jokes, make crappy lore exposition, and add some level of player agency. The voice acting seemed to be mostly liked with the exception of one character whose voice was too loud. I would have loved to add more but I was simply short on time and burnt out.

It was fairly easy to add dialogue trees into the game, it was just a matter of taking the time to write them out. Since XML was a poor format to actually draft conversations, I usually wrote them out in word and then copied them into the relevant XML file. There's almost certainly a better way to create them than my method (and several people have tried to show me other ways), eventually I'd like to have some sort of node editor for dialogue trees but that will likely be on the backburner for some time. In the meantime, I will hopefully have some form of conversation system in my game for this years jam.

Combat System (In Concept)

The combat system is a combination of the combat systems from Kingdom Come: Deliverance, the Mount & Blade series, Morrowind and Arx Fatalis. Melee combat is something I always wanted to try, but I wanted it to be deeper than my previous attempts. In Out Of Order, melee combat was effectively a ranged attack with unlimited ammo and a very short range. So I made attacking and blocking multi-directional, added the ability to charge attacks for a more powerful strike, and made all of this require stamina.

The intention was that the player would not be able to sit around holding the block key and wait for the AI to tire out, because the AI could attack in a different direction. And the player could charge for a powerful strike which could kill in enemy in possibly one or two hits, but they would be vulnerable to enemy attacks. This "strategic" layer was naturally covered in a layer of clunkiness and intentional issues. If the player or an NPC runs out of stamina they simply fall over for a short period of time. This was intended to be a funny discovery for the player and could allow for hilarity to ensue with multiple NPC's falling flat on their face in the middle of combat. This last part was inspired by my first experience playing Morrowind, where I tried to kill the first bandit I encountered and continuously missed, was knocked down repeatedly, and died.

In general I was satisfied with how the controls for the combat system turned out. The ability to lock-on I think really helped to avoid making the player motion sick from moving the mouse around while attempting to attack, a factor which discouraged me from playing Mount & Blade in first-person. Making it easy to not lock-on made it easier to deal with multiple opponents at once, something that always seemed to be an issue in Kingdom Come: Deliverance. But all that being said, I'm definitely not attempting a similarly complex combat system for this years entry.

What Went Wrong

Scope

Ja Wizardman was simply trying to do too much in one go. I had never implemented melee combat, quests, a dynamic inventory, non-hostile AI, or an actual plot before. Creating so many mechanics and so much content in a short period of time really burnt me out, and I feel like I could have submitted on time had I simply not attempted several ideas.

A good example of something I should have definitely cut out was the blackjack minigame. It was purely a text-based experience, and it was made so that the player would always lose no matter what. The only reason it exists is because I made the joke that I was going to make my own Ja Wizardman sequel "with blackjack, and hookers!". And since I'd already gone to the trouble of implementing hookers I figured why not finish the other half. In the end though, it ended up being a rushed feature that barely anyone seemed to use anyways.

Trying to achieve quantity over quality really hamstrung various aspects of the game. I didn't have the time or patience to really give the combat and dialogue the love it deserved. The characters of the two major factions of the game don't even have any voiced characters! This time around one of my major goals will be trying to concentrate the stupidity in a smaller area.

Quest - Dialogue Issues

The biggest technical issue I encountered was the numerous issues involved in getting quest related options to work properly. Options weren't appearing when they were supposed to, others wouldn't disappear after its relevant quest had been completed or failed. I was basically in crunch mode for a while trying to sort this out and wracked my brains trying to figure out a solution. It became such a scramble that I actually had three different ways to check for a quest or objective status in a dialogue tree.

I've yet to actually go back and fix this since I haven't really touched my dialogue system much after Ja Wizardman's last update. Since I would love to be able to have conversations in this years entry, I will likely either have to completely refactor or rewrite the system, or just don't track story events in dialogue options.

AI

Ja Wizardman is the game that turned me off state machines for AI. The code for the AI was built off the setup for Out Of Order, "retro" fps game I made the previous year. The AI functioned well enough for Out Of Order, all it needed to worry about was moving to patrol points, looking for and chasing the player, and shooting at the player. The most complicated part was some special function and boolean for if the NPC was the final boss. However the AI was still pretty broken (though in a good way for the jam) so it was a shaky foundation. Enemies would continue moving after they died and multiple enemies would try to move to the same patrol points resulting in them getting stuck on each other.


This system was woefully insufficient for handling the calculation of an NPC's opinion of every other NPC within line of sight, holstering/unholstering weapons, or calculating attack/block directions. I had actually coded in the ability for an NPC's reaction time to vary so that early enemies would be slow and easy to fight while other enemies like Federal Legionaries and Lord Zog would have been incredibly quick. This variance unfortunately screwed with the animations so it could be hard to tell if the AI was blocking or attacking sometimes, so all the NPC's in the game were set to max reaction speed. This attempted remedy seemed to make NPC's react either instantly to player attacks or not at all.

My horrible experience with wrangling the AI for this game drove me to switch to a behavior tree implementation for the AI in Sub Mortis. I intend to use a behavior tree for this years SBIG jam as well, I find it much easier to create AI variations and sequences.

Quality of Life

A large amount of the feedback I received was about how confusing and annoying players found certain aspects of the game. And while this game was meant to be so bad it's good, it wasn't meant to be frustrating. In the first release there were no audio options in a game with many loud voiced characters, there was no way for the player to figure out the controls aside from trial and error, and stamina took an annoyingly long time to recover. The long opening cutscene had no "skip" option, and it was impossible to pick up items that were low to the ground because the interaction raycast was intersected by the players collider. Also I had to remove the ability to knock over every NPC in the game by pressing the 'P' key. Make sure to remove your testing features kids...

This experience is what drove me to spend so much time gathering feedback for subsequent projects and focus on the UI/UX aspects more. I'm hoping to take that same experience and make use of it in my entry for this years jam. I plan to atleast have a basic tutorial and an audio slider option, and hopefully leave more time for playtesting. While I want my game to be bad, I also want it to be enjoyable.

Things I Liked

Even though it failed miserably overall, I was surprised by how well the systems in the game came together with regard to the AI. While testing AI aggression between factions, I kept encountering instances of characters running across the map to attack certain characters. I eventually found out that these NPC's had actually been assigned the vision object of a different character, so they could see the hostile NPC. This resulted in one of my favourite screenshots of Ja Wizardman's development.


That's the final boss of the Popular Front questline (or atleast he was supposed to be) fighting two legionaries (he was assigned a different faction for testing purposes), a bandit and a wench from the tavern. I was able to get these characters to fight by simply selecting a value in a dropdown menu, which was mind blowing for me at the time. I had always hoped to have battles of NPC's in one of my games, something reminiscent of the Battle of Hoover Dam and Mount & Blade skirmishes. The Battle of Stone Pass in Ja Wizardman is unfortunately quite small and short in comparison, but it is a battle sequence. I still find it interesting to let the AI fight by itself when possible during the battle, I've seen both sides win and I've seen NPC's attack their own faction members because of accidental hits. The battle was incredibly janky,  but I was quite happy to have been able to achieve it in less than a week for game jam.

Going hand-in-hand with this new AI system was the ability for the player to kill anyone and anything. The player can actually kill all the members of both major factions and still finish the game. Since I loved the idea of this freedom so much, I added an NPC in the middle of the map who would let the player press a button and launch a nuclear strike on the valley. This naturally resulted in the ending slide for every character to be the bad ending, but I loved the idea of allowing the player to just say "Fuck it!" to the entire game.

Which is another major feature that was incredibly ambitious but worked interestingly well: multiple endings. They are a blatant ripoff of the classic fallout ending slides of a still image with voiceover, but they work very well. I always appreciate when games recognize my actions, and I wanted to provide that feeling in my game.

Conclusion

Overall, Ja Wizardman was a big belly flop of an attempt at making a large scale reactive game. It didn't ultimately achieve what it was shooting for, and I think Out Of Order might still be the better "So Bad It's Good" game. Out Of Order aimed to be a crappy retro FPS, and it largely achieved that, I think in no small part due to its opening cutscene and lack of story.

For my entry in the So Bad It's Good jam I want to combine the character and focus of Out Of Order with the storytelling and world of Ja Wizardman. I'm not sure what exactly that means yet, but I really wanna do another pre-rendered cutscene and definitely want voiced characters again. All I know for sure is that my next game is going to be really dumb.

Get Ja Wizardman

Comments

Log in with itch.io to leave a comment.

(+2)

Nice postmortem! Good luck for SBIG21.

(+1)

Thanks! Here's hoping I actually manage to submit on time this year...