WasabiJellyfish

HealthPoint

Dec 23rd, 2015
246
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 13.99 KB | None | 0 0
  1. -- HealthPoint
  2. -- Made by WasabiJellyfish
  3. -- v1.0.3
  4.  
  5. local HealthPoint = {}
  6. local pNPC = loadSharedAPI("pnpc")
  7. local graphX = loadSharedAPI("graphX")
  8. local colliders = loadSharedAPI("colliders")
  9.  
  10. function HealthPoint.onInitAPI() --Is called when the api is loaded by loadAPI.
  11.         registerEvent(HealthPoint, "onLoop", "assign", true) --Register the loop event
  12.         registerEvent(HealthPoint, "onNPCKill", "onNPCKill", true) --Register the damage event      
  13. end
  14.  ----------------------------------------------------------------------------------------------
  15.  ---                       DOCUMENTATION AND FUNCTIONS                                      ---
  16.  ----------------------------------------------------------------------------------------------
  17.  --[[
  18.     Damage types
  19.     1 = jump
  20.     2 = spinjump
  21.     3 = fireball
  22.     4 = hammer
  23.     5 = shell
  24.     6 = tail
  25.     7 = link
  26.     8 = thrown
  27.     9 = boomerang
  28.     10 = peachbomb
  29.     11 = swordbeam
  30.     12 = linkfire
  31.     13 = iceblock
  32.     14 = yoshifire
  33.     15 = yoshiice
  34.    
  35.     HealthPoint.setNPCHealth(id, healthamount)
  36.  
  37.  
  38.     HealthPoint.setNPCDamage(id, damagetype, damageamount)
  39.  
  40.  
  41.     HealthPoint.setGlobalDamage(damagetype, damageamount)
  42.  
  43.  
  44.     HealthPoint.makeNPCInvincible(id)
  45.  
  46.  
  47.     HealthPoint.makeNPCNormal(id)
  48.  --]]
  49.  
  50.  ----------------------------------------------------------------------------------------------
  51.  ---                            THE ACTUAL CODE STUFF                                       ---
  52.  ----------------------------------------------------------------------------------------------
  53.  
  54.  
  55. local bingo = {1, 2, 3, 4, 5, 6, 7, 8, 12, 15, 17, 18, 19, 20, 23, 24, 25, 27, 28, 29, 36, 37, 38, 39, 42, 43, 44, 47, 48, 49, 50, 51, 52, 53, 54, 55, 59, 61, 63, 65, 71, 72, 73, 74, 76, 77, 86, 89, 93, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 135, 136, 137, 161, 162, 163, 164, 165, 166, 167, 168, 172, 173, 174, 175, 176, 177, 180, 189, 194, 195, 199, 200, 201, 203, 204, 205, 206, 207, 208, 209, 210, 229, 230, 231, 232, 233, 234, 235, 236, 242, 243, 244, 245, 247, 256, 257, 261, 262, 263, 267, 268, 270, 271, 272, 275, 280, 281, 284, 285, 286}
  56.  -- Health --
  57.  -- Change these values corresponding to the id inside the [] to change the enemy's health --
  58.   HealthPoint.npcHealth = {}
  59.   for _,v in pairs(bingo) do
  60.   table.insert(HealthPoint.npcHealth, v, 3)
  61.   end
  62.  
  63.  
  64.  -- Jump Damage --
  65.   HealthPoint.jumpDamage = {}
  66.    for _,v in pairs(bingo) do
  67.   table.insert(HealthPoint.jumpDamage, v, 1)
  68.   end
  69.  -- Spinjump Damage --
  70.   HealthPoint.spinjumpDamage = {}
  71.    for _,v in pairs(bingo) do
  72.   table.insert(HealthPoint.spinjumpDamage, v, 1)
  73.   end
  74.  
  75.   -- Fireball Damage --
  76.   HealthPoint.fireballDamage = {}
  77.    for _,v in pairs(bingo) do
  78.   table.insert(HealthPoint.fireballDamage, v, 1)
  79.   end
  80.  
  81.  -- Hammer Damage --
  82.   HealthPoint.hammerDamage = {}
  83.    for _,v in pairs(bingo) do
  84.   table.insert(HealthPoint.hammerDamage, v, 1)
  85.   end
  86.  
  87.  -- Projectile Damage --
  88.   HealthPoint.projectileDamage = {}
  89.   for _,v in pairs(bingo) do
  90.   table.insert(HealthPoint.projectileDamage, v, 1)
  91.   end
  92.  
  93.  -- Tail Damage --
  94.   HealthPoint.tailDamage = {}
  95.    for _,v in pairs(bingo) do
  96.   table.insert(HealthPoint.tailDamage, v, 1)
  97.   end
  98.  
  99.  -- Link Attack Damage --
  100.   HealthPoint.linkDamage = {}
  101.    for _,v in pairs(bingo) do
  102.   table.insert(HealthPoint.linkDamage, v, 1)
  103.   end
  104.  
  105.   -- Thrown Damage --
  106.   HealthPoint.thrownDamage = {}
  107.    for _,v in pairs(bingo) do
  108.   table.insert(HealthPoint.thrownDamage, v, 1)
  109.   end
  110.  
  111.   -- Boomerang Damage--
  112.   HealthPoint.boomerangDamage = {}
  113.    for _,v in pairs(bingo) do
  114.   table.insert(HealthPoint.boomerangDamage, v, 1)
  115.   end
  116.  
  117.   HealthPoint.peachbombDamage = {}
  118.    for _,v in pairs(bingo) do
  119.   table.insert(HealthPoint.peachbombDamage, v, 1)
  120.   end
  121.  
  122.   HealthPoint.swordbeamDamage = {}
  123.    for _,v in pairs(bingo) do
  124.   table.insert(HealthPoint.swordbeamDamage, v, 1)
  125.   end
  126.  
  127.   HealthPoint.yoshifireDamage = {}
  128.    for _,v in pairs(bingo) do
  129.   table.insert(HealthPoint.yoshifireDamage, v, 1)
  130.   end
  131.  
  132.  HealthPoint.iceblockDamage = {}
  133.    for _,v in pairs(bingo) do
  134.   table.insert(HealthPoint.iceblockDamage, v, 1)
  135.   end
  136.   HealthPoint.linkfireDamage = {}
  137.    for _,v in pairs(bingo) do
  138.   table.insert(HealthPoint.linkfireDamage, v, 1)
  139.   end
  140.  HealthPoint.yoshiiceDamage = {}
  141.    for _,v in pairs(bingo) do
  142.   table.insert(HealthPoint.yoshiiceDamage, v, 1)
  143.   end
  144.  ----------------------------------------------------------------------------------------------
  145.  ---                            THE ACTUAL CODE STUFF                                       ---
  146.  ----------------------------------------------------------------------------------------------
  147.  damevaeg = {}
  148.  damevaeg[1] = HealthPoint.jumpDamage
  149.  damevaeg[2] = HealthPoint.spinjumpDamage
  150.  damevaeg[3] = HealthPoint.fireballDamage
  151.  damevaeg[4] = HealthPoint.hammerDamage
  152.  damevaeg[5] = HealthPoint.projectileDamage
  153.  damevaeg[6] = HealthPoint.tailDamage
  154.  damevaeg[7] = HealthPoint.linkDamage
  155.  damevaeg[8] = HealthPoint.thrownDamage
  156.  damevaeg[9] = HealthPoint.boomerangDamage
  157.  damevaeg[10] = HealthPoint.peachbombDamage
  158.  damevaeg[11] = HealthPoint.swordbeamDamage
  159.  damevaeg[12] = HealthPoint.linkfireDamage
  160.  damevaeg[13] = HealthPoint.iceblockDamage
  161.  damevaeg[14] = HealthPoint.yoshifireDamage
  162.  damevaeg[15] = HealthPoint.yoshiiceDamage
  163.  
  164.  function HealthPoint.setNPCHealth(id, number)
  165.  HealthPoint.npcHealth[id] = number
  166.  end
  167.  function HealthPoint.setNPCDamage(id, cause, number)
  168. damevaeg[cause][id] = number
  169. end
  170.  function HealthPoint.setGlobalDamage(cause, number)
  171. for l,_ in pairs(HealthPoint.npcHealth) do
  172.  damevaeg[cause][l] = number
  173.  end
  174.  end
  175.  
  176.  function HealthPoint.makeNPCInvincible(id)
  177.  for r,_ in pairs(damevaeg) do
  178. damevaeg[r][id] = 0
  179. end
  180.  end
  181.  function HealthPoint.makeNPCNormal(NPCid)
  182.  table.remove(HealthPoint.npcHealth, NPCid)
  183.  for r,_ in pairs(damevaeg) do
  184.  table.remove(damevaeg[r], NPCid)
  185.  end
  186.  end
  187.  
  188.  ----------------------------------------------------------------------------------------------
  189.  ---                                 DAMAGE INPUT                                           ---
  190.  ----------------------------------------------------------------------------------------------
  191.  
  192.  function HealthPoint.onNPCKill(eventObj, killedNPC, killReason)
  193.     if killedNPC.id == 13 and killReason == 4 then
  194.     fire = true
  195.     hammer = false
  196.     shell = false
  197.     end
  198.         if HealthPoint.npcHealth[killedNPC.id] ~= nil  then
  199.             local wrappedNPC = pNPC.wrap(killedNPC)
  200.            
  201.  
  202.         if colliders.collideNPC(wrappedNPC, 171) then
  203.             hammer = true
  204.             fire = false
  205.             shell = false
  206.             elseif colliders.collideNPC(wrappedNPC, 292) then
  207.             boomerang = true
  208.             hammer = false
  209.             fire = false
  210.             shell = false
  211.             elseif colliders.collideNPC(wrappedNPC, 108) then
  212.             yoshifire = true
  213.             hammer = false
  214.             fire = false
  215.             shell = false
  216.            
  217.             elseif colliders.collideNPC (wrappedNPC, 263) then
  218.             Text.print ("ICE", 100, 100)
  219.             ice = true
  220.             shell = false
  221.             hammer = false
  222.             fire = false
  223.            
  224.             elseif colliders.collideNPC (wrappedNPC, 291) then
  225.             peachbomb = true
  226.             shell = false
  227.            
  228.             elseif colliders.collideNPC (wrappedNPC, 266) then
  229.             laser = true
  230.             shell = false
  231.             elseif colliders.collideNPC(wrappedNPC, 237) then
  232.             yoshiice = true
  233.             shell = false
  234.             else
  235.             shell = true
  236.            
  237.             end
  238.  
  239.            
  240.             if wrappedNPC.data.hit > 1 and wrappedNPC.data.hit > HealthPoint.jumpDamage[wrappedNPC.id] and killReason == 1 then
  241.                 eventObj.cancelled = true
  242.                 wrappedNPC:mem(0x156, FIELD_WORD, 20)
  243.                 wrappedNPC.data.hit = wrappedNPC.data.hit - HealthPoint.jumpDamage[wrappedNPC.id]
  244.                 playSFX(2)
  245.                 wrappedNPC.speedX = 0
  246.                
  247.             elseif wrappedNPC.data.hit > 1 and wrappedNPC.data.hit > HealthPoint.fireballDamage[wrappedNPC.id] and killReason == 3 and fire then
  248.                 eventObj.cancelled = true
  249.                 wrappedNPC:mem(0x156, FIELD_WORD, 20)
  250.                 wrappedNPC.data.hit = wrappedNPC.data.hit - HealthPoint.fireballDamage[wrappedNPC.id]
  251.                 playSFX(3)
  252.                 wrappedNPC.speedX = 0
  253.                 fire = false
  254.                
  255.                 elseif wrappedNPC.data.hit > 1 and wrappedNPC.data.hit > HealthPoint.iceblockDamage[wrappedNPC.id] and killReason == 3 and ice then
  256.                 eventObj.cancelled = true
  257.                 wrappedNPC:mem(0x156, FIELD_WORD, 20)
  258.                 wrappedNPC.data.hit = wrappedNPC.data.hit - HealthPoint.iceblockDamage[wrappedNPC.id]
  259.                 playSFX(3)
  260.                 wrappedNPC.speedX = 0
  261.                
  262.                
  263.             elseif wrappedNPC.data.hit > 1 and wrappedNPC.data.hit > HealthPoint.hammerDamage[wrappedNPC.id] and killReason == 3 and hammer then
  264.                 eventObj.cancelled = true
  265.                 wrappedNPC:mem(0x156, FIELD_WORD, 20)
  266.                 wrappedNPC.data.hit = wrappedNPC.data.hit - HealthPoint.hammerDamage[wrappedNPC.id]
  267.                 playSFX(3)
  268.                 wrappedNPC.speedX = 0
  269.                
  270.                 elseif wrappedNPC.data.hit > 1 and wrappedNPC.data.hit > HealthPoint.boomerangDamage[wrappedNPC.id] and killReason == 3 and boomerang then
  271.                 eventObj.cancelled = true
  272.                 wrappedNPC:mem(0x156, FIELD_WORD, 20)
  273.                 wrappedNPC.data.hit = wrappedNPC.data.hit - HealthPoint.boomerangDamage[wrappedNPC.id]
  274.                 playSFX(3)
  275.                 wrappedNPC.speedX = 0
  276.                
  277.             elseif wrappedNPC.data.hit > 1 and wrappedNPC.data.hit > HealthPoint.yoshifireDamage[wrappedNPC.id] and killReason == 3 and yoshifire then
  278.                 eventObj.cancelled = true
  279.                 wrappedNPC:mem(0x156, FIELD_WORD, 20)
  280.                 wrappedNPC.data.hit = wrappedNPC.data.hit - HealthPoint.yoshifireDamage[wrappedNPC.id]
  281.                 playSFX(3)
  282.                 wrappedNPC.speedX = 0
  283.                
  284.                     elseif wrappedNPC.data.hit > 1 and wrappedNPC.data.hit > HealthPoint.yoshifireDamage[wrappedNPC.id] and killReason == 3 and yoshiice then
  285.                 eventObj.cancelled = true
  286.                 wrappedNPC:mem(0x156, FIELD_WORD, 20)
  287.                 wrappedNPC.data.hit = wrappedNPC.data.hit - HealthPoint.yoshiiceDamage[wrappedNPC.id]
  288.                 playSFX(3)
  289.                 wrappedNPC.speedX = 0
  290.                
  291.                 elseif wrappedNPC.data.hit > 1 and wrappedNPC.data.hit > HealthPoint.peachbombDamage[wrappedNPC.id] and killReason == 3 and peachbomb then
  292.                 eventObj.cancelled = true
  293.                 wrappedNPC:mem(0x156, FIELD_WORD, 20)
  294.                 wrappedNPC.data.hit = wrappedNPC.data.hit - HealthPoint.peachbombDamage[wrappedNPC.id]
  295.                 playSFX(3)
  296.                 wrappedNPC.speedX = 0
  297.                
  298.                         elseif wrappedNPC.data.hit > 1 and wrappedNPC.data.hit > HealthPoint.swordbeamDamage[wrappedNPC.id] and killReason == 10 and laser then
  299.                  eventObj.cancelled = true
  300.                  wrappedNPC:mem(0x156, FIELD_WORD, 20)
  301.                  wrappedNPC.data.hit = wrappedNPC.data.hit - HealthPoint.swordbeamDamage[wrappedNPC.id]
  302.                  playSFX(89)   
  303.                  wrappedNPC.speedX = 0
  304.                  
  305.        
  306.            
  307.                 elseif wrappedNPC.data.hit > 1 and wrappedNPC.data.hit > HealthPoint.projectileDamage[wrappedNPC.id] and killReason == 3 and shell and not fire and not ice then
  308.                 eventObj.cancelled = true
  309.                 wrappedNPC:mem(0x156, FIELD_WORD, 20)
  310.                 wrappedNPC.data.hit = wrappedNPC.data.hit - HealthPoint.projectileDamage[wrappedNPC.id]
  311.                 playSFX(3)
  312.                 wrappedNPC.speedX = 0
  313.                 shell = false
  314.                
  315.             elseif wrappedNPC.data.hit > 1 and wrappedNPC.data.hit > HealthPoint.thrownDamage[wrappedNPC.id] and   (killReason == 4 or killReason == 5) then
  316.                 eventObj.cancelled = true
  317.                 wrappedNPC:mem(0x156, FIELD_WORD, 20)
  318.                 wrappedNPC.data.hit = wrappedNPC.data.hit - HealthPoint.thrownDamage[wrappedNPC.id]
  319.          
  320.          
  321.             elseif wrappedNPC.data.hit > 1 and wrappedNPC.data.hit > HealthPoint.tailDamage[wrappedNPC.id] and killReason == 7 then
  322.                 eventObj.cancelled = true
  323.                 wrappedNPC:mem(0x156, FIELD_WORD, 20)
  324.                 wrappedNPC.data.hit = wrappedNPC.data.hit - HealthPoint.tailDamage[wrappedNPC.id]
  325.                 playSFX(3)
  326.                 wrappedNPC.speedX = 0
  327.                
  328.             elseif wrappedNPC.data.hit > 1 and wrappedNPC.data.hit > HealthPoint.spinjumpDamage[wrappedNPC.id] and killReason == 8 then
  329.                  eventObj.cancelled = true
  330.                  wrappedNPC:mem(0x156, FIELD_WORD, 20)
  331.                  wrappedNPC.data.hit = wrappedNPC.data.hit - HealthPoint.spinjumpDamage[wrappedNPC.id]
  332.                  playSFX(2)
  333.                 wrappedNPC.speedX = 0
  334.                
  335.             elseif wrappedNPC.data.hit > 1 and wrappedNPC.data.hit > HealthPoint.linkDamage[wrappedNPC.id] and killReason == 10 and not fire then
  336.                  eventObj.cancelled = true
  337.                  wrappedNPC:mem(0x156, FIELD_WORD, 20)
  338.                  wrappedNPC.data.hit = wrappedNPC.data.hit - HealthPoint.linkDamage[wrappedNPC.id]
  339.                  playSFX(89)   
  340.                  wrappedNPC.speedX = 0
  341.                  
  342.                                
  343.             elseif wrappedNPC.data.hit > 1 and wrappedNPC.data.hit > HealthPoint.linkfireDamage[wrappedNPC.id] and killReason == 10 and fire then
  344.                  eventObj.cancelled = true
  345.                  wrappedNPC:mem(0x156, FIELD_WORD, 20)
  346.                  wrappedNPC.data.hit = wrappedNPC.data.hit - HealthPoint.linkfireDamage[wrappedNPC.id]
  347.                  playSFX(89)   
  348.                  wrappedNPC.speedX = 0
  349.                  
  350.             end
  351.     end
  352.  end
  353.  
  354.  
  355.  
  356.  ----------------------------------------------------------------------------------------------
  357.  ---                              HEALTH ASSIGNMENT                                         ---
  358.  ----------------------------------------------------------------------------------------------
  359.  
  360.  function HealthPoint.assign()
  361.     for k,v in pairs(NPC.get()) do
  362.    
  363.     local n = pNPC.wrap(v);
  364.    
  365.         if n.data.hit == nil then
  366.             if HealthPoint.npcHealth[n.id] ~= nil  then
  367.                 n.data.hit = HealthPoint.npcHealth[n.id]
  368.  
  369.             end
  370.         end
  371.        
  372.         if n.data.hp == nil then
  373.             if HealthPoint.npcHealth[n.id] ~= nil then
  374.                 n.data.hp = HealthPoint.npcHealth[n.id]
  375.  
  376.             end
  377.         end
  378.        
  379.         if n.data.hpmax == nil then
  380.             if HealthPoint.npcHealth[n.id] ~= nil then
  381.                 n.data.hpmax = HealthPoint.npcHealth[n.id]
  382.             end
  383.         end
  384.        
  385.         if n ~= nil and HealthPoint.healthbar then
  386.             if n:mem(0x12A, FIELD_WORD) ~= 0 and n.data.hp ~= nil then
  387.                 graphX.boxLevel (n.x-8,n.y-6, 32, 8,  0xFFFFFFF55)
  388.                 graphX.boxLevel (n.x-7,n.y-5, 30, 6,  0x00000055)
  389.                 graphX.boxLevel (n.x-7,n.y-5, n.data.hp/n.data.hpmax*30, 6,  0xFFF05BFF)
  390.                 graphX.boxLevel (n.x-7,n.y-5, n.data.hit/n.data.hpmax*30, 6,  0xF61818FF)
  391.  
  392.             end
  393.         end
  394.  
  395.         if n.data.hp ~= nil then
  396.             if n.data.hp > n.data.hit then
  397.                 n.data.hp = n.data.hp -0.02
  398.             end
  399.             if n.data.hit > n.data.hpmax then
  400.                 n.data.hit = n.data.hpmax
  401.             end
  402.         end
  403.     end
  404.  end
  405.  return HealthPoint
Add Comment
Please, Sign In to add comment