This top-down grid is the same city-block heat model as the 3D version, read from directly overhead. Each non-road cell is a building, a park, or a building with a green roof, laid out on fixed streets. Every frame, a cell's temperature is the day's ambient swing plus a heat term from how impervious its surface is, minus a cooling term contributed by nearby greenery — weighted by distance, so a closer or larger green patch cools a block more than a small distant one.
T(cell,t) = T_ambient(t) + heat·impervious(cell) − Σ cooling(green_i) / (1 + dist(cell,i)²)
impervious(building) = 1.0 (−0.5 if green roof) · impervious(road) = 0.7 · impervious(park) = 0.05
- Park coverage — fraction of blocks converted to parks; parks run near-ambient temperature and cool everything nearby.
- Green roof adoption — fraction of remaining buildings fitted with a vegetated roof; cuts that building's own heat and adds a smaller cooling radius.
- Tree canopy density — street trees scattered through non-building cells, each adding a small cooling and filtering contribution.
- Day cycle speed — ambient temperature swings from a cool night low to a hot midday peak regardless of your other settings, so the map is always live.
Air quality index rises with total green cover and falls with average impervious cover, visualized as drifting smog dots that thin out as the city greens up.