A risk like game, in TypeScript, revamped for quick bataille and fun.
- real time unit movements
- turn by turn income (7s)
- up to 6 players (will probably be increased when popularity will grow)
- public in-game discussion
- game time: 10-20min
- optional passkey account (no password, no email) with a leaderboard; guests still play
Everything is build around Node & TypeScript, using Phaser4 for the game engine on the web (webgl) and socket.io for server-client communication.
Requires Node 26 (see .nvmrc).
- Copy
.env.exampleto.envand fill:VITE_SOCKET_URL=localhost:3001SUMOLOGIC_COLLECTORcan stay blank (used to track number of games played)TELEGRAM_BOT_TOKENandTELEGRAM_CHAT_IDcan stay blank; set both to get a Telegram ping when a player starts waiting in the lobbyWEBAUTHN_RP_IDandWEBAUTHN_ORIGINdefault tolocalhost/http://localhost:3000; in production set them to the domain and origin the game page is served from (bataille.ovh/https://bataille.ovh). The Docker image carries no.env: set them in the hosting panel next toADMIN_KEY
npm inpm run startnpm run start-server- Open
localhost:3000, local dev should work with one player, online require 2 players.
To run the server as the production image instead of npm run start-server, with the same .env:
docker compose -f dev.docker-compose.yml up --build- Unit moving crossing another allied troop merge, not idea if they are just on there way
- Display the path finding preview and selected cell
- Add unit test on the server loop and code
- Optimize server performance
- Very fun game! However, one thing that bothered me is that in the early game, where there is a massive amount of cities changing hands, the center of the screen tends to be filled. I suggest moving takeover notices that don't include you to a bottom corner, while keeping the ones that do involve you in the center.
- Don't display AI killing themself messages
