Blogs

MQII Retooling

Posted on 18 January 2023

I’ve implemented some changes to the core of Messiah Quest this week, and my next step is to test the game to determine if more needs to be done. I’m hoping the combat will be more interesting due to these changes, and I feel I’ve eliminated some poor design choices. The following won’t include any spoilers as far as the story goes, so I’m not afraid of going into detail.

The biggest change involves the effects caused by attacks. Most attacks cause one of the six basic effects, and only late-game attacks have interesting effects. There is an effect for each element: Burn, Freeze, Poison, Blind, Paralyze, and Bleed. Burn, Poison, and Bleed dealt a small amount of extra damage after each turn, while Freeze, Blind, and Paralyze prevented a character from attacking or running (healing and removing the effects were allowed). The real problem is that out of six effects, there are only two real effects: damage over time, or stunned. Allow me to dive deeper into the “stunned” design.

It is mostly insufferable in the beginning of the game while the player doesn’t have much life or recovery ability. In the Fire Realm, there is a quest where you must slay these Invading Shadows, and in the Ice Realm, some Ice Mages. The Shadows can Paralyze the player, and the Mages can Freeze. In general, when the player is stunned, they can use an item or a spell to remove the effect causing the immobilization. However, if the player has none of those tools, they can just wait for the effect to fade. The latter is typically the only choice early on. Now, when a character neutralizes the effect, they are granted immunity from that effect, so whatever they spent isn’t immediately wasted when the effect occurs the very next turn. But when your only option is to wait it out, there is no immunity. Stun-locking is possible, and a major flaw in my game design. I became frustrated while testing the Ice Realm to the point of changing the Ice Mage. Their Hail Storm attack no longer causes Freeze; it now causes Bleed.

So, considering a lack of diversity and the issue of stun-locking, I came up with significantly different effects. While implementing these changes, I tip-toed around the existing code and left most of it in. I didn’t want to explode the whole model by simply deleting the Immobilize property of the Effect class. (Immobilize is the property that made Freeze, Blind, and Paralyze the same effect. Now, it only prevents an affected target from dodging.) Burn, Poison, and Bleed still do damage over time as well, but I’ve added more functionality. Let’s begin!

Bleed actually did not change much at all. I still think damage over time is a good effect, but I’ve made it the only effect that is that simple. I increased the damage as well, since it does Physical type damage which doesn’t get boosted by weaknesses like magic types.

Now this next bit is borrowed from Elder Scrolls (or at least Skyrim). Burn and Poison (which still do Fire/Nature damage over time respectively) now add weakness. For reference in Skyrim, characters on fire took more damage per hit. So in Messiah Quest II, burning characters take more damage from magic attacks, while poisoned characters take more damage from physical attacks. Now the player can strategize by, for example, attempting to poison a target, and when successful, switch to physical attacks to deal extra damage.

Onto the problematic effects. Freeze is still reminiscent of the original stun, but it is now more specific. It’s not so much of a complete petrification as it is a clump of ice built around your legs. In short, characters can now use ranged attacks while frozen. This was quite a difficult feature to implement, because there was no definition of ranged attack in my model. The funny part is that I had defined melee attacks in the GUI layer for animations’ sake. If an attack wasn’t ranged, the character would charge across the field and attack up close. Sadly, the model is below the GUI and cannot get that information. The model is built to be independent of the GUI. I mentioned trying not to explode the model by deleting a property, but I had no choice. I blew up the model by adding a Ranged property to all abilities. I had an idea that would’ve kept the model safe by simply creating a list of ability names. If the name was on the list, it would be ranged, otherwise, it would be melee. After I had fixed a handful of errors, I debated if I should revert the changes and do the list idea. In the end, I decided to keep the changes, because if I missed a name on the list, it would cause a different error: a kind of error I could completely miss in testing; an error that would never crash the game, but in a very specific way, it would be an error. Suddenly, the boss of the Ice Temple doesn’t use their ranged attack while frozen, all because it wasn’t on the list. The compiler errors caused by my changes ensured every attack was correctly assigned the proper value to the Ranged property.

Before, the Blind effect meant the character refused to move without sufficient vision. Now, characters can move freely while blind, but they suffer from what I call “diminished accuracy.” Accuracy is stat that all characters have, and it is a percent value that represents the chance of landing the perfect hit dealing critical damage. With diminished accuracy, a critical hit means actually hitting the target while swinging blind. If you fail to get the critical roll while blind, the attack whiffs.

Paralyze has been renamed to Fear. Previously, I had taken the phrase “paralyzed in fear” too literally. I changed the effect to disable offensive abilities. While too afraid to attack, characters can still use defensive abilities (and I’ve widened the definition of defensive). This was quite a large change like Freeze since I had to define a difference between offensive and defensive abilities. I also had to add to the enemy AI to choose defensive attacks while afraid (and ranged attacks while frozen). However, adding this code did not explode the model, but I had to add quite a bit to utilize it. It also worked into my next big change.

There is now an additional option in the combat menu! Before, you had to select the Attack option, then it would display a complete list of your abilities. At first this isn’t bad, but then you reach the end of the game where you have learned every ability there is to learn. Now you have to scroll through dozens of moves just to find one of the three healing spells! I had an organization tool in the pause menu, but it only moved the selected ability to the top of the list! I want to say I didn’t know what I was thinking, but I do know. It was simple and easy! It was basic functionality where if you were bored enough, you could organize your attacks from least used to most. I never bothered with it myself! I mostly just got the first four near the top, and if there was a spell I needed to use, I would rather suffer through scrolling than organizing the list.

First fix: the Attack option only displays offensive attacks, and the new option (Spell) will display the defensive spells. Second fix: the player is limited to four abilities per list. Finally, there is a semblance of character building! Before, you could select equipment which boosted stats, spend points on talents which boosted stats, and then you could just use any ability you wanted. Now players have to choose abilities that best utilize their strengths. It also solves the issue of organization. The player can add abilities into the slots in the order they desire. Mind you, at points abilities are added automatically to help prevent the player from being under prepared, but with such a short list, it is easy to organize at any time. Before you think four is too short of a list, I added a bonus reward to leveling up. After 10 levels, the player earns another slot in both offensive and defensive abilities. By the final level, you can have 9 attacks and 9 spells ready for combat.

So far, these are the changes I’ve implemented to improve Messiah Quest II. I have vague ideas of improving the talent system, since they only boost stats by so little. However, very soon, after enough testing, I will release a possibly fun role-playing game.