Josh64

First Lua

Apr 3rd, 2018
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.27 KB | None | 0 0
  1. local ToySkull = RegisterMod("ToySkull", 1)
  2. local game = Game()
  3.  
  4. --reference item & costume
  5.  
  6. CollectibleType.COLLECTIBLE_TOY_SKULL = Isaac.GetItemIdByName("Toy Skull")
  7. ToySkull.COSTUME_TOY_SKULL = Isaac.GetCostumeIdByPath("gfx/characters/toyskull.anm2")
  8.  
  9. local ToyBonus = {
  10. TOYSKULL = 2 --Luck
  11. }
  12.  
  13. --Shell Game tables
  14.  
  15. local Grab = {
  16. Coin = nil,
  17. Key = nil,
  18. Bomb = nil
  19. }
  20. local Shell = {
  21. Traget = nil,
  22. RADIUS = 4
  23. }
  24.  
  25. local pickup = {}
  26.  
  27. --update the inventory
  28.  
  29. local function UpdateToy(player)
  30. HasToy.ToySkull = player:HasCollectible(CollectibleType.COLLECTIBLE_TOY_SKULL)
  31. end
  32.  
  33. --if you start a run or continue. Before anything happens
  34.  
  35. function ToySkull:onPlayerInit(player)
  36. UpdateToy(player)
  37. end
  38. ToySkull:AddCallback(ModCallbacks.MC_POST_PLAYER_INIT, ToySkull.onPlayerInit)
  39.  
  40. --when passive effects should update
  41.  
  42. function ToySkull:onUpdate(player)
  43. if game:GetFrameCount() == 1 then
  44. ToySkull.HasToySkull = false
  45. --spawn in if necessary
  46. end
  47. if not ToySkull.HasToySkull and HasToy.ToySkull then
  48. player:AddNullCostume(ToySkull.COSTUME_TOY_SKULL)
  49. ToySkull.HasToySkull = true
  50. end
  51. UpdateToy(player)
  52. end
  53. ToySkull:AddCallback(Modcallbacks.MC_POST_PEFFECT_UPDATE, ToySkull.onUpdate)
  54.  
  55. --update the cache
  56.  
  57. function ToySkull:onCache(player, cacheFlag)
  58. if cacheFlag == CacheFlag.CACHE_LUCK then
  59. if player:HasCollectible(CollectibleType.COLLECTIBLE_TOY_SKULL) and not HasToy.ToySkull then
  60. player.Luck = player.Luck + ToyBonus.ToySkull
  61. end
  62. end
  63. end
  64. ToySkull:AddCallback(ModCallbacks.MC_EVALUATE_CACHE, ToySkull.onCache)
  65.  
  66. --add Shell Game functionality
  67.  
  68. function ToySkull.onPayout()
  69.  
  70. --is there a Shell Game Beggar in the room?
  71.  
  72. if HasToy.ToySkull and Shell.Target == nil then
  73. local roomEntities = Isaac.GetRoomEntities()
  74. local shellGame = Isaac:GetEntityVariantByName("Shell Game Beggar")
  75. for i, entity in pairs(roomEntities) do
  76. if entity.Type == EntityType.ENTITY_SLOT
  77. and entity.Variant == shellGame then
  78. Shell.Target = entity
  79. end
  80. end
  81.  
  82. --if yes, then the game will check if he spawns a pickup. In this case a coin
  83.  
  84. elseif Shell.Target.Spawn(EntityType.ENTITY_PICKUP)
  85. and pickup.Variant == PickupVariant.PICKUP_COIN
  86. and pickup.Subtype == CoinSubType.COIN_PENNY then
  87. local shellEntities = Isaac.FindInRadius(Shell.Target.Position, 100, EntityPartition.PICKUP)
  88. for j, grabc in pairs(shellEntities) do
  89. if grabc.Variant == PickupVariant.PICKUP_COIN
  90. and grabc.Subtype == CoinSubType.COIN_PENNY then
  91. Grab.Coin = grabc
  92. Isaac.Spawn(
  93. EntityType.ENTITY_PICKUP,
  94. PickupVariant.PICKUP_GRAB_BAG,
  95. Grab.Coin.Position,
  96. Vector(
  97. math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS,
  98. math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS
  99. ),
  100. Shell.Target
  101. )
  102. Grab.Coin:Remove()
  103. Grab.Coin = nil
  104. end
  105. end
  106. Shell.Target = nil
  107.  
  108. --now a doublecoin
  109.  
  110. elseif Shell.Target.Spawn(EntityType.ENTITY_PICKUP)
  111. and pickup.Variant == PickupVariant.PICKUP_COIN
  112. and pickup.Subtype == CoinSubType.COIN_DOUBLEPACK then
  113. local shellEntities = Isaac.FindInRadius(Shell.Target.Position, 100, EntityPartition.PICKUP)
  114. for k, grabc in pairs(shellEntities) do
  115. if grabc.Variant == PickupVariant.PICKUP_COIN
  116. and grabc.Subtype == CoinSubType.COIN_DOUBLEPACK then
  117. Grab.Coin = grabc
  118. Isaac.Spawn(
  119. EntityType.ENTITY_PICKUP,
  120. PickupVariant.PICKUP_GRAB_BAG,
  121. Grab.Coin.Position,
  122. Vector(
  123. math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS,
  124. math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS
  125. ),
  126. Shell.Target
  127. )
  128. Grab.Coin:Remove()
  129. Grab.Coin = nil
  130. end
  131. end
  132. Shell.Target = nil
  133.  
  134.  
  135. --now a key
  136.  
  137. elseif Shell.Target.Spawn(EntityType.ENTITY_PICKUP)
  138. and pickup.Variant == PickupVariant.PICKUP_KEY
  139. and pickup.Subtype == KeySubType.KEY_NORMAL then
  140. local shellEntities = Isaac.FindInRadius(Shell.Target.Position, 100, EntityPartition.PICKUP)
  141. for l, grabk in pairs(shellEntities) do
  142. if grabk.Variant == PickupVariant.PICKUP_KEY
  143. and grabk.Subtype == KeySubType.KEY_NORMAL then
  144. Grab.Key = grabk
  145. Isaac.Spawn(
  146. EntityType.ENTITY_PICKUP,
  147. PickupVariant.PICKUP_PILL,
  148. Grab.Key.Position,
  149. Vector(
  150. math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS,
  151. math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS
  152. ),
  153. Shell.Target
  154. )
  155. Grab.Key:Remove()
  156. Grab.Key = nil
  157. end
  158. end
  159. Shell.Target = nil
  160.  
  161. --now a doublekey
  162.  
  163. elseif Shell.Target.Spawn(EntityType.ENTITY_PICKUP)
  164. and pickup.Variant == PickupVariant.PICKUP_KEY
  165. and pickup.Subtype == KeySubType.KEY_DOUBLEPACK then
  166. local shellEntities = Isaac.FindInRadius(Shell.Target.Position, 100, EntityPartition.PICKUP)
  167. for m, grabk in pairs(shellEntities) do
  168. if grabk.Variant == PickupVariant.PICKUP_KEY
  169. and grabk.Subtype == KeySubType.KEY_DOUBLEPACK then
  170. Grab.Key = grabk
  171. Isaac.Spawn(
  172. EntityType.ENTITY_PICKUP,
  173. PickupVariant.PICKUP_PILL,
  174. Grab.Key.Position,
  175. Vector(
  176. math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS,
  177. math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS
  178. ),
  179. Shell.Target
  180. )
  181. Grab.Key:Remove()
  182. Grab.Key = nil
  183. end
  184. end
  185. Shell.Target = nil
  186.  
  187. --now a bomb
  188.  
  189. elseif Shell.Target.Spawn(EntityType.ENTITY_PICKUP)
  190. and pickup.Variant == PickupVariant.PICKUP_BOMB
  191. and pickup.Subtype == BombSubType.BOMB_NORMAL then
  192. local shellEntities = Isaac.FindInRadius(Shell.Target.Position, 100, EntityPartition.PICKUP)
  193. for n, grabbo in pairs(shellEntities) do
  194. if grabbo.Variant == PickupVariant.PICKUP_BOMB
  195. and grabbo.Subtype == BombSubType.BOMB_NORMAL then
  196. Grab.Bomb = grabbo
  197. local rng = player:GetCollectibleRNG(CollectibleType.COLLECTIBLE_TOY_SKULL)
  198. local roll = rng:RandomInit(20)
  199. if roll < 2 then
  200. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_TAROTCARD, CARD_RUNE_HAGALAZ, Grab.Bomb.Position, Vector (math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS, math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS), Shell.Target)
  201. esleif roll < 4 then
  202. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_TAROTCARD, CARD_RUNE_JERA, Grab.Bomb.Position, Vector (math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS, math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS), Shell.Target)
  203. elseif roll < 6 then
  204. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_TAROTCARD, CARD_RUNE_EHWAZ, Grab.Bomb.Position, Vector (math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS, math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS), Shell.Target)
  205. elseif roll < 8 then
  206. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_TAROTCARD, CARD_RUNE_DAGAZ, Grab.Bomb.Position, Vector (math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS, math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS), Shell.Target)
  207. elseif roll < 10 then
  208. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_TAROTCARD, CARD_RUNE_ANSUZ, Grab.Bomb.Position, Vector (math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS, math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS), Shell.Target)
  209. elseif roll < 12 then
  210. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_TAROTCARD, CARD_RUNE_PERTHRO, Grab.Bomb.Position, Vector (math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS, math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS), Shell.Target)
  211. esleif roll < 14 then
  212. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_TAROTCARD, CARD_RUNE_BERKANO, Grab.Bomb.Position, Vector (math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS, math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS), Shell.Target)
  213. elseif roll < 16 then
  214. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_TAROTCARD, CARD_RUNE_ALGIZ, Grab.Bomb.Position, Vector (math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS, math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS), Shell.Target)
  215. elseif roll < 18 then
  216. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_TAROTCARD, CARD_RUNE_BLANK, Grab.Bomb.Position, Vector (math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS, math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS), Shell.Target)
  217. else Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_TAROTCARD, CARD_RUNE_BLACK, Grab.Bomb.Position, Vector (math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS, math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS), Shell.Target)
  218. end
  219. Grab.Bomb:Remove()
  220. Grab.Bomb = nil
  221. end
  222. end
  223. Shell.Target = nil
  224.  
  225. --now a doublebomb
  226.  
  227. elseif Shell.Target.Spawn(EntityType.ENTITY_PICKUP)
  228. and pickup.Variant == PickupVariant.PICKUP_BOMB
  229. and pickup.Subtype == BombSubType.BOMB_DOUBLEPACK then
  230. local shellEntities = Isaac.FindInRadius(Shell.Target.Position, 100, EntityPartition.PICKUP)
  231. for o, grabbo in pairs(shellEntities) do
  232. if grabbo.Variant == PickupVariant.PICKUP_BOMB
  233. and grabbo.Subtype == BombSubType.BOMB_DOUBLEPACK then
  234. Grab.Bomb = grabbo
  235. local rng = player:GetCollectibleRNG(CollectibleType.COLLECTIBLE_TOY_SKULL)
  236. local roll = rng:RandomInit(20)
  237. if roll < 2 then
  238. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_TAROTCARD, CARD_RUNE_HAGALAZ, Grab.Bomb.Position, Vector (math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS, math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS), Shell.Target)
  239. esleif roll < 4 then
  240. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_TAROTCARD, CARD_RUNE_JERA, Grab.Bomb.Position, Vector (math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS, math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS), Shell.Target)
  241. elseif roll < 6 then
  242. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_TAROTCARD, CARD_RUNE_EHWAZ, Grab.Bomb.Position, Vector (math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS, math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS), Shell.Target)
  243. elseif roll < 8 then
  244. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_TAROTCARD, CARD_RUNE_DAGAZ, Grab.Bomb.Position, Vector (math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS, math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS), Shell.Target)
  245. elseif roll < 10 then
  246. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_TAROTCARD, CARD_RUNE_ANSUZ, Grab.Bomb.Position, Vector (math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS, math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS), Shell.Target)
  247. elseif roll < 12 then
  248. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_TAROTCARD, CARD_RUNE_PERTHRO, Grab.Bomb.Position, Vector (math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS, math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS), Shell.Target)
  249. esleif roll < 14 then
  250. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_TAROTCARD, CARD_RUNE_BERKANO, Grab.Bomb.Position, Vector (math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS, math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS), Shell.Target)
  251. elseif roll < 16 then
  252. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_TAROTCARD, CARD_RUNE_ALGIZ, Grab.Bomb.Position, Vector (math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS, math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS), Shell.Target)
  253. elseif roll < 18 then
  254. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_TAROTCARD, CARD_RUNE_BLANK, Grab.Bomb.Position, Vector (math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS, math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS), Shell.Target)
  255. else Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_TAROTCARD, CARD_RUNE_BLACK, Grab.Bomb.Position, Vector (math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS, math.random(Shell.RADIUS * 2 + 1) - Shell.RADIUS), Shell.Target)
  256. end
  257. Grab.Bomb:Remove()
  258. Grab.Bomb = nil
  259. end
  260. end
  261. Shell.Target = nil
  262. end
  263. end
  264. ToySkull:AddCallback(ModCallbacks.MC_POST_NPC_UPDATE, ToySkull.onPayout)
Advertisement
Add Comment
Please, Sign In to add comment