# Skybound landmark library

Open `library.html` on the same static web server as the game. Search the collection, filter by city or building category, select a model, and drag/zoom its preview. The gallery and the flight game use the same model factory.

## Contents

- 94 reusable building recipes: national and regional food/store brands, civic and neighborhood types, and 15 city landmarks.
- 23 mapped park models, with downloaded boundaries, inner rings, paths, water areas, sports pitches, gardens, and playground areas where OpenStreetMap supplies them.
- Named-place inventories for Seattle/Eastside, San Francisco, and Salt Lake City. These are map observations, not a claim that every business is currently operating or that every branch has the pictured facade.
- A compact Seattle-area index used by the current Redmond and Maple Valley flight maps. San Francisco and Salt Lake City assets and inventories are available in the catalog; this change does not add terrain or flight coverage for those cities.

## Integration and startup

`landmark-recipes.js` is the persistent recipe registry. `landmark-library.js` exports `matchLandmark(site)`, `makeLandmark(siteOrId)`, `makeMappedPark(park, options)`, and `libraryStats()`.

Model geometry is built once per used building recipe, merged with vertex colors, and reused through independent scene-object clones. Most buildings have one colored mesh plus one or two sign meshes. Destroying/hiding a placed building does not hide another copy. Startup uses local modules only; it makes no Overpass, geocoder, remote-photo, or image-generation requests. The gallery loads all three inventories; the game loads only the smaller Seattle runtime index.

Matching uses normalized exact brand/name aliases before a generic building-kind fallback. Unknown shops and gas stations remain generic rather than receiving an unrelated chain's identity. Real locations come from the inventory; available regions filter those locations to their terrain bounds. Repeated records within a small proximity are deduplicated for placement. Model bounds drive the existing ground-target hit volumes.

Parks use local east/south meters, converted to the game's 12.5 meters per unit. Boundary rings and holes are retained; paths are filtered to the park interior. Actual map terrain supplies vertex elevation in flight. Preview parks are flat. Paths and building silhouettes are exaggerated for readability; these models are not surveys or photogrammetric replicas. Gas Works includes a stylized industrial-tower accent.

## Data sources and geographic scope

Downloaded 2026-09-05 from [OpenStreetMap](https://www.openstreetmap.org/copyright) via [Overpass](https://overpass-api.de/api/interpreter); selected multipolygon relations were completed with the [OSM API](https://wiki.openstreetmap.org/wiki/API_v0.6). OSM-derived data is attributed to OpenStreetMap contributors and licensed under ODbL 1.0. Each place and park retains its OSM object type/id, with Wikidata/Commons identifiers when present. `landmark-inventory.json` records counts and common types.

Bounding boxes (south, west, north, east):

- Seattle/Eastside: 47.28, -122.45, 47.82, -121.70.
- San Francisco: 37.70, -122.52, 37.82, -122.35.
- Salt Lake City: 40.65, -112.05, 40.85, -111.78.

Mapped parks: Volunteer Park, Albert Anderson Memorial Park, Cal Anderson Park, Gas Works Park, Green Lake Park, Marymoor Park; Mission Dolores Park, Golden Gate Park, Alamo Square, Presidio of San Francisco; Liberty Park, Sugar House Park, Pioneer Park. Availability of individual amenities depends on OSM coverage. Inventories include some named amenities and attractions that are not themselves buildings; counts are named features, not building counts.

## Visual reference research

The models are original procedural illustrations. Reference photos informed characteristic shapes and palettes; photos are not included as game textures. Additional chain designs are stylized family variants, not independently photo-verified branch reconstructions.

- [McDonald's exterior reference](https://www.allianceglobalinc.com/subsidiaries/golden-arches-development-corporation): large golden arches, glass frontage, horizontal trim. This reference illustrates a chain design, not a specific local branch.
- [Safeway store reference](https://local.safeway.com/safeway/wa/port-townsend/442-w-sims-way.html): pale wide frontage, red sign, entrance produce displays.
- [Seattle architectural reference montage](https://commons.wikimedia.org/wiki/File:Seattle_Collage_White.jpg): Space Needle support/saucer silhouette, angular Central Library, Public Market sign.
- [Ferry Building exterior](https://abc7news.com/post/sf-job-fair-san-francisco-ferry-building-sfo-westin-st-francis/13115464/): elongated facade and central clock tower.
- [Temple Square aerial reference](https://www.skylinescenes.com/products/temple-square-salt-lake-city-v33647): six temple spires and oval Tabernacle roof.
- [Salt Lake City library aerial](https://bowersresidences.com/neighborhood): curved wall, glazed volume, terrace and planted roof.
- [Gas Works Park aerial](https://en.wikipedia.org/wiki/Gas_Works_Park): industrial structures, shoreline and walking-path context.

`library-source/visual-references.html` retains the external reference board used during development. It is research material, not a runtime dependency. Brand names identify depicted places; no endorsement is implied.

## Refresh and deployment

Run `python3 library-source/download.py` to cache the three OSM inventories; existing downloads are reused. Run `python3 library-source/build-catalog.py` and then `python3 library-source/build-places.py` to regenerate recipes, inventories, runtime indexes, and park layouts. Raw research inputs and scripts remain in `library-source/` outside the flat web bundle. Failed layout requests are explicitly marked and should be retried before declaring a complete refresh.

Deploy all runtime `.js`, `.css`, `.html`, imagery, attribution/documentation, and inventory files together at one directory level. `deploy/` contains the synced flat package. Do not place the new JavaScript files in a nested asset directory without updating imports.

## Eastside and Maple Valley demos

The Seattle inventory now extends east through Sammamish, Issaquah, Snoqualmie, and North Bend. See `eastside-coverage.json` for bounds and approximate-area counts. This extends building/landmark inventory coverage; playable terrain remains Redmond and Maple Valley. Maple Valley has all 16 aerial tiles, local elevation, roads, and building footprints.

Additional mapped parks include Lake Wilderness Park, Lake Wilderness Arboretum, Maple Valley Summit Park, Ravensdale Park, Juanita Beach and Juanita Bay Parks, Idylwood Park, Pine Lake Park, Beaver Lake Park, and Issaquah Summit Park. Nearby parts of Idylwood Park are combined; separate parks sharing a name retain unique OSM-based asset IDs.

Open `?region=maple&demo=maple-valley` for a Four Corners start that skips automatic geolocation. This explicit demo link preserves the ordinary Redmond fallback on the main URL. The bundled Barlow Condensed and DM Sans fonts also eliminate the external font request; their OFL licenses are included.

For an older inventory cache, run `python3 library-source/extend-eastside.py` before `python3 library-source/build-places.py`.

## Prebuilt civic assets

`civic-prefabs.js` stores 11 ready-made 3D templates with embedded sign textures: police, fire station, city hall, library, school, hospital/clinic, post office, courthouse, community center, museum, and sports center. The model library loads these before play and clones their shared geometry for each mapped location. No model generation service or remote textures are used. These are reusable stylized building types, not exact architectural replicas of each municipal building.

Typed civic locations are included in the compact runtime indexes for all three regions. To refresh the saved geometry after editing its design, open `library-source/bake-civic.html`, download the rebuilt module, replace the root `civic-prefabs.js`, and sync deploy.
