Hey Folks

Overcat
What's up, questers?

Haven't been here in a while. School obtains. Nice new forum! I hope everything is progressing well with Quest and the QDK. So what's been going on in the past year or so? Anybody have a nice, neat recap? (After bogging down and obssessing into and over mechanical engineering stuff, I've suddenly got the Game Building Bug again. Complete infestation. Welts everywhere.)

Elexxorine
You're back! Life gets the better of us all sometimes. Are you still working on Faeguard? I really wanted to see it.

Overcat
Hey, elex.

Yeah - Faeguard is still there, but I think I might just turn it into actual fiction instead.

Working on a different RPG/IF, with some (at least I think) original gamist elements. If school doesn't pull me under, I'll definitely need playtesters and maybe even subplot writers. I just joined the University of Waterloo's robotics team, and they've got some pretty cool stuff that I can foresee sucking up a lot of my time (especially their AI software, which I'm super giddy about).

Anyway. Good to see Quest is still evolving. If one of us can manage to get a really good game out (not necessarily IF), that would be great.

Elexxorine
Cool. Might I be able to see at least some of the asl for Faeguard as I was wondering how you did some stuff such as your battle engine. I'm still working on HavenHold which is getting a nice new battle engine which is very narrative but has hidden gamist-ness.

I love AI! I thought of ditching mechanical engineering and doing some like robotics. I did a course called 'robotics and the meaning of life', it was fun, basically an intro into robotic, AI, programming, and thinking about AI vs. RI (real intelligance), and when computers are smarter than us, what that means for us. Fun course.

HavenHold has moved to http://havenhold.nevetsweb.com where people are now waiting for the next release, feel free to join up and play the alpha.

Overcat
You taking Mech Eng? Nice. I like it. The MIT OpenCourseWare site has tons of spot-on lecture notes and labs in all things engineering, including robotics. Check it out to get that extra edge over the other students. I would have loved to take that robotics course you mentioned. I will check out your game, too - thanks.

As for the ASL code, well, that would be a lot to post. Did you have something specific in mind that you were wondering about (besides combat as a whole)? My current implementation for melee combat is as follows:

Combatants select a style, defense, and stance.

STYLE
The style is how a combatant implements their melee attack, and there are three options for this: Push, Plane, and Pull. A push attack is strength-based, and can do more damage. A plane attack is speed-based (sweeping, arcing), and is faster. And a pull attack is agility-based (duplicitous, feinting). A combatant is more or less adept at these types of attacks in direct proportion to their score of the relevant stat, their skill with the specific weapon in hand, and the weapon's preferred type of attack style. For instance, maces are best when bashing, so they get a bonus to push attacks. But they are heavy and slow, so they get penalties to planes and pulls (though you can still implement those styles with the mace, and sometimes it may be beneficial.)

DEFENSE
The defense is how a combatant defends themselves, and there are three options for this: Block, Parry, and Dodge. Blocks are strength-based, parries are speed-based, and dodges are agility-based. Blocking may only be done if an object in hand or object worn can act as a blocking device. Shields and bracers and clubs (and even swords, to a degree) allow the combatant to block, but rapiers and daggers do not. Parrying may only be done if an object in hand or object worn can act as a parrying device. So swords and bracers allow the combatant to parry, but maces and shields do not. Parrying is also the least energy-intensive of the three defenses. One may always dodge, though this is done best when only lightly burdened and carrying relatively light items in hand. Having no items in hand is best for dodging. Dodging is also the most energy-intensive of the three defenses. A combatant is more or less adept at these defenses in direct proportion to their score of the relevant stat, their skill with any pertinent object being used, and the object's preferred type of defense. (So while you can block with a sword, it might be better to parry with it instead.)

STANCE
A stance is how the combatant plants their feet and presents their body to an opponent, and there are three options for this: Full, Half, and Quarter. A full stance is forward facing, with feet planted solidly at shoulder width. It is strength-based, and best for push attacks and blocking. A half stance has the combatant turned at a 45 degree angle to the opponent, knees bent, leading with one arm. It is speed-based, and best for plane attacks and parrying. A quarter stance has the combatant at almost 180 degrees to the opponent, knees very bent, offering the smallest amount of surface area to enemy attacks. It is agility-based, and best for pull attacks and dodging. A combatant is more or less adept at these stances in direct proportion to their score of the relevant stat. Some stances are better when fighting on certain surfaces. For narrow ledges, quarter is best. On ice or uneven ground, full is best, etc.

ROCK, PAPER, SCISSORS
By now you will have noticed that everything rotates around the holy triumvirate of Strength, Speed, and Agility. This is done for the rock-paper-scissor (RPS) effect. In this system, strength beats speed, speed beats agility, and agility beats strength. So if someone attacks our combatant with an agile pull attack, it is best defended with a fast parry. If the combatant is attacked with a hefty push attack, it is best avoided with a dexterous dodge.

And so on.

This implies two things:

1) Just having better stats does not make you the victor
2) Having worse stats does not make you the loser

