G G said:
Are all the other variables grabbed from the character sheet? Any other queries needed?I notice in there @{Target|ArmourHead}. Is this hit example specifically for the head?
Which other variables are based on hit location? Do different locations all follow the same structure (just with different armour variable names), or are there differences depending on location?
Also for each damage roll, you have the initial numbers of d10 for damage. It looks like you also have a d100 for Field save. Are there any other dice rolls you'd make with each damage roll?
Yes, I believe pretty much all of the others can be grabbed from the character sheet, although a Misc Modifier prompt is usually a good idea.
Yes, that hit was specifically for the head. List of locations depends on the type of target:
Character: Facing doesn't matter, locations are Head, Torso, Right Arm, Left Arm, Right Leg, Left Leg
Vehicle: Facing is more important than location, Facings are Front, Right Side, Left Side, Rear, but vehicles with a Turret have that as a possible location from each side. They technically have locations of Hull, Weapon Systems, and Motive Systems within each of those facings, but they're functionally identical until critical damage is suffered, and critical damage has to manually consult a series of charts for special effects anyway.
Horde: Facings and locations don't matter, hits mostly do 1 point per hit regardless of actual damage so long as they get past the horde's soak (which is virtually guaranteed in all but the weirdest circumstances), but special qualities like Blast can multiply how many points are inflicted.
Engine: Since this is for a giant-robot-centric game, I've had to house rule to add more support for them. Effectively this means a hybrid of character and vehicle, with an Engine having a Head, Torso Front/RightSide/LeftSide/Rear, Right Arm Front/Side/Rear, Left Arm F/S/R, Right Leg F/S/R, Left Side F/S/R for locations, which results in 17 possible locations on an Engine, but no more than 6 of them from a given facing
Facings are always broken into 90 degree quarters, front/sides/rear, where relevant.
Damage dice are almost always d10s, but there are a handful of weapons that do d5s, which are factored as a d10/2 rather than an actual d5 because a natural 10 still triggers the critical/chip damage effect (guess they didn't want to have double the crit chance on d5s).
Field saves are on a d100, but not all targets have a field save. There shouldn't be any further rolls beyond the damage dice and possible field save, although there are special effects such as flame weapons having a further save to check if the target catches on fire.
chatsetattr to set a state for being in cover isn't a bad idea. That could likewise be used to set a state for "ran last turn" given that running triggers adjustments to incoming attacks as well.
Yes, I know I only need ?{Range to Target?} for further checks, but I've been compiling in Excel, and since some queries don't always come up in the same order, if I shorten some of them, I occasionally get bugs where the list is missing because the first instance is a shortened one. While I can scrape those out, it's work intensive when going through about 2000 macros to cover all of the weapons and damages for each location across all of the PC's engines over 2 games (2 games, 7 PC engines each, ~6 average weapons per engine, ~4 average methods of fire per weapon, ~20 damage location possibilities = ~2500 total macros under the method I was using)
+ [[@{Selected|TalentMightyShot} * ceil( (floor(@{Selected|BallisticSkill}/10) + @{Selected|UnBS})/2 )]] [Mighty Shot]
Plus half your BS attribute if you have the Mighty Shot talent (zeroed out if you don't)
This
says half BS if you have Mighty Shot. But it seems to be adding half
UnBS to 1/10th BS. Is this right? Is uUnBS your ballistic skill score?
Screwy notation. Ballistic skill is a percentile value, typically 25-70, but the talent wants the BS Bonus, which is the tens digit only. Unnatural Ballistic Skill is a special quality that adds directly to the BS Bonus, and thus is not divided. So a character might have 60 Ballistic Skill (and thus a BS Bonus of 6), but have a psychic power used on them that gives Unnatural BS 5 (pushing their BS Bonus up to 11), which the Mighty Shot talent would need to convert into 6 (half 11, round up). One iteration of the system says round up, another iteration says round down, but I'm just leaving it with rounding up.
Ionic Flare
Minus 5 if the target has an ionic
flare shield that's active, which can be turned off if the shield
doesn't block melee-ranged shots
- (@{Target|FieldFlare}*@{Target|FieldActive}*((1-(floor((?{Range to target?}-@{Target|FieldMelee})/5)))*10)) [Ionic Flare]
I have tried to parse this section, but the brackets are throwing me off.
I assume the first two flags @{Target|FieldFlare}*@{Target|FieldActive} are both 0 or 1, so that the rest is either 0, or its calculated value. Is that correct?
I'm having trouble understanding the next bit:
((1-(floor((?{Range to target?}-@{Target|FieldMelee})/5)))*10)
Range to target is a number from 5 at close range to 1 at extreme range. What ranges can FieldMelee have?
If
I am reading this expression properly, it suggests that if the total of
(range - fieldmelee) = 5, the value = 10, otherwise it is zero. Is that
correct?
Ionic Flare Fields are tough to write. I'm trying to keep the number of queries to a minimum, thus why ?{Range to Target?} is being divided and rounded down. An Ionic Flare Field is supposed to give -5 to incoming damage, or -10 if that damage has the Blast or Spray quality, but no effect if the field is disabled or if the attack is from within melee distance. The field can be modified to still apply to attacks within melee distance though. However, there are other weapons that trigger at short or long ranges, which is why the Range to Target query is a set of arbitrary numbers and a rounding. Scatter gives extra damage at point blank only (so range query /5 round down so that it only yields 1 at point blank range), but gives a bonus to hit at Point Blank or Short (so same query +1, /5, round down, so that it yields 1 at PB and Short only), and so on. This particular weapon doesn't have all of those qualities, but the system was built to compile for any weapon, which I know will result in dead or misleading code in some areas like this.
The Armour Section:
Are the numbers 2, 4 fixed at those scores, or do they ever vary?
They're specific mods. The ablative armour is a yes/no check - if you have ablative armour, it's set to yes on every location, but when you suffer a single critical of damage, that plate is blasted off of that location and the +4 bonus is lost.
The +2 for deflective applies only to weapons that deal explosive or rending damage types (which this example cannon does), and is another yes/no check. There's a similar one that only applies to impact damage, and another that applies certain effects to energy damage which I would need to look up.
Does the cover calculation differ from that shown, if you are hit in the chest, arms, or legs?
The cover is a simplification because I couldn't think of a better way to handle cover applying to different locations. The system officially says that you can have any/all locations behind cover in any sensible combination, and that cover will add a value to your armour to represent bullets needing to pass through it before they hit you. My attempt to simply that and not have a dozen queries that all require asking the GM "Which locations are behind cover? How much does it count?" was to create a few states - hull down where it only applied to your lower locations, turret down where it applied to all locations and you just had some guns sticking out, a hide position where you're dug so far in that the bottom part would get double value (handled by a divisor and forced round up/down by location). I couldn't think of a better way to handle that without tons and tons of queries to slow everything down.
Additionally, cover is supposed to be reduced by 1 point each time an attack passes through it, representing cover slowly degrading as it accumulates holes, but even with ChatSetAttr that seems like it would be a beast to apply.
I'll answer any other questions as I can. I have a friend who knows javascript experimenting to see how to build similar things, though he's spent the last 2 days just poking the system with calls and experiments to see how things connect and interact. He claims things will come together quickly and easily once I gets it all worked out, but we'll see (he has several questions in the API forum under the name Shin)