Skip to content

Commit 50003bb

Browse files
authored
Merge pull request #3 from ProjectTriggerOn/main
readme
2 parents b927396 + 53a8f93 commit 50003bb

File tree

2 files changed

+219
-0
lines changed

2 files changed

+219
-0
lines changed

README.md

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
<p align="center">
2+
English | <a href="./README_JP.md">日本語</a>
3+
</p>
4+
5+
# TriggerOn Server
6+
7+
Authoritative game server for TriggerOn — a multiplayer networked FPS. Runs on Linux, deployed via Docker.
8+
9+
## Features
10+
11+
- **Server-authoritative** physics, movement, and combat simulation
12+
- **32 Hz fixed tick rate** with accumulator-based timestep
13+
- **UDP networking** via ENet
14+
- **Team-based combat** — RED vs BLUE with asymmetric weapon stats
15+
- **Up to 4 players** concurrent
16+
- **Docker-ready** with multi-stage build
17+
18+
## Requirements
19+
20+
**Native build:**
21+
- Linux (Debian/Ubuntu recommended)
22+
- g++ with C++17 support
23+
- make
24+
25+
**Docker build:**
26+
- Docker
27+
28+
## Quick Start
29+
30+
```bash
31+
make
32+
./game_server --port=7777
33+
```
34+
35+
## Docker
36+
37+
```bash
38+
# Build
39+
docker build -t triggeron-server .
40+
41+
# Run
42+
docker run -p 7777:7777/udp triggeron-server
43+
```
44+
45+
### Docker Compose
46+
47+
To pull and run the published image from Docker Hub:
48+
49+
```yaml
50+
# docker-compose.yml
51+
services:
52+
game-server:
53+
image: pisto3/triggeron_game_server:latest
54+
ports:
55+
- "7777:7777/udp"
56+
restart: unless-stopped
57+
```
58+
59+
```bash
60+
docker compose up -d
61+
```
62+
63+
## CLI Options
64+
65+
| Option | Default | Description |
66+
|--------|---------|-------------|
67+
| `--port=XXXX` | 7777 | UDP port to listen on |
68+
69+
## Server Parameters
70+
71+
### General
72+
73+
| Parameter | Value |
74+
|-----------|-------|
75+
| Tick rate | 32 Hz (31.25 ms/tick) |
76+
| Max players | 4 |
77+
78+
## Architecture
79+
80+
The server follows a **server-authoritative** model:
81+
82+
- **Client → Server**: `InputCmd` (24 bytes) — player intent only (movement axes, yaw/pitch, button bitfield)
83+
- **Server → Client**: `Snapshot` — authoritative world state (positions, velocities, health, flags)
84+
85+
The server never trusts client positions. All movement, collision, and combat are simulated server-side from input commands.
86+
87+
Key components:
88+
- `ENetServerNetwork` — UDP peer management, packet routing
89+
- `GameServer` — Per-player state (`unordered_map<uint8_t, PlayerData>`), physics tick, combat resolution
90+
- `server_collision.h` — Header-only pure-math collision library (no DirectXMath)
91+
- `server_raycast.h` — Weapon hit detection via raycasting
92+
93+
## Project Structure
94+
95+
```
96+
main.cpp Entry point, signal handling, main loop
97+
Network/
98+
├── game_server.h/cpp Core game logic, physics, combat
99+
├── enet_server_network.h/cpp ENet UDP server implementation
100+
├── net_common.h Protocol structs (shared with client)
101+
├── net_packet.h Packet type enum (shared with client)
102+
├── i_network.h Abstract network interface (shared with client)
103+
├── map_colliders.h Map geometry (shared with client)
104+
├── server_collision.h Collision math (server-only)
105+
└── server_raycast.h Raycast hit detection (server-only)
106+
ThirdParty/
107+
├── enet/ ENet networking library
108+
└── toml++/ TOML config parser (header-only)
109+
```
110+

