If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!
This article has a talk page!

Mortal Kombat: Armageddon

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

Mortal Kombat: Armageddon

Developer: Midway Games
Publisher: Midway Games
Platforms: PlayStation 2, Xbox, Wii
Released in US: October 11, 2006 (PS2), October 16, 2006 (Xbox), May 29, 2007 (Wii)
Released in EU: October 27, 2006 (PS2), June 15, 2007 (Wii)


AreasIcon.png This game has unused areas.
CharacterIcon.png This game has unused playable characters.
SourceIcon.png This game has uncompiled source code.
DevTextIcon.png This game has hidden development-related text.
GraphicsIcon.png This game has unused graphics.
MusicIcon.png This game has unused music.
SoundIcon.png This game has unused sounds.
TextIcon.png This game has unused text.
DebugIcon.png This game has debugging material.
Carts.png This game has revisional differences.


Mortal Kombat: Armageddon is the last installment of the Mortal Kombat series on sixth-generation consoles, and as such Midway added nearly every character from the series to the game. It's like Mortal Kombat Trilogy, but better.

And it's the first Mortal Kombat game where players could kreate their own fighter.

Hmmm...
To do:
  • Mortal Kombat: Deception Leftovers
  • Replace the screenshots with ones taken in the native resolution.
  • Elaborate on how to access the unused stages.
  • Look into newtown_demo.ssf as it appears to be an unused map from Konquest.
  • Check to see if there is more unused content.

Unused Arenas

Mortal Kombat Armageddon Test Arena.png

The arena pictured was likely used to test fights before the other arenas were finished. It can still be accessed via Action Replay, but the walls have no collision. This stage is named "unknown background name" in-game.

Krypt alternate outfit art The arena where the alternate outfit art was made
MKA krypt alt costume art.png MKA Krypt alt costume background arena.png

The background used to show off unlocked alternate outfits for characters in the Krypt is actually a stage in the game, though it is normally inaccessible for players. This stage was most likely also used for the E3 character select screen due to the presence of fog, which does not appear on the alternate costume art as it does on the E3 character select screen. The stage is named "PLAYER 1" in-game.

E3 Char Select.png

Unused Motor Kombat Tracks

MKA Test track ingame.png

This is a test track that was used before Motor Kombat was finalized.

Test Character "0"

Mortal kombat armageddon 0 Bug this.png

If you force the game to load the player's created character slot when the player isn't signed in during Arcade Mode, the game loads a base female character named "0". She has the fighting style "Bug This" and plays like a normal custom character, except she has no special moves.

Platform AR code
PS2 (USA) 20660158 0000003E
Wii (USA) 0056e173 0000003F

Unused Graphics

E3 End Screen

Once again, there's a leftover end screen from the E3 demo. Found inside konquest_common.ssf.

MKArmageddon endscreen.png

Unused Sounds

Announcer Dialogue

"Deadly"
The soundbytes for the different Fatality levels were originally split into two parts rather than being one soundbyte each.
"Killer"
"Bloody"
"Mortal"
"Brutal"
"Evil"
"Vicious"
"Savage"
"Extreme"
"Ultimate"

Music

shell_music_2
Leftover main menu music from Mortal Kombatː Deception that is only played in the PS2 version's MK Online lobby screen.
shell_music_3

Debug Functions

Game Version

Hmmm...
To do:
Document the version numbers from the international releases.
MKArmageddon PS2VersionNumber.png

When you go to game options and select gameplay, hold L + Attack 1 for about six seconds in order for the game version to display on the bottom-right corner. It appears this function is enabled in all releases, which was not the case with the previous sixth-generation games.

Release Version Number
Xbox (USA) 0.099
Wii (USA) 0.099
PlayStation 2 (USA) 0.084

Unused Text

Uncompiled Source Code

Some auto-generated C++ headers from AiLive LiveMove are present in the root folder of the Wii release.

CFatality.h

/* -- LiveMove classification labels                                */
/*                                                                  */
/*    Generated by lmMaker. Do not modify by hand.                  */
/*                                                                  */
/* -- AiLive LiveMove (c) 2000-2006 AiLive Inc.                     */
#ifndef LM_FATALITY
#define LM_FATALITY

