I was recently informed of a new bug in my old game, sybil's tail. after doing some research into it, I discovered the cause. I had a global variable set up that could be set at any time to cause the screen to "flash" once, on the next frame. presumably to conserve tokens, I wrote it like this:
flash=flash and rectfill(0,24,128,104,7)
this line calls rectfill if flash is true, and assigns the result of rectfill to flash. as long as rectfill returns a falsy value, we're good.
now. I understand this line will send me to coding hell. but it seems, as of 0.2.2c, rectfill and rect return 0, which is not a falsy value. if this is an intentional feature, I will own up to my sins, patch the game, and move on-- I'm not going to demand the API honor such a silly corner case. but given that circ and circfill still return nil, I suspect it is in fact a bug
if I could get a confirmation whether rectfill returning 0 is intended behavior, that'd be much appreciated. I may still patch the game, but if the problem isn't going to go away, I'd probably opt to do it sooner rather than later
no, I'm not referring to giving the do in for loops and while loops a free pass. rather, I'm referring to the rarely-used naked do block. the primary function of the do block by itself is to arbitrarily introduce a new scope. for example, a code snippet I just wrote:
do local yclp=127-17*pizzapower clip(104,yclp,127,127) end
this makes it clear to the reader that I do not intend to use yclp at any other point in the program. In this case, it becomes fairly obvious that I lifted an inline expression to its own line for clarity's sake. however, the do construct here eats up a token, making using it disadvantageous. considering that the do block's only real use has to do with usage of local variables, and the local keyword already has its cost annulled to encourage its use, I think it would make sense if there was a similar exception for the by-itself do block. what do all of you think?
After a freak laboratory accident, ninja-in-training Nina finds herself trapped in an alternate dimension where the walls shift each time she jumps. Now she must collect the scattered gears to fix this shattered world and escape! But with 32 challenging stages to outwit, that will be no easy task...
hey all!! sol here. it's been a while since my last game, but I haven't been resting on my laurels. this time around, I've made a puzzle-platformer with a focus on fast gameplay and a novel mechanic-- each time you press the jump button, the walls will shift between the foreground and background! you can also cling to walls and jump off of them to reach greater heights. I've built a lot of really tricky puzzles around this, so I hope y'all enjoy!
I would also like to give a special shoutout to my testers, whom I owe a debt of gratitude for playing the earlier, more frustrating builds of this game. It's thanks to them that I can present this polished final version to you!
and of course, feel free to reach out to me either on these forums or on twitter if you have any questions or comments!
have fun and good luck!
as a lot of us are brutally aware of, pico-8's limitations are very fun, but can also have a serious impact on code readability. one particularly nasty problem is that when saving tokens, descriptive names for constant values are one of the first things to go out the window. Up till now, this was an unavoidable problem. However, with the recent introduction of the INCLUDE directive, pico-8 now has a preprocessor and a model for how preprocessor directives should work. I'd like to propose a DEFINE directive for supporting simple text substitution.
for example, let's say we are doing a simple branch based on a cel value:
local c=mget(x,y) if c==4 then ... elseif c==5 then ... end
it's impossible to even guess what this code does. but it's hard to argue that adding "local health_pickup=4" is worth the tokens.
instead, if we had a DEFINE directive, we could change the above to:
#DEFINE health_pickup 4 #DEFINE coin_pickup 5 local c=mget(x,y) if c==health_pickup then ... elseif c==coin_pickup then ... end
this would be flattened to be identical to the first code snippet when exported to p8.png. the result is far more readable, and uses no extra tokens. I think DEFINE directives should be able to be placed anywhere, to enhance readability, but I don't believe they need to be scoped, or nestable for that matter. since it'd be possible for a macro name to shadow a variable name, I'd suggest syntax highlighting, changing the text of a macro usage to orange, which would make accidentally using a macro when you meant to use a variable much rarer.
what do y'all think? is this a feature you would like to see in pico-8? I'm trying to get a discussion about this going, so ideas and feedback would be very welcome!
Sybil's Tail is a tiny, 15-30 minute long platformer made for PICO-8. Run, jump, slide, grab, and toss your way through 6 bite-sized areas as you search for a mysterious meteorite that fell nearby!
hi there!! after 4 months of working on it, I've finally finished my first PICO-8 game, Sybil's Tail! this project was a lot of fun to work on, and getting everything to fit into the 32k of cart space required a lot of tricks to make things work right. a large reason it took so long was all the rewriting and compressing it took to get in all in there. but! the result is exactly the game I set out to make! I hope y'all enjoy exploring this little 8-bit world I've made.
it's also on itch here, which includes native exports, and the soundtrack. speaking of, I would like to extend special thanks to @kitorchid, who made the incredible cover art for the soundtrack, and @osmoru, whose adorable artwork formed the basis of the cartridge label design. In addition to those commissions, I also received wonderful artwork of Sybil from @MarziManed and @_pexl, who are both very cool artists that you should check out as well! And of course, I would like to thank all testers and of course my friends, without them none of this would have been possible.
some statistics (from version 1.0):
number of songs: 9
number of music patterns: 33
number of SFX: 63
non-empty map tiles: 3180
sprite animation frames: 99 (computed at runtime)
bg animation pixels: 60
number of object types: 25
number of in-game objects: 734
code size prior to data interleaving: 19435 bytes
in other words! for PICO-8, it's a big game. sometime I'd like to write a blog post about all the tricks I did to squeeze everything in there, but for now, I'm just happy to finally have it out here. hope y'all enjoy it!
[UPDATE version 1.1]
The game now makes use of the "secret" pico-8 color palette-- the result is far more colorful, while still retaining the color contrast between the day and night segments. additionally, balloons and ribbons now respawn, making the game a tad less frustrating. a couple bugs have also been fixed, and several have been added.
for the record, this is intended to be the last non-bugfix release for the game-- so I hope y'all enjoy it!
[UPDATE version 1.1.1]
1.1.1 is primarily a bugfix release, and addresses the following issues:
- mobs can no longer kill sybil in cutscenes
- fixed issue where picking up mob and ribbon at the same time would cause mob to appear over sybil's head
- fixed an overflow bug that would cause credits screen to disappear after a while
- fixed issue where the sound effect for a hard post-jump landing was used for soft landings and vice versa
- fixed issue where sliding speed would not be reset when respawning
- fixed issue where respawn position would be noticeably offset while in fullscreen mode
- fixed issue where color of some signs would be inconsistent/flicker
- removed graphical distortion that appears when the final boss kills sybil. too many players mistook it for a genuine bug…
- color 2 is no longer mapped to secret color 4 during the daytime
- carrying a mob into the starting area during the day will no longer cause their colors to glitch out
- sybil's lighting now reverts to normal as she enters her house at the end of the game
[UPDATE version 1.1.2]
1.1.2 primarily is meant to work around some bugs present in pico-8 0.2.2c. some previously unreleased changes have been included as well.
- fixed issue where after hitting final boss, screen would turn permanently white
- fixed issue where text was out of alignment due to tabs being ignored by print
- addressed oversight where the white highlight pixel on the golden radish sprite was on the wrong side
- touched up mob sprites slightly to add a bit more charm and clarity
- added a sign in final boss area to further hint at how to fight back