Hi, I'm trying to use the very handy looking PX9 to compress a bunch of map data, so I can get all the levels I need in my cart - but I have a strange issue.
In my cart I'm storing compressed map data for my 'levels' at 0x2400 for level 1, 0x2600 for level 2, 0x2800 for level 3, etc. So each level is maximum 0x200 bytes long compressed.
The decompressed map for each level is no more than 9 rows, so I have the top of the map (0x2000 to 0x3fff) to store
the decompressed level.
That's all good, I can decompress level 1, show the map, decompress level 2, show that map, but if I then try and decompress level 1 again it doesn't work :/
I've made a simplified example cart that shows the problem. When it runs you see level 1 decompressed and displayed, hit X to cycle through levels. The first time around is fine, but the second time level 1 never gets displayed.
Does any of that make sense, what strangeness have I created?!
-- px9 comp'd map 1 at 0x2400 -- px9 comp'd map 2 at 0x2600 -- px9 comp'd map 3 at 0x2800 function _init() num=0 next_map() end function _draw() cls() map(0,0) print("this is map "..num,0,52) print("❎ for next map",0,60) end function _update() if btnp(❎) then next_map() end end function next_map() num+=1 if num==4 then num=1 end local adr=0x2200+num*0x0200 px9_mdecomp(0,0,adr,mget,mset) end -- px9 decompress, memory-only -- 273 tokens function px9_mdecomp ( ... } |
I figured it out, decompressing 0x2400 to 0x2000 was overwriting the compressed data at 0x2400, seems kinda obvious now! I just need to shift the compressed data up a tiny bit from 0x2400.
[Please log in to post a comment]