I am undertaking a project to port Super Mario Bros to the PICO-8! (Yes, I know a few people have tried to do this before, but this one is mine, so I want to make it extra special, and extra accurate.)
So far, I've gotten the level renderer to work (almost! missing a few items and functionalities, but the general idea is here). It takes hex data just like you'd see in the original game, and renders it exactly like the game would. I give an example of World 1-1 here, but I've tested this with the entirety of the first two worlds and a few of the bonus areas. If anyone has any questions about this project, please let me know!
Uh-oh! After browsing the quotes from your favorite book, you discover that all the letters have been jumbled up and replaced with random other letters! Your mission is to reconstruct the text of all 100 of your quotes using only your knowledge of the English language.
Use the arrow keys to navigate the letters on the board.
Hold X and use the arrow keys to fill in a guess for a letter. You are not penalized for wrong guesses.
Press Z to erase a guess for a letter.
- v1.0.1 (June 29, 2019)
Made the cryptogram text static, as opposed to bobbing up and down
- v1.0 (June 27, 2019)
Scaled text without any lost cartridge/screen data? At last we have it, and to that I say:
Everything you need to start scaling your text is in tab 0 of this cart. If you don't feel like looking at the cart, just copy-paste these fully-commented, fully-optimized routines you see here:
function mcpy(dest,src) --because poke4() is so --relatively fast, it actually --outperforms memcpy(). the --print_big() function abuses --this very much. for i=0,319,4 do poke4(dest+i,peek4(src+i)) end end function print_big(text,x,y,col,factor) --set aside the palette values --of black and "col" for later --somewhere in user ram poke(0x4580,peek(0x5f00+col)) poke2(0x4581,peek2(0x5f00)) --oh yeah, same with camera poke4(0x4583,peek4(0x5f28)) --and fillp poke2(0x4587,peek2(0x5f31)) poke(0x4589,peek(0x5f33)) --set "col" color to "col" --& "col" transparency to off poke(0x5f00+col,col) --if "col" is black, then we --will instead draw black text --on a dark blue background. --so if "col" is black, then --dark blue is transparent and --black is not transparent. --but if "col" is not black, --vice versa. poke2(0x5f00,col==0 and 0x1100 or 0x0110) --copy the first 5 scanlines --of the spritesheet to yet --another place in user ram mcpy(0x4440,0x0) --copy the first 5 scanlines --of the screen to that part --of the spritesheet we just --backed up mcpy(0x0,0x6000) --print the text normally over --the background of the right --color (black or dark blue) camera() fillp(0) rectfill(0,0,127,4,(16-peek(0x5f00))*0x0.1) print(text,0,0,col) --copy the first 5 scanlines --of this text to still --another place in user ram mcpy(0x4300,0x6000) --copy the spritesheet screen --backup back to the screen mcpy(0x6000,0x0) --now the screen is intact. --copy the text to the first 5 --scanlines of the spritesheet mcpy(0x0,0x4300) --display the text at the --desired scale camera(peek2(0x4583),peek2(0x4585)) sspr(0,0,128,5,x,y,128*factor,5*factor) --copy the userram spritesheet --backup back to the sheet mcpy(0x0,0x4440) --restore our backups of the --previous palette values poke(0x5f00+col,peek(0x4580)) poke2(0x5f00,peek2(0x4581)) fillp(peek2(0x4587)+peek(0x4589)*0x.8) end
"I'm sick of this guy always doing ports. Why can't he make his own game for once?" - snarky PICO-8 player who is somewhat familiar with my current library of games
First off, Wal-Rush! was original.
Second off, I'm beginning progress on an original game called DESCENT! It's based on a game of the same name that I made for the TI-84+ and TI-84+ CE back in 2017. Only, instead of delivering boxes, in this game you're slowly becoming insane.
I've implemented almost every mechanic I plan to use in the game, and I've made 4 stages with basic demonstrations of the first few of them. (There are ways to get stuck in these stages, and I don't have a restart-stage function yet. If you get stuck, you'll have to reset the cart. Sorry!)
Who needs gameplay when you have ACHIEVEMENTS? Don't worry about beating levels, finding ways to kill enemies, or beating the final boss...there are none. Focus solely on your ultimate destiny...doing random tasks that have nothing to do with anything. Metagame yourself with ease! Self-satisfaction never felt so...artificial!
Use the arrow keys...if you dare.
- v1.02 (May 17, 2019)
Fixed a bug with the 0th achievement description, and with holding UP immediately upon starting
- v1.01 (May 6, 2019)
Made some important secrets even more secret
- v1.0 (May 5, 2019)
I haven't released a cart since I last released a cart. Let's change that, shall we?
This time, it's a curiosity. I wanted to make a custom font, and so I did. The routines for rendering it do not require the use of the spritesheet (though the glyphs are all in there, for my own benefit while creating this cart).
I've set this up as a demoscene-like or cracktro-like scroller, demonstrating the different glyphs of this font. It's based on the font on the cover of Panic! at the Disco's album "Pray for the Wicked". I hope to use this font (and this song!) in a P!ATD-related demo cart.
In the meantime, you should try out this font somewhere! Tab 2 in the code gives all the details on using it ;) .
Based on one of the most controversial games for the NES (warning: NSFW), Jayson Lowis Harwin (i.e. me) brings you: Magic Bubble!
Playing "Magic Bubble" is easy. Bubbles of many colors come floating upward. You must fit the Bubble Clusters together so four or more Bubbles of the same color touch one another. When four or more of the same colored bubbles press together, the pressure inside the Bubbles increases causing them to pop.
Keep the bubbles bursting since in every space a Bubble gets stuck there is one less place to put the next Bubble Cluster, and they just keep coming. If you can't pop the Bubbles fast enough, the cave fulls up, and the game will end.
It sounds easy, right? Get read to enjoy all 24 mind-blowing stages of bubble popping excitement!
- D-PAD: Moves the rising Bubble Cluster RIGHT or LEFT, and controls how fast the Bubble Cluster floats up. Pushing DOWN will release a Magic Bubble (see below).
- Z/C/N: Turns the Bubble Cluster around horizontally (turns left to right).
- X/V/M: Flips the Bubble Cluster vertically (rotates upside down).
Air Pockets are formed in the empty spaces between Bubbles that don't fit perfectly. One misplaced bubble can cause many Air Pockets, and Air Pockets take up as much space as Bubbles. One way to get rid of Air Pockets is to remove all the Bubbles below it and expose the Air Pocket to open water. When this is done the Air Pocket will dissolve.
If you're not careful Air Pockets will fill the screen faster than Bubble Clusters. Luckily, you can slide Bubbles into Air Pockets. When you pop the Bubbles you will also get rid of the Air Pockets.
Sometimes during game play a Mystic Pearl will be part of a Bubble Cluster. The glow of the Mystic Pearl has magical powers and will change the color of the Bubbles around it to a single color.
Try to maneuver the Bubble Cluster so when the energies of the Mystic Pearl are released it will affect as many Bubbles as possible.
Plan the position of the Mystic Pearl carefully. The number of Bubbles popped can increase or decrease depending on the color the surrounding Bubbles change to.
Every time you pop a Letter Bubble the letter will be placed in the Magic Window at the top of the screen. After you have collected all the letters needed to spell the word MAGIC, you will receive 1 Magic Bubble. To release a Magic Bubble hold down on the D-Pad.
When a Magic Bubble is released it will float motionless at the bottom of the screen until the Bubble Cluster has settled.
The first thing a Magic Bubble does is remove all Air Pockets. This will cause all Bubbles to settle and should cause some Bubbles to pop. The remaining Bubbles will begin to pulsate with energy and change colors. If you're lucky this will cause even more Bubbles to pop.
There is no indication on screen for Magic Bubbles. It's up to you to remember how many you have collected.
Only do this if you are 18 or older (I'm serious).
Hold Z/C/N at the title screen, and then press ENTER/P to pause. You'll see a menu item labelled "CENSOR OFF". Choosing this item disables the censoring, and unlocks some very interesting cutscenes...
v1.2.1 | 2019/3/27
- Fixed a glitch where finishing the game can trap you at the high score screen
v1.2 | 2019/3/26
- Added the Mystic Pearl
v1.1 | 2019/3/21
- Added cutscenes, for those man enough to find them
v1.0 | 2019/3/20
- Initial release
Introducing the first ever fully-featured e-book reader for the PICO-8!
I decided to include Poe's "The Black Cat" as an example story, mostly because it almost perfectly fits within the length requirements of this e-book engine (this story happens to be 21747 characters long uncompressed).
The text of the story is not stored as strings within the program, but it is encoded with Huffman coding in the bytes of the spritesheet and map. This is a more complete version of this project, so look at the details of that to learn more.
One thing I added here is the ability to save your progress through resets, and also add one bookmark that you can set and jump to anytime, with the X and O buttons respectively.
Let me know what you think!
Compression seems to be a thing I've been doing recently. Continuing this tradition, I am releasing an (only partially done) e-book reader for the PICO-8, with the first two chapters of Moby Dick! (It's also got some of the third one, too.)
Some things to note:
Text is stored in the graphics, map, and sprite property data, as Huffman-coded bytes.
The text is divided up into sections that encode up to 6351 characters each (the length of user RAM minus one screen's worth of characters). These sections are byte-aligned.
With Huffman coding, each character of the source text is basically replaced with a variable-length bit sequence (one that is sure to never be a substring of any other), with the bit sequences getting shorter the more frequent a character is.
I tried to design this in a general way, such that anyone who knows how (i.e. me) can change the aesthetics, or the parameters for decoding the book, by changing a few values in the first few lines of the code.
- Currently, the encoded data is only stored in the first 12544 bytes of RAM. In theory, filling the music and SFX with compressed data could add over 8000 characters to the book. I will leave this, however, as an exercise for another day.
If I can find some sort of book that fits within the ~22000 characters that this e-book reader can hold, I will release an official PICO-8 cartridge of that book (and possibly add some new features, like page-by-page scrolling and bookmark-saving!). Please alert me of any books that might fit this limit!
Thanks to @Scylus on the PICO-8 Discord for providing me with a way to generate and interpret the dictionaries.
I've been experimenting with video compression lately, so here's a demo of a 4-color video.
This was originally supposed to be an engine for animating a splash screen with as little cartridge storage as possible. As it turns out, it's not too difficult to make a good-looking smooth animation, as long as it's not too long. However, the music video for "Bad Apple" is not not too long.
In order to fit the entire animation, I had to render it at 3.75 FPS, and make it 16*16 pixels...but hey, it fits on a PICO-8 cartridge, so why not?
(Note: this cart uses devkit mode, so be sure you can attach a mouse to your PICO-8!)
The elephant forgot the rest of the levels, but luckily he still has one left! Help him beat it in all his metagaming glory. Use your keen knowledge of gaming and dexterity to manhandle your way through a variety of challenges. Get your mind out of the box for once! Take it outside for a walk, or maybe grab a bite to eat with it.
Oh, and beat the level. There's only one.
Arrow keys, but I am told not to tell you any more than that. The elephant says so.
Response from jmtb02 (who made the original)
At this point, the controls are:
- LEFT/RIGHT: Move the elephant
- UP: Jump
Hopefully I'll develop this into a more complete game!
Wal-Rush! is a game of walrii, fish, and flight. Based on a game I made for a programming competition at codewalr.us, this game lets you play as the mascot of the website, Walrii, as he flies through the sky. Collect fish, rack up points, and watch out for the spike mines!
There are three modes: Easy, Normal, and Hard. Try your hand at each of them, and go for the highest score!
- Easy: Obstacles always move straight. Fish give you 10 points, and running into a spike mine means death.
- Normal: Obstacles can move straight, or in a wave-like pattern. Once again, fish give you 10 points, and running into a spike mine means death.
- Hard: This mode adds a "time bar" to the top of your screen. Your mission is to keep it from running out! Fish give you 10 points (and a bit of time), running into a spike mine takes away a bit of time, clocks give you 50 points (and 50% of your time), and hourglasses give you 100 points (and momentarily stop your time from going down).
"Walruses might fly unless the age of miracles is past." - Anonymous
- LEFT/RIGHT: Move Walrii left and right.
- X: Flap Walrii's wings and fly!
(To anyone saying that this kind of game belongs on the Atari 2600...I actually put it on there, too. 😉)
v1.1 | 2019/2/18
- Fixed a bug where pressing X for one frame caused Walrii to keep flapping his wings until X is pressed again
v1.0 | 2019/2/17
- Initial release
Hey, everyone! I'm a hobbyist developer who finds the concept of a "fantasy console" pretty interesting, so I made a little demo based on this game I made for a programming competition for CodeWalrus, which I also remade into an Atari 2600 game. I hope it looks and plays alright!