enum lm_Fatality
{
   Fatality_watnat = 0,
   Fatality_wdundu,
   Fatality_wpopunpopu,
   Fatality_wpotnpoa,
   Fatality_wpounpou,
   Fatality_wpuponpupo,
   Fatality_wtanta,
   Fatality_wudnud,
   Fatality_wpodnpod,
   Fatality_wponpu,
   Fatality_wund,
   Fatality_HCircle_Towards,
   Fatality_wpoccw,
   Fatality_wcw,
   Fatality_wweird,
   Fatality_wccw,
   Fatality_wdpo,
   Fatality_wpoa,
   Fatality_wdat,
   Fatality_wupo,
   Fatality_wcwt,
   Fatality_wccwpo,
   Fatality_NoMotion2,
   Fatality_HCircle_Away
};

/*
E.g.,
if ( lmGetClassification( a ) == Fatality_watnat )
{
   ... did move watnat ! ...
}
*/

#endif

Midway.h

/* -- LiveMove classification labels                                */
/*                                                                  */
/*    Generated by lmMaker. Do not modify by hand.                  */
/*                                                                  */
/* -- AiLive LiveMove (c) 2000-2006 AiLive Inc.                     */
#ifndef LM_MIDWAY
#define LM_MIDWAY

enum lm_Midway
{
   Midway_Away_Towards = 0,
   Midway_Down_Up,
   Midway_HCircle_Away,
   Midway_HCircle_Towards,
   Midway_NoMotion,
   Midway_Towards_Away,
   Midway_Up_Down,
   Midway_Arc_Away,
   Midway_Arc_Towards
};

/*
E.g.,
if ( lmGetClassification( a ) == Midway_Away_Towards )
{
   ... did move Away_Towards ! ...
}
*/

#endif

Nunchuk.h

/* -- LiveMove classification labels                                */
/*                                                                  */
/*    Generated by lmMaker. Do not modify by hand.                  */
/*                                                                  */
/* -- AiLive LiveMove (c) 2000-2006 AiLive Inc.                     */
#ifndef LM_NUNCHUK
#define LM_NUNCHUK

enum lm_Nunchuk
{
   Nunchuk_watnat = 0,
   Nunchuk_wdundu,
   Nunchuk_wpopunpopu,
   Nunchuk_wpotnpoa,
   Nunchuk_wpounpou,
   Nunchuk_wpuponpupo,
   Nunchuk_wtanta,
   Nunchuk_wudnud,
   Nunchuk_wpodnpod,
   Nunchuk_wponpu,
   Nunchuk_wund,
   Nunchuk_NoMotion2
};

/*
E.g.,
if ( lmGetClassification( a ) == Nunchuk_watnat )
{
   ... did move watnat ! ...
}
*/

#endif

Internal Names

As it was the case with the previous games, some files and code refer to debuting characters and arenas with their internal names.

Internal name Actual name
Desert Lost Pyramid
Hero Taven
Lava World Outworld Refinery
Motor Town Bo' Rai Cho's Brewery
The Pyramid Pyramid of Argus
Volcano Outworld Refinery

list2.txt

Also in the root folder is a text file that lists files and folders that were used in development builds.

anims
art
CFatality.h
Fatality.lmc
HomeButton2
Konquest.lmc
list2.txt
logs
Midway.h
Midway.lmc
mk7.dol
mko
moviegc
Nunchuk.h
Nunchuk.lmc
opening.bnr
sndsgc
zzz.zzz

Memory Heap Debugger

A bunch of text belonging to a memory heap debugger is in the Xbox executable at 0x4FBFA8.

