Log In  

BBS > Community Superblog
All Users | Following | GIFs | Off-site

Hey everyone,

I'm super excited to be sharing my first ever PICO-8 game with you today. It's a two player battle game similar to 'Worms' where two tanks fight to the death on fully destructible terrain.

CONTROLS:

  • Movement: Left + Right
  • Aim: Up + Down
  • Shoot: X

GOAL:

Destroy the terrain under your opponent. The first tank to reach the bottom of the screen loses!

GOOD LUCK AND HAVE FUN! :)

Cart #tanks-0 | 2020-06-28 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
6

6
0 comments


Hey, I'm making a game about a crab in love with a seashell. I'd appreciate some feedback :)

Things left:

  • Main screen
  • Sound and music
  • Probably more polish on the graphics

Cart #crabbys_seashell_prototype-0 | 2020-06-28 | Code ▽ | Embed ▽ | No License

0 comments


Ride through the desert jumping over cacti. See how far you can get!

This is my first ever completed game. It was a lot of fun :D

Cart #jairtrejo_ride-0 | 2020-06-28 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
2

2
2 comments


Cart #caped_feline_arena-4 | 2023-06-06 | Code ▽ | Embed ▽ | No License
78

Finally "done" :)

> You awake from your rest in the void with a voice repeating in your head.
> It says: 'meow meow meow meow mexow' and you know what must be done:
> It's time to retrieve the book of Magu F'ahn.

You're a cat, you're magical, it's you and your wand against insurmountable odds, cats, and infinite pigeons.

A retro fps with 8 singleplayer maps and 3 "botmatch" maps. Select maps from main menu, all botmatch maps unlocked from the start, singleplayer maps unlock as you complete them.

You can also play this on the PICO-8 BBS

Controls

  • Arrow keys - move (strafe if mouselook enabled)
  • Z/C - strafe/sidestep (hold, then press left and right, unused with mouselook enabled)

[ Continue Reading.. ]

78
19 comments


Cart #shelledshinobi1-7 | 2020-07-14 | Code ▽ | Embed ▽ | No License
205

Shelled Shinobi

Alternate between classic platforming and controlling a fast sliding shell.


Controls

Keyboard / Gamepad:
Move: Left, Right arrow keys / Left joystick or D-Pad (p8/bin).
Jump*: Z or C / 🅾️.
Shell*: X or V / ❎.
Pause, Options: P or Enter / Start (p8/bin) or Back (web).

[ Continue Reading.. ]

205
65 comments


Cart #iconsinc-13 | 2020-06-28 | Code ▽ | Embed ▽ | No License
2

Now with 2 players!

A text only multiplayer pico-8 overcooked inspired painting game.

Pick and icon and put it on the color for a couple seconds to paint it.

Give the correct icon to the customer.

Collect your coins!

TODO:

  • Backgrounds
2
1 comment


V1.1 Changes:

  • Level 12 is completely redone
  • Current level number is shown in top right
  • Auto jumping is prevented
  • Wolrd 3(level 9-12) invisible blocks are a bit more visible
  • Hitting the top of a block is more forgiving

Cart #singlejump_v1_1-0 | 2020-06-28 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

You are a slime that can only jump once, but with the help of jump coins you'll be able to jump once more.

This is my first game made with Pico-8 and my first try at game dev as a whole.

Please enjoy :)

Cart #singlejump-0 | 2020-06-27 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

1
10 comments


I'm working on my first PICO-8 game which is also the first time I really got into programming. Now I almost hit the token count but I don't really know how to shorten the code. I also admit I got really careless when writing the code and was mostly just happy whenever it worked. In at least three instances I'm 100% certain there needs to be a much more efficient way to code, any experienced programmer will probably cringe so bear with me.
But I'd really appreciate any help!

The first code is a function that adds text to the screen with each sentence delayed.
oprint2() is just a function I copied from Sophie Houldens talkthrough of Curse of Greed which adds an outline to the text.
Right now there are six texts but I want this function to work with an even greater number of texts and to able to make changes without so much hussle!
The text content and the if-statements to trigger them are always different.
The text style/colors are always the same. Right now I have individual timer variables are for each text which I realize is horrible. If it helps, I'd have no problem with all texts having the same speed.

