Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- * The itemrefund library refunds your powerups and mounts if you die in a level
- local itemrefund = {}
- SaveData.itemrefund = SaveData.itemrefund or {}
- local dead = false
- local function saveCharacterData(pl)
- local charIndex = pl.character
- SaveData.itemrefund[charIndex] = SaveData.itemrefund[charIndex] or {}
- local sd = SaveData.itemrefund[charIndex]
- sd.powerup = pl.powerup
- sd.reservePowerup = pl.reservePowerup
- sd.mount = pl.mount
- sd.mountColor = pl.mountColor
- sd.hp = player:mem(0x16, FIELD_WORD)
- end
- local function loadCharacterData(pl)
- local charIndex = pl.character
- local sd = SaveData.itemrefund[charIndex]
- if sd == nil then return end
- pl.powerup = sd.powerup or 1
- pl.reservePowerup = sd.reservePowerup or 0
- pl.mount = sd.mount or 0
- pl.mountColor = sd.mountColor or 0
- player:mem(0x16, FIELD_WORD, sd.hp or 1)
- end
- function itemrefund.onExitLevel()
- if not dead then
- for k,v in ipairs(Player.get()) do
- saveCharacterData(v)
- end
- end
- end
- function itemrefund.onCheckpoint(cp,p)
- for k,v in ipairs(Player.get()) do
- saveCharacterData(v)
- end
- end
- function itemrefund.onTick()
- if Level.winState() > 0 then return end
- local allDead = true
- for k,v in ipairs(Player.get()) do
- if v.deathTimer == 0 and not v:mem(0x13C, FIELD_BOOL) then
- allDead = false
- break
- end
- end
- if allDead then
- dead = true
- end
- end
- function itemrefund.onStart()
- for k,v in ipairs(Player.get()) do
- loadCharacterData(v)
- end
- end
- registerEvent(itemrefund, "onStart")
- if not isOverworld then
- registerEvent(itemrefund, "onTick")
- registerEvent(itemrefund, "onCheckpoint")
- registerEvent(itemrefund, "onExitLevel")
- end
- return itemrefund
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement