Log In  

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

I wonder, once the highscores feature comes into play, will it be possible to do some extremely limited networking using it? Say for example, instead of using the highscore number as a highscore number, but instead as data. I imagine it wouldn't allow for any real-time networking, but I think it's worth keeping in mind that the highscore number could be used for other things than scores. Maybe showing what decisions other players took, like a Telltale game. Or gravestones of players who have passed away and where.

7
19 comments


Does printh() cause any output when exported to html5? I have a pico8 game which creates a file that can be used to program a robot and I was thinking about it's ability to be deployed on a webserver which then serves the programming files as a download to users. Is this possible or will printh() only work on local pico8 machines?
Thanks
Marceline

0 comments


Cart #39973 | 2017-04-27 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
14

So I was running out of sprites and I thought "there must be a decent way around this"

a few hours later I came up with this. This cart is just showing 3 frames of a 128x128 animation - three times the size of the sprite sheet. You can peek at the code to see the relevant function - string_to_sprite() - but if you want to know the pipeline, here's how I did it.

-I just searched for some anime gif at 128x128 to show this off, picked the first one I thought looked neat, opened it in Aseprite.
-I switched over to the pico-8 palette and remapped the image to it
-Then I went to pico-8 and typed the command "export img.png" - this gives you a 128x128 image of the spritesheet.
-Then I went back into Aseprite, opened img.png and copied the first frame of animation to it, and saved.
-Back in pico-8, typed the command "import img.png" - now we have the first frame of animation.
-In the sprite sheet editor view, I copied a 16x4 selection of sprites by holding shift + clicking and dragging, ctrl+c
-I then went into notepad, and pasted the selection. Now, if you do this you'll see a long string, starting with

[ Continue Reading.. ]

14
4 comments


Cart #39954 | 2017-04-26 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
11

Started playing around with 2D sims - fluids seem hard to do at reasonable resolution given CPU constraints, but waves are just fine. More natural boat control and bilinear interpolation for wave rendering (more detail! less blocky!) both might make this more fun.

I'm also wondering if there's a racing game here where you can interact with the waves and they aren't just part of the scenery.

11
4 comments



0 comments


Cart #39950 | 2017-04-26 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
132

The Story of Zeldo. Lank wakes up to a fairy and realizes he needs to fight monsters and save the princess.

Controls:
sword -> Hold Z then arrow key.
boomerang -> Hold X then arrow key.

Originally, The Story of Zeldo was going to be a small project that would only take a few hours/days. Though I wasn't going to put much time into it, I couldn't stop working on it and ended up spending a couple weeks on it.

This cartridge is loaded, it's using almost all of the music, sound, map, sprite, token, and character allocations. This is the largest pico 8 project I have done yet and this is the first time I've run into space limits. I hope you have as much fun playing it as I had making it!

Check out my github page for comments within the code.

132
29 comments


Hello,

I'm trying to capture looped .gifs using PICO-8. It seems that the .gif exports always results in having one frame less than anticipated. For example, I end up with 239 frames when gif_len in config.txt is set to 8 and 479 when gif_len is set to 16. Is it that the grabber strictly cuts off after the specified amount of time and PICO-8 runs slightly slower than 30 FPS?

Anyway, it'd be super useful if the gif_len could be specified in a number of frames rather than a number of seconds. Please, is there any way of doing that?

Cheers,
Adam

2
2 comments



You have 80 seconds and 6 health points to make it around the world! Can you do it?! (Probably, yes.)

Up and Down Arrows to select your choice. Z to choose! Some choices will lose you some body parts. Lose your head and you lose the game!

Originally intended for the 48 hr Compo time constraints and some fails with file transfers pushed the deadline into the 72hr Jam. A good practice for learning this tiny gaming suite and it was really enjoyable to make.

Please enjoy this tiny project!

Cheers,
4KbShort

Itch.io Games
Twitch
YouTube

5
7 comments


Cart #39927 | 2017-04-25 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
4

A little cloud-based audio toy. Move your cloud around for different sounds. Would love to know what might make it more fun!

4
0 comments



You are a domesticated honey bee collecting nectar for your hive. Spring is here, and after a long, chilly winter, you're running low on honey. Fill up on nectar, then fly your way back to the hive to deposit it. Keep going until you've gathered all you can from the surrounding flowers.
The local wasps are a bit on the territorial side, so it's best to avoid them.

