BeamNG.Earth
BeamNG.drive용 1:1 비율 실시간 지구, 실제 고도·위성 이미지·부동 원점·보조 서버에서 LOD 스트리밍
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Arcade football in the browser, in the spirit of the 16-bit classics: a
vertically scrolling pitch, tiny players, one button, and aftertouch to bend the
ball. 1 player against the CPU, 2 players on one keyboard, or online
with a four-character room code.
No dependencies, no build step. HTML, CSS and JavaScript exactly as the browser
receives them.README 전문 보기 ↗Arcade football in the browser, in the spirit of the 16-bit classics: a vertically scrolling pitch, tiny players, one button, and aftertouch to bend the ball. 1 player against the CPU, 2 players on one keyboard, or online with a four-character room code.
No dependencies, no build step. HTML, CSS and JavaScript exactly as the browser receives them.
There is a second game on the same engine:
webtennis. Eleven files are shared
between them byte for byte - the input mask, the netcode, the relay, the Worker,
the high score table and the speech synthesiser - and node tools/sync-shared.js
in that repository checks the two copies have not drifted apart.
git clone https://github.com/markclausing/websoccer.git
cd websoccer
npm start
Then open http://localhost:5173/ — that is all. There is no npm install; there
are no packages to install. That one server serves the page, pairs up online
matches and keeps the shared high score board.
A different port, playing over your network, troubleshooting: INSTALL.md. Want to help build it? CONTRIBUTING.md.
| Player 1 (blue) | Player 2 (red) | |
|---|---|---|
| Move | W A S D | Arrow keys |
| Kick / slide | Space | Enter |
| Switch player | Q | R Shift |
| Pause | Esc | (not online) |
Every key can be changed in the menu — click one and press what you want, or take a preset. Gamepads work. On a phone you get a thumbstick and two buttons instead, and the game asks you to turn it sideways; they feed the same input as the keyboard, so nothing else in the game knows the difference. On Android it goes fullscreen at kickoff; on an iPhone, Safari cannot, so use Share → Add to Home Screen and it opens as its own app.
How it plays:
There is a commentator, and he is made of filters rather than recordings: formant synthesis, which is roughly what the speech chips of the era did. He opens the match, names the side at a throw-in or a goal kick, calls a goal, a save and a long run with the ball, reads the score out as play restarts from the centre spot — "blue two, red nil" — and reads it again at full time. Never twice within six seconds, and there is a switch in the menu for when you have had enough of him.
There are goals, throw-ins, corners, goal kicks, half time, a final whistle and offside (switchable). No fouls: slide tackles are free, deliberately, like the originals. Four things follow the real rules rather than arcade convention, because they kept spoiling matches: at any restart the opposition stays off the ball until it has been touched; at a kickoff everyone stands in their own half; a keeper holding the ball in his box has about six seconds before anyone may challenge; and the keeper makes his own saves — you take over the moment he has it.
Under Line-up there is a small pitch with your eleven on it. Take one of five shapes — 4-3-3, 4-4-2 diamond, 4-4-2 flat, 3-5-2, 5-3-2 — or drag the players where you want them. Your own goal is at the bottom, so dragging a man upwards pushes him forward. Both sides can be set; in a one player match the red buttons are the CPU's shape.
Nobody is labelled a defender or a striker. Where you put a player is what he becomes, read off how far up the pitch he stands: the back band tracks all the way back, a holding midfielder most of the way, a hanging ten barely at all. Your line-up is remembered, and online each side plays its own.
A warning, since it is measurable: the match is balanced around the 4-3-3, and
partly balanced by being stuck — with both sides playing it the ball spends 93%
of the match in the middle third. Other shapes open the game up and CPU against
CPU the scorelines run away. See the note in src/game/formations.js.
Beat the CPU and you are asked for three letters, the way a cabinet asks: stick up and down for the letter, left and right to move, kick to confirm. Typing works too. Ten per difficulty, ranked by margin, then goals, then who got there first. A draw counts; a defeat never does.
By default the table lives in your own browser and needs nothing hosted anywhere. Point the game at a relay and it becomes one shared board: your browser sends its table, the server merges it with everyone's and sends the lot back. Every row carries an id, so a score that has been round three devices is still one row and it does not matter who syncs first. New entries can be announced in a Discord channel — a webhook rather than a bot, so there is nothing extra to host. See worker/README.md.
Nobody checks that a score is real. A board with no accounts on it cannot tell.
Easy, Normal or Hard, and the easier two are genuinely weaker rather than just slower. The yardstick is territory — the share of playing time the ball spends in the opponent's half — because at a couple of goals a match the scoreline is far too noisy to tune against: 49%, 38% and 30% against HARD. The strongest lever by far is reaction time. Your own AI team-mates always play at full strength; handicapping them would make the game harder for you, not easier.
Two browsers cannot find each other on their own, so this needs a relay. The
hosted version above has one; running npm start yourself gives you one for your
own machine and network. To put your own on the internet, free:
cd worker && npx wrangler login && npx wrangler deploy
That is the same relay as a Cloudflare Worker, and one address covers both online
play and the shared board — put it in src/config.js as DEFAULT_RELAY. Any
copy of the page can also be pointed somewhere with ?relay=wss://your-relay.
Details in worker/README.md. The ping is shown bottom left.
Everything hangs off one line:
step(state, [maskTeam0, maskTeam1]); // same state + inputs -> always the same result
The simulation is pure and deterministic: a fixed 60 Hz timestep, no DOM, no
Math.random() (all randomness goes through state.rng), and input is nothing
more than a 6-bit mask per player. That is why online multiplayer needed no
changes to the simulation — the two machines send each other their buttons, never
positions or scores, and each computes the same match.
It is lockstep with input delay: input for a tick is sent ahead of time, and
if it has not arrived the simulation waits rather than guessing. Every message
repeats the last eight ticks of input, so packet loss repairs itself; the delay
adapts per player; once a second a hashState() goes back and forth and a
mismatch stops the match with a clear message rather than letting two people
quietly play different games. The server pairs players by code and passes
messages along — it does not know the rules and keeps no score.
The AI runs inside the simulation, and one tick is three phases: all 22 players decide from the same snapshot, then kicks happen, then everyone moves. Without that split the side that moves second reacts to fresher positions and wins measurably more.
CONTRIBUTING.md has the file map and the rules that keep determinism intact.
npm test # all four
npm run test:sim # whole matches headless: determinism, rules, balance
npm run test:net # two real clients through the real server
npm run test:ui # main.js against a fake DOM, including the online flow
npm run test:worker # the Cloudflare Worker's logic, stubbed, without an account
The screenshots come from node tools/screenshot.js with the server running: it
drives headless Chrome over the DevTools protocol — no puppeteer, no dependency —
clicks through the menu and waits for a real moment before pressing the shutter.
When digging into network behaviour, __game.transport in the browser console
gives you ping, delay, stalls and desync.
Fancy picking one of these up? CONTRIBUTING.md describes where to start per topic.
MIT.
This is an original tribute to the top-down football games of the nineties. The project stands on its own: no code, artwork or other parts of any existing game, and no affiliation with their makers or rights holders.