Base Stats and Scaling

Yesterday after writing up the other update I started working on the base stats for my characters. Each character has a base health, damage, resistance and speed. Health is just like normal health and damage is just like normal damage. Damage scaling applies to basic attacks abilities. For instance, Cez will have basic attacks that are pretty strong (critical hits and all that), while Lela will have weak attacks (maybe 10% of damage) but extremely strong abilities (think about the same as a basic attack from Cez). Resistance is just a percentage of total damage resisted. A 10% resistance means all incoming damage is reduced by 10%. This can be altered by penetration abilities – a 50% penetration results in only 5% resistance, as opposed to 10%. Speed, generally, determines when a character will move in accordance with other characters and enemies.

I also implemented a few RNG mechanics for the damage and speed, where damage will randomly generate a number between 90-100% of the actual value. The same goes for speed. The idea is to give the game a little variability, as opposed to a static value every time (that’s boring). I actually had a discussion last night about RNG and my opnion mostly centered around RNG being terrible for competitive/multi-player games because it’s a mechanic a talented player can’t really defend against. For instance, I used to play Neopets back in the day and there was an item that would randomly generate one of the seven damage types on an attack. While it meant I never knew what I was throwing at the other player, it also meant they didn’t either. I could defend against their attacks with my shields because their damage was predictable, while mine was not. Needless to say, I absolutely dominated the scene despite having a much less costly item set than others. I think RNG in single player games is much more useful though. While it’s important to be able to make good decisions and control the outcome to an extent, RNG allows me to make up for a lot of the weakness inherent in AI and provide a little more variability to my game, instead of having the exact same values hitting every single attack. No one wants to have the monotony of the repetitiveness when having to grind through enemies in games like this.

I also worked on the enemy base stats and scaling. I had a general idea of what I wanted – weak early, super powerful late – and I tried to apply this with linear scaling. I threw it all together and then, just to test everything out, tried to sketch out a few battles in my notebook. I realized incredibly quickly that I had to make the enemies way weaker. I think, initially, I wanted to have a semblance of ‘fairness’ to the fights where any one battle could be extremely damaging to the party. If I tried to do that, however, it meant the party could get wiped in 2-3 fights right when the game started. Nobody wants to die the second they start the game (although maybe I make a harder mode once I’m done with this first round and make it more like that). Anyway, I nerfed the crap out of the shadows and thought it was going to be decently functional. To test it, I then wrote up a little battle simulator script in Python, just to see what it was like. You can check out that code here. It’s not really anything special and it’s going to be go under some severe edits from it’s current version, but it’s a basic copy nonetheless. Anyway, when I began throwing in values to test it out, I found it wasn’t so bad for the first few levels. Cez and Lela had no problems taking out around 4-5 enemies before getting in big trouble, and were able to use the initial three health potions I gave Lela to start to keep themselves alive for around 21-22 battles. I didn’t think the village should be too far away (maybe 4-5 battles or ~15-20 steps), so I thought this was good. I then decided to test it out for a few levels down the road – this is where everything went really, really wrong. Basically I have the shadows scaling harder than the party and so, despite being able to handle a few things early, a few levels down the road becomes extremely difficult, and even when a number of levels ahead of the enemies they could not do much. For now, I’m exploring different ways to scale the enemies so they do get stronger (especially once the full party is rolling), but keep them weaker. Right now I’ve been exploring linear-log scaling and exponential scaling (I’m liking exponential scaling as well), but we’ll see where I end up after some more testing. That’s all I’ve got for now (I know this has gotten pretty long).