Reading method:
-------------------
Load "dh1:amos/code/test/level0.dat", 16
Bank Code ROR.w 16, 5
Bank Code xor.w 16, $a55a
For Height=0 to 49
For Width=0 to 49
offset=Leek((Height*49+Width)*4+Start(16))
LEVELGETCARD$(Width, Height)=Peek$(12001+Start(16) + Offset)
LEVEL(Width, Height)=Peek(Start(16)+9604+(49*Height+Width))
Next Width
Next Height
Erase Bank 16
Save:
StringLength=0
For Height=0 to 49
For Width=0 to 49
LevelGetCard$(width, height)=LevelGetCard$(width,height)+Chr$(0)
StringLength=StringLength+Len(LevelGetCard$(width,height))
Next width
Next Height
Reserve as work bank 16, (StringLength+12001+3) And Not 3
Offset=12001
For Height=0 to 49
for Width=0 to 49
Poke$(start(16)+offset),VarPtr(LevelGetCard$(Width,Height))+2
Loke Start(16)+(49*Height+Width)*4,offset
offset=offset+Len(LevelGetCard$(Width,Height))
Poke start(16)+(49*height+width)+9604, level(width,height)
Next Width
Next Height
Bank Code xor.w 16, $a55a
Bank Code ROL.w 16, 5
save"dh1:amos/code/test/level0.dat",16
Erase bank 16
I changed the encryption commands to something that should fully reverse itself. It seems odd that the "Bank code mix.w" command doesn't have an inverse. I also chose bank 16 for you and encryption keys. Hopefully this should work.
Please credit me for my work if you release your game publicly. My name is Samuel D. Crow.