function intro()

camera()
controls()
if ending_init==0 then
 if help==1 then
  if game_start_t <= 320 then
   oprint2("            move\n\n        ⬅️ ⬆️ ⬇️ ➡️",8,24,0,15)
  end
  if game_start_t >= 180 and game_start_t <= 460 then
   oprint2("\n\n  search for hints\n\n         ❎",8,44,0,15)
  end
  if game_start_t >= 370 and game_start_t <= 530 then
   oprint2("\n\nsearch through our belongings\n\n              ❎",8,64,0,15)
  end
  if game_start_t >= 500 and game_start_t <= 700 then
   oprint2("\n\n        surrender\n\n              🅾️",8,84,0,15)
  end
  if game_start_t <= 710 then
   game_start_t += 1
  end
 end

 if p.keys >= 1 and dget(2)!=1 then
  if key_timer <= 240 then
   oprint2("      a key",8,24,0,15)
  end
  if key_timer >= 50 and key_timer <= 270 then
   oprint2("\n\n  opens either a chest\n\n    or a door",8,34,0,15)
  end
  if key_timer >= 120 and key_timer <= 300 then
   oprint2("  and might only fit once.",8,82,0,15)
  end
  if key_timer <= 310 then
   key_timer+=1
  else
   dset(2,1)
  end
 end

 if steponfv >= 1 and dget(3)!=1 then
  if stepon_timer <= 240 then
   oprint2("every small decision",8,24,0,15)
  end
  if stepon_timer >= 50 and stepon_timer <= 270 then
   oprint2("\n\n  will\n\n    influence",8,34,0,15)
  end
  if stepon_timer >= 120 and stepon_timer <= 300 then
   oprint2("  our fate.",8,82,0,15)
  end
  if stepon_timer <= 310 then
   stepon_timer+=1
  else
   dset(3,1)
  end
 end

 if musx == 7 and musy == 3 then
  if restart_timer >= 350 and restart_timer <= 600 then
   oprint2("the heart of the desert",8,24,0,15)
  end
  if restart_timer >= 700 and restart_timer <= 1000 then
   oprint2("\n\nwhere everything ends\n\n  and everything begins ...",8,34,0,15)
  end
  if restart_timer >= 1100 and restart_timer <= 1400 then
   oprint2("we came so far this time",8,54,0,15)
  end
  if restart_timer >= 1500 and restart_timer <= 1800 then
   oprint2("are you ready\n\n to unlearn everything\n\n   again ...?",8,74,0,15)
  end
   restart_timer+=1
  if restart_timer >= 1980 then
  poke(rnd(23800),rnd(0x100))
  end
 end

 if musx == 1 and musy == 0 and hiddendoorv == 0 and greedv == 0 and steponv == 0 and steponfv == 0 and textreadv==0 and ending_i==0 then
  if east_timer >= 50 and east_timer <= 250 then
   oprint2("this is not the empty room ...",8,24,0,15)
  end
  if east_timer >= 200 and east_timer <= 300 then
   oprint2("we shall head east\n\n   and ascend!",8,44,0,15)
  end
  if east_timer <= 310 then
  east_timer+=1
  end
 end

 if musx == 4 and musy == 0 and hiddendoorv != 0 and textreadv !=0 then
  if empty_timer >= 30 and empty_timer <= 120 then
   oprint2("my mind is restless",8,24,0,15)
  end
  if empty_timer >= 140 and empty_timer <= 220 then
   oprint2("the noise is unbearing",8,44,0,15)
  end
  if empty_timer <= 230 then
  empty_timer+=1
  end
 end

end
end

The second code teleports the player from certain map tiles to others when stepped on.
Sometimes it works two ways but then it changes to one tile in either x or y to prevent a loop.
My problem is again that the if-statements are always different so I don't know how to group them together and sometimes there are multiple if-statements or they require different variables than p.x and p.y.