You may have to figure out the "combination lock" for different types of opponents. IE, goblins always pull-pull-push. If you figure this out, you can beat them, even if they have higher statistics. This does not mean, however, that a lowly upstart could overcome a powerful city guard - stats still come into play. Additionally, some enemies will apply rules to their attack combinations rather than just looped lists. The guard will always parry after you parry, or will always do push attacks if you are doing pull attacks, etc.

The choices a PC has about how to fight (melee) depend on:

1) Which of their stats are superior
2) The terrain
3) The amount of opponents
4) Their energy level/hp status
5) The opponent's energy level/hp status
6) The way the opponent(s) is/are fighting (their style, defense, and stance.)
7) Their skill levels

Elexxorine
Cool. But I remember reading something very different in your blog, with 'guard' values and such. Also you can email me the asl at [email protected] if you wish. I'm not sure what else you've got in your game, but any AI you've done but be good.

Overcat
I'll try to isolate what I had for combat code from the rest of the stuff and send it to you. It was not completed, but was supposed to be close to the following (these are my own private dev notes, and note the tables below will not format correctly in this copy-paste):


Combat

1 ) Compare NPC 1's Attack (IE, 5) to NPC 2's Parry (IE, 2).
2 ) 5-2 = 3.
3 ) Subtract the difference from NPC 2's Guard (IE, 35).
4 ) 35-3 = 32.
5 ) Because NPC 1 gained some ground award + 2 to his Attack (IE, now 5-12).
6 ) Compare Attack vs. Parry again: 10 vs. 5. (NOTE: Action choice possible here.)
7 ) Subtract the difference from NPC 2's Guard (32 - 5 = 27).
8 ) Award + 2 to NPC 1's Attack (now 7-14).
9 ) Not much chance of NPC 2 recovering from a hit here.
10 ) Once the Guard reaches 0 or less, the defender is hit.
11 ) Whomever hits first usually wins, barring armor.

1 ) NPC 1 Attacks 2, NPC 2 Parry's at 8.
2 ) 8 - 2 = 6.
3 ) Add the difference to the Guard (35+6 = 41)
4 ) Award NPC 2 + 2 to Parry (now 5-12).
5 ) And repeat. Action choice possible here.
6 ) Once the Guard reaches itself plus NPC 1's Lead, an offensive shift occurs.
7 ) NPC 1's State becomes Defense / NPC 2's State becomes Offense
8 ) Both choose new Actions

Guard

The Guard is a defensive combatant's effective rating at avoiding an incoming attack. It represents the momentum in a battle. If it falls to 0 or less, the defensive combatant is hit. If it rises to itself + the offensive combatant's Lead, then an offensive shift occurs: the offensive combatant goes on the defensive, and vice versa. The value of a Guard is determined by the skill of the defensive combatant, and his Combat Stance.

Combat Stance Guard

Cautious +30%
Defensive +15%
Normal +0%
Offensive -15%
Violent -30%

Lead

The Lead is an offensive combatant's effective rating at maintaining the offensive. It represents his willingness to give up the attack. The value of a Lead is determined by the skill of the offensive combatant, and his Combat Stance.

Combat Stance Lead Damage

Cautious -30% -10%
Defensive -15% -5%
Normal +0% +0%
Offensive +15% +5%
Violent +30% +10%

A more aggressive Combat Stance will benefit with a stronger hit, should a hit land. A less aggressive Combat Stance has the opposite effect.

Poise

Poise represents the balance of the combatant. The better the Poise, the better the Guard and Lead.

Poise Guard Lead

Perfect +20% +10%
Balanced +0% +0%
Unbalanced -20% -20%
Horrible -40% -40%

Poise drops when:

1) The force of a blow or deflection is stronger than the deflection or blow matched against it (Bad parry/block)
2) A bad dodge (on defence only)
3) A bad miss (on offence only)

Poise rises when a combatant Breaks. Breaking can only be done while on the offensive. By giving up the offensive, the combatant gains the time to reset their Poise one level up. Poise always begins at Balanced.

Combat Stance

