Log In  


Was thinking of some things I'd like to see in future PICO. Reiterating the post as quite a bit has changed since its initial writing.

Some of these suggestions are possible, others are not. What are some of your suggestions that you think would be acceptable for the next update in Pico-8 ?

Going to start latest suggestions as replies to this thread as this one post has gotten rather large.

Here we go ! First off, 2 errors:

!! Fix parenthesis error. This gives error: IF (K=="(") X=X-1 ... gives error because parenthesis is character to check.

!! Fix error with modulos when using high negative numbers. ?-32767%10000 yields 7233, incorrect.

added 10-14-19 some carts Some carts use the keyboard reader and disable P so it's impossible to exit if you brought it up in SPLORE. Suggest you add additional keystroke of CTRL+P and/or CTRL+C to exit cart if run from Splore.

this may not be a good idea, I don't know. Consider removing number "type" entirely in favor of all variables being treated as strings. Naturally if math is to be considered, then they can be used as such. The advantage would be since strings essentially can be any size then numbers far exceeding 32767 would be possible, both to the left and right of the decimal point.

In splore, add folder that shows last carts played in order of time they are left up. The cart that is played the longest always appears at the top.So if the console shuts down accidentally, they can find the last game they played via this extra list.

added 10-11-19 undo is a little twitchy. Suggest that if a whole line is undone it does not immediately jump to the last line edited but stays with the current repaired line first - either that or when CTRL-Z is pressed, delete only 1-character at a time.

Suggest options turn on/off for particular cart to treat NIL as error. That is, if you said, A=B and b=nil it would crash in an error. Also suggest opposite, if string tries to equal nil you would get "" if number variables tries to equal nil you would get 0, so no error would ever happen with nil, and once again this would be optional.[/color]

Use "#" for hex and "$" for binary thus a=#b a would then contain a string of the hex value of b. a=!b a would then contain a string of the binary value of b. Sub is also accepted. a=#b(1) would mean that a contains the left-most character of the hex value of b. a=#b(2,4) would mean that a contains the 2nd and 4th characters of hex value of b.[/color]

Use ! as logical NOT. a=true a=!a a now contains false.

Add new option to PRINT, SPR, SSPR, RECT, LINE, CIRC, RECTFILL, and CIRCFILL. Maybe just use ROT() command. Rotate the next thing drawn at an angle ROT(a,b,c) where a is the angle and b is the focus. if b and c are not used, it rotates in the center of the drawing element. If not, then it just an arbitrary location based on B and C.

Have function to determine if a point is within other points, rectangle, hexagon, octagon, etc. isinarea[a] where is a 2-dimensional a[][] array that contains numbers of each point to the object in question.

added 10-07-19 some older languages made use of error catching and the ability to make use of ERR and ERL where ERR was the error message and ERL was the error line number where it occurred. Error catching is important in carts that might try to do math with a NIL value.

added 10-06-19 good suggestion by Xii to add ability to merge frame-drawing. That is, you can draw one frame and then draw another frame over it changing it from 60fps to 30fps but with the added benefit that both fields are blended, including colors. Thus, WHITE pixels on one page and black on the other yield GRAY final pixel result. Affects visual only. Reading the pixel back gives black were that the last color plotted.

added 09-28-19 add record array ability to graphic elements thus. points={circ(50,50,50)} so array points[] will now contain a 2D array that has every single point made in the drawing circle starting from the top. Same with spr(), sspr(), rect(), rectfill(), circfill(), line(), and even print(). And of course the element is not actually drawn at all.

added 09-27-19 add high speed distance formula, uses one integer and 2-arrays, a, b[], and c[]. A is return value. B and C are 2-dimensional array comprised of numbered items. Calling A=CLOSEST(B,C,D) the return value is the single number stored in that 2-dimensional array that is closest to index from a.


Here you can see in the example that there are 6 points. Let's label them:

objx=[] objy=[]
objx[0]=2 objy[0]=0
objx[1]=5 objy[1]=1
objx[2]=1 objy[2]=2
objx[3]=3 objy[3]=4
objx[4]=2 objy[4]=5
objx[5]=6 objy[5]=5

