Log In  

BBS > Superblog
Posts: All | Following    GIFs: All | Postcarts    Off-site: Accounts

Limitations always make me think about breaking them, and when last time I realized that you can “load()” cartridges while your program is running, that seemed something exploitable :)

So here is one way to circumvent the limitations somewhat: You can only fit one “fullscreen” picture in the gfx space in pico-8 - BUT the cartridge change and load is fast (at least compared to changing a physical cartridge :) ) so what if I put more pictures my program need in other cartridges, and load when I need?

Turns out it can be done. :)

Here is a demonstration: a “fullscreen” anim player. It reads the frames from the cartridges in the “frames” directory, and copies the contents to the screen.

It is not that fast as I hoped to be, but it is still useable. It plays an animation with no problem, and with some planning it should be useable for other purposes too (while something else is still happening on the screen, like a game for example :) )
As the screenshot shows: it consumes 96% of cpu time, but only in the frame when the load and refresh happens. (I refresh every third frame, that’s how the average is around 32% - two frames with zero cpu load, one with 96%).
In theory you could spread the cartridge load and the refresh to different frames, but unfortunately the load is not “silent” (it prints a message to the screen), and that scrolls/writes in the picture. I couldn’t come up with a way to hide that yet, but the separete load/update lowers the max cpu usage to 49.6% (the average is stays the same, because now we have one frame with zero, and two frames with roughly 49%).

But of course an animation player is really the stress test of this technique. Apart from… you now, actually playing animations (like intros or something) you don’t really need to refresh that fast probably, and loading data from other cartridges can be used a number of different ways: backgrounds for an adventure game or transition screens, or replacing the tileset for an another world in the game, etc.

I have the sample for you to download (I don't think it will work in the web player), but it seems that I can't post any links in this forum, so please go to my blog post on tumblr and download from there if you want to check it out: http://blog.ccatgames.com/post/118623662172/still-playing-with-pico-8-limitations-always-make

1
1 comment


Cart #10566 | 2015-05-09 | Code ▽ | Embed ▽ | No License
2

Trying out this pico-8 thing.
Good luck! ;)

2
0 comments


Cart #10606 | 2015-05-12 | Code ▽ | Embed ▽ | No License
58

Might as well call this the finished version, since barring optimization and cleanup I'm out of space.

CHANGES:
-There wasn't really much point in moving away from your opponent, so backward movement has been replaced with a longer backstep that can be used to avoid attacks
-Tweaked a few pixels

ADDED:
-Logo graphics
-2 new backgrounds (chosen randomly for each round)
-Randomly generated character appearances (loser's character gets replaced after each round)
-Characters now have shadows
-1 new music track
-Options menu to change/disable the music and choose between 3 CPU difficulty levels

FIXED:
-Player 2 could still go slightly outside the screen's bounds

KNOWN BUGS:
-There's a certain set of inputs that will prevent a character from going into the win pose after knocking an opponent out, thus being able to move around freely and preventing the round from ending. I have no idea how to do it apart from buttonmashing. The CPU will occasionally manage to do this, since technically it's constantly buttonmashing. Don't think of it as a bug, think of it as the ultimate victory celebration!

Cart #10588 | 2015-05-10 | Code ▽ | Embed ▽ | No License
58

[ Continue Reading.. ]

58
12 comments


Cart #10554 | 2015-05-09 | Code ▽ | Embed ▽ | No License
2

A submarine explores an asteroid field. Very simple. Not a game.

2
2 comments


Cart #10552 | 2015-05-09 | Code ▽ | Embed ▽ | No License

3 comments


Cart #10550 | 2015-05-09 | Code ▽ | Embed ▽ | No License
10

Arrow keys to move
Intersect targets for points
Game lost if ball dropped

https://github.com/buffis/bounce

10
1 comment


Cart #10548 | 2015-05-09 | Code ▽ | Embed ▽ | No License
3

Simple and pointless; this is not a game.

3
0 comments


by Kling
Cart #10545 | 2015-05-09 | Code ▽ | Embed ▽ | No License
8

to put it simply, this is somehow a fnaf clone, its a stress management game, here is how it works:

your objective is to keep the being alive until the green bar (time) fills up.
there is a purple bar in the middle which will decrease with time
press x to fill it
press the button required on the bottom of the screen the number of times necessary

the being will lose life if:
you press a button that is not required or press it more than its required
you take too long to press the required buttons and they build up
you press x and any other button at the same time (you can press the other buttons at once, however)
you let the purple bar get empty

the being recovers if:
*you press the required buttons, the required number of times.

8
2 comments


Neil (nknauth here in this forum) had this awesome idea to use my image importer to create custom covers for cartridges.
I myself wondered if one could use a cartridge cover other than a screenshot, but my best idea was “Probably at some point I should ask zep if he can enable using some other images. Maybe. Someday.” :)

