Mario Final v2.0, the ultimate Super Mario clone for MS-DOS

5.00 avg. rating (93% score) - 1 vote

Earlier this month, a reader got in touch and mentioned that old experiment I did with MARIO.EXE, the Super Mario clone for MS-DOS created by Mike Wiering. It has been almost 15 years since I wrote that article and at least a year since I last played the game. I had been playing MARIO for years, first on my Tandy 386, then on a Pentium, and finally on an IBM Thinkpad laptop running Windows XP. In Windows 7, Microsoft decided to remove full-screen support for MS-DOS applications, and that was when I stopped playing. My interest in the game resumed two years later, in 2011, when I experimented with the source code and wrote that VB.NET level viewer. The original game had no level editor and all levels were hard-coded in WORLDS.PAS.

I opened the email, expecting another question on Pascal programming, or perhaps DOSBox. I was in for a surprise. A new version of Mario, with a total of 24 levels, divided into 6 worlds, and new features was waiting for me. The author had completed the additional levels back in the 2000s, based on the Turbo Pascal 5.5 source code of the game, and has recently shared the game on his github.io page.

Mario Final v2.0

Needless to say, I immediately turned on my laptop and started the new game in DOSBox. The background scenery behind the menu is certainly not how I remembered it. On the left several steps to a pipe have been added:

Screenshot 2025-12-07 232833

The start screen for level 1 remains the same, but the status bar has been updated. There are now 6 worlds, each containing 4 levels, and the status bar will show “World 2-3″ instead of just “Level 6″. A time limit of 5 minutes per level has been added. This may not be enough for more difficult levels but can be adjusted from the source code shared by the author (more on that later).

Screenshot 2025-12-07 173931

If you are like me, finishing level 1 should be a breeze. In any case, you can skip to the next level by pressing P to pause the game, then TAB to activate cheat mode and slowly typing S, K, I, P. Although the cheat logic is present in the original source code by Mike Wiering, it did not include SKIP. You can find this logic in unit PLAY.PAS:

      While Key = kbP do ;
      While Chr (bKey - $80) = kbP do ;
      OldKey := Key;
      if Key = kbTab then
      begin
      .....
      if Cheat = kbS+kbK+kbI+kbP then   { SKIP - Skips to next level }
            begin
              Passed := TRUE;
              Waiting := TRUE;
              TextCounter := 200;
              PipeCode [1] := 'ç';
              InPipe := TRUE;
              EndPause := TRUE;
            end;
      ....

If you manage to get to level 3, whether by playing or by cheating with the above shortcut key, you will see that the floor design has changed. It looks just like Super Angelo, in all its glory:

Screenshot 2025-12-07 175407

Although the floor sprite already exists in the code, it was never used in the official version. This is level 3 as originally designed by Mike Wiering:

Screenshot 2025-12-07 180557

This is how the same floor sprite is used in Super Angelo, usually surrounded by water:

mqdefault

The new game makes extensive use of existing components and turns them into new levels that are fun to play with. For example, there is now a wide pond in level 6, or world 2-3:

World 2-3

This is the start of level 12 (world 4-3), showing a fence post just below the coin boxes. This fence post, taken from the SNES version of Super Mario Bros, is for decoration only as you can’t do anything with it (yet):

Screenshot 2025-12-07 180003

This is a scene from level 12, which is on par with Super Angelo or even Charlie II:

World 4-3 Second

Time limit

I took the opportunity to improve the original time limit of 5 minutes per level, controlled by Integer variable time in PLAY.PAS. With each second, variable time will increase by 32 counts, so setting a value of 32767 (maximum for integer in Pascal) results in time limit of around 15 minutes. This limit was still not good enough to explore higher levels, and I didn’t want to tweak other part of the code (time itself is defined in STATUS.PAS), so I cheated by decreasing time only every 2 ticks, introducing a new variable timeTemp:

var timeTemp: Integer;
timeTemp := 0;
time  := 32767;
if (time > 0) and (not Passed) then
begin
timeTemp := timeTemp + 1;
if (timeTemp mod 2 = 0) then
Dec(time);
end;

This way the time will only decrease every 2 seconds. So for an initial value of 32767, you will have a total of 30 minutes for each level. Not too short like the original (5 minutes) and not too long to defeat the purposes of a time limit. Not the most elegant solution, but works well for my use.

