the cutting room mirror

Mortal Kombat: Armageddon

This article has a talk page!This article has a talk page!
view on tcrf.net

Mortal Kombat: Armageddonis the last installment of theMortal Kombatseries on sixth-generation consoles, and as such Midway added nearly every character from the series to the game. It's likeMortal Kombat Trilogy'', if half the roster were clones. Which does at least make it the first trueEVERYONE IS HERE'' type game in a sense.

It's also the first- and so far, the only- Mortal Kombat game where players could kreate their own fighter.

To do:

Unused Levels#

Arenas#

nis_bgnd#

Mortal_Kombat_Armageddon_Test_Arena.png

Judging by the filename, this arena was likely a test background for cutscenes. It is referred to as "unknown background name" in-game.

Release

Action Replay code

PS2 (USA)

20660094 00000004

Wii (USA)

0456E0AC 00000004

kredits#

Krypt Art

Arena

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. It 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.

Release

Action Replay code

PS2 (USA)

20660094 00000019

Wii (USA)

0456E0AC 00000019

Motor Kombat#

kart_test_derby#

MKA_Test_track_ingame.png

This is a test track that was used before the minigame was finalized.

Release

Action Replay code

PS2 (USA)

20660094 00000036

Wii (USA)

0456E0AC 00000036

kart_track_loop#

MKA_TrackLoop.png

This track will cause the game to hang when loaded in Motor Kombat, though it oddly loads without issue in Arcade. It is a lava-themed level that can be seen in Motor Concept Movie from the Krypt.

Release

Action Replay code

PS2 (USA)

20660094 00000035

Wii (USA)

0456E0AC 00000035

kart_track_straightaway#

MKA_Straightaway.png

This track also only loads in Arcade. It seems to be a mostly black background with two walls on opposite ends of the stage.

Release

Action Replay code

PS2 (USA)

20660094 00000037

Wii (USA)

0456E0AC 00000037

Konquest#

Newtown_demo#

MKA_Newtown.png

An unused map that was shown in Konquest Progression Movie from the Krypt. The player spawns outside of the map and is able to walk through any object as the level lacks collision. The only other character present is an untextured ninja that can be seen t-posing.

Release

Action Replay code

PS2 (USA)

207BFC78 00000000

Wii (USA)

04525288 00000000

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 featuring an early logo. Found inside konquest_common.ssf. MKArmageddon_endscreen.png

Test Textures#

A few test textures are present in kart_track_straightaway.ssf. MKA_st_begin.png MKA_st_end.png MKA_st_sign1.png MKA_st_sign2.png MKA_st_sign3.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#

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.
  • Kreate a Fighter's track "In Depth" no longer plays.
  • 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

Watch on YouTube

Watch on YouTube

Premium Edition#

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.