Controls: Arrow keys to move, z to select, p to pause.

Made in PICO-8.

Itch.io page: https://violinistsmetronome.itch.io/buzzing-through-the-blooms
Ludum Dare submission page: https://ldjam.com/events/ludum-dare/38/buzzing-through-the-blooms

2
0 comments


Cart #39920 | 2017-04-24 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
6

Mighty Mole is a simple PICO-8 platformer game I made for Ludum Dare 38 Jam.
Travel the world to save moles in distress.
Collisions are really glitchy, but hopefully you'll like that small prototype.
Thanks to @TRASEVOL_DOG for his great PICO-8 voxels tutorial.

6
2 comments


Cart #40512 | 2017-05-12 | Code ▽ | Embed ▽ | No License
1

Cart #40184 | 2017-05-04 | Code ▽ | Embed ▽ | No License
1

Cart #39986 | 2017-04-28 | Code ▽ | Embed ▽ | No License
1

Cart #39914 | 2017-04-24 | Code ▽ | Embed ▽ | No License
1

[ Continue Reading.. ]

1
3 comments


Cart #39905 | 2017-04-24 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
6


Press V to make bubble !

6
0 comments



An arcade-ready remix of Mountains of Demise 2.
Difficulty has been balanced for maximum "arcadeness" (and profit if you really want to put it in your arcade).
Among differences from the original game are:

  • intro loops
  • Time for an Epic Quest (title theme) replaced with Mountains of Demise 3's title theme
  • coin system
  • no passwords
  • option to disable continues
  • service menu

To insert a coin, use the Tab key.
To access the service menu, use the Q key.

Original game below:


[ Continue Reading.. ]

1
0 comments


Cart #39885 | 2017-04-24 | Code ▽ | Embed ▽ | No License
168

Here's my entry for ludum dare #38

All you have to do is taking the red flag on the opposite side of the island. If you success another flag will appear on the other side, and so on. Your time is refreshed each time you take a flag.
If you capture 2 / 5 / 10 / 15 flags you will unlock permanent skills.
If you reset the cart your skills and hi-score will be reset too.

commands are : <left> and <right> to run, <up> to jump and <up> again to explo-double-jump ( need unlock )

Please tell me your best score. have fun

168
34 comments


Dungeon Generation API

This is a highly commented, thorough dungeon generation API that uses BSP (Binary Space Partitioning)
The generation in the demo is slower than needed, as it tries very hard to create interesting dungeons. Because it is generic, it can be used to create dungeons made of pixels, tiles using pio8 map, or something else.

DEMO

Cart #39887 | 2017-04-24 | Code ▽ | Embed ▽ | No License
2

Usage:

genesis(width,height,max_depth,pathfn,renderfn,min_size) -> rooms, tree

Generates a dungeon using the BSP algorithm.
The width and height are arbitrary units that can be used for pixels, the pico8 map, or something of your own creation.

	local rooms, tree = genesis(
		map_width,
		map_height,
		depth,
		on_path_render,
		on_room_render
	)

max_depth (int)

How deep the BSP tree gets. The greater the number, the more and smaller rooms are generated. For large maps, a higher number is useful, smaller maps, a lower number works better. The program will begin to decrease depth automatically if the process is taking too long. (decreases every second)

pathfn (function)

it is called with (x0,y0,x1,y1) where the coordinates make a line from two points, the line is always vertical, and horizontal. it always goes from center of a container to another center of another container. It is guaranteed to go from left to right, or top to bottom.

	function on_path_render (x0,y0,x1,y1)
		line(x0,y0,x1,y1,6)
	end

renderfn (function)

it is called with (x0,y0,x1,y1) where the coordinates make a rectangle called on your own by iterating over rooms and calling room.render() on each used to render tiles to the map, or to pixels.

	function on_room_render (x0,y0,x1,y1)
		rectfill(x0,y0,x1,y1,3)
		rect(x0,y0,x1,y1,6)
	end

min_size (int) (default: 8)

minimum room size before the room is not added to the rooms array, default is 8.
The program will decrease the minimum size automatically if it is taking too long to process, which is usually only the case when the minimum size is too high.

returns

