Every block in the grid is a city cell: a building, a road, or a park, laid out on fixed streets. Dark asphalt, glass and concrete absorb solar energy through the day and re-radiate it as heat long after sunset — the classic urban heat island effect. Each cell's temperature is computed every frame as the day's ambient swing plus a local heat term driven by how impervious the surface is, minus a cooling term contributed by nearby greenery (parks, tree canopy, and vegetated "green" roofs), weighted by distance — closer, larger green patches cool 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 city blocks converted to parks/green space; parks run near-ambient temperature and cool everything nearby through shading and evapotranspiration.
- Green roof adoption — fraction of remaining buildings fitted with a vegetated roof (biophilic design / LEED-style green building retrofits); it cuts that building's own heat contribution and adds a smaller cooling radius.
- Tree canopy density — street trees scattered through the non-building cells; each tree adds a small cooling and air-filtering contribution.
- Day cycle speed — how fast the sun moves; ambient temperature swings from a cool night low to a hot midday peak regardless of your other settings, so the heat map is always live, not static.
Air quality index rises with total green cover (parks, canopy, green roofs filter particulates and CO₂) and falls with average impervious cover — visualized as drifting haze particles that thin out as the city greens up. This mirrors why real eco-planning favors a mix of interventions: any one alone helps, but parks + green roofs + canopy together compound.