SAAj
Recruit
Hello, all. I recently bought Mount & Blade: Complete and absolutely love it. The only issue I have with it is that armor acts as simple damage reduction. I have an alternate damage system that I feel adds some realism to the use of armor, as well as the tactical use of certain weaponry against certain armor types. This system is at the heart of a small group of mods that alter controls and movement to more realistically represent the way characters would move and behave in different types of armor.
I am fairly new to programming; I have been learning on my own using online tutorials and an excellent program (Scirra Construct) written in Python. I originally posted this over at MBX, but a lot of the boards seem to be fairly inactive. I thought I might get better results here. While you're more than welcome to critique the system itself, I'd also like to know from veteran M&B modders what kind of technical expertise I would need in order to implement this. I know for a fact that I couldn't do it using the in-game editor, and since I'm still very new to coding, I'm not sure to what extent I would have to alter the game in order to achieve this, or even how receptive the engine would be to such a modification.
Is it feasible? Is it possible? What, specifically, should I learn in order to do this?
Mechanics
The HP bar is replaced by a 'Wounds' bar, which acts as a percentage (0-100%) rather than as points. Every time you take damage, it is added to your wounds, which then act as a percent chance to kill you.
Example: if you have 0 wounds and take 20 damage from a dagger, you have a 20% chance to die from that attack. If you survive and take another 20 damage, your total wounds are now 40, meaning you have a 40% chance to die from this second attack, and so on.
Some characters are naturally tougher than others. It would be a sad state of affairs indeed if a Nord huscarl curled up and died as easily from a dagger wound as some pansy archer. A character's innate toughness is rated by its fortitude. When damage is taken, it is divided by the character's fortitude rating. A typical non-combatant will probably have the lowest fortitude rating, 0.5, meaning that they will take double damage from attacks. A dagger wound that would probably just injure a seasoned soldier with a fortitude rating of 1 is twice as likely to kill a non-combatant. At the other extreme, the toughest of the tough have a fortitude rating of 2, taking only half damage from all attacks. While attacks to the torso are calculated at the character's standard fortitude rating, attacks to the head are calculated at half fortitude (since it is a more sensitive area), while attacks to the legs are calculated at double fortitude (since there are no vital organs in the legs).
Example: A huscarl, being the manly man he is, charges into battle with only a greataxe and a loincloth. He is immediately greeted with a throwing spear in the stomach. This spear deals 40p, nothing to scoff at. But our huscarl is not some lady-in-waiting; he has a fortitude rating of 1.7 by which the damage is divided. Instead of the normally-grim 40% chance to die from the attack, he has only a 23.5% chance. He grits his teeth, keeps charging, and returns the courtesy by knocking the spearman's head off.
Even with high fortitude, this seems too chaotic, since it will seem like anyone can get lucky and score a kill if they shoot enough arrows. However, armor changes everything. Each piece of armor has a coverage rating which determines what percentage of your body it covers. When a character attacks that part of your body, the armor's coverage rating acts as a percent chance for the attack to strike armor rather than unprotected flesh. Each type of armor has different damage reductions (in absolute values, not percentages) against different damage types; if the attack does enough damage to overwhelm the armor's damage reduction, you take the remainder of the damage.
Example: You are wearing a leather vest that offers 80% coverage of your torso and 25c damage reduction. You are attacked by a 20c scimitar that happens to strike the armor. Since it does less damage than the damage reduction against cutting attacks, you ignore the attack. Let's say, however, that you are hit with a 40c poleaxe that also strikes armor. Your 25c damage reduction would not stop the attack, but it would reduce damage by 25, from 40 to 15. If your enemy is smart, he'll simply thrust with the poleaxe instead; leather armor only negates 5p.
In addition to wounds, characters can sustain injuries. Injuries can not kill the character, but they can prevent it from successfully performing various actions. The character's body is divided into the head, torso (which includes arms), and legs, each of which behave differently when injured. A leg injury acts as a percent chance that the character will stumble per step taken, a torso injury acts as a percent chance that the character will falter per attack or block attempted (meaning they fail to deal or block damage), and a head injury acts as a percent chance to perform a random action per action attempted (in other words, your character may get confused and take a step forward instead of to the left, or block low instead of attack high). In addition, head injuries act as a percent chance that the character will briefly lose sight/hearing every time it takes a hit to the head. Both torso and leg injuries impair characters in terms of riding; either one can result in failure to mount, dismount, or control a horse.
Example: An archer has been hit in the shoulder by a sling stone for 15b; with a fortitude of 1 and no armor to protect him, he has received 15 injury. Every time he fires an arrow, he has a 15% chance of shaking and dropping the arrow instead.
Different types of weapons have different ratios of wound versus injury damage. Generally, cutting weapons deal equal wounds and injuries, since they can easily sever muscle and blood vessels alike. Piercing weapons deal more wounds than injuries, since they can easily hit vital organs but rarely do significant damage to muscle and bone. Bludgeoning weapons deal less wounds than injuries, since they can easily break bones but rarely deal fatal damage unless they cause internal bleeding.
Example: A knight gets overconfident and charges a shield line. As he breaks through, a warhammer catches him across the chest, dealing 10b/60b (10 wound/60 injury) damage. Though he is unaccustomed to taking hits and has a fortitude rating of 0.8, his breastplate offers 40b damage reduction. While this is enough to keep the attack from being potentially fatal (the 10b wound damage is negated by the armor), he still feels the impact of the remaining 20b injury damage divided by 0.8; 25 injury damage rocks his body, fracturing two ribs and resulting in a 25% chance to fail any attempts at attacking or blocking.
These are the basic principles of the system. It seems overly complex, but it comes down to a few simple steps. When a character is attacked:
1. Roll coverage to see if the attack hits armor.
2. If the attack hits flesh, proceed to step 4.
3. If the attack hits armor, apply the appropriate damage reduction.
4. Divide the damage received by the character's fortitude rating.
5. Add the adjusted damage to the wounds and/or injuries for that body area.
6. If wounded, roll the new wound total as a chance to die from that attack.
Alterations
The modifications from native will be something along the lines of 2 damage stats for each weapon (wounds/injuries), a fortitude rating for characters, a second HP bar for characters (for injuries, with the primary HP bar acting as the wounds bar), and 4 new stats for armors (coverage and the 3 types of damage reduction). There would also need to be new animations for stumbling and faltering on attacks/blocks, as well as aesthetic effects for brief flashes/blackouts when taking hits to the head. There may also need to be numerical values assigned to all possible inputs, so that the system can randomly roll inputs for head injuries.
Game Balance
Overall, this will make archers significantly more powerful and cavalry significantly more vulnerable, since piercing attacks will make mincemeat of chainmail and horses (as they did in real life). Even heavy cavalry in the Middle Ages could not charge crossbowmen without support; it's about time piercing attacks, especially ranged piercing attacks, got the respect they deserved. Likewise, heavy blunt weaponry will be the bane of every knight's existence (again, like in real life). One flanged mace is worth a hundred swords against a plate helm, and knights will learn to fear a shield line bristling with warhammers. There is no such thing as a negligible attack in this system; every strike can kill or cripple, and there is an adequate offense against every armor type, even if some offer more overall protection than others.
Demo
I have built a demo using Construct to give players an idea of how the new damage system works. It's pretty rough around the edges, but it should be fairly simple to understand. I wish I could export it to Flash or HTML5, but this version of Construct only exports to .exe for now. Please let me know if either the link or the .exe do not work correctly, or if you have any other questions regarding the system. Thank you for your time and patience; any and all feedback is welcome.
http://www.mediafire.com/?aaqwj9tbune7e5q
I am fairly new to programming; I have been learning on my own using online tutorials and an excellent program (Scirra Construct) written in Python. I originally posted this over at MBX, but a lot of the boards seem to be fairly inactive. I thought I might get better results here. While you're more than welcome to critique the system itself, I'd also like to know from veteran M&B modders what kind of technical expertise I would need in order to implement this. I know for a fact that I couldn't do it using the in-game editor, and since I'm still very new to coding, I'm not sure to what extent I would have to alter the game in order to achieve this, or even how receptive the engine would be to such a modification.
Is it feasible? Is it possible? What, specifically, should I learn in order to do this?
Mechanics
The HP bar is replaced by a 'Wounds' bar, which acts as a percentage (0-100%) rather than as points. Every time you take damage, it is added to your wounds, which then act as a percent chance to kill you.
Example: if you have 0 wounds and take 20 damage from a dagger, you have a 20% chance to die from that attack. If you survive and take another 20 damage, your total wounds are now 40, meaning you have a 40% chance to die from this second attack, and so on.
Some characters are naturally tougher than others. It would be a sad state of affairs indeed if a Nord huscarl curled up and died as easily from a dagger wound as some pansy archer. A character's innate toughness is rated by its fortitude. When damage is taken, it is divided by the character's fortitude rating. A typical non-combatant will probably have the lowest fortitude rating, 0.5, meaning that they will take double damage from attacks. A dagger wound that would probably just injure a seasoned soldier with a fortitude rating of 1 is twice as likely to kill a non-combatant. At the other extreme, the toughest of the tough have a fortitude rating of 2, taking only half damage from all attacks. While attacks to the torso are calculated at the character's standard fortitude rating, attacks to the head are calculated at half fortitude (since it is a more sensitive area), while attacks to the legs are calculated at double fortitude (since there are no vital organs in the legs).
Example: A huscarl, being the manly man he is, charges into battle with only a greataxe and a loincloth. He is immediately greeted with a throwing spear in the stomach. This spear deals 40p, nothing to scoff at. But our huscarl is not some lady-in-waiting; he has a fortitude rating of 1.7 by which the damage is divided. Instead of the normally-grim 40% chance to die from the attack, he has only a 23.5% chance. He grits his teeth, keeps charging, and returns the courtesy by knocking the spearman's head off.
Even with high fortitude, this seems too chaotic, since it will seem like anyone can get lucky and score a kill if they shoot enough arrows. However, armor changes everything. Each piece of armor has a coverage rating which determines what percentage of your body it covers. When a character attacks that part of your body, the armor's coverage rating acts as a percent chance for the attack to strike armor rather than unprotected flesh. Each type of armor has different damage reductions (in absolute values, not percentages) against different damage types; if the attack does enough damage to overwhelm the armor's damage reduction, you take the remainder of the damage.
Example: You are wearing a leather vest that offers 80% coverage of your torso and 25c damage reduction. You are attacked by a 20c scimitar that happens to strike the armor. Since it does less damage than the damage reduction against cutting attacks, you ignore the attack. Let's say, however, that you are hit with a 40c poleaxe that also strikes armor. Your 25c damage reduction would not stop the attack, but it would reduce damage by 25, from 40 to 15. If your enemy is smart, he'll simply thrust with the poleaxe instead; leather armor only negates 5p.
In addition to wounds, characters can sustain injuries. Injuries can not kill the character, but they can prevent it from successfully performing various actions. The character's body is divided into the head, torso (which includes arms), and legs, each of which behave differently when injured. A leg injury acts as a percent chance that the character will stumble per step taken, a torso injury acts as a percent chance that the character will falter per attack or block attempted (meaning they fail to deal or block damage), and a head injury acts as a percent chance to perform a random action per action attempted (in other words, your character may get confused and take a step forward instead of to the left, or block low instead of attack high). In addition, head injuries act as a percent chance that the character will briefly lose sight/hearing every time it takes a hit to the head. Both torso and leg injuries impair characters in terms of riding; either one can result in failure to mount, dismount, or control a horse.
Example: An archer has been hit in the shoulder by a sling stone for 15b; with a fortitude of 1 and no armor to protect him, he has received 15 injury. Every time he fires an arrow, he has a 15% chance of shaking and dropping the arrow instead.
Different types of weapons have different ratios of wound versus injury damage. Generally, cutting weapons deal equal wounds and injuries, since they can easily sever muscle and blood vessels alike. Piercing weapons deal more wounds than injuries, since they can easily hit vital organs but rarely do significant damage to muscle and bone. Bludgeoning weapons deal less wounds than injuries, since they can easily break bones but rarely deal fatal damage unless they cause internal bleeding.
Example: A knight gets overconfident and charges a shield line. As he breaks through, a warhammer catches him across the chest, dealing 10b/60b (10 wound/60 injury) damage. Though he is unaccustomed to taking hits and has a fortitude rating of 0.8, his breastplate offers 40b damage reduction. While this is enough to keep the attack from being potentially fatal (the 10b wound damage is negated by the armor), he still feels the impact of the remaining 20b injury damage divided by 0.8; 25 injury damage rocks his body, fracturing two ribs and resulting in a 25% chance to fail any attempts at attacking or blocking.
These are the basic principles of the system. It seems overly complex, but it comes down to a few simple steps. When a character is attacked:
1. Roll coverage to see if the attack hits armor.
2. If the attack hits flesh, proceed to step 4.
3. If the attack hits armor, apply the appropriate damage reduction.
4. Divide the damage received by the character's fortitude rating.
5. Add the adjusted damage to the wounds and/or injuries for that body area.
6. If wounded, roll the new wound total as a chance to die from that attack.
Alterations
The modifications from native will be something along the lines of 2 damage stats for each weapon (wounds/injuries), a fortitude rating for characters, a second HP bar for characters (for injuries, with the primary HP bar acting as the wounds bar), and 4 new stats for armors (coverage and the 3 types of damage reduction). There would also need to be new animations for stumbling and faltering on attacks/blocks, as well as aesthetic effects for brief flashes/blackouts when taking hits to the head. There may also need to be numerical values assigned to all possible inputs, so that the system can randomly roll inputs for head injuries.
Game Balance
Overall, this will make archers significantly more powerful and cavalry significantly more vulnerable, since piercing attacks will make mincemeat of chainmail and horses (as they did in real life). Even heavy cavalry in the Middle Ages could not charge crossbowmen without support; it's about time piercing attacks, especially ranged piercing attacks, got the respect they deserved. Likewise, heavy blunt weaponry will be the bane of every knight's existence (again, like in real life). One flanged mace is worth a hundred swords against a plate helm, and knights will learn to fear a shield line bristling with warhammers. There is no such thing as a negligible attack in this system; every strike can kill or cripple, and there is an adequate offense against every armor type, even if some offer more overall protection than others.
Demo
I have built a demo using Construct to give players an idea of how the new damage system works. It's pretty rough around the edges, but it should be fairly simple to understand. I wish I could export it to Flash or HTML5, but this version of Construct only exports to .exe for now. Please let me know if either the link or the .exe do not work correctly, or if you have any other questions regarding the system. Thank you for your time and patience; any and all feedback is welcome.
http://www.mediafire.com/?aaqwj9tbune7e5q