From 29e1af505416a43d6661e189334dcfc457a5c661 Mon Sep 17 00:00:00 2001 From: Mark Klara Date: Sun, 16 Feb 2020 00:48:08 -0800 Subject: [PATCH 01/11] Add `Pinecone Bomb` blue magic spell. Now that the order of operations has been cleaned up for spells, Pinecone Bomb can be properly implemented. It does damage to the mob (which may wake it up from a previous slept state), but then can reapply sleep as described here: https://ffxiclopedia.fandom.com/wiki/Pinecone_Bomb --- .../spells/bluemagic/pinecone_bomb.lua | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 scripts/globals/spells/bluemagic/pinecone_bomb.lua diff --git a/scripts/globals/spells/bluemagic/pinecone_bomb.lua b/scripts/globals/spells/bluemagic/pinecone_bomb.lua new file mode 100644 index 00000000000..8d01151aab3 --- /dev/null +++ b/scripts/globals/spells/bluemagic/pinecone_bomb.lua @@ -0,0 +1,65 @@ +----------------------------------------- +-- Spell: Pinecone Bomb +-- Additional effect: Sleep. Duration of effect varies with TP +-- Spell cost: 48 MP +-- Monster Type: Plantoids +-- Spell Type: Physical (Piercing) +-- Blue Magic Points: 2 +-- Stat Bonus: STR+1 +-- Level: 36 +-- Casting Time: 2.5 seconds +-- Recast Time: 26.5 seconds +-- Skillchain Element(s): Fire (can open Scission or Fusion and can close Liquefaction) +-- Combos: None +----------------------------------------- +require("scripts/globals/bluemagic") +require("scripts/globals/status") +require("scripts/globals/magic") +----------------------------------------- + +function onMagicCastingCheck(caster,target,spell) + return 0 +end + +function onSpellCast(caster,target,spell) + local params = {} + -- This data should match information on http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage + params.tpmod = TPMOD_CRITICAL + params.dmgtype = DMGTYPE_PIERCE + params.scattr = SC_LIQUEFACTION + params.numhits = 1 + params.multiplier = 1.25 + params.tp150 = 1.25 + params.tp300 = 1.25 + params.azuretp = 1.25 + params.duppercap = 37 + params.str_wsc = 0.20 + params.dex_wsc = 0.0 + params.vit_wsc = 0.0 + params.agi_wsc = 0.20 + params.int_wsc = 0.0 + params.mnd_wsc = 0.0 + params.chr_wsc = 0.0 + + local damage = BluePhysicalSpell(caster, target, spell, params) + damage = BlueFinalAdjustments(caster, target, spell, damage, params) + + -- After damage is applied (which would have woken the target up from a + -- preexisting sleep, if necesesary), apply the sleep effect for this spell. + if (damage > 0) then + local sleepParams = {} + sleepParams.attribute = dsp.mod.INT + sleepParams.bonus = 0 + sleepParams.effect = dsp.effect.SLEEP_II + sleepParams.skillType = dsp.skill.BLUE_MAGIC + local resist = applyResistanceEffect(caster, target, spell, sleepParams) + if (resist > 0.5) then -- Apply the sleep + local power = 2 + local tick = 0 + local duration = 90 * resist + target:addStatusEffect(sleepParams.effect, power, tick, duration) + end + end + + return damage +end From a9a18a0ec5ac02f5aa21bc642475fe592711d7a4 Mon Sep 17 00:00:00 2001 From: ibm2431 Date: Sun, 16 Feb 2020 02:12:48 -0800 Subject: [PATCH 02/11] Update references from previous branding --- .../spells/bluemagic/pinecone_bomb.lua | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/scripts/globals/spells/bluemagic/pinecone_bomb.lua b/scripts/globals/spells/bluemagic/pinecone_bomb.lua index 8d01151aab3..3e508ad26be 100644 --- a/scripts/globals/spells/bluemagic/pinecone_bomb.lua +++ b/scripts/globals/spells/bluemagic/pinecone_bomb.lua @@ -24,22 +24,22 @@ end function onSpellCast(caster,target,spell) local params = {} -- This data should match information on http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage - params.tpmod = TPMOD_CRITICAL - params.dmgtype = DMGTYPE_PIERCE - params.scattr = SC_LIQUEFACTION - params.numhits = 1 - params.multiplier = 1.25 - params.tp150 = 1.25 - params.tp300 = 1.25 - params.azuretp = 1.25 - params.duppercap = 37 - params.str_wsc = 0.20 - params.dex_wsc = 0.0 - params.vit_wsc = 0.0 - params.agi_wsc = 0.20 - params.int_wsc = 0.0 - params.mnd_wsc = 0.0 - params.chr_wsc = 0.0 + params.tpmod = TPMOD_CRITICAL + params.dmgtype = DMGTYPE_PIERCE + params.scattr = SC_LIQUEFACTION + params.numhits = 1 + params.multiplier = 1.25 + params.tp150 = 1.25 + params.tp300 = 1.25 + params.azuretp = 1.25 + params.duppercap = 37 + params.str_wsc = 0.20 + params.dex_wsc = 0.0 + params.vit_wsc = 0.0 + params.agi_wsc = 0.20 + params.int_wsc = 0.0 + params.mnd_wsc = 0.0 + params.chr_wsc = 0.0 local damage = BluePhysicalSpell(caster, target, spell, params) damage = BlueFinalAdjustments(caster, target, spell, damage, params) @@ -48,10 +48,10 @@ function onSpellCast(caster,target,spell) -- preexisting sleep, if necesesary), apply the sleep effect for this spell. if (damage > 0) then local sleepParams = {} - sleepParams.attribute = dsp.mod.INT - sleepParams.bonus = 0 - sleepParams.effect = dsp.effect.SLEEP_II - sleepParams.skillType = dsp.skill.BLUE_MAGIC + sleepParams.attribute = tpz.mod.INT + sleepParams.bonus = 0 + sleepParams.effect = tpz.effect.SLEEP_II + sleepParams.skillType = tpz.skill.BLUE_MAGIC local resist = applyResistanceEffect(caster, target, spell, sleepParams) if (resist > 0.5) then -- Apply the sleep local power = 2 From 886ac677a94472811c116e7f9a79f669876e7c44 Mon Sep 17 00:00:00 2001 From: MrHappyAsthma Date: Wed, 19 Feb 2020 20:55:43 -0800 Subject: [PATCH 03/11] Correct the TP multiplier values to 2.25. --- scripts/globals/spells/bluemagic/pinecone_bomb.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/globals/spells/bluemagic/pinecone_bomb.lua b/scripts/globals/spells/bluemagic/pinecone_bomb.lua index 3e508ad26be..aa04c747d3c 100644 --- a/scripts/globals/spells/bluemagic/pinecone_bomb.lua +++ b/scripts/globals/spells/bluemagic/pinecone_bomb.lua @@ -28,10 +28,10 @@ function onSpellCast(caster,target,spell) params.dmgtype = DMGTYPE_PIERCE params.scattr = SC_LIQUEFACTION params.numhits = 1 - params.multiplier = 1.25 - params.tp150 = 1.25 - params.tp300 = 1.25 - params.azuretp = 1.25 + params.multiplier = 2.25 + params.tp150 = 2.25 + params.tp300 = 2.25 + params.azuretp = 2.25 params.duppercap = 37 params.str_wsc = 0.20 params.dex_wsc = 0.0 From 5e53df678e08cfb38c64b42734ab9005ecdeb53c Mon Sep 17 00:00:00 2001 From: MrHappyAsthma Date: Wed, 19 Feb 2020 21:03:51 -0800 Subject: [PATCH 04/11] Add TPMOD_DURATION and reference it in pinecone_bomb.lua. --- scripts/globals/bluemagic.lua | 1 + scripts/globals/spells/bluemagic/pinecone_bomb.lua | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/globals/bluemagic.lua b/scripts/globals/bluemagic.lua index be349f92e3d..0bcfe45b3a5 100644 --- a/scripts/globals/bluemagic.lua +++ b/scripts/globals/bluemagic.lua @@ -7,6 +7,7 @@ TPMOD_CRITICAL = 1; TPMOD_DAMAGE = 2; TPMOD_ACC = 3; TPMOD_ATTACK = 4; +TPMOD_DURATION = 5; -- The SC the spell makes SC_IMPACTION = 0; diff --git a/scripts/globals/spells/bluemagic/pinecone_bomb.lua b/scripts/globals/spells/bluemagic/pinecone_bomb.lua index aa04c747d3c..169188afc88 100644 --- a/scripts/globals/spells/bluemagic/pinecone_bomb.lua +++ b/scripts/globals/spells/bluemagic/pinecone_bomb.lua @@ -24,7 +24,7 @@ end function onSpellCast(caster,target,spell) local params = {} -- This data should match information on http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage - params.tpmod = TPMOD_CRITICAL + params.tpmod = TPMOD_DURATION params.dmgtype = DMGTYPE_PIERCE params.scattr = SC_LIQUEFACTION params.numhits = 1 From d428375011d0f67b753232f9b3992bcbfb2b20fd Mon Sep 17 00:00:00 2001 From: Mark Klara Date: Thu, 20 Feb 2020 08:07:03 -0800 Subject: [PATCH 05/11] Rename `dmgtype` to `damageType`. This is needed after https://github.com/project-topaz/topaz/commit/b4ed738e8901e0127ffe19b855d6a886f82c476e --- scripts/globals/spells/bluemagic/pinecone_bomb.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/globals/spells/bluemagic/pinecone_bomb.lua b/scripts/globals/spells/bluemagic/pinecone_bomb.lua index 169188afc88..ff00d918525 100644 --- a/scripts/globals/spells/bluemagic/pinecone_bomb.lua +++ b/scripts/globals/spells/bluemagic/pinecone_bomb.lua @@ -25,7 +25,7 @@ function onSpellCast(caster,target,spell) local params = {} -- This data should match information on http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage params.tpmod = TPMOD_DURATION - params.dmgtype = DMGTYPE_PIERCE + params.damageType = DMGTYPE_PIERCE params.scattr = SC_LIQUEFACTION params.numhits = 1 params.multiplier = 2.25 From 8115ca6cc1ca532fb8c39fac1f7e22cca17d7902 Mon Sep 17 00:00:00 2001 From: Mark Klara Date: Sun, 16 Feb 2020 00:48:08 -0800 Subject: [PATCH 06/11] Add `Pinecone Bomb` blue magic spell. Now that the order of operations has been cleaned up for spells, Pinecone Bomb can be properly implemented. It does damage to the mob (which may wake it up from a previous slept state), but then can reapply sleep as described here: https://ffxiclopedia.fandom.com/wiki/Pinecone_Bomb --- .../spells/bluemagic/pinecone_bomb.lua | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 scripts/globals/spells/bluemagic/pinecone_bomb.lua diff --git a/scripts/globals/spells/bluemagic/pinecone_bomb.lua b/scripts/globals/spells/bluemagic/pinecone_bomb.lua new file mode 100644 index 00000000000..8d01151aab3 --- /dev/null +++ b/scripts/globals/spells/bluemagic/pinecone_bomb.lua @@ -0,0 +1,65 @@ +----------------------------------------- +-- Spell: Pinecone Bomb +-- Additional effect: Sleep. Duration of effect varies with TP +-- Spell cost: 48 MP +-- Monster Type: Plantoids +-- Spell Type: Physical (Piercing) +-- Blue Magic Points: 2 +-- Stat Bonus: STR+1 +-- Level: 36 +-- Casting Time: 2.5 seconds +-- Recast Time: 26.5 seconds +-- Skillchain Element(s): Fire (can open Scission or Fusion and can close Liquefaction) +-- Combos: None +----------------------------------------- +require("scripts/globals/bluemagic") +require("scripts/globals/status") +require("scripts/globals/magic") +----------------------------------------- + +function onMagicCastingCheck(caster,target,spell) + return 0 +end + +function onSpellCast(caster,target,spell) + local params = {} + -- This data should match information on http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage + params.tpmod = TPMOD_CRITICAL + params.dmgtype = DMGTYPE_PIERCE + params.scattr = SC_LIQUEFACTION + params.numhits = 1 + params.multiplier = 1.25 + params.tp150 = 1.25 + params.tp300 = 1.25 + params.azuretp = 1.25 + params.duppercap = 37 + params.str_wsc = 0.20 + params.dex_wsc = 0.0 + params.vit_wsc = 0.0 + params.agi_wsc = 0.20 + params.int_wsc = 0.0 + params.mnd_wsc = 0.0 + params.chr_wsc = 0.0 + + local damage = BluePhysicalSpell(caster, target, spell, params) + damage = BlueFinalAdjustments(caster, target, spell, damage, params) + + -- After damage is applied (which would have woken the target up from a + -- preexisting sleep, if necesesary), apply the sleep effect for this spell. + if (damage > 0) then + local sleepParams = {} + sleepParams.attribute = dsp.mod.INT + sleepParams.bonus = 0 + sleepParams.effect = dsp.effect.SLEEP_II + sleepParams.skillType = dsp.skill.BLUE_MAGIC + local resist = applyResistanceEffect(caster, target, spell, sleepParams) + if (resist > 0.5) then -- Apply the sleep + local power = 2 + local tick = 0 + local duration = 90 * resist + target:addStatusEffect(sleepParams.effect, power, tick, duration) + end + end + + return damage +end From 092e1238aa27af5aa7c0f533d4da6df648c111a2 Mon Sep 17 00:00:00 2001 From: ibm2431 Date: Sun, 16 Feb 2020 02:12:48 -0800 Subject: [PATCH 07/11] Update references from previous branding --- .../spells/bluemagic/pinecone_bomb.lua | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/scripts/globals/spells/bluemagic/pinecone_bomb.lua b/scripts/globals/spells/bluemagic/pinecone_bomb.lua index 8d01151aab3..3e508ad26be 100644 --- a/scripts/globals/spells/bluemagic/pinecone_bomb.lua +++ b/scripts/globals/spells/bluemagic/pinecone_bomb.lua @@ -24,22 +24,22 @@ end function onSpellCast(caster,target,spell) local params = {} -- This data should match information on http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage - params.tpmod = TPMOD_CRITICAL - params.dmgtype = DMGTYPE_PIERCE - params.scattr = SC_LIQUEFACTION - params.numhits = 1 - params.multiplier = 1.25 - params.tp150 = 1.25 - params.tp300 = 1.25 - params.azuretp = 1.25 - params.duppercap = 37 - params.str_wsc = 0.20 - params.dex_wsc = 0.0 - params.vit_wsc = 0.0 - params.agi_wsc = 0.20 - params.int_wsc = 0.0 - params.mnd_wsc = 0.0 - params.chr_wsc = 0.0 + params.tpmod = TPMOD_CRITICAL + params.dmgtype = DMGTYPE_PIERCE + params.scattr = SC_LIQUEFACTION + params.numhits = 1 + params.multiplier = 1.25 + params.tp150 = 1.25 + params.tp300 = 1.25 + params.azuretp = 1.25 + params.duppercap = 37 + params.str_wsc = 0.20 + params.dex_wsc = 0.0 + params.vit_wsc = 0.0 + params.agi_wsc = 0.20 + params.int_wsc = 0.0 + params.mnd_wsc = 0.0 + params.chr_wsc = 0.0 local damage = BluePhysicalSpell(caster, target, spell, params) damage = BlueFinalAdjustments(caster, target, spell, damage, params) @@ -48,10 +48,10 @@ function onSpellCast(caster,target,spell) -- preexisting sleep, if necesesary), apply the sleep effect for this spell. if (damage > 0) then local sleepParams = {} - sleepParams.attribute = dsp.mod.INT - sleepParams.bonus = 0 - sleepParams.effect = dsp.effect.SLEEP_II - sleepParams.skillType = dsp.skill.BLUE_MAGIC + sleepParams.attribute = tpz.mod.INT + sleepParams.bonus = 0 + sleepParams.effect = tpz.effect.SLEEP_II + sleepParams.skillType = tpz.skill.BLUE_MAGIC local resist = applyResistanceEffect(caster, target, spell, sleepParams) if (resist > 0.5) then -- Apply the sleep local power = 2 From 3f523799b843441b1d83896d782460177d48eeb0 Mon Sep 17 00:00:00 2001 From: MrHappyAsthma Date: Wed, 19 Feb 2020 20:55:43 -0800 Subject: [PATCH 08/11] Correct the TP multiplier values to 2.25. --- scripts/globals/spells/bluemagic/pinecone_bomb.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/globals/spells/bluemagic/pinecone_bomb.lua b/scripts/globals/spells/bluemagic/pinecone_bomb.lua index 3e508ad26be..aa04c747d3c 100644 --- a/scripts/globals/spells/bluemagic/pinecone_bomb.lua +++ b/scripts/globals/spells/bluemagic/pinecone_bomb.lua @@ -28,10 +28,10 @@ function onSpellCast(caster,target,spell) params.dmgtype = DMGTYPE_PIERCE params.scattr = SC_LIQUEFACTION params.numhits = 1 - params.multiplier = 1.25 - params.tp150 = 1.25 - params.tp300 = 1.25 - params.azuretp = 1.25 + params.multiplier = 2.25 + params.tp150 = 2.25 + params.tp300 = 2.25 + params.azuretp = 2.25 params.duppercap = 37 params.str_wsc = 0.20 params.dex_wsc = 0.0 From 830aeb894d1ef4aad65ce22e18eae4aad08f62ce Mon Sep 17 00:00:00 2001 From: MrHappyAsthma Date: Wed, 19 Feb 2020 21:03:51 -0800 Subject: [PATCH 09/11] Add TPMOD_DURATION and reference it in pinecone_bomb.lua. --- scripts/globals/bluemagic.lua | 11 ++++++----- scripts/globals/spells/bluemagic/pinecone_bomb.lua | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/scripts/globals/bluemagic.lua b/scripts/globals/bluemagic.lua index ef714eddc47..3b66e585d7a 100644 --- a/scripts/globals/bluemagic.lua +++ b/scripts/globals/bluemagic.lua @@ -2,11 +2,12 @@ require("scripts/globals/status") require("scripts/globals/magic") -- The TP modifier -TPMOD_NONE = 0 -TPMOD_CRITICAL = 1 -TPMOD_DAMAGE = 2 -TPMOD_ACC = 3 -TPMOD_ATTACK = 4 +TPMOD_NONE = 0; +TPMOD_CRITICAL = 1; +TPMOD_DAMAGE = 2; +TPMOD_ACC = 3; +TPMOD_ATTACK = 4; +TPMOD_DURATION = 5; -- The SC the spell makes SC_IMPACTION = 0 diff --git a/scripts/globals/spells/bluemagic/pinecone_bomb.lua b/scripts/globals/spells/bluemagic/pinecone_bomb.lua index aa04c747d3c..169188afc88 100644 --- a/scripts/globals/spells/bluemagic/pinecone_bomb.lua +++ b/scripts/globals/spells/bluemagic/pinecone_bomb.lua @@ -24,7 +24,7 @@ end function onSpellCast(caster,target,spell) local params = {} -- This data should match information on http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage - params.tpmod = TPMOD_CRITICAL + params.tpmod = TPMOD_DURATION params.dmgtype = DMGTYPE_PIERCE params.scattr = SC_LIQUEFACTION params.numhits = 1 From a774407c31ffe5c028208428b897124edafd74a7 Mon Sep 17 00:00:00 2001 From: MrHappyAsthma Date: Tue, 10 Mar 2020 21:00:48 -0700 Subject: [PATCH 10/11] Update attackType to RANGED for pinecone_bomb. --- scripts/globals/spells/bluemagic/pinecone_bomb.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/globals/spells/bluemagic/pinecone_bomb.lua b/scripts/globals/spells/bluemagic/pinecone_bomb.lua index 80e9a993477..af0927bae1b 100644 --- a/scripts/globals/spells/bluemagic/pinecone_bomb.lua +++ b/scripts/globals/spells/bluemagic/pinecone_bomb.lua @@ -25,7 +25,7 @@ function onSpellCast(caster,target,spell) local params = {} -- This data should match information on http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage params.tpmod = TPMOD_DURATION - params.attackType = tpz.attackType.PHYSICAL + params.attackType = tpz.attackType.RANGED params.damageType = tpz.damageType.PIERCING params.scattr = SC_LIQUEFACTION params.numhits = 1 From 78a96b880dc13b6adf8f0f1f459ec9537db3b4ca Mon Sep 17 00:00:00 2001 From: ibm2431 Date: Thu, 9 Apr 2020 06:57:34 -0700 Subject: [PATCH 11/11] Set duration to be inverse bell curve between 15~60 seconds, based on retail testing --- .../spells/bluemagic/pinecone_bomb.lua | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/scripts/globals/spells/bluemagic/pinecone_bomb.lua b/scripts/globals/spells/bluemagic/pinecone_bomb.lua index af0927bae1b..aff2b01b875 100644 --- a/scripts/globals/spells/bluemagic/pinecone_bomb.lua +++ b/scripts/globals/spells/bluemagic/pinecone_bomb.lua @@ -17,6 +17,17 @@ require("scripts/globals/status") require("scripts/globals/magic") ----------------------------------------- +function inverseBellRand(min, max, weight) + if not weight then weight = 0.5 end + local mid = math.floor((max - min) / 2) + local rand = math.floor(mid * math.pow(math.random(), weight)) + if math.random() < 0.5 then + return min + mid - rand + else + return min + mid + rand + end +end + function onMagicCastingCheck(caster,target,spell) return 0 end @@ -48,18 +59,8 @@ function onSpellCast(caster,target,spell) -- After damage is applied (which would have woken the target up from a -- preexisting sleep, if necesesary), apply the sleep effect for this spell. if (damage > 0) then - local sleepParams = {} - sleepParams.attribute = tpz.mod.INT - sleepParams.bonus = 0 - sleepParams.effect = tpz.effect.SLEEP_II - sleepParams.skillType = tpz.skill.BLUE_MAGIC - local resist = applyResistanceEffect(caster, target, spell, sleepParams) - if (resist > 0.5) then -- Apply the sleep - local power = 2 - local tick = 0 - local duration = 90 * resist - target:addStatusEffect(sleepParams.effect, power, tick, duration) - end + local duration = inverseBellRand(15, 60, 0.3) + target:addStatusEffect(tpz.effect.SLEEP_II, 2, 0, duration) end return damage