diff --git a/README.md b/README.md new file mode 100644 index 0000000..91a3e20 --- /dev/null +++ b/README.md @@ -0,0 +1,110 @@ +
+ English | 日本語 +
+ +# TriggerOn Server + +Authoritative game server for TriggerOn — a multiplayer networked FPS. Runs on Linux, deployed via Docker. + +## Features + +- **Server-authoritative** physics, movement, and combat simulation +- **32 Hz fixed tick rate** with accumulator-based timestep +- **UDP networking** via ENet +- **Team-based combat** — RED vs BLUE with asymmetric weapon stats +- **Up to 4 players** concurrent +- **Docker-ready** with multi-stage build + +## Requirements + +**Native build:** +- Linux (Debian/Ubuntu recommended) +- g++ with C++17 support +- make + +**Docker build:** +- Docker + +## Quick Start + +```bash +make +./game_server --port=7777 +``` + +## Docker + +```bash +# Build +docker build -t triggeron-server . + +# Run +docker run -p 7777:7777/udp triggeron-server +``` + +### Docker Compose + +To pull and run the published image from Docker Hub: + +```yaml +# docker-compose.yml +services: + game-server: + image: pisto3/triggeron_game_server:latest + ports: + - "7777:7777/udp" + restart: unless-stopped +``` + +```bash +docker compose up -d +``` + +## CLI Options + +| Option | Default | Description | +|--------|---------|-------------| +| `--port=XXXX` | 7777 | UDP port to listen on | + +## Server Parameters + +### General + +| Parameter | Value | +|-----------|-------| +| Tick rate | 32 Hz (31.25 ms/tick) | +| Max players | 4 | + +## Architecture + +The server follows a **server-authoritative** model: + +- **Client → Server**: `InputCmd` (24 bytes) — player intent only (movement axes, yaw/pitch, button bitfield) +- **Server → Client**: `Snapshot` — authoritative world state (positions, velocities, health, flags) + +The server never trusts client positions. All movement, collision, and combat are simulated server-side from input commands. + +Key components: +- `ENetServerNetwork` — UDP peer management, packet routing +- `GameServer` — Per-player state (`unordered_map+ English | 日本語 +
+ +# TriggerOn Server + +マルチプレイヤー FPS「TriggerOn」のサーバー権威型ゲームサーバー。Linux 上で動作し、Docker によるデプロイに対応。 + +## 主な機能 + +- **サーバー権威型** — 物理演算、移動処理、当たり判定をすべてサーバー側で実行 +- **固定ティックレート 32 Hz** — アキュムレータ方式による安定した更新間隔 +- **ENet による UDP 通信** +- **チーム戦** — RED vs BLUE、チームごとに異なる武器性能 +- **最大 4 人** 同時接続 +- **Docker 対応** — マルチステージビルドによる軽量イメージ + +## 動作環境 + +**ネイティブビルド:** +- Linux(Debian / Ubuntu 推奨) +- C++17 対応の g++ +- make + +**Docker ビルド:** +- Docker + +## クイックスタート + +```bash +make +./game_server --port=7777 +``` + +## Docker + +```bash +# ビルド +docker build -t triggeron-server . + +# 実行 +docker run -p 7777:7777/udp triggeron-server +``` + +### Docker Compose + +Docker Hub から公開イメージを取得して実行する場合: + +```yaml +# docker-compose.yml +services: + game-server: + image: pisto3/triggeron_game_server:latest + ports: + - "7777:7777/udp" + restart: unless-stopped +``` + +```bash +docker compose up -d +``` + +## コマンドラインオプション + +| オプション | デフォルト値 | 説明 | +|-----------|------------|------| +| `--port=XXXX` | 7777 | 待ち受け UDP ポート | + +## サーバーパラメータ + +### 全般 + +| パラメータ | 値 | +|-----------|-----| +| ティックレート | 32 Hz(31.25 ms / tick) | +| 最大プレイヤー数 | 4 | + +## アーキテクチャ + +本サーバーは **サーバー権威型モデル** を採用しています。 + +- **クライアント → サーバー**: `InputCmd`(24 バイト) — 移動入力、視点角度、ボタン操作のみ送信 +- **サーバー → クライアント**: `Snapshot` — 位置、速度、HP、状態フラグなどのワールドステートを配信 + +クライアントからの座標は一切信頼せず、すべての移動・衝突判定・戦闘処理をサーバー側で算出します。 + +主要コンポーネント: +- `ENetServerNetwork` — UDP ピア管理、パケットルーティング +- `GameServer` — プレイヤーごとの状態管理(`unordered_map