Josh64

Untitled

Apr 6th, 2018
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.35 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. local BeaggarState = {
  25. IDLE = 0
  26. PAYNOTHING = 2
  27. PAYPRICE = 3
  28. PRICE = 4
  29. TELEPORT = 5
  30. }
  31. local pickup = {}
  32.  
  33. --update the inventory
  34.  
  35. local function UpdateToy(player)
  36. HasToy.ToySkull = player:HasCollectible(CollectibleType.COLLECTIBLE_TOY_SKULL)
  37. end
  38.  
  39. --if you start a run or continue. Before anything happens
  40.  
  41. function ToySkull:onPlayerInit(player)
  42. UpdateToy(player)
  43. end
  44. ToySkull:AddCallback(ModCallbacks.MC_POST_PLAYER_INIT, ToySkull.onPlayerInit)
  45.  
  46. --when passive effects should update
  47.  
  48. function ToySkull:onUpdate(player)
  49. if game:GetFrameCount() == 1 then
  50. ToySkull.HasToySkull = false
  51. --spawn in if necessary
  52. end
  53. if not ToySkull.HasToySkull and HasToy.ToySkull then
  54. player:AddNullCostume(ToySkull.COSTUME_TOY_SKULL)
  55. player:AddCoin(1)
  56. player:AddKey(1)
  57. player:AddBomb(1)
  58. ToySkull.HasToySkull = true
  59. end
  60. UpdateToy(player)
  61. end
  62. ToySkull:AddCallback(Modcallbacks.MC_POST_PEFFECT_UPDATE, ToySkull.onUpdate)
  63.  
  64. --update the cache
  65.  
  66. function ToySkull:onCache(player, cacheFlag)
  67. if cacheFlag == CacheFlag.CACHE_LUCK then
  68. if player:HasCollectible(CollectibleType.COLLECTIBLE_TOY_SKULL) and not HasToy.ToySkull then
  69. player.Luck = player.Luck + ToyBonus.ToySkull
  70. end
  71. end
  72. end
  73. ToySkull:AddCallback(ModCallbacks.MC_EVALUATE_CACHE, ToySkull.onCache)
  74.  
  75. --add Shell Game functionality
  76.  
  77. function ToySkull:onPayout(pickup)
  78.  
  79. --is there a Shell Game Beggar in the room?
  80.  
  81. if Shell.Target == nil then
  82. if HasToy.ToySkull then
  83. local roomEntities = Isaac.GetRoomEntities()
  84. local shellGame = Isaac:GetEntityVariantByName("Shell Game Beggar")
  85. for i, entity in pairs(roomEntities) do
  86. if entity.Type == EntityType.ENTITY_SLOT
  87. and entity.Variant == shellGame then
  88. Shell.Target = entity
  89. end
  90. end
  91.  
  92. --if yes, then the game will check if he spawns a pickup. In this case a coin
  93.  
  94. elseif Shell.Target.State == BeggarState.PAYPRICE and Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_COIN, CoinSubType.COIN_PENNY, Shell.Target.Position, 0, Shell.Target) then
  95. local numberCoins = Isaac:CountEntities(Shell.Target, EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_COIN, CoinSubType.COIN_PENNY)
  96. local shellEntities = Isaac.FindInRadius(Shell.Target.Position, 50, EntityPartition.PICKUP)
  97. for j = 1, numberCoins do
  98. for a, pickup in pairs(shellEntities) do
  99. if pickup.Variant == PickupVariant.PICKUP_COIN
  100. and pickup.Subtype == CoinSubType.COIN_PENNY then
  101.  
  102. -- if the game finds a coin, then it will replace it with an Sack
  103.  
  104. Grab.Coin = pickup
  105. Isaac.Spawn(
  106. EntityType.ENTITY_PICKUP,
  107. PickupVariant.PICKUP_GRAB_BAG,
  108. Grab.Coin.Position,
  109. Grab.Coin.Velocity,
  110. Shell.Target
  111. )
  112. Grab.Coin:Remove()
  113. Grab.Coin = nil
  114. end
  115. end
  116. end
  117. Shell.Target = nil
  118.  
  119.  
  120.  
  121.  
  122. --now a doublecoin
  123.  
  124. elseif Shell.Target.State == BeggarState.PAYPRICE and Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_COIN, CoinSubType.COIN_DOUBLEPACK, Shell.Target.Position, 0, Shell.Target) then
  125. local numberCoins = Isaac:CountEntities(Shell.Target, EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_COIN, CoinSubType.COIN_DOUBLEPACK)
  126. local shellEntities = Isaac.FindInRadius(Shell.Target.Position, 50, EntityPartition.PICKUP)
  127. for k = 1, numberCoins do
  128. for b, pickup in pairs(shellEntities) do
  129. if pickup.Variant == PickupVariant.PICKUP_COIN
  130. and pickup.Subtype == CoinSubType.COIN_DOUBLEPACK then
  131.  
  132. --if the game finds a doublecoin, then it will replace it with a Sack
  133.  
  134. Grab.Coin = pickup
  135. Isaac.Spawn(
  136. EntityType.ENTITY_PICKUP,
  137. PickupVariant.PICKUP_GRAB_BAG,
  138. Grab.Coin.Position,
  139. Grab.Coin.Velocity,
  140. Shell.Target
  141. )
  142. Grab.Coin:Remove()
  143. Grab.Coin = nil
  144. end
  145. end
  146. end
  147. Shell.Target = nil
  148.  
  149.  
  150. --now a key
  151.  
  152. elseif Shell.Target.State == BeggarState.PAYPRICE and Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_KEY, KeySubType.KEY_NORMAL, Shell.Target.Position, 0, Shell.Target) then
  153. local numberKeys = Isaac:CountEntities(Shell.Target, EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_KEY, KeySubType.KEY_NORMAL)
  154. local shellEntities = Isaac.FindInRadius(Shell.Target.Position, 50, EntityPartition.PICKUP)
  155. for m = 1, numberKeys do
  156. for c, pickup in pairs(shellEntities) do
  157. if pickup.Variant == PickupVariant.PICKUP_KEY
  158. and pickup.Subtype == KeySubType.KEY_NORMAL then
  159.  
  160. --if the game finds a key, then it will replace it with a Pill
  161.  
  162.  
  163. Grab.KEY = pickup
  164. Isaac.Spawn(
  165. EntityType.ENTITY_PICKUP,
  166. PickupVariant.PICKUP_PILL,
  167. Grab.Key.Position,
  168. Grab.Key.Velocity,
  169. Shell.Target
  170. )
  171. Grab.Key:Remove()
  172. Grab.Key = nil
  173. end
  174. end
  175. end
  176. Shell.Target = nil
  177.  
  178. --now a doublekey
  179.  
  180. elseif Shell.Target.State == BeggarState.PAYPRICE and Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_KEY, KeySubType.KEY_DOUBLEPACK, Shell.Target.Position, 0, Shell.Target) then
  181. local numberKeys = Isaac:CountEntities(Shell.Target, EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_KEY, KeySubType.KEY_DOUBLEPACK)
  182. local shellEntities = Isaac.FindInRadius(Shell.Target.Position, 50, EntityPartition.PICKUP)
  183. for n = 1, numberKeys do
  184. for d, pickup in pairs(shellEntities) do
  185. if pickup.Variant == PickupVariant.PICKUP_KEY
  186. and pickup.Subtype == KeySubType.KEY_DOUBLEPACK then
  187.  
  188. --if the game finds a doublekey, then it will replace it with a Pill
  189.  
  190.  
  191. Grab.KEY = pickup
  192. Isaac.Spawn(
  193. EntityType.ENTITY_PICKUP,
  194. PickupVariant.PICKUP_PILL,
  195. Grab.Key.Position,
  196. Grab.Key.Velocity,
  197. Shell.Target
  198. )
  199. Grab.Key:Remove()
  200. Grab.Key = nil
  201. end
  202. end
  203. end
  204. Shell.Target = nil
  205.  
  206. --now a bomb
  207.  
  208.  
  209. elseif Shell.Target.State == BeggarState.PAYPRICE and Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_BOMB, BombSubType.BOMB_NORMAL, Shell.Target.Position, 0, Shell.Target) then
  210. local numberBombs = Isaac:CountEntities(Shell.Target, EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_BOMB, BombSubType.BOMB_NORMAL)
  211. local shellEntities = Isaac.FindInRadius(Shell.Target.Position, 50, EntityPartition.PICKUP)
  212. for o = 1, numberBombs do
  213. for e, pickup in pairs(shellEntities) do
  214. if pickup.Variant == PickupVariant.PICKUP_BOMB
  215. and pickup.Subtype == BombSubType.BOMB_NORMAL then
  216.  
  217. --if the game finds a bomb, then it will replace it with a random rune
  218.  
  219. Grab.Bomb = pickup
  220. local rng = player:GetCollectibleRNG(CollectibleType.COLLECTIBLE_TOY_SKULL)
  221. local roll = rng:RandomInit(100)
  222. if roll < 10 then
  223. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_CARD, CARD_RUNE_HAGALAZ, Grab.Bomb.Position, Grab.Bomb.Velocity, Shell.Target)
  224. esleif roll < 20 then
  225. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_CARD, CARD_RUNE_JERA, Grab.Bomb.Position, Grab.Bomb.Velocity, Shell.Target)
  226. elseif roll < 30 then
  227. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_CARD, CARD_RUNE_EHWAZ, Grab.Bomb.Position, Grab.Bomb.Velocity, Shell.Target)
  228. elseif roll < 40 then
  229. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_CARD, CARD_RUNE_DAGAZ, Grab.Bomb.Position, Grab.Bomb.Velocity, Shell.Target)
  230. elseif roll < 50 then
  231. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_CARD, CARD_RUNE_ANSUZ, Grab.Bomb.Position, Grab.Bomb.Velocity, Shell.Target)
  232. elseif roll < 60 then
  233. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_CARD, CARD_RUNE_PERTHRO, Grab.Bomb.Position, Grab.Bomb.Velocity, Shell.Target)
  234. esleif roll < 70 then
  235. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_CARD, CARD_RUNE_BERKANO, Grab.Bomb.Position, Grab.Bomb.Velocity, Shell.Target)
  236. elseif roll < 80 then
  237. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_CARD, CARD_RUNE_ALGIZ, Grab.Bomb.Position, Grab.Bomb.Velocity, Shell.Target)
  238. elseif roll < 90 then
  239. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_CARD, CARD_RUNE_BLANK, Grab.Bomb.Position, Grab.Bomb.Velocity, Shell.Target)
  240. else Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_CARD, CARD_RUNE_BLACK, Grab.Bomb.Position, Grab.Bomb.Velocity, Shell.Target)
  241. end
  242. Grab.Bomb:Remove()
  243. Grab.Bomb = nil
  244. end
  245. end
  246. end
  247. Shell.Target = nil
  248.  
  249.  
  250.  
  251. --now a doublebomb
  252.  
  253. elseif Shell.Target.State == BeggarState.PAYPRICE and Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_BOMB, BombSubType.BOMB_DOUBLEPACK, Shell.Target.Position, 0, Shell.Target) then
  254. local numberBombs = Isaac:CountEntities(Shell.Target, EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_BOMB, BombSubType.BOMB_DOUBLEPACK)
  255. local shellEntities = Isaac.FindInRadius(Shell.Target.Position, 50, EntityPartition.PICKUP)
  256. for p = 1, numberBombs do
  257. for f, pickup in pairs(shellEntities) do
  258. if pickup.Variant == PickupVariant.PICKUP_BOMB
  259. and pickup.Subtype == BombSubType.BOMB_DOUBLPACK then
  260.  
  261. --if the game finds a doublebomb, then it will replace it with a random rune
  262.  
  263. Grab.Bomb = pickup
  264. local rng = player:GetCollectibleRNG(CollectibleType.COLLECTIBLE_TOY_SKULL)
  265. local roll = rng:RandomInit(100)
  266. if roll < 10 then
  267. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_CARD, CARD_RUNE_HAGALAZ, Grab.Bomb.Position, Grab.Bomb.Velocity, Shell.Target)
  268. esleif roll < 20 then
  269. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_CARD, CARD_RUNE_JERA, Grab.Bomb.Position, Grab.Bomb.Velocity, Shell.Target)
  270. elseif roll < 30 then
  271. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_CARD, CARD_RUNE_EHWAZ, Grab.Bomb.Position, Grab.Bomb.Velocity, Shell.Target)
  272. elseif roll < 40 then
  273. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_CARD, CARD_RUNE_DAGAZ, Grab.Bomb.Position, Grab.Bomb.Velocity, Shell.Target)
  274. elseif roll < 50 then
  275. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_CARD, CARD_RUNE_ANSUZ, Grab.Bomb.Position, Grab.Bomb.Velocity, Shell.Target)
  276. elseif roll < 60 then
  277. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_CARD, CARD_RUNE_PERTHRO, Grab.Bomb.Position, Grab.Bomb.Velocity, Shell.Target)
  278. esleif roll < 70 then
  279. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_CARD, CARD_RUNE_BERKANO, Grab.Bomb.Position, Grab.Bomb.Velocity, Shell.Target)
  280. elseif roll < 80 then
  281. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_CARD, CARD_RUNE_ALGIZ, Grab.Bomb.Position, Grab.Bomb.Velocity, Shell.Target)
  282. elseif roll < 90 then
  283. Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_CARD, CARD_RUNE_BLANK, Grab.Bomb.Position, Grab.Bomb.Velocity, Shell.Target)
  284. else Isaac.Spawn(EntityType.ENTITY_PICKUP, PickupVariant.PICKUP_CARD, CARD_RUNE_BLACK, Grab.Bomb.Position, Grab.Bomb.Velocity, Shell.Target)
  285. end
  286. Grab.Bomb:Remove()
  287. Grab.Bomb = nil
  288. end
  289. end
  290. end
  291. Shell.Target = nil
  292. end
  293. end
  294. end
  295. ToySkull:AddCallback(ModCallbacks.MC_NPC_UPDATE, ToySkull.onPayout, EntityType.ENTITY_SLOT)
Advertisement
Add Comment
Please, Sign In to add comment