System Heap 1.5 rev 1   \games\mk7xbox\mk7\mwMEM\mwMem.c    MEM_ALWAYS_FAIL
       memDebugHeap() is unavailable with MEM_DEBUG_BUILD disabled!
   memDebugHeapTag() is unavailable with MEM_DEBUG_BUILD disabled!
        memDebugGetTagMemSize() is unavailable with MEM_DEBUG_BUILD disabled!
  memDebugVerifyMemSize() is unavailable with MEM_DEBUG_BUILD disabled!
  memDebugVerifyHdrFtr() is unavailable with MEM_DEBUG_BUILD disabled!
      Current Num Mallocs :  %d
      Peak Num Mallocs    :  %d
      Current Free Mem    : %08d bytes 0x%08x  
      Current Used Mem    : %08d bytes 0x%08x  
      Peak Used Mem       : %08d bytes 0x%08x  
      Total Reserved Mem  : %08d bytes 0x%08x  
      Total Memory
    *************************************************************
      memDebugHeapTagSummary() is unavaible with MEM_DEBUG_BUILD disabled!
   *********************************************************************************************
   %s        %08d  0x%08x   0x%08x   0x%08x  
    USED     %s        %08d  0x%08x   0x%08x   0x%08x   
   FREE     ----------+------------------------+-----------------+-------------------------
           Type            Size                  Start(Hdr)    End(Hdr+data+struct)
   => Function DumpHeapUsedFree(%s)  ...............
   %8.2fK  0x%08x   0x%08p       0x%08p
       ----------------------+-----------------+-------------------------
              Size           Start(freeHdr)    End(freeHdr+data)
   => DumpHeapFreeList(%s) ...
     Max Size Free Blocks : %d
  NUM of Free Blocks   : %d
 TRUE            Overflow Status: %s
    FALSE      Current Num Mallocs : %u
          Peak Num Mallocs : %u
      Allocated Num Blocks : %d  [ used: %d || free: %d || to be freed: %d ]
         Current Mem Size : %08d bytes 0x%08x  
            Peak Mem Size : %08d bytes 0x%08x  
            Allocated Mem : %08d bytes 0x%08x  
           Bottom Address : 0x%08x  
             Top Address : 0x%08x  
     Heap Name           : %s
        *****************************************************************
               BIGSTACK fixed block heap   TINYSTACK fixed block heap  fixed block 1024 heap   fixed block 512 heap    fixed block 128 heap    fixed block 64 heap fixed block 32 heap fixed block 16 heap MKPROC fixed block heap MKSOBJ fixed block heap MKBONE fixed block heap MKOBJ fixed block heap  PFX objects Player Attack Col fixed block heap  Player Col fixed block heap NPCSTACK fixed block heap   overflowing 16 word fixed block heap into 32 word heap
 overflowing 32 word fixed block heap into 64 word heap
 overflowing 64 word fixed block heap into 128 word heap
    overflowing 128 word fixed block heap into 512 word heap
   overflowing 512 word fixed block heap into 1024 word heap
  OVERFLOW Heap   ==>> allocated OVERFLOW_HEAP size: %6.2f K
 SECTION TABLE fixed block heap  MPEG heap   Wave heap   mwFile heap mwSound Temp heap   mwSound heap    Section heap(external)  \games\mk7xbox\mk7\mwMEM\mwMemHeap.c    Permanent heap        FAILURE:  cannot allocate: %f K  from heap: %s
   >> Out of RAM 
 Overflow in %s is not allowed... fix it!
       >> OVERFLOW_HEAP: size: %f K origin heap: %s, dest heap: %s, file: %s L: %d
    operator new

Repository Log

A source code repository log related to the Renderware SDK can be found at 0x4FD448 and throughout the Xbox executable.

