A 16x16 pixel demake of Sonic 1. Features Green Hill Zone 1 with Dr Eggman boss battle at the end.
I tried to keep the feel of Sonic 1 as best I could, and the level is fairly accurate to the original, though not 100% the same.
Features
All badniks except for Newton, the chameleon type.
Ring and Invincibility Monitors. No shield.
Remakes of original Sonic 1 music.
Timer/ring count HUD for speed running. Toggled via the pause menu.
Current best 42seconds!
GIFs
Controls
Very simple:
left/right : Move left and right
down : Roll (when running only)
o/x : Jump/Start Game
How to Play
Most people are probably familiar with Sonic but if not, the aim is to get to the end of the level. Collect rings to protect you from damage. Enemies can be killed by jumping or rolling into them.
Getting hit with no rings is Game Over.
Dev
This started as a challenge with some friends to make a game in 16x16 pixels.
The physics is implemented much like the original sonics. Height/width and angle meta data for each tile.
URL Sonic Physics Guide was invaluable.
The small size posed a few issues since sonic could easily tunnel through thin floors/walls at high speed. I also had to implement the tile angle as an array for some tiles rather than a single value, one angle for each x position.
I'm also butting right up agains the PICO-8 token limit (char and compressed size are well within limits though) so I had to do a few mild golfing passes to free up space towads the end so I could fit everything in. Please take into account if scouring the code and don't judge me too harshly!
Credits
Original game: Sonic Team at Sega
Music/Art/Programming: Me
This is very neat, good job optimizing the crud out of a ridiculously tight set of limitations. Yeah, we got screens with millions of pixels available, but it's amazing what you can do with just a few of 'em if you try.😊
interesting exercise.
I’d say that aspect ratio makes it difficult to see what’s ahead.
something like 24 or 32x16 would be easier to read imho.
code wise, look at split, you can save many many tokens:
tiles=split”{1;34;67},{78;89;9}}” for k,t in pairs(tiles) do tiles[k]=split(v,”;”) end |
Yes freds72! I hadn't even thought of using split and encoding the level entities as a string! Thanks, that might just give me enough tokens to improve the parts I wanted to!
You're right that it is hard to see ahead, but Sonic always had that issue if you wanted to go fast. It's almost more a game of repetition and memorisation than a true platformer.
sonic cd solved that issue by moving the camera forward when sonic is running. it was an effective idea, I wonder why every other 2d sonic games never botherd to implement that feature.
Yeah I tried that early on, but at this resolution it looks jumpy. Feels much smoother with sonic remaining in more or less the same place on screen as he runs.
The most amazing thing to me is how close the physics are to the original. A lot of the little things feel just about the same. Really impressive work.
[Please log in to post a comment]