BeamNG.Earth
A 1:1 scale streamed Earth for BeamNG.drive: real elevation and satellite imagery, floating origin, LOD streaming from a companion server
Your city. Your rules. An open-world game of Nanded in your browser.
GamesJavaScript · PythonGitHub @piyushbodaaOnlineOwner 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
GTA Nanded browser game: production source, development branches, research and verification.
Taken from the repository README
Loading the full README.
Read the full README ↗उगं नव्हं मय, नांदेड हाय नांदेड! — an open-world game of Nanded, Maharashtra, that runs in your browser at gta.nanded.fun.
Steal an auto-rickshaw outside Hazur Sahib Nanded station, weave through Shyam Nagar's coaching traffic, outrun Inspector Kadam's jeeps across the Godavari, and drive fares to real places across the city. The street map is the real one (OpenStreetMap); the 67,000 buildings, the traffic, the people, the sound and the music are all generated live in the browser.
| Keyboard & mouse | Gamepad | Touch | |
|---|---|---|---|
| Move / steer | W A S D / arrows | left stick | floating stick (left thumb) |
| Look | mouse (click to lock) · drag | right stick | drag the right half |
| Sprint · Jump · Punch | Shift · Space · click / J | L3 · A · B | RUN · JUMP · PUNCH |
| Get in / jack / get out | F (or E) | Y | ENTER / EXIT |
| Gas · Brake/reverse · Handbrake | W · S · Space | RT · LT · A | GAS · BRAKE · DRIFT |
| Horn · Radio · Look back | H · R · C | L3 · RB · R3 | HORN · 📻 |
| Camera distance | V | LB | 🎥 |
| Buy / talk / photograph | Q | X | contextual button |
| Siren (police jeep, ambulance) | Q | X | SIREN |
| Start a job (in an auto or on a two-wheeler) | N | D-pad ↑ | START JOB |
| Map · Pause | M · Esc | Back · Start | MAP · ❚❚ |
Story: Godavari Gold (10 missions). Sunny Patil comes home from Pune, jobless, to find his father has borrowed two lakh from Kaka Savkar, a moneylender at ten per cent a month, and now owes six. To pay it he steals bikes for Bunty at Taroda Naka, chases down a matka collector for Shera, and runs sand at night for Jaggu Mama, who mines the Godavari: past the flying squad, out of the impound yard, and in a race for the river against Tiger. When Mama hides ganja under a tempo of onions from the Telangana road, Sunny drives it to Inspector Kadam instead. He stops Shera's protection racket, breaks into Savkar's office on Diwali night for the ledger that ties the loans to Mama's sand money, and has it out with Mama at the ghat. These are the kinds of crime Nanded’s police deal with; every character and event is fictional. Contacts appear on the radar and map with their initials: walk into a marker to start.
Around town.
N: pick up people waving at the kerb and drive them to one of 133 researched real places. Fast, clean rides tip; streaks pay more.N: collect from real restaurants, deliver while it's hot.X) takes a photo anywhere, captioned with the place. Share hands it to WhatsApp, Instagram or anything else on the phone, with the game's link; Save keeps it.Progress saves automatically on your device. Graphics tune themselves to your device the first time you play and keep adjusting as you go (Settings → Graphics to pin Fast / Balanced / High / Ultra; Settings → Frame rate for 60 fps or a 30 fps battery saver; Settings → Performance readout to see what your device is doing). On a phone, add the game to your Home Screen (Settings → Home Screen) and it opens full screen, and an iPhone keeps your progress even after a week away.
Everything is plain JavaScript modules on Three.js with Vite; there is no game engine, physics engine or texture file.
scripts/build-world.mjs folds the OSM street graph (26k segments) into 17,861 road polylines between 13,373 junctions, keeping each road's one-way direction (1,368 are one-way, most of them the two carriageways of a divided road), plus rivers, the railway, the airport's runway, taxiways and aprons, the mapped petrol pumps, 1,185 mapped building footprints and 133 researched places, into public/data/world.json (460 KB gzipped). At load, roadnet.js lifts every bridge on dry land that crosses a street or the railway into a flyover: ramps of 8% from the ground (running on along straight approaches where the mapped bridge is short) up to a 6.4 m deck over what it crosses, on piers. Traffic, the player and the police drive up onto the deck or along the street beneath it, and collisions know which level they are on.src/world/citygen.js) — zones by neighbourhood (old city, coaching hub, markets, residential, Vishnupuri campus, outskirts), lots along every street and infill in block interiors, trees, poles and wires, stalls, shrines and hoardings. Busy roads get a footpath that buildings keep behind; shop platforms and compound walls leave the kerb free. A divided road, mapped as two one-way carriageways only metres apart at half scale, is laid out as one: each carriageway keeps its kerb and footpath on the outside and meets the other at a kerbed median that carries the street lamps. Petrol pumps stand at the four mapped in OSM and along the highways (forecourt, canopy, dispensers, kiosk, price board; generic liveries), and a dozen sabzi markets line busy old-town streets with handcarts and mats of vegetables under umbrellas, sellers and shoppers. The railway is laid as broad-gauge track on ballast and sleepers, flush with the road at level crossings. Around Hazur Sahib the old town stays at two storeys. Deterministic: the same city on every device.chunks.js) — buildings that front a street stand on a plinth, with slab edges at every floor, chajjas over the windows, corner pilasters, a projecting roof slab, balconies with MS railings or concrete balustrades, and a ground floor laid out bay by bay: a door with a step and canopy for homes, a raised platform (ota) under awnings for shops. Walls that face open ground get windows; party walls stay blank. This is an original illustration of the common Marathwada RCC street building, not a survey of any real facade.src/world/atlas.js: facades with grilles and chajjas, shopfronts, Marathi/English signboards, worn asphalt, kerbs) and one physically based shader for the whole city (citymat.js: glass that reflects the sky with a room behind every window, lit or dark at night; per-building weathering, damp plinths and rain streaks, and plaster fallen away to the brick, placed along each wall so it never repeats and heaviest on old lime-washed houses; puddles in the monsoon; a world-space detail texture so repeats disappear), so each 192 m chunk is a single draw call; chunks stream around you, built a few dozen buildings at a time between frames so that streaming never stalls a frame for a whole chunk. Chunks more than about 150 m away are built as a far version first: the same blocks in the same paint and windows, with their roofs, tanks and hoardings, but none of the balconies, chajjas, railings, awnings, signs, wires or small props, for a third of the triangles and fewer draw calls; the close-up replaces it as you come near. Trees are crowns of painted leaf cards that sway and cast dappled shadows (). Landmarks are hand-built (), with gilded domes: Hazur Sahib with its fluted dome, jharokhas, the Angitha Sahib and the tall Nishan Sahib; Hazur Sahib Nanded station turned to run along the line, with Platform 1, a foot overbridge over the yard, overhead-line masts and a train at the platform; the central bus stand's angled bays under a red shed; the airport's glass terminal, control tower and a turboprop on the apron beside runway 10/28 (); and Chhatrapati Shivaji Maharaj on a rearing horse at Shivaji Putla. Lal Pari buses wait at the bus stand's bays, autos at the station and cars at the pumps whenever you come near (). Sky, sun, moon, clouds and weather in , which also captures the sky into a small cube map that lights and reflects everything; on Balanced and up the sun casts shadows across streets and facades, and the shade gets the warm light that sunlit dust bounces back into it; the Godavari in . Vehicles are instanced by type, and the whole crowd is three instanced meshes on one skeleton: the processor poses each skeleton and writes its bones into a small float texture, and the graphics chip bends the body to them. Each frame sends only the instances in use (about 60 KB, where it used to send all the room there is for them, about 650 KB).On an Intel Iris Xe laptop a typical street frame on High costs about 3 ms of CPU and 8 ms of GPU at 1576×863 with shadows, MSAA and bloom (~200 draw calls); Fast skips shadows, MSAA, bloom and wet reflections. The whole game is about 0.8 MB to download (brotli), plus 1.6 MB of cover art, music and fonts. Streaming builds each chunk in slices of under a millisecond within a per-frame budget of at most 4 ms. Measured in headless Chrome on the same laptop at 1280×720, the most streaming work any frame did on the test routes is about 5–6 ms (it was 15–27 ms when a chunk was built in one go), or about 11 ms with the CPU slowed 4× in DevTools (it was 35–77 ms). That emulation is not a phone measurement.
npm ci
npm run dev # http://localhost:5173 — the game
# http://localhost:5173/dev.html — free-fly world viewer
# http://localhost:5173/people.html — a line-up of people up close (window.show({...}))
npm test # roads, city generation, physics, police, missions, saves
npm run build # production build in dist/
npm run world # rebuild public/data/world.json from src/data/ after data changes
src/data/*.json are generated from research/ by scripts/build-city-data.py and scripts/build-buildings.py (Python 3). See CONTRIBUTING.md.
Map data © OpenStreetMap contributors, ODbL 1.0 — the street network, rivers, rail and footprints in public/data/world.json and src/data/. Place research (addresses, coordinates, sources) lives in research/ and public/data/places.json; see research/COVERAGE.md.
Code, artwork and audio are MIT (see NOTICE). The cover art is original; fonts are Google Fonts (Anton, Barlow Condensed, DM Sans, Noto Sans Devanagari).
All characters, stories and businesses' roles in the story are fictional. Real places appear only as public settings; their inclusion implies no endorsement. The city is an illustration on the real street map, not a survey: distances are compressed to half scale and buildings are generated. Their architecture is loosely inspired by typical Marathwada streets (Shyam Nagar's coaching blocks, Old Mondha's bazaar, Station Road); no facade, shop or landmark is a measured replica.
Analytics. gta.nanded.fun counts visits, game starts (new story, continue or free roam) and passed missions with Google Analytics 4, with advertising features and Google signals off. Every page address is reported as the bare domain, and no other host sends anything, so local builds and previews stay silent (public/analytics.js).
foliage.jslandmarks.jsairfield.jsstands.jssky.jswater.jssrc/actors/anim.js) — people are animated procedurally, worked out every frame rather than played back from clips. Walking and running plant the feet: each foot follows a path set by the gait's phase and the speed over the ground, landing and leaving at rest, and the legs reach it with two-bone IK, so a stride lengthens with speed (from about 1.3 m strolling to 3 m running) instead of the legs spinning faster, and feet don't skate. The pelvis rides as high as the loaded leg allows, sways over it and drops on the swinging side; the shoulders turn against the hips, the arms swing with the opposite leg, and the head stays level. Standing, people breathe, shift their weight from leg to leg and look about, each in their own way (hands behind the back, arms folded, hands on hips, on a bag's straps). Punches are a jab, a cross and a hook thrown from a guard; a jump tucks and lands through the knees; a fall topples onto the back or the face and gets up again through a sit or a push-up. Riders hold the handlebars and put the left foot down when they stop, and a woman in a sari rides pillion side-saddle. A change from one thing to another eases out of the old pose instead of snapping, which also carries people into and out of seats. Traffic sways on its springs like the cars you drive.src/actors/people-models.js) — two bodies on one skeleton. The people nearest the camera (4 within 10 m on Fast, up to 24 within 30 m on Ultra) get the detailed one: arms and legs are single limbs that bend smoothly at the elbow and knee (each vertex blends between two bones) instead of hinged mannequin parts, and hands have fingers; faces are painted by the shader (eyes with whites and irises, brows, lips, a bindi, stubble) on a skull with sockets, cheekbones and a chin, and hair grows to a painted hairline with a parting, in a braid, or in a bun with a gajra. Shirts have collars, buttons and pockets (tucked in, with a belt), kurtas have side slits, saris a pleated skirt, a pallu over the shoulder and a border; there are dupattas, chappals or shoes, a Sikh dastar, a Marathi pheta, Gandhi topis and police caps, and cloth is plain, checked, striped or printed. Builds vary: female, heavy and tucked-in shapes are offsets each person mixes in. Men and women have their own detailed mesh over one shared set of vertices, so neither pays for the other's clothes, and outer layers are drawn before what they cover, so hidden skin isn't shaded. Everyone else gets the simple body. A detailed person costs about 0.03 ms of GPU time a frame on a laptop's integrated graphics.post.js) — the frame is drawn in high dynamic range, then gets distance haze that melts into the sky, reflections of the street in wet roads, bloom, a filmic curve and a colour grade that changes with the hour, vignette and grain. Without MSAA (phones, and Fast everywhere) the same pass smooths outlines with FXAA where the depth jumps, so lettering and brickwork stay crisp, and sharpens the rest in proportion to how far the browser will stretch the frame over the screen.src/core/quality.js) — four tiers. Phones draw 1.5–2.25 pixels per CSS pixel (their screens have 2–3 device pixels in each), with FXAA instead of MSAA, which costs a phone GPU far more memory bandwidth. The first launch on a GPU times a few frames behind the cover and settles the tier there (shader recompiles belong in loading, not in a chase); during play a governor lowers the resolution as soon as frames are missed, raises it again in small steps, and remembers per GPU where it settled. Phones cap at 60 fps so 90 and 120 Hz screens don't burn battery on frames nobody sees, or at 30 in battery saver.vehicle-physics.js), impulse collisions against the city and between vehicles, speed breakers before the chowks on the smaller streets and either side of school, college, coaching and hospital gates (traffic crawls over them; taken fast, a car leaves the road for a moment and lands with a thud) and potholes on the worn streets of the old town and the villages that jolt the wheels and fill with rainwater in the monsoon (roadbumps.js), lane-following traffic that keeps left, drives one-way roads only their way and stops at the signals where main roads cross (traffic.js, lit by signals.js), pedestrians who walk (stepping round posts, stalls, platforms, parked cars and each other, or turning back when the way is blocked), dive, fall, flee or fight (peds.js), and police that hunt with A* routes and line-of-sight checks (police.js).missions.js, story.js), side jobs (jobs.js), consequences (rules.js), HUD and maps (src/ui/; the radar draws its streets from tiles painted once and kept), and synthesised audio and music (src/audio/).