@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/plugin/hanim/rphanim.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/plugin/hanim/stdkey.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/plugin/matfx/rpmatfx.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/plugin/matfx/xbox/effectPipesXbox.c#2 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/plugin/matfx/xbox/multitexxbox.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/plugin/matfx/multiTex.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/plugin/matfx/multiTexEffect.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/batextur.c#2 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/plcore/bastream.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/plcore/babinary.c#2 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/baraster.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/bacamera.c#4 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/baimage.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/plcore/bamatrix.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/baframe.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/badevice.c#2 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/batypehf.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/pipe/p2/baim3d.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/plcore/bafsys.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/baimras.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/plcore/bavector.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/babinfrm.c#2 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/plcore/baerr.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/plcore/batkbin.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/plcore/batkreg.c#3 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/plcore/baresour.c#2 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/driver/xbox/xbcache.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/plcore/bamemory.c#2 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/driver/xbox/xbrendst.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/driver/xbox/xbdevice.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/driver/xbox/xbmemory.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/driver/xbox/xbraster.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/pipe/p2/bapipe.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/pipe/p2/p2core.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/babintex.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/baresamp.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/plcore/rwstring.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/babbox.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/basync.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/os/xbox/osintf.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/plcore/bacolor.c#2 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/pipe/p2/p2heap.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/pipe/p2/xbox/im3dpipe.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/plcore/resmem.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/driver/xbox/xb2drend.c#2 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/driver/xbox/xbtexdic.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/driver/xbox/xbsprite.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/driver/xbox/xbconvrt.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/pipe/p2/p2renderstate.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/pipe/p2/p2dep.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/pipe/p2/xbox/nodeXBoxSubmitNoLight.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/driver/common/palquant.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/pipe/p2/p2resort.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/world/baclump.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/world/balight.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/world/baworobj.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/world/baworld.c#2 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/world/bageomet.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/world/bamatlst.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/world/bamesh.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/world/bamateri.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/world/pipe/p2/xbox/xbpipe.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/world/pipe/p2/xbox/xbvtxfmt.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/world/pipe/p2/xbox/xblights.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/world/pipe/p2/xbox/xbpixelshader.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/world/pipe/p2/xbox/nodeXBoxAtomicAllInOne.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/world/pipe/p2/xbox/nodeXBoxWorldSectorAllInOne.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/world/pipe/p2/xbox/native.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/world/pipe/p2/bapipew.c#2 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/world/babinwor.c#2 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/world/basector.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/world/pipe/p2/xbox/wrldpipe.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/plugin/skin2/rpskin.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/plugin/skin2/xbox/skinxboxrender.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/plugin/skin2/xbox/skinxboxformat.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/plugin/skin2/xbox/skinxboxconstantmode.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/plugin/skin2/xbox/skinxbox.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/plugin/skin2/xbox/skinxboxinstance.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/plugin/skin2/bsplit.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/plugin/skin2/xbox/skinplatform.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/plugin/skin2/xbox/skinxboxplain.c#1 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/tool/quat/rtquat.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/plugin/anisot/rpanisot.c#1 $
@@@@(#)$Id: //RenderWare/RW36Active/rwsdk/tool/anim/rtanim.c#2 $
@@(#)$Id: //RenderWare/RW36Active/rwsdk/src/babincam.c#1 $

Build Date

A build date for RenderWare can also be found in the Xbox executable at 0x4FDA89.

Core built at Dec  1 2005 15:24:51

Version Differences

The Wii port was released several months after the others and features a few differences:

  • Backgrounds for Cyrax, Shao Kahn, and Shinnok were added to the main menu.
  • Characters now have facial expressions.
  • Players were given more icons to use as profile images.
  • Khameleon was added as a playable character, thus reducing Kreate-a-Fighter to only one slot in the character select screen (not that the PS2 and Xbox's two slots had much practical utility, since only one custom character could be saved per profile anyway).
  • New features such as Endurance Mode and better visuals overall.
  • Cyrax's Deadly Alliance throw has been restored.
  • The following infinite combos were fixed:
    • Havik's free throw infinite
    • Hotaru's free throw infinite
    • Tai Chi's 33 infinite
    • Bo Rai Cho's 24 infinite
    • Jade's teleport infinite
  • Konquest's cutscenes are made unskippable for the Wii version, despite the PS2 and Xbox versions allowing you to skip them.
  • The Midway vanity plate is changed:
PS2/Xbox Wii

Premium Edition

Hmmm...
To do:
Is anything else different?

A Premium Edition was released for PS2 in North America. It adds the arcade version of Ultimate Mortal Kombat 3 as a bonus game, and also includes a DVD containing videos such as a making of documentary.