Combat Stance, as described above, can only be changed while on the offensive, and only when the offensive is first gained. After the first attack has been made while on the offensive, the Combat Stance can no longer be changed until the offensive is lost and regained again.

Breaking

An offensive combatant may Break at any time to relinquish the offensive. As already mentioned, this would be done to either increase one's Poise or to work towards changing one's Combat Stance. Breaking, however, can be employed for a third reason: to avoid the penalty to your next Guard from losing the offensive in an offensive shift.

Whenever an offensive shift occurs, the offensive combatant who is becoming defensive faces a penalty to their Guard. The penalty is calculated as a measure of the amount OVER the Lead the defensive combatant pushed the aggressor. If the Lead was 20, the Guard 30, and the defensive combatant raised the Guard to 59 (9 over Guard + Lead), the offensive combatant becomes defensive, and faces a -9% to their Guard.

Offense

The more Force an attack has behind it, the more damage it will do. Force is a rating of Speed X Mass.

Speed is: Speed + (Might - Weapon Mass) + Random
Mass is: Weapon Mass

Force is augmented by the type of Combat Stance one employs. An Offensive Stance grants + 15% to Force, and a Violent Stance grants a +30% to Force.

The more accurate an attack is, the more likely it is to break the defensive Guard.

Attack Accuracy is: Prowess + Skill + Random

Defense

Dodging attacks has the highest chance of unbalancing the attacker.

Parrying with a dual weapon allows for Counters, attacks that don't automatically give the offensive.

Blocking with a shield also allows for Counters, but to a lesser degree. Larger shields give greater bonuses to Guard and larger penalties to dodge.

The more Force a block or parry has behind it, the more it will overcome the attacker's Guard, or knock him off balance. It is calculated the same as above, for the attacker.

The More Accurate a block, parry, or dodge is, the more it will overcome the attacker's Guard. This also is calculated the same as above, for the attacker.

Exchange Resolution

An exchange between two combatants has one attacking and one defending. The attacker generates an Attack Accuracy which is compared to the defender's Defense Accuracy.

Attacker Wins: If the Attack Accuracy is higher, the defender's Guard is reduced by the difference between the Attack Accuracy and the Defense Accuracy. If the Guard is reduced to 0 or less, a hit is recorded. (See below.) If the Guard remains above 0, the defender still managed to defend, but the attacker is building up momentum. If the defender is blocking or parrying, the Attack Force is compared to the Defense Force. A sizeable difference, especially for blocking, will cause either side to lose Poise. The difference must be greater for parrying, since a parry redirects force, while a block absorbs it. If the defender is dodging, a narrow miss by the attacker will drop the Poise of the defender, while an excellent dodge by the defender will do the same to the attacker.

Defender Wins: If the Defense Accuracy is higher, the defender's Guard is raised by the difference between the Attack Accuracy and the Defense Accuracy. If the Guard is raised above or to the initial value of the Guard + the attacker's Lead, and Offensive Shift occurs. An Offensive Shift means that the combatants exchange directives: the attacker becomes the defender, and the defender becomes the attacker. The new defender receives a penalty to their Guard equal to the difference between the value of the Guard during the Offensive Shift, and the value of the initial Guard + Lead. If the Lead was 20, the initial Guard 30, and the defensive combatant raised the Guard to 59 (9 over Guard + Lead), the offensive combatant becoming defensive faces a -9% to their Guard.

If the Guard is not raised above or to the initial value of the Guard + the attacker's Lead, then a check for Poise loss identical to that taken when the Attacker Wins the exchange occurs.

Hitting

Damage is inflicted as a wound level to a specific area of the body. The wound level, and area of the body, will determine:

1) Blood Loss
2) Mobility Loss
3) Pain

All three of these effects greatly degrade a combatants performance. Usually whomever is struck first will lose.

Wound Level Blood Loss Mobility Loss Pain # to Upgrade

Scratch NONE NONE 5 3
Minor 2% 5% 10 2
Moderate 6% 15% 20 2
Major 15% 35% 30 2
Deadly 35% 75% 40 2
MORTAL 75% 100% N/A N/A

Once the accumulated Blood Loss reaches 40%, unconsciousness occurs

Mobility affects the Accuracy of Attacks and Defends, but not the Force, and is applied as a percentage penalty.

Pain is compared to the combatants Will attribute. Any positive difference is applied as a penalty to Poise. This penalty is applied once. It may be regained as normal by Breaking. Higher pain may drop Poise more than one level, so it may take more than one Break to shake off the pain. If Pain > 0 but < Will, then any Pain is applied as a bonus to Force if the combatant chooses the Violent Combat Stance.