A tuple of rooms and the tree. rooms contains data about each room in the map, and the tree contains traversable tree of containing cells primarily used for calling rendering functions.

Rendering

Assuming you have created something like the on_path_render and on_room_render functions above, you then iterate over the rooms and traverse the tree to render the map. In the demo, we use these functions:

	function render_rooms()
		foreach(rooms, function(room)
			room:render()
		end)
	end

	function render_paths(node)
		if (nil == node.lchild or nil == node.rchild) return
		node.lchild.leaf:render_path(node.rchild.leaf)
		render_paths(node.lchild)
		render_paths(node.rchild)
	end

Full Example

function _init()
	-- since we are rendering to pixels,
	-- we use the screen resolution
	local map_width=127
	local map_height=127
	-- define how deep our binary trie goes
	-- the higher, the smaller and more rooms you get
	-- for smaller maps, you should use a smaller number.
	local depth=6
	-- declare how the paths are rendered
	function on_path_render (x0,y0,x1,y1)
		line(x0,y0,x1,y1,6)
	end
	-- declare how the rooms are rendered
	function on_room_render (x0,y0,x1,y1)
		rectfill(x0,y0,x1,y1,3)
		rect(x0,y0,x1,y1,6)
	end
	-- get our room and tree tables from
	-- the generator
	local rooms, tree = genesis(
		map_width,
		map_height,
		depth,
		on_path_render,
		on_room_render
	)
	-- now we have our rooms and tree (technically trie)
	-- but they arent going to render themselves.
	-- to do this, we need to iterate over the rooms
	-- and the paths by themselves.

	-- create a function that will render all of the rooms
	-- by calling the render function on each of the rooms,
	-- the rooms themselves will then call the on_room_render
	function render_rooms()
		foreach(rooms, function(room)
			room:render()
		end)
	end
	-- create a function that will recursively walk down the tree
	-- and render paths between each container cell and
	-- rooms. which creates our hallways. it will end when
	-- it reaches the "bottom" of the tree, where a node does not
	-- have children.
	function render_paths(node)
		if (nil == node.lchild or nil == node.rchild) return
		node.lchild.leaf:render_path(node.rchild.leaf)
		render_paths(node.lchild)
		render_paths(node.rchild)
	end
	-- with our functions defined, we can now render the dungeon.
	cls()
	render_paths(tree)
	render_rooms()
end

Github

https://github.com/MattMcFarland/dungener

Installation

You can install this into your cartridge by copy and pasting all of the code from index.lua within the Github Repo.

2
0 comments


When a cartridge exceeds the 65536 code size limit, PICO-8 0.1.10c crashes instantly when loading the .p8. It looks like an unchecked strcat() call that overflows past the allocate string size. Here is the Linux backtrace:

==4197== Invalid write of size 1
==4197==    at 0x4C2EA80: strcat
==4197==    by 0x4A74D3: codo_load_pico8_cart_from_file (in /home/sam/pico-8/pico8)
==4197==    by 0x4A753F: codo_load_pico8_cart (in /home/sam/pico-8/pico8)
==4197==    by 0x40B9F1: load_cart (in /home/sam/pico-8/pico8)
==4197==    by 0x4086B9: move_boot (in /home/sam/pico-8/pico8)
==4197==    by 0x409E86: codo_main_update (in /home/sam/pico-8/pico8)
==4197==    by 0x45EE76: codo_main (in /home/sam/pico-8/pico8)
==4197==    by 0x57852B0: (below main) (libc-start.c:291)
2
4 comments


Cart #39879 | 2017-04-23 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

Try to catch as many coins as you can while avoiding the beast. Now with somewhat less flaky collisions!

1
0 comments



Use arrow keys and pick up your trash!
Geez, ever heard of a recycle bin?

1 comment


Cart #39878 | 2017-04-23 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

My Ludum Dare 38 game.

This is my first pico-8 game, and as such I had to cut about 3/4 of the intended features.
Please excuse the abhorrent collision detection and the rushed pixel-art.

If you do play and finish it, I hope you find that the slow walking speed wasn't too much of a waste of your time.

Protip: Try to avoid facing another object while dropping your current object.

Controls:

Arrow keys to move.
X/Y/Z to start pulling the item in front of you.
X/Y/Z to stop pulling.

1
0 comments




Top    Load More Posts ->