Let's make a cart of minigames!
PLEASE NOTE UPDATED TOKEN LIMIT BELOW
This has totally been done before (see @josefnpat's carts here) but I was thinking of pushing it a bit further with 16 minigames plus an over-arching "meta" game to tie them all together, and give the player a "final score" etc. Kind of like an homage to Lazy Jones on the C64:
I'm looking for people to submit some minigames to add to the cart! All you need to do is make a Pico-8 game as usual, with some basic restrictions (listed below), and submit it to this thread. The first 16 "complete" submissions I get will be added to the cart.
EDIT: So far we've had interest from around 6 devs (plus me!), but if there's anyone else here who's interested it would be good to know just so I can tell if I need to advertise this more elsewhere.
I've made the shell of the cart, and the "meta" game is 99% complete. See below:
EDIT: updated version of shell cart has SFX and better feedback on current direction.
The idea is you fly around in space looking for "anomalies", each of which takes you to a random minigame. You play the minigame once and, win or lose, the anomaly closes and you have to find another one. The aim of the game is to close all 16 anomalies and get the highest score. Flying uses up fuel, as does touching the aliens, but you get fuel bonuses (and points) depending on how well you do at each of the games. The anomalies are at fixed positions, but there's no map, so you might want to jot down their locations as you find them (old school!).
All feedback on the game, and ideas for a name, would be much welcomed.
UPDATED: The crunched version of the shell cart currently takes up 1202 tokens, 3112 chars and 1511/15630 compressed chars (about 9.8% of cart). It's feature-complete now I've added SFX and tweaked the GFX. You've lost a few tokens as a result but it's still comparable to previous jams, and also the budgets for chars and compressed chars have hardly changed (I did a better job at crunching this time). Also there's some placeholder code that needs to come out once games are added.
-436 tokens each
-3901 chars each
-865 compressed chars (only about 5.6% but note that even with no shell code you only get 6.25%)
These are rough estimates, and the more that devs come in under budget, the better for all of us. If we are doing well for space I was thinking of commissioning some transition GFX from some of the tweetjam legends on Twitter.
Note how my own compression ratio wasn't great, the shell cart is quite tightly packed. You'll probably find if you use all of your character allowance with dense code, it won't compress enough, so be careful! Ask for help if you need some guidance on crunching.
I'll post a link to Discord once I've signed up.
EDIT: Discord link here: https://discord.gg/rncwcsR
Also Twitter hashtag is #17in1jam
Further Restrictions (some borrowed from @josefnpat):
Variable names - The shell cart uses all single-letter global variables, to save space. The only ones left for you to use are h/i/j/k/v/w/z. If you need more short variable names, please pick a single letter from the alphabet and use this as a prefix for all of your names, so if you choose 'f', your variables can be 'fa', 'fb', 'fc' and so on. I've taken the letter 'N' so don't use this. Local variables you should be able to call whatever you like.
This shell code is NOWHERE NEAR as elegant as @josefnpat's but I think we can get away with more doing it this way. One more thing - all of your global variables need to be defined inside _init() so that I can just call _init() to reset your game.
Function references - The following functions refs are defined for you to use:
e=all f=flr m=camera p=print r=rnd
Return function - your game MUST call my global function ret(n) on win/lose/die/timeout/whatever, so it can switch back to the meta game. n should be a number 0-128 (inclusive) that represents how well the player did. This number will be used to refuel the player's ship and increase their final score.
Undocumented code - be judicious with undoc'd techniques and/or tricks that rely on bugs, in order to make the cart as future proof as possible. Not saying avoid completely (the shell cart uses some) but consider the likelihood of those things being fixed/deprecated.
Graphics states - if you turn something on (fillp(), pal(), etc) be sure to turn it off again. Exceptions are color() (assume this is regularly overwritten) and camera() (this is reset on game exiting via ret()).
Global code - If there's something you want to make global for others, let me know and I'll try to fit it in.
Sprites - you can have a 4x4 chunk of sprites from any of the 4 tabs on the Pico-8 editor. Please claim these in advance where possible so we all know who is using what. Note that 240-246 are being used by the shell cart, so people using those 4x4 chunks will need to work around this.
Map - you can have a 4x4 section of map space, from tabs 1 or 2 only, to avoid corrupting the sprites. This means that potentially only 8 devs can use the map, feel free to work this out amongst yourselves to share space.
SFX - 4 in a row, aligned to every 4 (0-3, 4-7, 8-11 etc). The shell cart uses 60-63 so don't use these (I guess the last dev to add sound will need to find 4 slots that are left over from the others!).
Music - TBC, but let's assume 4 pages in a row, aligned to every 4. I'd like to have some space for music in the meta game if possible.
Cartdata - If required, go nuts. I think just take as you need and just work together to share as required.
Leftovers - Be sure to advertise whatever resources you have left over from your allowance so other devs can use it (and let us know when the leftovers are gone!)
IDs - Please make it clear when you post the cart which resources you have used and where they are.
Sharing assets - Feel free to share and reuse sprites etc between games. I wonder if we'll discover the Pico-8 version of the Wilhelm Scream?
Other Design Requirements (to make it consistent):
For the general spirit of the jam, it would be great if you could design something especially for this, rather than posting something you recently completed.
There is no need to produce something space-themed, as the "anomalies" are meant to take the player to random dimensions. In fact, the more eclectic, the better :)
Make the controls intuitive, or provide tooltips.
Don't use any controls outside of the Pico-8 standard, i.e. no mouse controls etc.
Each game should only play through once before booting the player back out to the meta-game. One playthrough should take max 60-90 secs (remember the aim is to play all the games in a row).
During gameplay, at (0,123) on the screen, display a string that says "GAMENAME (YOURNAME)", max 32 chars
Make it as polished as you can!
TL;DR: make a game, make it small, make it rad, ask for help.
I hope you have lots of fun!
Hey FYI anything stored outside the code editor doesn't effect compressed size. So no matter what the built in sprite, map, and music/sfx data is, that figure stays the same. Thing like comments in code do affect compressed size tho.
I have a few tiny things I'd like to contribute.. a small fishing minigame, a keypress/typing game, and a shooting gallery. None should take up much space or graphics. Could we have a global option so we know if the player has access to a keyboard, mouse, or just a joypad?
Questions: how long should a single minigame session last?
Can we save things using dset to have persistent 'stages' when a game is revisited?
Where should we post games?
Hey @enargy thanks for the info. That will help with cart size.
Those ideas sound great, if possible I'll keep it one per dev but if we are low on submissions by all means I'll take multiple games per dev (and I've got some ideas I'd like to add too). I think keep it joypad only to be "pure" Pico-8.
Minigame sessions should be 60-90 secs. Players will only play each game once per run, but it might be nice to have a game that reacts differently based on how many times the player had played... for example, "welcome back, I see you did X last time, let's see how you deal with this". That would be very nice.
Post games on here as standalone carts, be sure to declare all global vars inside _init and don't have any code outside _init _update or _draw.
Looking forward to seeing your work!
Well done for getting this going.
I'm certainly interested - if I can find the time to submit anything!
Have you announced this on Twitter yet?
If not, might be worth tweeting the link (using the #PICO8 hashtag), coz there's a lot of users on there that don't check the BBS as often.
Good luck with the jam! :D
@Liquidream you have time, I can't imagine it filling up that quickly and would be good to have your input. I'd already tweeted with hashtag etc but just did a second one just in case.
@steiff awesome, I'd be happy to help if you get stuck :)
@dollarone thinking more about this, would also be good to know about WIPs so I can keep track of how many we have so far.
If we get loads of games, we can always copy Pokemon and do Red and Blue versions!
I've put a public file on Dropbox for people to claim their sprites and other resources:
Add a comment to claim your stuff and I will keep the spreadsheet up to date.
Log in to post a comment