BeamNG.Earth
A 1:1 scale streamed Earth for BeamNG.drive: real elevation and satellite imagery, floating origin, LOD streaming from a companion server
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Voice-controlled 3D fighter-jet combat game for the browser, built with Wispr Flow. Fly a Su-57 or F-35 over real Caucasus terrain using your voice, the keyboard or the mouse. Three.js + TypeScript.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Play it live: https://vantage-zero.vercel.app (Chrome or Edge, keyboard and mouse; press / in flight for every key and voice command)
Cinematic 3D fighter-aircraft combat — Mission 01: Operation Cold Threshold is fully playable from the main menu to the hangar.
Browser game: Vite + TypeScript + Three.js + Web Audio API. Everything (terrain, aircraft, audio, dialogue) is generated locally – no external assets, no network and no API keys are needed to play.
Status: Phase 2 vertical slice (see PROJECT_STATE.json for the authoritative, honest state of every module, test and known issue).查看完整 README ↗Play it live: https://vantage-zero.vercel.app (Chrome or Edge, keyboard and mouse; press / in flight for every key and voice command)
Cinematic 3D fighter-aircraft combat — Mission 01: Operation Cold Threshold is fully playable from the main menu to the hangar.
Browser game: Vite + TypeScript + Three.js + Web Audio API. Everything (terrain, aircraft, audio, dialogue) is generated locally – no external assets, no network and no API keys are needed to play.
Status: Phase 2 vertical slice (see
PROJECT_STATE.jsonfor the authoritative, honest state of every module, test and known issue).
| Tool | Version used |
|---|---|
| Node.js | 24.x (any current LTS/stable should work) |
| npm | 11.x |
| Browser | Current Chrome / Edge / Firefox with WebGL2 (hardware acceleration on) |
vantage-zero is connected to this GitHub repo, so every push to main deploys to production automatically.vercel.json: Vite, npm ci, npm run build, output dist. Models are cached for 7 days and hashed assets for a year.vercel deploy --prod (CLI logged in as the project owner).public/og-image.jpg, an in-game screenshot, is the Open Graph / Twitter card image and favicon.npm install # one time
npm run dev # development server → http://localhost:5173
npm run build # type-check (tsc --noEmit) + production bundle in dist/
npm run preview # serve the production build
npm test # unit / simulation tests (vitest, headless)
npm run typecheck # TypeScript only
Click once inside the page so the browser lets the game start audio (Web Audio needs a user gesture). Subtitles work with audio muted or unavailable.
Everything you can do with keyboard and mouse can also be done by voice or typed text. Press Enter (rebindable) to focus the command line at the bottom of the screen.
| Area | Examples |
|---|---|
| Engines & ground | "start engines", "taxi to the runway", "take off", "stop", "apply brakes" |
| Throttle & systems | "throttle eighty percent", "full power", "afterburner off", "gear down", "deploy flares" |
| Autopilot | "heading two seven zero", "turn left 45 degrees", "bank right 30", "climb to four thousand feet", "descend 1000 feet", "nose up 10 degrees", "hold speed 300 knots", "level the wings", "fly to the next waypoint", "autopilot off" |
| Landing | "land the aircraft" / "take me home" (autoland: −300 score penalty) |
| Combat | "select radar missiles", "next target", "fire" / "fox two", "fire the guns", "cease fire" |
| Wingman | "cover me", "engage my target", "rejoin", "line abreast formation", "wingman report" |
| Information | "bogey dope", "status report", "fuel status", "where is the airfield", "what is my altitude" |
| Radio | "tell ground I am heading home", "Specter two, check in" |
| Views & panels | "cockpit view", "next camera angle", "mouse aim on", "open the map", "objectives", "hint", "pause", "resume" |
| Menus | "new campaign", "select specter one", "launch the mission", "hangar", "settings", "controls" |
Voice commands that fly the aircraft (heading/altitude/speed hold, taxi, take-off, autoland) are real control laws on the same flight model; any manual stick input hands control straight back, and the autopilot has automatic terrain-collision recovery.
This project was built for the Wispr Flow shortlisting task (hhgoa-2026), which asks participants to build a project using Wispr Flow and their voice.
Note: Wispr Flow has no public API, and the in-game voice commands have not been tested with a real Wispr Flow session. They were tested with scripts.
In flight a button bar (bottom left) shows the next step and the actions that make sense right now: START ENGINES, AUTO-TAXI, AUTO-TAKEOFF, AUTOPILOT (also key P), NEXT WAYPOINT, GEAR, AUTOLAND, CAMERA, HINT. A quick-start guide opens automatically on the first flight; reopen it with I or the ? GUIDE button. Buttons run the same commands as typed or spoken ones.
| Jet | Skill | Key | Voice |
|---|---|---|---|
| Su-57 | Pugachev's Cobra: thrust-vectoring post-stall manoeuvre (200–470 kt, wings level) | U | "cobra" |
| Su-57 | Kulbit: 360° somersault (220–480 kt) | O | "kulbit" |
| Su-57 | Supercruise: about Mach 1.3 at military power (lower transonic drag) | – | – |
| F-35 | STOVL: hover, vertical take-off and landing, hover-taxi (convert below 300 kt) | J | "hover", "vertical take-off", "forward flight" |
| F-35 | Sensor fusion + DAS: +20 % radar range, 2× faster identification, 360° missile display | – | – |
| Both | Electronic jammer: 8 s, radar missiles may lose lock | 6 | "jammer on" |
| Both | Internal weapons bays: doors open briefly at each launch | – | – |
A tap of A/D gives a small, precise bank. Holding it banks to about 70° and stops there; hold past 1.2 s for a full roll. When you let go, the bank holds. Small banks settle back to wings level. In a banked turn with no pitch input, fly-by-wire pulls just enough to keep the turn nearly level. Before this fix, a 0.8 s tap rolled the jet to 148° (almost inverted).
Press / (or the ⌨ KEYS button, or "Commands & Shortcuts" in the main or pause menu) for every key, generated from your current bindings, plus all aircraft skills and example voice commands.
src/world/Biomes.ts): Arctic Fjord (Mission 01, Flight School), Desert Badlands (Mission 02) and Neon Megacity – Midnight Canyon (Mission 03, Wave Survival). A theatre re-colours the same real terrain and changes the sky, light, fog, reflections, vegetation and weather particles. The neon theatre adds solid towers along the canyon floor; flying into one is a crash.Afterburner bloom sprites, a transonic vapour cone between about Mach 0.93 and 1.04 below 7,500 m, wingtip vapour above about 3 g, and glowing two-layer tracers. The F-35 uses a matte radar-absorbent finish, and the Su-57 uses metallic paint with panel seams.
| Mission | What it adds |
|---|---|
| 01 Operation Cold Threshold | The original six-phase sortie: valley run, two drones, blizzard, landing. Bonus task: cannon kill. |
| 02 Operation Iron Veil | Four drones in two waves (the second wave arrives about 30 s after contact), clear skies, no blizzard. |
| 03 Operation Ember Gate | Four glowing valley gates to fly through (bonus points), three drones, then the blizzard. |
| Arcade — Wave Survival | Airborne start, four escalating waves, supply drops between waves. |
| Flight School | Free practice, no hostiles. |
Bonus tasks appear in the objective list. Mission data lives in src/missions/MissionSpecs.ts.
Chase, cockpit, wing, tail (low rear), orbit, front, target (lock-on, frames the selected contact), tactical (overhead), tower (fixed near the airfield), cinematic (slow orbiting drone shot) and flyby. Voice: "tactical view", "tail camera", "cinematic view", "next camera".
The hangar pilots are the two textured Meshy characters you supplied as .blend files: the bearded pilot is Specter-1 (boy) and the blonde pilot is Specter-2 (girl). tools/blend_export.py converts a .blend with Blender (joins meshes, decimates to about 20k triangles, shrinks textures to 1024 px, exports .glb and renders a preview):
blender -b model.blend --python tools/blend_export.py -- out.glb preview.png 20000
The results live in public/models/pilot_boy.glb and pilot_girl.glb. tools/pose_pilot.py relaxes their A-pose arms to the sides in Blender. The meshes are static, so they move only by sway and bob. They wear the textured olive flight suits from the source files, which replaces the orange and teal colour coding in the hangar; the in-cockpit helmets keep orange and teal.
Mouse-aim now flies the nose onto a world-fixed aim point. Move the mouse and the amber aim cursor moves; the jet banks and pulls until its nose cross sits on the cursor. Click once in the game and the pointer is captured, so it never runs into the screen edge; Esc releases it and pauses. Pressing any flight key snaps the aim point back to the nose. The aim point cannot swing more than 100 degrees from the nose. In a scripted test the nose settled within 1 degree of the aim point about 5 s after a 60 degree move.
Jets use clear-coated paint with fine panel seams and glossy tinted canopies. Every aircraft also has squadron-coloured wingtips, visible under-wing missiles that disappear as they are fired, blinking anti-collision strobes, and a hot white core in the afterburner flame.
| Action | Input | Notes |
|---|---|---|
| Throttle / afterburner | Ctrl+W up, Ctrl+S down (hold) | Above 90 % the afterburner lights. Browsers close the tab on Ctrl+W – rebind it (Controls / Keyboard) or use a fullscreen/kiosk window |
| Pitch | W (or ↑) nose up, S (or ↓) nose down | "Invert pitch" in Settings. Rate-command: neutral stick holds attitude |
| Roll / yaw | A/D (or ←/→), Q/E | On the ground A/D and Q/E steer the nose wheel |
| Mouse-aim flight | N toggles (also in Settings) | The nose follows the cursor: up/down = pitch, left/right = bank + yaw |
| Engine start | F | After start-up the aircraft rolls forward by itself; wheel brakes hold taxi speed |
| Airbrake / wheel brakes | B (hold) | Wheel brakes on the ground |
| Landing gear | G | Cannot retract with weight on wheels |
| Camera | 5 (or C) cycles chase → cockpit → wing → orbit → front → flyby; V head-look (mouse) | |
| Map & objectives | M | Pauses while open |
| Pause | Esc | Resume · Objectives · Map · Controls · Settings · Briefing · Restart · Return to Hangar |
| Select target | R | Cycles radar contacts (scan ±60°, lock cone ±30°) |
| Select weapon | T | GUN → IR-7 → LR-9 (shown on the HUD) |
| Fire | Space (selected weapon), Left mouse = cannon | Missiles need identification, range and a steady LOCK tone |
| Countermeasures | X | Flares + chaff, with cooldown |
| Interact | F | Context prompt on screen: engine start on the ramp. F never launches missiles. |
| Wingman |
Every function above is rebindable in Main Menu → Controls / Keyboard (or Esc → Controls). Combinations such as Ctrl+key are supported; conflicting keys swap; only your changes are stored.
Mountains come from real Greater Caucasus elevation (centred on 42.40 N 44.35 E, including the Kazbek massif): node tools/fetch-dem.mjs [lat lon] downloads public AWS/Mapzen terrain tiles (SRTM-derived) and bakes public/models/dem.bin (80 m grid, 40 x 52 km, ~0.6 MB). The airfield plateau, the main valley, the east pass and the lake are carved into that relief so the mission stays flyable; without the file the game falls back to procedural mountains. It is not DCS terrain.
The Su-57 (su57.stl), F-35 (3MF) and pilot (3MF) meshes you supplied are converted by node tools/convert-models.mjs <folder> [su57|f35|pilot|pilot2] into public/models/*.bin (merged, decimated, oriented nose -Z / up +Y, scaled to real size, pilot base removed) and loaded at start. If a file is missing the procedural fallback meshes are used. The girl's pilot always gets the closed mirrored-gold visor over the sculpt's head.
src/
main.ts entry, WebGL check
game/ Game.ts (lifecycle, UI wiring, loop) · GameState.ts (explicit state machine) · FlightSession.ts (one mission run)
SceneManager.ts · CameraRig.ts · Input.ts · Entity.ts · HangarScene.ts
flight/ FlightModel.ts (6-DOF) · AircraftConfig.ts · FlightController.ts · Autopilot.ts · AircraftMesh.ts
avionics/ HUD.ts (all displays + warnings)
combat/ TargetingSystem.ts · Weapons.ts · WeaponSpecs.ts
ai/ BanditAI.ts · WingmanAI.ts · Maneuvers.ts
missions/ MissionDirector.ts (authored mission, scoring, hints)
world/ Heightfield.ts (shared terrain/valleys/weather) · Terrain.ts · Airfield.ts · Sky.ts · Landing.ts
audio/ AudioEngine.ts (fully synthesised Web Audio)
story/ DialogueSystem.ts · Script.ts
characters/ Avatar.ts (coloured pilots)
ui/ UI.ts · Settings.ts · MapView.ts
persistence/ SaveManager.ts
tests/ vitest suites + tests/browser/driver.js (QA driver for the dev server)
q = ½ρV², L = qS·C_L, C_D = C_D0 + k·C_L² + wave drag (Mach 0.85-1.6) + gear + airbrake, side force, thrust with spool/afterburner/altitude lapse, fuel burn, gravity.PATROL → INTERCEPT → DOGFIGHT → DEFENSIVE_BREAK driven by detection, range, threat, damage and ammunition; they obey the same flight model (no teleporting, no free speed). Manoeuvres: high-rate turn, defensive break, barrel roll, split-S, Immelmann, energy climb.damageScale 0.6) so the story is about protecting her, not babysitting.See PROJECT_STATE.json for the tracked status.
| 1 cover · 2 engage target · 3 rejoin · 4 cycle formation |
| Echelon Right / Line Abreast / Trail |
| Radar range / hint | Z / H | H cycles Ground Control hints 1-3 (auto hints per Settings) |
| Debug | ` overlay, F8 teleport, F9 refuel/repair, F10 kill drones | Only when Debug mode is enabled in Settings |