Index: scripts/globals/bluemagic.lua =================================================================== --- scripts/globals/bluemagic.lua (revision 2826) +++ scripts/globals/bluemagic.lua (working copy) @@ -1,4 +1,5 @@ require("scripts/globals/status") +require("scripts/globals/magic") BLUE_SKILL = 43; @@ -41,6 +42,10 @@ SC_DARK = 12; SC_LIGHT = 13; +INT_BASED = 1; +CHR_BASED = 2; +MND_BASED = 3; + -- Get the damage for a blue magic physical spell. -- caster - The entity casting the spell. -- target - The target of the spell. @@ -148,6 +153,56 @@ return finaldmg; end; +-- Blue Magical type spells + +function BlueMagicalSpell(caster, target, spell, params, statMod) + local D = caster:getMainLvl() + 2; + + if (D > params.duppercap) then + D = params.duppercap; + end + + local ST = BlueGetWsc(caster, params); -- According to Wiki ST is the same as WSC, essentially Blue mage spells that are magical use the dmg formula of Magical type Weapon skills + + if(caster:hasStatusEffect(EFFECT_BURST_AFFINITY)) then + ST = ST * 2; + end + + local convergenceBonus = 1.0; + if(caster:hasStatusEffect(EFFECT_CONVERGENCE)) then + convergenceEffect = getStatusEffect(EFFECT_CONVERGENCE); + local convLvl = convergenceEffect:getPower(); + if(convLvl == 1) then + convergenceBonus = 1.05; + elseif(convLvl == 2) then + convergenceBonus = 1.1; + elseif(convLvl == 3) then + convergenceBonus = 1.15; + end + end + + local statBonus = 0; + if(statMod == INT_BASED) then -- Stat mod is INT + statBonus = (caster:getStat(MOD_INT) - target:getStat(MOD_INT))* params.tMultiplier; + elseif(statMod == CHR_BASED) then -- Stat mod is CHR + statBonus = (caster:getStat(MOD_CHR) - target:getStat(MOD_CHR))* params.tMultiplier; + elseif(statMod == MND_BASED) then -- Stat mod is MND + statBonus = (caster:getStat(MOD_MND) - target:getStat(MOD_MND))* params.tMultiplier; + end + + D =(((D + ST) * params.multiplier * convergenceBonus) + statBonus); + + -- At this point according to wiki we apply standard magic attack calculations + + local magicAttack = 1.0; + local multTargetReduction = 1.0; -- TODO: Make this dynamically change, temp static till implemented. + magicAttack = math.floor(D * multTargetReduction); + magicAttack = math.floor(magicAttack * applyResistance(caster,spell,target,caster:getStat(MOD_INT) - target:getStat(MOD_INT),BLUE_SKILL,1.0)); + dmg = math.floor(addBonuses(caster, spell, target, magicAttack)); + + return dmg; +end; + function BlueFinalAdjustments(caster, target, spell, dmg, params) if(dmg<0) then dmg = 0; @@ -310,6 +365,35 @@ return hitrate; end; +-- Function to stagger duration of effects by using the resistance to change the value + +function getBlueEffectDuration(caster,resist,effect) + + local duration = 0; + + if(resist == 0.125) then + resist = 1; + elseif(resist == 0.25) then + resist = 2; + elseif(resist == 0.5) then + resist = 3; + else + resist = 4; + end + + if(effect == EFFECT_BIND) then + duration = math.random(0,5) + resist * 5; + elseif(effect == EFFECT_STUN) then + duration = math.random(2,3) + resist; + elseif(effect == EFFECT_WEIGHT) then + duration = math.random(20,24) + resist * 9; -- 30-60 + elseif(effect == EFFECT_PARALYSIS) then + duration = math.random(50,60) + resist * 15; --60- 120 + end + printf("Duration of stun is %i",duration); + return duration; +end; + --obtains alpha, used for working out WSC function BlueGetAlpha(level) alpha = 1.00; Index: scripts/globals/spells/bluemagic/blastbomb.lua =================================================================== --- scripts/globals/spells/bluemagic/blastbomb.lua (revision 0) +++ scripts/globals/spells/bluemagic/blastbomb.lua (working copy) @@ -0,0 +1,37 @@ +----------------------------------------- +-- +-- Blastbomb +-- +-- This data should match information on +-- http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage +-- +----------------------------------------- + +require("scripts/globals/magic"); +require("scripts/globals/status"); +require("scripts/globals/bluemagic"); + +----------------------------------------- +-- OnSpellCast +----------------------------------------- + +function onSpellCast(caster,target,spell) + local params = {}; + + params.multiplier = 1.375; params.tMultiplier = 1.0; params.duppercap = 30; + params.str_wsc = 0.0; params.dex_wsc = 0.0; params.vit_wsc = 0.0; params.agi_wsc = 0.0; params.int_wsc = 0.2; params.mnd_wsc = 0.0; params.chr_wsc = 0.0; + damage = BlueMagicalSpell(caster, target, spell, params, INT_BASED); + damage = BlueFinalAdjustments(caster, target, spell, damage, params); + + local resist = applyResistance(caster,spell,target,caster:getStat(MOD_INT) - target:getStat(MOD_INT),BLUE_SKILL,1.0); + + if(damage > 0 and resist > 0.125) then + local typeEffect = EFFECT_BIND; + target:delStatusEffect(typeEffect); -- Wiki says it can overwrite itself or other binds + target:addStatusEffect(typeEffect,1,0,getBlueEffectDuration(caster,resist,typeEffect)); + end + + return damage; +end; + + \ No newline at end of file Index: scripts/globals/spells/bluemagic/blitzstrahl.lua =================================================================== --- scripts/globals/spells/bluemagic/blitzstrahl.lua (revision 0) +++ scripts/globals/spells/bluemagic/blitzstrahl.lua (working copy) @@ -0,0 +1,32 @@ +----------------------------------------- +-- +-- Blitzstrahl +-- +----------------------------------------- + +require("scripts/globals/magic"); +require("scripts/globals/status"); +require("scripts/globals/bluemagic"); + +----------------------------------------- +-- OnSpellCast +----------------------------------------- + +function onSpellCast(caster,target,spell) + local params = {}; + -- This data should match information on http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage + params.multiplier = 1.5625; params.tMultiplier = 1.0; params.duppercap = 61; + params.str_wsc = 0.0; params.dex_wsc = 0.0; params.vit_wsc = 0.0; params.agi_wsc = 0.0; params.int_wsc = 0.3; params.mnd_wsc = 0.1; params.chr_wsc = 0.0; + damage = BlueMagicalSpell(caster, target, spell, params, INT_BASED); + damage = BlueFinalAdjustments(caster, target, spell, damage, params); + + local resist = applyResistance(caster,spell,target,caster:getStat(MOD_INT) - target:getStat(MOD_INT),BLUE_SKILL,1.0); + + if(damage > 0 and resist > 0.0625) then + local typeEffect = EFFECT_STUN; + target:delStatusEffect(typeEffect); -- Wiki says it can overwrite itself or other binds + target:addStatusEffect(typeEffect,1,0,getBlueEffectDuration(caster,resist,typeEffect)); + end + + return damage; +end; Index: scripts/globals/spells/bluemagic/bomb_toss.lua =================================================================== --- scripts/globals/spells/bluemagic/bomb_toss.lua (revision 0) +++ scripts/globals/spells/bluemagic/bomb_toss.lua (working copy) @@ -0,0 +1,23 @@ +----------------------------------------- +-- +-- Bomb Toss +-- +----------------------------------------- + +require("scripts/globals/magic"); +require("scripts/globals/status"); +require("scripts/globals/bluemagic"); + +----------------------------------------- +-- OnSpellCast +----------------------------------------- + +function onSpellCast(caster,target,spell) + local params = {}; + -- This data should match information on http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage + params.multiplier = 1.625; params.tMultiplier = 1.0; params.duppercap = 40; + params.str_wsc = 0.0; params.dex_wsc = 0.0; params.vit_wsc = 0.0; params.agi_wsc = 0.0; params.int_wsc = 0.2; params.mnd_wsc = 0.0; params.chr_wsc = 0.0; + damage = BlueMagicalSpell(caster, target, spell, params, INT_BASED); + damage = BlueFinalAdjustments(caster, target, spell, damage, params); + return damage; +end; Index: scripts/globals/spells/bluemagic/cursed_sphere.lua =================================================================== --- scripts/globals/spells/bluemagic/cursed_sphere.lua (revision 0) +++ scripts/globals/spells/bluemagic/cursed_sphere.lua (working copy) @@ -0,0 +1,23 @@ +----------------------------------------- +-- +-- Cursed Sphere +-- +----------------------------------------- + +require("scripts/globals/magic"); +require("scripts/globals/status"); +require("scripts/globals/bluemagic"); + +----------------------------------------- +-- OnSpellCast +----------------------------------------- + +function onSpellCast(caster,target,spell) + local params = {}; + -- This data should match information on http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage + params.multiplier = 1.50; params.tMultiplier = 1.0; params.duppercap = 30; + params.str_wsc = 0.0; params.dex_wsc = 0.0; params.vit_wsc = 0.0; params.agi_wsc = 0.0; params.int_wsc = 0.3; params.mnd_wsc = 0.0; params.chr_wsc = 0.0; + damage = BlueMagicalSpell(caster, target, spell, params, INT_BASED); + damage = BlueFinalAdjustments(caster, target, spell, damage, params); + return damage; +end; Index: scripts/globals/spells/bluemagic/death_ray.lua =================================================================== --- scripts/globals/spells/bluemagic/death_ray.lua (revision 0) +++ scripts/globals/spells/bluemagic/death_ray.lua (working copy) @@ -0,0 +1,27 @@ +----------------------------------------- +-- +-- Death Ray +-- +----------------------------------------- + +require("scripts/globals/magic"); +require("scripts/globals/status"); +require("scripts/globals/bluemagic"); + +----------------------------------------- +-- OnSpellCast +----------------------------------------- + +function onSpellCast(caster,target,spell) + local params = {}; + -- This data should match information on http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage + local multi = 1.625; + if(caster:hasStatusEffect(EFFECT_AZURE_LORE)) then + multi = multi + 2.0; + end + params.multiplier = multi; params.tMultiplier = 1.0; params.duppercap = 51; + params.str_wsc = 0.0; params.dex_wsc = 0.0; params.vit_wsc = 0.0; params.agi_wsc = 0.0; params.int_wsc = 0.2; params.mnd_wsc = 0.1; params.chr_wsc = 0.0; + damage = BlueMagicalSpell(caster, target, spell, params, INT_BASED); + damage = BlueFinalAdjustments(caster, target, spell, damage, params); + return damage; +end; Index: scripts/globals/spells/bluemagic/eyes_on_me.lua =================================================================== --- scripts/globals/spells/bluemagic/eyes_on_me.lua (revision 0) +++ scripts/globals/spells/bluemagic/eyes_on_me.lua (working copy) @@ -0,0 +1,28 @@ +----------------------------------------- +-- +-- Eyes On Me +-- +----------------------------------------- + +require("scripts/globals/magic"); +require("scripts/globals/status"); +require("scripts/globals/bluemagic"); + +----------------------------------------- +-- OnSpellCast +----------------------------------------- + +function onSpellCast(caster,target,spell) + local params = {}; + -- This data should match information on http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage + local multi = 2.625; + if(caster:hasStatusEffect(EFFECT_AZURE_LORE)) then + multi = multi + 2.0; + end + params.multiplier = multi; params.tMultiplier = 1.5; params.duppercap = 69; + params.str_wsc = 0.0; params.dex_wsc = 0.0; params.vit_wsc = 0.0; params.agi_wsc = 0.0; params.int_wsc = 0.0; params.mnd_wsc = 0.0; params.chr_wsc = 0.2; + damage = BlueMagicalSpell(caster, target, spell, params, CHR_BASED); + damage = BlueFinalAdjustments(caster, target, spell, damage, params); + + return damage; +end; Index: scripts/globals/spells/bluemagic/firespit.lua =================================================================== --- scripts/globals/spells/bluemagic/firespit.lua (revision 0) +++ scripts/globals/spells/bluemagic/firespit.lua (working copy) @@ -0,0 +1,24 @@ +----------------------------------------- +-- +-- Firespit +-- +----------------------------------------- + +require("scripts/globals/magic"); +require("scripts/globals/status"); +require("scripts/globals/bluemagic"); + +----------------------------------------- +-- OnSpellCast +----------------------------------------- + +function onSpellCast(caster,target,spell) + local params = {}; + -- This data should match information on http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage + params.multiplier = 3.0; params.tMultiplier = 1.5; params.duppercap = 69; + params.str_wsc = 0.0; params.dex_wsc = 0.0; params.vit_wsc = 0.0; params.agi_wsc = 0.0; params.int_wsc = 0.2; params.mnd_wsc = 0.2; params.chr_wsc = 0.0; + damage = BlueMagicalSpell(caster, target, spell, params, INT_BASED); + damage = BlueFinalAdjustments(caster, target, spell, damage, params); + + return damage; +end; Index: scripts/globals/spells/bluemagic/ice_break.lua =================================================================== --- scripts/globals/spells/bluemagic/ice_break.lua (revision 0) +++ scripts/globals/spells/bluemagic/ice_break.lua (working copy) @@ -0,0 +1,37 @@ +----------------------------------------- +-- +-- Ice Break +-- +-- This data should match information on +-- http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage +-- +----------------------------------------- + +require("scripts/globals/magic"); +require("scripts/globals/status"); +require("scripts/globals/bluemagic"); + +----------------------------------------- +-- OnSpellCast +----------------------------------------- + +function onSpellCast(caster,target,spell) + local params = {}; + + params.multiplier = 2.25; params.tMultiplier = 1.0; params.duppercap = 69; + params.str_wsc = 0.0; params.dex_wsc = 0.0; params.vit_wsc = 0.0; params.agi_wsc = 0.0; params.int_wsc = 0.3; params.mnd_wsc = 0.0; params.chr_wsc = 0.0; + damage = BlueMagicalSpell(caster, target, spell, params, INT_BASED); + damage = BlueFinalAdjustments(caster, target, spell, damage, params); + + local resist = applyResistance(caster,spell,target,caster:getStat(MOD_INT) - target:getStat(MOD_INT),BLUE_SKILL,1.0); + + if(damage > 0 and resist > 0.0625) then + local typeEffect = EFFECT_BIND; + target:delStatusEffect(typeEffect); -- Wiki says it can overwrite itself or other binds + target:addStatusEffect(typeEffect,1,0,getBlueEffectDuration(caster,resist,typeEffect)); + end + + return damage; +end; + + \ No newline at end of file Index: scripts/globals/spells/bluemagic/maelstrom.lua =================================================================== --- scripts/globals/spells/bluemagic/maelstrom.lua (revision 0) +++ scripts/globals/spells/bluemagic/maelstrom.lua (working copy) @@ -0,0 +1,32 @@ +----------------------------------------- +-- +-- Maelstrom +-- +----------------------------------------- + +require("scripts/globals/magic"); +require("scripts/globals/status"); +require("scripts/globals/bluemagic"); + +----------------------------------------- +-- OnSpellCast +----------------------------------------- + +function onSpellCast(caster,target,spell) + local params = {}; + -- This data should match information on http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage + params.multiplier = 2.375; params.tMultiplier = 1.5; params.duppercap = 69; + params.str_wsc = 0.0; params.dex_wsc = 0.0; params.vit_wsc = 0.0; params.agi_wsc = 0.0; params.int_wsc = 0.3; params.mnd_wsc = 0.1; params.chr_wsc = 0.0; + damage = BlueMagicalSpell(caster, target, spell, params, INT_BASED); + damage = BlueFinalAdjustments(caster, target, spell, damage, params); + + local resist = applyResistance(caster,spell,target,caster:getStat(MOD_INT) - target:getStat(MOD_INT),BLUE_SKILL,1.0); + + if(damage > 0 and resist > 0.0625) then + if(target:canGainStatusEffect(EFFECT_STR_DOWN)) then + target:addStatusEffect(EFFECT_STR_DOWN,20,3,60); + end + end + + return damage; +end; Index: scripts/globals/spells/bluemagic/magic_hammer.lua =================================================================== --- scripts/globals/spells/bluemagic/magic_hammer.lua (revision 0) +++ scripts/globals/spells/bluemagic/magic_hammer.lua (working copy) @@ -0,0 +1,29 @@ +----------------------------------------- +-- +-- Magic Hammer +-- +----------------------------------------- + +require("scripts/globals/magic"); +require("scripts/globals/status"); +require("scripts/globals/bluemagic"); + +----------------------------------------- +-- OnSpellCast +----------------------------------------- + +function onSpellCast(caster,target,spell) + local params = {}; + -- This data should match information on http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage + local multi = 1.0; + if(caster:hasStatusEffect(EFFECT_AZURE_LORE)) then + multi = multi + 0.50; + end + params.multiplier = multi; params.tMultiplier = 1.0; params.duppercap = 35; + params.str_wsc = 0.0; params.dex_wsc = 0.0; params.vit_wsc = 0.0; params.agi_wsc = 0.0; params.int_wsc = 0.0; params.mnd_wsc = 0.3; params.chr_wsc = 0.0; + damage = BlueMagicalSpell(caster, target, spell, params, MND_BASED); + damage = BlueFinalAdjustments(caster, target, spell, damage, params); + -- TODO: Check if target has mana then add mana to caster + return damage; +end; + Index: scripts/globals/spells/bluemagic/mind_blast.lua =================================================================== --- scripts/globals/spells/bluemagic/mind_blast.lua (revision 0) +++ scripts/globals/spells/bluemagic/mind_blast.lua (working copy) @@ -0,0 +1,36 @@ +----------------------------------------- +-- +-- Mind Blast +-- +----------------------------------------- + +require("scripts/globals/magic"); +require("scripts/globals/status"); +require("scripts/globals/bluemagic"); + +----------------------------------------- +-- OnSpellCast +----------------------------------------- + +function onSpellCast(caster,target,spell) + local params = {}; + -- This data should match information on http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage + local multi = 2.08; + if(caster:hasStatusEffect(EFFECT_AZURE_LORE)) then + multi = multi + 0.50; + end + params.multiplier = multi; params.tMultiplier = 1.5; params.duppercap = 69; + params.str_wsc = 0.0; params.dex_wsc = 0.0; params.vit_wsc = 0.0; params.agi_wsc = 0.0; params.int_wsc = 0.0; params.mnd_wsc = 0.3; params.chr_wsc = 0.0; + damage = BlueMagicalSpell(caster, target, spell, params, MND_BASED); + damage = BlueFinalAdjustments(caster, target, spell, damage, params); + + local resist = applyResistance(caster,spell,target,caster:getStat(MOD_INT) - target:getStat(MOD_INT),BLUE_SKILL,1.0); + + if(damage > 0 and resist > 0.0625) then + local typeEffect = EFFECT_PARALYSIS; + target:delStatusEffect(typeEffect); -- Wiki says it can overwrite itself or other binds + target:addStatusEffect(typeEffect,12,0,getBlueEffectDuration(caster,resist,typeEffect)); -- No info for power on the internet, static to 12 for now. + end + + return damage; +end; Index: scripts/globals/spells/bluemagic/mysterious_light.lua =================================================================== --- scripts/globals/spells/bluemagic/mysterious_light.lua (revision 0) +++ scripts/globals/spells/bluemagic/mysterious_light.lua (working copy) @@ -0,0 +1,32 @@ +----------------------------------------- +-- +-- Mysterious Light +-- +----------------------------------------- + +require("scripts/globals/magic"); +require("scripts/globals/status"); +require("scripts/globals/bluemagic"); + +----------------------------------------- +-- OnSpellCast +----------------------------------------- + +function onSpellCast(caster,target,spell) + local params = {}; + -- This data should match information on http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage + params.multiplier = 2.0; params.tMultiplier = 1.0; params.duppercap = 56; + params.str_wsc = 0.0; params.dex_wsc = 0.0; params.vit_wsc = 0.0; params.agi_wsc = 0.0; params.int_wsc = 0.0; params.mnd_wsc = 0.0; params.chr_wsc = 0.2; + damage = BlueMagicalSpell(caster, target, spell, params, CHR_BASED); + damage = BlueFinalAdjustments(caster, target, spell, damage, params); + + local resist = applyResistance(caster,spell,target,caster:getStat(MOD_INT) - target:getStat(MOD_INT),BLUE_SKILL,1.0); + + if(damage > 0 and resist > 0.0625) then + local typeEffect = EFFECT_WEIGHT; + target:delStatusEffect(typeEffect); + target:addStatusEffect(typeEffect,1,0,getBlueEffectDuration(caster,resist,typeEffect)); + end + + return damage; +end; Index: scripts/globals/spells/bluemagic/sandspin.lua =================================================================== --- scripts/globals/spells/bluemagic/sandspin.lua (revision 0) +++ scripts/globals/spells/bluemagic/sandspin.lua (working copy) @@ -0,0 +1,32 @@ +----------------------------------------- +-- +-- SandSpin +-- +----------------------------------------- + +require("scripts/globals/magic"); +require("scripts/globals/status"); +require("scripts/globals/bluemagic"); + +----------------------------------------- +-- OnSpellCast +----------------------------------------- + +function onSpellCast(caster,target,spell) + local params = {}; + -- This data should match information on http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage + params.multiplier = 1.0; params.tMultiplier = 1.0; params.duppercap = 13; + params.str_wsc = 0.0; params.dex_wsc = 0.0; params.vit_wsc = 0.0; params.agi_wsc = 0.0; params.int_wsc = 0.2; params.mnd_wsc = 0.0; params.chr_wsc = 0.0; + damage = BlueMagicalSpell(caster, target, spell, params, INT_BASED); + damage = BlueFinalAdjustments(caster, target, spell, damage, params); + + local resist = applyResistance(caster,spell,target,caster:getStat(MOD_INT) - target:getStat(MOD_INT),BLUE_SKILL,1.0); + + if(damage > 0 and resist > 0.0625) then + if(target:canGainStatusEffect(EFFECT_ACCURACY_DOWN)) then + target:addStatusEffect(EFFECT_ACCURACY_DOWN,20,3,60); + end + end + + return damage; +end;