Net Shooter: a browser FPS with peer-to-peer co-op
three.js 기반 4인까지 P2P 연결 FPS, 서버 없이 설치 없이 오픈소스
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A retro 3D maze crawler that runs in your browser. Find the key or pick the gate lock, reach the exit, and trade your loot on the way down.
There's no build step and nothing to install. Clone the repository and open index.html in a browser:
git clone https://github.com/kerminator-dev/Labyrinth.git
cd Labyrinth
open index.html # or just double-click it
| Key | Action |
|---|---|
| W A S D | move |
| Shift | run |
| mouse | look |
| E | open, search, pick a lock or the gate, pray |
| F | throw a coin: shadows nearby go to see what clinked |
| left mouse button | playing together: your frog points where you look, for the others to see |
| M | map (once you've found it): held low and tilted, so you can walk and read; press again to hold it up flat, once more to put it away |
| Esc | menu: continue, a new maze for this level, a new game, settings |
When lockpicking, move the mouse to position the pick, then hold W, E, Space or the mouse button to turn the lock. Press Q to back off.
The game runs only while it has the mouse: if the browser lets it go, everything stands still until you click the view. A new level is built behind a loading screen.
One of you runs the co-op server, everyone on the same network plays from a browser:
npm run build-server # once (needs Rust): dist/DungeonMasterServer, under 2 MB, the game is inside it
dist/DungeonMasterServer (double-click it, or run it in a terminal). It needs nothing installed. It opens the game in your browser and shows two addresses: one for this computer and one for the others, like http://192.168.1.20:7777. If the macOS firewall is on, it asks whether the server may accept incoming connections: allow it, or the others can't join.Not on one network: a tunnel such as ngrok (ngrok http 7777, the port the server shows) gives an https://… link; the others open it (past ngrok's warning page: Visit Site) and join as above. Every browser builds the very same level (Safari, Chrome and the rest), and everyone must have the same version of the game: a page from an older server is not let in.
The rules of a run together:
If a connection drops, the game joins again by itself, and a page that reloads comes back as the same player with its purse. The leader can end the run from the menu, sending everyone back to the lobby.
The server file can be copied to another Mac of the same kind (Apple silicon; --universal below makes one for Intel Macs too) and started there the same way. macOS asks to confirm a program from elsewhere the first time: right-click it and pick Open.
Server options: --port N (7777, or the next free one), --no-open (do not open the browser), --dir D (serve the game from folder D instead of the copy inside it, for working on the game: npm run server). The game is baked in when the server is built, so build it again after changing the game. node server/build.js --universal makes one file for both Apple silicon and Intel Macs.
The game is built to stay fast on modest hardware:
Settings has draw distance, pixel size, FOV, an FPS limit and a toggle for post effects.
Plain JavaScript and three.js. There's no bundler, every file is a plain <script>, and they load in order:
| File | What it does |
|---|---|
js/00-util.js | random numbers, Perlin noise, settings |
js/01-textures.js | procedural canvas textures |
js/02-themes.js | themes and weather |
js/03-maze.js | maze generation, collision grid |
js/04-walls.js | voxel walls, vaults, niches, burial alcoves |
js/05-world.js | floors, sky, terrain, lights, portals |
js/05b-props.js | props, remains, glowing crystals and mushrooms |
js/05c-audio.js | synthesised sound and music |
js/05d-gameplay.js | chests, key and gate, lockpicking, torch and Candlelight, shadows |
js/05e-creatures.js | pixel-art kit for the HUD icons and the tree sprites |
js/05k-mobs.js | low-poly mobs: the lantern wraith, the cave spider, the lost soul and the watcher |
js/05m-hero.js | the players' frog (the model, built once, a skeleton for each player, and its walk and run), the cloak in each player's colour, the light they carry |
js/05n-net.js | playing together: joining, the lobby, the others, the shadows' snapshots, the caught ones' view |
js/05f-ambience.js | banners, roots, light shafts, ground fog, rubble |
js/05g-hud.js | inventory panel |
js/05h-skyline.js | castles, towers, temples and villages on the horizon |
js/05i-beyond.js | the world behind the grates |
js/05l-decor.js | theme details: doorways, painted walls, sand, cistern water, wisps |
js/05j-trader.js | the trader between levels |
js/06-game.js | renderer, movement, culling, menu, loading screen, main loop |
js/07-post.js | bloom, colour grading, vignette |
The tests drive the real game in headless Chromium through Playwright:
npm install
npm test # walk-through, game mechanics, stress test over all themes, memory leaks, playing together
npm run test-server # the co-op server's rules (cargo test)
npm run test-live # the real server with three browsers joining it
npm run shot dungeon # screenshots of a level
npm run thumbs # the map pictures in the menu (img/maps)
server/| the co-op server, in Rust with no runtime to install: it serves the game and runs the room (who plays, which level, what is opened, who is through) |