The original Space Taxi divided up its 24 levels into three "shifts" of eight levels each corresponding to the easy, medium and hard levels. And it turns out eight levels is about what I'm able to fit on a single cart so I've decided to release the game by shift and then merge them all together into a single multi-cart game when I'm done. It's actually already multi-cart with one for displaying the menu and loading the level data into upper memory and the other for actually running the game.
The first one, Morning Shift, is not quite finished but it is fully playable. The first level is a copy of the first level from the original game as sort of an homage to it but the rest of the levels are original. And they could use some play testing. If anyone is willing I'd be happy to hear any feedback.
In particular I'm interested in hearing:
- Are the blinking platform markers helpful?
- Would they be more helpful if they blinked a different colour?
- Keeping in mind that these are the easy levels—with 16 more levels to come at some point in the future—how does the progression feel?
- Would you change the order of any of the levels?
- Was there anything that you particularly liked or disliked about the game?
Don't feel like you have to address all (or any) of those and it's by no means an exhaustive list so any other comments are also appreciated.
Things to do
- Level art :: You'll see that I've spent more time on some of the levels than others. The layouts are, I think, pretty much set but I'm still working on making some of the levels more visually interesting.
- SFX and Music :: The original had voice synthesis which I don't but I'd like to add some sound effects when passengers appear, get knocked over, etc. as well as other sound effects generally. And while the original didn't have music I'll probably add some.
- Fix how money (aka: score) tips, etc. work
- Add saved high scores
- Add an actual win screen
- Various tweaks (refuel faster, etc.)
Original Post Below
I don't know if anyone else remembers Space Taxi from the C64 era but I used to love playing it as a kid. I'm not sure why it popped into my mind a while back but I thought I'd take a shot at implementing a Pico-8 version.
This is a work in progress so it only has a few very boring levels for testing out the mechanics. I'm a bit too close to it and have gotten used to the controls so if anybody who isn't me felt like giving it a shot and letting me know how the controls feel I'd be grateful.
There will likely be a second screen under the "Controls" menu option which explains the UI but I haven't implemented it yet. So briefly:
- The money indicator on the left is your "Earned Money" aka, your score.
- Above that is your lives
- The money indicator on the right is your "Tip." Deliver passengers faster, get a bigger tip.
- The "clock" on the right is the level indicator. (1:00 is level 1, 12:00 is level 12, etc.)
- The black box at bottom center is where passenger instructions are displayed (where to take them)
- Above that is the fuel gauge. Fuel usage is tied to how long you're in the air not how much you use the thrusters and fuel resets between levels. The third (and last) sample level has a fuel platform to test out the refuelling mechanic but not all levels have fuel platforms.
- The gray checked bar above the other UI elements is the landing indicator and flashes either green, yellow or red. Green for a soft landing, yellow for a harder landing and red when you crash. Your tip is reduced (well not yet but it will be) for "yellow" landings.
Once I've got the mechanics dialed in I'll probably throw together a quick level editor and start making some actual levels. Hopefully I've got room for a full 24. I've got a little under 3000 tokens left and about half my character space and I haven't tried to optimize it yet but I suspect I may end up using a second cart for the level data.
Thanks to anybody who tries it out!
I love this genre of games. I had fun playing through the first levels a I will keep an eye out for more levels. Cool work!
I haven't played the original, so I do not have an opinion about that part,but I liked the handling. Feels fast and reactive,maybe the horizontal movement could use some more dampening.
The controls felt pretty good. Whenever I crashed it felt it was from lack of skill instead of something with the keys. Hope to r̶u̶n̶ ̶o̶v̶e̶r̶ ̶m̶o̶r̶e̶ ̶c̶u̶s̶t̶o̶m̶e̶r̶s̶ play more levels :)
Game is pretty cool, but I'm loving going through you're code. I've never seen someone roll their own stack, I'm learning a ton from it.
@taxicomics, @Verb
Thanks! That's good to hear. It's been a very long time since I've played it, as I'm sure you can imagine, but I have memories of the taxi getting just completely out of control if you didn't keep a light touch on the controls.
There's no damping at all on horizontal movement so I'll give that a shot and see how it feels. I think I prefer it without damping but I won't know until I try. Thanks for the feedback!
> "run over more customers"
Heh. I have to admit, for a stick guy who's only 5 pixels tall, I'm pretty proud of the animation when you hit one of them.
@Godmil
Thanks, I'm glad you're finding it interesting. The code is a bit messy and glancing back through it now there's some stuff left over from an abandoned project that is completely useless here. I've taken out some of the obvious junk and re-uploaded so if you were wondering what the heck "music_player" was for, it was for absolutely nothing.
A stack is a nice straight-forward way to manage a state machine, which is basically what I'm doing. You certainly don't have to roll your own, you could just manipulate the array with add
and deli
directly but push
and pop
are so much clearer and more concise when it really is a stack and not an array that you want to deal with. And luckily it's very easy to implement in lua so there's really no reason not to, in my opinion.
@jasondelaat great idea for a remake! I played the original game a lot and I remember the wacky props in levels.
There was also a fun game with similar mechanics for pc (iirc "UGH!" or similar, in a prehistoric setting)
BTW well done it plays nicely exactly as I remember the original 👌
@Heracleum
Thanks, that's very kind of you to say!
I'm going for mostly original levels but there are definitely aspects of the original I want to incorporate if I can. Like the ping pong level with the ball you have to avoid or the teleportation and doors, etc.
It's such a goofy game, I love it.
I'm also knocking around some ideas for doing a separate game with the same basic mechanics but as a 2-player head-to-head competition. But I'll try to finish this one before I get sidetracked too much by that.
Okay so I've been off writing a level editor and I'm posting this as a comment because it's not a whole new version of the game but just a quick test of the collision detection with some basic level data.
I'm going to make a separate post for the editor itself once I've cleaned up the interface a bit but here's a quick preview if anyone's interested. Although I'm not so much editing a level as much as just drawing and manipulating random junk.
Since each level is a single screen, the level editor generates a collision map of the screen with each pixel requiring one bit (pixel is either inside object or not) and all collision tests just become a simple table lookup. At 8 pixels per byte, each screen/level requires 1680 bytes (because the games ui covers the bottom part of the screen I don't have to generate that.) At that size I should be able to fit 24 levels in upper memory plus the upper and lower sections of map memory.
That's just the collision data though. Eventually I'll also have the editor output draw commands to actually draw the levels. In the cart above I drew the rectangles manually but I'm checking collisions directly from upper memory.
Collision tests are quite fast this way though that's actually just a bonus. My main motivation was to avoid having to specify level geometry in code. This just handles static elements of the level. Anything which needs to be differentiated (landing platforms) or any as yet undefined dynamic objects will still need to be handled in code but this helps leave me a lot more space for that stuff!
Okay, so I've finished the level editor (in theory) so I can finally start making levels!
Here's another quick demo with a few screens made with the editor (Drafting Table) which I'll be posting in its own thread right after I post this.
These are just quick and dirty and you can't land on anything just crash into it. Fly off the top of the screen to see the next one. There are 3 in total.
I also played this a ton as a kid on my C64, and this definitely feels like you nailed the controls: unforgiving and initially difficult, but you quickly get the feel for them. I forgot about the landing gear and kept crashing until I realized they existed, ha. I guess I should rtfm.
I think the blinking markers helps, and doesn't need a different color
(and I'm colorblind fwiw).
The progression did feel a little steep to me, but I was quickly able to get the hang of the second level. Maybe a few more simpler stages without the need to navigate narrow passages would be helpful to allow the player to get the feel for controls?
I did run out of fuel, crashed, and when I respawned I was still out of fuel so it just dropped and crashed again. I assume that's not intentional?
> I have to admit, for a stick guy who's only 5 pixels tall, I'm pretty proud of the animation when you hit one of them.
Seriously, that was one of the first thing I noticed. So much expression in a tiny animation.
> ...I'm loving going through you're code.
Same. My first stab at Lua and Pico 8 coding is pretty barbaric compared to what you've got going on. I'm learning a lot from perusing your "messy" code!
Thanks for the feedback @natebeaty!
I keep meaning to come back and finally finish this off but I'm constantly distracted by shiny new ideas...
> "The progression did feel a little steep to me"
That's good to know. By the time I got around to making the actual levels I feel like I could almost control the taxi pixel perfectly so the difficulty was really hard to judge. Which, from your thread on Save Picoville, is a problem I think you're familiar with? I had thought of adding a level select so you could play/practice all the levels. I should revisit that idea. There are some later levels that are a bit more open which maybe should be moved up to earlier.
(I just stopped in the middle of writing this to go and play the game again and holy crap. Having not touched it in months, yeah, those early levels are way harder than I remember!)
> "I did run out of fuel, crashed, and when I respawned I was still out of fuel so it just dropped and crashed again. I assume that's not intentional"
No, definitely not. In fairness, I did know that's what happened I just never got around to fixing it. But I really should.
> "My first stab at Lua and Pico 8 coding is pretty barbaric"
I'm glad you're enjoying going through the code. There are definitely some tricks and patterns in there that I use over and over to make my life a bit easier. And some I'd probably avoid in the future. There's an argument to be made that I tend to over-complicate things. I mean, of all the things I've posted, this is the only one that's even remotely close to being a complete, playable game. I like messing around with different ways of doing things and organizing my code. I find that almost as much fun as the games themselves but that doesn't make it better, just different.
You made a solid game in 10 days if I'm remembering correctly? I spent way longer on this and rewrote it from scratch at least twice just because I thought, "ooh! But what if I did it this way instead?" It didn't need to be rewritten but I have a somewhat non-standard definition of fun and found the whole thing enjoyable. I haven't looked at your code in detail but honestly it seems perfectly fine to me. First and foremost, it works and believe me, I've seen far, far worse code. Much of it also written by me.
[Please log in to post a comment]