function desert_teleport()
if ending_init== 0 then
 if greedv >= greed_one then
  if p.x == 1 and p.y == 1 then
   p.x = 49
   p.y = 1
  end
 elseif hiddendoorv >= hiddendoor_one then
  if p.x == 4 and p.y == 6 then
    p.x = 88
    p.y = 54
   end
 elseif textreadv >= textread_one then
  if p.x == 79 and p.y == 60 then
    p.x = 121
    p.y = 25
  end
 end

 if (p.x >= 112 and p.x <= 127 and p.y == 47) or (p.y >= 16 and p.y <= 47 and p.x == 127)  then
  p.x = flr(rnd(14)) + 97
  p.y = flr(rnd(14)) + 34

 elseif (p.y >= 16 and p.y <= 32 and p.x == 112) or (p.x >= 96 and p.x <= 111 and p.y == 32) then
  p.x = flr(rnd(14)) + 113
  p.y = flr(rnd(14)) + 34

 elseif (p.y >= 32 and p.y <= 63 and p.x == 96) or (p.x >= 96 and p.x <= 111 and p.y == 63) then
  p.x = flr(rnd(14)) + 113
  p.y = flr(rnd(14)) + 17

 elseif (p.y >= 2 and p.y <= 13 and p.x == 31) then
  p.x = flr(rnd(12)) + 65
  p.y = flr(rnd(12)) + 1

 elseif p.x == 79 and p.y == 60 then
  p.x = 17
  p.y = 37

 elseif p.x == 16 and p.y == 37 then
  p.x = 78
  p.y = 60

 elseif p.x == 35 and p.y == 15 then
  p.x = 89
  p.y = 49

 elseif p.x == 89 and p.y == 48 then
  p.x = 35
  p.y = 14

 elseif p.x == 40 and p.y == 0 then
  p.x = 99
  p.y = 30

 elseif p.x == 99 and p.y == 31 then
  p.x = 40
  p.y = 1

 elseif p.x == 6 and p.y == 63 then
  p.x = 107
  p.y = 17

 elseif p.x == 107 and p.y == 16 then
  p.x = 6
  p.y = 62

 elseif p.x == 92 and p.y == 31 then
  p.x = 19
  p.y = 30

 elseif p.x == 19 and p.y == 31 then
  p.x = 92
  p.y = 32

 elseif p.x == 0 and p.y == 10 then
  p.x = 110
  p.y = 22

 elseif p.x == 111 and p.y == 22 then
  p.x = 1
  p.y = 10

 elseif p.x == 16 and p.y == 28 then
  p.x = 110
  p.y = 25

 elseif p.x == 111 and p.y == 25 then
  p.x = 17
  p.y = 28

 elseif p.x == 56 and p.y == 0 then
  p.x = 40
  p.y = 42

 elseif p.x == 79 and p.y == 41 then
  p.x = 1
  p.y = 38

 elseif p.x == 0 and p.y == 38 then
  p.x = 78
  p.y = 41

 elseif p.x == 47 and p.y == 17 then
  p.x = 1
  p.y = 56

 elseif p.x == 0 and p.y == 56 then
  p.x = 46
  p.y = 17

 elseif p.x == 41 and p.y == 31 then
  p.x = 39
  p.y = 49

 elseif p.x == 39 and p.y == 31 then
  p.x = 88
  p.y = 1

 elseif p.x == 38 and p.y == 48 then
  p.x = 40
  p.y = 30

 elseif p.x == 40 and p.y == 48 then
  p.x = 69
  p.y = 46

 elseif p.x == 89 and p.y == 63 then
  p.x = 118
  p.y = 57

 elseif (p.x >= 16 and p.x <= 31 and p.y == 0) or (p.x >= 97 and p.x <= 110 and p.y == 0) then
  p.x = 88
  p.y = 10

  end
 end

 if ending_init==1 then
  if p.x == 0 or p.x == 127 or p.y == 0 or p.y >= 63 then
   p.x = flr(rnd(125)) + 2
   p.y = flr(rnd(61)) + 2
  end
 end

end

The last function switches out certain maptiles with others if some conditions are met. I have a lot of different tables and functions of this kind but for brevity I'll just post two.
Compared to the first two I think they are less awful but I still feel they could be optimized.

