just want to show my work of the last week /maybe I will start a dev blog here...
I am trying to create a complete super mario bros. remake in pico-8, with all the 32+levels.
Most of the functionality is already implemented:
Looking forward to put everything together and show a playable demo soon. Just a few little things for the first world are missing:)
Any feedback or criticism is highly appreciated!
Maybe someone can contributing sound effects/music..
That would be great, because midi to pico8 sounds weird: \
This looks genuinely amazing! The spritework is easily one of the best on PICO-8 I've seen! It's weird being hyped for a PICO-8 game!
As a suggestion, since the levels will be compressed (and I'm not familiar with the px8 library), how about publishing some kind of level editor & packager with developer mouse support like Super Mario Maker?
Keep up the good work!
Thank you for the comments, everyone!
>> how about publishing some kind of level editor & packager with developer
>> mouse support like Super Mario Maker?
I try to keep things simple. Currently I create one cartrige per level and using another that loads all the maps and compresses them to a single file.
Enemies are placed by hand in code, but I will encode this in strings, due to the token limit.
btw: added moving turtle shell collisions
I'm really excited to see this happen! Not only does it look completely kickass, but I have a design doc (for future work) that maps out 4 layouts and uses scripts to give them variation, and I'd like to see how it plays out on this engine.
The maps are reproduced 1:1, that's why I store the data in tables.
Rendering is done manually:
function draw_map(scroll_x) local fx = scroll_x /8 local startx = max(1,flr(fx)) local endx = min(tilemap_width,startx+17) for iy = 1, 15 do for ix = startx, endx do local i = tilemap[iy][ix] if i > 0 and i < 255 then spr(i, ix*8-8, iy*8-8) end end end end
problem is the enormous size of all 32+ levels... I think overall there are ~500 screens. The plan was to use the whole 8kb of map memory , but now are only 4kb left... seems I have to use strings in the source code.
The size of the mapdata of all levels might be around 100kb, compressed are still ~18kb left
I made a collage from the first world:
I'm starting to like to create pixel art with pico-8...
At the beginning the background looked like this, but I decided to remove the background, because of the restricted palette and because of performance
Someone told me that this would not look good.. can not judge that.
What do you think?
btw: I am a programmer, not an artist ;)
It is a very detailed background, but it's also noisy. Not saying you're bad at art (better than me XD), but Super Mario Bros. does benefit from a "clean" background.
As for any issues from the Nintenders (Nintendo Defenders? I'm bad at combining words), worst case scenario, you'd have to change the art/music.
A little update here:
I created a little map editor, which stores compressed levels using a custom RLE compression... I am using only the first 93 Tiles for mapdata, in order to save the data without overhead in strings... One level is compressed to ~500 from 2400 byte(4800 when using the whole byte range), for example.
~]!78~&!78~%!78~/!78~+!78~/!78~D!78~.!78~:!78~7!GH~&!GH~%!GH~/!GH~+!GH~*!78~$!GH~D!GH ~.!GH~:!GH~L!78~>!GH~,[email protected]!GH~,!~$B~=!GH~6!GH~.!GH~3!78~8!GH~,!~*B~$!~$BA~ (!A~x!A~+!GH~l!BAAB~~!~~!~~!~O!A~–!A~$!BABAB~;!56~0!BAB~0!A~&!A!A!A~&!B~)!BB~'!C!!C~+!C!!C~5!BA AB~I!56~)!EF~b!CC!!CC~)!CC!!CC~W!56~(!EF~)!EF~$!)*+~5!)*+~0!)*+~-!)*+!!~$C!!~$C!!)*+!~$C!!~$C~ (!)*+56~&!)*+~*!56~7!EF(!EF~)!EF~$!9:;~5!9:;~0!9:;~-!9:;!~%C!!~%C!9:;~%C!!~%C~'!9:;EF~&!9:;~*!EF~ V1~$!~*1~$!~Y1!!~x1~$!~*1~$!~Y1!!~C1
The decompression routine consumes only 61 tokens.
I am currently fighting against compressed code size. It's really annoying, that a lot code obfuscation is necessary in order to make space free.
Program chars: 4072/65536
I will add more levels the next days. You will prbably need a gamepad... at least I can only play with gamepad;)
btw: how do I add a title??
Thanks. Yes, just one level.... Compressed code size was exceeded :(
Before I add more levels, I have to remove all comments and rename all identifiers. Unfortunately picoTool's luamin does not work.
But I will implement the missing features first. Next points on todo:
- paratrooper movement controller
- pulley platforms
Apart from that, pretty much everything is implemented. Creating levels is really fast and straight forward, using my level editor.
This is really impressive for the Pico 8. And you're definitely right, I couldn't play it with my PC and a keyboard, or my PocketCHIP and the clicky keyboard...had to use a USB SNES controller to get anywhere.
Can't wait to see this go further.
Thanks for playing!
I am very interesting in feedback regarding the controls. I increased the gravity a little bit, and compared to super mario world it feels all a little more direct... the original is really very spongy.
I don't know whether I should recreate the SMW physics 100%, or a simplified custom one ??
btw: added crouch animation & pipes:
I'm cool with the simplified physics. They aren't 1:1, but this doesn't need to be perfect to be a valid engine.
There's also this thing called "cart linking;" so you can link up to 16 carts together. That said, you can take this (the first world), and use it as a template to construct the other worlds, and just "link" from one cart to the next. Now it's just levels, and even 6 of those are copypastes, right? Plus you can squeeze in Lost Levels.
I think I've totally underestimated this. Always one more triviality needs to be implemented... looking forward to put everything together
token limit is very annoying.
and changing constants from
tentity_item = 1 tentity_enemy = 2 ...
this one is nice
local newAnim = mp.level == 0 and (e.vx == 0 and mp.anim_stand_small or p.anim_walk_small) or (mp.duck and mp.anim_duck or (not e.grounded and mp.anim_jump_big or (e.skidding and mp.anim_skidding_big or (e.vx == 0 and mp.anim_stand_big or mp.anim_walk_big))))
also had to remove running across narrow pits... saves ~150 tokens
10 levels sounds quite good actually. Love the artwork!
I noticed it's better to create your cart by first making the engine, creating the start and end and only then gradually filling all the sprites, levels, AI etc until you reached the limits of your cart.
What tool are you using there? Or is that custom?
[Please log in to post a comment]