If you complete the last level, the game will return to level 1, with a slightly faster speed and different background color. For years I was playing on an incomplete version of MARIO.EXE with no menu screen, just 4 levels and no exit in the last level. I was able to finish the entire 24 levels in around a day, although I had to admit I needed to rely on the Save State feature of DOSBox-X a few times! The author said he originally made more than 40 levels for the game but many of them were later lost. I wished I could somehow restored those lost levels. Back in the days I myself made two experimental levels for Mario. Those were unplayable as I had added too many enemies, ponds and pipes blocking the way. I wish I had the same patience to make all these new levels myself.

Moving platforms

In level 20 (world 5-4), moving platforms are introduced. Mario can ride them to reach areas that are otherwise too high to get to with a regular jump. The logic for moving platforms is already there in the original source code by Mike Wiering but was never used. In reality, I believe the logic is mostly the same as enemies, maybe with a boolean flag to say that Mario will not die when jumping on them, but instead will just move along with the object. The shape of the moving box, which is the same as a tortoise or other enemies, gave this away.

Screenshot 2025-12-07 180229

In Super Angelo, Charlie the Duck and Charlie II, moving platforms are widely used. The platforms are also larger, much nicer and not just an afterthought:

images.steamusercontent

Flash games by Wiering Software

The Flash versions of Charlie the Duck and Super Angelo are still playable on Windows 11 today, with the right Flash player. Some incompatible player versions will load the game just fine, but the game will be uncontrollable as not all keys will be recognized:

Screenshot 2025-12-08 003234

The Flash version of Charlie the Duck works fine too. The presence of only a START button instead of the full menu to load/save game suggests that this is still perhaps an experimental build:

Screenshot 2025-12-08 003208

Sinterklaas presented with an error at first:

Screenshot 2025-12-08 003425

… but then loads just fine. I didn’t really like this game back in the day. You have to go back and forth between the chimneys to deliver the presents, and time is always running out fast:

Screenshot 2025-12-08 003644

Zwarte Pierte loads fine, without any initial crash. I am using flashplayer11_3r300_262_win_debug.exe:

Screenshot 2025-12-08 003722

And finally, something that genuinely blows me away: a modified version of Super Angelo for Flash, using imported sprites from the DOS version of Super Mario. The menu screen loads perfectly:

Screenshot 2025-12-08 002857

Here Mario is trying to obtain his first token to grow big. After this, he would need to obtain another token to get his gun:

Screenshot 2025-12-08 002958

All these modifications were done by the same author who developed the new Mario levels. The author has decompiled the Flash version of Super Angelo using Sothink SWF Decompiler, transferred the graphics from the DOS version of Mario, and recompiled the SWF with these new graphics. The source code for the Flash release is not available, and yet the modified game still plays perfectly fine. Obviously the size, the format and everything else has to match; otherwise the recompiled game won’t be playable. I am impressed.

Level selection

The Flash version of Super Angelo does not have a way to save progress or to load an existing game, only to start a new game. “Load Game” has been removed from the menu and only “New Game” is available. I tried but could not find a way to get the Flash version to load an existing ANGELO.CFG file.

Back in the day, I made different versions of ANGELO.CFG containing saved games for levels 2/3/4, 5/6/7, 8/9/10 and 10/11/12, so that I could easily select the game I wanted. I had no access to the source code so I performed a hex comparison of the CFG files until I found out which byte defined the saved level. I also made a similar CHARLIE.CFG file for level selection in Charlie the Duck. For MARIO, based on the released source code, I wrote SETLEVEL.PAS which generated a MARIO.CFG file with various different levels.

I couldn’t make a similar PROGRESS.SAV for Charlie II as it seemed to have been encoded, maybe with base64 or a similar scheme:

Screenshot 2025-12-08 140529

I didn’t have to either, as I was eventually able to play all levels (both standard and expansion packs). Once you have finished all levels, Charlie II will allow you to select the level you want to play without mucking with PROGRESS.SAV.

You can download a ZIP file with SETLEVEL.PAS, the above ANGELO.CFG and CHARLIE.CFG, my PROGRESS.SAV collection for Charlie II here.

See also

Programming Nostalgia: revisiting Mike Wiering’s Mario game written in Pascal

 

 

 

 

 

 

5.00 avg. rating (93% score) - 1 vote
ToughDev

ToughDev

A tough developer who likes to work on just about anything, from software development to electronics, and share his knowledge with the rest of the world.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>