Missile weapon combat: Difference between revisions

1,490 bytes added ,  18:56, 16 June 2022
→‎Projectile Hit and Damage: further detailed missing info
mNo edit summary
(→‎Projectile Hit and Damage: further detailed missing info)
 
(9 intermediate revisions by 2 users not shown)
Line 6: Line 6:


= Missile Weapon Accuracy =
= Missile Weapon Accuracy =
Missile weapons fire projectiles toward an enemy target. Those projectiles are subject to a variety of calculations and randomness that can cause them to veer off the intended path. Among other things, learning some of the [[skills]] associated with missile weapons and improving one's [[Agility]] stat can improve the accuracy of missile weapons.
The first component to a missile weapon attack is determining the trajectory of any projectiles.


== Angular Variance ==
== Angular Variance ==
Line 19: Line 19:
=== Weapon Variance ===
=== Weapon Variance ===
[[Image:Missile weapon 25 degree example.png|thumb|Example range of weapon variance (blast cannon)]]
[[Image:Missile weapon 25 degree example.png|thumb|Example range of weapon variance (blast cannon)]]
{| class="wikitable" style="float:right;"
{| class="wikitable" style="float:right;margin-left:8px;"
!Accuracy
!Accuracy
!Numeric Value
!Numeric Value
Line 45: Line 45:


=== Aim Variance ===
=== Aim Variance ===
{{clear}}[[Image:Missile_weapon_aim_variance_initial_roll_probabilities.png|thumb|Outcome probabilities for initial Abs(2d20-21) roll]]
Each projectile fired is additionally affected by the wielder's aim variance. '''AimVariance''' begins with a standard {{dice tooltip|2d20}} dice roll shared by all missile weapons. The value can then be modified by attributes, skills, weapon mods, and other factors, and it can sometimes be reduced to 0.
Each projectile fired is additionally affected by the wielder's aim variance. '''AimVariance''' begins with a standard {{dice tooltip|2d20}} dice roll shared by all missile weapons. The value can then be modified by attributes, skills, weapon mods, and other factors, and it can sometimes be reduced to 0.


Bow and rifle shots using [[Sure Fire]] or [[Beacon Fire]] always have an aim variance of 0.
In the following cases, aim variance is always set to 0.
* Bow and rifle shots using [[Sure Fire]] or [[Beacon Fire]].
* The final shot of a barrel from {{favilink|Ruin of House Isner}}.


Otherwise, the general formula for aim variance is as follows.<ref name="MissileWeaponFireEvent" />
Otherwise, the general formula for aim variance is as follows.<ref name="MissileWeaponFireEvent" />
Line 75: Line 78:


= Projectile Hit and Damage =
= Projectile Hit and Damage =
{{Missing info|This section needs more info about how the "Hit" mechanics work for missile weapons, and possibly a little cleanup.}}
{{Missing info|This section needs more info about how the "Hit" mechanics work for missile weapons, and possibly a little cleanup.
When the projectile actually hits the target, regular damage calculations occur. However, there is a -5 DV penalty. If the target has [[Swift Reflexes]], the penalty will not be inflicted. If the creature is immobile, the DV is set to a flat -100.
 
Also, info on damage calculations is not found in the linked penetration article, as claimed. Rather than adding it there, it might be better to explain the damage calculation here for a ranged weapon & ammo, similar to the example in the [[Melee weapon combat#Damage Rolls|Melee weapon combat]] article.}}
 
After a projectile actually hits a target - whether or not that was the intended target - regular damage calculations occur. However, there is a -5 DV penalty. If the target has [[Swift Reflexes]], the penalty will not be inflicted. If the creature is immobile, the DV is set to a flat -100.


For information about penetration and damage calculations for missile weapons, refer to the [[Penetration_(PV)|penetration]] article.
For information about penetration and damage calculations for missile weapons, refer to the [[Penetration_(PV)|penetration]] article.
Line 91: Line 97:
{{#cargo_query:tables=ItemsTable=IT,MissileWeaponData=MWD
{{#cargo_query:tables=ItemsTable=IT,MissileWeaponData=MWD
| join on=MWD.JoinKey=IT.JoinKey
| join on=MWD.JoinKey=IT.JoinKey
| fields=CONCAT('{{((}}favilink id{{!}}',CONCAT(IT.ObjectID),'{{))}}')=Weapon,CONCAT('{{((}}PV{{))}}',CONCAT(IT.MaxPV))=Max PV,CONCAT(CASE WHEN IT.Damage IS NOT NULL THEN CONCAT('{{((}}Heart{{))}}{{((}}dice tooltip{{!}}',CONCAT(IT.Damage),'{{))}}') ELSE 'ammo-based' END)=Damage
| fields=
| where=IT.Skill='Pistol' AND MWD._pageName NOT LIKE 'Data:%'
    CONCAT('{{((}}favilink id{{!}}',CONCAT(IT.ObjectID),'{{))}}')=Weapon,
    CONCAT(MWD.Accuracy,' ({{(}}#switch: ',MWD.Accuracy,'{{!}}0=Very High{{!}}1{{!}}2{{!}}3{{!}}4=High{{!}}5{{!}}6{{!}}7{{!}}8{{!}}9=Medium{{!}}10{{!}}11{{!}}12{{!}}13{{!}}14{{!}}15{{!}}16{{!}}17{{!}}18{{!}}19{{!}}20{{!}}21{{!}}22{{!}}23{{!}}24=Low{{!}}Very Low{{)}})')=Accuracy,
    CONCAT('{{((}}PV{{))}}',CONCAT(IT.MaxPV))=Max PV,
    CONCAT(CASE WHEN IT.Damage IS NOT NULL THEN CONCAT('{{((}}Heart{{))}}{{((}}dice tooltip{{!}}',CONCAT(IT.Damage),'{{))}}') ELSE 'ammo-based' END)=Damage
| where=IT.Skill='Pistol' AND MWD._pageNamespace = 0
| order by=IT.MaxPV DESC,IT.Damage DESC
| order by=IT.MaxPV DESC,IT.Damage DESC
| format=table
| format=table
Line 100: Line 110:
{{#cargo_query:tables=ItemsTable=IT,MissileWeaponData=MWD
{{#cargo_query:tables=ItemsTable=IT,MissileWeaponData=MWD
| join on=MWD.JoinKey=IT.JoinKey
| join on=MWD.JoinKey=IT.JoinKey
| fields=CONCAT('{{((}}favilink id{{!}}',CONCAT(IT.ObjectID),'{{))}}')=Weapon,CONCAT('{{((}}PV{{))}}',CONCAT(IT.MaxPV))=Max PV,CONCAT(CASE WHEN IT.Damage IS NOT NULL THEN CONCAT('{{((}}Heart{{))}}{{((}}dice tooltip{{!}}',CONCAT(IT.Damage),'{{))}}') ELSE 'ammo-based' END)=Damage
| fields=
| where=IT.Skill='Bow and Rifle' AND MWD.AmmoName = 'arrow' AND MWD._pageName NOT LIKE 'Data:%'
    CONCAT('{{((}}favilink id{{!}}',CONCAT(IT.ObjectID),'{{))}}')=Weapon,
    CONCAT(MWD.Accuracy,' ({{(}}#switch: ',MWD.Accuracy,'{{!}}0=Very High{{!}}1{{!}}2{{!}}3{{!}}4=High{{!}}5{{!}}6{{!}}7{{!}}8{{!}}9=Medium{{!}}10{{!}}11{{!}}12{{!}}13{{!}}14{{!}}15{{!}}16{{!}}17{{!}}18{{!}}19{{!}}20{{!}}21{{!}}22{{!}}23{{!}}24=Low{{!}}Very Low{{)}})')=Accuracy,
    CONCAT('{{((}}PV{{))}}',CONCAT(IT.MaxPV))=Max PV,
    CONCAT(CASE WHEN IT.Damage IS NOT NULL THEN CONCAT('{{((}}Heart{{))}}{{((}}dice tooltip{{!}}',CONCAT(IT.Damage),'{{))}}') ELSE 'ammo-based' END)=Damage
| where=IT.Skill='Bow and Rifle' AND MWD.AmmoName = 'arrow' AND MWD._pageNamespace = 0
| order by=IT.MaxPV DESC,IT.Damage DESC
| order by=IT.MaxPV DESC,IT.Damage DESC
| format=table
| format=table
Line 112: Line 126:
{{#cargo_query:tables=ItemsTable=IT,MissileWeaponData=MWD
{{#cargo_query:tables=ItemsTable=IT,MissileWeaponData=MWD
| join on=MWD.JoinKey=IT.JoinKey
| join on=MWD.JoinKey=IT.JoinKey
| fields=CONCAT('{{((}}favilink id{{!}}',CONCAT(IT.ObjectID),'{{))}}')=Weapon,CONCAT('{{((}}PV{{))}}',CONCAT(IT.MaxPV))=Max PV,CONCAT(CASE WHEN IT.Damage IS NOT NULL THEN CONCAT('{{((}}Heart{{))}}{{((}}dice tooltip{{!}}',CONCAT(IT.Damage),'{{))}}') ELSE 'ammo-based' END)=Damage
| fields=
| where=IT.Skill='Bow and Rifle' AND MWD.AmmoName <> 'arrow' AND MWD._pageName NOT LIKE 'Data:%'
    CONCAT('{{((}}favilink id{{!}}',CONCAT(IT.ObjectID),'{{))}}')=Weapon,
    CONCAT(MWD.Accuracy,' ({{(}}#switch: ',MWD.Accuracy,'{{!}}0=Very High{{!}}1{{!}}2{{!}}3{{!}}4=High{{!}}5{{!}}6{{!}}7{{!}}8{{!}}9=Medium{{!}}10{{!}}11{{!}}12{{!}}13{{!}}14{{!}}15{{!}}16{{!}}17{{!}}18{{!}}19{{!}}20{{!}}21{{!}}22{{!}}23{{!}}24=Low{{!}}Very Low{{)}})')=Accuracy,
    CONCAT('{{((}}PV{{))}}',CONCAT(IT.MaxPV))=Max PV,
    CONCAT(CASE WHEN IT.Damage IS NOT NULL THEN CONCAT('{{((}}Heart{{))}}{{((}}dice tooltip{{!}}',CONCAT(IT.Damage),'{{))}}') ELSE 'ammo-based' END)=Damage
| where=IT.Skill='Bow and Rifle' AND MWD.AmmoName <> 'arrow' AND MWD._pageNamespace = 0
| order by=IT.MaxPV DESC,IT.Damage DESC
| order by=IT.MaxPV DESC,IT.Damage DESC
| format=table
| format=table
Line 124: Line 142:
{{#cargo_query:tables=ItemsTable=IT,MissileWeaponData=MWD
{{#cargo_query:tables=ItemsTable=IT,MissileWeaponData=MWD
| join on=MWD.JoinKey=IT.JoinKey
| join on=MWD.JoinKey=IT.JoinKey
| fields=CONCAT('{{((}}favilink id{{!}}',CONCAT(IT.ObjectID),'{{))}}')=Weapon,CONCAT('{{((}}PV{{))}}',CONCAT(IT.MaxPV))=Max PV,CONCAT(CASE WHEN IT.Damage IS NOT NULL THEN CONCAT('{{((}}Heart{{))}}{{((}}dice tooltip{{!}}',CONCAT(IT.Damage),'{{))}}') ELSE 'ammo-based' END)=Damage
| fields=
| where=IT.Skill='Heavy Weapon' AND MWD._pageName NOT LIKE 'Data:%'
    CONCAT('{{((}}favilink id{{!}}',CONCAT(IT.ObjectID),'{{))}}')=Weapon,
    CONCAT(MWD.Accuracy,' ({{(}}#switch: ',MWD.Accuracy,'{{!}}0=Very High{{!}}1{{!}}2{{!}}3{{!}}4=High{{!}}5{{!}}6{{!}}7{{!}}8{{!}}9=Medium{{!}}10{{!}}11{{!}}12{{!}}13{{!}}14{{!}}15{{!}}16{{!}}17{{!}}18{{!}}19{{!}}20{{!}}21{{!}}22{{!}}23{{!}}24=Low{{!}}Very Low{{)}})')=Accuracy,
    CONCAT('{{((}}PV{{))}}',CONCAT(IT.MaxPV))=Max PV,
    CONCAT(CASE WHEN IT.Damage IS NOT NULL THEN CONCAT('{{((}}Heart{{))}}{{((}}dice tooltip{{!}}',CONCAT(IT.Damage),'{{))}}') ELSE 'ammo-based' END)=Damage
| where=IT.Skill='Heavy Weapon' AND MWD._pageNamespace = 0
| order by=IT.MaxPV DESC,IT.Damage DESC
| order by=IT.MaxPV DESC,IT.Damage DESC
| format=table
| format=table
312

edits