Printo

Printo is a homebrew function I've made over the course of a few projects. It has four different outline options:
-nil = simple outline
-0 = no outline (best to be used for centering)
-1 = lazyline (inspired by lazy dev text outlines)
-2 = crazyline (creates an ultra-thicc outline)
It also has the ability to center text, including ascii characters, unlike most centering scripts. Simply type c into the x value when calling Printo.
I've fully intended for printo to be copy-pasted willy-nilly, feel free to use it in any project.
Code:
printo(text,x,y,color,outline_color,outline_type) --like this: printo("printo",c,62,7,1,nil) |
And then copy this code into your functions tab, or at the bottom of your draw tab.
--printo function printo(tt,px,py,cr,oc,ty) tt=tostr(tt) [ [size=16][color=#ffaabb] [ Continue Reading.. ] [/color][/size] ](/bbs/?pid=120655#p) |

Resolved
Help!
I recently made this little function to show the map at any size.
However, I am not satisfied with it. It does not represent decimal sizes properly,
(those weird breaks in between) it does not show any width/height except 16/16.
Also, looking back over my code, I am pretty sure it could be done better.
Any help or suggestions welcome.





Hello.
Two things, really. First off there is this wonderful program written by @pahammond that compresses source-code.
https://pahammond.itch.io/gem-minify
For long variable names it does a great job, changing: apple=25
to _a=25
which I feel could be even smaller with a=25
However it does not seem to compress variables that have 2-letters in them, for instance: te=25
compresses to te=25
.
Yep. No compression at all.
So - either I'm not using the program correctly - or do you know of a Pico-8 minifier that will exhaust the single-character letters a-z for variables before going to 2-characters ?
If you must know I'm working on a useful function for everyone (no file access, no worries) :) yet I want it really compact so it's easy to slip in your own code.
What can I do in this respect ?





How do you deal with range overflow? The numbers beyond 32767 warp to -32766 in pico8's 16 bit signed system when calculating. This is sometimes enough, but not always. For example,
function distance(x1,y1,x2,y2) return sqrt((x2-x1)^2+(y2-y1)^2) end |
will sometimes (very often actually) return 0 as a result of taking sqrt of the negative wrapped number. This is occasionally crutial. Is there a workaround to compute this as if this was an unsigned system?






un jeu confectionné par GG & PieRo durant la Spooky Game Jam par l'association Strasbourg Gaming du 11 au 13 novembre 2022.
Il va falloir traverser la maison, descendre les escaliers et se rendre aux toilettes. Uniquement avec du courage et sa lampe de poche.
Gauche et droite pour se déplacer et C pour sauter. Merci d'avance pour vos retours.
--in english (ou à peu près)
a game made by GG & PieRo during the Spooky Game Jam by the Strasbourg Gaming association from November 11 to 13, 2022.
You will have to cross the house, go down the stairs and go to the toilet. Only with courage and a flashlight.
Left and right to move and C to jump. Thanks in advance for your feedback.
A small simulator of Prey Vs Predator.
All creatures can only move in one of four directions: up, down, left, right.
Moving consumes an energy point.
If a prey runs out of energy, it can't move that turn.
It may choose to not move even with energy.
If any of these happen, then it gets 1 energy point.
Predators also can run out of energy. It they do, they die. To get energy, they need to eat prey. If they do, they get full energy and 2 more predators appear.
The objective of prey is to outlive the predator.
The objective of predator is to kill all prey (yes, I know that they die after that. Just ignore that for now).
If a prey is next to a predator (not diagonally), has energy and wishes to move, it will move away from the predator.
If a predator is next to a prey (not diagonally) and wishes to move, it will eat the prey, but if it had 1 energy before eating, the prey survives and the predator dies.
If none of the above are met, the creatures will move around randomly.


It's been a while since I've posted last, but life has been hectic. Amidst all the chaos, I've managed to find some time to work on my next core mechanic: anxiety!
How the Anxiety Mechanic Works
The anxiety mechanic is easy to understand: get within range of a source of anxiety, and it will make your meter rise! Staying away from all sources of anxiety will lower your anxiety over time, affected by the internal 'courage' value. If your meter reaches the maximum, the anxiety source will push the player away from itself, becoming an obstacle to movement.
This simple-ish mechanic allows for some interesting interactions between two competing sources of anxiety pushing the player around, puzzle-stealthing, and more. Also, inverting the math of anx_push
can make it pull instead, adding a second layer of interactivity with the same mechanic.
Gameplay
The mechanic itself uses a line created between the player and the anxiety source to form the vector that will be followed when pushed by the anxiety source. It took some experimentation to learn how to use sin()
, cos()
, and friends to get what I was aiming for, but the result was fun!
So i watched lazy devs' youtube shorts about how he makes his shmup levels. In there he mentioned that he has different pico8 cartridges that work as tools for editing stuff like sprites, bullet patterns and level scenery. I coded a 2d space line editor that can be used for raycasting. How can i transfer all lines data to an another cartridge for use? There is a big "lines" table that containes tables with individual line data. I know that you can't transfer actual code or tables between carts so lazy devs should have used something different.


This is an early test of a kart racing game I'm working on. I have no idea if I'll ever finish this, but this is what I have right now! I followed @Mot's tutorial, but it didn't have any details on how to make a car controller at all, so I improvised. The code is really messy...
Enjoy!!


Pico Clash v1
Pico Clash is a two player card-based real time strategy game.
There is no AI implemented, so you have to find a second player to play the game.
There is not much polish done, but the game is playable.
The game is inspired by Minion Masters or Clash of Clans.
Controls
- Move cursor with arrow keys.
- use
x
to cycle through cards - use
o
to play card at cursor position, if you have enough mana
The goal is to destroy the enemy tower.
Todos
- nice start screen with explanation
- more cards
- more maps
- staging screen where each player can configure its deck
I'm open for collaborations on this. Better GFX or discussion on improvements would be welcome.


How to Play
Use the directional keys to move the “Lady Bug” 🐞 and eat all the white seeds (dots) on the course.
Don’t let the 🐞 be eaten by the predatory “Enemy Bugs” 🪲 that chase the 🐞 around the screen. Use the turnstiles to allow the 🐞 to dodge the 🪲.
The 🪲 cannot turn the turnstiles. If the 🪲 hits a 💀, it disappears and is sent back to the bug box in the center of the coarse.
When the 🐞 hits the skull 💀 or is eaten up by a 🪲 , it disappears.
When players lose all the 🐞, the game is over.

Scoring
The scores awarded when various things are eaten up by the players’ 🐞 are as follows :










PicoPicoSketch is a drawing tool I made with my boyfriend to learn how to use PICO-8.
'helpbox' is referring to the box housing the controls list at the top of the screen.
Controls clarification

move - Moves the cursor.
draw - Paints the selected brush at the cursors location.
brush - While held left/right cycle through brush shapes and up/down toggle eraser.
RWGB - Secondary arrows toggle between the available colours.
wipe - Clears the canvas.
shade - Toggles between darker and lighter colour shades.
help - Toggles the controls info box.
*Excessive use of the draw tool will lag pico-8, this can be mitigated by the wipe tool.


Hello.
First off, I am aware that you can poke a string via P8SCII:
@addrnnnn[binstr] poke nnnn bytes to address addr
!addr[binstr] poke all remaining characters to address addr
Yet that is a little unusual for us beginners and I would like to suggest @zep that you add this ability to poke()
so you can have poke(addr,string)
which would take the entire contents of that string and convert every character to a byte and POKE it in the memory location stated.
In return this should also have PEEK thus: string=peek(addr,len)
which would transfer the contents of memory addr
with a length of len
to the string in question.
Bonus for poking arrays and peeking arrays additionally.
poke4(addr,array[])
which would normally take the array which uses 4-bytes per element and stuff that into memory addr
Same with peek array[index]=peek4(addr,len)
However these other two would be nice, poke2(addr,array[]) and array[index]=peek2(addr,len)
where in this case array[] would not contain a decimal value and only return a number from -32768 to 32767.
Hello.
-- clear screen cls() -- remap screen from standard -- 0x6000 to 0x8000. does not -- work. poke(0x5f55,0x80) -- plot a single pixel there. pset(0,0,7) -- should return 7, does not. ?peek(0x8000),0,64 |
I was not aware there was a limitation for poke(0x5f55),mempage
to ONLY work for the regular screen (0x6000) and the spritesheet (0x0000) - no other memory location !
I would like to request, @zep, that the memory chosen for both poke(0x5f54)
and poke(0x5f55)
can be anything at all, especially allowing for 0x8000
0xa000
0xc000
and 0xe000
It would sure help me a lot in my code. All of these in fact: pset(), pget(), line(), rect(), rectfill(), circ(), circfill(), oval(), ovalfill(), cls(), print(), spr(), sspr(), and clip().
Would anyone else like this ability ?


Be aware, ZEP just fixed this. Thanks, Zep !
Hello.

If you click on your user name (see the golden arrow above) and icon that appears in the top-right-hand corner of this website (Lexaloffle), a small menu will appear beneath that.

If you click on Profile
you get a page that shows all your posts and cartridges.

To view just the images of cartridges you've written, click on Cartridges.

And it will show you the cartridges you've written.
OK now here's the problem. If you scroll down a bit:

You will see carts you've not only written yourself but carts you've written on OTHER people's threads.
May I suggest there be an option to list ONLY the carts that you've written yourself - where you are the author of the thread.


A sort of computer virus.
It is able to spread and has a maximum depth of 3.
It won't spread to other hosts but is able to travel up between folders (don't know why).
As soon as you run it, it begins the process, so be careful, I guess.
Cures
Deleting the cartridge,
Renaming everything important to you so that the name has a -(hyphen), including folders,
Or putting the cart in a folder with nothing in it.
UFNR doesn't (in this case) stand for anything.
Definition of computer virus (for the nerdy ones): a piece of code that can duplicate itself, with usually a harmful intention or effect. UFNR can spread but doesn't really do anything else.


Lina: A Fishy Quest
This project is an entry for the 20 Seconds Game Jam!
Controls:

Story:
Sometimes our little witch needs some relaxation and Sour Cream demands fishes for dinner, so let's help Lina find the perfect catch! 🎣
Gameplay:
Hook fishes to earn points, fishes from the deep earn you more!

Avoid the Junk if you can, it will reduce your score!
You have 20 seconds to earn the most points!
Bubble streams will move everything up or down depending on their direction! Be careful, your hook is deployed all the time, move it away from junk floating on top!
Support:
If you like my work you can purchase the standalone binaries for this game! If you would like to see more games, gamedev blogs, pixel- and voxel arts check out my Ko-fi page, where you can support me if you want!



This isn't really anything special, just a little quality of life improvement I've found handy and keep in a file of utility functions I use frequently.
Overloads sub()
so it works on arrays as well as strings. I find it useful to be able to slice and dice arrays in the same way as strings and especially now that we can index strings with square bracket notation the difference between them isn't always important. I've got something with a length and I want a sub-section of it. Makes sense to use the same function for both, in my mind at least.
_sub = sub function sub(lst, i, j) if type(lst) == 'string' then return _sub(lst, i, j) else local r = {} for n=i,j or #lst do add(r, lst[n]) end return r end end |
Creates a new array without modifying the original. Doesn't handle negative indices because I've not really needed them so far but it would be easy enough to add.
Potentially a feature suggestion @zep? I don't mind writing the function myself but I'd also be happy not to. But maybe I'm the only one who finds it useful.


Demons have invaded the village of the necromancers! Help Proserpina and Jack, her trusty Will-O'-the-Wisp, to destroy them all.
Proserpina's Quest is a Breakout Game.
Controls:
Proserpina's Quest is playable with keyboard, gamepad or smartphone.
Hit Jack ❎/[x] to destroy all the demons!
Take potions and magic items to slow down Jack, make him more powerful,gain a life or gain a time bonus.
Credits:
Design, Art, Code: Fred Osterero
Musics: Nicolas Grandgirard
Tales from the Necropolis
Do you want an other adventure in the dark world of the necromancers? So play









