Main forum > Announcements

Super Mario Bros. 3 engine - RFD

(1/3) > >>

Hello friends! Today, I am releasing the source code and compiled binary for an engine I am working on programming casually in my free time.

It's called RFDash (Real Furry Dash) - I am making it for some friends. (For some disclosure, I go by Dart Redtail Fox on many other forums, and I have a character named Dart / Dordo that I sometimes put into games, if that makes sense.)

Full Super Mario Bros. 3 style overworld, level, and progression system
Map editor that can handle monsters, interactive objects, teleport doors and pipes etc
TWO PLAYER experience: take turns when one player dies. One player is also of course possible.
TWIST ON THE ORIGINAL: The player who is NOT playing (watching,) may CONTROL ENEMIES by pressing start and selecting an enemy on screen to spice up multiplayer!
Plays .SPC (Super Nintendo chiptune format) natively! Levels can use authentic 16-bit music directly (thanks to winamp input/output dlls)
Dynamic mobs and maps: no lag due to "too much" in a level - the level is streamlined as you move.
Controller config system - define buttons per-controller! Button preferences are saved and loaded automatically.
Game supports both game controllers and/or keyboard+mouse, even simultaneously.
Tons of cool tiles and objects to choose from! Make maddeningly confusing levels, or simple fun ones!
Two characters exist right now - Dordo (fox) and Yoshi (... yoshi)
The characters aren't going to necessarily be "mario" themed, as this is a game I am making for friends. One simply wanted a yellow Yoshi character playable.
I can't list all of the features here because there just isn't time in the day I don't think.

Includes CLEAN source code with indenting, descriptions, and concise functions! Feel free to use part or all of this to design your own game.


When the game begins, it asks you to press a button. You can use a controller button or keyboard button, and walk through the on-screen process to define keys. At the main menu, a different device can be pressed to initiate co-op (2-player.) Once a button preference has been saved, it will be loaded automatically the next time that device is detected.

Press F1 through F7 to change the game's window size

In the LEVEL editor:

Arrow keys scroll around the map.
hold TAB to bring up a tile list. Click one, and release TAB. You may now paint that tile by clicking and dragging.
SCROLL WHEEL will change the tile blue or red. Blue means "pass through," red means "solid block."
Right click any tile to "copy" it. Then left click to paint with the copied tile. Note: pass-through is copied as well.
"1" and "2" on the keyboard switch between layer 1 and 2. Layer 1 is drawn BEHIND the character. Layer 2 is drawn IN FRONT OF the character.
"3" switches to the monster layer. Scroll wheel selects a preview monster - left click places it. Hold DEL key to delete a monster you're hovering over.
"S" sets the start position to the tile under the cursor. Do not set the "S" directly one block underneath a solid tile - the character will have nowhere to move!
"D" sets a "DOOR" tile. It will then ask you to select a "other end" of the door by clicking another block. The door tile can be entered (either end) by the player pressing "up" in game. Note: it will also ask you to select a new background tile and music file. You may define this, or press cancel to keep it as-is.
"T" sets a "TELEPORT" tile. This is the same as "DOOR" but with no "press up" requirement. Put this inside pipes to create pipe warps. Note that this should be on the BOTTOM RIGHT side of a pipe in order to make the piping effect look right.

Pipes: Pipes will automatically allow the player to enter them by pressing a button toward the pipe while directly at the end of it. (For instance, a pipe to the left of the player requires the player to walk up to it and press left, etc.) Pipes MUST BE ON LAYER 2 in order to be a "enterable pipe." There is no exception. Layer 1 pipes do nothing. The player will move through solid tiles while "piping," and will stop doing so when it has reached "pass-thru" tiles sufficient in size for the player to pop out of.
If you place a plant in the pipe, always place veritcal plants on the left side inside of the pipe. For horizontal plants, it's the top side of the pipe inside. Experiment to get it right!

Pressing ESC in the editor will save and exit right away.
Note that while in the editor, the mouse is locked to the window. This was required to make the scrollwheel work. Press F10 to release it, and F10 to recapture it if need be.


While editing a world, place tiles and level blocks anywhere you want, there's no real requirement. Hover over a tile and press L to link a level to it. This will make it require the player to beat it in order to move over it. See the included demo world and levels for an example.


There is only "run" and "jump" and "pause" in this game, making it simple to start playing. Anyone who has played Mario knows right what to do. The one twist is, the level ends by going down a flagpole, much like Mario 1, though this game aims to mimic mostly mario 3.

You can jump on turtles, grab their shells by holding "run," and throw them to break blocks or kill enemies.
Jump on most enemy's heads to kill them etc.
Water also works, one can swim by hopping in.

One might find Dordo to play a bit more like Mario himself.
Yoshi is much "floaty-er" but can do a hover jump and goes quite far.

Enter key destroys levels in gameplay overworld. This is in case a level is way too hard and you just want to pulverize it!
Holding tilde key in-level will show debug info. While this is open, pressing "+" on the numpad will cheat and give you some extra health
TAB will open up the HUD until you press it again. The HUD opens automatically when getting a coin or life, though.

I'm sure there's a ton I'm forgetting. Ask me any questions you come up with! I think this is probably the best "mario simulation" I've programmed yet. There are some bugs, but they're mostly minor and being worked on. If you find something please let me know.

Very nice! Just gave a go :)

spectacular great work  , thank you :nw:

Darmakwolf for information, do not compile with the steam version:

Initializing WinAmp ...
WinAmp INITIALIZED. *** Unhandled exception ***


--- Quote from: Qedo on 2021-May-25 ---Darmakwolf for information, do not compile with the steam version:

Initializing WinAmp ...
WinAmp INITIALIZED. *** Unhandled exception ***

--- End quote ---

Yeah I mentioned this to Kitty - I noticed it too. He said he'd need the source to see why. Well now it's available  :D
I am making this in GLBasic IDE Version: 15.238

Maybe there's some syntax difference when it comes to DLL calls in the Steam version?


[0] Message Index

[#] Next page

Go to full version