# Legacy City Data and Helpers This document describes how city data is defined and accessed in the legacy engine. References include `legacy/hwe/sammo/CityConstBase.php`, `legacy/hwe/sammo/CityInitialDetail.php`, and `legacy/hwe/sammo/CityHelper.php`. ## City Constants (CityConst) `CityConstBase` defines default city data and lookup helpers: - `CityConstBase::$initCity` includes: - id, name, level, population, agri/comm/secu/def/wall, region, coordinates, and path connections. - Region and level maps convert labels to numeric codes. - `CityConstBase::byID()` and `byName()` return `CityInitialDetail` objects. During scenario build, the engine generates `d_setting/CityConst.php` from the scenario map file, replacing or extending these defaults. ## CityInitialDetail `CityInitialDetail` is a plain data object containing the initial static attributes for each city: - `id`, `name`, `level`, `population` - `agriculture`, `commerce`, `security`, `defence`, `wall` - `region`, `posX`, `posY`, `path` (adjacent city ids) ## CityHelper Cache `CityHelper` caches live DB city rows for fast lookup: - `getAllCities()` returns a map keyed by city id. - `getAllNationCities($nationID)` returns all cities for a nation. - `getCityByName()` resolves a name to a DB row (with a warning if missing). Cache invalidation is manual via `CityHelper::flushCache()`. ## Path Connectivity City connectivity (used for supply and movement) is defined by the `path` list in `CityConst` and referenced by systems like `UpdateCitySupply` to traverse same-nation city graphs. ## Open Questions / Follow-ups - Scenario-specific map files (`legacy/hwe/scenario/map/*.php`) override city data; document per-map deltas when needed.