Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- SpriteReader = {}
- function SpriteReader:load(data)
- attr = {version = 0, numberOfSprites = 0, posByte = 1, data = data:read("*a")}
- return setmetatable(attr, {__index = self})
- end
- function SpriteReader:getRanges(byte, signed)
- local min, max = 0, 0
- for var = byte, 1, -1 do
- max = max +(2 ^ (8 * var))
- end
- if(signed)then
- min, max = max/2, -max/2
- end
- return min, not signed and (max - 1) or max
- end
- function SpriteReader:readBytes(byte, signed)
- local min, _ = self:getRanges(byte, signed)
- local value = self:nextByte()
- for var = 2, byte do
- value = value + (self:nextByte() ^ 2)
- end
- return value
- end
- function SpriteReader:nextByte()
- local byte = self.data:byte(self.posByte)
- self.posByte = self.posByte + 1
- return tonumber(byte)
- end
- function SpriteReader:getUint64()
- return self:readBytes(8, false)
- end
- function SpriteReader:getInt64()
- return self:readBytes(8, true)
- end
- function SpriteReader:getUint32()
- return self:readBytes(4, false)
- end
- function SpriteReader:getInt32()
- return self:readBytes(4, true)
- end
- function SpriteReader:getUint16()
- return self:readBytes(2, false)
- end
- function SpriteReader:getInt16()
- return self:readBytes(2, true)
- end
- function SpriteReader:getUint8()
- return self:readBytes(1, false)
- end
- function SpriteReader:getInt8()
- return self:readBytes(1, true)
- end
- function SpriteReader:closeData()
- return self.data:close()
- end
- local file = io.open("./ka.spr", "rb")
- reader = SpriteReader:load(file)
- reader.version = reader:getUint32()
- reader.numberOfSprites = reader:getUint16()
- io.write("Version: ",reader.version,"\nNumber Of Sprites: ", reader.numberOfSprites)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement