Requires ShipPosition.txt to be loaded in the same directory.
Helper Script for DisplayWaitTimes.lua.
-- This is a helper script that displays the values you need to know
-- in order to run DisplayWaitTimes.lua
local TextY = client.getwindowsize() * 0x10
local ScreenAddress, YAddress, XAddress, DirAddress = 0xC6EC, 0xC6ED, 0xC6EE, 0xC6EF
local PlaytimeLo = 0xC622 -- lowbyte of the ingame clock
local RoomAddress = 0xC62C -- first byte of the second part of the save file
local SaveFileLength = 0x269 -- half the length of the second part of the save file
local InventoryStart = 0xC688 -- = B-button
local InventoryLength = 8 -- half the length of the inventory
local table = {}
local list = {0xB6, 0xB7, 0xC6, 0xC7, 0xD6, 0xD7}
for i = 1, 6 do
table[list[i]] = {}
for Y = 0, 0xFF do
table[list[i]][Y] = {}
end
end
for line in io.lines("ShipPosition.txt") do
Frame, Screen, Y, X = tonumber(string.sub(line,1,4)), tonumber(string.sub(line,6,7),16), tonumber(string.sub(line,9,10),16), tonumber(string.sub(line,12,13),16)
table[Screen][Y][X] = Frame - 1
end
table[0xB6][0x38][0x48] = 1855 -- fix last entry
while true do
-- calculate checksum
local D,E = 0,0
for i = 0, SaveFileLength do
E = E + memory.readbyte(RoomAddress + 2*i)
D = D + memory.readbyte(RoomAddress + 2*i + 1)
end
-- subtract Pirate Ship
E = E - memory.readbyte(ScreenAddress) - memory.readbyte(XAddress)
D = D - memory.readbyte(YAddress) - memory.readbyte(DirAddress)
-- subtract inventory
for i = 0, InventoryLength do
E = E - memory.readbyte(InventoryStart + 2*i)
D = D - memory.readbyte(InventoryStart + 2*i + 1)
end
D = (D + math.floor(E / 0x100)) % 0x100
E = E % 0x100
local Screen, Y, X = memory.readbyte(ScreenAddress), memory.readbyte(YAddress), memory.readbyte(XAddress)
if ((table[Screen] or {}) [Y] or {}) [X] then -- sanity check so the script doesn't crash during resets
local Frame = table[Screen][Y][X] + memory.readbyte(PlaytimeLo)%2 --Ship only moves when PlaytimeLo is even
if Frame == 1856 then Frame = 0 end
gui.text(0, TextY , string.format("frame: %d", Frame))
gui.text(0, TextY + 0x10, string.format("odd : %02X", D))
gui.text(0, TextY + 0x20, string.format("even : %02X", E))
end
emu.frameadvance()
end