Skip to content

Instantly share code, notes, and snippets.

@TeoTwawki
Last active September 2, 2015 12:09
Show Gist options
  • Save TeoTwawki/a49311d25ce25470dee5 to your computer and use it in GitHub Desktop.
Save TeoTwawki/a49311d25ce25470dee5 to your computer and use it in GitHub Desktop.
example of monster using onSpikesDamage() for elemental damage
-- Some things are not perfect here, existing examples in trunk are written this way however.
require("scripts/globals/status");
require("scripts/globals/magic");
-----------------------------------
-- onMobInitialize Action
-----------------------------------
function onMobInitialize(mob)
mob:setMobMod(MOBMOD_AUTO_SPIKES, 1); -- Can be any non zero number, enables scripting of spikes.
-- Additionaly, ANY spike status effect or setting the modifiier for spike effect power manually, is require to activate.
-- I would like to change that in a later refactor, as it is a stupid requirement.
mob:addStatusEffect(EFFECT_ICE_SPIKES, 10, 0, 0); -- This effect is setting the base power of spikes before LV or stat adjustments
mob:getStatusEffect(EFFECT_ICE_SPIKES):setFlag(32); -- Makes effect unable to be dispelled
end;
-----------------------------------
-- onSpikesDamage
-----------------------------------
function onSpikesDamage(mob,target,damage)
local INT_diff = mob:getStat(MOD_INT) - target:getStat(MOD_INT);
if (INT_diff > 20) then
INT_diff = 20 + ((INT_diff - 20)*0.5); -- INT above 20 is half as effective.
end
local dmg = ((damage+INT_diff)*0.5); -- INT adjustment and base damage averaged together.
local params = {};
params.bonusmab = 0;
params.includemab = false;
dmg = addBonusesAbility(mob, ELE_ICE, target, dmg, params); -- Checks for things like weather bonus
dmg = dmg * applyResistanceAddEffect(mob, target, ELE_ICE, 0); -- Elemental resist and level correction happen here
dmg = adjustForTarget(target, dmg, ELE_ICE); -- Checks for absorb/null element modifiers
dmg = finalMagicNonSpellAdjustments(mob, target, ELE_ICE, dmg); -- Needed to check stoneskin, phalanx, etc.
if (dmg < 0) then
dmg = 0;
end
return SUBEFFECT_ICE_SPIKES, 44, dmg;
end;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment