Log In  

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

Cart #54814 | 2018-08-07 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

0 comments


Cart #54814 | 2018-08-07 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

1 comment


Novice coder, so sorry if I'm making a dumb mistake lol.

Wanted to make a platformer where the player can shoot and detonate bullets to create platforms that the player can then jump on. However, when that platform is created, using map, the player doesn't collide with it.

I'm using the Advanced Micro Platformer template from mhughson (https://www.lexaloffle.com/bbs/?tid=28793), so I don't really understand where to even start to try to figure this out.

Cart #54812 | 2018-08-07 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

-- config
--------------------------------

--sfx
snd=
{

}

--music tracks
mus=
{

}

--math
--------------------------------

--point to box intersection.
function intersects_point_box(px,py,x,y,w,h)
	if flr(px)>=flr(x) and flr(px)<flr(x+w) and
				flr(py)>=flr(y) and flr(py)<flr(y+h) then
		return true
	else
		return false
	end
end

--box to box intersection
function intersects_box_box(
	x1,y1,
	w1,h1,
	x2,y2,
	w2,h2)

	local xd=x1-x2
	local xs=w1*0.5+w2*0.5
	if abs(xd)>=xs then return false end

	local yd=y1-y2
	local ys=h1*0.5+h2*0.5
	if abs(yd)>=ys then return false end

	return true
end

--check if pushing into side tile and resolve.
--requires self.dx,self.x,self.y, and 
--assumes tile flag 0 == solid
--assumes sprite size of 8x8
function collide_side(self)

	local offset=self.w/3
	for i=-(self.w/3),(self.w/3),2 do
	--if self.dx>0 then
		if fget(mget((self.x+(offset))/8,(self.y+i)/8),0) then
			self.dx=0
			self.x=(flr(((self.x+(offset))/8))*8)-(offset)
			return true
		end
	--elseif self.dx<0 then
		if fget(mget((self.x-(offset))/8,(self.y+i)/8),0) then
			self.dx=0
			self.x=(flr((self.x-(offset))/8)*8)+8+(offset)
			return true
		end
--	end
	end
	--didn't hit a solid tile.
	return false
end

--check if pushing into floor tile and resolve.
--requires self.dx,self.x,self.y,self.grounded,self.airtime and 
--assumes tile flag 0 or 1 == solid
function collide_floor(self)
	--only check for ground when falling.
	if self.dy<0 then
		return false
	end
	local landed=false
	--check for collision at multiple points along the bottom
	--of the sprite: left, center, and right.
	for i=-(self.w/3),(self.w/3),2 do
		local tile=mget((self.x+i)/8,(self.y+(self.h/2))/8)
		if fget(tile,0) or (fget(tile,1) and self.dy>=0) then
			self.dy=0
			self.y=(flr((self.y+(self.h/2))/8)*8)-(self.h/2)
			self.grounded=true
			self.airtime=0
			landed=true
		end
	end
	return landed
end

--check if pushing into roof tile and resolve.
--requires self.dy,self.x,self.y, and 
--assumes tile flag 0 == solid
function collide_roof(self)
	--check for collision at multiple points along the top
	--of the sprite: left, center, and right.
	for i=-(self.w/3),(self.w/3),2 do
		if fget(mget((self.x+i)/8,(self.y-(self.h/2))/8),0) then
			self.dy=0
			self.y=flr((self.y-(self.h/2))/8)*8+8+(self.h/2)
			self.jump_hold_time=0
		end
	end
end

--make 2d vector
function m_vec(x,y)
	local v=
	{
		x=x,
		y=y,

  --get the length of the vector
		get_length=function(self)
			return sqrt(self.x^2+self.y^2)
		end,

  --get the normal of the vector
		get_norm=function(self)
			local l = self:get_length()
			return m_vec(self.x / l, self.y / l),l;
		end,
	}
	return v
end

--square root.
function sqr(a) return a*a end

--round to the nearest whole number.
function round(a) return flr(a+0.5) end

--utils
--------------------------------

