Repuzzle - a Pico-8 Coding Puzzle Game
Insert, replace, delete, and move characters to win over 22 levels, ranging from the simple to the tricky.
Explanation of the basic controls is provided in the game.
- The pico-8 manual and pico-8 wiki can be useful. (both for this game and in general)
- If you're stuck on one level, try another. The different "sections" each go roughly from easy to hard, with a lot of variance in-between.
- If you're really really stuck, the hints can help.
Full list of controls:
- Arrow keys to move between characters
- Ctrl + Arrow keys to move between words
- Page Up/Down to move between pages
- Home/End to move to start/end of line
- Ctrl + Home/End to move to start/end of code
- You can also scroll via Mouse Wheel and move to a character via left-click
- Tab to select the next editing mode
- Ctrl+1/2/3 to select insert/replace/move mode directly (can also use F1/F2/F3 in BBS only)
- Clicking on a mode with the mouse will select it as well
- Type to insert characters in insert mode
- Type to replace characters in replace mode
- Backspace/delete to delete characters in insert and replace modes
- Backspace/delete to mark characters for moving in move mode
- Type to move marked characters in move mode
- Shift + Backspace/delete to undo changes (in all modes)
- You can type lowercase, uppercase (with Shift), digits/punctuation, and line breaks (Enter)
- Ctrl + V to paste code from the clipboard (in insert mode only)
- Ctrl + Enter to run the code (you can also use Ctrl + B or 'run' in the pause menu)
- Escape to abort the run
- Upon error or abort, Tab (or Ctrl+1..6 or left-click) to browse the stack trace
- If the code did any drawing or printing, you'll also see a 'see output screen' option - browse to it via Tab(/etc) to see the output
- Ctrl + C to copy all code to the clipboard
- Escape to access the pause menu (run; restart level; back to menu; see hint)
Uses sprites from:
- Some non-english keyboard layouts currently don't work too well with the devkit keyboard in pico-8. Try switching to an english layout if you're having trouble with your own (or try reporting a pico8 bug)
- This uses the same Pico-8 interpreter as my Pico-8 REPL/Interpreter, available HERE
- Tweak levels 11 & 12 to avoid simple solution.
- Improve hints on levels 20 & 22
- Fix holding backspace key being unreliable on large levels.
- Added mouse support & paste support
This is a completely unique programming game that gets hard fast. I'm through to the third riddle in #10, but fairly certain you aren't supposed to do it with metatables, as I ran out of chars.
I enjoyed this a lot, but I do kind of wish there was mouse input instead of the keyboard only tab-modes, as well as mouse scroll wheel support. The BBS version has some issues with ctrl/pageup/pagedown navigation (which only works in fullscreen mode in Chrome, while ESC only works in windowed mode). I can accept that this is meant to be an old school interface though. The biggest issue is that Ctrl-R resets the cart, and I'm so used to that shortcut that I lost my code more than once! XD
this is definitely in my top 3 pico-8 games along with king and probably nemonic crypt. I haven't finished it yet and I don't expect to fully because I don't know lua, but level 5 is by far the most creative since the solution is pretty much right in your face if you think outside the box
@shy - pageup/pagedown works in chrome for me (you shouldn't hold control while doing it - that's a browser shortcut and indeed doesn't work)
Nothing I can do about ctrl+R resetting - that's a pico-8 shortcut. :(
Didn't consider mouse support before, maybe I'll add it.
EDIT: Added! Thanks for the suggestion.
Awesome, thank you for the update! The keyboard controls seemed to be working better for me today too, pico-8 was grabbing focus properly in the browser. It might have been my mistake with Ctrl+PgUp that broke things, because that seems to get the Ctrl key stuck when you click back to the game's tab, but I could have sworn Ctrl+End was also scrolling to the bottom of the BBS page yesterday. Anyway, everything in the interface works and feels much more intuitive for me now, so I appreciate the update a lot!
About Ctrl+R, the only possibility I can think of to fix that is to save the player edits as they're made, so an accidental reset can be reloaded to the same state (maybe via printh to a .p8l file every so often, then a dynamic #include to reload that source code when you enter the level, though that'll only work offline). I think that's probably more effort than it's worth though, and I didn't expect this issue to be fixed. Just wanted to joke about my programmer reflexes hurting me, haha.
I think I am becoming obsessed with this game even though I don't code LUA. I was rather pleased with myself that I have managed to solve a number of the graphical levels.
However I have been pulling my hair out over level 5 - "wall". I am sure its really obvious but can't make any progress. So can someone answer the following:
- Is the solution within the _draw() method ?
- Is the solution LUA specific or do I have a change of solving this with my knowledge of other programming languages?
- Since collide() is protected the solution is not to remove the wall?
- Is the solution to re-assign the x position of the hero onto the key ?
- I tried in the SPR line to re-assign the x position of the hero, but this wasn't allowed. And there's not enough allowed insert characters to assign the x position outside of the SPR line
- I even tried moving the for-loop (which displays the random grass but this didn't work) - the fact that SRAND is not given a seed is suspicous... Is the solution something to do with the random seed?
@merwok - You can always use tab or the mouse - the function keys are just an extra convenience and they do work in the BBS - I edited the post to note this. Maybe I'll add ctrl+1..3 as alternative shortcuts, though - they seem to work both in BBS and splore. [EDIT: added]
I did level 5!!! I am so happy! The joy of cracking this level coupled with the simplicity of the solution was wonderful.
I may have to stop with this cart now. I have completed all the "Hero's Quest" levels as well as level 8 "forever" but the rest just look far too difficult.
It is hard. I think I have hit my wall and can only find solutions to #1-6 and #8.
@Sup3rAw3som3Gam3r - I really want to see the solutions for some of these, but at the same time I don't. Once the solutions are out there (and only a click away) then it's very easy to just look at the answer rather than trying to spend time thinking about it.
Then again, this cart has been around for almost 3 months, so that seems plenty of time for people to solve it. I would ask the creator @thisismypassword and let him decide.
I think it'd be nice to see what some of the intended solutions were. I just solved #6 with only an insert and a replacement. I have no idea what the other allowed changes were for.
Edit while continuing to play: so I guess inserting the code
stop() is not a solution.
@kimiyoribaka I also did it with a single insert and replacement - I assumed that the remaining changes were just to make solving it easier.
Now I would like to see the official solutions too (but only for levels I have already solved). What I think I really want is just more hints per level
So, now that I've played all the ones I feel like playing (I am not interested in reading through a monolith of code just to figure out what my goal even is), I have some thoughts on the design of this game. First, the order of the puzzles is odd. For "guarded" I used about the same solution as for "untutorial", but without all the distractions, despite "guarded" being further down on the list.
Secondly, a lot of the puzzles require knowledge that isn't in the manual or wiki and that I'm not sure how the player would even get within any reasonable time frame for playing. The most basic one is in "collect". In essence, that one's just a test of whether the player knows how Lua evaluates conditions (on top of the solution not actually accomplishing the goal). This becomes especially frustrating if it's combined with the puzzle itself being obtuse about what's going on. In "metatrouble", I had to look up what __metatable does via google because it's not listed in the the pico-8 manual and the 5.4 reference I usually use only mentions it in the getmetatable listing rather than the list of metatable keys. Meanwhile, the pico-8 manual doesn't even list it there. That made it hard to tell why the solution wasn't just
fun(), and then not knowing what
win_level() actually does made the error message hard to decipher too. For that, I didn't quite understand why that message was occurring until I got to the "locked key" puzzles.
Thirdly, I get that the player needs to be stopped from just cheesing every level with a workaround, but the requirements are so tight in some of these levels that the challenge ends up being more efficiency than working out what's actually been presented. This is especially the case in "riddle" which I notice a comment above about. The goal just says "Solve the 3 riddles", so it feels really unfair that entering the correct solutions requires so much optimization.
Lastly, I think several of these puzzles would benefit from some thought into how tedious entering in the solutions is. For "readonly", I rather disliked having to count the characters in the string.
@kimiyoribaka - Fair critiques.
About the puzzle order, the intention is that puzzles in each section get harder. Yeah, "guarded" is really easy for where it is.
All the information is in the pico-8 wiki (In this case, it's in https://pico-8.fandom.com/wiki/Setmetatable . I may have put some of it there myself...), but to be sure, I'm well-aware of how specific and obscure some of the knowledge required for the latter sections is.
I'll plan for my next cart to be more easy-going in this sense, but in this cart, I did want to add any trick I wanted, regardless of difficulty.
@Sup3rAw3som3Gam3r - sure, feel free.
[Please log in to post a comment]