Each wound stacks its penalties with any other wound.

A wound upgrades its level if the combatant is hit in the same area more than once. In this case the wound's penalties all increase to whatever level it upgraded to. It takes 3 Scratch wounds to upgrade to a Minor, and 2 of any other kinds to upgrade to the next level. A Mortal Wound can never be dealt, however, and must by a cumulation of 2 Deadly wounds.

Armor

Armor affords great protection from blows, but decreases mobility.

Each piece of armor has a Hardness rating, a Condition, and a Condition Max. The Hardness rating determines how much damage the armor takes from an attack, as Attack Force vs. Hardness. The damage dealt to the armor is subtracted from the Condition. Condition / Condition Max determines the physical integrity of the armor. A 1/1 ratio, known as the Armor Ratio, means the armor is at 100% effectiveness. Anything below that and an attack may get through. The likelihood of the attack penetrating is 100% - Armor Ratio%. If the Armor Ratio is at 80%, then an attack that strikes the area the armor is covering has a 20% to penetrate. If it does penetrate, the Force of the blow is reduced by the same percentage. For instance, if a blow with 40 Force penetrates at a 20% chance, its Force is reduced to 20% as well (20% of 40 = 8 ).

Storage, Wielding, Wearing

Every character has body slots that represent the areas of the body that may either hold or wear something. When a character wields a sword, the character's SLOT_LEFTHAND or SLOT_RIGHTHAND is set to equal the item, and the item is moved to a universal WIELDED room. The items OWNER property is set to the character's name. So the same for items that may be worn. When a character wears a shirt, the character's SLOT_TORSO is set to equal the item, and the item is moved to a universal WORN room. The shirt's OWNER property is set to the character's name. Items that are put in a backpack or other inventory object (chest, pockets, etc.), are moved to a universal CONTAINED room, and have their OWNER property set to the name of the inventory object they are contained within.

Wounds

Wounds are stored on a character in much the same way. Each body part has a slot called WOUND_*, where * is the relevant body part. When a character is wounded on the left arm, the WOUND_LEFTARM property is set to the level of the wound inflicted. They are stored as x-x-x-x-x, where each x is a number representing how many of that wound level the body part has on it. x-x-x-x-x = Scratch Wounds-Minor Wounds-Moderate Wounds-Major Wounds-Deadly Wounds.

Counters

Whenever a defensive character builds their Guard to a sufficient level, they have the option of performing a counter attack. This sucks an amount of their Guard away regardless of the outcome, but allows them to make a free attack on the attacker.

A Counter costs 50% of the character's Guard, which is subtracted before the counter is attempted. A Defend Accuracy is still generated (with the reduced Guard's Ratio Modifier affecting it). If the attacker does NOT HIT at this exchange, the defender attempts their counter. The % chance that the counter will connect is equal to the amount of Guard that the defender had remaining AFTER the attacker's attack. So a Guard that was at 50 when a counter was attempted is reduced to 25. Then the combat exchange occurs. The defender's Guard may go up or down depending on the outcome of the exchange. The counter, should it actualize, will have a % chance of connecting equal to the Guard after this exchange.

When a counter connects an offensive shift occurs, and the defender becomes the attacker, while the attacker becomes the defender.

Elexxorine
Some of that looks quite similar to what I'm currently doing with pain, shock and blood loss. Where shock hinders the next round, and pain affects after that until the wound heals. Blood loss must be rolled against each round, and failing means you lose strength, once that's zero you fall unconscious and die. I haven't put it in yet but I'm going to have different attacks styles, namely slashes and thrusts, and several defensive measures such as parry, block, and dodging. My battle engine has a procedure that mimics rolling a 10 sided dice, and has a nice bit in that means if a 10 is rolled, you get an extra roll. It compares the roll to the target number, and adds to a success variable, it even has 'fumbling', when there are no successes and you get more than one '1', and means you fail really. badly. I've put in a first aid skill and the procedure for healing some-one has three outcomes, either you succeed and the blood loss goes down by how much you succeeded, or you fail and it goes up by one or you fumble and it's doubled. You can have a look at it if you wish. Much isn't finished, working and applying the pain, shock, etc...