trap_table ={109,109,109,79,79,79,79,79,49,50,24,24,25,25,40,40,41,41,96,96,112,112,75,76,91,115,117,117,100,101}

function place_traps()
for a=0,127 do
  for b=0,63 do
    if mget(a, b) == 109 then
      mset(a, b, trap_table

[ [size=16][color=#ffaabb] [ Continue Reading.. ] [/color][/size] ](/bbs/?pid=78580#p)
10 comments


Cart #dobiyamita-1 | 2020-06-29 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
4

So I spent a few hours over the last few days recreating a flash game I found online a while back (http://abagames.sakura.ne.jp/flash/ffs/).

I challenged myself to try to recreate the game without looking at the code the original developer provided. After that I added powerups to add a new spin on the original game.

It's missing sound effects and music, but otherwise I've added music and sfx and the game is basically done.

4
0 comments


Hi! I got pico-8 with the itch bundle a few weeks ago, and this was the first thing I made, it's a little snowboarding game, right now all you can do is try to avoid crashing into things, and there's no consequences when you do, but I think it's pretty cool for a couple of days work.

Cart #snowboard1-0 | 2020-06-26 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA

0 comments


I was wondering what colors were useable for the background and when I went to go look I was sad because darkgreen wasn't useable :| I was wondering if more colors that aren't used for text colors could be background colors! IDK it's not really important but I would love a darkgreen background option.

[EDIT: forgot that the mouse has dark blue when pal swapped img. : o]

1
0 comments


Cart #ultrabreakout_-1 | 2020-06-26 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
4

Left and Right arrow keys to move paddle, press Up or mouse key to launch!

Inspired by the 70+ video playlist by Lazy Devs, I'm happy to share with you the results of my first real game project.

Ultra Breakout features 10 levels and multiple control options including mouse and touch. There is a slight point advantage to using the standard controls and a slight point disadvantage to using mouse controls.

I hope you enjoy the quick diversion and checkout the original project here. Good luck breaking your personal highscores!

4
1 comment


Hi everyone, I'm fairly new to programming and Pico8.

I'm trying to add powerups to one of my games. I've made an empty table and a function to create each powerup within it.
The problem I'm having is that I'd like one single random powerup to be created depending on the score (say when score==5)

I've managed to do this but the problem was that a second powerup gets created before the player has the chance to up the score.
I've tried to use time() and also creating a boolean but I haven't managed to get 1 single powerup on screen at a time, I either get more than one or nothing.

What would be the best way to do this?

here's the code I have at the moment:

function _init()
	score=0
        powerups={}
end

function _update()
        if score==5 then
		powerup=true
	end

	if powerup==true then
		create_powerup()	
	end
end

function _draw()
         for capsule in all(powerups) do
		spr(capsule.sp,capsule.x,capsule.y)
	end
end

--powerups

powerups_start=5
total_powerups=4
fall=1

function create_powerup()	
	capsule={
	sp=powerups_start+flr(rnd(total_powerups)),
	x=flr(rnd(100)+20),
	y=flr(rnd(10))+20
	}
	add(powerups,capsule)

	powerup=false

	if powerup==false then
		del(powerups,capsule)
	end							
end

function update_powerup()
	for capsule in all(powerups) do
		capsule.y+=fall

		if capsule.x>=player.x and
					capsule.x<=player.x+player.w and
					capsule.y==player.y-player.h then
						sfx(2)
					 lives.left+=1
					 del(powerups,capsule)
		end	

		if capsule.y>128 then
			del(powerups,capsule)
		end	
	end
end	

Thanks in advance!

5 comments


Cart #simple_circuits-0 | 2020-06-26 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
6

A simple game about fixing very simple circuitry.

Hopefully it should be fairly self explainitory but you might have to do a little thinking for yourself.

Made in two weeks, a twofold task to myself - get it done in time (I originally intended 1 week but that was unrealistic) and actually finish something! :P

This is my first published PICO-8 cart but by no means my first attempt.
I am not really an artist and definitely not a musician so appologies if these are not the best. (You can mute just the music from the pause menu)

I really enjoyed the process of making this and thought I would share it. It is in a finished state but it may need some difficulty tweaking at some point.

I would like to give credit to:

  • nerdyteachers.com for showing me how to do screen shake. Found

[ Continue Reading.. ]

6
0 comments


Cart #jufohibzu-2 | 2020-06-26 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

This is a basic, and not very efficient benchmarking/profiling cart.

It can handle simple nesting and repeated calls for a given label, averaging the results.

Usage

Begin and end profiling:

bm("Label")
-- code
bm()

Call at the beginning of update to clear stored data:

bm:reset()

Enable or disable benchmarking:

bm:toggle()

Show benchmarking results when enabled:

bm:draw()
1
0 comments


As stated in the title, you can now use up to 32 colors at the same time in pico-8 now.

The feature was revealed by Zep in this thread: https://www.lexaloffle.com/bbs/?tid=38555

This makes all the suggestions I gave in that thread possible and more.

You can't simply use all colors all over the screen though. You have 2 screen palettes and you basically have to select which palette you will use on each drawn line on the screen. In the gif above, the screen is divided into 2 halves, each with its own palette.

Palette Scanlines

Here is the code I used for both screen palettes:

--regular screen palette
pal((
{
[0]=128+9,9,1,128+12,
13,12,6,7,
8+(curr_shield==6 and 128 or 0),2,128+10,128+11,
128+15,10,4,15}),1)

--values 0x10 and 0x30 to 0x3f change the effect
 poke(0x5f5f,0x10)
--new colors on the affected line
 pal({[0]=2,0x8d,1,0x81,0x8d,0x8c,0x86,0x87,0x88,0x81,3,0x83,0x86,0x8a,0x82,0x87},2)

[ [size=16][color=#ffaabb] [ Continue Reading.. ] [/color][/size] ](/bbs/?pid=78518#p)
118
7 comments


Mayhem is my PICO-8 remake of Julian Gollop's 1985 masterpiece: Chaos Battle of Wizards. It is a game I have tried and failed to make many times, but it looks like maybe this time was the charm! I did not blindly remake the original game. Instead, I have taken heavy inspiration from it while trying to make it my own.

This is the first fully playable beta release (v1.0.0b1). Unfortunately, I ran out of tokens for adding AI players, but you should be able to have some hot-seat fun with a friend or three.

Cart #mayhem-7 | 2020-08-22 | Code ▽ | Embed ▽ | No License
3

Changes:

  • 2020/08/22 (v1.0.0b1):
    • First completely playable version of the game.
    • Hot seat only (I ran out of tokens to do AI as well).
  • 2020/07/27:
    • Walking & flying movement.

[ Continue Reading.. ]

3
2 comments


Cart #dancedance-4 | 2020-06-25 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
1

First coding I did using PICO-8 trying to get used to it

and I made a character edit/select screen, lets you change colour of clothes/skin

1
3 comments


Hello! I am setting up a Pico 8 Console in my shed, but can't get the screen scaling just right. This is running on a raspberry pi, and otherwise seems to work great.

However, Pico 8 runs either much too small, or just a fraction too big.

These are the settings I am using in config.txt.

Is anyone able to help?

// :: Video Settings

window_size 768 576 // window width, height
screen_size 768 576 // screen width, height (stretched to window) 
pixel_perfect 0

// :: Window Settings

windowed 1 // 1 to start up in windowed mode
window_position -1 -1 // x and y position of window (-1, -1 to let the window manager decide)
frameless 1 // 1 to use a window with no frame
fullscreen_method 0 // 0 maximized window (linux)  1 borderless desktop-sized window  2 fullscreen
4 comments


Hello.

I am running Pico-8 using this bat file, so that it stays portable, and all files, settings and carts are kept in one folder (I really don't like how Pico-8 puts stuff in a random folder that Windows people usually never use).

start pico8.exe -music_volume 0 -home . -root_path . -desktop_path . %*

I also changed -music_volume to 0 in the config.txt file.

However, every time I run Pico-8, the setting in the config file gets reverted back to 256 and the music volume always stays on.

Also, every time I run Pico-8, I maximize the window (not full screen), but the next time I run it, it always starts as a small window, not a maximized window.

What am I doing wrong?

0 comments




Top    Load More Posts ->