Module:EnemyFunctionTable

From Secrets of Grindea Wiki
Jump to navigation Jump to search

Documentation for this module may be created at Module:EnemyFunctionTable/doc

--[[ Module:EnemyFunctionTable

Holds the functions required to calculate the stats for enemies based on difficulty and elite status

Since this table contains functions, you can't call mw.loadData() for it. You need
to use require() instead.

TO DO: Maybe run a script to precalculate all of the values and store them in a data table?

--]]


-- If a stat stays constant across all difficulty + elite combinations, set it as ["stat"] = val
-- The module will check if the stat is not a function, and just grab the value

-- If elite, e = 1, otherwise e = 0
-- Elite HP stat increases (of the form HP *= val) are expressed as (1 + (val - 1) * e), just in case the multiplier in question changes


-- Helper functions
local function choice(cond, valTrue, valFalse)
  if cond then
    return valTrue
  else
    return valFalse
  end
end

local function val_if(cond, valAdd)
  if cond then
    return valAdd
  else
    return 0
  end
end

local enemyFunctionTable = {
  ["greenslime"] = {
      ["HP"] =     function(d, e) return 60 * (1 + 5 * e) end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1 + e end,
      ["ATK"] =    function(d, e) return 15 + 5 * d + 20 * e end
    },
  ["redslime"] = {
      ["HP"] =     function(d, e) return 100 * (1 + 5 * e) * 2 end, -- 50% less HP in arcade
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1 + e end,
      ["ATK"] =    function(d, e) return 35 + 10 * d + 30 * e end -- 25 + 7 * d + 30 * e in arcade
    },
  ["rabby"] = {
      ["HP"] =     function(d, e) return 110 * (1 + 2 * e) end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1.8 end, -- 140% normal chill, 210% elite chill, 180% all triggered
      ["ATK"] =    function(d, e) return 20 + 5 * d + 20 * e end
    },
  ["bee"] = {
      ["HP"] =     function(d, e) return 50 * (1 + 3 * e) end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return choice(e == 1, 1.6, 1 + 0.2 * d) end,
      ["ATK"] =    function(d, e) return 20 + 10 * d + 15 * e end
    },
  ["bloomo"] = {
      ["HP"] =     function(d, e) return 220 end,
      ["DEF"] =    function(d, e) return 10 + 5 * d end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 5 + 5 * d end
    },
  ["chicken"] = {
      ["HP"] =     function(d, e) return 1333333337 end, -- Unkillable
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0.5 end,
      ["ATK"] =    function(d, e) return 0 end,
    },
  ["freddy"] = {
      ["HP"] =     function(d, e) return 1 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0.75 end,
      ["ATK"] =    function(d, e) return 0 end
    },
  ["teddy"] = {
      ["HP"] =     function(d, e) return 1 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0.75 end,
      ["ATK"] =    function(d, e) return 0 end
    },
  ["vilya"] = { -- No idea where Vilya II this is
      ["HP"] =     function(d, e) return 1000 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0.5 + 0.2 * d end,
      ["ATK"] =    function(d, e) return 35 + 5 * d end
    },
  ["gigaslime"] = {
      ["HP"] =     function(d, e) return 1500 end,
      ["DEF"] =    function(d, e) return 5 * d end,
      ["MSPD"] =   function(d, e) return 2 end,
      ["ATK"] =    function(d, e) return 5 + 10 * d end
    },
  ["jumpkin"] = {
      ["HP"] =     function(d, e) return 90 * (1 + 5 * e) end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1.5 + 0.25 * d + e end,
      ["ATK"] =    function(d, e) return 20 + 5 * d + 15 * e end
    },
  ["lanternjack"] = {
      ["HP"] =     function(d, e) return 100 * (1 + 2 * e) end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0.8 end,
      ["ATK"] =    function(d, e) return 25 + 15 * d + 25 * e end
    },
  ["ghosty"] = {
      ["HP"] =     function(d, e) return 90 * (1 + 5 * e) end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1.5 end,
      ["ATK"] =    function(d, e) return 20 + 15 * d end
    },
  ["scarecrow"] = {
      ["HP"] =     function(d, e) return 475 * (1 + 2 * e) end,
      ["DEF"] =    function(d, e) return 10 * d + 20 * e end,
      ["MSPD"] =   function(d, e) return 1.5 + 0.2 * d + 0.5 * e end,
      ["ATK"] =    function(d, e) return 35 + 10 * d + 30 * e end
    },
  ["halloweed"] = {
      ["HP"] =     function(d, e) return 650 * (1 + 1.4 * e) end, -- No HP scale in Arcade
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 2 + 0.5 * d + 0.5 * e + choice(e == 1 and d == 0, 0.5, 0) end,
      ["ATK"] =    function(d, e) return 30 + 10 * d + (10 + 10 * d) * e end
    },
  ["greenslime_ring"] = {
      ["HP"] =     function(d, e) return 60 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1 end,
      ["ATK"] =    function(d, e) return 0 end
    },
  ["redgigaslime"] = {
      ["HP"] =     function(d, e) return 10000 end,
      ["DEF"] =    function(d, e) return 5 * d end,
      ["MSPD"] =   function(d, e) return 2.5 end,
      ["ATK"] =    function(d, e) return 50 + 15 * d end
    },
  ["elderrabby"] = {
      ["HP"] =     function(d, e) return 1500 end,
      ["DEF"] =    function(d, e) return 5 * d end,
      ["MSPD"] =   function(d, e) return 2.1 + 0.15 * d end,
      ["ATK"] =    function(d, e) return 30 + 5 * d end
    },
  ["boar"] = {
      ["HP"] =     function(d, e) return 500 * (1 + 1.2 * e) end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1.6 + 0.2 * d + 0.2 * e end,
      ["ATK"] =    function(d, e) return 35 + 6 * d + 25 * e end
    },
  ["wisp"] = {
      ["HP"] =     function(d, e) return 300 end,
      ["DEF"] =    function(d, e) return d end,
      ["MSPD"] =   function(d, e) return 1.5 + 0.2 * d end,
      ["ATK"] =    function(d, e) return 35 + 10 * d end
    },
  ["guardian"] = {
      ["HP"] =     function(d, e) return 500 end,
      ["DEF"] =    function(d, e) return d end,
      ["MSPD"] =   function(d, e) return 1 end,
      ["ATK"] =    function(d, e) return 50 + 10 * d end
    },
  ["brawlerbot"] = {
      ["HP"] =     function(d, e) return 450 * (1 + 2 * e) end,
      ["DEF"] =    function(d, e) return d + 10 * e end,
      ["MSPD"] =   function(d, e) return 1.2 + 0.1 * d end,
      ["ATK"] =    function(d, e) return 60 + 10 * d + 10 * e end
    },
  ["pecko"] = {
      ["HP"] =     function(d, e) return 1000 * (1 + e) end,
      ["DEF"] =    function(d, e) return 50 + 10 * d end, --Multi: 42 + 8*p + 10*d
      ["MSPD"] =   function(d, e) return 1 + 0.2 * d end,
      ["ATK"] =    function(d, e) return 10 * d + 5 + 25 * e end  --Multi: 10*d + 5*p + 25*e
    },
  ["phaseman"] = {
      ["HP"] =     function(d, e) return 3250 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 10 end,
      ["ATK"] =    function(d, e) return 0 end
    },
  ["gundammain"] = {
      ["HP"] =     function(d, e) return 3950 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 0 end
    },
  ["gundamhand"] = {
      ["HP"] =     function(d, e) return 1500 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 10 end,
      ["ATK"] =    function(d, e) return 0 end
    },
  ["thesentry"] = {
      ["HP"] =     function(d, e) return 4250 end,
      ["DEF"] =    function(d, e) return 4 * d end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 0 end
    },
  ["blueslime"] = {
      ["HP"] =     function(d, e) return 500 * (1 + 3 * e) end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return (1 + 0.1 * (d + 1)) * (1 + e) end,
      ["ATK"] =    function(d, e) return 45 + 15 * d + 30 * e end
    },
  ["frostlingrogue"] = {
      ["HP"] =     function(d, e) return 750 * (1 + e) end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1.7 + 0.15 * (d + 1) + 0.5 * e end,
      ["ATK"] =    function(d, e) return (35 + 15 * d) * (1 + e) end
    },
  ["frostlingscoundrel"] = {
      ["HP"] =     function(d, e) return 600 * (1 + e) end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1 + 0.2 * (d + 1) end,
      ["ATK"] =    function(d, e) return (30 + 15 * d) * (1 + e) end
    },
  ["yeti"] = {
      ["HP"] =     function(d, e) return 3000 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return math.max(1.2 + 0.2 * (d + 1)) + 0.5 * e end,
      ["ATK"] =    function(d, e) return (60 + 10 * d) * (1 + 0.5 * e) end
    },
  ["giftboxmelee"] = {
      ["HP"] =     function(d, e) return 900 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return math.min(1 + 0.2 * (d + 1), 1.4) end,
      ["ATK"] =    function(d, e) return 27 + 7 * d end
    },
  ["giftboxranged"] = {
      ["HP"] =     function(d, e) return 650 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return math.min(1 + 0.2 * (d + 1), 1.4) end,
      ["ATK"] =    function(d, e) return 15 + 5 * d end
    },
  ["beehive"] = {
      ["HP"] =     function(d, e)
                     local hp = 180 * (1 + 2 * e)
                     return choice(d >= 3, hp * 1.3, hp) 
                   end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 0 end
    },
  ["pumpking"] = {
      ["HP"] =     function(d, e) return 1800 end,
      ["DEF"] =    function(d, e) return 15 * d end,
      ["MSPD"] =   function(d, e) return 1.5 + 0.2 * d end,
      ["ATK"] =    function(d, e) return 50 + 10 * d end
    },
  ["terrorweed"] = {
      ["HP"] =     function(d, e) return 2500 end,
      ["DEF"] =    function(d, e) return 15 + 10 * d end,
      ["MSPD"] =   function(d, e) return 0 end, -- Black magic for sure
      ["ATK"] =    function(d, e) return 30 + 15 * d end
    },
  ["riftcrystal"] = {
      ["HP"] =     function(d, e) return 750 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 0 end
    },
  ["marino"] = {
      ["HP"] =     function(d, e) return 3000 end,
      ["DEF"] =    function(d, e) return 10 end,
      ["MSPD"] =   function(d, e) return 0.5 + 0.2 * d end,
      ["ATK"] =    function(d, e) return 15 + 4 * d end
    },
  ["enragedtoymachine"] = {
      ["HP"] =     function(d, e) return 30000 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 0 end
    },
  ["autumnfae"] = { -- References the same basestats object as summer
      ["HP"] =     function(d, e) return 4800 end,
      ["DEF"] =    function(d, e) return 40 end,
      ["MSPD"] =   function(d, e) return 5 end,
      ["ATK"] =    function(d, e) return 0 end
    },
  ["summerfae"] = {
      ["HP"] =     function(d, e) return 4800 end,
      ["DEF"] =    function(d, e) return 40 end,
      ["MSPD"] =   function(d, e) return 5 end,
      ["ATK"] =    function(d, e) return 0 end
    },
  ["winterfae"] = {
      ["HP"] =     function(d, e) return 18000 end,
      ["DEF"] =    function(d, e) return choice(d > 0, 65, 40) end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 0 end,
    },
  ["summerknight"] = {
      ["HP"] =     function(d, e) return 680 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0.8 + 0.1 * (d + 1) end,
      ["ATK"] =    function(d, e) return 40 + 7 * d end
    },
  ["autumnknight"] = {
      ["HP"] =     function(d, e) return 540 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0.8 + 0.1 * (d + 1) end,
      ["ATK"] =    function(d, e) return 27 + 7 * d end
    },
  ["winterknight"] = {
      ["HP"] =     function(d, e) return 600 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0.8 + 0.1 * (d + 1) end,
      ["ATK"] =    function(d, e) return 27 + 7 * d end
    },
  ["summermage"] = {
      ["HP"] =     function(d, e) return 440 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0.8 + 0.1 * (d + 1) end,
      ["ATK"] =    function(d, e) return 27 + 7 * d end
    },
  ["autumnmage"] = {
      ["HP"] =     function(d, e) return 440 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0.8 + 0.1 * (d + 1) end,
      ["ATK"] =    function(d, e) return 27 + 7 * d end
    },
  ["wintermage"] = {
      ["HP"] =     function(d, e) return 440 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0.8 + 0.1 * (d + 1) end,
      ["ATK"] =    function(d, e) return 27 + 7 * d end
    },
  ["frostlingboss"] = {
      ["HP"] =     function(d, e) return 7000 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1.7 + 0.15 * (d + 1) end,
      ["ATK"] =    function(d, e) return 60 + 10 * d end
    },
  ["livingpuzzleblock"] = {
      ["HP"] =     function(d, e) return 5000 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 50 + 20 * d + 10 * (d + 1) end --10 ATK per extra player
    },
  ["summerhydra"] = {
      ["HP"] =     function(d, e) return 7000 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1 + 0.2 * d end,
      ["ATK"] =    function(d, e) return 30 + 10 * (d + 1) end
    },
  ["winterhydra"] = {
      ["HP"] =     function(d, e) return 7000 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1 + 0.2 * d end,
      ["ATK"] =    function(d, e) return 30 + 10 * (d + 1) end
    },
  ["autumnhydra"] = {
      ["HP"] =     function(d, e) return 7000 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1 + 0.2 * d end,
      ["ATK"] =    function(d, e) return 30 + 10 * (d + 1) end
    },
  ["spinsect"] = {
      ["HP"] =     function(d, e) return 1800 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1.6 + 0.2 * (d + 1) end,
      ["ATK"] =    function(d, e) return (40 + 7 * d) * (1 + 0.5 * e) end
    },
  ["shroomie"] = {
      ["HP"] =     function(d, e) return 550 * (1 + 0.6 * e) end, --+ 0.4 per extra player
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0.5 end,
      ["ATK"] =    function(d, e) return (20 + 5 * (d + 1)) * (1 + 0.5 * e) end --+5 ATK per extra player
    },
  ["summerhydra_solo"] = {
      ["HP"] =     function(d, e) return 4200 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1 + 0.2 * d end,
      ["ATK"] =    function(d, e) return 20 + 10 * (d + 1) end
    },
  ["winterhydra_solo"] = {
      ["HP"] =     function(d, e) return 4200 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1 + 0.2 * d end,
      ["ATK"] =    function(d, e) return 20 + 10 * (d + 1) end
    },
  ["autumnhydra_solo"] = {
      ["HP"] =     function(d, e) return 4200 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1 + 0.2 * d end,
      ["ATK"] =    function(d, e) return 20 + 10 * (d + 1) end
    },
  ["queenbee"] = {
      ["HP"] =     function(d, e) return 7500 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1.3 + 0.2 * d end,
      ["ATK"] =    function(d, e) return 20 + 10 * d end
    },
  ["beeguard"] = {
      ["HP"] =     function(d, e) return 600 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1 + 0.2 * d end,
      ["ATK"] =    function(d, e) return 50 + 20 * d end
    },
  ["redspinsect"] = {
      ["HP"] =     function(d, e) return 800000 end, -- Effectively immortal
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1.6 + 0.2 * (d + 1) end,
      ["ATK"] =    function(d, e) return 27 + 7 * d end
    },
  ["larvacid"] = {
      ["HP"] =     function(d, e) return 2200 * (1 + 0.6 * e) end, -- +0.4 per extra player
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0.5 end, -- Movement is done through animations instead
      ["ATK"] =    function(d, e) return 50 + 10 * d end
    },
  ["toxictulip"] = {
      ["HP"] =     function(d, e) return 1150 * (1 + 0.6 * e) end, -- +0.4 per extra player
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 40 + 15 * d end
    },
  ["powerflower"] = {
      ["HP"] =     function(d, e) return 26000 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 70 + 20 * d end
    },
  ["cursedpriestess"] = {
      ["HP"] =     function(d, e) return 30000 + 3000 * (d + 1) end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1 end,
      ["ATK"] =    function(d, e) return 60 + 15 * d end
    },
  ["thornworm"] = {
      ["HP"] =     function(d, e) return 1600 * (1 + e) end, -- +0.3 per extra player
      ["DEF"] =    function(d, e) return 15 + 10 * d end,
      ["MSPD"] =   function(d, e)
                     local speed = choice(d > 0, 2, 1.5)
                     return speed * (1 + 0.45 * e)
                   end,
      ["ATK"] =    function(d, e) return 45 + 15 * d end
    },
  ["ancientstatue"] = {
      ["HP"] =     function(d, e) return 3500 end,
      ["DEF"] =    function(d, e) return choice(d > 0, 65, 40) end,
      ["MSPD"] =   function(d, e) return 1.5 end,
      ["ATK"] =    function(d, e) return (60 + 15 * d) * choice(e == 1 and d > 0, 1.5, 1) end
    },
  ["plantaehostilis"] = {
      ["HP"] =     function(d, e) return 4000 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 60 + 15 * d end
    },
  ["echoofmadness"] = {
      ["HP"] =     function(d, e) return 6000 end,
      ["DEF"] =    function(d, e) return choice(d > 1, 65, 40) + 25 * e end,
      ["MSPD"] =   function(d, e) return 0.5 + 0.16 * d + 0.25 * e end,
      ["ATK"] =    function(d, e) return (60 + 15 * d) * choice(e == 1 and d > 0, 1.5, 1) end
    },
  ["monkey"] = {
      ["HP"] =     function(d, e) return 2600 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1 end,
      ["ATK"] =    function(d, e) return 40 + 10 * d end
    },
  ["giantthornworm"] = {
      ["HP"] =     function(d, e) return 16500 end,
      ["DEF"] =    function(d, e) return 40 end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 70 + 15 * d end
    },
  ["giantthornworm_recolor"] = {
      ["HP"] =     function(d, e) return 16500 end,
      ["DEF"] =    function(d, e) return 40 end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 70 + 15 * d end
    },
  ["zhamla"] = {
      ["HP"] =     function(d, e) return 22500 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 70 + 15 * d end
    },
  ["mimic_stage1"] = {
      ["HP"] =     function(d, e) return 9000 end,
      ["DEF"] =    function(d, e) return 24 end,
      ["MSPD"] =   function(d, e) return 2 end,
      ["ATK"] =    function(d, e) return 40 + 15 * d end
    },
  ["mimic_stage2"] = {
      ["HP"] =     function(d, e) return 18000 end,
      ["DEF"] =    function(d, e) return 30 end,
      ["MSPD"] =   function(d, e) return 2 end,
      ["ATK"] =    function(d, e) return 60 + 15 * d end
    },
  ["mimic_stage3"] = {
      ["HP"] =     function(d, e) return 25000 end,
      ["DEF"] =    function(d, e) return choice(d > 0, 60, 50) end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 60 + 15 * d end
    },
  ["shroomie_fire"] = {
      ["HP"] =     function(d, e) return 550 * (1 + 0.6 * e) end, -- + 0.4 per extra player
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0.5 end,
      ["ATK"] =    function(d, e) return (30 + 8 * (d + 1)) * (1 + 0.5 * e) end --+ 8 ATK per extra player
    },
  ["lood_gold"] = nil,
  ["lood_item"] = nil,
  ["lood_health"] = nil,
  ["lood_talentorb"] = nil,
  ["lood_pin"] = nil,
  ["cacute"] = {
      ["HP"] =     function(d, e) return 2800 * (1 + e) end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return (40 + 15 * d) * (1 + 0.25 * e) end
    },
  ["bird"] = {
      ["HP"] =     function(d, e) return 1700 * (1 + 0.4 * e) end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1.2 + 0.2 * d end,
      ["ATK"] =    function(d, e) return (60 + 10 * d) * (1 + 0.25 * e) end
    },
  ["orangeslime"] = {
      ["HP"] =     function(d, e) return 1900 * (1 + 2 * e) end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return (1.5 + 0.1 * (d + 1)) * (1 + 0.4 * e) end,
      ["ATK"] =    function(d, e) return 60 + 10 * d + 60 * e end
    },
  ["solem"] = {
      ["HP"] =     function(d, e) return 11000 * (1 + 0.4 * e) end,
      ["DEF"] =    function(d, e) return (15 + 10 * d) * (1 + 0.2 * e) end,
      ["MSPD"] =   function(d, e) return (0.9 + 0.1 * (d + 1)) * (1 + 0.1 * e) end,
      ["ATK"] =    function(d, e) return (90 + 15 * d) * (1 + 0.25 * e) end
    },
  ["marino_v2"] = {
      ["HP"] =     function(d, e) return 30000 end,
      ["DEF"] =    function(d, e) return 20 + 3 * d end,
      ["MSPD"] =   function(d, e) return 2 end,
      ["ATK"] =    function(d, e) return 16 + 4 * d end
    },
  ["marino_shadowclone"] = {
      ["HP"] =     function(d, e) return 1000 end,
      ["DEF"] =    function(d, e) return 10 end,
      ["MSPD"] =   function(d, e) return 2 end,
      ["ATK"] =    function(d, e) return 10 + 5 * d end
    },
  ["solgem"] = {
      ["HP"] =     function(d, e) return 50000 end,
      ["DEF"] =    function(d, e) return 25 + 15 * d end,
      ["MSPD"] =   function(d, e) return 0.11 + 0.1 * (d + 1) end,
      ["ATK"] =    function(d, e) return 110 + 20 * d end
    },
  ["livingveggies"] = {
      ["HP"] =     function(d, e) return 350 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1.4 end,
      ["ATK"] =    function(d, e) return 0 end
    },
  ["kingweed"] = {
      ["HP"] =     function(d, e) return 28000 end,
      ["DEF"] =    function(d, e) return 15 + 10 * d end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 60 + 15 * d end
    },
  ["skeletonwarrior"] = {
      ["HP"] =     function(d, e) return 5600 * (1 + e) end,
      ["DEF"] =    function(d, e) return (15 + 10 * d) * (1 + 0.2 * d) end,
      ["MSPD"] =   function(d, e) return choice(d > 0, 1.5, 1) end,
      ["ATK"] =    function(d, e) return (100 + 20 * d) * (1 + 0.5 * e) end
    },
  ["skeletonwizard"] = {
      ["HP"] =     function(d, e) return 6200 * (1 + 0.5 * e) end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0.5 end,
      ["ATK"] =    function(d, e) return 80 + 12 * d end
    },
  ["crabby"] = {
      ["HP"] =     function(d, e) return 2750 * (1 + 2 * e) end,
      ["DEF"] =    function(d, e) return (100 + 70 * d) * (1 + 0.2 * e) end,
      ["MSPD"] =   function(d, e) return 0.75 end,
      ["ATK"] =    function(d, e) return 125 + 20 * d end
    },
  ["hauntie"] = {
      ["HP"] =     function(d, e) return 2200 * (1 + e) end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 1 + 0.5 * e end,
      ["ATK"] =    function(d, e) return (80 + 12 * d) * (1 + 0.5 * e) end
    },
  ["livingskull"] = {
      ["HP"] =     function(d, e) return 1200 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0.5 end,
      ["ATK"] =    function(d, e) return 90 + 15 * d end
    },
  ["captainbones"] = {
      ["HP"] =     function(d, e) return 90000 end,
      ["DEF"] =    function(d, e) return 15 + 10 * d end,
      ["MSPD"] =   function(d, e) return 1 + 0.2 * d end,
      ["ATK"] =    function(d, e) return 70 + 20 * d end
    },
  ["evileye"] = {
      ["HP"] =     function(d, e) return 100000 end,
      ["DEF"] =    function(d, e) return 10 + 5 * d end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 60 + 15 * d end
    },
  ["minieye"] = {
      ["HP"] =     function(d, e) return 1200 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 0 end
    },
  ["fridge"] = {
      ["HP"] =     function(d, e) return 1600 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 400 + 160 * d end
    },
  ["minieye_laserversion"] = {
      ["HP"] =     function(d, e) return 350 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 0 end
    },
  ["minieye_rollingexplodingversion"] = {
      ["HP"] =     function(d, e) return 10000 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0.5 end,
      ["ATK"] =    function(d, e) return 0 end
    },
  ["flooreye_darkness"] = {
      ["HP"] =     function(d, e) return 300 end, -- 20% per extra player
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 0 end
    },
  ["luke"] = {
      ["HP"] =     function(d, e) return 100000 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0.5 end,
      ["ATK"] =    function(d, e) return 0 end
    },
  ["voodoodoll"] = {
      ["HP"] =     function(d, e) return 3000000 end,
      ["DEF"] =    function(d, e) return 0 end,
      ["MSPD"] =   function(d, e) return 0 end,
      ["ATK"] =    function(d, e) return 0 end
    }
}

return enemyFunctionTable