A few people have asked me for hints / a walkthrough for Bob of Thunder. Rather than just produce a video that you have to skip through, I've decided to give this hint guide to give a little nudge and let people solve things the rest of the way by themselves!
General Hints
Ljessnir, Bob's hammer, can hit switches at a distance, and will try to return to him even across the room. Try to experiment with different ways you can hit switches and different orders - all switches don't do the same things!
No matter what order you do things, there's always a way to progress, but it may be something you forgot about in a previous area. If you get stuck, try wandering back through the places you've been.
Hearts and coins respawn when you leave a room, so if you're low on health or money, you can return to any rooms that contain those items again.
The NPCs want Bob to succeed, so if you see any of them, make sure to talk to them right away!
Entrance Area
Q: How do I go further north?
Hint:
Hint:
Solution:
Q: I can't figure out how to get the key so I can open the lock.
Hint:
Hint:
Solution:
Q: How do I go further west?
Hint:
Hint:
Hint:
Solution:
Q: I got further west, but now I can't figure out what to do!
Hint:
Hint:
Solution:
Q: I saw something in the west area that I can't figure out how to get to.
Hint:
Hint:
Hint:
Hint:
Q: How do I come back from the area to the west?
Hint:
Solution:
Q: How do I go through the door to the east?
Hint:
Hint:
Hint:
Hint:
Hint:
Solution:
Q: I'm stuck on what to do once I get through the door!
Hint:
Hint:
Solution:
Q: I've completed the area to the east, and I've gotten the key I need to open the lock, but I feel like I'm leaving something unfinished by going further north. What do I do?
Hint:
Hint:
Hint:
Solution:
Beyond the First Lock
Q: Which way do I go now?
Hint:
Hint:
Solution:
Q: How do I go further north?
Hint:
Hint:
Solution:
Q: How do I go further west?
Hint:
Hint:
Hint:
Solution:
Q: I made it past the first puzzle to the west, but I'm stuck on the room with
Hint:
Hint:
Solution:
Q: I made it past two puzzles to the west, but I'm stuck on the room with
Hint:
Hint:
Solution:
Q: I see some blocks that I don't know how to move. What do I do?
Hint:
Solution:
Q: I'm past the blocks, but there's still
Hint:
Solution:
Q: How do I go further east?
Hint:
Hint:
Hint:
Solution:
Q: I can't figure out how to get the key that's further east!
Hint:
Hint:
Solution:
Q: I can't figure out what to do east of the key!
Hint:
Hint:
Solution:
Q: How do I get back from the area to the east?
Hint:
Hint:
Solution:
Q: How do I make sure I got everything in this area?
Hint:
Solution:
Outside the Utility Shed
Q: How do I get to the utility shed?
Hint:
Hint:
Hint:
Solution:
Q: What does the picnic area do?
Solution:
The Utility Shed
Q: How do I go further north?
Hint:
Hint:
Solution:
Q: How do I go further west?
Hint:
Hint:
Hint:
Hint:
Hint:
Solution:
Q: How do I go further east?
Hint:
Hint:
Solution:
The Endgame
Q: How do I
Solution:
Q: How do I
Hint:
Hint:
Hint:
Solution:
Q: How do I
Hint:
Solution:
Q: You, the game designer, are a jerk.
Solution:
Q: How do I
Hint:
Solution:
Q: What do I do once
Hint:
Solution:
I'm excited to introduce Bob of Thunder, my entry to Toy Box Jam 2!
This is probably my most ambitious cart in terms of process: it borrows heavily from the techniques I used in Astro Clerk in The Documents of Mars last year, but it has a considerably larger map requiring compression, more in terms of scripted events, and took way more planning. I plan to write up some of the more interesting parts later on.
The Story So Far
Instructions
Bob will acquire several items as his workday progresses. He can touch most signs, notes, or villagers to see what they have to say, and you can press Z/Square on switches or hit them with your hammer to activate them.
Z/Square - Throw Ljessnir
X/Cross - Use Secondary Items
The game will autosave as you progress, most often when you cross a screen boundary or enter/exit a room.
Credits
Changes
Revision 1: Adjusted the difficulty for the last challenge.
Revision 2: Fix the color scheme on one of the NPCs
Revision 3: Fix some missing dialog colors
Revision 4: Adjust layout of rooms in the last challenge.
My favorite 2600 game has to be Activision's StarMaster. It had everything: space combat, docking maneuvers, a map. The whole nine yards.
This game only has one of those things. I'd hoped to complete it for TweetTweetJam 5, but I'm just happy it got finished at all. There are a couple tricks I'm pretty proud of in here, and I look forward to the next one!
Code:
The Atari 2600 gave me a lot of silly memories.
Unfortunately, there were no characters to spare for realistic wood paneling texture.
This isn't my most impressive cart ever, but I had fun with it.
Code follows:
f=rectfill cls()f(0,1,0,3,6)pset(1,2,8)f(2,0,3,4)f(2,2,5,3)f(6,1,7,2)memcpy(0,24576,512)poke(24364,3)w=64y=8d=0r=64s=0p={}h=-9m=w::_::cls(12)b=btn()y+=b\8%2-b\4%2pal(6,5+d%2) ?s,1,1,7 f(0,50,w,w,3)y=mid(0,y,32)spr(0,8,y,1,1,1)h-=.5d-=1if(d<0)d,r=r,max(r-1,9)add(p,{x=w,y=rnd(36)}) pal(8,2)for i in all(p)do i.x-=1x,z=i.x,i.y spr(0,x,z-2) if(x<-8)del(p,i) if(x==32)q=pget(12,z)f(x,z,0,z,9) end if(h<-8)h=w+rnd(32)g="⌂" ?g,h,58,7 m+=2 if(b>15)m=y+4 ?"♥",9,m,14 if(pget(12,m+5)==7)g="♥"s+=1m=w pal()flip() if(q!=8)goto _ while btn()<16do ?"*",11,y,10 end run() |
Who doesn't love gambling in Final Fantasy XIV?
I do. Especially when the odds are in my favor.
This FF14 Mini Cactpot "solver" takes a simple approach: average all the possible outcomes of each decision you make during the Mini Cactpot minigame, and suggest the specific choice where the average outcome is highest.
Press square to make choices and X to undo them.
I will, on occasion, play a game or two of Vampire the Masquerade (5th Edition).
I will, on occasion, rely on borrowing dice.
Here's an alternative for kindred of less discerning tastes.
Okay, bear with me, because this is a pretty niche bug and also I can't post the actual code because it's spoilers for a demo I'm putting together.
I have code that basically works like this:
local a,b={},{} --a loop that populates a,b with 128 nums each ::_:: cls() --some code that involves nested looping through a,b to draw pixel-by-pixel on the screen flip() goto _ |
This is not a super uncommon design pattern for my tweetcarts. One thing I'd intended to do was encode the contents of a,b rather than the code that populates them. So I did, and the performance tanked.
Weird. Maybe there's a performance difference I'm not aware of?
What was odd is that I know a and b are local in both cases, and they take up the same storage as far as I can tell. I started poking around, and I tried this:
local a,b={},{} --a loop that populates a,b with 128 nums each local anew, bnew = {...my constants...}, {...my other constants...} ::_:: cls() --some code that involves nested looping through a,b to draw pixel-by-pixel on the screen --note that this code never references anew, bnew flip() goto _ |
Oddly, the performance still takes a hit. Even though anew,bnew are defined outside the loop. Even nil-ing them out doesn't reverse the performance hit.
Am I being silly, or is this behavior strange?
I couldn't resist making a cursed PICO-8 cart after someone sent me the What's Your Alex Jones Conspiracy Theory post on reddit by /u/dreggmuffin.
Given the subject matter "mad libs" is almost a double entendre.
(Press z/O button or x/X button to get a new conspiracy theory that you'll use to exploit the patriotism of your listeners!)
This snippet was requested on the Discord, and shows how to pack a 16x16 byte map into the cartdata. I've used the title screen of Astro Clerk just to have something non-repetitive to use to show that the behavior is correct.
This cart contains three things of interest:
- A 6x15 font I used in Astro Clerk
- Code for encoding your own 6x15 font in the same way (i.e. four 1-bit graphics per tile)
- Code for decoding/printing with a 6x15 font
Inside the cart, you can use initfont to create a starting point by upscaling the system font, encode6x15 to write the sprites, and print6x15 to output the result.
I was working on a half-baked 3D engine when my brother texted me to tell me that my games are just like the ones on Adventure Time.
Well, I'll show him.
In the future, humanity will achieve world peace by offloading all of its paperwork to Mars.
You are Astro Clerk, a capable custodian of all documents, forms, certificates, contracts, and records to be found on the red planet.
Tomorrow is Mars Day, the beginning of a long weekend. Unfortunately, this year it falls on the first of the month!
Traverse the hostile terrain and rescue the common pencil-pushers from an endless night locked away completing their quarterly mars reports!
Astro Clerk is my entry for RNDGame Jam 2020, an homage to the early-90s classic The Monuments of Mars. It features 20 levels of puzzle action, autosave, high scores, and 2-bit CGA color!
With any luck, there won't be any last-minute bugs, because this cartridge is coming in hot! Screaming into the jam with 20 minutes and 0 tokens to spare, Astro Clerk is the game you never knew you wanted, but might learn to live with!
It's the fourth TweetTweetJam! My entry for this Jam is a stripped-down OutRun clone in 559 characters.
There's a couple things I'm proud of in this cart, so I'm posting an annotated, less-minified version of it below.
Controls
Use left and right arrows and stay on the road as long as possible! Sorry, if you crash you may have to refresh the page or reload the PICO-8 widget.
Code
Annotated code
Slushies 3 was a game I wrote in 2003 for the Casio color graphing calculator. I've reproduced it for posterity as accurately as possible after recovering the original source code and converting it to Lua. Since the original game relied on some "tribal knowledge" of inside jokes and rules that aren't told to you anywhere, I've added a commentary system to act as your guide through this hilariously imbalanced game, and you'll get a little bonus if you make it to the end of the game after accessing 100% of them.
I hope you enjoy it!
This is Lucy Loves Pebbles, a game in 559 characters where you feed Lucy Miu with her favorite pellet-based food. #TweetTweetJam
Press X to flip the flippers and try to fling the pebbles into the cat's mouth. If she eats enough, she'll be happy - otherwise, well, nothing happens.
I'd never tried to minify game code before - only demos for #tweetcart. As it turned out, I made two choices that would make this one very difficult to minify: I spent a stupid number of characters drawing the cat head exactly as I wanted (instead of picking cheaper graphics for it) and I chose game mechanics that were really much more complex than I ought to have chosen.
The implementation was fairly straightforward: the left side of the screen (i.e., the cat's face and rail/flipper) are drawn with primitives, then memcpy/spr-flipped to the other side. I use the distance to center to determine what happens when the flippers are pressed, and the height to determine if it makes it in the cat's mouth.
For minifying, I wrote a small python script that would read a less-minified cartridge and output the one I've uploaded. Essentially, it strips indents, some whitespace, and comments, and allows me to use comments to decorate which lines' newline characters can be deleted.
Yes, this may be my worst cartridge, but it was a fun weekend!
The Falling Sand game has been around a long time, but I didn't see a Pico-8 port.
The reason for that is: it's really hard to get a decent-sized grid to run at full speed on the Pico. This implementation runs a little slower than 15FPS (when running the simulation) on my machine, so it isn't quite as smooth as I'd like, but still pretty playable. In the future, I'd love to post a faster version, but I've hit a bit of a wall with the Lua optimizations I'm already aware of.
If you're not familiar with Falling Sand, the basic idea is that you're simulating a bunch of elements in a grid, where different elements react in different ways - oil floats on water, fire burns wood, plants grow when watered, and so on. It's fun to play around and build things, but there's no goals or progression, really.
Have fun!
This cartridge doesn't have a very impressive test, but the code might be useful to some of you.
This is an implementation of the LZW compression and decompression routines with variable-width coding, commonly used in a few image formats. I've nibble-aligned the codec, and I provide an interface where you can give addresses for compression/decompression.
The way I envision using this is: construct rooms in map #1, then when you're finished, compress them to map #2 or elsewhere in map #1, then store them to the cartridge. When you're finished building rooms, you only need to include the emit/read symbol functions and decomp, which total to about 340 tokens. You can make a table of addresses for loading these rooms during runtime, and it's pretty fast, all things considered.
As for compression ratio, this demo shows a case where it's pretty bad - you could conceivably end up with bigger data than you started with if your data was sufficiently random, but for maps this is often not the case. If you build a table (as described above), you could mix entries for compressed data and entries for "literal" data to only compress when it helps.
In the future, I might provide an interface for compressing sub-rectangles of the map to avoid having to compress empty space (even though, in theory, this will be highly compressible).
Hope you find it useful!
New to the Pico-8, which is already starting to feel like home.
When I was a kid, I remember playing these awful Game Gear sports games we got at a garage sale. This is my take: working your way up through the local semi-pro ladder, you can get a chance to unseat the seemingly-invincible Jeremy Mondo (I hear he's got a sponsor now!).
No particular advantage to choosing any of the characters, and some of the opponents you face early on are pretty bad - the characters are inspired by folks I've played (much less fun) games of racquetball with back in my hometown.
