Access denied.

'; return; } $res = isset($_GET['res']) && ctype_digit((string)$_GET['res']) ? (int)$_GET['res'] : Heatmap::DEFAULT_RES; $days = isset($_GET['days']) && ctype_digit((string)$_GET['days']) ? (int)$_GET['days'] : Heatmap::DEFAULT_INACTIVE_DAYS; $data = Heatmap::grid(['res' => $res, 'inactive_days' => $days]); $tribeNames = Heatmap::tribeNames(); // Compact payload for the client: [cx,cy,villages,inactive,attacks,pop,dom,x0,y0,x1,y1] $payload = []; foreach ($data['cells'] as $c) { $payload[] = [$c['cx'], $c['cy'], $c['villages'], $c['inactive'], $c['attacks'], $c['pop'], $c['dom'], $c['x0'], $c['y0'], $c['x1'], $c['y1']]; } $js = [ 'res' => $data['res'], 'max' => $data['max'], 'cells' => $payload, 'tribeNames' => $tribeNames, ]; ?>

World Map Heatmap

Density overlays on the world grid to help with starting balance: where villages cluster, which tribes dominate a region, where inactive players sit (dead zones / good spawn spots), and where attacks are currently landing. North (+y) is up.

Summary

Player villages
Players
Inactive villages
Attacks in flight
Map × radius, × grid (≈ tiles/cell).

Legend

Tribe totals

'#dc2626',2=>'#2563eb',3=>'#16a34a',6=>'#a16207',7=>'#d97706',8=>'#7c3aed',9=>'#0891b2']; if ($sum > 0): ?>
$n): if ($n<=0) continue; ?>
$n): if ($n<=0) continue; ?>
No player villages found.