But neil's idea is actually working. Needs a small amount of hacking though: simply loading an image, taking a screenshot, loading an another cartridge, and saving that cartridge by hand just produces a gray square on the cart instead of the image.

BUT using this code in the image loader works:

function _update()
if (btnp(4)) then
load(“road”)
end
if (btnp(5)) then
save(“road.png”)
end
end

function _draw()
cls()
sspr(0,0,127,127,0,0)
end

So the steps are:

  1. Create an “image cartridge” with the code above, but replacing “road” for the target cartridge name.
  2. Import the cover picture into this “image cartridge” by using the image importer from my previous post, or simply just drawing directly in Pico-8

[ Continue Reading.. ]

2
0 comments


Cart #10521 | 2015-05-07 | Code ▽ | Embed ▽ | No License
131

Hello this is the third and probably my last entry for More Is Better Jam. ( I have to leave until next week)
This one is still unfinished, I wanted to add a progression system with powerup unlocks.
As a result the late levels are quite difficult since you will have to play them without the powerups.

Instructions :

  • Save the 32 Files left on your computer by fighting viruses waves with your sweet laser beam and shiny green armor
  • The laser beam always target the grey ring
  • You can't move the ring, it moves by itself and will probably do it in the direction you dont want it to.
  • Your laser beam consume energy : no energy = no laser beam
  • Refill your energy by approaching the ring. It works only if you dont fire.

[ Continue Reading.. ]

131
19 comments


Cart #10516 | 2015-05-06 | Code ▽ | Embed ▽ | No License
6

After writing a small image converter for pomppo's 1-bit sprites I hacked together a color image "importer".

It reads a 128x128, 16 color image, and spits out something you can paste in a p8 file, in the gfx section.
The cartridge here just displays it.

I don't know if there is any point in doing this... a "fullscreen" 128x128 image takes up Pico-8's all gfx memory, so after that there are no more room for any sprites...
One use case would be importing a sprite sheet, so an artist can work in his/her favorite editor program, or something.

Anyway here is it.
It is a (really-really-really hacky) Processing program.

Just change the image name, run the sketch, and the data is copied to the clipboard (or if not, you can copy it from the console window).

Paste it over the gfx data in the p8 cartrigde file, and the sprites will be replaced by your picture.

import java.awt.;
import java.awt.event.
;
import java.awt.datatransfer.;
import javax.swing.
;
import java.io.*;

PImage img, dimg;
HashMap<Integer, String> converter;

void setup() {
img = loadImage("sonofman.png");
size(img.width, img.height);
dimg = createImage(img.width, img.height, RGB);
dimg.copy(img, 0, 0, img.width, img.height, 0, 0, img.width, img.height);

converter = new HashMap<Integer, String>();
converter.put(0xFE000000, "0");
converter.put(0xFE1C2A52, "1");
converter.put(0xFE7D2452, "2");
converter.put(0xFE008650, "3");

converter.put(0xFEAA5135, "4");
converter.put(0xFE5E564E, "5");
converter.put(0xFEC1C2C6, "6");
converter.put(0xFEFEF0E7, "7");

converter.put(0xFEFE004C, "8");
converter.put(0xFEFEA200, "9");
converter.put(0xFEFEFE26, "a");
converter.put(0xFE00E655, "b");

converter.put(0xFE28ACFE, "c");
converter.put(0xFE82759B, "d");
converter.put(0xFEFE76A7, "e");
converter.put(0xFEFECBA9, "f");

mousePressed();
}

