Skip to the content.

Contents

Versions

Build Build Date Name Details
1386 Feb 16 1999 12:24:33 midtown.exe Beta, Symbols, Debug
1427 Mar 1 1999 18:23:06 midtown.exe Beta, Symbols, Debug
1549 Mar 31 1999 17:02:43 midtown.exe Beta, Executable Only, SafeDisc
1560 Apr 2 1999 19:09:02 midtown.exe Beta, Symbols
1560 Apr 2 1999 19:10:27 test1560.exe Beta, Sybmols, Debug
1588 Apr 14 1999 15:07:10 midtown.exe Retail, Symbols, SafeDisc
1532 / NET DEMO Jul 26 1999 18:50:44 midtrial.exe Trial
1532 / VW DEMO Jul 29 1999 15:03:55 midvwtrial.exe Trial
1589 Sep 16 1999 11:00:21 midtown.exe Retail, SafeDisc + Clean

1386

Earliest known build. Used for beta testing. The CD included “MSReport”, with information for uploading bug reports to Microsoft via FTP.

1427

Probably the one seen in GDC, March 1999.

1549

Found in an old .icd alongside the 1560 builds. Needs a custom mmlang.dll to run.

1560

Sneak Preview CD. Contained Debug and Release builds (plus an old 1549 build).
Available at https://archive.org/details/midtown-madness-sneak-preview-beta-and-sales-avi.

1588

Retail release.

1532

Released as NET DEMO (Trial) and VW DEMO.
Very similar to 1589, despite the lower build number (contains EditMode, hardcoded tuning, etc).

1589

Released 3 times. Commonly known as XP Patch or MS Zone Patch.
Has a few interesting changes, but not good for modding (no debug symbols, no exception handling, hardcoded localization, hardcoded tuning).

Vehicle Creation Kit

Compiled in debug mode (with optimisations disabled), though no debug symbols. Good for research.

Debug Symbols (Linker Map)

There are 4 known linker maps: 1427, 1560 Debug, 1560 Release, 1588 Release, 1589 Debug Trial.
Comparisons can be found here.

Disassembly

The game has been fully disassembled into game.asm, making it much easier to replace symbols and patch functions.

After replacing any symbols, you should run tools/asm.py. This analyzes both the C++ and ASM code, performing tasks such as:

ARTS_IMPORT

Currently does nothing, apart from signaling that a function is not yet implemented.

ARTS_EXPORT

Marks the function as dllexport, to force the compiler to generate a definition for it.

Open1560.exp (generated from an empty .def file) is used to disable actually exporting any functions from the exe.

If replacing a global variable which was not trivially constructible and destructible, make sure to also remove the original static initializer.

IDA

Offset (user-defined) - Ctrl+R

Fix incorrect global offsets

Offset (struct) - T

Fix virtual call types

Offset (struct) - Select + T

Fix incorrect struct offsets

Notes/Trivia

Retail Releases

Gold

Name Hash Length
midtown.exe 2E4DAB549C8B789DF30BF1AA4DE4DC74234E0BA0 1972736

English

Name Hash Length
audio.ar 4754F78BD6E537C822E533526882C9360AFA453F 54821984
core.ar 4058AC179CA888B0BC86F0A0394C70E99FDF56C2 91404016
mmlang.dll 471D7137DAC14AC12DAB89E0784FCB6CCFDE9C55 49152
ui.ar B7CC8EA982C643635CA1D842BD16D740D2678314 19891168

German

Name Hash Length
audio.ar 3B2A3DFFD6079C88FA003B138D044BA22CEEA0E3 64175024
core.ar 4058AC179CA888B0BC86F0A0394C70E99FDF56C2 91404016
mmlang.dll F0058F3C63B03B6F76A3F6A1622C2010028C3012 52224
ui.ar 6687A23D1FD0867DE532AB3309E9A9AF621AA889 21073168

Japanese

