BALISTIC v6.0 — NASA SRTM Terrain Masking
The biggest update yet. Blast zones are no longer circles —
they're now physically accurate polygons blocked by real terrain.
What changed
Previous versions used random noise + OSM building density to
generate "irregular" zones. Looked nice, but wasn't physically
meaningful. Mountains didn't block anything.
v6.0 integrates NASA SRTM elevation data (90m resolution,
global coverage) with a horizon scan algorithm:
For each of 72 ray directions:
- Sample terrain elevation every ~400m along the ray
- Track the "horizon angle" seen from the blast point
- When terrain drops behind a ridge → shadow zone starts
- Clip the blast radius at that distance
Result: zones expand freely through valleys, contract against
mountain faces.
Three test cases
Islamabad, Pakistan
The city sits at the foot of Margalla Hills. North-west zones
are cut hard by the ridge. South-east over the flat Indus plain
— full radius, nothing blocking.
Red Rock Canyon, Las Vegas
Impact point in the canyon. West zones cut by canyon walls.
East toward the city — open desert, full radius.
The asymmetry is dramatic.

Jerusalem
Impact on the ridge (535m). East toward the Judean Desert —
zones extend far through the open valley. West toward the
Judean Hills — clipped.
Tech
-
srtm_module.py— downloads tiles from srtm.kurviger.de on first shot, caches locally - ~5700 tiles, full world 60°S–60°N offline
- 72-ray horizon scan per shot, ~35 samples per ray
- Fallback to OSM Overpass density if SRTM unavailable
Also in v6.0
- Fixed ballistic model for ICBM/IRBM — Sarmat 9000km now gives correct 29.9min flight time and 1080km apogee (was stuck at hardcoded values before)
- Corrected fallout polygon geometry — wind-aligned ellipse was broken due to wrong azimuth→lat/lon conversion
- weapons_db.json — all 195 weapon systems externalized
Stack
Python/Flask + C#/.NET 10 + Redis Streams + Leaflet.js +
CesiumJS + NASA SRTM


Top comments (0)