BeamNG.Earth
A 1:1 scale streamed Earth for BeamNG.drive: real elevation and satellite imagery, floating origin, LOD streaming from a companion server
A RTS Hindu Mitho Game with simple control
Translation pending
GamesTypeScript · JavaScriptGitHub @kuganrydeOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Low-poly, Pallava-inspired 3D strategy game. Vite + TypeScript + Three.js.
Requires Node 20+.
npm install
npm run dev # http://localhost:5173
Other commands:
| Command | What it does |
|---|---|
npm test | 44 unit tests for the game systems (Vitest, no browser needed) |
npm run typecheck | Strict TypeScript check |
npm run build / npm run preview | Production build / serve it |
npm run test:e2e | Drives the real game in headless Chromium (86 checks across four scripts: base game, units/architecture, UI/camera/touch, combat). One-time setup: npx playwright install chromium |
| Action | Input |
|---|---|
| Select | Click a unit, or drag a box (Shift = add/toggle) |
| Move | Right-click ground; formation chosen in the bottom panel (Line / Column / Wedge / Box) |
| Build | Hotkeys 1–5 or the Construct menu; green ghost = valid, red = invalid; Shift-click to keep placing; Esc / right-click cancels |
| Recruit | Select a finished Barracks → Recruit buttons |
| Camera | WASD / arrows pan · Q / E rotate 90° · wheel or +/− zoom · middle-drag pan · H home · minimap click/drag |
| Fight | Right-click an enemy to attack · F then click ground = attack-move · Alt+1–9 save a control group, Shift+1–9 recall (twice quickly = centre camera) |
| Game | P / Space pause · Esc menu · F3 performance stats · M mute / unmute ambient sound |
| Inspect | Zoom in past ~2.4× and the camera lowers its angle (to ~4.5×) for a close, side-on look at buildings and figures |
src/world/terrain.ts)localStorage (autosave every 30 s and on tab hide, manual slot), with strict validation of save datasrc/systems/combat.ts).src/systems/enemyAi.ts).prefers-contrast and forced-colors styles; every control still keyboard-operable..github/workflows/ci.yml (typecheck, unit tests, build, e2e in a real browser, npm audit, CycloneDX SBOM), codeql.yml (SAST), Dependabot, and vercel.json security headers. Not yet run on GitHub (no remote exists yet).?models=<manifest.json> loads same-origin skinned .glb files per unit kind (see src/render/units/gltfUnits.ts for clip-name aliases). No model files ship with the game; without them the procedural rigs are used.Worker assignment, research tree, a real enemy economy, formations affecting combat, campaign map, diplomacy/trade, quests/achievements, line of sight, difficulty levels, a tutorial.
.glbEvery building is created through a registry (src/render/buildingModels.ts). Export from Blender with the origin at the
footprint centre on the ground, +Y up, and fit within the footprint in src/core/defs.ts, then:
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
const gltf = await new GLTFLoader().loadAsync('/models/temple.glb');
registerBuildingModel('temple', () => gltf.scene.clone());
The registry is tested only with procedural models; the loader snippet above is a documented pattern, not yet exercised.
src/core/ defs (tuning data), state types, math, seeded RNG
src/world/ terrain heightfield, vegetation scatter (pure, no Three.js)
src/systems/ pathfinding, formations, placement, simulation, save, selection, adaptive resolution, settings (pure)
src/render/ scene/lighting, terrain mesh, buildings, units (instanced), vegetation (instanced), camera rig
src/ui/ HUD, minimap
src/game.ts loop, picking, orchestration src/input.ts pointer + keyboard
tests/ unit tests e2e/run.mjs browser test
Game logic never touches Three.js, so it is unit-testable and can later move to a worker or a server.
public/models/ and list it in public/models/buildings.json as { "buildings": { "temple": "temple.glb" } }. It is scaled to the footprint and loaded automatically (same origin only, 120k-triangle limit); a missing or rejected file keeps the procedural model.npm run build:cg # type-check, build with --mode crazygames, validate size limits, write palava-crazygames.zip
What the portal build changes (everything else is identical to the web build):
base: './'), output in dist-crazygames/.index.html; the CSP allows only that script origin and https:/wss: connections for the SDK, and the referrer policy is relaxed to strict-origin-when-cross-origin.src/platform/platform.ts is the only code that touches window.CrazyGames. Every SDK call is wrapped, the SDK is used only on the portal (or its local preview), and a blocked or silent SDK falls back after 4 s so the game always starts.gameplayStart/gameplayStop fire only on changes, and only while actually playing (not in menus, pause, intro, ad or end screen). loadingStart/loadingStop bracket boot. happytime fires on victory.localStorage per call.Play aids added for the portal audience: a six-step guided tutorial (skippable, off for loaded games), quick-select bar and hotkeys (R army, I idle villagers), touch tap-to-command (tap ground to move, tap a foe or a rival building to attack, tap a workplace to assign villagers), right-click attack on rival buildings, and a compact HUD for screens under 520 px tall.
palava-crazygames.zip to the CrazyGames Developer Portal and test in their preview tool (desktop and mobile frames).connect-src to the hosts the SDK actually uses.