For the past three years, I have created electronic new year cards using pico-8.
I've posted my card for 2023 before, but I forgot to post my 2024 card! So in this blog you can see the carts for the 2024 and 2025 new year carts.
The code is not pretty at all, but feel free to use it if it helps!
New year 2025: Year of the snake!
New year 2024: Year of the dragon!
Skilled Explorer Creeps 'Round Every Tunnel (S.E.C.R.E.T.)
This was my submission to the 2024 Github Game Off.
You are an explorer in some secret caverns or something.
Itch: https://lumbar527.itch.io/skilled-explorer-creeps-round-every-tunnel
Controls
⬆️⬇️⬅️➡️ to move.
❎ to shoot.
🅾️ to reload.
Tab to switch between gun and torch.
Map Editor
This is my first game. Pico-8 is awesome. Sorry for my very poor skills in audio. Looking forward for your feedback!
Enjoy!
Controls
Arrows to control the jester.
Rules
You are the king's jester and he needs your help. All 36 stories of the castle are overrun by evil!
[8x8] | |
you get your own sky of stars! why not make some pictures in it? i'll name them for you! (i wll not be explaining the glyphs. that's up to you!)
your stars, star names, constellations, and constellation names are not guaranteed to stay the same across revisions. if you're attached to yours, make sure to keep backups of your cdata and the cart itself!
this cart is incomplete. let me know if you run into problems with the presentation, or other bugs! more vfx and sfx are planned, plus music, among other possibilities
a selection of known issues:
- there is no boundary. if you get lost, reset the cart
- you cannot make more than 124 links. if you do, the later ones will get lost
Collision Template
This cart is a small template for ground collision!
I struggled with learning collisions for about two years in the past. And I do not want for ANYONE to go through that, EVER!
This is the cart I used to learn. I really hope it will help someone, it sure helped me!
The comments I left in the code try to explain what's happening as best as I could
Quirks
I used table:function()
instead of table.function()
.
What this means is that the function is called with a secret argument, self
!
I also used num \ other_num
instead of num / other_num
.
That is floored division
! If either numbers are decimals, they will be floored down.
Verdant Vanguard
Oh no! Your forest has been invaded by nasty creatures!
It is your duty to save it.
Verdant Vanguard is a turn based, endless little game about protecting what's yours, it is a proof of concept. It is also my first pico8 game in more than two years! I hope I improved since last time hehe :3
The game is published under the MIT license and it's cleaned up source is available on my CodeBerg
Happy New Year 2025
It's that time of the year again, 2024 is coming to an end.
The fireworks are a small particle system, 1200 particles at 30 FPS. Although it looks nicer and smoother at 60 FPS, despite optimizations, I couldn't get enough sparks on the screen without having frame drops. I know, it could have been further optimized. Precalculate sine table, etc.
I wish you all a good transition into the New Year (in Germany we say "Guten Rusch!"), a happy New Year, and may your new years resolutions be fulfilled. Wishing you happiness and health.
I was reading the Pico 8 manual and I was surprised to see that the pack()
and unpack()
functions aren't in the manual. I understand that they are Lua functions and not necessarily a Pico 8 API thing but it still feels like they're important enough to add here, especially since they are a great alternative to use a for loop to manually unpack these elements. Just here to ask if they could be added so more people can be aware of them please !! Especially the small percentage of people who do want to download the manual (hi) haha
I would like to preface this is an issue in version 0.2.6b, both in my downloaded executable of Pico 8 and Pico 8 Education Edition
So I have been reading and re-reading the pico 8 manual for the past weeks now and I have noticed that there is a really big discrepancy in the way that sub()
works vs how it is presented. The manual establishes that:
When POS1 is specified, but not a number, a single character at POS0 is returned. PRINT(SUB(S,5,TRUE)) --> "Q" |
This does not seem to be the case, however, as using non-numerical values such as a boolean, nil or a string all still will return a string from the index all the way to the end of the string. I tried looking information about this in the forums and it seems like at some point this behavior was indeed implemented, but in another update it seems to have been removed. I don't know if this was intentional or if this is the product of a bug/oversight but it would be nice if the change was reflected in the manual.
Yarn Cat is a slow oldschool puzzle game about a mysterious cat that is somehow also a ball of yarn, travelling through odd lands to bring love to other cats. This is my first pico-8 game, and the first game I've made in about 20 years.
Through 66 levels across 8 worlds, your goal is use your body and the yarn tail you leave behind to interact with buttons, fairies, and frogs in just the right sequence to magically awaken a sleeping cat and give them a nuzzle. But your tail might also get in the way and block your path, so experiment, mess around, and maybe try to think ahead!
Trying a simple platformer for a first project, using the Nerdy Teachers tutorial. Second draft, adding different surfaces to try physical effects for play. Added artwork for characters / animation not yet coded or added to the map.
Next steps -
-
Code to spawn enemies with basic patrolling behavior and fireball projecties
-
Code to interact with NPCs for text box info
-
player health and health bar
-
Borrowing key/lock code from another project to use a shovel as a "key" to dig out an opening
-
design platforming sections using empty upper corner map space
-
design sound effects for jumps, NPC speech, enemies
- music
A slightly outdated animation of a skill unlock in an old relaxed and exploration-based platformer I have never finished. I implemented that as I was learning the existence of bitplane manipulation and redesigned the whole game's palette around it (4 color ramps of four colors: white, red, green and blue).
Pong! The early days of gaming. Before my time, for sure. Pico-8 feels like the right platform to channel creativity with all things retro. I'm glad I picked up a copy of it.
This is the first of my retro game remakes. To help me improve my skills as a coder, artist, musician, and game designer, I started a little personal challenge to recreate these old games of the past.
Freestyle Chess == Chess960 == Fischer Random
NICE: Nice Is Camp39's Engine
The Good
- pass n play and board flip option
- clean interface & themes
- play against computer
- opening book for standard chess
- endless openings with Freestyle Chess (press up while on chess960 to view positions)
- all rules, including 50 move and 3-fold repetition
The Bad
- my first engine ever... its a little slow
- my first engine ever... its a little dumb
- maybe 2.0 will be better!
About NICE
[hidden]
This was a real accomplishment for me and is my first engine. The move generation follows the tutorial of Bluefever Software video series on Youtube: Programming a Chess Engine in Pure Javascript.
When it came to the search functions I learned a ton by following the book: Chess Algorithms by Noah Caplinger.
The limitations of Pico-8 though make for a challenging adaptation of these types of tutorials. (translating from zero-based arrays can give some crazy nasty bugs). The speed limitations make some variation strategies useless e.g. "killer moves" only make sense with a depth of at least 4. It was a really cool experience and gave me more insight into the game.
I liked the board layout from cart #quickchessyness-4 by @Adam_Howell so much that I copied it :)
This cart will need some updates however. I was unable to get quiesence to work without a move taking FOREVER. Maybe due to my move ordering, maybe due to the evaluation function, maybe due to lots of things. Its all very complicated and hurts my brain since it is recursive at iterative depths. Hard to pinpoint problems like that. If any kind soul wants to offer tips, I'm all ears!
@Krystman of course released the fabulous Pico Checkmate, cart #54038 6 years ago. I definitely looked through his code for clues but couldn't manage to find a way to cut off a search if time got too long. But I did follow his lead and purge illegal moves right off the bat instead of making and taking them. Without a full quiesence search though, I don't think NICE will stand a chance against Pico Checkmate.
This cart, while not having the best engine still has some nice features. Chess960 is chess but with almost random starting positions. Its just like standard chess with the exception that castling can be a little weird. Just remember that king and rook end up in the same ending positions as in regular chess, regardless of where they started. Otherwise, same rules apply. This eliminates the same opening every time you play against the computer. Also, to prevent that from happening in standard chess, I coded in a small opening book with response options being chosen randomly so that you can get different responses even if you play the same.
I hope this cart is popular with hand-held users (I don't personally own one). The pass n play is not something I've seen on other chess carts and I imagine a game of chess on a long flight or bus ride would be cool, but playing upside down is a bit awkward.
Crazy idea: what if there was a cart with the move generation and graphics already on it (and optimized to the max) and then two different users could put in a tiny engine each and let them battle. Maybe more realistic on picotron?