A WWII Pygame flight simulator and historical disaster recreation, inspired by the classic 1991 Hellcats Over the Pacific. Fly Pacific Theater combat missions, campaign sorties, and forensic simulations of historic aviation accidents — all in one physics engine.
- F6F-5 Hellcat — US Navy fleet defender; 6× .50 cal, HVAR rockets, bombs, torpedo
- F4U-1D Corsair — faster, higher VNE dive limit; 6× .50 cal, 8× HVAR, 2× 1,000 lb bombs
- SBD-5 Dauntless — carrier dive bomber; hold B for dive brakes, steep dive, release 1,500–3,000 ft AGL
- Boeing 747-200 — airliner physics for free flight and disaster scenarios
- Boeing 737-300 — narrow-body jet (Helios 522 scenario)
- Airbus A330-200 — wide-body jet with unreliable-airspeed simulation (AF447)
- A6M Zero — superior turn rate, historical AI dogfighting
- G4M Betty — bomber targets in scramble and strike missions
- Flight School — practice takeoff, flight, carrier landing
- Carrier Qual (SBD) — graded trap; earn LSO grade B or better
- Bomb Base — strike an enemy airfield and RTB
- Scramble — intercept inbound bomber strike
- Coral Sea — defend the task force (May 1942)
- Midway CAP — break the first wave over Midway (June 1942)
- Midway Dive — SBD dive bomb on the carrier Kaga (release window 1,500–3,000 ft), then RTB (June 1942)
- Divine Wind — kamikaze defense
- Flat Top — sink the enemy carrier
- Bomber Escort — protect B-17s to the target
- Torpedo Run — low-level convoy attack
- Night Strike — fuel depot raid under searchlights
Every trap is scored by the LSO: S (perfect), A, B (pass), C, F (bolter). Scoring factors: wire number, approach speed, sink rate, centerline, gear. The SBD uses a slower trap window (95–115 kts). Grades award bonus points and appear in your pilot dossier (P).
Hold B for dive brakes and enter a steep dive on the target. The HUD shows dive state (cruise → diving → pullout) and release altitude. Drop your 1,000 lb bomb between 1,500–3,000 ft AGL for a valid hit on Midway Dive.
Procedural background music: menu theme, combat tension, disaster drone. Per-airframe engine timbres (radial fighters, SBD, jet narrow/wide). Stings play on perfect traps and mission results. No external audio files required.
| Key | Action |
|---|---|
| N | Toggle background music |
| 9 / 0 | Music volume down / up |
| 7 / 8 | SFX volume down / up |
- TWA Flight 800 (1996) — center fuel tank explosion
- Pan Am Flight 103 (1988) — Lockerbie bomb detonation
- JAL Flight 123 (1985) — hydraulic failure; engines still work
- Helios Flight 522 (2005) — Boeing 737; hypoxia — descend below 10,000 ft to survive
- Air France Flight 447 (2009) — Airbus A330; pitot icing and unreliable airspeed
- Eastern Air Lines 401 (1972) — autopilot disconnect; watch the altimeter
- Campaign — linear mission progression with persistent aircraft state
- Pilot Dossier — rank, score, and mission awards (P in flight)
- Satellite maps — pick any area on startup (Pearl Harbor, Midway, etc.)
- Deterministic replay — HOTP RNG reconstructed from the 1991 game binary
- Python 3.8+
- Install dependencies:
pip install -r requirements.txt| Menu | Missions | Midway Dive briefing |
|---|---|---|
![]() |
![]() |
![]() |
| Cockpit (Hellcat) | LSO grade S |
|---|---|
![]() |
![]() |
Regenerate with:
python scripts/capture_screenshots.pypython hellcat_sim.pyOr on Windows:
run_simulator.batModule entry point:
python -m hellcatsThe suite runs headlessly (no display or audio device required) and is exercised on every push by CI:
SDL_VIDEODRIVER=dummy SDL_AUDIODRIVER=dummy python -m unittest discover -s teststests/test_no_undefined_names.py statically scans the package for undefined
names (e.g. an import dropped during a refactor); tests/test_smoke_runtime.py
drives the rendering, AI, and campaign code paths that the unit tests don't.
| Key | Action |
|---|---|
| W/S | Pitch up/down |
| A/D | Roll left/right |
| Q/E | Rudder left/right |
| Shift/Ctrl | Throttle up/down |
| F | Flaps |
| G | Gear |
| B | Dive brakes (SBD only) |
| V | Cycle camera (Overhead / Cockpit / Chase) |
| +/- or ]/[ | Drag coefficient |
| R | Reset |
| M | Return to menu |
| N | Toggle music |
| 7/8 | SFX volume down/up |
| 9/0 | Music volume down/up |
| ESC | Menu / quit |
| Key | Action |
|---|---|
| 1 | Machine guns |
| 2 | HVAR rockets |
| 3 | 500 lb bomb |
| 4 | Mk 13 torpedo |
| Space | Fire selected weapon |
| L | Drop flare (night missions) |
| Key | Action |
|---|---|
| Tab | Switch mode (Free Flight / Missions / Disasters / Campaign) |
| A/D or ←/→ | Select item |
| Enter | Launch |
hellcat_sim.py # Entry point
hellcats/
bootstrap.py # Pygame init, fonts, map loading
hotp.py # Authentic 1991 RNG & aero tables
aircraft.py # Flight models
carrier_ops.py # LSO landing grades
missions.py # Combat missions & campaign
disasters.py # Historical accident scenarios
dive_bombing.py # SBD dive-bomb state machine & HUD
sound.py # Procedural SFX and music
weapons.py / targets.py / friendly.py
render_game.py # Cockpit, chase, HUD, instruments
game.py # Main loop
- Pygame for rendering and input
- Custom 3D projection for enemy aircraft
- ESRI World Imagery tiles downloaded on demand (cached in
~/.hellcat_tile_cache/) - Monolithic source was split into the
hellcats/package in 2026;hellcat_sim.pyremains the launcher
The simulator emphasizes authentic flight characteristics, Pacific Theater scenarios, and early-1990s flat-shaded presentation. Disaster scenarios are educational simulations — not entertainment glorifying tragedy — built to illustrate failure modes and emergency response windows.
"The Hellcat was the fighter that won the Pacific war in the air." — Naval Aviation Museum