Name Hash Length
audio.ar 5D8AE0E580058401BF644A993CE93B627113AEF8 50076688
core.ar 4058AC179CA888B0BC86F0A0394C70E99FDF56C2 91404016
mmlang.dll DE26AA2405BB5339985C6AC1881D4A51C6146C1D 49152
ui.ar 1165F55DCCE3466A28CEEF44DF3CBCCDBAF22E4E 17365728

Russian

Name Hash Length
audio.ar 573DABF7E72DE213C6E9E597ACA2ACD292C3027C 54821984
core.ar 4058AC179CA888B0BC86F0A0394C70E99FDF56C2 91404016
mmlang.dll 42C1DAE1EEC3DA83AFEC6639B4768F8DF4915003 48128
ui.ar 8496EE9D8CD2589DEB7714B5080117074337496D 19891168

Other Releases

Name Hash Length
midtown.pdf 5F0539663FFDDD454D1B270BCAD9CFEB6EC8F6FB 764584
midtown1_patch_aspac.exe B4B6AAAD9A4663C70B76EB954BF7DE052E149AD2 1290960
mm1xppat.exe 5676A24B9D43731D6C145E5B69D766EAEC0FEA8C 825432
mmdemo.exe 1A562B21BCD8E395422F313F73D187539A944476 27104528
mmpat.exe A9FA68B14D05108C8DB784D5009A033A43CE3856 2499568
mmvwdemo.exe 450669FAB7B965DA740DB45B9D480E3A70A580A0 24231936

mmdemo.exe

Name Hash Length
midtrial.ar 83D17588F78DC7A645DF5FC734E078A27E211874 85285616
midtrial.exe 8AC67A1035B2736C079B1B545DA77B2833EF5AD5 1990656

mmvwdemo.exe

Name Hash Length
midvwtrial.ar F265DD7597A0C9D3189016474C0819BD8D519638 77003488
midvwtrial.exe 975F7EB948A2CC7B5D755211C0246733BCB784C1 1991168

mmpat.exe

Name Hash Length
midtown.exe 12EF71BCF9A81E7E30576DED5859E2CC6B9727CF 239863
midtown.icd E1EF98215090A1517EF8527CB51E1A0AA71A618A 2005549

midtown1_patch_aspac.exe

Name Hash Length
midtown.exe 6A5356090489C3E715FB8A29334BB971B409D058 2005504

mm1xppat.exe

Name Hash Length
midtown.exe F9CFDDF30257DCE4C588C5F4F924FF6E7F9179EC 2005504

1560 / Sneak Preview Beta

Name Hash Length
audio.ar 7F38D809B6FEE8EB38020EF7A73AAB69EB89336D 55054704
core.ar 73C76EC9D1A3660CE437382E7D127F2244F4A4FA 89388112
midtown.exe 179F87605C61FE233064331E01854194F9BE91D9 1967616
midtown.icd 7A3D8C524EE5176A06EF5FEA49AA92C73A18A0F8 1964544
mmlang.dll BEFFEC30E72AE63EC2FD07DAC6374C719499DB76 49152
racetrack2.ar C58A094CBE789C08E52120099AB14240E2E309C3 1033584
test1560.exe 755C24140088FD479BAB040A216038A88A55DBAB 2782208
ui.ar A7B682DC63C869AA997B0D427B8AFE432A7D9727 18844304
vpdisco.ar 63FCCF9EC7871E6C32098FE53195A1845AE2D6D9 177776

1427 Beta

Name Hash Length
midtown.ar 302403895A39FB31FDED5CEBD798A9FCA0A4B1AA 156897280
midtown.exe D7FE4C77FB4707C5F302D778B2AB64849AEBEEF0 2655744

1386 Beta

Name Hash Length
midtown.ar 939C0D4E1B0DD8D154A238A04F24FC7275770866 136241408
midtown.exe 1EE0686BA9A9D5FAF230D8B2BB059F1CD4C3EF50 2583552

Script for dumping file info

Get-ChildItem | Foreach-Object { New-Object PSObject -Property @{ Name=$_.Name.ToLower(); Length=$_.Length; Hash=(Get-FileHash -Algorithm SHA1 $_.FullName).Hash } } | Format-Table -Auto

Old/Useful Links (Use Wayback Machine)