--print string with outline.
function printo(str,startx,
															 starty,col,
															 col_bg)
	print(str,startx+1,starty,col_bg)
	print(str,startx-1,starty,col_bg)
	print(str,startx,starty+1,col_bg)
	print(str,startx,starty-1,col_bg)
	print(str,startx+1,starty-1,col_bg)
	print(str,startx-1,starty-1,col_bg)
	print(str,startx-1,starty+1,col_bg)
	print(str,startx+1,starty+1,col_bg)
	print(str,startx,starty,col)
end

--print string centered with 
--outline.
function printc(
	str,x,y,
	col,col_bg,
	special_chars)

	local len=(#str*4)+(special_chars*3)
	local startx=x-(len/2)
	local starty=y-2
	printo(str,startx,starty,col,col_bg)
end

--objects
--------------------------------

--make the player
function m_player(x,y)

	--todo: refactor with m_vec.
	local p=
	{
		x=x,
		y=y,

		dx=0,
		dy=0,

		w=8,
		h=8,

		max_dx=1,--max x speed
		max_dy=2,--max y speed

		jump_speed=-1.75,--jump veloclity
		acc=0.05,--acceleration
		dcc=0.8,--decceleration
		air_dcc=1,--air decceleration
		grav=0.15,

		--helper for more complex
		--button press tracking.
		--todo: generalize button index.
		jump_button=
		{
			update=function(self)
				--start with assumption
				--that not a new press.
				self.is_pressed=false
				if btn(2) then
					if not self.is_down then
						self.is_pressed=true
					end
					self.is_down=true
					self.ticks_down+=1
				else
					self.is_down=false
					self.is_pressed=false
					self.ticks_down=0
				end
			end,
			--state
			is_pressed=false,--pressed this frame
			is_down=false,--currently down
			ticks_down=0,--how long down
		},

		jump_hold_time=0,--how long jump is held
		min_jump_press=5,--min time jump can be held
		max_jump_press=15,--max time jump can be held

		jump_btn_released=true,--can we jump again?
		grounded=false,--on ground

		airtime=0,--time since grounded

		--animation definitions.
		--use with set_anim()
		anims=
		{
			["stand"]=
			{
				ticks=1,--how long is each frame shown.
				frames={1},--what frames are shown.
			},
			["walk"]=
			{
				ticks=5,
				frames={1,2,3,4,5},
			},
			["jump"]=
			{
				ticks=1,
				frames={1},
			},
			["slide"]=
			{
				ticks=1,
				frames={6},
			},
		},

		curanim="walk",--currently playing animation
		curframe=1,--curent frame of animation.
		animtick=0,--ticks until next frame should show.
		flipx=false,--show sprite be flipped.

		--request new animation to play.
		set_anim=function(self,anim)
			if(anim==self.curanim)return--early out.
			local a=self.anims[anim]
			self.animtick=a.ticks--ticks count down.
			self.curanim=anim
			self.curframe=1
		end,

		--call once per tick.
		update=function(self)

			--todo: kill enemies.

			--track button presses
			local bl=btn(0) --left
			local br=btn(1) --right

			--move left/right
			if bl==true then
				self.dx-=self.acc
				br=false--handle double press
			elseif br==true then
				self.dx+=self.acc
			else
				if self.grounded then
					self.dx*=self.dcc
				else
					self.dx*=self.air_dcc
				end
			end

			--limit walk speed
			self.dx=mid(-self.max_dx,self.dx,self.max_dx)

			--move in x
			self.x+=self.dx

			--hit walls
			collide_side(self)

			--jump buttons
			self.jump_button:update()

			--jump is complex.
			--we allow jump if:
			--	on ground
			--	recently on ground
			--	pressed btn right before landing
			--also, jump velocity is
			--not instant. it applies over
			--multiple frames.
			if self.jump_button.is_down then
				--is player on ground recently.
				--allow for jump right after 
				--walking off ledge.
				local on_ground=(self.grounded or self.airtime<5)
				--was btn presses recently?
				--allow for pressing right before
				--hitting ground.
				local new_jump_btn=self.jump_button.ticks_down<10
				--is player continuing a jump
				--or starting a new one?
				if self.jump_hold_time>0 or (on_ground and new_jump_btn) then
					if(self.jump_hold_time==0)sfx(snd.jump)--new jump snd
					self.jump_hold_time+=1
					--keep applying jump velocity
					--until max jump time.
					if self.jump_hold_time<self.max_jump_press then
						self.dy=self.jump_speed--keep going up while held
					end
				end
			else
				self.jump_hold_time=0
			end

			--move in y
			self.dy+=self.grav
			self.dy=mid(-self.max_dy,self.dy,self.max_dy)
			self.y+=self.dy

			--floor
			if not collide_floor(self) then
				self:set_anim("jump")
				self.grounded=false
				self.airtime+=1
			end

			--roof
			collide_roof(self)

			--handle playing correct animation when
			--on the ground.
			if self.grounded then
				if br then
					if self.dx<0 then
						--pressing right but still moving left.
						self:set_anim("slide")
					else
						self:set_anim("walk")
					end
				elseif bl then
					if self.dx>0 then
						--pressing left but still moving right.
						self:set_anim("slide")
					else
						self:set_anim("walk")
					end
				else
					self:set_anim("stand")
				end
			end

			--flip
			if br then
				self.flipx=false
			elseif bl then
				self.flipx=true
			end

			--anim tick
			self.animtick-=1
			if self.animtick<=0 then
				self.curframe+=1
				local a=self.anims[self.curanim]
				self.animtick=a.ticks--reset timer
				if self.curframe>#a.frames then
					self.curframe=1--loop
				end
			end

		end,

		--draw the player
		draw=function(self)
			local a=self.anims[self.curanim]
			local frame=a.frames[self.curframe]
			spr(frame,
				self.x-(self.w/2),
				self.y-(self.h/2),
				self.w/8,self.h/8,
				self.flipx,
				false)
		end,
	}

	return p

end

--make the camera.
function m_cam(target)
	local c=
	{
		tar=target,--target to follow.
		pos=m_vec(target.x,target.y),

		--how far from center of screen target must
		--be before camera starts following.
		--allows for movement in center without camera
		--constantly moving.
		pull_threshold=16,

		--min and max positions of camera
		--the edges of the level.
		pos_min=m_vec(64,64),
		pos_max=m_vec(320,64),

		shake_remaining=0,
		shake_force=0,

		update=function(self)

			self.shake_remaining=max(0,self.shake_remaining-1)

			--follow target outside of
			--pull range.
			if self:pull_max_x()<self.tar.x then
				self.pos.x+=min(self.tar.x-self:pull_max_x(),4)
			end
			if self:pull_min_x()>self.tar.x then
				self.pos.x+=min((self.tar.x-self:pull_min_x()),4)
			end
			if self:pull_max_y()<self.tar.y then
				self.pos.y+=min(self.tar.y-self:pull_max_y(),4)
			end
			if self:pull_min_y()>self.tar.y then
				self.pos.y+=min((self.tar.y-self:pull_min_y()),4)
			end

			--lock to edge
			if(self.pos.x<self.pos_min.x)self.pos.x=self.pos_min.x
			if(self.pos.x>self.pos_max.x)self.pos.x=self.pos_max.x
			if(self.pos.y<self.pos_min.y)self.pos.y=self.pos_min.y
			if(self.pos.y>self.pos_max.y)self.pos.y=self.pos_max.y
		end,

		cam_pos=function(self)
			--calculate camera shake.
			local shk=m_vec(0,0)
			if self.shake_remaining>0 then
				shk.x=rnd(self.shake_force)-(self.shake_force/2)
				shk.y=rnd(self.shake_force)-(self.shake_force/2)
			end
			return self.pos.x-64+shk.x,self.pos.y-64+shk.y
		end,

		pull_max_x=function(self)
			return self.pos.x+self.pull_threshold
		end,

		pull_min_x=function(self)
			return self.pos.x-self.pull_threshold
		end,

		pull_max_y=function(self)
			return self.pos.y+self.pull_threshold
		end,

		pull_min_y=function(self)
			return self.pos.y-self.pull_threshold
		end,

		shake=function(self,ticks,force)
			self.shake_remaining=ticks
			self.shake_force=force
		end
	}

	return c
end

function fire(direc)

	local b = {
		sp=16,
		x = p1.x - 4,
		y = p1.y - 16,
		dx = direc,
		dy = 0
	}

	add (bullets, b)
	isdetonate = false

end

function detonate(x,y)
 	local d = {
			x = x + 4,
			y = y + 4,
			t = 0,
			timer = 0,
		}
		add(det, d)

		detx = d.x
		dety = d.y

 for b in all (bullets) do
		del(bullets, b)
	end
		isdetonate = true;
end

function draw_bullets()
	if(p1.flipx == false) then
		direction = 1
	end
	if(p1.flipx == true) then
		direction = -1
	end

	for b in all (bullets) do
		spr(b.sp, b.x, b.y)
	end
	for d in all (det) do
		circ(d.x, d.y, d.timer/2, d.t)
		circ(d.x, d.y, d.timer/2 - 4, d.t)
	end
end

function draw_clouds()
		map(0,62,detx - 8,dety - 4,2,2)
end

function update_bullets()

		for b in all (bullets) do
			b.x += b.dx
			b.y += b.dy
		end

		if(btnp(4) and isdetonate) then 
			fire(direction)
		end
		if(btnp(5) and isdetonate == false) then
			for b in all (bullets) do
				detonate(b.x, b.y)
			end
		end

		for d in all (det) do
			randcol = flr(rnd(2))
			if(randcol == 0) then
				d.t = 14
			end
			if(randcol == 1) then
				d.t = 7
			end

			d.timer += 1
			if (d.timer == 20) then
				del(det, d)
			end
		end
end

function delete_bullets()
		for b in all (bullets) do
			if(b.x > cam.pos.x + 64 or 
			b.x < cam.pos.x - 64) then
				del(bullets, b)
				isdetonate = true;
			end
		end
end

--game flow
--------------------------------

--reset the game to its initial
--state. use this instead of
--_init()
function reset()
	ticks=0
	p1=m_player(64,40)
	p1:set_anim("walk")
	cam=m_cam(p1)
	bullets = {}
	isdetonate = true
	det = {}
	randcol = 0
	playerx = 0
	playery = 0
	direction = 1
	detx = 500
	dety = 500

end

--p8 functions
--------------------------------

function _init()
	reset()
end

function _update60()
	ticks+=1
	p1:update()
	cam:update()
	--demo camera shake
	update_bullets()
	delete_bullets()
end

function _draw()

	cls(0)
	camera(cam:cam_pos())

	map(0,0,0,0,128,128)

	p1:draw()
	draw_bullets()
	draw_clouds()
	-- debug
	-- camera(0,0)
	-- circ(cam.pos.x, cam.pos.y, 2,7)
	-- printc("adv. micro platformer",64,4,7,0,0)
	-- print(cam.pos.x)
end

[ Continue Reading.. ]

1 comment



3
1 comment


I was reading in the instructions something called, "breadcrumbs." I'm thinking this might be something like Gretel used to mark the path home out of the forest.

Can someone please explain how these are worked into PICO-8 and their usage ?

6 comments


Cart #54803 | 2018-08-07 | Code ▽ | Embed ▽ | No License

Description

Death is not the end of this knight's quest. This is a short demo of a game I've been working on for a bit now.

Instructions

Directional Keys move your character.
Hold the O Key to charge up, release the O Key to attack.
Hold the X Key to use your shield. The shield recharges when not in use.

Version

The current version is 1.0 and features the following changes:

+release

Thank you for playing my game!

3 comments


Cart #54774 | 2018-08-06 | Code ▽ | Embed ▽ | No License

The first complete game I have made.

It's pretty basic and silly, but hey I made it all by myself!

2 comments


--[[

a pressing problem.

many of you have played various
games in pico and have come
across that one game with the
dreaded btnp() function used
instead of btn().

for action games like
platformers or shooters, you
should =never= use btnp() and i
can think of a few shooters
i've played that use btnp()
making it difficult to maintain
auto-fire and movement at the
same time.

what's the difference ?

btn() reads a raw keystroke, it
does not wait for key repeat
and is perfect for action games.

btnp() reads like a standard
keyboard. it will allow one
press, then nothing, then
slowly repeat the stroke.

so btn() is good for action
games, and btnp() is better for
thinking puzzle games.

hope this helps !
]]--

m=0 x=60 y=60
repeat

cls()
t="off" if (m==1) t="on"
print("raw key="..t)
print("press ❎ to swap")
circfill(x,y,8)
if ((btn(⬆️) and m==1) or btnp(⬆️)) y-=1
if ((btn(⬇️) and m==1) or btnp(⬇️)) y+=1
if ((btn(⬅️) and m==1) or btnp(⬅️)) x-=1
if ((btn(➡️) and m==1) or btnp(➡️)) x+=1
if (btnp(❎)) m=1-m
flip()
until forever

[ Continue Reading.. ]

0 comments


Cart #54871 | 2018-08-08 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Despite being the third PICO-8 game I've made and obviously the first I'm posting here, this began as my first project. It's also the first project I've ever completed outside of a jam setting. I enjoyed discovering and becoming acquainted with PICO-8's limitations, and I accomplished a lot more than I expected I would when I first started on Cake Quest back in December. If you're interested, you can read about its inception here and about its development here.

I learned a lot, and I hope others can learn from it as well.

EDIT: Modified vertical camera tracking

EDIT 2: Made further adjustments to vertical camera tracking

5 comments


No, not that kind. The one that's a useful routine that helps with printing your text That's right:

PRINTS CHARMING.

Cart #54744 | 2018-08-05 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

Functions include:

Main() ... test program
Prints() ... the routine to print it all
Dec() ... routine to draw zero-padded numbers

Got any questions ? Just ask !

0 comments


Cart #54737 | 2018-08-05 | Code ▽ | Embed ▽ | No License
3


A bit less inspired than the last ones, but I am trying to not leave any WIPs unfinished. Besides, drawing spirals is always cool.

3
0 comments


Cart #54724 | 2018-08-05 | Code ▽ | Embed ▽ | No License
3

In a more enlightened world, we will no longer need to restrict ourselves to paddles.

Press button 1 to "jump out" of the object that you're controlling. Press button 1 again to "jump in" to anything else green.

3
3 comments


It certainly is convenient to be able to compile a PICO program into a Windows and Macintosh & Linux executable with the command:

export program.bin

To create an HTML you can use:

export program.html

I was wondering if someone who was HTML savvy could post the absolute minimal code for an HTML to play and display JUST the .JS at a level of 100% screen height and ability to modify the default width of 100% with anything like 125% for a slightly longer across screen.

No code desired for external buttons just in this simple window.

Also, are there input values to that HTML which let you keep sharp pixels, dithered, or to reproduce like an old television with scan-lines ?

To create the screen, apparently you need more than just this:

<script type="text/javascript" src="program.js"></script>
0 comments


With the small size that PICO is, it should be possible to load and save state, much like you can do in a NES or SNES emulator.

In NESTOPIA you can even hold the backspace to run the game backwards, useful for getting out of a pit say in Super Mario Bros. But I think rewind may be just a bit more complex than save state.

If you're not familiar with what this is, by pressing F2 or F4 (you configure the keys) in the game, you can SAVE STATE.

By doing so, your game progress right up to there is saved to the pixel ! No need to save your game using a save-spot or even accessing menu options as part of the game.

Loading State is just as easy. You could shut down the game for instance, bring something else up, finally bring back up the original game and before the opening credits have even finished, you can press F4 or Load State and your game is returned exactly back where you left it.

Saving State in Pico means saving all variables, all memory, program line number being run, everything, to a binary file.

Loading State injects all that raw data right back in place again. As mentioned, this is very common in game emulators such as for Nintendo, Super Nintendo, Gameboy, and even Sony Pocket Playstation.

Naturally this would make platformers and other action games easier to play as you could SAVE STATE right at a part of the game where you knew you were safe.

What do you think - or do you think REWIND is possible as well ?

4 comments


A few quick questions, mostly for sound.

[1] Can you play a SFX and have the ability to change the pitch of it before it plays ?

[2] Is there a way to COPY and PASTE SFX data from one PICO-8 app or Notepad to another ?

[3] When defining values for local variables, if you need to define more than one, it either requires 2-lines of code:

local a=1
local b=2

Or this unusual way:

local a,b=1,2

Is it possible someway to do it like this ?

local a=1,b=2

If you try this, you get an error.

If you try it this way:

local a=1 b=2

Then "b" value is set, but it is global.

4 comments


Hello everyone,

I'm just wondering which of the handheld machines currently on the market are able to run Pico-8 and its games. I just saw that a couple of recent threads are already active about this topic (I'm referring to the ones about Gameshell and PocketCHIP) but I couldn't find any list.

