Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- runningTimerSpeed = 3
- --Game-specific RAM addresses
- RAM = {
- words = {
- hour = 0x7e09e0,
- min = 0x7e09de,
- sec = 0x7e09dc,
- mil = 0x7e09da,
- missiles = 0x7e09c8,
- superMissiles = 0x7e09cc,
- powerBombs = 0x7e09d0,
- energyTanks = 0x7e09c4,
- reserveTanks = 0x7e09d4,
- items = 0x7e09a4,
- weapons = 0x7e09a8,
- health = 0x7e09c2,
- reserve = 0x7e09d6,
- roomNumber = 0x7e079c,
- enemyHealth1 = 0x7e0f8c,
- enemyHealth2 = 0x7e0fcc
- },
- bytes = {
- finalBossState = 0x7e0e4b,
- runningAnimation = 0x7e0aca,
- items1 = 0x7ed870,
- items2 = 0x7ed871,
- items3 = 0x7ed872,
- items4 = 0x7ed873,
- items5 = 0x7ed874,
- items6 = 0x7ed875,
- items7 = 0x7ed876,
- items8 = 0x7ed877,
- items9 = 0x7ed878,
- items10 = 0x7ed879,
- items11 = 0x7ed87a,
- items12 = 0x7ed880,
- items13 = 0x7ed881,
- items14 = 0x7ed882,
- items15 = 0x7ed883,
- beamCharge = 0x7e0dc2
- }
- }
- --Locations to output text
- output = {
- x = 0,
- y = 210,
- yOffset = 0,
- boxX = 0,
- boxY = 0
- }
- showOptions = {
- time = true,
- pct = true,
- bossHealth = true,
- shortCharge = true,
- beamCharge = true,
- forgotItems = false,
- forgotMode = 0
- }
- whiteBox = false
- function OutputTime(outOffset)
- --set in-game time
- local hour = memory.readword(RAM.words.hour)
- local minute = memory.readword(RAM.words.min)
- local sec = memory.readword(RAM.words.sec)
- local mil = math.floor(memory.readword(RAM.words.mil) * 100 / 60)
- gui.text(output.x, output.y - output.yOffset, "(T) Time: " .. hour .. ":" .. string.format("%02d",minute) .. ":" .. string.format("%02d",sec) .. "." .. string.format("%02d",mil))
- output.yOffset = output.yOffset + 10
- end
- function OutputPct(outOffset)
- local missiles = math.floor(memory.readbyte(RAM.words.missiles) / 5)
- local superMissiles = math.floor(memory.readbyte(RAM.words.superMissiles) / 5)
- local powerBombs = math.floor(memory.readbyte(RAM.words.powerBombs) / 5)
- local energyTanks = math.floor((memory.readword(RAM.words.energyTanks) - 99) / 100)
- local reserveTanks = math.floor(memory.readword(RAM.words.reserveTanks) / 100)
- local items = memory.readword(RAM.words.items)
- local variaSuit = items % 2
- local springBall = math.floor((items % 4) / 2)
- local morphBall = math.floor((items % 8) / 4)
- local screwAttack = math.floor((items % 16) / 8)
- local gravitySuit = math.floor((items % 64) / 32)
- local hiJumpBoots = math.floor((items % 512) / 256)
- local spaceJump = math.floor((items % 1024) / 512)
- local bomb = math.floor((items % 8192) / 4096)
- local speedBooster = math.floor((items % 16384) / 8192)
- local grappleBeam = math.floor((items % 32768) / 16384)
- local xRayScope = math.floor(items / 32768)
- local weapons = memory.readword(RAM.words.weapons)
- local waveBeam = weapons % 2
- local iceBeam = math.floor((weapons % 4) / 2)
- local spazerBeam = math.floor((weapons % 8) / 4)
- local plasmaBeam = math.floor((weapons % 16) / 8)
- local chargeBeam = math.floor((weapons % 8192) / 4096)
- local pct = missiles + superMissiles + powerBombs + energyTanks + reserveTanks + variaSuit + springBall + morphBall + screwAttack + gravitySuit + hiJumpBoots + spaceJump + bomb + speedBooster + grappleBeam + xRayScope + waveBeam + iceBeam + spazerBeam + plasmaBeam + chargeBeam
- gui.text(output.x, output.y - output.yOffset, "(P) Pct: " .. pct .. "%")
- output.yOffset = output.yOffset + 10
- end
- function OutputBossHealth()
- local roomNumber = memory.readword(RAM.words.roomNumber)
- local bossRoom = false
- local finalBoss = false
- local maxHealth = 0
- local boxX = output.x + 90
- local boxY = output.y - output.yOffset - 2
- if roomNumber == 13017 then --Botwoon
- bossRoom = true
- maxHealth = 3000
- end
- if roomNumber == 5528 then --Chozo
- bossRoom = true
- maxHealth = 800
- end
- if roomNumber == 2729 then --Crocomire
- bossRoom = true
- end
- if roomNumber == 14298 then --Draygon
- bossRoom = true
- maxHealth = 6000
- end
- if roomNumber == 14258 then --Golden Torizo
- bossRoom = true
- maxHealth = 13500
- end
- if roomNumber == 12197 then --Kraid
- bossRoom = true
- maxHealth = 1000
- end
- if roomNumber == 2781 then --Mother Brain
- finalBoss = true
- local finalBossState = memory.readbyte(RAM.bytes.finalBossState)
- if finalBossState == 3 then
- maxHealth = 3000
- elseif finalBossState == 1 then
- maxHealth = 18000
- elseif finalBossState == 0 then
- maxHealth = 36000
- end
- end
- if roomNumber == 2765 then --Phantoon
- bossRoom = true
- maxHealth = 2500
- end
- if roomNumber == 1504 then --Ridley (Ceres)
- bossRoom = true
- end
- if roomNumber == 15027 then --Ridley
- bossRoom = true
- maxHealth = 18000
- end
- if roomNumber == 2973 then --Spore Spawn
- bossRoom = true
- maxHealth = 960
- end
- if bossRoom then
- local bossHealth = memory.readword(RAM.words.enemyHealth1)
- local bossPct = 100
- local boxPct = 100
- if bossHealth == 32767 then
- gui.text(output.x, output.y - output.yOffset, "(H) Boss Health: Infinite")
- else
- if maxHealth ~= 0 then
- bossPct = math.floor(bossHealth / maxHealth * 100)
- boxPct = math.floor(bossHealth / maxHealth * 100)
- end
- gui.box(boxX, boxY, boxX + 100, boxY + 10, "#00000080")
- if bossHealth > 0 then
- gui.box(boxX, boxY, boxX + boxPct, boxY + 10, "#80000080")
- end
- gui.text(output.x, output.y - output.yOffset, "(H) Boss Health: " .. bossHealth)
- gui.text(boxX + 2, boxY+ 2, bossPct .. "%")
- end
- elseif finalBoss then
- local bossHealth = memory.readword(RAM.words.enemyHealth2)
- if maxHealth ~= 0 then
- bossPct = math.floor(bossHealth / maxHealth * 100)
- boxPct = math.floor(bossHealth / maxHealth * 100)
- end
- gui.box(boxX, boxY, boxX + 100, boxY + 10, "#00000080")
- if bossHealth > 0 then
- gui.box(boxX, boxY, boxX + boxPct, boxY + 10, "#80000080")
- end
- gui.text(output.x, output.y - output.yOffset, "(H) Boss Health: " .. bossHealth)
- gui.text(boxX + 2, boxY+ 2, bossPct .. "%")
- else
- gui.text(output.x, output.y - output.yOffset, "(H) Boss Health: --No Boss--")
- end
- output.yOffset = output.yOffset + 10
- end
- function OutputShortCharge()
- local runningAnimation = memory.readbyte(RAM.bytes.runningAnimation)
- local boxX = output.x + 95
- local boxY = output.y - output.yOffset
- gui.box(boxX + runningTimerSpeed * 9, boxY, boxX + runningTimerSpeed * 11, boxY + 6, "#00808080")
- if runningAnimation == 227 or runningAnimation == 245 then
- gui.box(boxX + runningTimerSpeed, boxY, boxX + runningTimerSpeed, boxY + 6, "#FFFFFF80")
- gui.box(boxX + runningTimerSpeed * 11, boxY, boxX + runningTimerSpeed * 11, boxY + 6, "#FFFFFF80")
- elseif runningAnimation == 228 or runningAnimation == 244 then
- gui.box(boxX + runningTimerSpeed * 2, boxY, boxX + runningTimerSpeed * 2, boxY + 6, "#FFFFFF80")
- gui.box(boxX + runningTimerSpeed * 12, boxY, boxX + runningTimerSpeed * 12, boxY + 6, "#FFFFFF80")
- elseif runningAnimation == 229 or runningAnimation == 243 then
- gui.box(boxX + runningTimerSpeed * 3, boxY, boxX + runningTimerSpeed * 3, boxY + 6, "#FFFFFF80")
- gui.box(boxX + runningTimerSpeed * 13, boxY, boxX + runningTimerSpeed * 13, boxY + 6, "#FFFFFF80")
- elseif runningAnimation == 230 or runningAnimation == 242 then
- gui.box(boxX + runningTimerSpeed * 4, boxY, boxX + runningTimerSpeed * 4, boxY + 6, "#FFFFFF80")
- gui.box(boxX + runningTimerSpeed * 14, boxY, boxX + runningTimerSpeed * 14, boxY + 6, "#FFFFFF80")
- elseif runningAnimation == 231 or runningAnimation == 241 then
- gui.box(boxX + runningTimerSpeed * 5, boxY, boxX + runningTimerSpeed * 5, boxY + 6, "#FFFFFF80")
- gui.box(boxX + runningTimerSpeed * 15, boxY, boxX + runningTimerSpeed * 15, boxY + 6, "#FFFFFF80")
- elseif runningAnimation == 232 or runningAnimation == 240 then
- gui.box(boxX + runningTimerSpeed * 6, boxY, boxX + runningTimerSpeed * 6, boxY + 6, "#FFFFFF80")
- gui.box(boxX + runningTimerSpeed * 16, boxY, boxX + runningTimerSpeed * 16, boxY + 6, "#FFFFFF80")
- elseif runningAnimation == 233 or runningAnimation == 239 then
- gui.box(boxX + runningTimerSpeed * 7, boxY, boxX + runningTimerSpeed * 7, boxY + 6, "#FFFFFF80")
- gui.box(boxX + runningTimerSpeed * 17, boxY, boxX + runningTimerSpeed * 17, boxY + 6, "#FFFFFF80")
- elseif runningAnimation == 234 or runningAnimation == 238 then
- gui.box(boxX + runningTimerSpeed * 8, boxY, boxX + runningTimerSpeed * 8, boxY + 6, "#FFFFFF80")
- gui.box(boxX + runningTimerSpeed * 18, boxY, boxX + runningTimerSpeed * 18, boxY + 6, "#FFFFFF80")
- elseif runningAnimation == 235 or runningAnimation == 237 then
- gui.box(boxX + runningTimerSpeed * 9, boxY, boxX + runningTimerSpeed * 9, boxY + 6, "#FFFFFF80")
- gui.box(boxX + runningTimerSpeed * 19, boxY, boxX + runningTimerSpeed * 19, boxY + 6, "#FFFFFF80")
- elseif runningAnimation == 236 or runningAnimation == 246 then
- gui.box(boxX + runningTimerSpeed * 10, boxY, boxX + runningTimerSpeed * 10, boxY + 6, "#FFFFFF80")
- else
- gui.box(boxX, boxY, boxX, boxY + 6, "#FFFFFF80")
- gui.box(boxX + runningTimerSpeed * 10, boxY, boxX + runningTimerSpeed * 10, boxY + 6, "#FFFFFF80")
- gui.box(boxX + runningTimerSpeed * 20, boxY, boxX + runningTimerSpeed * 20, boxY + 6, "#FFFFFF80")
- end
- gui.text(output.x, output.y - output.yOffset, "(S) Short Charge Timer:")
- output.yOffset = output.yOffset + 10
- end
- function OutputBeamCharge()
- local boxX = output.x + 90
- local boxY = output.y - output.yOffset - 2
- local beamCharge = math.min(memory.readbyte(RAM.bytes.beamCharge), 60)
- gui.box(boxX, boxY, boxX + 60, boxY + 10, "#00000080")
- if beamCharge > 0 then
- if beamCharge < 60 or not whiteBox then
- gui.box(boxX, boxY, boxX + beamCharge, boxY + 10, "#80800080")
- whiteBox = true
- else
- gui.box(boxX, boxY, boxX + beamCharge, boxY + 10, "#ffffff80")
- whiteBox = false
- end
- end
- gui.text(output.x, output.y - output.yOffset, "(B) Beam Charge: " .. beamCharge)
- output.yOffset = output.yOffset + 10
- end
- function ContainsBit(number, bit)
- return math.floor((number % (bit * 2)) / bit) == 1
- end
- function values(t)
- local i = 0
- return function() i = i + 1; return t[i] end
- end
- function GetCrateriaItems()
- local retVal = {}
- local items1 = memory.readbyte(RAM.bytes.items1)
- local items2 = memory.readbyte(RAM.bytes.items2)
- local i = 1
- if not ContainsBit(items1,128) then
- retVal[i] = "Bomb"
- i = i + 1
- end
- if not ContainsBit(items1,64) then
- retVal[i] = "Missile (Crateria bottom)"
- i = i + 1
- end
- if not ContainsBit(items1,32) then
- retVal[i] = "Energy Tank (Crateria gauntlet)"
- i = i + 1
- end
- if not ContainsBit(items1,16) then
- retVal[i] = "Missile (Crateria moat)"
- i = i + 1
- end
- if not ContainsBit(items1,8) then
- retVal[i] = "Missile (outside Wrecked Ship middle)"
- i = i + 1
- end
- if not ContainsBit(items1,4) then
- retVal[i] = "Missile (outside Wrecked Ship top)"
- i = i + 1
- end
- if not ContainsBit(items1,2) then
- retVal[i] = "Missile (outside Wrecked Ship bottom)"
- i = i + 1
- end
- if not ContainsBit(items1,1) then
- retVal[i] = "Power Bomb (Crateria surface)"
- i = i + 1
- end
- if not ContainsBit(items2,16) then
- retVal[i] = "Missile (Crateria middle)"
- i = i + 1
- end
- if not ContainsBit(items2,8) then
- retVal[i] = "Super Missile (Crateria middle)"
- i = i + 1
- end
- if not ContainsBit(items2,4) then
- retVal[i] = "Missile (Crateria gauntlet left)"
- i = i + 1
- end
- if not ContainsBit(items2,2) then
- retVal[i] = "Missile (Crateria guantlet right)"
- i = i + 1
- end
- return retVal
- end
- function GetBrinstarItems()
- local retVal = {}
- local items2 = memory.readbyte(RAM.bytes.items2)
- local items3 = memory.readbyte(RAM.bytes.items3)
- local items4 = memory.readbyte(RAM.bytes.items4)
- local items5 = memory.readbyte(RAM.bytes.items5)
- local items6 = memory.readbyte(RAM.bytes.items6)
- local items7 = memory.readbyte(RAM.bytes.items7)
- local i = 1
- if not ContainsBit(items2,128) then
- retVal[i] = "Missile (green Brinstar below super missile) "
- i = i + 1
- end
- if not ContainsBit(items2,64) then
- retVal[i] = "Super Missile (pink Brinstar)"
- i = i + 1
- end
- if not ContainsBit(items2,32) then
- retVal[i] = "Power Bomb (green Brinstar bottom)"
- i = i + 1
- end
- if not ContainsBit(items2,1) then
- retVal[i] = "Energy Tank (tunnel to Brinstar)"
- i = i + 1
- end
- if not ContainsBit(items3,128) then
- retVal[i] = "Charge Beam "
- i = i + 1
- end
- if not ContainsBit(items3,64) then
- retVal[i] = "Missile (pink Brinstar bottom)"
- i = i + 1
- end
- if not ContainsBit(items3,32) then
- retVal[i] = "Missile (pink Brinstar top)"
- i = i + 1
- end
- if not ContainsBit(items3,8) then
- retVal[i] = "Missile (green Brinstar behind reserve tank) "
- i = i + 1
- end
- if not ContainsBit(items3,4) then
- retVal[i] = "Missile (green Brinstar behind missile)"
- i = i + 1
- end
- if not ContainsBit(items3,2) then
- retVal[i] = "Reserve Tank (green Brinstar)"
- i = i + 1
- end
- if not ContainsBit(items3,1) then
- retVal[i] = "Super Missile (green Brinstar)"
- i = i + 1
- end
- if not ContainsBit(items4,128) then
- retVal[i] = "Super Missile (green Brinstar bottom)"
- i = i + 1
- end
- if not ContainsBit(items4,64) then
- retVal[i] = "Energy Tank (green Brinstar bottom)"
- i = i + 1
- end
- if not ContainsBit(items4,32) then
- retVal[i] = "Energy Tank (blue Brinstar)"
- i = i + 1
- end
- if not ContainsBit(items4,16) then
- retVal[i] = "Missile (blue Brinstar middle)"
- i = i + 1
- end
- if not ContainsBit(items4,8) then
- retVal[i] = "Power Bomb (blue Brinstar)"
- i = i + 1
- end
- if not ContainsBit(items4,4) then
- retVal[i] = "Morphing Ball"
- i = i + 1
- end
- if not ContainsBit(items4,2) then
- retVal[i] = "Missile (green Brinstar pipe)"
- i = i + 1
- end
- if not ContainsBit(items4,1) then
- retVal[i] = "Power Bomb (pink Brinstar)"
- i = i + 1
- end
- if not ContainsBit(items5,128) then
- retVal[i] = "Power Bomb (red Brinstar sidehopper room)"
- i = i + 1
- end
- if not ContainsBit(items5,64) then
- retVal[i] = "X-Ray Scope"
- i = i + 1
- end
- if not ContainsBit(items5,32) then
- retVal[i] = "Missile (blue Brinstar behind missile)"
- i = i + 1
- end
- if not ContainsBit(items5,16) then
- retVal[i] = "Missile (blue Brinstar top)"
- i = i + 1
- end
- if not ContainsBit(items5,8) then
- retVal[i] = "Energy Tank (pink Brinstar top)"
- i = i + 1
- end
- if not ContainsBit(items5,4) then
- retVal[i] = "Missile (blue Brinstar bottom) "
- i = i + 1
- end
- if not ContainsBit(items5,2) then
- retVal[i] = "Energy Tank (pink Brinstar bottom)"
- i = i + 1
- end
- if not ContainsBit(items6,16) then
- retVal[i] = "Missile (Kraid)"
- i = i + 1
- end
- if not ContainsBit(items6,8) then
- retVal[i] = "Energy Tank (Kraid)"
- i = i + 1
- end
- if not ContainsBit(items6,4) then
- retVal[i] = "Spazer"
- i = i + 1
- end
- if not ContainsBit(items6,2) then
- retVal[i] = "Missile (red Brinstar spike room)"
- i = i + 1
- end
- if not ContainsBit(items6,1) then
- retVal[i] = "Power Bomb (red Brinstar spike room)"
- i = i + 1
- end
- if not ContainsBit(items7,1) then
- retVal[i] = "Varia Suit"
- i = i + 1
- end
- return retVal
- end
- function GetNorfairItems()
- local retVal = {}
- local items7 = memory.readbyte(RAM.bytes.items7)
- local items8 = memory.readbyte(RAM.bytes.items8)
- local items9 = memory.readbyte(RAM.bytes.items9)
- local items10 = memory.readbyte(RAM.bytes.items10)
- local items11 = memory.readbyte(RAM.bytes.items11)
- local i = 1
- if not ContainsBit(items7,128) then
- retVal[i] = "Missile (Hi-Jump Boots)"
- i = i + 1
- end
- if not ContainsBit(items7,64) then
- retVal[i] = "Missile (above Crocomire)"
- i = i + 1
- end
- if not ContainsBit(items7,32) then
- retVal[i] = "Hi-Jump Boots"
- i = i + 1
- end
- if not ContainsBit(items7,16) then
- retVal[i] = "Energy Tank (Crocomire)"
- i = i + 1
- end
- if not ContainsBit(items7,8) then
- retVal[i] = "Missile (below Ice Beam)"
- i = i + 1
- end
- if not ContainsBit(items7,4) then
- retVal[i] = "Ice Beam "
- i = i + 1
- end
- if not ContainsBit(items7,2) then
- retVal[i] = "Missile (lava room)"
- i = i + 1
- end
- if not ContainsBit(items8,128) then
- retVal[i] = "Missile (bubble Norfair green door)"
- i = i + 1
- end
- if not ContainsBit(items8,64) then
- retVal[i] = "Missile (Norfair reserve tank)"
- i = i + 1
- end
- if not ContainsBit(items8,32) then
- retVal[i] = "Reserve Tank (Norfair)"
- i = i + 1
- end
- if not ContainsBit(items8,16) then
- retVal[i] = "Grapple Beam"
- i = i + 1
- end
- if not ContainsBit(items8,8) then
- retVal[i] = "Missile (Grapple Beam)"
- i = i + 1
- end
- if not ContainsBit(items8,4) then
- retVal[i] = "Missile (below Crocomire)"
- i = i + 1
- end
- if not ContainsBit(items8,2) then
- retVal[i] = "Power Bomb (Crocomire)"
- i = i + 1
- end
- if not ContainsBit(items8,1) then
- retVal[i] = "Energy Tank (Hi-Jump Boots)"
- i = i + 1
- end
- if not ContainsBit(items9,128) then
- retVal[i] = "Super Missile (Gold Torizo)"
- i = i + 1
- end
- if not ContainsBit(items9,64) then
- retVal[i] = "Missile (Gold Torizo)"
- i = i + 1
- end
- if not ContainsBit(items9,16) then
- retVal[i] = "Wave Beam"
- i = i + 1
- end
- if not ContainsBit(items9,8) then
- retVal[i] = "Missile (Wave Beam)"
- i = i + 1
- end
- if not ContainsBit(items9,4) then
- retVal[i] = "Speed Booster "
- i = i + 1
- end
- if not ContainsBit(items9,2) then
- retVal[i] = "Missile (Speed Booster)"
- i = i + 1
- end
- if not ContainsBit(items9,1) then
- retVal[i] = "Missile (bubble Norfair)"
- i = i + 1
- end
- if not ContainsBit(items10,128) then
- retVal[i] = "Screw Attack"
- i = i + 1
- end
- if not ContainsBit(items10,64) then
- retVal[i] = "Energy Tank (Ridley)"
- i = i + 1
- end
- if not ContainsBit(items10,32) then
- retVal[i] = "Missile (lower Norfair near Wave Beam)"
- i = i + 1
- end
- if not ContainsBit(items10,16) then
- retVal[i] = "Power Bomb (above Ridley)"
- i = i + 1
- end
- if not ContainsBit(items10,8) then
- retVal[i] = "Power Bomb (lower Norfair above fire flea room)"
- i = i + 1
- end
- if not ContainsBit(items10,4) then
- retVal[i] = "Missile (lower Norfair above fire flea room)"
- i = i + 1
- end
- if not ContainsBit(items10,2) then
- retVal[i] = "Missile (Mickey Mouse room)"
- i = i + 1
- end
- if not ContainsBit(items11,1) then
- retVal[i] = "Energy Tank (lower Norfair fire flea room)"
- i = i + 1
- end
- return retVal
- end
- function GetWreckedShipItems()
- local retVal = {}
- local items12 = memory.readbyte(RAM.bytes.items12)
- local i = 1
- if not ContainsBit(items12,128) then
- retVal[i] = "Gravity Suit"
- i = i + 1
- end
- if not ContainsBit(items12,64) then
- retVal[i] = "Super Missile (Wrecked Ship right)"
- i = i + 1
- end
- if not ContainsBit(items12,32) then
- retVal[i] = "Super Missile (Wrecked Ship left)"
- i = i + 1
- end
- if not ContainsBit(items12,16) then
- retVal[i] = "Energy Tank (Wrecked Ship)"
- i = i + 1
- end
- if not ContainsBit(items12,8) then
- retVal[i] = "Missile (Wrecked Ship top)"
- i = i + 1
- end
- if not ContainsBit(items12,4) then
- retVal[i] = "Missile (Gravity Suit)"
- i = i + 1
- end
- if not ContainsBit(items12,2) then
- retVal[i] = "Reserve Tank (Wrecked Ship)"
- i = i + 1
- end
- if not ContainsBit(items12,1) then
- retVal[i] = "Missile (Wrecked Ship middle)"
- i = i + 1
- end
- return retVal
- end
- function GetMaridiaItems()
- local retVal = {}
- local items13 = memory.readbyte(RAM.bytes.items13)
- local items14 = memory.readbyte(RAM.bytes.items14)
- local items15 = memory.readbyte(RAM.bytes.items15)
- local i = 1
- if not ContainsBit(items13,128) then
- retVal[i] = "Plasma Beam"
- i = i + 1
- end
- if not ContainsBit(items13,64) then
- retVal[i] = "Missile (yellow Maridia false wall)"
- i = i + 1
- end
- if not ContainsBit(items13,32) then
- retVal[i] = "Missile (yellow Maridia super missile)"
- i = i + 1
- end
- if not ContainsBit(items13,16) then
- retVal[i] = "Super Missile (yellow Maridia)"
- i = i + 1
- end
- if not ContainsBit(items13,8) then
- retVal[i] = "Missile (green Maridia turtle room)"
- i = i + 1
- end
- if not ContainsBit(items13,4) then
- retVal[i] = "Energy Tank (green Maridia)"
- i = i + 1
- end
- if not ContainsBit(items13,2) then
- retVal[i] = "Super Missile (green Maridia)"
- i = i + 1
- end
- if not ContainsBit(items13,1) then
- retVal[i] = "Missile (green Maridia Shinespark)"
- i = i + 1
- end
- if not ContainsBit(items14,128) then
- retVal[i] = "Missile (Draygon)"
- i = i + 1
- end
- if not ContainsBit(items14,64) then
- retVal[i] = "Spring Ball"
- i = i + 1
- end
- if not ContainsBit(items14,32) then
- retVal[i] = "Super Missile (pink Maridia)"
- i = i + 1
- end
- if not ContainsBit(items14,16) then
- retVal[i] = "Missile (pink Maridia)"
- i = i + 1
- end
- if not ContainsBit(items14,8) then
- retVal[i] = "Power Bomb (right Maridia sand pit room)"
- i = i + 1
- end
- if not ContainsBit(items14,4) then
- retVal[i] = "Missile (right Maridia sand pit room)"
- i = i + 1
- end
- if not ContainsBit(items14,2) then
- retVal[i] = "Reserve Tank (Maridia)"
- i = i + 1
- end
- if not ContainsBit(items14,1) then
- retVal[i] = "Missile (left Maridia sand pit room)"
- i = i + 1
- end
- if not ContainsBit(items15,4) then
- retVal[i] = "Space Jump"
- i = i + 1
- end
- if not ContainsBit(items15,1) then
- retVal[i] = "Energy tank (Botwoon)"
- i = i + 1
- end
- return retVal
- end
- function OutputForgotItems()
- if not showOptions.forgotItems then
- gui.text(output.x + 188, output.y, "(F) Forgot Items?")
- else
- gui.text(output.x + 188, output.y - 60, "(C) Crateria")
- gui.text(output.x + 188, output.y - 50, "(B) Brinstar")
- gui.text(output.x + 188, output.y - 40, "(N) Norfair")
- gui.text(output.x + 188, output.y - 30, "(W) Wrecked Ship")
- gui.text(output.x + 188, output.y - 20, "(M) Maridia")
- gui.text(output.x + 188, output.y, "(F) Found Them!")
- if showOptions.forgotMode == 0 then
- local crateriaItems = GetCrateriaItems()
- OutputList(0, 0, crateriaItems, "Crateria\n-----\n")
- end
- if showOptions.forgotMode == 1 then
- local brinstarItems = GetBrinstarItems()
- OutputList(0, 0, brinstarItems, "Brinstar\n-----\n")
- end
- if showOptions.forgotMode == 2 then
- local norfairItems = GetNorfairItems()
- OutputList(0, 0, norfairItems, "Norfair\n-----\n")
- end
- if showOptions.forgotMode == 3 then
- local wreckedShipItems = GetWreckedShipItems()
- OutputList(0, 0, wreckedShipItems, "Wrecked Ship\n-----\n")
- end
- if showOptions.forgotMode == 4 then
- local maridiaItems = GetMaridiaItems()
- OutputList(0, 0, maridiaItems, "Maridia\n-----\n")
- end
- end
- end
- function OutputList(xPos, yPos, list, prefix)
- local output = prefix
- local firstPass = true
- for item in values(list) do
- if not firstPass then
- output = output .. "\n"
- end
- output = output .. item
- firstPass = false
- end
- gui.text(xPos, yPos, output)
- end
- --Outputs relevant game information
- function OutputGameInfo()
- output.yOffset = 0
- OutputForgotItems()
- if not showOptions.forgotItems then
- if showOptions.time then
- OutputTime()
- end
- if showOptions.pct then
- OutputPct()
- end
- if showOptions.bossHealth then
- OutputBossHealth()
- end
- if showOptions.shortCharge then
- OutputShortCharge()
- end
- if showOptions.beamCharge then
- OutputBeamCharge()
- end
- end
- end
- --Handles all the hotkey stuff
- function HandleKeys()
- keys = input.get()
- if press('F') then
- showOptions.forgotItems = not showOptions.forgotItems
- end
- if not showOptions.forgotItems then
- if press('T') then
- showOptions.time = not showOptions.time
- end
- if press('P') then
- showOptions.pct = not showOptions.pct
- end
- if press('H') then
- showOptions.bossHealth = not showOptions.bossHealth
- end
- if press('S') then
- showOptions.shortCharge = not showOptions.shortCharge
- end
- if press('B') then
- showOptions.beamCharge = not showOptions.beamCharge
- end
- else
- if press('C') then
- showOptions.forgotMode = 0
- end
- if press('B') then
- showOptions.forgotMode = 1
- end
- if press('N') then
- showOptions.forgotMode = 2
- end
- if press('W') then
- showOptions.forgotMode = 3
- end
- if press('M') then
- showOptions.forgotMode = 4
- end
- end
- last_keys = keys
- end
- function press(button)
- if keys[button] and not last_keys[button] then
- return true
- end
- return false
- end
- while true do
- OutputGameInfo()
- HandleKeys()
- snes9x.frameadvance()
- end
Advertisement