CoOp:Anything
게임을 검색해 협동 플레이 가능한 모드·단계·품질·커뮤니티 평점을 확인합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Online Ludo for friends: pick colors, roll real dice play live with a room code
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Every Ludo ever played. Ludo in the browser, made for phones, with Pachisi, Chowka Bara, Challas Aath and other variations to follow:
/r/<code>), plus table chat.Random dice (browser cryptographic randomness) shown as a real 3D dice that tumbles when rolled. The odds lean a little with the game to keep it engaging: help after many rolls stuck in the yard or waiting for an exact number near home, slightly better odds of cutting a player who's ahead, fewer long droughts and repeat streaks, and a completely fair dice when two players are close to winning. Every number always stays between 10% and 30% likely, and the same rules apply to every player (see src/lib/game/luck.ts). Themes (Maharaja by default, Royal Darbar, Sapphire, Midnight, Wooden, Candy and Classic felt) with their own board designs, step-by-step or glide token movement, sound effects, and confetti + a winner popup at the end.
Built with Next.js (App Router) + TypeScript + Tailwind CSS v4 + shadcn/ui.
npm install
npm run dev # http://localhost:3000
npm run build # production build
npm run typecheck
Deployed on Vercel: every push to main deploys.
src/
app/ Routes
page.tsx Main menu
play/[mode]/page.tsx Setup for online | computer | local | friends
game/page.tsx Online, vs-computer and pass-and-play games
r/[code]/page.tsx A private friends room (invite links)
components/
ui/ shadcn/ui components (button, card, dialog, input, label, switch)
game/ Board, 3D dice, name tags, side panel, chat, winner popup, confetti
menu/ Menu and setup screens
settings/ Settings sheet (themes, movement, sounds)
layout/, providers/ Header, theme application
hooks/use-game.ts React bindings: useGame(), useProfile(), useSettings()
lib/
game/ Framework-free game code
rules.ts Pure Ludo rules (no browser APIs: can run on a server)
controller.ts Runs a table: dice timing, bots, sync, chat, animations
constants.ts, geometry.ts, dice.ts, types.ts
net/
transport.ts RoomTransport interface: how devices at a table talk
peer-transport.ts Today's implementation: peer-to-peer via PeerJS
services/ Where user data lives (see below)
theme/, settings/, audio/ Themes, settings model, Web Audio sound effects
All user data goes through the interfaces in src/lib/services/types.ts:
| Service | Today | Later |
|---|---|---|
AuthService | guest id in localStorage | real sign-in (NextAuth / Clerk / Supabase …) |
ProfileRepository | name, colour, preferred table sizes in localStorage | user profile in your database |
SettingsRepository | theme / sounds / movement in localStorage | synced per account |
GameSaveRepository | unfinished offline game, room cache | saved games / match history |
To switch, implement those interfaces (e.g. ApiProfileRepository) and return them from
createServices() in src/lib/services/index.ts. Repositories are cache-first: load()
fetches once, get() is synchronous, save() writes through, so the UI and game code don't change.
Online play is peer-to-peer today. A real game server can replace it by implementing
RoomTransport (src/lib/net/transport.ts) over WebSockets, with the server acting as the room host,
and passing it to new GameController(services, createServerTransport).