Code: Select all
[h:EnemyList = getSelectedNames()]
[h:Attacker = getImpersonated()]
<!--- Weapon Special Stack Effects --->
[h:AssignedStackNumber = 1]
[h:HasStackEffect = 0]
[h:MaxStackEffect = 4]
[h:StackExtraDamage = 0]
[h:StackExtraPercentDamage = 0]
[h:StackExtraHealing = 0]
[h:StackExtraPercentHealing = 0]
[h:StackEffectDiscription = "Insert a unique description or status effect here"]
[h:StackStrDamage = 0]
[h:StackDexDamage = 0]
[h:StackConDamage = 0]
[h:StackWisDamage = 0]
[h:StackIntDamage = 0]
[h:StackChaDamage = 0]
[h:StackResourceDrain = 0]
[h:StackResourceAbsorb = 0]
[h:StackArmorPiercing = 0]
[h:StackACReduction = 0]
<!--- Get Attacker Stats --->
[h:AttackerStrBonus = getProperty("StrMOD", Attacker)]
[h:AttackerDexBonus = getProperty("DexMOD", Attacker)]
[h:AttackerBAB = getProperty("BAB", Attacker)]
[h:AttackerCriticalTrue = getProperty("CriticalTrue", Attacker)]
[h:AttackerCriticalMult = getProperty("CriticalMult", Attacker)]
[h:AttackerCriticalAdd = getProperty("CriticalAdd", Attacker)]
[h:AttackerAP = getProperty("AP", Attacker)]
[h:AttackerResource = getProperty("Resource", Attacker)]
[h:AttackerResourceOnHit = getProperty("ResourceOnHit", Attacker)]
[h:AttackerMaxResource = getProperty("MaxResource", Attacker)]
[h:AttackerMinResource = getProperty("MinResource", Attacker)]
[h:AttackerResourceOnAttack = getProperty("ResourceOnAttack", Attacker)]
[h:AttackerStackCounter = getProperty("StackCounter"+AssignedStackNumber, Attacker)]
[h:AttackerHP = getProperty("HP", Attacker)]
[h:AttackerMaxHP = getProperty("MaxHP", Attacker)]
[h:AttackerMinHP = getProperty("MinHP", Attacker)]
[h:AttackerName = getImpersonatedName()]
[h:AttackerResourceName = getProperty("ResourceName", Attacker)]
<!--- Weapon Statistics --->
[h:WeaponDamage = 1d4]
[h:WeaponBonusAttackRoll = 0]
[h:WeaponAPCost = 0]
[h:WeaponElement = "Physical"]
[h:GravityPercentDamage = 0]
[h:FinesseWeapon = 0]
[h:WeaponCriticalRangeLow = 20 - AttackerCriticalAdd]
[h:WeaponCriticalMultiplier = 2 + AttackerCriticalMult]
[h:TwoHandedWeapon = 0]
[h:TrueDamageWeapon = 0]
<!--- Weapon Special Attacks and On-Hit effects --->
[h:SpecialAttackDamage = 0]
[h:OnHitEffectDamage = 0]
[h:WeaponEnchantmentDamage = 0]
[h:SneakAttackDamage = 0]
[h:ArmorPiercing = 0]
[h:ACReduction = 0]
[h:CriticalSpecialDamage = 0]
[h:CreateVulnurability = 0]
[h:VulnurabilityPercent = 0]
[h:VulnurabilityExtraDamage = 0]
<!--- Weapon Stat Damage --->
[h:StrDamage = 0]
[h:DexDamage = 0]
[h:ConDamage = 0]
[h:WisDamage = 0]
[h:IntDamage = 0]
[h:ChaDamage = 0]
<!--- Resource Draining and Lifesteal --->
[h:ResourceDrain = 0]
[h:ResourceAbsorb = 0]
[h:OnHitHealing = 0]
[h:OnHitHealingPercent = 0]
<!--- Weapon Finesse Feat Check --->
[h:AttackerWeaponFinesse = getProperty("WeaponFinesse", Attacker)]
<!--- Weapon Basic Calculation Properties --->
[h:Base1 = 1d20]
[h:Base2 = 1d20]
<!--- Weapon Basic Damage Calculation --->
[h, if(AttackerWeaponFinesse == 1), CODE: {
[h:TotalWeaponDamage = WeaponDamage + DexMOD] }]
[h, if(TwoHandedWeapon == 1), CODE: {
[h:TotalWeaponDamage = WeaponDamage + AttackerStrBonus*1.5] }]
[h, if(TwoHandedWeapon == 0 && AttackerWeaponFinesse == 0), CODE: {
[h:TotalWeaponDamage = WeaponDamage + AttackerStrBonus] }]
[h:TotalWeaponDamage = TotalWeaponDamage + SpecialAttackDamage]
[h:TotalWeaponDamage = TotalWeaponDamage + OnHitEffectDamage]
[h:TotalWeaponDamage = TotalWeaponDamage + WeaponEnchantmentDamage]
<!--- Stack Weapon Check --->
[h, if(HasStackEffect == 1 && AttackerStackCounter == MaxStackEffect), CODE: {
[h:TotalWeaponDamage = TotalWeaponDamage + StackExtraDamage]
[h:GravityPercentDamage = GravityPercentDamage + StackExtraPercentDamage]
[h: OnHitHealing = OnHitHealing + StackExtraHealing]
[h: OnHitHealingPercent = OnHitHealingPercent + StackExtraPercentHealing]
[h: StrDamage = StrDamage + StackStrDamage]
[h: DexDamage = DexDamage + StackDexDamage]
[h: ConDamage = ConDamage + StackConDamage]
[h: WisDamage = WisDamage + StackWisDamage]
[h: IntDamage = IntDamage + StackIntDamage]
[h: ChaDamage = ChaDamage + StackChaDamage]
[h: ResourceDrain = ResourceDrain + StackResourceDrain]
[h: ResourceAbsorb = ResourceAbsorb + StackResourceAbsorb]
[h: ArmorPiercing = ArmorPiercing + StackArmorPiercing]
[h: ACReduction = ACReduction + StackACReduction]
[h:setProperty("StackCounter"+AssignedStackNumber, 0, Attacker)]
}]
[h, if(HasStackEffect == 1 && AttackerStackCounter < MaxStackEffect), CODE: {
[h:setProperty("StackCounter"+AssignedStackNumber, AttackerStackCounter + 1, Attacker)]
}]
<!--- Sneak Attack and Bonus Calculations --->
[h: ResourceDrainCheck = if(ResourceDrain != 0, "Resource Drained: " + ResourceDrain + "<br>", "")]
[h: ResourceAbsorbCheck = if(ResourceAbsorb != 0, "Resource Absorbed: " + ResourceAbsorb + "<br>", "")]
[h: VulnurabilityCheck = if(CreateVulnurability == 1 && VulnurabilityExtraDamage != 0, "Vulurability Created For: " + VulnurabilityExtraDamage + "<br>", "")]
[h: VulnurabilityCheck2 = if(CreateVulnurability == 1 && VulnurabilityPercent != 0, "Vulnurability Created For: " + VulnurabilityPercent + 100 + "%<br>", "")]
[h: APCheck = if(WeaponAPCost > AttackerAP, 0, 1)]
[h:StrDamageCheck = if(StrDamage != 0, "Str Damage: " + StrDamage + "<br>","")]
[h:DexDamageCheck = if(DexDamage != 0, "Dex Damage: " + DexDamage + "<br>","")]
[h:ConDamageCheck = if(ConDamage != 0, "Con Damage: " + ConDamage + "<br>","")]
[h:WisDamageCheck = if(WisDamage != 0, "Wis Damage: " + WisDamage + "<br>","")]
[h:IntDamageCheck = if(IntDamage != 0, "Int Damage: " + IntDamage + "<br>","")]
[h:ChaDamageCheck = if(ChaDamage != 0, "Cha Damage: " + ChaDamage + "<br>","")]
[h:ArmorPiercingCheck = if(ArmorPiercing != 0, "DR reduced by: " +ArmorPiercing + "<br>","")]
[h:ACReductionCheck = if(ACReduction != 0, "AC reduced by: " + ACReduction + "<br>","")]
[h, if(TrueDamageWeapon == 1), CODE: {
[h:FinalDamage = (TotalWeaponDamage)]
};{
[h:FinalDamage = (TotalWeaponDamage)]
}]
[h:ResourceOnHitCheck = if(AttackerResourceOnHit != 0, AttackerName + " gains " + AttackerResourceOnHit + " " + AttackerResourceName + ".<br>", "")]
[h:ResourceOnAttackCheck = if(AttackerResourceOnAttack != 0, AttackerName + " gains " + AttackerResourceOnAttack + " " + AttackerResourceName + ".<br>", "")]
<!--- Attack Roll Calculation--->
[h, if(FinesseWeapon == 0), CODE: {
[h: AttackRoll = Base1 + AttackerBAB + AttackerStrBonus + WeaponBonusAttackRoll]
[h:ConfirmationRoll = Base2 + AttackerBAB + AttackerStrBonus + WeaponBonusAttackRoll]
};{
[h:AttackRoll = Base1 + AttackerBAB + AttackerDexBonus + WeaponBonusAttackRoll]
[h:ConfirmationRoll = Base2 + AttackerBAB + AttackerDexBonus + WeaponBonusAttackRoll]
}]
<!--- Individual Token Mathematical Calculations --->
[r,foreach(enemy, EnemyList, "<br>"),CODE: {
[h:switchToken(enemy)]
<b>[r:token.name]</b><br>
[r, if(ConfirmationRoll >= AC && Base1 >= WeaponCriticalRangeLow || CriticalTrue == 1), CODE: {
Confirmed Critical ([r:Base1], [r:ConfirmationRoll]).<br>
[h:HP_OLD = HP]
[h:FinalDamage2 = round(max(1, ((FinalDamage*WeaponCriticalMultiplier) + CriticalSpecialDamage + SneakAttackDamage)*(1 + (DTakenPercent+getProperty("DMeleePercent", Attacker) + getProperty("DAllPercent", Attacker))/100) + (HP_OLD*(GravityPercentDamage/100))) - DamageReduction))]
Damage: [r:FinalDamage2] // Healing: [r:round(OnHitHealing + (AttackerMaxHP*(OnHitHealingPercent/100)))]<br>
[r:ResourceDrainCheck]
[r:ResourceAbsorbCheck]
[h:Resource = max(MinResource, min(MaxResource, Resource - ResourceAbsorb - ResourceDrain + ResourceOnDamage))]
[r:VulnurabilityCheck]
[r:VulnurabilityCheck2]
[h:ExtraDamage = VulnurabilityExtraDamage]
[h:DTakenPercent = VulnurabilityPercent]
[r:ArmorPiercingCheck]
[h:DamageReduction = DamageReduction - ArmorPiercing]
[h:NaturalAC = NaturalAC - ACReduction]
[r:ACReductionCheck]
[r:StrDamageCheck]
[h:Strength = Strength - StrDamage]
[r:DexDamageCheck]
[h:Dexterity = Dexterity - DexDamage]
[r:ConDamageCheck]
[h:Constitution = Constitution - ConDamage]
[r:WisDamageCheck]
[h:Wisdom = Wisdom - WisDamage]
[r:IntDamageCheck]
[h:Intelligence = Intelligence - IntDamage]
[r:ChaDamageCheck]
[h:Charisma = Charisma - ChaDamage]
[h:HP = max(MinHP, min(MaxHP, HP - FinalDamage2))]
[r:ResourceOnHitCheck]
[r:ResourceOnAttackCheck]
[h:Hit=1]
[h:setProperty("HP", min(AttackerMaxHP, round(max(AttackerMinHP, (getProperty("HP", Attacker) + OnHitHealing + (AttackerMaxHP*(OnHitHealingPercent/100)))))), Attacker)]
};{}]
[r, if(ConfirmationRoll < AC && Base1 >= WeaponCriticalRangeLow), CODE: {
Automatic Hit: ([r:Base1], [r:ConfirmationRoll]).<br>
[h:HP_OLD = HP]
[h:FinalDamage2 = round(max(1, ((FinalDamage + SneakAttackDamage)*(1 + (DTakenPercent+getProperty("DMeleePercent", Attacker) + getProperty("DAllPercent", Attacker))/100) + (HP_OLD*(GravityPercentDamage/100))) - DamageReduction))]
Damage: [r:FinalDamage2] // Healing: [r:round(OnHitHealing + (AttackerMaxHP*(OnHitHealingPercent/100)))]<br>
[r:ResourceDrainCheck]
[r:ResourceAbsorbCheck]
[h:Resource = max(MinResource, min(MaxResource, Resource - ResourceAbsorb - ResourceDrain + ResourceOnDamage))]
[r:VulnurabilityCheck]
[r:VulnurabilityCheck2]
[h:ExtraDamage = VulnurabilityExtraDamage]
[h:DTakenPercent = VulnurabilityPercent]
[h:DamageReduction = DamageReduction - ArmorPiercing]
[h:NaturalAC = NaturalAC - ACReduction]
[r:ArmorPiercingCheck]
[r:ACReductionCheck]
[r:StrDamageCheck]
[h:Strength = Strength - StrDamage]
[r:DexDamageCheck]
[h:Dexterity = Dexterity - DexDamage]
[r:ConDamageCheck]
[h:Constitution = Constitution - ConDamage]
[r:WisDamageCheck]
[h:Wisdom = Wisdom - WisDamage]
[r:IntDamageCheck]
[h:Intelligence = Intelligence - IntDamage]
[r:ChaDamageCheck]
[h:Charisma = Charisma - ChaDamage]
[h:HP = max(MinHP, min(MaxHP, HP - FinalDamage2))]
[r:ResourceOnHitCheck]
[r:ResourceOnAttackCheck]
[h:setProperty("HP", min(AttackerMaxHP, round(max(AttackerMinHP, (getProperty("HP", Attacker) + OnHitHealing + (AttackerMaxHP*(OnHitHealingPercent/100)))))), Attacker)]
[h:Hit=1]
};{}]
[r, if(AttackRoll >= AC && Base1 < WeaponCriticalRangeLow), CODE: {
Hit: ([r:AttackRoll]).<br>
[h:HP_OLD = HP]
[h:FinalDamage2 = round(max(1, (FinalDamage + SneakAttackDamage)*(1 + (DTakenPercent+getProperty("DMeleePercent", Attacker) + getProperty("DAllPercent", Attacker))/100) + (HP_OLD*(GravityPercentDamage/100)) - DamageReduction))]
Damage: [r:FinalDamage2] // Healing: [r:round(OnHitHealing + (AttackerMaxHP*(OnHitHealingPercent/100)))]<br>
[r:ResourceDrainCheck]
[r:ResourceAbsorbCheck]
[h:Resource = max(MinResource, min(MaxResource, Resource - ResourceAbsorb - ResourceDrain + ResourceOnDamage))]
[r:VulnurabilityCheck]
[r:VulnurabilityCheck2]
[h:ExtraDamage = VulnurabilityExtraDamage]
[h:DTakenPercent = VulnurabilityPercent]
[h:DamageReduction = DamageReduction - ArmorPiercing]
[h:NaturalAC = NaturalAC - ACReduction]
[r:ArmorPiercingCheck]
[r:ACReductionCheck]
[r:StrDamageCheck]
[h:Strength = Strength - StrDamage]
[r:DexDamageCheck]
[h:Dexterity = Dexterity - DexDamage]
[r:ConDamageCheck]
[h:Constitution = Constitution - ConDamage]
[r:WisDamageCheck]
[h:Wisdom = Wisdom - WisDamage]
[r:IntDamageCheck]
[h:Intelligence = Intelligence - IntDamage]
[r:ChaDamageCheck]
[h:Charisma = Charisma - ChaDamage]
[h:HP = max(MinHP, min(MaxHP, HP - FinalDamage2))]
[r:ResourceOnHitCheck]
[r:ResourceOnAttackCheck]
[h:setProperty("HP", min(AttackerMaxHP, round(max(AttackerMinHP, (getProperty("HP", Attacker) + OnHitHealing + (AttackerMaxHP*(OnHitHealingPercent/100)))))), Attacker)]
[h:Hit=1]
};{}]
[r, if(AttackRoll < AC), CODE: {
Miss! ([r:AttackRoll]).<br>
[r:ResourceOnAttackCheck]
[h:Hit=0]
};{}]
<!--- Resource Generation Check --->
[h, if(Hit ==1 && SpecialAttackDamage == 0), CODE: {
[h:setProperty("Resource", Max(AttackerMinResource, Min(AttackerMaxResource, AttackerResource + AttackerResourceOnAttack + AttackerResourceOnHit + ResourceAbsorb)), Attacker)]
}]
[h, if(Hit == 0 && SpecialAttackDamage == 0), CODE: {
[h:setProperty("Resource", Max(AttackerMinResource, Min(AttackerMaxResource, AttackerResource + AttackerResourceOnAttack)), Attacker)]
}]
}]