Selective RNG shaping and tuning to prevent unintended edge cases.
The problem of Random Number Generation is always an interesting one in games. Even after coding a rather advanced and rigid system in my roguelike project I still had the feeling that numbers weren’t quite as random as they should be.
But that’s the point: it’s the human perception to be broken.
So that’s the idea behind “RNG shaping”. You add non-random rules to randomness so that, for example, you won’t get ten “tails” in a Heads or Tails game. Because if that happened you’d think the game isn’t really working.
Accurate randomness would make randomness feeling not enough random. So we shape it to make it work more like our broken perception of it :)
Since I’m dealing with similar design issues let’s be polemic. The specific argument here is character creation. They try to fix the problem where you can potentially create a character that sucks. They say it’s bad.
Spoony summarizes well why it’s not, watch from minute 19:35 to 24:30, where he actually talks about point allocation, “you are a bunch of pussies and coddled babies”, “THEY THINK THEY ARE BEING RETRO”:
Of course I thought about that, and of course it’s not a new problem, and classic RPGs all tackled it in some way. Most of the recent D&D versions give you a number of methods to create a character, and you can definitely see a general trend going from early RPGs to the late ones. In ancient times it was all about the dice. There are systems where you roll everything. You roll for your age, race, class, statistics, profession and so on. This means it’s all random and the “fun” is just to roleplay whatever comes up. Even if what comes up is a beggar covered in rags and without a leg.
In a actual RPG with people this might be a little easier, but it’s not very fun if you play a computer one with a set content that requires some minimal competence (in doing the tasks). And so you see the trend in modern games. You don’t roll anymore the dice, but you use a “point system”. Where you can purchase improvements, maybe with an adaptable system where higher values also cost more points.
Is there a good solution? Nope, that’s the point. There’s never one better solution. A point system has the negative consequence of making every character the same. If I make a warrior then I’ll put the points in similar things, if I make a wizard I’ll go for high Intelligence. Since the point system is more “balanced” the result is in characters that have very little diversity.
It’s the reason for my system I went for a classical solution. I want to see a system that offers a lot of variance, and that also means that it should cover all types, from those that are awful to the walking demi-gods. I like a system that is potentially open to everything, more than a “game” system where all characters are just “game classes”.
That’s a basic difference between an actual RPG system, that builds a world. And a game system, that builds a game.
Pillars of Eternity went for the game system. Instead of having statistics that define a character for what it is (personality, aspect, physical and mental qualities), they decided to only use statistics that are exclusively combat related, and class-generic (which is their idea of innovation).
Instead of Strength, they have “Might”. Which is no actual Strength, like what you can lift and carry. Nope, Might is just a damage bonus, and it applies to all possible damage. So you are a wizard, your magic dart will deal more damage if you have more Might. Or “Intelligence”, that increases your area of effect or duration. Even if you use some melee skill.
Guess what? None of this is new. Blizzard, who would sacrifice all RPG substance for game-y purposes, has removed the stats point allocation in Diablo 3. The moment you remove the idea of numbers that define your character, you have essentially a talent system. Or a modular system where instead of putting together incremental bonuses you instead assemble modules of “effects”. Which is usually better received by players since you juggle “fun” skills, instead of meaningless +0.1 increments (and this is the whole axis that divides Diablo 3 from, say Path of Exile).
That happened to World of Warcraft too. Out goes the talent system where you juggled a myriad of incremental effects, in goes the system where you juggle an handful of skills/modules. Streamlining ALWAYS DEMANDS MORE STREAMLINING.
Pillars of Eternity solution isn’t smart or even innovative. It’s an half-assed compromise who had the only purpose of doing what Blizzard did, but without giving the impression they went that way (and so pissing off those who expect an actual RPG). It’s THE MEDIOCRE MIDDLE-GROUND. Where you are too scared of going “all in”.
The fundamental difference between designing a consistent system that builds a world, so all scales, all characters, from the crappiest one to the god-like immortal status. To a system that builds a “game”. Where the system only knows and builds “balanced” tools. Where every character is merely a combat-oriented device, and the only definition it has, and the choice you have, is what kind of attacks you want to perform. That is no different than deciding what kind of weapon to use or power-up in God of War. The “character” is no more. Streamlining cuts the corners. To cut your cardboard character they give you scissors with a rounded point so you don’t cut yourself and make a “bad” one.
The problem is that Pillars of Eternity doesn’t know what it is. It is legitimate to go for the second style of system design, but once you go there you should know what you’re making. If you decide that statistics have to be always balanced and only applying to combat, then BETTER games have figured out that at that point it’s good to abandon +1 increments to make players juggle more hefty modules that are directly more interesting. A character is no more.
Pillars of Eternity offers what is essentially a spell-making tool. Take this damage component, add this area of effect. But since you don’t have control on the actual spell (beside picking a class), you end up with a system where those fixed choices are applied to ALL “spells”. And in the end it means this point allocation really creates no concrete difference. No actual impact. It doesn’t give you control or choice on something that is actually interesting, since it’s just +1 bonuses applied across the board, and since everyone has the same numbers because the system needs to be “balanced”.
So the conclusion is that Pillars of Eternity first emptied the classic statistics system. Then kept it there, as a relic of old times, modified in a way so that it becomes a modular system, but not completely. It’s a partial fix that doesn’t fix anything. That doesn’t innovate anything. Because it only comes out from a type of design triggered by an identity crisis: of being a computer game that also wants to be a classic RPG. If they think character customization needs to be tightly controlled to avoid “bad” characters then you should have the courage to hand out the character and removing the point allocation, since it concretely does nothing at all and is only kept there as an illusion of control, while thinking players are gullible enough to not see it through for what it is.
Game designers who want to make classic RPGs even if they don’t know what they are. And so make copies that are empty, soulless shells, that have nothing of what make the originals good.
A copy, of a copy, of a copy. With the original image progressively fading. There’s AD&D, then there’s Baldur’s Gate, and then there’s Pillars of Eternity, who thinks “knows” batter than AD&D and so goes to “improve” it. Poor fools. There’s no AD&D left there, only an empty shell that, for the kind of game they make, is only baggage.
If I say all this it is because elegant modern game design is frequently starting to take shape around “afterimages” (it’s happening for Dark Souls-likes too). Only the last stage is remembered, vaguely. The one before is forgotten. So is lost the origin of those mechanics and their purposes, their history. The fact is: without memory you can’t expect to fix or improve anything.
A classic, Pillars of Eternity, is not. Being a classic requires memory.
Pasting here my considerations on range combat rules. Maybe someone else can find this interesting. I'm also open to suggestions.
Of course with the awful coding skills I have even implementing a rough shell of all this will take me forever. But at least IT SEEMS there's nothing technical that looks impossible.
In the end my game will never become real, but MAYBE someone will be inspired and will go down the same path :)
Now that I have a rough line function that deals properly with FOV and walls I think I have the technical basis to start integrating some form of ranged combat into the actual game combat. But I figured out that before I can do that it's better if I have a good idea of the ruleset I'm going to use and all the features it needs to have.
Of course I'm not inventing anything here, so I went looking how ranged combat works in various rulesets, taking out the individual features I like, and then integrate them into my own system. The goal even here is that the number of "moving parts" determines the actual depth and complexity of the game. So more moving parts, more potential complexity. On the other side the system needs to be "realistic" so that these moving parts behave consistently. This means that if they do behave consistently then the game mechanics may be complex, but also intuitive.
So here's the various points I'd ideally cover:
While a sword usually has the Strength stat adding to the damage, a bow only have its own fixed Strength. This means the character stat only determines if a bow is usable or not, but if in excess the Strength is not added to that of the bow, which is fixed (realistically).
Knock and draw delay. Since there's going to be a rough facing mechanic, I can determine if a character is being actively "threatened" in melee. If so you just can't knock and draw the arrow or bolt. If instead the arrow was already prepared, then of course it can also be shot at point blank. Knock and draw delays are fixed (maybe with a small "Agility" bonus) and happen automatically as long a ranged weapon is equipped. Swapping from melee to range of course takes some time.
I'm integrating an aiming mechanic by default. Preparing an arrow is not enough to shoot properly. The idea is that I'll use the character's Dexterity attribute. The Dexterity determines the speed at which the skill "fills out". If for example a character has 80% in the bow skill, he still can't simply draw and shoot. It takes time to take aim, and this time slowly fills up the skill. So for example in a round a character might fill 50% of his skill. Meaning that our guy with the skill at 80% gets an actual 40%, if he waits one more round he might get to 65% and only after waiting a third round he might shoot at his full 80%. This because since I have a classless system I also want to avoid a scenario where characters eventually max all their skills and so end up identical. If stats matter then it means a mage might focus on the bow skill and become very good with it, but the Dexterity still determines the time it takes to "fill out" the skill value, and so affecting directly the rate of fire. Meaning that in the end there's a potential for a great archer, but not one that was built precisely with that goal.
Range is divided in tiers (and tiers depend on the weapon stats). Every tier adds a fixed penalty to the roll. This obviously means that firing at long range makes the target much harder to hit. The penalty is fixed, meaning that a character with a lower skill might be completely crippled. If the penalty matches the character's skill then the shot is simply impossible (unless he rolls a lucky critical).
Another penalty depends on the movement of the target. Whereas range penalty is fixed, the movement penalty is proportional to the character skill. So the target might move in a way that gives a 25% penalty. This penalty is applied to the skill. If the character has an 80% skill then he shoots at 60%, if he has 40% he shoots at 30%. So it applies proportionally and in a different way to the range penalty.
Dealing with actual aim, the possibility to target a precise location. I'll probably handle this so it's based on a "rigged range". In general the location is determined by rolling dice. Taking a precise aim means adding a penalty to the hit roll, and then a bonus to the location roll. The more distance the more the location roll can be actually guided. But this should provide the effect that if you aim for the eyes from far away then you're still more likely to hit the head or upper body rather than the legs.
During the flight of the arrow, for each actual target encountered there's a fixed, arrow-based % to hit the target (friend or foe). So if you actually aim to hit something behind something else, the arrow still has to fail a roll to hit the first target in the way. For the actual aimed target the to-hit roll depends on the weapon skill, for accidental targets instead the roll is fixed. And for every target the arrow passes a penalty is added to every consequent roll. Meaning it's more likely the arrow will miss if it passes through multiple targets without hitting, simulating the fact it's likely to hit some piece of armor and get deflected (also simulating the fact it's more convenient to aim at someone in the front, rather than aim someone in the back with the hope the arrow hits someone along its flight. If you aim someone in the back you just make more likely the arrow hits no one at all).
Damage is obviously done with the fixed weapon strength as described above, plus the arrowhead type. So there might be arrows that make worse wounds, cause bleeding, or pierce armor, or stun. Stuff like that, but only affecting the damage roll.
All this to explain an idea of design I have: detail and complexity open the way to meaningful combat with interesting mechanics. And it can all work in a simple and intuitive way as long the rules are transparent and behave consistently.
Of course coding all this is an entirely different matter.