Advertisement
Guest User

code

a guest
Mar 30th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.50 KB | None | 0 0
  1. local Mod = RegisterMod("Courage or Cowardice", 1)
  2.  
  3. ------------
  4. -- Global --
  5. ------------
  6.  
  7. -- Global Variables --
  8. local game = Game()
  9. local currentRoom = game:GetRoom()
  10.  
  11. -- Global Functions --
  12. -- Global Callbacks --
  13.  
  14. -----------
  15. -- Items --
  16. -----------
  17. local ItemScript = {}
  18. -- Item Variables --
  19. local ItemId = {
  20. -- Passive Items --
  21. RESILIENCE = Isaac.GetItemIdByName("Resilience"),
  22. -- Active Items --
  23. -- Trinkets --
  24. ADRENALINERUSH = Isaac.GetTrinketIdByName("Adrenaline Rush")
  25. }
  26. local ItemCostume = {
  27. -- Passive Items --
  28. RESILIENCE = Isaac.GetCostumeIdByPath("gfx/characters/Resilience.anm2")
  29. -- Active Items --
  30. -- Trinkets --
  31. }
  32. local ItemBonus = {
  33. -- Passive Items --
  34. RESILIENCE_DAMAGE = 0.5,
  35. RESILIENCE_MOVE = 0.1,
  36. RESILIENCE_RANGE = 1,
  37. -- Active Items --
  38. -- Trinkets --
  39. ADRENALINE_DAMAGE = 1.2, -- Multiplier: +20% damage
  40. ADRENALINE_MOVE = 1.4 -- Multiplier: +40% speed
  41. }
  42. local HasItem = {
  43. -- Passive Items --
  44. Resilience = false,
  45. -- Active Items --
  46. -- Trinkets --
  47. AdrenalineRush = false
  48. }
  49. local ResilienceProc = false
  50. local ResilienceStacks = 0
  51.  
  52. -- Item Functions --
  53. function UpdateItems(player) -- Sets HasItem booleans for each item to whether the player has the item
  54. -- Passive Items --
  55. HasItem.Resilience = player:HasCollectible(ItemId.RESILIENCE)
  56. -- Active Items --
  57. -- Trinkets --
  58. HasItem.AdrenalineRush = player:HasTrinket(ItemId.ADRENALINERUSH)
  59. end
  60.  
  61. function ItemScript:onPlayerInit(player) -- When player is created (game start or continue)
  62. UpdateItems(player)
  63. end
  64.  
  65. function ItemScript:onPefUpdate(player)
  66. -- Beginning of run initialization
  67. if game:GetFrameCount() == 1 then
  68. if player:HasCollectible(ItemId.RESILIENCE) and not HasItem.Resilience then
  69. player:AddNullCostume(ItemCostume.RESILIENCE)
  70. UpdateItems(player)
  71. end
  72. end
  73.  
  74. if currentRoom:GetFrameCount() == 1 then -- On entry of a room
  75. player:AddCacheFlags(CacheFlag.CACHE_DAMAGE) -- Set fire delay cache flag for evaluation
  76. player:AddCacheFlags(CacheFlag.CACHE_SPEED) -- Set speed cache flag for evaluation
  77. player:AddCacheFlags(CacheFlag.CACHE_RANGE) -- Set range cache flag for evaluation
  78. player:EvaluateItems() -- Evaluate player items
  79. ResilienceStacks = 0 -- Set Resilience stacks to 0
  80. end
  81. if currentRoom:GetFrameCount() == 180 then -- 180 frames after entry of room
  82. if HasItem.AdrenalineRush and not HasItem.Resilience then
  83. player:AddCacheFlags(CacheFlag.CACHE_DAMAGE) -- Set fire delay cache flag for evaluation
  84. player:AddCacheFlags(CacheFlag.CACHE_SPEED) -- Set speed cache flag for evaluation
  85. player:EvaluateItems() -- Evaluate player items
  86. end
  87. end
  88.  
  89. -- Add resilience costume on acquire
  90. if player:HasCollectible(ItemId.RESILIENCE) and not HasItem.Resilience then
  91. player:AddNullCostume(ItemCostume.RESILIENCE)
  92. end
  93.  
  94. UpdateItems(player)
  95. end
  96.  
  97. function ItemScript:onDmg(target, dmg, flags, source, countdown)
  98. for playerNum = 0, game:GetNumPlayers() do
  99. local player = game:GetPlayer(playerNum)
  100.  
  101. if HasItem.Resilience then
  102. ResilienceProc = true
  103. ResilienceStacks = ResilienceStacks + 1
  104. player:AddCacheFlags(CacheFlag.CACHE_DAMAGE)
  105. player:AddCacheFlags(CacheFlag.CACHE_RANGE)
  106. player:AddCacheFlags(CacheFlag.CACHE_SPEED)
  107. player:EvaluateItems()
  108. ResilienceProc = false
  109. end
  110. end
  111. end
  112.  
  113. function ItemScript:onCache(player, cacheFlag) -- When cache is updated
  114. local defaultDamage = player.Damage -- Set default damage (to damage when cache is evaluated)
  115. local defaultMove = player.MoveSpeed -- Set default move speed (to tear rate when cache is evaluated)
  116.  
  117. if cacheFlag == CacheFlag.CACHE_DAMAGE then -- If cache is fire delay
  118. if HasItem.AdrenalineRush then -- If player has Blood Rush trinket
  119. if currentRoom:GetFrameCount() == 1 then -- If current room has only just been entered
  120. player.Damage = defaultDamage * ItemBonus.ADRENALINE_DAMAGE -- Increase damage by Adrenaline Rush damage (multiplier)
  121. end
  122. if currentRoom:GetFrameCount() == 180 and player.MaxFireDelay > defaultDamage then -- If been in room for 180 frames and damage is more than default damage
  123. player.Damage = defaultDamage -- Set tear rate to default damage
  124. end
  125. end
  126. if HasItem.Resilience then
  127. if ResilienceProc then
  128. player.Damage = player.Damage + (ItemBonus.RESILIENCE_DAMAGE * ResilienceStacks)
  129. end
  130. if currentRoom:GetFrameCount() == 1 and ResilienceStacks > 0 then
  131. player.Damage = player.Damage - (ItemBonus.RESILIENCE_DAMAGE * ResilienceStacks)
  132. end
  133. end
  134. end
  135.  
  136. if cacheFlag == CacheFlag.CACHE_RANGE then -- If cache is range
  137. if HasItem.Resilience then
  138. if ResilienceProc then
  139. player.TearHeight = player.TearHeight + (ItemBonus.RESILIENCE_RANGE * ResilienceStacks)
  140. player.TearFallingSpeed = player.TearFallingSpeed + (ItemBonus.RESILIENCE_RANGE * ResilienceStacks)
  141. end
  142. if currentRoom:GetFrameCount() == 1 and ResilienceStacks > 0 then
  143. player.TearHeight = player.TearHeight - (ItemBonus.RESILIENCE_RANGE * ResilienceStacks)
  144. player.TearFallingSpeed = player.TearFallingSpeed - (ItemBonus.RESILIENCE_RANGE * ResilienceStacks)
  145. end
  146. end
  147. end
  148.  
  149. if cacheFlag == CacheFlag.CACHE_SPEED then -- If cache is speed
  150. if HasItem.AdrenalineRush then -- If player has Blood Rush trinket
  151. if currentRoom:GetFrameCount() == 1 then -- If current room has only just been entered
  152. player.MoveSpeed = defaultMove * ItemBonus.ADRENALINE_MOVE -- Increase movement speed by Blood Rush move speed (multiplier)
  153. end
  154. if currentRoom:GetFrameCount() == 180 and player.MoveSpeed > defaultMove then -- If been in room for 180 frames and max move speed is higher than default move speed
  155. player.MoveSpeed = defaultMove -- Set move speed to default move speed
  156. end
  157. end
  158. if HasItem.Resilience then
  159. if ResilienceProc then
  160. player.MoveSpeed = player.MoveSpeed + (ItemBonus.RESILIENCE_MOVE * ResilienceStacks)
  161. end
  162. if currentRoom:GetFrameCount() == 1 and ResilienceStacks > 0 then
  163. player.MoveSpeed = player.MoveSpeed - (ItemBonus.RESILIENCE_MOVE * ResilienceStacks)
  164. end
  165. end
  166. end
  167. end
  168. -- Item Callbacks --
  169. Mod:AddCallback(ModCallbacks.MC_POST_PLAYER_INIT, ItemScript.onPlayerInit)
  170. Mod:AddCallback(ModCallbacks.MC_POST_PEFFECT_UPDATE, ItemScript.onPefUpdate)
  171. Mod:AddCallback(ModCallbacks.MC_ENTITY_TAKE_DMG, ItemScript.onDmg, EntityType.ENTITY_PLAYER)
  172. Mod:AddCallback(ModCallbacks.MC_EVALUATE_CACHE, ItemScript.onCache)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement