First, thank you to everyone in the Pico-8 community for being so amazing. With a heavy heart, I have had to regretfully shut down PlayPico after 3 years. I no longer have the time or finances to maintain the site, as I have a very demanding job and a 4th child due 3 weeks from today (PlayPico was a labor of love and cost around $30/mo to run). Other than the finances, I simply don't have the time; the site required a lot of maintenance, and over the past 3 years, I probably invested over 1000 hours into development and maintenance. It started growing in users to the point where more and more new features were becoming absolutely necessary, and it was getting neglected. Several key features were also broken after the BBS updates, and while I fixed many of them, I couldn't find time to fix all of them or continue to keep up should the same issues arise again.
Thanks again for everything, everyone! I hope PlayPico at least brought you all some joy, that's all it was ever meant to do. I'm sorry that it can't continue, but I hope it served you all well while it was there. It had a good run.



Hey all,
Hopefully it doesn't seem too spammy to start a new thread instead of updating the old one, but the old thread got pretty huge (including the original post), so instead of adding more to it, I figured it best to start a new thread.
For those who don't know, PlayPico is my personal curated list of only complete games (see the original thread if you're curious as to how games qualify for the list, why some might not be there, etc.)
WE BROKE 500 GAMES!!!
Finally, after almost 2 years of PlayPico history and 3 years of PICO-8 itself, we've hit 500! Great job to everyone who made these amazing games, and keep 'em coming!
We got a facelift!
This has been a long time coming, as PlayPico needed a facelift for a long time. The old version was pretty much just using Bootstrap 3 in its default state. This is because the site started off as something just for myself that I ran locally on my computer and wasn't public anyway, and also my concern was mostly with developing the server-side aspect, so I tossed together something that would look decent with as little effort as possible. Bootstrap has been [i]completely





Hey all,
After doing another round of adding games last night, which followed a month-long hiatus, which also followed an almost 2 month long hiatus, which also followed a whopping four month long hiatus, I decided to look at the analytics for the site to see if anyone is actually using it. It turns out, it's getting around 4,000 unique visitors per month, so it seems like a lot of you may have been let down by the gaps in adding new games, so I think it's time to address what's going on and why this has been happening.
As some of you may know, a month after the site was launched in October 2016, my daughter was born in November. This didn't really change anything though about the site's continued updates, and new content was added weekly at minimum for nearly a year following the site's launch. It was when I got a new job in September of 2017 that things started getting fewer and further between.
My new job is very demanding. The company I work for does most of the websites for Sony Music, and we handle most of their individual label websites, many of their major internal web application tools, and pretty much all of the websites for artists signed under any of the Sony labels. We do all of this with 3 developers including myself, and one is designated solely to Sony's internal tools as well as those of Ticketmaster, so there are two of us handling everything else (including the maintenance of all the existing websites we've done). I believe our average throughput is around 300-350 website launches per year, with about 35% of those being custom WordPress builds, and the other 65% being static.
Doing work within the music industry is cool, but because the turnaround time has to be so quick, there's a lot of overtime. I personally average about 3.5 websites built from scratch and launched per week, and that's while about a third of my time is also spent providing updates and support for sites I've already built previously. Also, if anything goes wrong at any time day or night, holiday or weekend, it's an emergency that needs to be dealt with immediately. When I'm not working, I try to spend as much time as I can with my daughter - as she gets older and each milestone comes and goes, I realize that there are so many stages that come and go very quickly, and you can never get them back. You have to enjoy every moment before it's gone forever.
So what am I saying? Is this the end for PlayPico? No! In fact, last month I just renewed the domain for another 2 years! The hosting is on the same VPS I use for my personal website, my email, and the websites of two nonprofit organizations that I am paid to host/maintain, so I'm not going to cut off the hosting either (even if the NPOs cancel for some reason, it's been my personal email server for almost a decade, so it's not going anywhere).
The reason for this post was because I had no idea how many people were using the site. It's been more than half a year since the last time I looked at the analytics, and back then it was getting about a tenth of the traffic it does now. I feel like I owe a lot of people an explanation as to what's been going on. This is also a pledge that I will do what it takes to keep up with the site better and resume adding new features and improvements. I'm going to set a weekly schedule, one night every single week, where new games will be added, and I'm going to work on overhauling the UI/UX completely to give a far better experience.
If you read all this, and you've used PlayPico, please take half a second to give this post a star. I need to know how many of you are out there and how many care, that's a big motivator in all of this.

Please join me at https://www.twitch.tv/hearthmasta to watch me live stream PlayPico.com development tonight at 10:00 PM EST (2:00 AM UTC, or 20 minutes from the time of this posting)! Great music, great wine, learn web development and give me your feature requests and help me design and develop PlayPico for you!
Looking forward to seeing you there!
This is a Pac-Man game with procedurally generated maps, and two ghost AIs (Blinky (red) and Pinky (pink)). I only made two ghosts due to the obviously small map size. Each ghost has their own 'personality', just like in the real game, so each has a slight AI variance from the other.
Instructions:
Press <Shift> to turn the arcade cabinet on and off. Hold <Z> to see your score (pauses the game). The number of lives you have left is displayed in the far right column (vertical line of yellow dots). When you lose your last life, the final score will be displayed, and you can press <Z> or <X> to start a new game. Eat Power Pellets (flashing pellets in each corner) to be able to kill ghosts for a short time. The ghosts will flee from you during this time, so be quick and use the Power Pellets wisely! Eat all of the pellets and power pellets on the map by visiting every walkable tile to advance to the next level.
[b]Scoring:




Hey all, I'm generating random Pacman maps for my Tiny TV Jam game. So far, I have what are called "perfect" mazes being generated, using a common algorithm similar to recursive backtracker. The problem is that a "perfect" maze is one with a start, an end, and only 1 path from start to end.
Pacman mazes aren't designed in such a way, as they are what are called "fully braided" mazes - they have zero dead ends, so all corridors are interconnected. I've done a little research into how a fully braided maze might be generated, and unfortunately there don't seem to be any actual algorithms for doing this. I have only found people who have asked about how to do it, but no real clear answers, only hints about how one might go about doing it.
The best suggestion I found was to generate a normal "perfect" maze, as I am doing now, and then making a "walker" that goes through the maze once it's generated, looks for dead ends (an open tile that's only connected to 1 other open tile), and then removes them either by deleting a wall to connect it to another corridor (if possible), or if not possible to connect it to another corridor, PLACE a wall to fill in the dead end. Then have it repeat walking through again until it's covered all open tiles and verifies all the dead ends are removed.
The problem is that this all sounds a little bit over my head. I have no idea how to go about doing this. I know that the game will not be playable if there are dead ends in the map, because the AI will inevitably get you at the dead end, so it would make the game impossible. Here's my map generator (press Z to generate new maps; orange tiles are walls, purple are paths):



I know at least 90% of us who trawl the forums already own PICO-8, but just thought I'd share for the few who don't. You can get PICO-8 in the "Beat the Average" bundle for currently less than $7, or pay $10 to add Voxatron. Lots of other good software in there as well.
Here's the sauce: https://www.humblebundle.com/game-developer-software-bundle.



This game is based on the 1986 Intellivision classic Thunder Castle. It has dragons, and... dragons! So far only level 1 is (basically) complete, and there are 3 map variations that are chosen at random on startup. Eventually it will have a title screen as well as 2 more levels (I believe you can get to level 2 currently, but it's totally incomplete, doesn't have the right enemies or powerups or the second and third map variations). Level 2 will have 2 wizard enemies instead of the dragon, and level 3 will have 3 demon enemies.
Press action/fire to use items you pick up. Avoid the comb. A couple items don't have their functionality yet. Get the bat to become invincible for a short time in order to slay the dragon!
Credit to @solar for the excellent sounds and music!
Video of the original INTV game: https://youtu.be/WiK1fumT18E?t=1m8s






I put together a page for my favorite PICO-8 games, and figured you'd all enjoy it! https://www.playpico.com/. At the time of this posting, there are currently 113 games - let's see how it grows!
Big update Jul 27th, 2017
The website has been completely rebuilt from scratch. I'm still working on some more features for it, but it's at a point now where I wanted to push the progress live. It's now built on top of my PHP MVC framework, Lightning, available here: https://github.com/clowerweb/Lightning.
- UI facelift. It's still fairly similar to the old UI, but has many improvements in both aesthetics and usability.
- Better performance; it should be snappier than ever now.
- Featured games! The front page is now a list of 24 featured games, chosen randomly each week. You can still go to the full games list by clicking "All Games" in the navigation, but this is no longer the index page.










Finally hit the milestone in Picoder development where I'm able to decode p8.png files in pure JavaScript. I couldn't have done it without the help of @gamax92 and @dddaaannn, as well as the source code of their respective projects PICOLOVE and PicoTool. It's been a long, bumpy ride, but here it is: http://clowerweb.com/picoder-test/. This will be used to import .png files into Picoder, and the decoding algorithms reversed in order to compile code (edited in Picoder's online IDE) to be playable in the web player for testing.
So huge shoutout and thanks to the above named! Hopefully the IDE itself will be available for public testing soon. Please let me know if you find any issues with the decoder - this is my chance to let you all test it and help me find bugs. Thanks!





Sometimes, we want to be able to play animations in reverse. This is the advanced animation function with a reverse option. In this case, the foliage grows, stays for 5 seconds before shrinking away (playing the "grow" animation in reverse), disappears for 10 seconds, then repeats.
In the last post, we looked at some basic animation, collision and AI examples. In this one, we're going to take it a few steps further and improve upon these functions.
During the development of my game (tentatively titled "Castle of Thunder", which is a port of INTV's Thunder Castle), I realized that I was going to need some more advanced functionality, because the first enemy is a total of 4 sprites when walking horizontally, and 2 sprites when working vertically. Since we had all of our animation stepping, animation speed, frame numbers, etc stored as properties of our actor in our simple animation demo, it works great for 8x8 actors, but not as well when that actor is comprised of several sprites.
Further, I found that I needed to be able to specify x and y offsets for actors with multiple sprites, so that subsequent sprites can have custom positioning and aren't drawn on top of the first. I [i]also


Hey all, I have some music and sound effects in mp3 format (they are already 4-track chip tunes) that I need recreated in Pico-8! They don't have to be 100% true to the original, but I'd prefer if they were as close as possible. I've got a game that's deep into development and should be completed within the next week or two, and would love to put your name in the credits! There are about 18 mp3s in total, most of them are just small sound effects, and 6 or 7 of them are short pieces of music.
If you're interested, just reply here and I'll send you a link to the mp3 files. Thanks!



Allow me to preface this by saying that I'm new to Pico-8 and Lua, but have already fallen in love with it. I've already begun following the community on the BBS, subreddit, and Twitter, and I see a lot of questions about how to perform specific tasks that are necessary for almost every game. Anyone who has ever used a game engine previously may have had a lot of the basic things such as controls, animation, collision detection, or even AI handled for them, so they may not know how to roll their own code for such things.
I'm currently working on my first Pico-8 game, and have decided to document the process, and how I personally overcome various problems. Do know that my way is definitely not the only way - there may be solutions that work better, perform better, have smaller token counts, or are more elegant in general. These are just the solutions that I came up with. There isn't really any 'right' or 'wrong' per se, as long as it gets the job done, with the exception of 'lower token count = better' due to the limitations of the system. So, I'm going to try to solve these problems in the smallest possible token count that I can come up with.
[b]Movement:








I've seen some questions about how to do collision detection in Pico-8, so figured I'd make another bare-bones demo, this one demonstrating collision detection with map tiles and/or world bounds. The function itself is 24 lines and 125 tokens, and includes flags for turning collisions on or off on an object (such as the player). Here's the full function:
function cmap(o) local ct=false local cb=false -- if colliding with map tiles if(o.cm) then local x1=o.x/8 local y1=o.y/8 local x2=(o.x+7)/8 local y2=(o.y+7)/8 local a=fget(mget(x1,y1),0) local b=fget(mget(x1,y2),0) local c=fget(mget(x2,y2),0) local d=fget(mget(x2,y1),0) ct=a or b or c or d end -- if colliding world bounds if(o.cw) then cb=(o.x<0 or o.x+8>w or o.y<0 or o.y+8>h) end return ct or cb end |




This is a very simple animation function that anyone can use in their games. It's a bare-bones demo to keep everything as simple as possible. The function itself is only 14 lines and 74 tokens, and works like this:
anim(object, start frame, number of frames, speed (in frames per second), [flip])
In the demo, the object is the player, but it can be anything. Start frame is where the animation to be played begins (so in this case, moving left/right starts on frame 6, so we have anim(player,6,[..])). Number of frames is how many frames in that animation to play. We have 3, so anim(player,6,3,[..]). Speed is how fast the animation should play in frames per second (I have it set to 10 here). Lastly, [b]flip



What is it?
It's not a game, but rather a framework for a specific genre of games ala Pac-Man and Burgertime. It's a complete skeleton framework with all of the basic functionality to create these types of games.
Features:
- A sample map with collision detection
- Outside of map bounds = collision; nothing can move out of bounds
- A player control system with automated assisted controls (it's difficult to line up exactly with a new corridor, so the controls will auto-correct to anticipate and compensate for this when a collision is detected)
- Enemy AI and movement in "oldschool" style; it does not use A* or other complex pathfinding algorithms, but instead evaluates the closest next direction to move in when it detects an intersection, which is what the oldschool games did.

