This has been solved. you may still look at the non-working code and working code.
So for my Merge Chickens game, I have a limit of 64 chickens because there are only 64 save spaces, but when I try to make it so I can save more chickens all I get is:
here is my code:
--savebuk() and loadbuk()
function savebuk()
local d=0
for x=0,15 do--go thrugh all of
for y=0,15 do--the map tiles
local i=0
local s=0
if mget(x,y)>63 then
i=mget(x,y)
--if this tile is a chicken
--set i to the sprite number
end
if x+1<16 then
if mget(x+1,y)>63 then
s=mget(x+1,y)*1000
--if the tile next to the
--tile at x is not off the
--map and if the tile is a
--chicken set s to the tile
--times 1000
end
else
if mget(0,y)>63 then
s=mget(0,y)*1000
--if the tile next to the
--tile at x is off the map
--do the same thing but
--with zero
end
end
dset(d,i+s)
--save i+s here is an example
--i=109
--s=72
--s gets multiplied by 1000
--s=72000
--s+i=72109
--then save that is save spot
--d
d+=1
--on to the next save spot!
end
end
end
function loadbuk()
for d=0,63 do
--all commented lines is an
--example
local val=dget(d)
--val=72109
local s=flr(val/1000)
--s=72.109 rounded down
local s2=flr(val/1000)*1000
local i=val-s2
--i=72109-72000
--i=109
local x=flr(rnd(15))
local y=flr(rnd(15))
--find a random position
if mget(x,y)<64 then
mset(x,y,s)
--and if there is not a bird
--already there place s
--there
end
x=flr(rnd(15))
y=flr(rnd(15))
if mget(x,y)<64 then
mset(x,y,i)
end
--do the same thing with i
end
end |
This is the WORKING code
--savebuk() and loadbuk()
function savebuk()
for sp=64,127 do
local num=0
for x=0,15 do
for y=0,15 do
if mget(x,y)==sp then
num+=1
end
end
end
dset(sp-64,num)
end
end
function loadbuk()
for sp=64,128 do
local num=dget(sp-64)
for i=1,num do
x=flr(rnd(15))
y=flr(rnd(15))
if mget(x,y)<64 then
mset(x,y,sp)
end
end
end
end |
So your save function loops over every row and column on the map, generating some i and s numbers, and saving that to persistent memory. d is an index saying which memory slot you're saving to.
One issue is that no matter what your i and s are, you're always incrementing d, and setting memory. Even if nothing is there. So you're saving a bunch of empty tiles, then running out of room with dset.
So probably only increment d and save when you find something. I guess the location of the chickens doesn't matter, but when you load, your random x,y coordinates could overlap with another bird, so you could lose some that way.
Hopefully this helps. It's a bit hard to follow, because the variable names mean nothing, and there are no comments, explaining what's going on.
[Please log in to post a comment]



