Codefor i=1,256,3 do
--First 4 bits for spriteX and spriteY
if (i < 253) then
local yAdress = memory.readbyte(spritesPointerAddress+i)
local xAdress = memory.readbyte(spritesPointerAddress+i+1)
local spriteY = bit.lshift(bit.band(yAdress, 0x01), 8) + bit.band(yAdress, 0xF0)
local spriteX = bit.lshift(bit.band(yAdress, 0x02), 11) + bit.lshift(bit.band(xAdress, 0x0F), 8) + bit.band(xAdress, 0xF0)
local spriteNumber = memory.readbyte(spritesPointerAddress+i+2)
local spriteData = {["x"]=spriteX, ["y"]=spriteY, ["kind"]=spriteNumber,
["address"]=string.format(" $%4.x", spritesPointerAddress+i),["isSprite"]=true,}
table.insert(levelData.tileMap, spriteData)
end
end
Updated the code to this based on your pseudo code.
The values emitted makes more sense but when checking in Lunar Magic some sprites have XY coordinate far up in the sky were no sprite is ever present. I think its very close to being correct but something is still a bit off