Core73, COMBAT OVERHAUL, (Future): This one is a bit vague, mostly because the Combat Arc consists of so many small changes rather than a few sweeping additions. Aside from obvious changes to projectiles and the wrestling interface, skills could afford to overlap, attributes need to be associated to skills properly, skills could become rusty and ultimately degrade as in Armok 1, new general combat related skills can be added, styles/techniques for weapon/weaponless fighting roughly along the path Armok 1 had started, etc. As a dev item, this'll be done when combat more or less makes sense.
Req331, ATTACK OPPORTUNITY NUMBERS, (Future): It should generate random variations on rolls for each attack for a given turn between each creature, so that a swing at the head one turn is almost impossible, while grabbing the arm could be three times as easy as normal. This will lead to more variety in combat AI, rather than just having the 'best' moves used all the time.
The current combat system treats unarmed combat fairly well for this stage, while armed combat is much more... boring. This needs to change.
1.) Create a system much like unarmed combat for weapons fighting in close quarters. The system would revolve around "lines of attack" to describe how the blow would fall. The lines would be determined based on a 3x3 grid system.
An attack along any of those lines must hit certain body parts. A good start would be to emulate a basic fighting stance with two hands on a weapon, and see which body parts you could hit.
The interface would be something along the lines of attack w/weapon->start point->end point. If the start point and end points are the same, then the system interprets that as a thrust.
However, this isn't a full simulation yet...
2.) In most fighting systems, blows with weapons are delivered with steps, to increase power and change the range. This should not only be possible, but desirable. Perhaps it gives bonuses to the damage of the strike, with a small chance of overpowering any blocks? This can be done with the charge system in place now.
3.) The attacking along lines idea would work well with a more advanced system of determining possible targets. This could grow into a quick dwarf dodging a thrust, seeing the weapon arm wide open, and delivering a blow. This would improve on the random number generator above, but might make presentation a lot more difficult.
4.) Speaking of tracing the weapon's arc, this could be expanded into parrying. The weapon's (and arms') arcs could be saved, and a combatant could try to move his weapon into one of these arcs, altering it to keep it from hitting him, as a reaction.
STILL TO DO: Differentiate stop-blocks, setting aside, and counter attacks that would stifle the original attack. Expand this into multigrasp weapons. Allowing sufficiently long weapons to attack with one part while blocking with another part.
5.) Binding.
STILL TO DO: Everything.
(My original idea: This would be horrific to code, but it's an integral part of weapons fighting. Binding in real life is difficult to accurately model because it depends heavily on the interplay of torques between weapons. A crude simulation would have a weapon divided into so many parts (say, 5 for a dwarven sword) and use integers to represent length (1-5). The torque could be length times strength. The total torque divided by the moment of inertia of both weapons (which could be simply additive--an approximation function would have to take over here) would be the total angular acceleration (Again, approximate this to a nice, simple number). When you can thrust, slash, or bash according to the arc system above, that option appears.
Still talking about binding, there are more interesting things that can happen with binding, such as suddenly breaking off a bind to throw a much stronger opponent off balance (time spent off balance= torque applied/the dwarf's speed?). This would have to allow how much strength you put behind a bind be variable. It would also have to have the difficulty of slipping from a bind inversely proportional to the length. There are other nasty things, too, like using the hilt to bash your opponent's face from a bind. This requires that in the bind, one can pivot the weapon around the bind point.)
6.) It would be helpful to start keeping track of the velocity of strikes and weight distributions, with massive approximations, and make damage dealt proportional to the momentum.
7.) Fighting with not-really-weapon areas. This would be basically bashing with hilts, crossguards, stabbing with anything pointy, slashing with anything sharp, and so on. Should be an "attack of opportunity" or last resort. Would require that everything that's edged have a sharpness value, everything pointy have a stabbiness value, and everything else having a weight value, to create realistic fighting. Weight shouldn't be too hard, esp. if you define volume and material density. Sharpness and stabbiness could be set arbitrarily.
STILL TO DO: Attacking with *parts* of the weapon would require some gymnastics, such as sectioning the weapon--but perhaps that can be done with the length figure.
8.) Stances. This fits in nicely with the arc idea--from one stance, your arcs will come in one way, and so can be blocked like so, but from another, they'll come in another way, and a different method of blocking is in order. Also, parrying from one stance is easier than parrying from another stance, and the arcs would reflect this. Perhaps DF can make these stances simple, and cache the distribution of the body parts in the 3x3 grid.
STILL TO DO: Figuring out a way to generate effective stances at world-gen, or whenever needed. Figure out a way to generate attacks, defenses, and so forth from a stance. Use the position of body parts to determine what attacks are stronger than others. Use the position and strength of a swing to determine how long it takes to land, and all the related stuff for parries.
9.) Range. It should come into effect here, as a dwarf should be able to simply step back to keep someone from actually hitting them, if they're far enough away, and quick enough. This would require length, width, and height dimensions given to every object in the game, and enforcing these dimensions in tile space.
STILL TO DO: Moving things into tilespace as-is.
10.) Related to range, sidestepping certain attacks should be possible.
STILL TO DO: Determining when this is possible.
So, these are all really not much fun to code, or pragmatic in and of themselves. However, if these are treated well, and don't take too much memory, the following exchange could happen quite regularly. (Warning: Uses original binding idea.)
Two swordsmen stand at the ready, holding their swords above their heads, over their right shoulders. They stand two spaces away from each other, as they want to stay out of range of the other. The first dwarf, Urist McSlashy, steps foreward and swings across, at the second's exposed left shoulder. The second, Urist McStabby, swings diagonally downward at the McSlashy's left shoulder, with his hilt more downward, putting his weapon in the way of McSlashy's cut. He also steps foreward. McSlashy, seeing his predicament, and seeing that his weapon's length 4 is on his opponent's 1, binds McStabby, overpowers him, and stops the cut to his shoulder. McSlashy quickly attempts to thrust at McStabby's face, moving his weapon from binding at length 4 to length 2. McStabby steps backward, moving his weapon from binding at length 1 to length 4, and is able to set aside the thrust. He then steps foreward to return a thrust at McSlashy's face, moving his weapon from binding at length 4 to binding at length 2. McSlashy sidesteps this diagonally foreward, continuing to bind McStabby. McStabby is unable to turn his sword, since both are binding at length 2, and they are of similar strengths. McSlashy is therefore able to quickly pivot his blade around the McStabby's blade, and thrust his hilt into his opponents face to knock him out.
I stole most of that from some medieval fightbooks.
tl;dr: Weapons combat needs an overhaul.