README_JP.md

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
<p align="center">
2+
<a href="./README.md">English</a> | 日本語
3+
</p>
4+
5+
# TriggerOn Server
6+
7+
マルチプレイヤー FPS「TriggerOn」のサーバー権威型ゲームサーバー。Linux 上で動作し、Docker によるデプロイに対応。
8+
9+
## 主な機能
10+
11+
- **サーバー権威型** — 物理演算、移動処理、当たり判定をすべてサーバー側で実行
12+
- **固定ティックレート 32 Hz** — アキュムレータ方式による安定した更新間隔
13+
- **ENet による UDP 通信**
14+
- **チーム戦** — RED vs BLUE、チームごとに異なる武器性能
15+
- **最大 4 人** 同時接続
16+
- **Docker 対応** — マルチステージビルドによる軽量イメージ
17+
18+
## 動作環境
19+
20+
**ネイティブビルド:**
21+
- Linux(Debian / Ubuntu 推奨)
22+
- C++17 対応の g++
23+
- make
24+
25+
**Docker ビルド:**
26+
- Docker
27+
28+
## クイックスタート
29+
30+
```bash
31+
make
32+
./game_server --port=7777
33+
```
34+
35+
## Docker
36+
37+
```bash
38+
# ビルド
39+
docker build -t triggeron-server .
40+
41+
# 実行
42+
docker run -p 7777:7777/udp triggeron-server
43+
```
44+
45+
### Docker Compose
46+
47+
Docker Hub から公開イメージを取得して実行する場合:
48+
49+
```yaml
50+
# docker-compose.yml
51+
services:
52+
game-server:
53+
image: pisto3/triggeron_game_server:latest
54+
ports:
55+
- "7777:7777/udp"
56+
restart: unless-stopped
57+
```
58+
59+
```bash
60+
docker compose up -d
61+
```
62+
63+
## コマンドラインオプション
64+
65+
| オプション | デフォルト値 | 説明 |
66+
|-----------|------------|------|
67+
| `--port=XXXX` | 7777 | 待ち受け UDP ポート |
68+
69+
## サーバーパラメータ
70+
71+
### 全般
72+
73+
| パラメータ ||
74+
|-----------|-----|
75+
| ティックレート | 32 Hz(31.25 ms / tick) |
76+
| 最大プレイヤー数 | 4 |
77+
78+
## アーキテクチャ
79+
80+
本サーバーは **サーバー権威型モデル** を採用しています。
81+
82+
- **クライアント → サーバー**: `InputCmd`(24 バイト) — 移動入力、視点角度、ボタン操作のみ送信
83+
- **サーバー → クライアント**: `Snapshot` — 位置、速度、HP、状態フラグなどのワールドステートを配信
84+
85+
クライアントからの座標は一切信頼せず、すべての移動・衝突判定・戦闘処理をサーバー側で算出します。
86+
87+
主要コンポーネント:
88+
- `ENetServerNetwork` — UDP ピア管理、パケットルーティング
89+
- `GameServer` — プレイヤーごとの状態管理(`unordered_map<uint8_t, PlayerData>`)、物理ティック、戦闘処理
90+
- `server_collision.h` — ヘッダーオンリーの純粋数学ベース当たり判定ライブラリ(DirectXMath 非依存)
91+
- `server_raycast.h` — 射撃ヒット判定用レイキャスト
92+
93+
## ディレクトリ構成
94+
95+
```
96+
main.cpp エントリーポイント、シグナルハンドリング、メインループ
97+
Network/
98+
├── game_server.h/cpp ゲームロジック、物理演算、戦闘処理
99+
├── enet_server_network.h/cpp ENet UDP サーバー実装
100+
├── net_common.h プロトコル構造体(クライアントと共有)
101+
├── net_packet.h パケットタイプ列挙型(クライアントと共有)
102+
├── i_network.h ネットワーク抽象インターフェース(クライアントと共有)
103+
├── map_colliders.h マップジオメトリ(クライアントと共有)
104+
├── server_collision.h 当たり判定(サーバー専用)
105+
└── server_raycast.h レイキャストヒット判定(サーバー専用)
106+
ThirdParty/
107+
├── enet/ ENet ネットワークライブラリ
108+
└── toml++/ TOML パーサー(ヘッダーオンリー)
109+
```

0 commit comments

Comments
 (0)