e41c90fe8d
Three things that were built and never connected, connected.
**The weather was already there.** `observe()` has always taken a
`WeatherObservation` and `main.ts` has always passed null, so the cloud,
precipitation, visibility and marine-layer paths in atmosphere.ts had never run
outside a test. The server already shipped NWS, met.no and Open-Meteo, all
configured off. What was actually missing was that a single TERA_ORIGIN_LAT/LNG
served one metro and lied to the other — so weather and traffic are per-region
now, derived from the city's own bounds, and the Bay Area gets its fog while
Long Beach gets its own sky. The route takes ?city= or a validated ?lat=&lng=
and refuses to become an open geocoding proxy for the planet.
**The heightfield moved to a Worker.** 2.3 s of blocked main thread at boot, and
another ~950 ms of point-in-polygon on top of it: the park mask is filled in the
worker now, and block placement samples four corners and only runs the exact
test on a cell that straddles an edge — 8 buildings differ out of 185,036.
createScene is async and takes a Stage as a consequence, and there is a
main-thread fallback because "clone it and it works" has no exception clause.
**Spaces is a chunk you fetch when you reach for the door**, not one everybody
downloads. Same for the godmode tools. The entry chunk is 722 kB rather than
772; three.js is most of what is left and splitting it is a different job.
**Godmode is an instrument panel now** rather than one slider: the date and the
season, not just the hour, so the Meeus moon and the sun's seasonal arc become
visible instead of merely correct; a weather override that says on screen when
it is lying; a frame-time and draw-call readout; and a pose editor that emits a
paste-ready Chapter block, which is the thing that makes adding New York cheap.
Two blockers the review caught:
- Every city switch leaked 8 GPU textures — one of them a 2048x2048 shadow map
— and ~10.5 shader programs, and deleteTexture had never been called once in
the app's lifetime. The renderer was being built per scene; it belongs to the
canvas, for the life of the page.
- An upstream fetch that threw rather than returning null skipped the cache
stamp, so the TTL — the only rate limit on outbound calls — collapsed to one
upstream request per inbound request, and the caller got a 500.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
130 lines
5.6 KiB
Plaintext
130 lines
5.6 KiB
Plaintext
Tera — the map view of Lumbridge Simulate
|
|
Copyright 2026 Lumbridge Corp.
|
|
|
|
This product includes software developed at Lumbridge Corp.
|
|
Licensed under the Apache License, Version 2.0 (see LICENSE).
|
|
|
|
|
|
ORIGIN AND ORIGINALITY
|
|
----------------------
|
|
|
|
Tera's city view was inspired by the interaction model of two prior works —
|
|
Levels.fyi Atlas, and Nutlope's NYC AI Atlas (https://github.com/Nutlope/
|
|
nyc-ai-atlas), which itself credits Levels.fyi. What was taken is the *idea*:
|
|
a left-hand chapter legend, animated camera flights into map areas, clickable
|
|
place labels, and ambient motion in the scene.
|
|
|
|
No code, geometry, or asset from either work is present here. Tera's renderer,
|
|
its terrain system, its block-lattice building placement, and every coordinate
|
|
in every city pack were written from scratch. The two projects do not even
|
|
share a subject: the NYC atlas renders hand-traced Manhattan on flat ground,
|
|
and Tera's premise is relief — a city you cannot read without its section.
|
|
|
|
Stating this plainly matters, because at the time of writing the NYC AI Atlas
|
|
repository carries no LICENSE file. Absent a licence grant, the default is that
|
|
no rights are given, so nothing from it could have been reused even had we
|
|
wanted to. Attribution here is courtesy toward a good idea, not a licence
|
|
obligation.
|
|
|
|
|
|
GEOGRAPHIC DATA
|
|
---------------
|
|
|
|
All geography in src/cities/ is original expression, traced by hand.
|
|
|
|
It is deliberately NOT derived from OpenStreetMap. OSM data — including
|
|
coordinates returned by Nominatim geocoding — is licensed under the Open
|
|
Database License (ODbL), whose share-alike terms would attach to any derivative
|
|
database and cannot be reconciled with the permissive licence above.
|
|
|
|
Where real elevation data is used in future, it will come from USGS/SRTM
|
|
sources, which are United States government works in the public domain.
|
|
|
|
Where addresses are geocoded to coordinates and those coordinates are then
|
|
served publicly, the geocoder is the US Census Geocoder
|
|
(geocoding.geo.census.gov), a United States government work in the public
|
|
domain. This is a licence requirement rather than a preference: publishing a
|
|
snapshot of OSM-derived coordinates is Public Use of a Derivative Database under
|
|
ODbL and carries share-alike obligations no matter where the rows are stored.
|
|
Commercial geocoders are not an escape either — Google, Mapbox and HERE all
|
|
restrict storing and redistributing the coordinates they return.
|
|
|
|
Every such row carries a provenance field, and rows whose provenance is not on
|
|
the non-ODbL allowlist are refused at publication time.
|
|
|
|
|
|
TRADEMARKS
|
|
----------
|
|
|
|
This repository contains no third-party logos, wordmarks, or brand assets.
|
|
|
|
Organisation logos displayed by applications built on Tera are fetched at
|
|
runtime and are never redistributed as part of this project. All trademarks,
|
|
service marks, and trade names are the property of their respective owners.
|
|
Any use is nominative — to identify the organisation referred to — and does not
|
|
imply affiliation with or endorsement by the trademark holder.
|
|
|
|
|
|
ARTISTIC OUTPUT (src/assets/)
|
|
-----------------------------
|
|
|
|
The material under src/assets/ is source code and is licensed under Apache 2.0
|
|
along with the rest of this repository. In addition, the copyright holders of
|
|
that material dedicate the artistic output it generates — meshes, geometry and
|
|
textures produced by running it — to the public domain under CC0 1.0.
|
|
|
|
This repository is therefore NOT uniformly Apache-2.0, and that is deliberate:
|
|
it means a mesh generated from this library can be used in another project
|
|
without carrying a NOTICE obligation into it. See src/assets/LICENSE-ART for the
|
|
dedication and CONTRIBUTING.md for the inbound grant that keeps it true.
|
|
|
|
|
|
THIRD-PARTY DEPENDENCIES
|
|
------------------------
|
|
|
|
three.js — MIT License — Copyright (c) 2010-2026 three.js authors
|
|
https://github.com/mrdoob/three.js
|
|
|
|
Build tooling (Vite, TypeScript, esbuild) is a development dependency only and
|
|
is not redistributed in built output.
|
|
|
|
|
|
AIRCRAFT DATA
|
|
-------------
|
|
|
|
The flight sources shipped in this repository are a simulator (original work)
|
|
and clients for open community ADS-B feeds. No commercial aviation data
|
|
provider's data is included or redistributed, and no client for a provider
|
|
whose terms prohibit such use is present.
|
|
|
|
No aircraft position is committed to this repository; the community feeds are
|
|
fetched at runtime by a deployment that has been configured to use one. Where
|
|
adsb.lol answers, the API attaches the credit line that feed asks for and the
|
|
browser displays it in the shortcuts card alongside the weather credits below.
|
|
|
|
|
|
WEATHER DATA
|
|
------------
|
|
|
|
No weather observation is committed to this repository either. The default
|
|
build observes nothing at all and models the sky locally, and the shipped
|
|
sources are all opt-in.
|
|
|
|
Two of them carry an attribution obligation, and it is met at runtime rather
|
|
than here, because which one applies is a property of the deployment and not of
|
|
the source:
|
|
|
|
- MET Norway (met.no) — CC BY 4.0
|
|
- Open-Meteo.com — CC BY 4.0
|
|
|
|
The API emits the credit line each of them asks for in the `attribution` array
|
|
on the weather body, and the browser displays whatever it is sent, for as long
|
|
as that source is what is on screen. See `server/src/weather/` for the strings
|
|
and `renderCredits` in `src/main.ts` for where they land. A deployment that
|
|
turns one of these on and strips the credit is the party in breach, not this
|
|
repository — but the plumbing to comply ships working, on purpose.
|
|
|
|
The US National Weather Service (api.weather.gov) is a United States government
|
|
work in the public domain and carries no such obligation, which is why it sends
|
|
no attribution array; claiming one would be inventing a licence term.
|