I Made a Speedrunning Game

Sdílet
Vložit
  • čas přidán 25. 06. 2024
  • Play the game! - benbonk.itch.io/intern-ian
    Join the discord - / discord
    Check out Pico-8 - www.lexaloffle.com/pico-8.php
    Thanks to Austin for helping out - / @austinmerrick
    In this video I gave myself a challenge of to make a platformer game in Pico-8. It wasn't the easiest for me, but at the end of the day, I learned a lot and am pretty happy with what I made, even if it has a number of glitches.
    Music by Lakey Inspired
  • Věda a technologie

Komentáře • 409

  • @abdulhayeeyamin
    @abdulhayeeyamin Před 3 lety +751

    Benbonk Logic: I took a break by making an another game in a brand new engine where the colour palette triggers me

  • @NStripleseven
    @NStripleseven Před 3 lety +172

    Beginning of the video: I wanted a break from Slimekeep, so I did this.
    End of the video: I wanted to stop doing this and get back to Slimekeep.

  • @yanihero129
    @yanihero129 Před 3 lety +447

    00:48
    "some ideas were borderline impossible, or way too complex"
    "use a red colour pallet"
    Hmmmmm

    • @BenBonk
      @BenBonk  Před 3 lety +141

      IMPOSSIBLE

    • @davidbitca
      @davidbitca Před 3 lety +31

      u cant do it with pico8's color palette

    • @NStripleseven
      @NStripleseven Před 3 lety +15

      There's only like 1-2 red

    • @meriquinn
      @meriquinn Před 3 lety +18

      @@NStripleseven You can use 1, 2, 8, 14, and then either 15 or 7, or even both for a red color palette in PICO-8. Colors naturally look different when paired together. (0 is by default transparent so 1 is better/easier to use as a black)

    • @NStripleseven
      @NStripleseven Před 3 lety +1

      M Ramsey Huh. I didn't know that.

  • @NerdyTeachers
    @NerdyTeachers Před 3 lety +139

    This is fantastic! Thanks for the shoutout and we're very glad you enjoyed our Platformer tutorial! You really took it much farther on your own and that's what we love to see! Well done!

    • @stormedapple9317
      @stormedapple9317 Před 3 lety +6

      I tried making a pico 8 game and your tutorials really helped me get started, thank you!

  • @hainesnoids
    @hainesnoids Před 3 lety +146

    "Pico-8 uses a modified version of Lua"
    Roblox programmers: *A blessing from the lord!*

    • @HeJustNoobs
      @HeJustNoobs Před 3 lety +8

      I kinda like Lua is very easy for game development, even valve is using it with Source 2

    • @lememz
      @lememz Před 3 lety +23

      @@HeJustNoobs i mean lua is kinda good and all, but i really want my fucking curly brackets

    • @ncik515
      @ncik515 Před 3 lety +2

      @@lememz you would hate python

    • @lememz
      @lememz Před 3 lety +5

      @@ncik515 i mean, i literally can't read python but using nothing is better than having to write fucking "end" and "then"

    • @DiggyPT
      @DiggyPT Před 3 lety +1

      @@lememz lua has curly brackets

  • @falxie_
    @falxie_ Před 3 lety +214

    Pico 8 seems very interesting. The first version of Celeste was made in it

    • @iLikeDucks_
      @iLikeDucks_ Před 3 lety +31

      Ye i know its even inside of celeste as a small minigame/easter egg in celestial resort

    • @filipkuzmicz8127
      @filipkuzmicz8127 Před 3 lety +9

      Thats why i clicked ob this video XD

    • @lucasoreidopunho3556
      @lucasoreidopunho3556 Před 3 lety +4

      Wow, i've didn't knew that!! I was playing the sequel of the game in pico-8, yesterday.

    • @lorrdy7640
      @lorrdy7640 Před 3 lety +4

      Yeah I though I heard about Pico 8 before.

    • @noizepusher7594
      @noizepusher7594 Před 3 lety +9

      Yeah, until this vid I thought all games using the little Pico 8 engine were re referencing Celeste’s pico 8 mode. I didn’t know it was an entire programming language

  • @jdyerjdyer
    @jdyerjdyer Před 3 lety +82

    There are several ways you can address the coffee pickup issue. The easiest to implement is a cool down timer. You set a timer to count down after a pickup and until that timer is zero, you can't pick up another coffee. This works great if you can ensure that the timer is long enough to remove the coffee after pickup, but short enough that should the player reach another coffee, they are able to pick it up without waiting. If you can't ensure that, then the next fix is an id system. Generate some random number for each coffee pickup and if that number is in your list of recent pickups, then you just ignore it. You don't have to make the numbers very large, in fact you could just label them in order of placement in the level, or since there is a finite number, just label them all and track them all, but for larger levels, this might impact performance. Reasonably, tracking the last 5 pickups and giving them an id modulus 5 should be easy and sufficient. Another method is to create triggers and use them on your collisions. Basically you check for collisions on a regular interval and if a collision is detected, then you check to see if a trigger is registered for the entities that have collided. If so, then you call that trigger and wait for that trigger to return before continuing. Here, inside the trigger is where you would update the jump count and remove the coffee. This sequential check can become a bottleneck, but it does address the multiple pickup problem. I'm not sure if the Pico8 system runs slower, or if it has full cpu usage, but if it doesn't have a slowdown issue, this is actually how most modern game systems work--i.e. loop through all active objects { if collision detected and registered trigger { fire trigger } }.Another way if the removal of an object might take some time is to use a collectible flag on each collectible and before doing anything on the collision, increment the jump counter and then immediately set the collectible flag to false. if collision and collectible is true { process collectible; set collectible = false; remove collectible; }. This option is best on systems where the main game thread is running on one process while your script might be in another or the collision script might have multiple instances created. It isn't ideal because you could still get multiple collisions at once, but it has two benefits in that you are quickly setting the flag to false, so hopefully before any other script accesses the shared boolean it is set, and by putting any cpu intensive (relative) processes to the end, you ensure that the check happens as fast as possible. Hope this helps. I'm sure there are other ways of doing it, but these are the most common I've seen done.

  • @Chadderbox
    @Chadderbox Před 3 lety +123

    I need to try pico-8. I've never done anything that is really that limiting other than game jams. I think the limit on pico makes some really unique things.

    • @BenBonk
      @BenBonk  Před 3 lety +36

      I would recommend giving it a try. It was a nice challenge and interesting engine.

    • @colinjohnson5515
      @colinjohnson5515 Před 3 lety

      Man it’s cool. I’m going to try to teach my kids some of this stuff too.

    • @mushroomer56
      @mushroomer56 Před 3 lety

      Coming from a Lua programmer here, didn’t know that PICO-8 used Lua and I’m actually quite interested in trying it out.

  • @kobsboy4227
    @kobsboy4227 Před 3 lety +25

    u make me realize that im not the only game dev that spends days on seemingly simple problems

    • @DrCrazyEvil
      @DrCrazyEvil Před 3 lety +2

      Oh if you've been watching lots of devlogs it happens to everybody but they just don't show it so its easy to assume they're not problem solving at times even if they do.

  • @JanxZ
    @JanxZ Před 3 lety +23

    1:33 i love how the background is just not lua at all

  • @Gizmote
    @Gizmote Před 3 lety +21

    I like how even on games I don’t work with you on, you still use my game design concepts. Cool stuff!

  • @lockop2540
    @lockop2540 Před 3 lety +27

    I can’t believe your almost at 10k already! Great job 👍! Been here since 2k 🎉

    • @BenBonk
      @BenBonk  Před 3 lety +6

      Thanks dude, getting really close to 10k now.

  • @djlclopez128
    @djlclopez128 Před 3 lety +10

    2:42 "WHAT THE FRICK PICO8" 😂🤣
    Take my subscription!

  • @jjocco1
    @jjocco1 Před 3 lety +4

    Benbonk: Pico
    Everyone: oh ok
    Me as a Chilean: hehe, nice

  • @prodbywerty
    @prodbywerty Před 3 lety +21

    i love Pico-8. though, the code editor looks quite... zoomed in to say the least!

    • @peterpiperpizza4707
      @peterpiperpizza4707 Před 3 lety +2

      WERTYYYYYYYYY

    • @BenBonk
      @BenBonk  Před 3 lety +10

      Yeah it is super zoomed in, and kind of a pain. But I guess that is why there are tabs that can help you organize.

    • @IkeVoodoo
      @IkeVoodoo Před 3 lety +1

      Our leader werty

    • @mattjclay
      @mattjclay Před 3 lety +1

      You can use an external editor with it

    • @Dyerrrrrrr
      @Dyerrrrrrr Před 3 lety +1

      Yeah I use vscode for pico-8. Also, tic-80 is very similar to pico-8 but has an extra wide text editor so there's that too

  • @throwawaysometime7500
    @throwawaysometime7500 Před 3 lety +6

    Remember it doesn’t matter what u upload to us as long as u are happy doing / making it or interested in it

  • @thelostnexus5_
    @thelostnexus5_ Před 3 lety +5

    As a Lua programmer, this was the first ever video I could genuinely relate to.

  • @AstroSamDev
    @AstroSamDev Před 3 lety

    Really cool video! I've always wanted to try pico-8.

    • @BenBonk
      @BenBonk  Před 3 lety

      Thanks Sam, you make pretty neat videos yourself.

  • @thegappleapple7763
    @thegappleapple7763 Před 2 lety +3

    I love Pico-8

  • @4per8
    @4per8 Před 3 lety +2

    go pico, go go pico yeah

  • @CubsYT
    @CubsYT Před 3 lety +1

    once you start hearing the lip smack there's no going back

  • @aasermohammed8574
    @aasermohammed8574 Před 2 lety

    Hey benbonk I worked with LUA alot by now and those if statements check if the whatever variable is written before the == has the value written after the == and "end" means that this is the end of the statement, so for example:
    "If cond == true then
    print ("cond")
    elseif cond == false then
    print ("not cond')" means if the condition cond is true/happened then print in the console the text: "cond" and if it is false/Didn't happen then print the text: "not cond" in the console

  • @ShinyEmeraldGames
    @ShinyEmeraldGames Před 3 lety +1

    The game is cool! I really like the walk animation of the cute little character! It's always good to take a break from big games that you're working on! I love it how you are creating pixel art for the font. Are you creating the pixel font for every sentence by hand or have you created it as a system font, you can then type into your computer?

    • @BenBonk
      @BenBonk  Před 3 lety

      Glad you like the game. The font is just a free font called Pixelarri that I like using.

  • @withlessAsbestos
    @withlessAsbestos Před 3 lety +5

    How did I miss this. I love Pico-8. Watch the grid based game tutorial.

  • @Kai-rg4kb
    @Kai-rg4kb Před 3 lety +4

    I remember there was a pico 8 thing in celeste

    • @kingkyanogd2500
      @kingkyanogd2500 Před 3 lety +1

      Yeah the developer made the pico 8 version for a game jam and because it made him continue it and make Celeste its in the game as a Easter egg

  • @cheeseburgerinvr
    @cheeseburgerinvr Před 3 lety

    this is what got me into pico-8

  • @Javier-ft5mx
    @Javier-ft5mx Před 3 lety

    Good work

  • @blankstudiogamedev6310

    This video was great! Imma play this later

  • @salsichalivre5401
    @salsichalivre5401 Před 2 lety

    By this time you obviously have figured out, but you can mimic collectables by simply checking if the player "collided" with the coffee (its position overlaps the position of the coffee by a certain amount), and then making coffee nil (then it will not be there anymore) and at the same time get more jumps putting 1 plus in the jump var.

  • @WannibeManisha
    @WannibeManisha Před 3 lety

    Great little compact game!!

  • @xerozoo
    @xerozoo Před 3 lety

    I've been using pico-8 for years, I'm glad to see it get some more popularity

  • @09developerboy85
    @09developerboy85 Před 3 lety +8

    Make a game with scratch (or you can't do that?)

  • @noizepusher7594
    @noizepusher7594 Před 3 lety +1

    I love how he lists using a red color pallet as impossible.

  • @hollowknightenjoyer
    @hollowknightenjoyer Před 3 lety

    Good job!

  • @Skeffles
    @Skeffles Před 3 lety +1

    This is an awesome first game with pico8. It's nice to see a unity dev trying out something new!
    How did you find the console? I can't imagine using that after having used visual studio for so long.

    • @BenBonk
      @BenBonk  Před 3 lety +1

      Thanks, I definetly wasn't that big of a fan of the console. The text was way to large, I wasn't a big fan of the font, and the resolution would sometimes be annoying if I had long lines of code. If I used it again I would probably opt for a different code editor, though it was an interesting experience.

  • @D30_K
    @D30_K Před 2 lety

    Honestly ive been learning lua in robox for a while so changing to pico would be preaty easy and i challenge you to make a game in roblox

  • @_mestre
    @_mestre Před 3 lety +3

    I love how mind boggled and surprised he seems because of the then and end in if statements. Which are very common in some languages such as Pseudocode

    • @cartermasterson9829
      @cartermasterson9829 Před 3 lety

      And python

    • @mrocto329
      @mrocto329 Před 2 lety +2

      @@cartermasterson9829 Python doesn't have end or then, it uses : and whitespace

  • @ninjatintin9074
    @ninjatintin9074 Před 3 lety +1

    2:08 Request: Make a game in Scratch

  • @tunedoesstuff
    @tunedoesstuff Před 2 lety

    I remember playing Just One Boss in Pico-8

  • @leftie5205
    @leftie5205 Před 2 lety

    I feel like the smartest move for the coffee jump glitch would have been to bring the numjumps++ and the MSet lines into the same if, so that one couldn’t happen without the other

  • @kevin9120
    @kevin9120 Před 3 lety +1

    With the coffee issue I would have personally set another variable like "canPickUp" and use an if statement to check if it's already been picked up before deletion.
    Though I'm not 100% sure if this would work.

  • @andresrosales3466
    @andresrosales3466 Před 3 lety

    Late comment and not sure if someone already mentioned this, but you don't need to do `if var == true` to check boolean values. you can just do `if var then` or `if not var then`.
    Also having `end` where a block (if/else/loops) ends is very popular syntax for programming languages.

  • @randomb_oi8787
    @randomb_oi8787 Před 3 lety

    for your coffee bug thing you can set this thing called a debounce, its a boolean that you see if it is true and if it is then set it to false, then do your code, then after that set it to true

  • @destroyer50055
    @destroyer50055 Před 3 lety +1

    As someone with no idea about coding just thought I would say adding office workers that add time to the timer woulda been neat

    • @mushroomer56
      @mushroomer56 Před 3 lety

      I’d be easy to code in Lua, I’ve been using Lua for a year though..

  • @Blackout_
    @Blackout_ Před 3 lety +2

    "What is this syntax"
    "Anyways this is just personal preference"
    No uhh everyone agrees with you

  • @kpandhiscat7722
    @kpandhiscat7722 Před 3 lety

    “End” is a thing that roblox, Pico 8, etc use to show that the thing your trying to do works or it does something or something I don’t know much about coding

    • @BenBonk
      @BenBonk  Před 3 lety

      It just means the end of a function/if statement. Roblox also had “ends” because pico and roblox both use Lua as their programming language.

  •  Před 2 lety

    for the pickup collisions i imagine you couldve just done a touching check, given a jump, deleted the coffe, and then wait until not touching

  • @janetteareglado4592
    @janetteareglado4592 Před 3 lety

    BenBonk: Makes Spiratites
    Game: MARIO WORLD

  • @-ferno4333
    @-ferno4333 Před 3 lety +1

    pretty cool

  • @WallJumpGames
    @WallJumpGames Před 3 lety +1

    When making variable jump height, I actually use a different approach, I don’t know if this would work in pico-8, but my approach is just setting vertical speed to zero when you let go of jump.

    • @activediamond7894
      @activediamond7894 Před 3 lety

      Another one is modulating gravity based on whether you're jumping or not.

  • @Choppy_Z
    @Choppy_Z Před 2 lety

    what a nice *platofrmer*

  • @StrangeLake
    @StrangeLake Před 3 lety

    ah yes, a small, simple *platofrmer*
    It's fine tho, the video was lovely ^^

  • @kgames3563
    @kgames3563 Před 3 lety +1

    Ooo nice

  • @soemie
    @soemie Před 3 lety

    go pico, yeah yeah, go pico, yo

  • @lazergurka-smerlin6561

    I mean I'd think the way to properly implement a collectable is to make some pseudo class for it that handles the incrementing and deletion of the pseudo object

  • @baronthibault8650
    @baronthibault8650 Před 2 lety

    I see you discovered what really programming is haha

  • @TriDeapthBear
    @TriDeapthBear Před 3 lety +1

    I smell 2019 Reddit CZcamsr background music lol. Nice video, and btw, was the intern Ian thing a nod to h3?

    • @BenBonk
      @BenBonk  Před 3 lety

      Thanks, I didn't actually think about it like that, but I do love h3's old content.

  • @mattjclay
    @mattjclay Před 3 lety +1

    Pro tip:
    Easy way to add a variable jump is to multiply your velocity by a value lower than 1 when you release the jump button and you have a positive y velocity.
    That way if you hold the button until you are at your jump apex then release you won't slow down when falling. And if you release it half up your jump you will slow down.

    • @BenBonk
      @BenBonk  Před 3 lety +2

      :o thanks for the tip!

    • @mattjclay
      @mattjclay Před 3 lety +1

      @@BenBonk No problem. I had the same issue and I almost died when I figured out it was 1 line of code. Rip me.

  • @DeepFriedOreoOffline
    @DeepFriedOreoOffline Před 3 lety

    I wouldn't think the jumping higher while holding space would be that hard to work out. This might be too simple of a solution for the tutorial you followed, but I have done it using a boolean. Setting a minimum and maximum jump time, you check to see if the jump button is pressed, the character is grounded, and the jumping boolean is false. When the player starts jumping, the boolean is set to true, and the character's actual jump functionality should be a "disconnected" update function that triggers based on this boolean. During the jump you count up a time reference, and once that variable is above the minimum, check to see if the player is holding the jump button. Then either once the timer is at it's max, or the jump button is released, set the variable to false which will stop calling the jumping functionality.
    Also, about collectibles, the easiest way I have found is to keep a table of the collectibles, and make a function that sets up a basic class structure as a table. This should contain an X and Y position for the collectible, the sprite number of the collectible, and if you feel like making it happen, a pointer toward that collectibles functionality. Then, you can easily avoid glitchy pickups by just checking to see if the x/y of the collectible is within a distance of the x/y of the player, which also allows you to have the player pick up items from a father range than they can be hit, making collecting things feel less constricted.

  • @anchovy5325
    @anchovy5325 Před 2 lety

    for the coffee pickups you couldve made a true/false variable and then check if the coffee is touched AND the variable is false, set the variable to true and then after a second change it back to false

  • @salsichalivre5401
    @salsichalivre5401 Před 2 lety

    Regarding the end and the then, this is from Lua, and Lua was made long time ago in Brazilian university in order for them to coup with technological step back they were facing that time. Turns out Lua got pretty famous over the time and it is the only programming language that have gone that far worldwide from Brazilian community.

  • @CaffeinatedBorb
    @CaffeinatedBorb Před 3 lety

    I like the idea of a game with a boss that has no boss...

  • @atomicalex1732
    @atomicalex1732 Před 3 lety

    nice, game looks good

  • @plat4576
    @plat4576 Před 3 lety

    Wow i remember playing pico 8 games on cool math games

  • @Concept_804
    @Concept_804 Před měsícem

    Everybody when mentioning any fantasy computer: pico 8
    Tic-80 which is free: _I simply don't exist_

  • @CodingWithBen
    @CodingWithBen Před 2 lety

    I have pico-8 I would recommend looking at tic-80, I'm stuck between the two at the moment

  • @goosifyed9717
    @goosifyed9717 Před 3 lety

    if its not too much trouble, could you make a small platforming engine, but using the character from robot 64? (yes its a roblox game, but NO. ITS NOT BAD.) thanks 4 reading this :)

  • @migwuzhere
    @migwuzhere Před 2 lety

    "though some we're border line impossible or way to complex" he says to "use a red color pallet"

  • @ScarletEmber64
    @ScarletEmber64 Před 3 lety +1

    oh so that's where the pico-8 in celeste comes from

  • @filiptuddy2137
    @filiptuddy2137 Před 2 lety

    GO PICO YEA GO PICO YEA GO PICO

  • @cakeyeater7392
    @cakeyeater7392 Před 2 lety

    I’m not a programmer, so excuse me if this is completely wrong, but couldn’t you have the coffee tile apply the jump increase once by making it happen only when it transitions to the background? Since the coffee should only need to change layers once, doing it that way would apply the effect only once, right?

  • @CreeperCat0407
    @CreeperCat0407 Před 3 lety

    0:16 PLATOFRMER XD

  • @goosifyed9717
    @goosifyed9717 Před 3 lety

    2:08
    me: laughs in backpack

  • @theeternal6890
    @theeternal6890 Před 3 lety

    *U sound like the fluffy friend in the stranger things.* its cute

  • @cheezyboi7254
    @cheezyboi7254 Před 3 lety

    This is all leading up to a slimekeep scratch port

  • @hollowknightenjoyer
    @hollowknightenjoyer Před 3 lety

    The problem is, i cant jump. but good job!

  • @TheStickCollector
    @TheStickCollector Před 3 lety

    Nice

  • @snugglebug_83
    @snugglebug_83 Před 3 lety +1

    i tried the game, its super fun! but ,just an idea, why not use 'wsad' or 'arrow' keys?

    • @BenBonk
      @BenBonk  Před 3 lety +1

      you cant with pico-8, at least I think

  • @levlev4048
    @levlev4048 Před 3 lety

    Scratch can be hecka fun sometimes.

  • @reenftw
    @reenftw Před rokem

    This is the first Benbonk vid where I could actually recreate the game he is making

  • @mrplus1312
    @mrplus1312 Před 3 lety

    0:02 oh you are tired so you give your self a brea- CHALENGE?
    Yeah makes sense

  • @KyuuDev
    @KyuuDev Před 3 lety

    nice!

  • @ComplexityRealster
    @ComplexityRealster Před 3 lety

    I totally agree the If statements Are weird

  • @Pop4484
    @Pop4484 Před 2 lety

    I know lua on gmod and roblox so I imma try this one out too

  • @KolehmainenBeats
    @KolehmainenBeats Před 5 měsíci

    Damn bro managed to play Blinding Lights chorus while watching this.

  • @prototype_11
    @prototype_11 Před 2 lety +1

    Damn, pico-8 is such an underrated engine, maybe because ITS PAID! THATS WHY, I DONT HAVE MONEY

  • @FabricioKarim
    @FabricioKarim Před 2 lety

    I like Pico-8 toturials of this channel:
    czcams.com/users/LazyDevsplaylists

  • @omeletttte
    @omeletttte Před 3 lety +7

    Hehe, stock images

  • @dodleoy
    @dodleoy Před 3 lety

    go pico yeah yeah go pico yeah

  • @notFoxils
    @notFoxils Před rokem

    The collectibles problem could probably be solved with a debouce

  • @Nizart
    @Nizart Před 3 lety +1

    if your coffe is in the tileset you can just do
    local tilepos = {x=flr(playerpos.x/8), y=flr(playerpos.x/8),}
    if mget(tilepos.x, tilepos.y, coffee_number) then
    mset(tilepos.x, tilepos.y, background_number)
    coffee += 1
    end

  • @weezerfan15
    @weezerfan15 Před 3 lety

    go pico go go pico

  • @myh6274
    @myh6274 Před 2 lety

    wow that are some open levels would that be actually possible on the 80s hardware?

  • @vinsovan9707
    @vinsovan9707 Před 3 lety +1

    When he said the engine uses Lua I nearly exploded with excitement.
    Until he said "What in the world are those-"

  • @mushroomer56
    @mushroomer56 Před 3 lety

    Though I do not use PICO-8, I am somewhat good with the Lua programming language. With the coffee, you’d probably need to destroy the collider immediately so it can’t be collided with again and THEN give the benefit.
    Thanks for reading!

  • @noiceplayer144
    @noiceplayer144 Před 2 lety

    what i learned: if you are feeling frustrated or burnt out on one project, just start a new, more frustrating project that will make you want to return to the original project

  • @truestbluu
    @truestbluu Před 3 lety

    If Pico-8 has a built in wait function then you can do something called a debounce. This is a Roblox debounce but this might not work.
    local debounce = false
    while wait() do
    if not debounce then
    debounce = true
    wait(1)
    debounce = false
    end
    end

  • @FireMonkeGT4404
    @FireMonkeGT4404 Před rokem

    when scratch cat appeared a subtitle said help

  • @someaddictedidiot2186
    @someaddictedidiot2186 Před 2 lety

    OMG PICO-8 YES!

  • @luan1177
    @luan1177 Před rokem

    when arrow keys are broken and you need them to run