Overcat
It sounds as though you've got a lot of the better elements from table-top RPGs: ten-sided success and failures a la Shadowrun or the whole White Wolf collection; the shock, pain, and blood loss from Riddle of Steel (one of my fav systems). In RoS you were alloted an amount of d10 equal to the relevant stat, which you rolled against the relevant skill. This meant the higher your stat the better, but the lower your skill level the better. (Seems a little backwards, but wait). So if "m clumsy and only have 2 Agility, but I've got a great Lockpick skill of 2 (2 is very highly skilled, 10 is the least skilled), then my chances of rolling successes, even with just 2 dice, was pretty good. On the other hand, if I sucked at lockpicking (Lockpick skill = 8), but I was super agile (Agility = 8), then I had a good chance of getting at least 1 success. So this allows a character to rely on latent talent (the Agility), learned skill (the Lockpick), or both. Alternately, I like simulating the rolling of a collection of dice towards a total accumulated score because you can get that nice bell curve for action probabilities.

Elexxorine
I am basing it on the riddle of steal combat. I think it's awesome, trying to get a group together to actually play a campaign I made for it, using quickstart rules (have 50 d10's waiting in my room). I've already put the damage tables into asl and they work. It's going good so far. Once it's fniished though I need to get it to work with the HavenHold engine to make it multiplayer, when it's done it should be completely awesome.

Overcat
Very nice. I think I would like to play around in your game. RoS was for the longest time the game of choice in my clique. Unfortunately (or fortunately, depending on how you look at it), we all parted ways and I haven't RPed in about 4 years. (Leaves time for other stuff.) RoS magic system is alright, but would be impossible to put in Quest, I think. We would need an "automatically save against the player's wishes and delete their backup saves" option in order to enforce the aging penalty for casting powerful spells. But if you get the complete RoS combat working, that will truly be something. I cheer you on!

Elexxorine
Thanks Overcat. The wound levels work fine. I'm currently putting in the pain, shock and bloodloss being applied to the person and it affecting the pools. Got to have a property on them saying if pain or shock should be applied, or if it's second turn after shock which carried over so it can see whether it should apply pain or shock. I'm not sure how I'm going to do checking for knockdown/out at the moment, but have a fair idea. When you're knocked down pools are thirded, how do you get them back up? (I forgot). I have to make a sot of weapons to test, have a nice example table of weapons which I'll put it. Haven't started at all on missile combat though, all mêlée so far. I agree the magic system would be impossible to put in, as it is so flexible (as spells can do anything really). That and spiritual attributes, as they are too flexible too... Awesome idea for table-topping though.....

Overcat
My copy of TROS is in a tractor trailor somewhere out in the country at the in-laws farm. Wife made me pack up a lot of extraneous books - we have far too little storage space in our apartment. So I cannot look up how dice pools refresh from shock. Couple other things though...

Are you going to implement weapon-sizes? I always liked that effect. If I had a longer weapon than yours, and I hit, then I would get a bonus to my rolls until you hit me with your shorter one. Then you would get the bonus to rolls, and I wouldn't (until I hit you again with the longer weapon). This made splendid sense, since it simulated someone with a dagger getting 'inside' the defense of a longswordsman, or alternately of the longswordsman keeping the daggerman at bay. The bonus was a function of the difference in size, too. So there was a larger discrepancy between a thief with a dagger and a guard with a pike. Pity the guard if the thief gets in close.

Also, missile combat: how are you representing distance within single rooms? It doesn't make sense to point blank a bow shot at a hammer-wielding foe. You need some distance. How are you resolving this?

Elexxorine
With weapons sizes, not yet. Maybe later. I've tried making a grid based system in quest, the basics work but it's still no-where near capable of anything good, like shooting and seeing over distance. You can move around, that's all. If I can get a good system working and multiplayer and may use it in HavenHold with the missile combat from TROS.

Good news, we found another person for my group so now my campaign will be starting up soon. It'll increase my knowledge of the rules by playing it, and I'll see how to do things in asl. One major difference between TROS and my system is this is timer-based. Where everyone has a number that gets taken away from each 'tick' and when it reaches their agility they can attack, as opposed to the round system in TROS, so that will complicate things such as when shock changes to pain, and such. Should that be after a certain amount of set time or based on when they can attack?

Overcat

Should that be after a certain amount of set time or based on when they can attack?



Well, I think it should be a certain amount of time after they are hit. You could just log a property on them that indicates at which numerical value they should refresh, the numerical value being the value of their 'ticks left' minus however long the duration should be for shock/pain. If that falls below 0, then subtract the absolute value from the maximum that their 'ticks left' goes back up to. (Or add the negative amount to the maximum 'ticks left'). Just because you're fast on your feet shouldn't mean that you recover from shock quicker than others.

Elexxorine
I agree. I'll do it that way then.

This topic is now closed. Topics are closed after 14 days of inactivity.

Support

Forums