BeamNG.Earth
BeamNG.drive용 1:1 비율 실시간 지구, 실제 고도·위성 이미지·부동 원점·보조 서버에서 LOD 스트리밍
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Experience Pokémon as wildlife — explore, observe, and catch them in their natural habitats.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Where Pokémon live wild: explore a procedurally generated underwater reef, observe schools, guardians, predators and gentle giants behaving naturally, and catch the Pokémon your mission asks for — before the ecosystem gets there first. Every Pokémon fights with two real moves; from Level 3 you bring a party of your own caught Pokémon, duel wild ones to weaken them, and face the bosses of the deep. React + React Three Fiber + Three.js, no heavyweight game engine.README 전문 보기 ↗
Where Pokémon live wild: explore a procedurally generated underwater reef, observe schools, guardians, predators and gentle giants behaving naturally, and catch the Pokémon your mission asks for — before the ecosystem gets there first. Every Pokémon fights with two real moves; from Level 3 you bring a party of your own caught Pokémon, duel wild ones to weaken them, and face the bosses of the deep. React + React Three Fiber + Three.js, no heavyweight game engine.
The Sea World (4 levels): 1 · Sunlit Shallows → 2 · Dusk Reef → 3 · Night Reef (companions unlock; boss: Dondozo + Tatsugiri) → 4 · Deep Trench (bosses: Wailord, then Kyogre). Defeat Kyogre to complete the world.
npm install
npm run dev # http://localhost:5173
npm run build # production bundle in dist/
| Desktop | |
|---|---|
W A S D / arrows | swim (you swim where you look) |
| Mouse | look · left click throws the selected ball · right click cycles balls (levels 1–2) |
Shift | swim faster |
Space / Ctrl (or X) | swim up / down |
1–4 | select Poké / Great / Ultra / Master Ball (or right-click to cycle) |
E | lure (15 s, nearby Pokémon circle you) — one use every 5 minutes |
| Right click | quick attack (levels 3–4): fires the best ready companion move at your crosshair |
5 6 · 7 8 | specific companion moves, slot 1 · slot 2 (levels 3–4) — same aiming as a ball |
Tab | mission details · C collection · P / Esc pause |
Touch: left stick swims, drag the right side to look, 🔴 throws, ▲▼ swim up/down, » toggles sprint, tap the tray to switch balls.
PokeWorld is a fully static single-page app — no backend and no environment variables. Player saves live in the
browser's localStorage; Pokémon base stats come from the public PokeAPI (fetched client-side, cached in localStorage,
with embedded fallback stats if it is unreachable). All sprites and trainer portraits are vendored under
public/sprites/, so the game does not depend on any third-party image host.
Push the repository to GitHub and import it at vercel.com/new.
Vercel auto-detects Vite; the included vercel.json pins the settings and adds cache headers:
| Setting | Value |
|---|---|
| Framework preset | Vite |
| Build command | npm run build |
| Output directory | dist |
| Install command | npm install |
| Node.js version | 18 or newer |
Deploy. No rewrites are needed (all screens are in-app state, not URL routes).
The api/ folder holds Vercel Node functions for signup/login, stats sync and the
leaderboard. User data is stored as JSON documents — plain files under data/ in local
dev, Vercel Blob in production. One-time setup on the Vercel dashboard:
BLOB_STORE_ID and the runtime
provides VERCEL_OIDC_TOKEN — no read-write token needed (a classic
BLOB_READ_WRITE_TOKEN also works if you prefer one). All documents are written
with access: 'private' — they are never publicly fetchable.SESSION_SECRET = 32+ random characters
(e.g. openssl rand -hex 32). This signs session cookies AND derives the unguessable
blob keys for user documents — never rotate it casually (existing sessions and doc
keys derive from it).users/<64-hex>.json (never a guessable username), and the session cookie is
HttpOnly; Secure; SameSite=Lax.Local dev needs nothing: npm run dev serves /api/* through a Vite middleware and
writes JSON files to ./data (gitignored). npm run check:api runs the API test suite.
Any other static host (Netlify, Cloudflare Pages, GitHub Pages, an S3 bucket) works the same way: build, then serve dist/.
npm run check # data checks: move kits, stat normalization, damage-formula clamps
npm run sim # headless ecosystem sim: balance targets, boss flows, perf budget (ms/step)
src/
data/ species roster (role matrix), behavior groups, balls, damage table, trainers, levels/1–5
engine/
rng.ts seeded PRNG (every dive has a reproducible seed)
world/ zones + terrain heightfield, day/night lighting model, Ecosystem (entity lifecycle, LOD AI, HP)
ai/ steering helpers + data-driven behavior systems (schooling/boids, guardians, predators, curious,
bottom dwellers, defensive, gentle giants, drifters) — no rendering code
sim/ damage formula, move execution (projectiles/cooldowns/effects), catching, missions, balls, duels
ecosystem/ seeded level generator → groups, spawns, obstacles, mission objectives
sim/ catching rules, ball physics, mission state
player/ swimming controller (inertia, damping, sway)
GameSession.ts orchestrates a level: sim ↔ store ↔ audio, lure, restoration, reinforcement, completion
pokeapi/ PokeAPI client with persistent cache + deterministic HP normalisation (offline fallback stats)
persistence/ save schema (versioned), migration/recovery, storage adapter (localStorage today, API later)
state/ zustand store (UI state, save mirror, HUD, toasts)
render/ R3F: instanced billboard sprites (GIF → spritesheet, shader-animated), reef environment,
health bars, balls + FX, camera rig + desktop input
ui/ screens (trainer, menu, levels, brief, complete, collection, settings), HUD, touch controls
audio/ procedural WebAudio soundscape (drone, current, bubbles, whale calls, predator tension, SFX)
Key design rules: AI decisions are throttled (10 / 4 / 1.5 Hz by distance), movement interpolates every frame,
mission state is event-driven, every Pokémon is one instance in a per-species InstancedMesh, and the only per-frame
GPU uploads are instance matrices/attributes. PokeAPI is read once, cached, and never touched per frame.
Gameplay tunables live in src/data/gameConfig.ts, src/data/damageRules.ts, src/data/balls.ts and the level
configs under src/data/levels/.