Since I'm very interested in development for handheld consoles and I would like to start with something related to Pico-8, I'm asking you which are all of the known portable devices capable of running our fantasy console!

Thank you in advance for the answers :)

3
8 comments


Cart #54673 | 2018-08-04 | Code ▽ | Embed ▽ | No License
2

2
1 comment


Cart #54654 | 2018-08-03 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
24

Hello ! It seems PICO-8 now has the ability to read the true keyboard, at least the normal keys, alphanumeric, ENTER, TAB, Backspace, and others.

So I thought I would post a working example of how to make use of this.

But does it have the ability to read raw keystrokes ? Where you can press an arrow key and the result is returned immediately - not requiring a delay as set by standard keyboard entries ?

pico-8 cartridge // http://www.pico-8.com
version 16
__lua__
-- global+main ----------------

ins=[[
  ** real keyboard input **

    from the lab of dw817

http://writerscafe.org/dw817

  thanks to tobiasvl for
  memory tweak locations!

can you make improvements to
this code or its functions ?
please do ! it  should
benefit everyone ...
]]

asci="\1\2\3\4\5\6\7\8\9\10\11\12\13\14\15\16\17\18\19\20\21\22\23\24\25\26\27\28\29\30\31\32\33\34\35\36\37\38\39\40\41\42\43\44\45\46\47\48\49\50\51\52\53\54\55\56\57\58\59\60\61\62\63\64\65\66\67\68\69\70\71\72\73\74\75\76\77\78\79\80\81\82\83\84\85\86\87\88\89\90\91\92\93\94\95\96\97\98\99\100\101\102\103\104\105\106\107\108\109\110\111\112\113\114\115\116\117\118\119\120\121\122\123\124\125\126\127\128\129\130\131\132\133\134\135\136\137\138\139\140\141\142\143\144\145\146\147\148\149\150\151\152\153\154\155\156\157\158\159\160\161\162\163\164\165\166\167\168\169\170\171\172\173\174\175\176\177\178\179\180\181\182\183\184\185\186\187\188\189\190\191\192\193\194\195\196\197\198\199\200\201\202\203\204\205\206\207\208\209\210\211\212\213\214\215\216\217\218\219\220\221\222\223\224\225\226\227\228\229\230\231\232\233\234\235\236\237\238\239\240\241\242\243\244\245\246\247\248\249\250\251\252\253\254\255"

