Log In  


The Pixel Toy (TpxT)

2nd picotron game ever made!?

To play, copy and paste code below (click "show") into picotron playground (or actual picotron when it comes out!)

If it says "clipboard can not be read", then don't use base Firefox. if you aren't using base Firefox, then give picotron clipboard permissions in site settings.

vvv Code vvv

--	ThePixelToy
--	by antibrain

--[[

todo:
maybe some sort of GOL type
sounds/graphics/prebuilt maps when ptron 0.1 comes out
scene loader from clipboard to make something like TPT's save browser
more pixel types
more reactions
make neut/prot act like they do in TPT instead of acting like GAS/FIRE
saving/loading saves to hard disc. maybe using printh as file? cartdata?
chemestry?
air pressure
heat
simulate each pixel individualy so we can track its heat, speed, mass, weight, etc.
virus because virus in TPT is very satisfying
make fill/line tool not terrible
deco layers
ability to change sim speed
full keyboard support?

]]--
j=0
dc=5
size=0
sim=1

function _update() --update loop
	mx,my,mb=get_mouse() --get mouse data
	simulatepixels() --simulate pixels
   controls() --allow game to be controlled
end

function _draw() --draw loop
 mousedraw() --draw with mouse
 ui() --draw ui
end

function simulatepixels()
if sim==1 then
for i=1,4000 do	--4000 times per frame (30fps?)

		local x=rnd(480) --get random x and
		local y=rnd(270) --y values and
		local c=pget(x,y) --get the color of that pixel.
		if c==8 then --is red

			if pget(x,y+1)!=5 and pget(x,y+1)!=7 then --check all bordering pixels and if any of them arent a wall
				pset(x,y+1,c) --then set it to red
			end
			if pget(x,y-1)!=5 and pget(x,y-1)!=7 then --repeat for all other bordering pixels
				pset(x,y-1,c)
			end
			if pget(x+1,y)!=5 and pget(x+1,y)!=7 then
				pset(x+1,y,c)
			end
			if pget(x-1,y)!=5 and pget(x-1,y)!=7 then
				pset(x-1,y,c)
			end		
		end	

		if c==15 then --sand
		 if pget(x,y+1)==0 then --sand

			pset(x,y+1,c) --f a l l
			pset(x,y,0)	
		 end
		 if pget(x,y+1)==12 then 
		 	pset(x,y+1,c)
		 	pset(x,y,12)
		 end
		 if pget(x,y+1)==1 then
		 	pset(x,y+1,c)
		 	pset(x,y,1)
		 end
		end

		if c==2 or c==10 or c==11 then --gas (fire?)/neut/prot (i couldnt get neut/prot to act normal so i gave up :p )
				local j=flr(rnd(4)) --pick random number
				local q=flr(rnd(2))
				if q==1 and c==2 then --decay randoly
					pset(x,y,0)
				end
				if q!=4 and j==0 and pget(x+1,y)==0 then --go in random direction
					pset(x,y,0)
					pset(x+1,y,c)
				end
				if q!=4 and j==1 and pget(x-1,y)==0 then	
					pset(x,y,0)
					pset(x-1,y,c)
				end
				if q!=4 and j==2 and pget(x,y+1)==0 then
					pset(x,y,0)
					pset(x,y+1,c)
				end
				if q!=4 and j==3 and pget(x,y-1)==0 then
					pset(x,y,0)
					pset(x,y-1,c)
				end
				if c==11 then
					if pget(x+1,y)==1 and pget(x+1,y)==0 then
					 pset(x+1,y,11)
					end
					if pget(x-1,y)==1 and pget(x-1,y)==0 then
					 pset(x-1,y,11)
					end
					if pget(x,y+1)==1 and pget(x,y+1)==0 then
					 pset(x,y+1,11)
					end
					if pget(x,y-1)==1 and pget(x,y-1)==0 then
					 pset(x,y-1,11)
					end

				end
				if c==2 and pget(x,y+1)==12 or pget(x,y-1)==12 or pget(x-1,y)==12 or pget(x+1,y)==12 then
					pset(x,y,0)
				end
		end
		if c==12 or c==1 or c==9 then --warder/deut/lava physics

			if pget(x,y+1)==0 then --let it fall down
				pset(x,y,0)
				pset(x,y+1,c)
			elseif pget(x-1,y)==0 then --if there's an open space and it isnt in free-fall,
				pset(x-1,y,c) --allow it to drip left and
				pset(x,y,0)
			elseif pget(x+1,y)==0 then
				pset(x+1,y,c) --right as well
				pset(x,y,0)
			end
			if c==1 and pget(x,y+1)==11 or pget(x,y-1)==11 or pget(x-1,y)==11 or pget(x+1,y)==11 then
				pset(x,y,11)
			end
		end
		if c==16 then --remove fill border
			pset(x,y,0)
		end
		if c==3 or c==4 then --wood/plant/foliage
		 if pget(x,y+1)==2 or pget(x,y+1)==9 then
		  pset(x,y,2)
		 end
		 if pget(x,y-1)==2 or pget(x,y-1)==9 then
		  pset(x,y,2)
		 end
		 if pget(x+1,y)==2 or pget(x+1,y)==9 then
		  pset(x,y,2)
		 end
		 if pget(x-1,y)==2 or pget(x-1,y)==9 then
		  pset(x,y,2)
		 end
		 if c==3 then
		  if pget(x,y+1)==12 then
		   pset(x,y+1,3)
		  end
		  if pget(x,y-1)==12 then
		   pset(x,y-1,3)
		  end
		  if pget(x+1,y)==12 then
		   pset(x+1,y,3)
		  end
		  if pget(x-1,y)==12 then
		   pset(x-1,y,3)
	   	  end
	   	end
		end
		if c==14 then
		 if pget(x,y+1)==0 then
		  pset(x,y,0)
		  pset(x,y+1,14)
		 end
		 if pget(x,y+1)>0 and pget(x,y+1)!=5 and pget(x,y+1)!=14 and pget(x,y+1)!=29 then
		  circfill(x-4,y-4,16,2)
		 end
		end
		if c==6 then
			if pget(x,y+1)==10 or pget(x,y+1)==9 then
				pset(x,y,9)
			end
			if pget(x,y-1)==10 or pget(x,y-1)==9 then
				pset(x,y,9)
			end
			if pget(x+1,y)==10 or pget(x+1,y)==9 then
				pset(x,y,9)
			end
			if pget(x-1,y)==10 or pget(x-1,y)==9 then
				pset(x,y,9)
			end

		end
		if c==7 then
			if pget(x,y+1)==0 then
				pset(x,y,0)
				pset(x,y+1,7)
			end
			if pget(x,y+1)==12 then
				pset(x,y+1,7)
			end
			if pget(x,y-1)==12 then
				pset(x,y-1,7)
			end
			if pget(x+1,y)==12 then
				pset(x+1,y,7)
			end
			if pget(x-1,y)==12 then
				pset(x-1,y,7)
			end

			if pget(x,y+1)==2 or pget(x,y+1)==9 then
				pset(x,y,12)
			end
			if pget(x,y-1)==2 or pget(x,y-1)==9 then
				pset(x,y,12)
			end
			if pget(x+1,y)==2 or pget(x+1,y)==9 then
				pset(x,y,12)
			end
			if pget(x-1,y)==2 or pget(x-1,y)==9 then
				pset(x,y,12)
			end
		end
		if c==9 then
			local q
			if pget(x+1,y)==6 and q==0 then
				pset(x+1,y,c)
			end
			if pget(x-1,y)==6 and q==0 then
				pset(x-1,y,c)
			end
			if pget(x,y+1)==6 and q==0 then
				pset(x,y+1,c)
			end
			if pget(x,y-1)==6 and q==0 then
				pset(x,y-1,c)
			end

			if pget(x+1,y)==12 or pget(x-1,y)==12 or pget(x,y+1)==12 or pget(x,y-1)==12 then
				pset(x,y,6)
				q=1
			else
			 q=0
			end

		end
	end