void draw() {
image(dimg, 0, 0);
}

void mousePressed() {
String simg = "";
int counter = 0;
dimg.loadPixels();
for (int i = 0; i<dimg.pixels.length; i++) {
Integer s = dimg.pixels

[ Continue Reading.. ]

6
0 comments


a little coded demo,. .

by jph
Cart #10499 | 2015-05-06 | Code ▽ | Embed ▽ | No License
17

no controls at all,. an endless running painting with noise.

go fullscreen and enjoy ;)

added; mtrx_os (old skool) for that traditional feeling,. always falling downward.

Cart #10539 | 2015-05-08 | Code ▽ | Embed ▽ | No License
17

17
5 comments


Cart #10526 | 2015-05-07 | Code ▽ | Embed ▽ | No License
6

I wanted to see if using the sprite drawing functions would be any faster than using lines and rectfills, so I made a single reference sprite containing all the 2x2 pixel configurations and used that to draw the image. There's really no noticeable change in performance, but now I can change the reference sprite into random garbage and get weird distorted mosaic effects. Press X to check them out!

Also added some comments to my code, fixed a bug that caused the background color to extend one horizontal pixel too far, and added the option of drawing the image's background color as transparent if a negative number is given as the function's background color argument.

Cart #10497 | 2015-05-06 | Code ▽ | Embed ▽ | No License
6

[ Continue Reading.. ]

6
2 comments


Cart #10492 | 2015-05-05 | Code ▽ | Embed ▽ | No License
3

Howdy!

First game here, the most dead-simple Tic-Tac-Toe game I could make.

This is my first time writing Lua, so if anyone would like to give feedback on the code, I'd love to hear it.

3
3 comments


Cart #10478 | 2015-05-05 | Code ▽ | Embed ▽ | No License
4

press z while standing to try to sing.

Just doodling, trying to get stronger

4
0 comments


It would make sense if dragging a .p8/.p8.png onto pico-8 ("pico8 file_path") would cause it to cd to the containing directory, load the cart, and run it. In particular, this would allow to associate pico-8 with the .p8 format and/or start it from external applications (e.g. to use Notepad++/Sublime Text for editing code and have a key to launch pico-8 with the current file loaded).

1
1 comment



Instructions :

  • Lead your army to the trojan horse
  • Use the 4x Hades's portal to make your army jump between worlds.
  • Build a path avoiding frogs and dangers
  • Your army respawn is unlimited but your max size is 24

Control :

  • arrow keys : control your portal
  • <z> key : switch between the 4x portals
23
4 comments


Cart #10466 | 2015-05-04 | Code ▽ | Embed ▽ | No License
15

Two player Missile Commander clone. You can also play it in single player (just ignore the second cursor), but it will be harder.
Not quite finished, but playable.

Player 1 keys: Cursors + Z,X or N,M to launch missile from left/right silos
Player 2 keys: SDFE + tab,Q or shift, A to launch missile from left/right silos

In every level, you must survive 20 enemy missiles. At every new level, they got faster and faster...
For every 300 points you got two new missiles (one for the left, and one for the right silo).

How many levels can you survive?

(There is a bug, and sometimes the level won't completes... I'll fix it later.)

Cart #10480 | 2015-05-05 | Code ▽ | Embed ▽ | No License
15

[ Continue Reading.. ]

15
3 comments


Elevated by RGBA and TBC is pretty awesome: http://www.pouet.net/prod.php?which=52938

One of the cool things (among the many very, very, cool things) is the lights in the sky which match / mimic / are simultaneous with certain notes in the music.

In order to have a similar effect, I think I would have to understand how/where the state of the tracker is stored in the RAM?

Anyone have any hints?

7
6 comments


Cart #pomeroyejo-0 | 2020-04-23 | Code ▽ | Embed ▽ | No License
174

  • Every stray bullets will turn into a monster.
  • You have 1:30 to make the best possible score.
  • Use <z> to shoot
  • Hold <z> to strafe

My hi-score is 2298

[Update!] V1.1

  • I found this version on my old hard drive and decided to upload it
  • there's now a coop and battle mode where you must fight for the best score ( or survival )
174
33 comments




Top    Load More Posts ->