-- main program ---------------
function main()

cls()
print(ins,8,8,5)
spr(1,60,16)
poke(24365,1) -- mouse+key kit

t=""
print("type in some text:",28,100,11)
repeat
  grect(0,108,128,5)
  print(t,64-len(t)*2,108,6)
  grect(64+len(t)*2,108,3,5,8)
  flip()
  grect(64+len(t)*2,108,3,5,0)
  if stat(30)==true then
    c=stat(31)
    if c>=" " and c<="z" then
      t=t..c
    elseif c=="\8" then
      t=fnd(t)
    elseif c!="\13" then
      cls()
      color(7)
      print("raw key:")
      print(asc(c))
      stop()
    end
  end
until c=="\13"

end --main()

-->8
-- functions ------------------

-- grect: draw proper rectangle
function grect(h,v,x,y,c)
  rectfill(h,v,h+x-1,v+y-1,c)
end --grect(.)

-- return string minus last chr
function fnd(a)
  return sub(a,1,#a-1)
end--fnd(.)

-- len: return string length
function len(a)
  return #a
end -- len(.)

-- return pos # of str b in a
function instr(a,b)
local r=0
  if (a==null or a=="") return 0
  if (b==null or b=="") return 0
  for i=1,#a-#b+1 do
    if sub(a,i,i+#b-1)==b then
      r=i
      return r
    end
  end
  return 0
end --instr(.)

-- return ascii id of character
function asc(a)
  return instr(asci,a)
end --asc(.)

main()

__gfx__
00000000006060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000006060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00700700007060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00077000070006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00077000733333600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
007007006bbbbbd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000066666dd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
__label__
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000005050505000005550555055505000000050505550505055500550555055505500000055505500555050505550000050505050000000000000
00000000000000000500050000005050500050505000000050505000505050505050505050505050000005005050505050500500000005000500000000000000
00000000000000005550555000005500550055505000000055005500555055005050555055005050000005005050555050500500000055505550000000000000
00000000000000000500050000005050500050505000000050505000005050505050505050505050000005005050500050500500000005000500000000000000
00000000000000005050505000005050555050505550000050505550555055505500505050505550000055505050500005500500000050505050000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000606000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000606000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000706000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000007000600000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000073333360000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000006bbbbbd0000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000066666dd0000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000055505550055055500000555050505550000050005550555000000550555000005500505055505500555000000000000000000000
00000000000000000000000050005050505055500000050050505000000050005050505000005050500000005050505050500500005000000000000000000000
00000000000000000000000055005500505050500000050055505500000050005550550000005050550000005050505055500500005000000000000000000000
00000000000000000000000050005050505050500000050050505000000050005050505000005050500000005050555050500500005000000000000000000000
00000000000000000000000050005050550050500000050050505550000055505050555000005500500000005550555055505550005000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000505055505550555000000050005050505550555055505550555005500550555055505550000005505550055000505500505055505500555000000000
00000000505005000500505005000500050050505050050005005000505050005000505050005000000050505050500005005050505050500500005000000000
00000000555005000500555000000500050050505500050005005500550055505000555055005500000050505500500005005050505055500500005000000000
00000000505005000500500005000500050055505050050005005000505000505000505050005000000050505050505005005050555050500500005000000000
00000000505005000500500000005000500055505050555005005550505055000550505050005550050055005050555050005550555055505550005000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000005550505055505500505005500000555005500000555005505550555055500550505050000000555005505550000000000000000000000000
00000000000000000500505050505050505050000000050050500000050050505050050050505000505050000000500050505050000000000000000000000000
00000000000000000500555055505050550055500000050050500000050050505500050055505550505050000000550050505500000000000000000000000000
00000000000000000500505050505050505000500000050050500000050050505050050050500050555050000000500050505050000000000000000000000000
00000000000000000500505050505050505055000000050055000000050055005550555050505500050055500000500055005050000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000005550555055500550555050500000555050505550555050500000500005500550555055505550055055000550050000000000000000000000
00000000000000005550500055505050505050500000050050505000505050500000500050505000505005000500505050505000050000000000000000000000
00000000000000005050550050505050550055500000050050505500555055000000500050505000555005000500505050505550050000000000000000000000
00000000000000005050500050505050505000500000050055505000505050500000500050505000505005000500505050500050000000000000000000000000
00000000000000005050555050505500505055500000050055505550505050500000555055000550505005005550550050505500050000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000055055505500000050500550505000005550555050505550000055505550555055500550505055505550555055005550055000005550055000000000
00000000500050505050000050505050505000005550505050505000000005005550505050505050505050005550500050500500500000000500505000000000
00000000500055505050000055505050505000005050555055005500000005005050555055005050505055005050550050500500555000000500505000000000
00000000500050505050000000505050505000005050505050505000000005005050500050505050555050005050500050500500005000000500505000000000
00000000055050505050000055505500055000005050505050505550000055505050500050505500050055505050555050500500550000000500550000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000555050505550055000000550055055005550000005505550000055505550055000005550505055000550555055500550550005500000555000000000
00000000050050500500500000005000505050505000000050505050000005000500500000005000505050505000050005005050505050000000005000000000
00000000050055500500555000005000505050505500000050505500000005000500555000005500505050505000050005005050505055500000055000000000
00000000050050500500005000005000505050505000000050505050000005000500005000005000505050505000050005005050505000500000000000000000
00000000050050505550550000000550550055505550000055005050000055500500550000005000055050500550050055505500505055000000050000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000555050005550555005505550000055000550000005000000555055500000000005505050055050505000550000000000000000000000000000000000
00000000505050005000505050005000000050505050000005000000050005000000000050005050505050505000505000000000000000000000000000000000
00000000555050005500555055505500000050505050000005000000050005000000000055505550505050505000505000000000000000000000000000000000
00000000500050005000505000505000000050505050000000000000050005000000000000505050505050505000505000000000000000000000000000000000
00000000500055505550505055005550000055505500000005000000555005000000000055005050550005505550555000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000555055505500555055505550555000005550505055505550505005505500555000000000000000000000000000000000000000000000000000000000
00000000505050005050500050000500050000005000505050005050505050505050500000000000000000000000000000000000000000000000000000000000
00000000550055005050550055000500050000005500505055005500555050505050550000000000000000000000000000000000000000000000000000000000
00000000505050005050500050000500050000005000555050005050005050505050500000000000000000000000000000000000000000000000000000000000
00000000555055505050555050005550050000005550050055505050555055005050555000000500050005000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000bbb0b0b0bbb0bbb00000bbb0bb0000000bb00bb0bbb0bbb00000bbb0bbb0b0b0bbb000000000000000000000000000000000
00000000000000000000000000000b00b0b0b0b0b00000000b00b0b00000b000b0b0bbb0b00000000b00b000b0b00b000b000000000000000000000000000000
00000000000000000000000000000b00bbb0bbb0bb0000000b00b0b00000bbb0b0b0b0b0bb0000000b00bb000b000b0000000000000000000000000000000000
00000000000000000000000000000b0000b0b000b00000000b00b0b0000000b0b0b0b0b0b00000000b00b000b0b00b000b000000000000000000000000000000
00000000000000000000000000000b00bbb0b000bbb00000bbb0b0b00000bb00bb00b0b0bbb000000b00bbb0b0b00b0000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000066606660066060600000666060600000666006606060888000000000000000000000000000000000000000
00000000000000000000000000000000000000000060606060600060600000666060600000606060606060888000000000000000000000000000000000000000
00000000000000000000000000000000000000000066606660600066000000606066600000660060600600888000000000000000000000000000000000000000
00000000000000000000000000000000000000000060006060600060600000606000600000606060606060888000000000000000000000000000000000000000
00000000000000000000000000000000000000000060006060066060600000606066600000666066006060888000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

[ Continue Reading.. ]

24
13 comments


Hey everybody!

I'm starting a PICO-8 indexing project called PICO-ATE (www.pico-ate.com). It's a resource dump site for templates and tutorials that might be too niche or specific for our wiki or Github pages. Right now we've got a template for creating printable PICO-8 game manuals, as well as a game tutorial by @misato and a Newgrounds Medal tutorial by @Bigaston.

I'd love to host any tutorials, templates or weird one-offs that any of you might have! If anybody is interested, either dump your link in this thread, or hit me up on Twitter (@platformalist) and I'll review the content!

8 comments


Cart #54592 | 2018-08-02 | Code ▽ | Embed ▽ | No License

This is my first game made with pico-8.
Let's experience unexpectedly busy Maxwell's daemon!

Controls
game start: X and O
open the door: X or O

Goal
separate quick particles and slow particles with the door as the borderline.

Gameover
time or life runs out.

Last stage is 3.
Try it.

1 comment




Top    Load More Posts ->