Halo2 dissection

After playing the best game ever for 14 hour solid post launch (I really didn't download the leaked copy) I decided enough eye candy and started to dissect the disk. Here is what I've found so far:



The root directory of the game has the expected 4 files:

  • default.xbe
  • downloader.xbe
  • update.xbe
  • dashupdate.xbe (deleted this one before I caught the name.. I'll fix that later)

In addition to the four executables there are three directories

  • bink
  • maps
  • media

The media directory was nothing special except one file named: "command line.txt". This gave me glee, especially when I looked at the contents:

cd C:Program FilesMicrosoft Xbox SDKxboxin

bundler C:halo2inDownloadermediadlcustom.rdf -o C:halo2inDownloadermediadlcustom.xpr
bundler C:halo2inDownloadermediadlres.rdf -o C:halo2inDownloadermediadlres.xpr


Dlcustom holds the resources for the custom backgrounds. Dlres is the resources for all the buttons and controls. If dlres.xpr is absent then downloader will simply reference the default resources embedded in the .xbe. You must have the sdk installed in the default location for the command lines to work.

This gleeful find led me to (obviously) the two rdf files:

dlcustom.rdf
out_header         rescustom.h
out_packedresource obji386dlcustom.xpr
out_error          rescustom.err
out_prefix         RESCUSTOM


Texture TEX_MAIN_BACKGROUND
{
    Source srcmediadlback_main.bmp
    Format D3DFMT_DXT3
    Levels 1
}


Texture TEX_CONTENT_BACKGROUND
{
    Source srcmediadlback_content.bmp
    Format D3DFMT_DXT3
    Levels 1
}


Texture TEX_DOWNLOADING_BACKGROUND
{
    Source srcmediadlback_down.bmp
    Format D3DFMT_DXT3
    Levels 1
}



          
dlres.rdf

out_header         dlres.h
out_packedresource dlres.xpr
out_error          dlres.err
out_prefix         RES

Texture TEX_GENERIC_TITLE
{
    Source srcmediageneric.bmp
    Format D3DFMT_DXT3
    Levels 1
}

Texture TEX_A_BUTTON
{
    Source      srcmediaabutton.bmp
    Format      D3DFMT_DXT3
    Alphasource srcmediauttonalpha.bmp
    Levels      1
}

Texture TEX_B_BUTTON
{
    Source      srcmediabutton.bmp
    Alphasource srcmediauttonalpha.bmp
    Format      D3DFMT_DXT3
    Levels      1
}

Texture TEX_X_BUTTON
{
    Source      srcmediaxbutton.bmp
    Alphasource srcmediauttonalpha.bmp
    Format      D3DFMT_DXT3
    Levels      1
}

Texture TEX_LENS_ALPHA
{
    Source      srcmedialensalpha.bmp
    Alphasource srcmedialensalpha.bmp
    Format      D3DFMT_A8R8G8B8
    Levels      1
}

Texture TEX_CORNER_FULL
{
    Source      srcmediacorner_full.bmp
    Alphasource srcmediacorner_full_alpha.bmp
    Format      D3DFMT_A8R8G8B8
    Levels      1
}

Texture TEX_CORNER_PARTIAL
{
    Source      srcmediacorner_partial.bmp
    Alphasource srcmediacorner_partial_alpha.bmp
    Format      D3DFMT_A8R8G8B8
    Levels      1
}

Texture TEX_SPIN_FRAME1
{
    Source      srcmediaspin1.bmp
    Alphasource srcmediaspin1alpha.bmp
    Format      D3DFMT_A8R8G8B8
    Levels      1
}

Texture TEX_SPIN_FRAME2
{
    Source      srcmediaspin2.bmp
    Alphasource srcmediaspin2alpha.bmp
    Format      D3DFMT_A8R8G8B8
    Levels      1
}

Texture TEX_SPIN_FRAME3
{
    Source      srcmediaspin3.bmp
    Alphasource srcmediaspin3alpha.bmp
    Format      D3DFMT_A8R8G8B8
    Levels      1
}


Texture TEX_SPIN_FRAME4
{
    Source      srcmediaspin4.bmp
    Alphasource srcmediaspin4alpha.bmp
    Format      D3DFMT_A8R8G8B8
    Levels      1
}


Texture TEX_UP_ARROW
{
    Source      srcmediaup.bmp
    Alphasource srcmediaupalpha.bmp
    Format      D3DFMT_A8R8G8B8
    Levels      1
}


Texture TEX_DOWN_ARROW
{
    Source      srcmediadown.bmp
    Alphasource srcmediadownalpha.bmp
    Format      D3DFMT_A8R8G8B8
    Levels      1
}


Texture TEX_BUTTON_TEXT_BACK
{
    Source      srcmediautton_text_back.bmp
    Alphasource srcmediautton_text_alpha.bmp
    Format      D3DFMT_A8R8G8B8
    Levels      1
}

Texture TEX_PREMIUM_ICON
{
    Source      srcmediaPremiumIcon.bmp
    Alphasource srcmediaPremiumIcon_alpha.bmp
    Format      D3DFMT_A8R8G8B8
    Levels      1
}


Texture TEX_HIGHLIGHT
{
    Source      srcmediahighlight.bmp
    Format      D3DFMT_A8R8G8B8
    Levels      1
}


Texture TEX_BIG_BUTTON
{
    Source      srcmediaigbutton.bmp
    Alphasource srcmediaigbutton_alpha.bmp
    Format      D3DFMT_A8R8G8B8
    Levels      1
}


          

Looking in the XPR files with the same root names as teh RDF files shows they are binary files with few landmarks. In fact all I found was the headers reference to XPRO.H.

After spending some time looking at the maps, it would appear that there are three types of maps:

  • Campaign mode
  • PvP mode ("normal" multiplayer)
  • Scenarios

This last one seems quite interesting. It is referenced in a 418 meg map named single_player_shared.map . . . Interesting.

That's all for now, I'm sure I'm not the only one hacking, but hopefully this helps others get started.

A note to M$: all the info I've made available here is under the auspice of interoperability of user generated maps.