Log In  


Cart #pico_joust_2600-7 | 2024-06-29 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
15

Port of Joust for the Atari 2600 (which in turn is a port of the arcade version). Reasonably faithful to the Atari 2600 version but adapted for the Pico-8 screen, colours and sprite size, with some added particle effects.

Additional enhancements (available in options):

  • Zen Mode: Play forever without game over (allows lives to be negative).
  • Turbo Flap: Pressing and holding X repeatedly flaps (like a turbo button).
  • Players: Switch between 1 or 2 players.
  • Co-op Mode: If enabled, players cannot unseat each other (they bounce instead). Pressing O will pass a life to the other player (this can be done at any time).
  • Eggs Fall: Make eggs obey gravity like they do in other Joust versions (they can also fall into the lava).
15


3

Hi @rikimbo. Does look good !

Could you please look for btn() instead of btnp() when it comes to flapping the wings on your player. Will make a big difference. Thanks !


1

Oh yeah, this is the stuff. Great job!


1

cool! i spent a whole summer playing joust growing up


1

Fun implementation of the classic, although I agree with @dw817 about reading the buttons. Gold star.

There does seem to be something odd about how the get_score() function turns the score into a string.

I saw the score gain an extra digit a few times, then played a round with "Zen Mode" on and doing nothing but dying for 50 points each time to see precisely when it first happened.

Going from 950 to 1000 (or 0.950 to 1.000 points) worked as expected.

However, going from 1950 to 2000 (or 1.950 to2.000 points) instead displayed 11000 points!

I know PICO-8 has some interesting arithmetic, but I haven't used it myself. I assume that at this point, score should be 2.0 and is instead 1.99999 or thereabouts. So ceil(score%1*1000) returns 1000, and flr(score) returns 1.


@Cowirrie I appreciate that you went to the trouble of dying over and over (~40 times) to reproduce the bug! You're right about the rounding, which happens because of the division. For some reason my brain didn't think about rounding errors happening in both directions when I used flr().

I fiddled around for a bit but in the end decided to re-implement it using only whole numbers, so I don't get those rounding errors. It should work now in v1.1 (I hope I got all the edge cases). EDIT: Bugger, I missed resetting it properly on Game Over in the new implementation. Fixed in v1.2.

@Cowirrie and @dw817 about the jumping, I didn't realize btnp() has the repeating behaviour after a few frames if you hold it down. That was unintended behaviour (you need to press for each flap, like in the original game), so I removed all usages of btnp() in the code for v1.2.

Thanks all for the positive feedback!


Yes that's how it works, a flap per click/press... although yes maybe an option in menu to use simple btnpress could be convenient (poor keyboard).
BTW really good port I like it, simple and effective 👌 ⭐


@Heracleum good idea! I added a menu option for that in v1.3 (disabled by default). I'll admit it's pretty nice -- it reminds me of the kind of input you get if you're using a turbo controller.

You're right that it's nicer to the keyboard for sure, and I'll bet it's also way better for playing on a phone.


1

Nice work! Though I was never very good at it, Joust is one of my favourite arcade games. It just feels like such a standout, a very unique game for that era, and it's awesome to see it ported to PICO-8. Brought a big smile to my face!

I think compared to the original, there's less fine control in this implementation. If you're going for accuracy, each flap should probably be less powerful and gravity should be lower. I haven't played the ATARI version though so maybe it controls differently.

I tried to find a PICO-8 Joust a few months ago and came across this old unfinished joust collab by @EatMoreCheese, @Rahrahrah, and @Skyrunner65. It's missing a lot of the features yours has, but the controls feel closer to the original to me. Maybe worth a look?


Thanks @ericb for your interest and kind words! I am aware of that collaboration thread, and found it when I was checking to see if someone had already done this. That implementation is great, and much more faithful to the arcade version.

The physics in this version are meant to be closer to the Atari 2600 port, which has a pretty different feel. If you look up some gameplay footage, you'll notice that you can make it from the bottom of the screen to the top in just a few flaps. I spent some time tweaking it based on feel when playing the Atari 2600 version (emulated), but it's certainly not exact by any means.

If you're curious, go ahead and play with the constants in the code. The physics constants are in the first tab at the top. I'd be curious to hear what settings feel right to you!


I didn't realize the Atari 2600 version was so different! The version I'm familiar with was the "Williams Arcade Classics" DOS port, which I think was faithful to the arcade version so it makes sense that this feels weird to me haha.


1

Thanks for tagging me @ericb ! We didnt get far in our version so it's nice to see someone else give it a try. Still one of my favourite Atari games.


@ericb that DOS version was new to me. Thanks for sharing! That one and other ports (including the Atari 7800 port) are much closer to the arcade game. The Atari 2600 port is the odd duck for sure -- flying eggs and dizzyingly fast by comparison. It's the version I'm nostalgic for though. :)

@EatMoreCheese great to see you here. Honestly your version looks pretty far along to me! The graphics look stunning, and the cart has a really polished feel for something unfinished. I guess it just needs the eggs eh?

As for mine, I just published a new revision (v1.4) to add support for 2 players, and "co-op mode" that turns off friendly fire (something I wish the Atari 2600 version had back in the day).


1

Ah, Joust brings back memories when playing this game with my sister.

I was kinda disappointed that the egg couldn't fall into lava pit but OTOH it allows me to pick the egg later on.


@Bloodbane right, the floating eggs are a peculiarity of the Atari 2600 version. But I just added an option to enable falling eggs in v1.5. Turn it on in the menu, and now they can fall into the lava! :)

Actually, when testing the "Egg Wave" (ex. Level 4), I laughed when eggs were tossed onto the screen and a few were yeeted right into the lava. I've now made it so the eggs that spawn in egg waves will still float initially.


Coming back to this a year and a bit later, I do think the physics were off and a bit too punishing. I updated some of the constants to be slightly floatier and a smidge slower.


lifelong joust fan here - you really did this game justice. the options are a nice touch!



[Please log in to post a comment]