end
end

function mousedraw()

if mb==1 and not(btn(5)) then --if left click then
  circfill(mx,my,size,dc) --draw red/wall at mouse pos
 elseif mb==2 then --if right click (or ctrl click)
  circfill(mx,my,size,0) --erase (draw black at mouse pos)
 end
if btn(5) then --check if x is pressed
	if mb==1 and j==0 then --only do this once per fill!
		ox=mx --set old mx to mc
		oy=my --same for old my
		j=1 --j
	end
	if mb==1 then-- if mousedown
	 omb=1 --set old mouse click to 1
	 rect(ox,oy,mx,my,16) --fill outline
	elseif omb==1 then --if its one then
	 rectfill(ox,oy,mx,my,dc) --fill
	 omb=0 --set old mouse button to 0 (because mouse was released)
	 ox=nil --nil ox and oy
	 oy=nil
	 j=0 --j
	end
else
	ox=nil --if x isnt pressed, nil x and y, then j
	oy=nil
	j=0	
end

end

function ui() --ui bar
 rectfill(0,0,480,8,29) --bar
 circfill(4,4,2,dc) --current color
 rect(0,0,8,8,5) --outline on current color
 print("size:"..flr(size),50,1,0)--brush size
 print(scolor,12,1,0)
 print("Cpu: "..flr(stat(1)*10),100,1,0) 
 if sim==1 then
 	print("running",445,1,0)
 else
   print("paused!",445,1,0)
 end 
 if dc==0 then scolor="erase"end
 if dc==1 then scolor="deut"end
 if dc==2 then scolor="fire"end
 if dc==3 then scolor="plant"end
 if dc==4 then scolor="wood"end
 if dc==5 then scolor="wall"end
 if dc==6 then scolor="stone"end
 if dc==7 then scolor="snow"end
 if dc==8 then scolor="eater"end
 if dc==9 then scolor="lava"end
 if dc==10 then scolor="proton"end
 if dc==11 then scolor="neutron"end
 if dc==12 then scolor="water"end
 if dc==13 then scolor="paint"end
 if dc==14 then scolor="bomb"end
 if dc==15 then scolor="sand"end
