Update 7
Last night I drew blocks while catching up on MBMBaM.
I think pentominos can wait for when I have a spare week.
Here's some of the new blocks being tested. This also shows off a rearranged menu, with a Quit button and a placeholder logo.
The big sidebar and the black border around the whole thing are bothering me a little. I think the layout basically looks fine, but I was intending to use the black space for things which won't come together now. I was going to use the space at the top and bottom for level and room names, but I think they won't look good smushed between the puzzle and the edge of the window like that. The extra sidebar real estate was for talking to NPCs, but they won't be appearing in this game jam, so I might use that for level names or other tidbits.
So that was last night. Today was for working on save states, but I'm having one of those days where my brain is full of fluff, so I did some of the more fun creative work to begin with. I drafted a nicer logo:
This looks mostly fine, but the outlines between the N and E run together into one thick line which bothers me a lot. Also I think the ends of the C look a bit too chunky? I'll probably tweak this again later.
I also finished the music track for the game. It's six minutes long and quite low-key, which I hope means it can loop indefinitely without annoying the player. Here it is if you want to listen:
https://clyp.it/xkiekay3?token=18759554a1c1e733e6c7da91799e79c8
Having run out of ways to put it off, I started coding the save system. First I rearranged the big horrible arrays so that they find all the objects they need to store first, and then grab their data. This allowed me to split the data grabbing off into a saving function which the player can use at any time.
The load state function is largely just the save state function with the variables swapped around, so that instead of changing an array value to an object's position, it changes an object's position to an array value. I then point it to the Control logic which checks keys and doors, so that it can close doors which shouldn't be open anymore. I think there's some redundant code here from the sloppy way I cut up and rearrange the code, but screw it.
Finally, I attached this code to the buttons, and made a testing ground.
The result - after a quick tweak to update enemy sprites correctly when loading state - looks good!
I now have a system where the player can set their own checkpoint in a puzzle and rewind to it if things go bad. This is super nice to have for both the player, and for me testing puzzle ideas and elements (not that I'm going to add any more elements for now). I need to set player deaths to rewind to the last save state rather than just restart the room, and I need a proper victory state when the player reaches the gem, but other than this, I think I have a pretty good puzzle game engine ready to go!
With that, time to take a day off and forget how everything I've coded today works. More presentation work next time, I think!