Sometimes, especially when working with animations, I prefer using GraphicsGale than Pico's internal editor. So I'd be glad if I could copy/paste sprites to/from standard image editing programs. As of how palette thing would work when pasting, if pixel is "unknown" (not in pico's palette), color with closest r/g/b values from palette would be used.
So e.g. if I have some pixels that are totally blue (#00FF00), when pasting those pixels will be changed to closest color in pico's palette which is 1 (I think) in this case.
Alternatively import/export of spritesheet from/to png file would be welcome, with same color conversion process when importing as when proposed pasting.
Like explode() in PHP, nothing fancy, just taking a string and convert it into an array based on delimiter, so e.g. I can have following string: "303;12;18;6;23;45;10;66" and after doing:
array = explode("303;12;18;6;23;45;10;66",";") |
Array will be {303,12,18,6,23,45,10,66}.
Reason is of course token space and I want to encode maps this way for my contra cart.
Currently every limit of Pico-8 is kinda rigid, but how about it: You can adjust these limits at the cost of the other ones. E.g. you need bigger map, but don't use much of sound or code? You can increase map at the cost of code space/sound space. Alternatively you need more code but not use much sounds? Decrease sound space, increase code space.
Of course default split would be as it is now.
This is a function that will generate cart's guid (used for cartdata function) based on things specific to the cartridge (mapdata, gfx, sfx and code).
function getcartguid() reload(0x4300,0x4300,7168) alphabet = "1234567890abcdefghijklmnopqrstuvwxyz_1234567890abcdefghijklmnopqrstuvwxyz_1234567890abcdefghijklmnopqrstuvwxyz_1234567890abcdefghijklmnopqrstuvwxyz_1234567890abcdefghijklmnopqrstuvwxyz_1234567890abcdefghijklmnopqrstuvwxyz_1234567890abcdefghijklmnopqrstuvwx" guid = "" for i=0,15 do num = peek (0x0+i) guid = guid .. sub(alphabet,num+1,num+1) end for i=0,15 do num = peek (0x2000+i) guid = guid .. sub(alphabet,num+1,num+1) end for i=0,15 do num = peek (0x3200+i) guid = guid .. sub(alphabet,num+1,num+1) end for i=0,15 do num = peek (0x43af+i) guid = guid .. sub(alphabet,num+1,num+1) end --print (#guid) --print (guid) return guid end |
E.g. for storing text (hiscore name, anyone?). Since each number is 4 bytes long, to make standard "Top10" list you'd use only 40 bytes (results only). Which leaves 216 bytes free, that could be used for names, each 21 letters long (well, 21.6 actually, but we can't have 0.6 of character, now can we?). I know we can peek/poke into save data (although it seems memory map haven't been updated in manual), but I'm not sure if it would save.
It would stop execution and dump you into command mode. This would work like setting up breakpoint when you know that something doesn't go right after a specific instruction is executed but you are not sure what.
Example uses:
Stop() after changing the variable: Allows you to print it out in command mode to see if value change according to expectations (e.g. when dealing with imprecision of decimals or when you suspect integer overflow)
Stop() at the end of _Draw(): Allows you to display cart frame by frame e.g. when you debug graphics effects like particles that doesn't seem right.
And so on.
Of course after stopping cart you can then resume() it ;).
And before you ask, yes I know you can stop execution with ESC, but sometimes you need to stop it at the very precise moment which is hard to do manually and so something like stop() would be useful.
With current one, playing 2 player games is downright impossible unless you have also a gamepad. Well, if you don't want to play a game of Hand Twister at the same time as well, that is.
So I'm proposing following mappings for the 2nd player:
Left: Numpad4
Up: Numpad8
Down: Numpad5
Right: Numpad6
Btn1: Numpad7
Btn2: Numpad9
Then our friend can sit at the side and while we're using arrows+z/x, he'd use just one hand to control the game.
This is exactly how I've set up second player in Nestopia, aside of mapping stert/select to Num+/NumEnter and it works remarkably well.
I've noticed that after few hours of using Pico, it starts to get more and more memory, but only when you start opening many different carts in a single, long (few hours, the shortest time I've seen it happening was in a session about 3h long) session. Obviously closing and reopening pico fixes it, but it should be looked into even if it's small (the biggest it got in memory was about 450MB when leaking).
//edit: Also the first sign the leak is happening is that sound starts to get choppy. That was what alerted me of the issue for the first time and I was investigating it for the past 3 days to get to what exactly causes it.
Would save a ton in tokens since brackets are treated as separate tokens.
//edit: Or if you're calling version of function that takes no arguments, ex:
palt(12,true) -- <- brackets necessary --draw something palt -- <- brackets unnecessary since this version of palt has no parameters |
Of course after such bracketless call/definition, a new line would be required, but most sane programmers do so anyway.