BeamNG.Earth
BeamNG.drive용 1:1 비율 실시간 지구, 실제 고도·위성 이미지·부동 원점·보조 서버에서 LOD 스트리밍
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
The original Flash Age of War (650×450, 40 fps), ported to a modern web stack and playable
against a friend straight from the browser. Graphics, animations, sounds, UI and unit stats are the
original ones, extracted from the game's SWF; the game logic is a deterministic TypeScript port of
its ActionScript.
Play: https://basil-as.github.io/Age-of-War-p2p/ — pick a version, then Play with a friend and send the link.README 전문 보기 ↗The original Flash Age of War (650×450, 40 fps), ported to a modern web stack and playable against a friend straight from the browser. Graphics, animations, sounds, UI and unit stats are the original ones, extracted from the game's SWF; the game logic is a deterministic TypeScript port of its ActionScript.
Play: https://basil-as.github.io/Age-of-War-p2p/ — pick a version, then Play with a friend and send the link.
Two versions share one network layer and can be switched from any menu (⇄ button, also in the pause menu):
Vite 8 · TypeScript · PixiJS 8 (own mini Flash display-list engine) · Svelte 5 overlays · Tailwind 4 · Trystero / WebRTC · Vitest · Playwright · Biome · PWA.
tools/swf/ — parses the SWF and generates public/orig/ (sprite atlases per era, data tables, sounds, fonts).
Rebuild with node tools/swf/build-assets.mjs public/orig && node tools/swf/build-data.mjs public/orig
(needs the SWF export, see the env vars at the top of those scripts).src/orig/sim.ts — deterministic simulation (own PRNG, own trig) so two browsers stay in lockstep.src/net/ — lockstep (4-tick turns, input delay, state hash check) over a connection ladder.The host listens on every route at once; the guest walks down them. First live peer wins, direct routes get a head start.
| # | Route | Notes |
|---|---|---|
| 0 | LAN (server/lan.mjs) | same network, no internet, ≈1 ms |
| 1–3 | WebRTC, signalling via Nostr / BitTorrent / MQTT | direct P2P, lowest ping |
| 4 | WebRTC via TURN (443/TCP too) | strict NAT, blocked UDP |
| 5–6 | Game frames over Nostr / MQTT relays (wss) | no WebRTC at all |
| 7 | Your own relay (?ws=, VITE_WS_RELAY) | server/relay.mjs |
| – | Manual copy-paste codes (works on LAN with no internet) | no servers |
The ping badge turns red above 150 ms. For consistently low ping (e.g. from Russia) host your own
TURN + relay near both players: see deploy/ — build with VITE_TURN / VITE_WS_RELAY.
npm ci && npm run build && node server/lan.mjs # prints http://192.168.x.x:8080
Both players open that address → Play with a friend. Works without internet.
Settings → Opponent AI: Smart (default; the bot pays for units/turrets, earns gold/xp from kills, evolves, buys slots, uses its special) or Classic (the original script that spawns units for free).
npm ci
npm run dev # http://localhost:5173
npm test # ~85 unit tests: rules, fuzz, determinism + golden hash, asset/data integrity, i18n, handshake, ladder, multipath, bot, perf budget
npm run e2e # Playwright: visuals, solo/win/lose flow, resize/phone, PvP (BroadcastChannel + WS relay), production build + service-worker cache
See docs/COMPARISON.md for how this relates to other open-source clones and NOTICE.md for credits.