From 0d9032224d1c8aebe39c41142a0d13cd28c6ac8a Mon Sep 17 00:00:00 2001 From: Maurice Date: Sat, 25 Jul 2026 14:28:08 +0200 Subject: [PATCH] feat(login): bake TREK's coastlines into a dot grid for the sign-in screen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The login screen is unauthenticated, so it cannot call the Atlas endpoint the rest of the app uses for country geometry. This is that same admin-0 bundle, sampled along the coastlines onto a 300x150 grid and delta-encoded — 15 KB instead of a 28 MB fetch nobody is allowed to make yet. --- client/src/pages/login/worldDots.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 client/src/pages/login/worldDots.ts diff --git a/client/src/pages/login/worldDots.ts b/client/src/pages/login/worldDots.ts new file mode 100644 index 000000000..4e542e7d7 --- /dev/null +++ b/client/src/pages/login/worldDots.ts @@ -0,0 +1,23 @@ +// Generated from server/assets/atlas/admin0.geojson.gz — TREK's own Atlas bundle. +// The login screen is unauthenticated and cannot fetch Atlas, so the coastlines ship +// as a 300x150 dot grid: sorted cell indices, delta-encoded in base36. +// Regenerate with the script in the design notes if the bundle ever changes. + +export const WORLD_GRID_W = 300; +export const WORLD_GRID_H = 150; +export const WORLD_LAT_TOP = 80; +export const WORLD_LAT_BOT = -58; + +const PACKED = + '1u.1.1.1.1.1.6.1.1.2.1.1.2.1.1.1.1.1.1.4.1.10.1.1.1.n.1.1.1.1.1.1.1.1.1.1.3.1.j.1.6.1.e.1.b.1.1.1.3.1.1.3g.1.4.1.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.10.1.1.1.n.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.12.1.b.1.1.1.1.1.1.1.1.1.1.1.1.39.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.1.1.1.2.11.1.1.1.1.o.1.1.1.1.1.1.1.1.1.1.1.1l.5.1.1.1.1.1.1.1.32.1.1.1.1.1.1.1.1.1.1.2.1.1.2.1.3.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.4.1.1.1.1.1.1.10.1.1.1.1.q.1.1.1.1.2.1.1.1.y.1.1.1.b.5.1.5.1.3.1.1.1.1.1.1.1.1.1.w.21.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.6.1.1.1.1.1.1.1.1.1.v.1.1.1.t.1.6.1.r.1.1.1.1.1.1.1.1.1.a.1.1.8.1.1.1.1.1.1.1.4.1.1.1.1.1.1.i.2.1.1.1.1.1.4.1.23.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.g.1.1.t.1.1.1.1.1p.1.1.1.1.1.1.1.1.d.1.3.1.1.1.1.1.1.2.1.d.1.i.1.1.1.1.1.1.1.1.1.1.1.1.1.1z.1.1.1.1.1.1.1.1.1.1.1.1.1.8.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.i.1.s.1.1.1.v.1.t.1.1.1.1.1.f.1.2.1.1.1.1.i.1.1.1.1.2.g.1.1.1.1.1.1.1.3.1.1.1.1z.1.5.1.1.1.5.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.g.1.1.m.1.1.1.1.1.1.1.1p.1.1.1.1.a.1.2.1.1.2.1.1.1.1.1.1.1.f.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.5.1.3.1.1.1.24.1.4.1.1.1.1.1.1.1.1.1.1.1.1.2.1.1.2.1.1.1.1.1.2.2.1.1.1.2.1.1.1.1.1.g.1.1.m.1.1.1.1.1p.1.1.1.1.b.1.1.1.1.1.1.1.1.1.1.1.j.1.b.1.1.1.4.1.8.1.1.1.1.1.1.1.1.1.q.1.1.h.1.p.1.1.1.1.1.1.1.1.1.5.1.2.1.3.1.1.1.1.1.1.3.1.1.1.1.1.2.1.1.1.1.1.1.1.1.d.1.1.1.1.j.1.1.1.1.1.1.1o.1.1.1.1.9.1.1.2.1.1.1.1.1.1.1.1.1.1.11.1.2.1.1.1.1.1.1.1.4.1.2.1.1.1.m.1.1.1.1.d.1.1.1.1.1.1.1.1.1.1.1.1.g.1.3.1.3.1.1.1.1.1.1.6.1.1.1.3.1.2.1.2.1.1.1.1.2.2.1.3.1.1.1.1.1.1.b.1.1.1.1.h.1.1.1.1.1.1.1.a.1.n.1.1.1.1.1.1.1.1.1.i.1.1.1.1.1.1.6.5.1.2.1.1.3.1.12.1.1.5.b.1.1.1.1.1.1.1.1.1.e.1.f.1.1.1.a.1.1.1.1.1.1.1.3.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.4.3.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.4.1.1.1.1.a.1.1.1.1.i.1.1.1.1.1.x.1.1.1.1.1.1.1.1.1.1.1.1.1.1.c.1.7.1.1.1.1.1.2.1.4.1.7.1.1r.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.a.1.1.1.i.2.1.1.1.1.3.4.1.1.3.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.2.1.2.1.1.1.1.4.1.1.b.1.1.1.e.1.2.1.1.1.1.w.1.1.1.1.1.1.1.1.1.1.2.1.3.1.1.1.1.4.1.1.1.2.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.3.1.1.1.1.1x.1.5.1.1.1.6.1.1.1.1.1.1.7.1.1.j.l.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.3.1.2.1.1.1.1.1.4.1.1.1.1.8.1.1.1.e.1.1.1.1.y.1.1.1.1.1.1.2.1.4.1.7.1.1.1.2.1.1.1.1.1.1.1.1.1.4.7.1.3.1.1.2.1.2c.1.4.1.1.1.6.1.1.1.g.r.1.1.8.1.7.1.1.1.1.1.3.1.1.2.1.3.1.2.1.1.1.6.1.1.1.d.1.12.1.1.1.6.5.2.1.1.1.4.1.1.1.1.1.1.i.1.1.1.1.4.2c.1.1.3.1.1.1.1.1.1.1.1.1.1.1.1.g.s.1.d.1.1.1.1.1.1.1.7.1.4.1.1.1.1.1.1.6.1.1.1.9.1.1.1.1.8.1.1.1.1.1.1.1.1.1.l.1.1.1.6.1.1.4.1.2.1.1.1.1.1.1.1.1.1.l.1.1.1.2h.1.1.1.1.1.2.1.1.2.1.1.3.1.g.17.1.1.1.1.1.1.4.1.1.1.5.1.1.1.1.1.7.1.1.1.7.1.1.1.1.a.1.1.1.1.4.1.k.1.1.1.1.5.1.2.1.3.4.1.1.1.1.1.34.1.1.1.1.5.1.1.5.1.1.1.1.1.g.13.1.1.2.1.1.1.2.1.1.1.1.1.1.1.1.1.1.4.1.1.a.1.1.7.1.f.1.3.1.1.1.j.1.1.1.1.6.1.1.1.4.1.3.1.1.1.1.1.34.1.1.1.9.1.1.4.1.1.1.g.15.1.1.2.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.1.1.b.1.6.1.1.g.1.1.1.1.j.1.1.1.1.1.4.1.1.1.1.1.5.1.1.5.39.1.d.1.j.14.1.1.6.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.c.1.5.1.s.1.a.1.1.1.3.4.1.2.8.1.2z.2.1.1.8.1.1.1.1.c.1.1.b.1.1.1.1.4.13.1.b.1.1.4.1.1.1.2.1.1.c.1.1.1.1.1.1.1.t.9.1.1.1.4.4.3.1.5.1.1.2w.1.1.1.1.1.1.1.6.1.1.1.b.4.1.1.1.1.1.7.1.1.1.1.1.1.1.1.1.1.1.1.11.d.1.6.1.1.2.1.d.1.1.1.1.1.y.1.4.1.1.5.4.1.1.1.1.1.1.1.1.1.1.2w.1.3.1.1.1.1.1.1.1.1.1.1.1.i.1.1.1.1.6.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.x.c.2.6.1.3.1.1.f.1.1.x.1.1.5.1.3.1.1.4.1.1.1.1.1.1.1.1.1.1.1.2l.1.1.1.1.1.1.1.1.1.1.4.1.1.1.1.1.1.3.o.1.1.1.1.2.1.1.1.a.1.1.1.1.1.w.1.c.1.6.1.1.1.1.1.1.1.1a.1.1.1.7.1.1.1.1.1.4.1.1.1.2.1.1.2.1.2l.1.1.3.3.1.1.1.1.3.1.2.1.1.w.1.1.1.1.1.d.1.1.1.1.w.1.1.9.2.1.6.1.4.1.18.1.1.1.1.1.1.7.1.2.1.1.3.1.1.1.1.1.1.1.1.1.1.2k.1.e.1.3.1.n.1.7.1.1.1.1.1.1.1.e.1.1.1.1.v.1.1.1.1.7.1.2.c.1.18.1.1.2.1.8.1.1.1.1.3.1.1.2.1.1.1.2.1.2j.1.e.1.5.t.1.1.1.1.2.h.1.1.1.1.1.y.1.1.5.1.1.1.c.1.19.1.1.1.1.8.1.1.1.1.1.1.1.4.1.1.1.1.1.1.1.1.2g.1.f.5.1.r.1.1.1.1.1.l.1.1.1.1.10.1.1.1.2.1.1.e.1.1.1.14.1.1.1.1.1.1.1.7.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.3.t.1.1.1.1.1.1h.1.1.f.4.1.3.1.1.m.1.1.1.1.o.1.1.1.1.12.2.1.g.1.1.1.12.1.1.1.1.1.1.2.1.5.1.1.1.1.1.1.1.1.2.1.1.1.1.1.1.4.1.o.1.1.1.1.4.1.1.1.1.1.1.1d.1.1.1.2.b.3.1.1.5.j.1.1.1.s.1.1.1.1.12.1.1.1.f.1.2.1.12.1.2.1.1.1.2.1.1.2.1.1.1.1.1.3.1.7.6.1.1.n.1.9.1.3.1.y.1.1.1.1.1.9.1.1.1.1.1.1.a.2.1.b.1.7.1.1.1.1.1.1.1.w.1.1.1.1.11.1.1.1.j.1.11.1.1.1.1.1.1.1.2.1.2.1.1.7.7.1.1.1.3.1.1.1.e.1.6.1.f.g.1.1.g.1.4.1.c.1.1.a.2.c.1.2.1.1.1.2.1.1.14.1.1.1.11.1.g.1.1.1.12.1.1.2.1.1.1.1.1.1.1.1.1.1.6.1.7.1.2.1.1.1.3.1.b.1.1.1.1.1.1.1.1.1.1.1.e.1.1.1.1.7.5.1.1.1.f.6.b.1.1.1.a.1.1.h.1.18.1.1.1.1.1b.1.1.1.1.1.1.1.1.1.15.1.1.1.1.1.1.1.1.1.1.1.5.1.1.1.1.1.4.1.9.1.1.1.7.1.5.1.2.1.1.1.f.1.1.1.1.4.1.1.1.1.1.1.1.3.1.1.1.1.1.5.1.1.2.1.6.b.1.1.1.9.1.1t.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.l.1.1.1.1.1.1.3.1.1.1.1.16.1.1.1.4.1.1.4.1.1.2.1.1.1.1.1.d.1.5.1.1.u.1.1.1.1.6.1.8.1.1.1.1.1.2.1.1.7.1.1.9.1.1.1.1.8.1v.1.1.1.n.1.1.1.1.1.1.e.1.1.1.1.1.4.1.3.1.1.13.1.1.1.8.4.1.1.1.1.1.1.1.1.1.2.1.1.9.1.5.1.w.1.1.m.1.2.a.2.1.4.1.1.1.1.1.7.1.1w.1.1.p.2.2.1.d.1.1.1.1.1.2.1.1.1.1.1.1.1.1.14.1.1.7.1.1.1.1.1.3.1.1.3.1.1.1.1.1.1.7.1.1.6.1.s.1.2.2.1.1.k.1.1.1.1.9.1.1.1.4.2.1.8.1.1x.1.w.1.a.1.1.1.2.1.1.1.1.1.3.1.1.1.16.1.5.1.1.1.1.1.1.1.1.1.1.3.1.5.1.1.1.1.1.1.1.1.1.8.1.1.1.1.o.1.1.1.4.l.1.1.1.c.3.1.2.1.1.5.1.1.1z.x.1.9.1.2.1.1.1.1.1.1.1.1c.1.5.1.1.1.3.1.1.1.1.1.1.1.6.1.1.1.1.1.1.1.1.1.7.1.2.1.4.1.1.i.1.7.k.1.d.1.1.2.1.3.1.1.3.1.1.1.1z.1.y.5.1.1.1.1.1.1.1.1.1.1.1.1.1.1d.1.6.2.3.1.1.1.1.1.1.1.1.5.1.3.1.1.1.1.1.6.1.2.1.4.1.2.1.g.1.1.7.1.1.1.e.1.1.1.d.1.1.2.1.4.1.1.1.1.1.1.21.z.3.1.1.5.1.1.1.1.1.4.17.1.1.1.1.1.5.1.1.1.1.1.2.1.1.1.1.1.1.2.1.1.1.1.1.9.1.1.4.1.2.1.4.4.1.1.1.1.c.1.b.1.d.g.1.3.5.2.1.1.1.22.z.2.1.7.4.1b.1.3.1.1.1.1.1.1.1.1.1.2.1.1.2.2.1.1.1.1.1.1.3.1.a.1.1.1.1.1.1.3.1.3.2.1.5.4.1.1.1.1.1.1.1.1.1.c.1.1.1.1.1.7.1.f.1.1.1.1.1.4.1.2.1.1.23.y.1.1.1.7.1.1f.1.1.7.1.5.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.3.1.1.1.1.4.1.2.1.1.1.3.1.1.1.1.1.1.1.4.1.2.1.1.1.1.4.1.i.1.1.1.1.1.1.f.1.1.1.7.1.1.1.1.25.16.1.1.1.1f.2.6.1.1.4.1.1.2.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.1.1.1.1.1.1.1.2.2.1.1.2.1.1.4.1.1.1.1.1.2.1.1.1.z.1.3.1.1.1.9.1.27.1.14.1.10.i.2.5.1.2.1.3.1.1.3.1.1.1.1.1.1.1.1.1.1.1.1.1.c.1.1.3.1.1.1.7.1.4.1.1.1.1.1.1.1.10.1.1.1.1.1.1.1.1.9.1.28.13.1.1.10.2.1.f.1.1.5.1.1.1.4.1.1.4.1.1.2.1.1.1.1.1.1.e.1.1.1.1.1.3.8.1.2.1.1.1.1.1.1.10.1.1.1.1.1.1.1.1.1.a.1.28.1.11.1.1.13.1.1.1.d.1.1.5.1.9.1.1.1.1.3.1.1.1.1.1.1.e.3.1.4.1.1.1.1.5.1.1.1.2.1.2.1.z.1.2.3.1.1.1.1.7.1.1.1.29.12.1.15.1.d.1.1.4.1.6.1.1.1.1.1.1.1.5.1.1.1.1.1.1.a.1.1.1.1.3.1.1.2.1.3.1.4.1.1.1.1.1.1.1.1.1.10.1.1.1.3.1.2.1.5.1.1.2.29.1.11.1.16.f.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.6.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.5.1.1.5.1.3.3.3.1.1.1.1.10.1.1.3.1.2.3.2.1.1.2.1.2a.11.1.1l.1.1.1.1.1.1.6.1.1.1.2.1.7.1.1.1.1.3.1.1.1.1.4.3.1.c.1.1.1.6.4.1.1.1.x.5.1.1.1.2.1.1.1.1.2.1.1.2a.1.z.1.1m.3.1.8.2.1.a.1.1.5.1.1.1.1.3.1.3.1.c.8.1.2.1.1.1.1.1.w.1.5.1.1.1.1.1.1.1.1.1.1.1.1.2b.1.1.1.w.1.1l.1.1.4.8.2.1.k.1.1.1.1.4.1.c.8.1.2.4.1.x.1.4.1.2.1.1.1.1.1.1.2.2d.1.1.1.1.1.r.1.1.c.13.1.6.6.1.7.3.1.1.1.4.1.1.1.9.1.1.1.1.6.1.b.7.1.3.1.3.1.y.4.2.1.1.1.1.6.2e.1.1.1.1.1.3.1.l.1.d.19.1.4.1.1.1.8.1.1.3.1.3.3.1.1.1.3.1.2.1.1.1.1.1.1.5.b.1.5.1.4.1.3.y.1.1.6.1.1.2m.1.1.1.1.1.1.1.1.1.e.1.1.4.1n.5.1.a.1.5.1.1.1.4.2.1.1.1.1.1.1.1.1.1.3.1.4.1.b.4.1.5.1.3.1.1.x.1.7.1.7.2f.1.1.1.6.1.1.1.6.1.1.1.1.1.1.1.1.1.2.1n.1.2.1.1.b.1.7.1.4.6.1.1.1.1.1.4.1.2.1.1.1.9.1.2.1.1.5.1.5.1.1.1.u.1.1.6.1.2l.3.1.1.1.6.1.1.1.3.1.1.2.1.1.1.4.1.1.1.1g.3.2.1.1.1.1.1.d.c.6.1.1.1.1.6.1.1.1.1.1.1.8.1.1.1.7.6.1.2.1.7.1.1.1.k.1.1f.1g.1.1.1.1.8.1.1.1.1.b.1.1.1f.1.1.1.1.1.1.2.g.c.7.1.1.a.1.2.1.8.1.6.1.1.6.1.1.2.1.1.1.1.1.1.1.3.1.j.1.6.1.a.2e.1.1.1.1.1.8.1.1.c.2.1.1.1e.3.1.1.1.1.1.f.c.7.1.1.b.1.2.1.1.1.1.5.5.1.a.1.1.1.2.1.1.1.3.1.1.1.h.1.6.1.b.11.1e.1.1.1.1.8.1.1.c.1.1.1.1.1.1f.1.2.1.1.1.1.d.1.c.8.1.1.b.1.2.1.1.1.4.1.5.1.c.1.1.1.1.4.1.2.1.h.1.5.1.2.1.9.13.1d.1.1.1.1.8.1.d.1.1.1.1.1f.3.4.1.1.c.c.8.1.1.b.1.1.1.1.1.1.1.1.1.1.1.1.1.1.3.f.1.1.1.2.3.h.1.1.1.1.2.4.1.8.2h.1.1.2.1.7.d.1.2.1.1.1.1.1c.1.3.4.2.1.b.1.b.9.1.1.b.1.1.1.1.1.8.1.1.1.1.e.2.1.1.1.3.1.f.1.1.1.1.1.1.1.4.9.a.10.2.16.1.1.2.7.d.1.1.2.1.1.1.1c.3.1.4.3.1.b.1.1.1.1.1.6.9.2.1.a.1.2.1.1.1.1.7.1.1.f.1.1.1.1.1.3.1.5.7.2.1.2.1.1.1u.15.3.1.6.b.1.1.1.1.1.1.2.1.1.1b.3.5.4.1.8.1.1.2.1.2.1.5.6.2.1.1.2.b.1.1.1.3.8.1.2.d.1.1.1.1.5.2.1.1.1.1.5.1.1.1.3.1.1u.1.1.1.16.1.6.1.6.1.1.2.1.1.1.1.1.1.1.2.1.1.19.1.1.1.1.5.5.1.6.1.5.3.1.1.3.1.1.1.1.1.1.1.1.2.2.e.2.1.8.1.1.1.c.1.1.1.1.1.5.1.1.1.3.1.1.1.1.1.1.6.1x.1.16.7.5.1.2.7.1.1.1.1.1.1a.1.8.6.1.4.1.6.1.4.1.2.a.2.1.c.3.a.1.1.b.1.4.1.5.1.1.1.1.2.1.1.1.5.5.j.1e.1.10.5.7.1.4.3.5.1.2.1.1.1.1.1.1.1.18.9.6.1.2.1.8.5.1.1.a.3.1.a.1.2.1.c.a.1.6.1.3.1.1.1.2.1.1.1.1.1.1.8.1.j.1e.1.10.5.1.7.1.1.1.1.2.1.5.2.1.1.1.1.1.1.1.1.1.1.1.1.14.9.7.1.1.8.1.6.b.1.3.6.1.1.1.1.3.1.c.9.1.7.1.2.1.2.1.1.1.1.1.2.1.9.1.j.1.h.1u.9.1.1.6.1.2.1.1.1.7.1.1.1.1.1.1.1.1.1.1.1.1.1.1.12.9.8.9.7.c.1.2.1.1.3.1.3.2.1.1.d.8.1.9.2.1.2.1.1.1.1.1.2.1.8.1.1.k.12.1k.1.1.7.1.1.1.3.h.1.u.1.1.1.5.1.1.7.8.9.7.b.1.1.2.1.1.1.1.1.4.1.1.1.e.8.a.1.1.1.2.1.2.1.1.1.4.6.1.1.k.2o.1.1.1.1.1.1.1.1.1.1.1.1.1.i.1.u.1.1.5.1.1.1.1.2.3.8.8.1.7.b.2.1.2.8.h.1.5.1.1.a.1.1.1.1.4.1.1.1.1.9.1.1.j.1.2t.1.2.1.3.1.i.1.u.1.5.1.3.1.1.1.1.1.1.3.1.1.1.1.1.8.7.1.b.1.1.1.1.1.6.1.1.i.5.b.4.6.2.1.9.1.1.j.1.2u.1.1.1.1.1.1.1.1.i.10.1.1.2.1.7.1.2.4.7.7.c.1.1.1.1.1.4.1.1.k.5.b.4.1.3.1.1.1.1.1.9.1.1.1.1.h.k.2d.1.1.1.2.2.h.1.10.1.1.1.1.6.1.3.1.2.1.1.1.1.1.1.1.1.1.6.c.4.1.1.1.1.1.m.1.4.a.1.1.3.1.1.1.1.4.1.9.1.1.1.1.h.2z.1.2.1.1.8.1.1.1.5.1.11.1.1.1.1.1.1.3.1.5.1.1.4.1.3.1.6.8.1.2.1.4.1.1.1.5.1.1.1.h.4.a.1.4.1.1.1.1.3.1.1.9.1.1.1.1.1.11.2f.1.1.7.1.1.1.1.1.1.1.1.1.1.2.11.1.1.3.1.1.2.2.1.1.1.1.1.1.8.1.6.1.7.1.2.5.1.1.3.1.1.1.h.1.2.1.3.a.1.3.1.1.3.1.1.1.1.1.9.2.1.1.1.u.3.1.1.1.1.1w.j.1.1.7.1.1.1.3.1.1.1.1.1.1.12.1.4.1.1.1.2.1.1.1.2.1.8.1.5.1.1.1.1.2.1.1.1.1.1.1.5.1.1.1.1.1.3.h.1.1.2.2.1.a.5.1.3.1.1.1.1.1.8.1.1.1.1.1.1.x.3.1.2f.1.1.1.1.1.1.1.1.1.2.1.1.4.3.1.13.1.1.1.2.2.1.1.3.1.1.8.1.1.1.3.1.2.1.1.1.1.1.1.1.2.7.1.6.i.1.2.2.1.1.a.4.1.1.2.1.1.1.9.1.1.2.1.1.1.a.j.4.1.1.1.1.2h.1.1.1.1.1.1.3.1.9.1.12.1.2.1.1.4.3.1.1.8.1.1.3.1.3.1.7.1.8.1.1.3.1.i.3.1.1.1.1.a.4.1.1.3.1.1.9.1.4.1.1.1.j.e.1.2.1.2h.1.1.1.1.1.3.1.9.1.1.12.1.1.1.1.4.3.1.1.7.1.2.1.1.1.5.1.6.1.a.1.2.n.2.1.a.4.1.1.e.4.1.1.1.1.6.8.2.2.2.1.2.b.1.2.2i.1.2.5.1.1.7.2.1.11.1.1.1.1.4.3.1.1.1.4.1.1.3.9.7.1.9.1.1.1.j.6.1.1.9.1.4.1.1.c.1.1.2.1.1.1.1.1.6.d.7.9.2.n.1q.8.7.1.1.4.1.2.1.1.1.1.10.1.1.4.2.1.1.1.1.1.3.4.1.9.1.7.8.1.2.k.1.5.1.b.1.3.1.1.1.a.1.1.1.2.1.2.1.1.p.3.6.1.2.o.1x.8.6.1.1.1.2.1.1.10.1.1.1.1.1.1.1.5.1.1.1.5.3.1.1.1.1.1.1.1.1.1.4.1.6.1.1.2.1.k.1.i.1.1.2.2.4.5.1.1.2.1.5.1.4.i.8.5.r.1t.3.1.7.3.1.1.1.1.1.1.2.1.1.1.10.1.a.1.1.1.1.4.2.1.2.1.5.1.1.1.1.1.1.1.1.1.1.1.1.4.l.1.i.1.1.1.1.2.4.1.4.1.1.1.1.6.1.3m.8.1.2.4.2.2.1.1.1.1d.1.1.4.1.1.1.a.1.2.4.2.4.1.l.1.i.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.7.4.z.q.1t.1.7.1.1.2.1.3.2.1.1.1.1.1.1.1e.1.1.1.1.1.1.1.a.1.2.1.5.3.1.m.1.i.1.1.1.1.1.1.1.4.1.1.3.2.1.5.1.1.1.11.a.g.1s.1.1.6.1.1.1.1.1.4.1.1.6.1c.1.1.1.1.1.1.1.1.1.9.1.3.1.5.2.1.n.k.1.1.2.1.1.1.2.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.11.a.1y.1.9.2.1.1.4.1.2.1.c.1.1.1a.2.1.3.1.2.a.4.6.1.1.o.1.k.1.3.1.1.3.7.1.1.1.1.1.1.2.1.1.1.10.n.1k.1.1.7.1.4.1.3.1.f.1.1.1.1.1a.4.1.2.a.1.1.1.1.6.1.p.l.1.1.2.1.1.3.1.6.2.1.1.1.3.1.1.1.1.1.1.1.1.p.2.4.28.1.7.4.1.1.1.3.g.1.1.1.1.1.15.3.3.1.1.1.1.a.1.3.1.4.1.1b.1.1.3.1.1.2.1.5.1.2.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.3.2.1.3.l.1.b.23.1.2.1.3.1.1.1.g.1.3.1.1.1.1.15.1.1.1.1.2.a.1.1.4.1.1.2.1.1c.1.1.2.1.1.1.2.1.4.2.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.4.1.2.1.1.k.b.23.1.1.1.6.1.k.1.2.1.1.1.14.1.4.b.1.6.2.d.11.1.3.1.1.2.1.1.1.1.1.2.1.1.1.1.2.1.1.1.1.1.1.1.1.5.1.1.1.5.1.1.1.s.1.e.1p.1.1.6.1.r.1.4.10.1.1.1.1.b.1.6.1.1.c.1.11.1.1.2.1.7.1.3.1.1.1.3.2.1.1.1.1.1.1.4.2.1.1.3.1.1.1.1.4.12.1q.2.5.1.t.1.13.1.1.1.c.8.1.b.2.d.p.1.1.1.9.3.1.1.1.7.1.1.2.1.3.3.1.1.1.1.1.1.1.1.4.e.2e.1.6.v.14.1.1.1.b.8.r.r.1.1.1.1.1.1.1.6.1.1.1.1.7.1.1.2.1.2.4.1.1.1.1.3.1.h.1.2e.5.1.v.1.13.3.1.2.1.1.6.1.7.b.3.d.1.r.1.1.1.1.1.1.1.1.5.5.1.2.1.2.3.1.1.1.2.1.2.6.1.1.1.g.1.z.1e.1.4.1.v.1.h.m.1.3.1.1.2.6.1.7.1.1k.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.5.1.1.1.1.1.1.1.1.1.2.4.1.1.1.1.2.d.8.1.b.f.1.1e.5.v.14.1.7.5.1.1.1.1.5.6.4.1f.1.1.1.1.1.1.1.1.1.1.1.1.b.1.1.1.2.1.1.1.1.1.1.3.1.1.1.1.e.1.h.9.8.1.1e.1.4.1.1.3.1.o.1.14.1.7.5.4.1.4.1.5.1.3.1k.1.1.2.1.1.e.4.1.1.1.7.1.1.4.b.d.4.i.1f.6.1.1.1.1.o.16.7.1.1.1.2.4.1.4.1.d.1.14.d.1.1.6.1.1.3.5.5.1.1.1.1.6.1.3.1.o.b.1q.1.6.3.1.m.1.16.7.1.1.1.1.1.1.3.1.1.1.1.1.1.2.1.4.14.r.1.1.1.1.1.1.4.1.9.1.4.1.5.2q.6.4.1.1.j.1.16.1.7.1.3.1.1.3.1.5.3.1.3.1.13.m.6.1.1.1.1.1.4.1.1.j.9.6.3.1.27.6.6.1.i.17.8.5.1.3.1.1.4.6.1.1.1r.1.2.1.4.1.4.2.j.1.d.5.1.1.1.g.1.1.1.3.1i.1.5.7.i.17.8.7.1.1.1.1.4.6.2.1q.1.1.1.1.5.1.4.2.1.i.1.f.h.5.1.1.1.3.1.1i.1.4.7.i.16.1.8.6.1.3.1.4.4.1.1.2.1q.1.2.1.5.1.4.3.i.1.b.m.1.1.2.2.1.1.1.2.1j.1.3.8.1.g.s.e.9.5.1.1.1.1.1.1.3.1.3.1.1.3.8.1g.1.1.a.1.1.1.1.3.1.3.e.1.8.1.1.1.1.l.2.1.4.1.1.1.1.2.1i.1.2.9.1.f.16.1.1.1.1.1.1.3.1.1.2.1.4.2.1.1.1.3.1.5.8.1g.1.d.1.1.4.i.1.7.1.1.2.4.9.b.1.5.1.1.3.1i.1.1.a.e.1.16.1.5.1.1.1.1.1.1.1.5.3.6.4.1.1o.f.5.i.1.7.1.1.1.1.3.1.3.9.1.e.1.1.1l.1.1.6.1.1.1.e.1.17.7.4.6.2.1.6.4.1o.1.k.1.d.5.1.6.1.1.2.3.1.d.1.a.1.3.1m.1.1.5.1.2.f.9.1.y.1.6.4.1.5.1.1.7.4.7.1.4.19.1.1.1.m.1.c.1.2.2.1.a.3.d.h.2.1j.1.1.5.3.e.1.9.10.6.5.1.3.1.1.1.3.4.4.5.1.1.1c.1.1.q.1.c.1.1.1.f.e.f.1.2.1.1i.2.1.1.1.1.1.3.1.1.c.1a.5.1.6.1.1.1.3.3.1.2.1.3.1.1i.1.s.1.1.c.1.1.3.v.1.d.1i.2.1.2.2.5.9.1.1.1.1a.1.4.6.1.1.1.1.3.4.2.1.3.1j.1.t.1.d.1.1.2.x.2.1s.2.1.4.1.1.3.1.7.1.1.1c.1.4.6.4.3.7.3.1j.v.1.1t.2.3.19.2.7.1.3.6.1.1f.4.5.1.4.2.1.7.2.1.1i.1.w.1.36.2.8.1.2.1.4.1.1g.4.1.1.1.1.1.4.1.1.9.1.1.1j.1.w.1.2d.l.8.2.8.2.1.1.4.1h.4.1.1.7.1.1.1u.1.x.1h.t.v.1.1.1.8.1.1.1.1.4.1h.1.3.9.1.1.1v.x.35.2.b.1.5.1i.1.1.1.7.1.2.1.1v.1.w.p.2g.1.1.a.1.5.1.1i.1.1.1.6.1.1.1.1.1x.w.c.2t.1.1.9.1.1.4.1.1k.8.1.1.1.1y.w.o.2h.1.a.2.1.2.1.1.1k.1.8.1.1.1y.1.b.1.1.h.1.5.30.1.a.3.1.1.1.1m.8.1.20.8.1.1.1.1.1.1.1.3.c.36.1.1.9.4.1.1m.1.7.1.20.1.6.1.1.7.1.2.b.1.30.6.1.1.9.4.1o.2.1.1.1.1.1.21.4.1.1.1.9.1.1.1.b.h.2p.1.1.a.1.1.1.1.1o.1.1.1.25.1.1.1.1.d.1.1.1.9.1.i.1.2n.2.b.4h.1.1.1.8.j.1.1.2l.1.1.1.b.11.3i.1.8.k.1.1.2k.1.1.1.b.11.23.1g.1.2.1.2.1.1.l.1.1.1.2i.1.1.1.7.1.1.1.1.34.1h.1.1.1.1.1.m.1.2.1.2i.1.1.8.4r.2.1.1.l.1.1.1.2j.1.1.5.1.2.17.3k.1.2.1.j.1.1.1.1.2k.1.1.5.1.1.1.4s.1.1.1.j.1.1.1.1.2k.1.1.5.1.1.4t.2.1.j.2.2l.1.1.1.5.1.1.4t.1.1.1.h.1.1.1.1.9.2c.1.1.1.5.4w.i.1.2.1.2m.1.1.1.4.1.5d.1.2.1.2n.1.1.1.3.1.2p.1.1.2n.1.2.2o.1.2.3.1.1.2e.b.1.2n.1.1.1.2o.1.1.1.4.1.5d.a.2h.1.1.1.3.1.34.1.1.4z.1.1.3.1.36.1.2i.2h.1.1.3.1.5e.1.2r.1.1.1.2.7.1.1.1.7x.1.1.1.1.1.1.6.1.1.59.2q.1.1.1.1.1.39.1.4x.1.1.1.1.1.1.1.1.1.l.1.1.w.3l.1.30.1.1.1.1.1.1.1.m.1.4h.34.1.x.8c.8c.1'; + +/** Decoded grid cells as [gx, gy] pairs. */ +export function worldDots(): { x: number; y: number }[] { + const out: { x: number; y: number }[] = []; + let cursor = 0; + for (const part of PACKED.split('.')) { + cursor += parseInt(part, 36); + out.push({ x: cursor % WORLD_GRID_W, y: Math.floor(cursor / WORLD_GRID_W) }); + } + return out; +}