end

function controls() --controls
		if btn(1) then dc+=0.1 end --change brush color
		if btn(0) then dc-=0.1 end
		if dc<0 then dc=0 end --dont let color be too much or little or else
		if dc>15 then dc=15 end --the screen dies :(
		if btn(2) then size+=0.1 end --change brush size
		if btn(3) then size-=0.1 end
	   if size<0 then size=0 end--dont let it go negative
		if btn(4)==true then sim=0 else sim=1 end --pause when z is held
		if btn(1)==false and btn(0)==false then dc=flr(dc) end
end

As you can tell, this is based off of The Powder Toy (which you should play!) this is not intended to be a recreation of TPT, more like a demake.

TPT download: https://powdertoy.co.uk/

PicoTron playground: https://www.lexaloffle.com/picotron.php?page=playground

PicoTron main page: (Buy it. gun.png) https://www.picotron.net/

First picotron game ever made: https://www.lexaloffle.com/bbs/?tid=52328

Controls (This game)

Left click - Draw with selected pixel.
Right click - Erase (draw black).

Up/Down - Change brush size.
Left/Right - Change pixel type.
X (hold) - Rectangular fill (Hold x and press and drag Lclick, then release when ready to fill).
Z (hold) - Pauses simulation while held.

Basic reactions (and images!):

Plant and wood burn.

Neutrons eat Deuterium.
Plant eats water.
Water can freeze.

Lava and fire and protons are hot.
Bomb is bomb.

Stone melts when hot.

paint does nothing (just for drawing)

Water and lava dont mix!

And more?

Comment if you'd like to see any additions! ill add them if they are reasonable/are possible.

Thanks for checking this out! i hope you have fun with it.

1


1

can you add some pictures here?


Thanks for the suggestion, @merwok ! i just added some images for the game. sorry i took awhile, i was having some technical issues with picotron not reading my clipboard.



[Please log in to post a comment]