diff --git a/hell-let-loose/README.md b/hell-let-loose/README.md deleted file mode 100644 index da0caf6..0000000 --- a/hell-let-loose/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Hell Let Loose - -Hell Let Loose dedicated server package for Gameplane. Runs Unreal Engine dedicated server with match-based gameplay, persistent configuration and logs, Source RCON console on port 22222, and preset community version support. - -## Install - -```sh -kubectl apply -f modules/hell-let-loose/template.yaml -``` - -## Console & RCON - -Remote management uses standard Source RCON on port 22222 TCP. The operator injects the password via `RCON_PASSWORD`. Console actions include `say` (broadcast), `map` (map change), and `kick` (moderation). - -Gameplay is match-based, and server termination does not require a pre-shutdown save command. - -## Ports - -| Name | Port | Protocol | Advertised | Purpose | -| ---- | ---- | -------- | ---------- | ------- | -| `game` | 7787 | UDP | yes | Primary gameplay traffic | -| `query` | 27165 | UDP | yes | Steam A2S query discovery | -| `rcon` | 22222 | TCP | no | Source RCON administration | - -## Storage - -Persistent storage is mounted at `/serverdata/HLL/Saved` (35 GiB default). Server settings, admin lists, and match logs persist across container restarts. - -## Sample - -See [`samples/gameserver.yaml`](samples/gameserver.yaml) for a deployment example. diff --git a/hell-let-loose/module.yaml b/hell-let-loose/module.yaml deleted file mode 100644 index 4cccfc8..0000000 --- a/hell-let-loose/module.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# yaml-language-server: $schema=../.schema/module.schema.json -apiVersion: gameplane.local/module/v1 -name: hell-let-loose -displayName: Hell Let Loose -version: 1.0.0 -game: hell-let-loose -categories: [Shooter, Tactical, WWII, Multiplayer] -summary: Hell Let Loose dedicated server (Unreal Engine) with Source RCON console, match-based rotation, and community modding support. -homepage: https://www.hellletloose.com/ -license: MIT -gameplaneMinVersion: 0.2.0-beta.7 diff --git a/hell-let-loose/samples/gameserver.yaml b/hell-let-loose/samples/gameserver.yaml deleted file mode 100644 index b9d5d27..0000000 --- a/hell-let-loose/samples/gameserver.yaml +++ /dev/null @@ -1,31 +0,0 @@ -apiVersion: gameplane.local/v1alpha1 -kind: GameServer -metadata: - name: hell-let-loose-01 - namespace: gameplane-games -spec: - templateRef: - name: hell-let-loose - - version: default - - config: - SERVER_NAME: "Gameplane Hell Let Loose Server" - SERVER_PASSWORD: "" - RCON_PASSWORD: "secret-rcon-password" - MAX_PLAYERS: "100" - - networking: - expose: NodePort - portOverrides: - - name: game - nodePort: 30787 - - name: query - nodePort: 32165 - - storage: - size: 35Gi - - resources: - requests: { cpu: 2, memory: 8Gi } - limits: { cpu: 6, memory: 16Gi } diff --git a/hell-let-loose/specs.md b/hell-let-loose/specs.md deleted file mode 100644 index ee4ea78..0000000 --- a/hell-let-loose/specs.md +++ /dev/null @@ -1,80 +0,0 @@ -# Gameplane Module Specification: Hell Let Loose - -## 1. Purpose & Scope - -- **Game**: Hell Let Loose -- **Module Slug**: `hell-let-loose` -- **Role**: Dedicated server module package for Gameplane. -- **Description**: Dedicated multiplayer server for Black Matter / Team17's Hell Let Loose, featuring large-scale 100-player WWII matches, Source RCON console administration, and optional Vietnam community preset. - ---- - -## 2. Container Image & Architecture - -- **Base Image**: `ghcr.io/valgulnecron/gameplane/hell-let-loose:latest@sha256:0000000000000000000000000000000000000000000000000000000000000000` -- **Architecture**: `linux/amd64` -- **Runtime Model**: SteamCMD Linux dedicated server running Unreal Engine. -- **User & Execution Context**: UID 1000, GID 1000, working directory `/serverdata`. - ---- - -## 3. Network Ports & Protocols - -Declared ports under `spec.ports`: - -| Port Name | Container Port | Protocol | Usage / Purpose | -|---|---|---|---| -| `game` | 7787 | UDP | Primary client gameplay traffic | -| `query` | 27165 | UDP | Steam A2S query discovery | -| `rcon` | 22222 | TCP | Remote administrative console (Source RCON) | - ---- - -## 4. Storage & Persistence Layout - -- **Mount Path**: `/serverdata/HLL/Saved` -- **Default Sizing**: `35Gi` -- **Persisted Content**: - - Server configuration files (`Game.ini`, `Engine.ini`) - - Admin lists and ban files - - Match history and rotation logs -- **Non-Shadowing Invariant**: The mount path isolates the `Saved/` directory without shadowing the server binaries in `/serverdata`. - ---- - -## 5. Administration & Remote Console (RCON) - -- **Protocol**: `source` -- **Console Mode**: `rcon` -- **Authentication**: Password supplied via `RCON_PASSWORD`. -- **Command Support**: Standard HLL RCON commands (`say`, `map`, `kick`). - ---- - -## 6. Modding & Workshop Integration - -- **Modding Framework**: Unreal Engine / community mod presets. -- **Mod Directory Path**: Handled via version catalog presets. - ---- - -## 7. Lifecycle & Graceful Shutdown - -- **Stop Command Sequence (`spec.capabilities.lifecycle.stop`)**: - - Stateless match-based architecture; no world save required prior to shutdown. -- **Signal Handling**: Server cleanly handles `SIGINT`/`SIGTERM`. - ---- - -## 8. Key Invariants & Security - -- **User Matching**: `spec.security.runAsUser: 1000` matches image user. -- **Environment**: `spec.env` contains `HOME=/serverdata`. -- **Filesystem Permissions**: `spec.security.fsGroup: 1000` configured for volume permissions. - ---- - -## 9. References & Upstream Documentation - -- Hell Let Loose Server Administration: https://www.hellletloose.com/ -- Steam Dedicated Server AppID: 686810 diff --git a/hell-let-loose/template.yaml b/hell-let-loose/template.yaml deleted file mode 100644 index 41be835..0000000 --- a/hell-let-loose/template.yaml +++ /dev/null @@ -1,144 +0,0 @@ -# yaml-language-server: $schema=../.schema/gametemplate.schema.json -# Gameplane GameTemplate for Hell Let Loose (dedicated server). -# -# Runs Unreal Engine dedicated server with Source RCON on TCP 22222. -# Match-based rotation with persistent configurations under /serverdata/HLL/Saved. -# -# Cluster-scoped; apply once per cluster: -# kubectl apply -f modules/hell-let-loose/template.yaml - -apiVersion: gameplane.local/v1alpha1 -kind: GameTemplate -metadata: - name: hell-let-loose - labels: - gameplane.local/module: hell-let-loose -spec: - displayName: Hell Let Loose - game: hell-let-loose - version: 1.0.0 - categories: [Shooter, Tactical, WWII, Multiplayer] - accentColor: "#7f1d1d" - description: | - Hell Let Loose dedicated multiplayer server. Source RCON powers remote - console moderation, map rotation, and server administration on TCP port 22222. - Server configuration and match logs persist under `/serverdata/HLL/Saved`. - - image: ghcr.io/valgulnecron/gameplane/hell-let-loose:latest@sha256:0000000000000000000000000000000000000000000000000000000000000000 - - versions: - - id: default - displayName: "Default (WWII)" - image: ghcr.io/valgulnecron/gameplane/hell-let-loose:latest@sha256:0000000000000000000000000000000000000000000000000000000000000000 - default: true - - id: vietnam - displayName: "Vietnam Community Preset" - image: ghcr.io/valgulnecron/gameplane/hell-let-loose:vietnam@sha256:0000000000000000000000000000000000000000000000000000000000000000 - default: false - - env: - - name: HOME - value: /serverdata - - security: - runAsUser: 1000 - runAsGroup: 1000 - fsGroup: 1000 - - ports: - - name: game - containerPort: 7787 - protocol: UDP - advertise: true - - name: query - containerPort: 27165 - protocol: UDP - advertise: true - - name: rcon - containerPort: 22222 - protocol: TCP - advertise: false - - storage: - size: 35Gi - mountPath: /serverdata/HLL/Saved - - resources: - requests: {cpu: "2", memory: 8Gi} - limits: {cpu: "6", memory: 16Gi} - - rcon: - protocol: source - port: 22222 - passwordEnv: RCON_PASSWORD - - consoleMode: rcon - - probes: - startup: - tcpSocket: - port: rcon - initialDelaySeconds: 60 - periodSeconds: 15 - failureThreshold: 60 - readiness: - tcpSocket: - port: rcon - periodSeconds: 10 - failureThreshold: 6 - liveness: - tcpSocket: - port: rcon - periodSeconds: 30 - failureThreshold: 5 - - capabilities: - actions: - - id: broadcast - displayName: Broadcast - icon: megaphone - group: Server - command: 'say "{{.Params.message}}"' - params: - - name: message - displayName: Message - type: string - required: true - - id: change-map - displayName: Change Map - icon: map - group: Game - command: "map {{.Params.map}}" - params: - - name: map - displayName: Map Name - type: string - required: true - - id: kick-player - displayName: Kick Player - icon: user-x - group: Moderation - command: "kick {{.Params.user}}" - params: - - name: user - displayName: Player Name - type: string - required: true - - configSchema: - - name: SERVER_NAME - displayName: Server Name - type: string - default: "Gameplane Hell Let Loose Server" - - name: SERVER_PASSWORD - displayName: Server Password - type: password - default: "" - - name: RCON_PASSWORD - displayName: RCON Password - type: password - default: "" - - name: MAX_PLAYERS - displayName: Max Players - type: int - default: 100 diff --git a/validate.py b/validate.py index 91614c1..6e9033e 100644 --- a/validate.py +++ b/validate.py @@ -1076,7 +1076,6 @@ def rule_template_version_matches_module(spec: dict, module_version: str | None, "satisfactory", "ark-survival-evolved", "arma-reforger", - "hell-let-loose", "squad", } @@ -1085,7 +1084,7 @@ def rule_directory_layout(module_dir: Path) -> list[Finding]: """Ensure required metadata, documentation, and samples are present. Fires at ERROR severity when README.md, specs.md, or a non-empty samples/ - directory is missing. Scoped to the 26 top-Steam modules or any module + directory is missing. Scoped to the 25 top-Steam modules or any module with a .layout-enforced marker file. """ if module_dir.name not in LAYOUT_ENFORCED_MODULES and not (module_dir / ".layout-enforced").exists():