So we are checking to see which object is closest to #4


the return value will be 3 as this object is closest to it. Could also write FARTHEST() function.

In the sprite editor have CTRL = and SHIFT CTRL = turn on selection and expand it by one character in that direction.

In the map editor, show what flags are lit (the 8 colored buttons) when cursor is atop a sprite tile.

Option in Sprite Editor to not just use 8-colors for sprite-flags but ability to enter 3- or 4-character text as a unique flag. This will definitely expand the ability of recognizing unique sprites that go beyond the standard 8 flag definitions.

added 09-26-19 add char { to read only first character of variable. {"hello"="h" {false="f" {23="2" } is opposite and reads last single character

add spread() command. IE: spread(cards,52) will create an array called cards and starting with index 1 will give them a value from 1-52. a negative number will reverse the order (cards,-52), 1st index is 52.

ability to run maximum speed. that is remove all stops and run code as fast as possible where it still pauses via update() draw() flip() or yield()

give every command defaults. For instance pset() with no arguments will plot color 6 in center of screen. give defaults to every single command.

Add to PRINT ability to center text, that is, by giving the x-value a string such as "c" a flag it will automatically calculate for the center of the screen based upon the string entered. An advantage will be a string that has one or more \10 in it. It will determine the single longest line and center accordingly. Also can have "r" for right-justification.

Add new command DEBUG(pos,color,test). This will plot 1-height 8-across pixeled bars at the bottom of the screen in user chosen colors and based upon events. IE: debug(0,8,"a>0") every draw() or update() cycle will draw a red line from pixel 0 to 7 if a>0. If not, it will plot BLACK. It accounts for local variables as well as global. Can have 16 in all.

Add two new commands, varload(vars,filename) and varsave(vars,filename). The argument is: varsave("test",filename) will save off every single variable and array that starts with those 4-letters "test." If argument is "" or nil then saves off EVERY single variable that contains a value, varload() will load them back again. if filename is blank and using varsave() then it saves off to a temporary memory, if varload() with no filename will load back from that temporary memory location. No limits. Can and will save and load EVERY SINGLE variable used in a cart.

Add two new commands, bound() and wrap(). Bound does exactly what MID() does. Wrap will take a number and wrap it around IE: x=wrap(1,126) if x=0 then x will now equal 126, if x=128 then x will now equal 3. Checks for big wrap-arounds too, x=4932 and then x=wrap(1,126) it will still work and give correct results.

Add option to load/save state. This can be controlled both by the player and in the source-code. SAVESTATE(n) where n is a value from 0-9. Save with SAVESTATE(n). Literally makes a snapshot of the entire PICO system, screen and all, and saves it to temporary memory location 0-9. LOADSTATE(n) recovers state - absolutely everything EXCEPT the line number the program is running at. If no argument is chosen, 0 is selected. During execution of cart, press F2 to save state, F3 to select a state number or import/export/delete, and F4 to load state. State data is saved via users/appdata() so it is always available until removed via F3.

Option for split-screen debugging. That is the upper portion of the screen is output and lower portion is debug. In debug mode the command running is highlighted. Standard keys apple. F8 to do this command/function but stay in this local or function. F9 to enter this command/function leaving this one behind. F10 to terminate debug and stop program here returning to command mode. All during this time the coder can also enter new values for variables to see how the program reacts to it.

Turn off mouse-cursor in editor when typing. Turn it back on when physical mouse is moved or clicked. Macintosh does this by default.

Fold functions, that is, you can press F9 or F10 when on a FUNCTION() line and it will close up only showing ">" at the front to show the contents are hidden. It still leaves any lines above or below the function visible including the single FUNCTION() line itself.

Add command scramble() usage: scramble(array,key). This will randomly rearrange each of the items in the array based upon the seed of key. To scramble, use positive number key. To unscramble use negative same number key. Use 0 to choose a random number that cannot be unscrambled later, IE: scramble(cards,0). Array cards() will now have each of its items rearranged randomly.

added 09-23-19 option for two new variable types. One can have value from 0-65535 (16-bits) the other can have value from -2147483648 to 2147483647 (32-bits). If this is possible, it should also be possible to have high floating. 1E+38.

Currently CTRL+number keys (0-9) currently do nothing in editor. Suggest they jump to tabs if tabs are set in sourcecode.

Right-clicking the mouse with FILL mode in sprite editor currently just fills, same as left click. Suggest it eyedrop the color as it does in normal pen mode.

Add option to press CTRL-C during cart execution to not only stop program but jump the editor to the exact source-line where it was halted. Resume from here is available if desired.

Add new command POLYGON(), POLYGONFILL. Usage: polygon(arrayof2dpoints,color). Also OVAL(), OVALFILL(). Usage: oval(x,y,radii-x,radii-y,color).

Clear all Sprite Flags for single sprite with SHIFT-CTRL-C or some other such non-used key combination.

Change pen size with hot keys like CTRL - CTRL +. Also change edit size via CTRL , "<" smaller and CTRL "." larger. So by default you edit 8x8, press CTRL "." and then you are editing 16x16. Add CTRL "[" to decrease whole sprite page and ctrl "]" to increase whole sprite page. CTRL+P for PEN, CTRL+F for fill. Holding down left mouse button over a pixel for a short time enters selection mode. Once mouse button is released, returns to PEN mode.

added 09-22-19 option for circ() and circfill() to have arc, add argument of angle 0 to 1 or 0 to 359. IE: circ(x,y,size,color,start-angle,end-angle)

Option for rect() and rectfill() to have rounded corners, can specify depth. IE: rect(x,y,x2,y2,color,roundness intensity)


You can run LUA on the PSP-1000 models and higher. It should be possible to run PICO-8 as well.

There is a program to convert HTML to Android APK. It should be possible to run Pico-8 as well.

C++ can use variable++ to increase by one or variable-- to decrease by one. Suggest future PICO have this ability.

KEYCONFIG can only be used in immediate mode. If you try to run it in a cart, it only executes it when the program exits, this means of course you cannot use it at all for an EXE. Suggest copying over current key configuration to exports or allow KEYCONFIG inside someone's sourcecode.

Have ability to import or export graphic sections, not just all 256-sprites in one set.

[color=$ff0040]Have ability[/color] to change repeat speed for BUTNP(). Currently it's a tad slow. Likely others would want to change the initial delay for the first repeat and the repeat speed after. If it can be changed via source-code so much the better. setbutnp(1stkeydelay,repeatdelay)

This is pretty high-tech but would be nice to have. Once GIF is calculated via record video, maybe have a simple editor come up where you can delete individual frames (like where you are typing RUN) in the GIF before it is fully saved. I'm doing this in VirtualDUB currently, I think it could be done in PICO.

added 09-21-19 Option to turn off not just all sound but optional MUSIC() and/or sound effects. Some music is very good and some sound effects are very good, sometimes - not all at the same time. :) So there would be =2= menu options instead of just 1.

Also it has been proven through VirtualDUB that the animated GIFs you are saving via VIDEO in PICO-8 can indeed be compressed up to 97% the current size that you have. Might be worth investigating.


Currently hitting BACKSPACE goes back a webpage even if the focus is on the P8 cart in the BBS. Hitting the TAB key also selects from the browser. This makes a text entry mode difficult. Suggest that all non-vital keys be locked and available in the cart until focus is lost. Also turn OFF all audio when clicked outside CART would be good too - or better yet just FREEZE the whole cart until it's frame is clicked again. Whereupon it continues both with sound and position - exactly where you left it.

Right-mouse-click in the sourcecode editor currently does nothing. Suggest a menu may appear. Search, Search and replace, Undo, Redo, Copy, Paste, Erase, etc.

Add a new argument to PRINT after color. Use 8-bits for each of 1 2 3 4 * 6 7 8 9 to draw outline around text. IE:

for if only the 8th bit is set:

for if bits 2, 4, 5, and 7 are set:

for if all 8 bits are set:

for if value is -1:

(it creates a full rectangle despite the character's image)

Default to color black. If additional argument chosen, that is the outline color. This also applies to sprites spr() and sspr() so sprites can also have an automatic and colored outline.

PLEASE add a grid for the sprite editor ! Or at least make it optional - easier for others to work exact pixels in the 8x8 or 16x16 area. You already have SPACEBAR in map editor show grid, can do same for sprite editor, but make it toggle ON/OFF so spacebar need not be held all the time.

NOTICED that when you export to .BIN that it uses the default keys despite me remapping the arrow keys to the number keypad. Should be able to export using user selections - or add key configure in menu (only for exports).

added 09-20-19 allow color 16 or 255 to be BXOR. That is, 15 is automatically subtracted from the color beneath the plotter thus. PSET(X,Y,16) will plot color 15 if 0 is beneath and 0 if 15 is beneath. PSET(X,Y,15-PGET(X,Y)). Same with RECT() RECTFILL() CIRC() CIRCFILL() LINE().[/color]

Also, create new command, n=BUTNW(). It will pause execution and wait for any standard joystick keypress. N will then contain a value from 0-5. If you call it without a variable in front, it will just wait for any joystick keypress but not return a value. If you enclose a value in the argument BUTNW(n) then it will wait until that very button is pressed.

A few suggestions. These should all be achievable in the current version of PICO-8.

Add 128 to colors to plot with new color and to change that palette # to use the extended if it is >=128.
PLOT(X,Y,C) rect() rectfill() line() color() print()
if C>=128 then not only does it plot the new color but directly modifies the palette for that single color index (0-15) to reflect this. Add extra argument to rect() rectfill() and line() so can plot outline around color, use 8-bit as listed above for PRINT(), also specify outline color or black by default.

pal() can now access new palette additionally. pal(original color,new color (>=128 possible),normal flag)

Create 4 new commands that do the exact same thing END does.
To help make code more readable. Obviously you could use these out of order, say ENDIF for a FOR/DO statement, but the point is to clarify readability for programmers. NEXT can have anything after it, it is ignored. Useful so you could have NEXT followed by the variable name in the FOR/DO statement.

Allow usage of number keypad arrow keys same as arrow keys in source code editor. Same with DEL and ENTER keys. Currently these are all disabled in the editor.

Every time you run your program it auto-saves your program as either the name you gave it or a default "backup" name to a backup directory.

Have an option (click-switch) to view source-code with tabs as normal or to view them as if they weren't there (source is all on one page).

Allow clipboard to be read and written to when running directly from lexaoffle. Currently it is prohibited.

Reading and writing to clipboard could be a way to save complex work as 7-bit encoded text including complex game progress passwords and custom data work if it's a type of miniature game-maker. If you're concerned about security, only permit 7-bit reading and writing of clipboard, characters #32-#126 only.

If that's not enough, limit the selection to up to 256-characters.

Never use print a value using black ink on a black background when in immediate mode typing out 'print(a)' or whatever. Instead default to color 6 if color 0 is found to be printing color. This could be configurable if someone really does want black ink on a black background by default.

Option to read off edge of screen as -1 instead of 0 (zero).
Option to read off sprite edge as -1 instead of 0 (zero).
Option to read off map edge as -1 instead of 0 (zero).

Option to read TRUE and FALSE as -1 and 0 (zero). This would help complex logic statements that involve math. I'm not the only one requesting this.

Have Fill pattern to a character not just for cross-hatch characters but ALL special icons including arrows, circle, X, etc.

Option to base all arrays starting with zero instead of forcing it via: count={[0]=0,1,2,3}

Option for PRINT with two arguments, the 2nd argument is now not X but color. New color applies if >=128

Add command to play pitch and duration bypassing need to create sound effects via table. Most early programming languages have this. SOUND(pitch,durat,type,flag) flag if TRUE means it will wait to play the full sound before continuing to run the rest of the code. ESC will always abort sound and program early. Type is instrument type. 6 being noise. If any arguments are missing, including first, defaults will be chosen. SOUND() defaults pitch, durat, type, and flag to default values.

Option to print normal text as reverse-case so if you import the string "Hello" it does not come out "hELLO" but instead correctly "Hello."

. . .


WAIT(a,b) ... wait value of 1 means to wait 1/1000th of a second. 1000 means to wait one second. If b is TRUE then also does screen update.

INPUT will allow someone to enter normal input, string only, integer only, or real value
I.E.: INPUTS(name) ... will bring up an input with optional keyboard (if Android) and let someone type in their name, accepted with CR or even spoken through microphone for cellphone, etc.

Using $ in a variable name forces it to be a string. No need for TOSTR()
Using % in a variable name forces it to be integer. No need for FLR() or CEIL()
Using # in a variable name forces it to be real. No need for TONUM()

Add new command. RAND. Rand (15) yields random integer number from 0-14. RAND(1,6) yields integer number 1-6.

SRAND(0 or a negative number) could clear the random seed and return it to normal

SORT(V,TYPE). Sorts an array. If type=FALSE sorts in reverse. If TRUE or not included sorts ascending by default. if SORT is called with no variable before it SORT(V,TYPE) instead of res=SORT(V,TYPE) then results are sorted directly into input array

New command. INSTR() to search for a string within a substring. PRINT INSTR("APPLE","PL") yields 3.
New command. RINSTR() to search for a string within a substring in reverse. PRINT INSTR("APPLE,"P") yields 3.

New command REPLACE() to replace all occurances of string within string recursively.
dessert="APPLE PIE"
chang now contains "CHERRY PIE"
if done without argument, just REPLACE(dessert,"APPLE,"CHERRY") then variable dessert is modified directly

New command CHAR(Str,I) to return a single character of a string, shorter version of SUB(Str,I,I)
New command MID(Str,A,B) to return a parsed string position A length of B. This is different from standard SUB()

New command FORV. This is similar to FOR/Do with the exception that the variable it uses can be manipulated and could be previously defined, for instance.

FORV I=1,10 DO

will yield: 1, 3, 5, 7, 9
After the loop it would contain 11

RECT2() to draw a rectangle where 3rd and 4th arguments are not x2 and y2 but width and height,
same with RECTFILL2()

Collision check with SPR() and other SPR() by pixel.
IF COLLISION(spr1,x,y,spr2,x,y,xtra) return FLAG of 2nd sprite, xtra means to not check pixels, just 8x8 area colliding

COLLISION2 is same but returns FLAG of 1st sprite, also xtra to not check pixels just 8x8 area colliding

IF MAPCOLLISION(spr1,x,y,xtra) where x and y are true location in map. Return value is FLAG of tile sprite if collision. Like above xtra if TRUE means to not check pixels but 8x8 area colliding.

I would really like these next ones, READTEXT() and WRITETEXT()
Read and write true text files, also higher level access directory. Can only read and write to text .TXT file for security.

mesg=READTEXT("message.txt") mesg now is a single string and contains every character from message.txt file
hisc=READLINES("hiscore.txt") hisc now has an array with as many elements as in text, one per CR delimited line. 7-bit text "@clip" is also possible.

WRITETEXT(hisc,"hiscore.txt") saves an array with as many elements in there as external text file
WRITETEXT(mesg,"message.txt") if not an array, instead saves the single string as the entire single file
7-bit text "@clip" is also possible.

next line asterisks do not appear properly, replace # with asterisk when reading
DIR(dir) where dir is a string that can contain "#.txt" to see only txt files or "#" to see every file
also use "flip#" to show every file that begins with "flip"

see=READDIR(dir) SEE now has an array with as many elements as from DIR(), one per file listed

DELETE(filename) - for safety file type can only be .TXT.

RENAME(filename1,filename2) - for safety file type can only be .TXT.

There should be no ability to delete directories. Keep it safe.

WEBSITE(url) ... loads website with default browser and opens accepted so long as URL address beginning has, "www.lexaloffle.com" to confirm staying within Lexaloffle community.


Read and write shared messages. Possible to make CHAT this way.
ANYKEY() ... is TRUE if user has pressed some key, any key, usually followed up by SEND, do not wait for key
SEND(string) sends string to everyone running this program now

ACCEPT ... is TRUE if someone has sent a message remotely and not yet been received locally, usually followed up by RECV. This is on a first-come-first-served basis. If there are several messages, it gets each of them one at a time.

RECV(string) empty until someone sends a string via ACCEPT()
For safety, strings cannot be more than 64-characters each. (256 also if you like, should set a limit though)


  END --endif
  END --endif
UNTIL FOREVER - - (loop forever)
P#67574 2019-09-12 04:31 ( Edited 2022-11-14 04:58)


Zep specifically said that he would not include collision functions, or sort functions, or anything else beyond the absolute basics so that it forces you to learn new ways of doing things and learn how to better work within the limitations(He made an exception for the dithering though since it was taking up large portions of carts to impliment). There are many times where these extra functions would be nice but I think I prefer not having them. Primarily because of pico-8 I have learned 3 or 4 really good methods for calculating collisions that I use for different situations. I can't say that I ever would have gone out of my way to get that knowledge if a collision function was automatically provided. I think it's a good way for zep to force people to learn new stuff. It works really well too :-) I like to have as little "under the hood" as possible.

I do agree with fixing the bugs though. Especially the booleans being interchangeable with 1's and 0's. That one has been annoying me a lot lately since im so used to using C.

P#67578 2019-09-12 09:57

Well shoot ... maybe we'll get the 0/1 logic for FALSE/TRUE anyways. I could live with that. :)

Guess I could write some libs for some of the others. The lab of dw817 never sleeps.

P#67588 2019-09-12 17:08

Ugh, I don’t want to hear the words sleep and lab together in the same sentence for a while. I didn’t sleep at all last night because I had some work I needed to do to prepare for today, and I spent all of today working on a project in an electronics lab. I’ve been awake for 48 hours or more and I’m extremely tired, but I just got the urge to make something with PICO-8 😂

P#67609 2019-09-13 02:46

Well you'd like my LAB. There's Taco Tuesdays. Everyone gets a FREE TACO !


:) Hope you get some good rest ... it is indeed going to be a busy day, at least for me, tomorrow.

P#67612 2019-09-13 04:47

The file renaming and editing sounds a bit risky to me. I don't know much about hacking, but giving the capability of making an executable script/batch file to any cart on the BBS might not go well. Even if it is not run, if it is called Pico-8 or similar, the user might fall for it and run whatever code was placed in there. I don't think that anyone on the BBS would do something like that, Just being cautious here.
Similar concept with the WOBSITE(). Security is something that would take a lot of attention.
Don't get me wrong. I would LOVE these features implemented.

On another note, The FALSE and TRUE being numbers would be very useful and makes sense. You could do things like:

X += BTN(2) * SPEED * (X < 127)
X -= BTN(3) * SPEED * (X > 0)

It may make the code less readable when used in larger equations, unfortunately.

P#67614 2019-09-13 12:06 ( Edited 2019-09-13 12:06)

won’t happen - this is core to lua, see:

anything touching security (like file system access) must not be done. That would completely destroy the ‘sharing’ aspect of pico8.

and stop asking for making lua some kind of BASIC, won’t happen either.

P#67616 2019-09-13 12:28 ( Edited 2019-09-13 12:30)

Freds, this isn't LUA. It's Pico-8. It may run in LUA but it is not LUA itself. :)

And a great many wonderful features of PICO-8 are used today because it is quite friendly and easy to use for BASIC programmers. It does not require one to use _DRAW() and _UPDATE() ... and that's why I'm here.

As for the RENAME and DELETE options, if you check, Freds and HWD, I requested a notice that would pop-up requiring the user to press Y followed by ENTER. I like this method better, no notices would pop-up but you would be limited access to strictly to 7-bit text files only.

You can only read, write, replace, rename, and delete .TXT files only - and they must only contain 7-bit data CRs (#10 and #13) and chars #32-#126, no other characters are accepted.

It could also be that these two commands won't even run unless you are in immediate mode for PICO-8, meaning they would not run in the BBS or compiled to any format.

If this is not enough security then skip the request. There are too many other good things in PICO-8 to worry about.

I think I may have a solution for the logic though, Firbird and HWD. Let me think ...

How about this ?

by dw817
Cart #la-0 | 2019-09-13 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

P#67621 2019-09-13 15:23 ( Edited 2019-09-23 06:21)

Thought I would bump this cause I have a great suggestion. (not like all the others, right ?) :)

How about a Gameboy border ? That is, back when I had a Gameboy and a Super Nintendo, you could plug the cartridge into the SNES and play it =WITH= a special border that was provided by the game.

When you export to EXE or HTML you just get a black screen on the left and right. How about being able to change all [3] the zoom, proportion, and position (x1,y1,x2,y2) where you want the image of the cart to appear - and then have an image overlay you want to appear AROUND it ?

And it would have 3-window modes, instead of just the 1 today.
[1] where it is now, solid black screen cannot see the start button. Optional custom border.
[2] New mode where screen is filled but can see start button and window icons. Optional border.
[3] New mode where game is in its own window, can resize and drag. Also optional border.

Meaning you can run it as an EXE with border, with optional drag-bar click to maximize, goes full-screen but leaves window buttons at bottom. click maximize AGAIN and it goes true full-screen where you can only see the game border and display.

Press [ESC] to return back to normal view mode.

I think I can put something together with cats I saw earlier to demonstrate this. Let me see ...

These also looked especially interesting:

Example of gameboy borders. Of course the PICO-8 borders would not animate nor obstruct the view.

Here is a list of other borders. Actually ALL of 'em I think. :)

Mind you this is JUST for export so there is no need to attach a large picture file to the actual source-code. It's just for final distribution and fun - to collect, make, and trade borders that may be perfect matches for existing Pico-8 carts already out there and for new upcoming ones.

P#68085 2019-09-24 03:15 ( Edited 2019-09-24 03:53)

Always having ideas on things. Thought I would start a fresh reply in here. Let's see ...

Daily Suggestions: 10-19-19

When loading and saving carts, automatically truncate trailing spaces from source-code. And/or intelligently truncate as new lines are typed and entered.

Consider TAB to not be character #9 in the source-code as it is now but 2- or more spaces, char #32, depending upon configuration.

In loading a cart, remove all character #13 in favor of character #10. Currently char #13 registers as an error.

Add option to debug variables thus:


Output results would be:

Ability to edit sprites in other formats, not just 8x8 or multiples of. For instance, 7x7 could be possible.

I may have mentioned this earlier but it bears repeating. An optional GRID to appear between pixels in the enlarged edit when you are working on sprites in the sprite editor. It would look something like this..

allow delete and rename of text files as well as PRINTH. Must be .TXT format. New commands:
RENAME(filename) ... must have extension .txt
DELETE(filename) ... must have extension .txt
printh(var,filename) ... does not append .p8 if extension is already .txt

P#69090 2019-10-20 04:23

Super Game Boy border is a fun idea :D

I wonder if it could be done with a custom export template…

P#71045 2019-12-15 20:27

Error catching is already supported:

local coro = cocreate(func_that_may_raise_errors)
repeat -- if your function is fast, you can omit the loop (coresume may return before completion after some delay, even if there's no yield)
    local ok, error = coresume(coro)
    if costatus(coro) == 'dead' then
        if ok then
            -- hooray, the code passed
            -- oh no, there's an error in 'error'

And you can use assert to force a function to raise an error, too. (Though don't expect to be able to pass the error through coresume unmolested - use a global/etc instead)

P#71460 2019-12-28 14:27 ( Edited 2019-12-28 14:29)

[Please log in to post a comment]

Follow Lexaloffle:          
Generated 2024-04-19 05:19:38 | 0.025s | Q:30