A festival hill of stacked stone rings under a night sky, in
Monument-Valley purples. Up to 16 players carry paper lanterns from the
campground at the base toward the stage at the summit. Each level of the
hill turns on its own — slow clockwork, a fresh rhythm every round — and
stairs connect rings only where their slots align. Time your climb, or
crank the ring you stand on to force an alignment early, dragging every
lantern on it along. Help or hinder. First
lantern on the summit stage takes the round; if the last song ends with
no summit, the highest lantern takes it. First to 3 rounds headlines the
night, and the sky fills with fireworks and released lanterns. Built to
be played one-handed, standing in a field, on the phone in your pocket.
There is no game server. Your browser and your friends' browsers are
js-libp2p peers: they meet through a
circuit-relay on signal.ardegazu.ro, prove room membership
with a sealed hello derived from the invite link's secret, then upgrade to
direct WebRTC. libp2p's noise layer encrypts every pair end-to-end — even
the relay only ever routes ciphertext. The room key lives in the URL
fragment and never leaves your browser. One peer referees the climb; if it
disappears, the hill quietly elects a new referee and strikes up the next
song.
This page is also the repository
The site you're reading is a static snapshot that doubles as a
git remote (dumb-HTTP protocol, loose objects):
git clone https://git.ardegazu.ro/game5.git
Run it yourself
cd lampion/client
npm install
npm run dev # http://localhost:4173 — open two tabs on the same #room URL
Honest guarantees & limits
End-to-end encrypted: every peer pair is noise-encrypted
(relay included); room membership is proven by an AES-256-GCM hello
keyed from the room secret, which the relay never sees.
No accounts, no database, no telemetry. Static files + WebRTC.
Host-authoritative: the referee peer could cheat in its own
favour — play with people you like.
Full mesh: rooms allow 16, but a practical ceiling is ~12
simultaneous climbers (O(n²) connections).
No history: close the last tab and the hill is gone;
the room key in the link is the only state.
If direct connection fails, traffic falls back to the circuit relay
or TURN — rate-limited, and still unreadable to either.
Anatomy
client/src/net/ — the js-libp2p layer (bootstrap, room
crypto, peer manager), vendored from
neon-grid; only the
protocol id is game-specific
client/src/game/ — the game: typed wire protocol, seat-indexed
host simulation of the rotating rings, canvas night-hill renderer,
pentatonic chimes and a low stone thunk
deploy/publish-repo.sh — builds this very page + bare mirror
LAMPION
o urcare de noapte pe dealurile verii — fără server, p2p, criptată cap-la-cap
Un deal de festival din inele de piatră suprapuse sub un cer de noapte, în
violeturi à la Monument Valley. Până la 16 jucători duc lampioane de hârtie
de la tabăra de la poale spre scena din vârf. Fiecare nivel al dealului se
rotește singur — un mecanism lent, cu alt ritm în fiecare rundă — iar
scările leagă inelele doar acolo unde li se aliniază locașurile. Prinde
momentul urcării sau rotește tu inelul pe care stai, ca să forțezi o
aliniere mai devreme — târând cu el toate lampioanele de pe el. Ajuți sau
încurci. Primul lampion pe scena din vârf ia runda; dacă ultimul cântec se
termină fără nimeni în vârf, o ia lampionul cel mai înalt. Primul la 3
runde e cap de afiș al nopții, iar cerul se umple de artificii și de
lampioane înălțate. Făcut să se joace cu o mână, în picioare pe un câmp,
pe telefonul din buzunar.
Nu există server de joc. Browserul tău și browserele prietenilor tăi sunt
peers js-libp2p: se întâlnesc printr-un
circuit-relay pe signal.ardegazu.ro, dovedesc apartenența la
cameră cu un hello sigilat derivat din secretul linkului de invitație, apoi
trec pe WebRTC direct. Stratul noise al lui libp2p criptează fiecare
pereche cap-la-cap — până și releul rutează doar ciphertext. Cheia camerei
stă în fragmentul URL-ului și nu pleacă niciodată din browser. Un peer
arbitrează urcarea; dacă dispare, dealul alege în liniște un arbitru nou și
pornește cântecul următor.
Pagina asta e și repository-ul
Situl pe care îl citești e un snapshot static care e totodată un git
remote (protocolul dumb-HTTP, loose objects):
git clone https://git.ardegazu.ro/game5.git
Rulează-l singur
cd lampion/client
npm install
npm run dev # http://localhost:4173 — deschide două taburi pe același URL #cameră
Garanții și limite, pe bune
Criptat cap-la-cap: fiecare pereche de peers e criptată noise
(releu inclus); apartenența la cameră se dovedește cu un hello
AES-256-GCM derivat din secretul camerei, pe care releul nu-l vede
niciodată.
Fără conturi, fără bază de date, fără telemetrie. Fișiere
statice + WebRTC.
Autoritate la gazdă: peer-ul arbitru ar putea trișa în
favoarea lui — joacă cu oameni care îți plac.
Mesh complet: camerele permit 16, dar plafonul practic e ~12
cățărători simultani (conexiuni O(n²)).
Fără istoric: închizi ultimul tab și dealul dispare; cheia
camerei din link e singura stare.
Dacă conexiunea directă eșuează, traficul cade pe circuit relay sau
TURN — cu limită de debit, și tot ilizibil pentru amândouă.
Anatomie
client/src/net/ — stratul js-libp2p (bootstrap, cripto de
cameră, manager de peers), preluat din
neon-grid; doar id-ul de
protocol ține de joc
client/src/game/ — jocul: protocol de rețea tipat, simulare
la gazdă indexată pe locuri a inelelor rotitoare, renderer pe canvas cu
dealul nopții, clinchete pentatonice și un buf jos de piatră
deploy/publish-repo.sh — construiește chiar pagina asta +
oglinda bare
LAMPION
éjszakai mászás a nyári dombokon — szerver nélkül, p2p, végponttól végpontig titkosítva
Fesztiváldomb egymásra rakott kőgyűrűkből az éjszakai ég alatt, Monument
Valley-lilákban. Akár 16 játékos visz papírlampiont az alsó táborhelytől a
csúcson álló színpad felé. A domb minden szintje magától fordul — lassú
óramű, körönként új ritmussal —, a lépcsők pedig csak ott kötik össze a
gyűrűket, ahol a réseik egybeesnek. Időzítsd a mászást, vagy tekerd meg a
gyűrűt, amin állsz, hogy korábban kényszeríts ki egy egybeesést — magaddal
rántva a rajta álló összes lampiont. Segíts vagy keresztezz. Az első
lampion a csúcsszínpadon viszi a kört; ha az utolsó dal csúcsraérés nélkül
ér véget, a legmagasabb lampioné a kör. Aki előbb ér 3 körig, az az éjszaka
főfellépője, az ég pedig megtelik tűzijátékkal és elengedett lampionokkal.
Úgy készült, hogy fél kézzel is játszható legyen, egy mezőn állva, a
zsebedben lapuló telefonon.
Nincs játékszerver. A te böngésződ és a barátaid böngészői
js-libp2p peerek: egy circuit-relay-en át
találkoznak a signal.ardegazu.ro-n, a szobatagságot a
meghívólink titkából származtatott lepecsételt hellóval bizonyítják, majd
közvetlen WebRTC-re váltanak. A libp2p noise rétege minden párt végponttól
végpontig titkosít — még a relé is csak ciphertextet továbbít. A szoba
kulcsa az URL fragmentben él, és soha nem hagyja el a böngésződet. Az egyik
peer bíráskodik a mászásban; ha eltűnik, a domb csendben új bírót választ,
és rázendít a következő dalra.
Ez az oldal egyben a repó is
Az oldal, amit olvasol, statikus pillanatkép, amely egyben git remote is
(dumb-HTTP protokoll, loose objectek):
git clone https://git.ardegazu.ro/game5.git
Futtasd magad
cd lampion/client
npm install
npm run dev # http://localhost:4173 — nyiss két fület ugyanarra a #szoba URL-re
Garanciák és korlátok, őszintén
Végponttól végpontig titkosítva: minden peer-pár
noise-titkosított (a relét is beleértve); a szobatagságot a szoba
titkából kulcsolt AES-256-GCM hello bizonyítja, amit a relé soha nem
lát.
Nincs fiók, nincs adatbázis, nincs telemetria. Statikus
fájlok + WebRTC.
Hoszt-mérvadó: a bíró peer a saját javára csalhatna — olyanokkal
játssz, akiket kedvelsz.
Teljes mesh: a szobák 16 főt engednek, de a gyakorlati plafon
~12 egyidejű mászó (O(n²) kapcsolat).
Nincs előzmény: zárd be az utolsó fület, és a domb eltűnik;
a linkben lévő szobakulcs az egyetlen állapot.
Ha a közvetlen kapcsolat nem jön össze, a forgalom a circuit relay-re
vagy TURN-re esik vissza — sebességkorlátosan, és mindkettő számára
olvashatatlanul.
Bonctan
client/src/net/ — a js-libp2p réteg (bootstrap,
szoba-kripto, peer-kezelő), a
neon-grid-ből átvéve; csak
a protokoll-id játékfüggő
client/src/game/ — a játék: típusos wire-protokoll, a forgó
gyűrűk ülésindexelt hoszt-szimulációja, canvas éjszakai-domb renderer,
pentaton csengettyűk és egy mély kő-koppanás
deploy/publish-repo.sh — ez építi ezt az oldalt + a bare
tükröt