# How to play — and what works today

**Read this first: the game is not playable yet.** The port runs the real *Midtown Madness* executable and
reaches the Main Menu in the browser, but the menus do not yet react to the mouse. You cannot start a race
yet. Everything else on this page — what to bring, how to install, what you should see — describes the
current build honestly, not a finished game.

---

## What you have to bring

This site ships the **player** only. No part of *Midtown Madness* is included here and nothing is downloaded
from us: to run it, you supply two files from your own copy of the game.

1. **A disc image of your retail Midtown Madness CD.**
   - `.img` or `.bin` **plus its `.cue` sheet** (the sheet names the music tracks, so the in-game music can be
     extracted), or
   - a plain `.iso` (simpler, but it has no CD audio, so the game is silent).
2. **The patched program `midtown.exe`** from Microsoft's *Midtown Madness 1.2* update (build 1589). The copy
   on the disc is SafeDisc-protected and cannot run as it ships; the site cannot ship it either, because it is
   a game byte. You can get the update from Microsoft's own support/archive pages for the 1.2 patch.

Both files are read **inside your browser** and stored only in that browser's private storage (OPFS). Nothing
is uploaded, and the site never redistributes game data.

## Making a disc image

If you still have the CD and no image:

- **Windows:** insert the CD, then use a disc tool such as AnyBurn → “Copy disc to image file”, saved as
  `.iso`.
- **Mac:** Disk Utility → File → New Image → Image from the CD, format “DVD/CD master”, then rename the
  resulting `.cdr` to `.iso`.
- **Linux:** `dd if=/dev/sr0 of=midtown.iso bs=2048 status=progress`

No CD drive? A USB CD/DVD drive works. The image never leaves your computer: the page reads it in the
browser.

## Installing

1. Open the site in a **desktop** browser (see the requirements below). The page must be served with the
   cross-origin isolation headers (`Cross-Origin-Opener-Policy: same-origin`,
   `Cross-Origin-Embedder-Policy: require-corp`); the site's `_headers` file has them.
2. Press **Choose disc image** and pick your image (and the `.cue` sheet, if you have one), then press
   **Choose midtown.exe** and pick the patched program.
3. Wait for the unpack. The page writes the game files and the extracted music into the browser's private
   storage: about **600 MB**, under a minute in Chrome, Edge and Safari, about three minutes in Firefox. This
   happens once per browser.
4. Press **Play**.

To start over, press **Reinstall from disc image**, or clear the site's data in your browser.

## What to expect when you press Play

- The first time, the executable is **translated to WebAssembly in your browser** (about 19 MB of machine
  code, a few seconds). The translation is cached; later starts reuse it. The first start needs about
  **3 GB of free memory** while it translates, and the game itself about **2 GB** while it runs.
- The game boots: the loader runs, the audio starts, and the **Main Menu** appears. The engine log in the
  browser shows the front end is up (`loader:tick … scr=1`).
- **Then nothing responds to the mouse.** The menu widgets are not hit-tested yet, so you cannot select
  “Single Race”, cannot open the garage and cannot start a race. This is the current, known limitation.

The settings panel on the page replaces the game's own “detect hardware accelerator” first-run dialog: you can
pick the resolution, shadows, distance clipping and the key bindings there before you press Play.

## Controls

*Midtown Madness* is a mouse-driven game: **the menus are operated with the mouse**, and driving uses the
keyboard. The default key layout is the game's own (it is never changed behind your back; you can rebind
everything in Settings).

| Action | Key |
|---|---|
| Throttle (accelerate) | **↑** (Up arrow) |
| Brakes / reverse | **↓** (Down arrow) |
| Steer left / right | **←** / **→** (Left / Right arrow) |
| Handbrake | **Space** |
| Choose / accept / go back in the menus | Arrow keys, **Enter**, **Esc** |
| Show or hide the controls list | **F1** (or the “Controls” button in the game view) |

Note: **W, A, S and D are not the driving keys** in this game. They are *Wide Angle*, *Shift Up*,
*Next/Previous Waypoint* and *Dashboard*. A “Manual (W A S D)” preset exists in Settings, but it does not
change the fact that the arrow keys are the game's default driving keys.

Other things the page adds:

- **Mouse camera control** is on by default: click the game to capture the mouse and look around; the mouse
  wheel switches character. Both can be switched off in Settings.
- **Fullscreen**: the button at the top right of the game view. In Chrome and Edge, hold `Esc` to leave
  fullscreen; browsers keep `Esc` for themselves, so Settings can assign another key to act as `Esc` in the
  game.
- **Gamepads**: controllers are supported through the browser's Gamepad API. Players 2–4 join in the order
  they are connected.
- **Saves** live only in this browser. Use **Back up saves** to download them (a ZIP) and **Restore saves…**
  to put them back; the restore also accepts the profile files of a Windows installation (`players.dir`,
  `player0.sav`, `player0.cfg`).

## What does not work yet

- **The menus do not react to the mouse.** The port reaches the Main Menu, but the click chain is
  incomplete, so no menu item can be selected and no race can be started.
- **No race, therefore no driving** — the garage, the car list, the race setup and the in-race HUD are
  reached only through the menus.
- **The intro movie is skipped.** `LOGOS.AVI` is Indeo video (IV50); the port reports it as finished instead
  of decoding it, so the game starts at the menu.
- **Multiplayer is not implemented.** DirectPlay is stubbed; the network menu reports that there is no
  connection available. The project is single-player only.
- **A plain `.iso` has no music**, because the CD audio lives in the disc's audio tracks.

## Requirements

- A current **desktop** browser: Chrome, Edge, Firefox or Safari. The page needs cross-origin isolation
  (the site sends the headers; a local file server must be configured to send them too).
- About **600 MB** of free space for the game in the browser's private storage (most of it the music), and
  free memory for the game (about 2 GB) and, on the first start, for the translation (about 3 GB).
- A normal (not private) window: private windows discard the installed game when they close.

## Credits

*Midtown Madness* was developed by **Angel Studios** and published by **Microsoft Corporation**,
copyright 1999 Microsoft Corporation. This is an unofficial, non-commercial fan project, not affiliated with,
authorized or endorsed by Microsoft or Angel Studios. The port's own code is MIT licensed; the third-party
components keep their own licences — see `licenses.html` and `legal/` in this folder.

## More

- `README.md` in this folder — what the shipped folder contains, and the credits.
- `legal/game-notice.txt` — the game's copyright notice.
- `legal/project-notice.txt` — what this project is, and where the code comes from.
- `legal/third-party.txt` — the third-party notices.
