diff --git a/README.md b/README.md index 0d71220..96bc8f4 100644 --- a/README.md +++ b/README.md @@ -1,217 +1,56 @@ -# Auto Tournament game packs +
+

Auto Tournament game packs

+

Games for Auto Tournament, as data files you can review and import

+

+ License: PolyForm Noncommercial + Docs + Discord +

+
-Games for [Auto Tournament](https://github.com/Auto-Tournament/auto-tournament), -as files. +
-
+A game pack describes one game for [Auto Tournament](https://github.com/Auto-Tournament/auto-tournament): its name, its square tile and how a result gets reported. Nothing in a pack runs. It is data for a module the platform already has, which is what makes a pack safe to review in a pull request and import from a stranger. -### Sponsor Auto Tournament +A pack is for a game the platform can't watch: the teams know the result and report it (Rocket League, chess, a fighting game on a console). A game the platform watches by reading a game server, like Counter-Strike 2, needs code and is a different kind of module. -Running tournaments or LANs with Auto Tournament? Your organisation can keep it growing. -Auto Tournament is built and maintained by one person — sponsorships pay for development, test servers and infrastructure. +## Features -[![Sponsor on GitHub](https://img.shields.io/badge/Sponsor-GitHub-ea4aaa?logo=githubsponsors&logoColor=white)](https://github.com/sponsors/sivert-io) -[![Support on Ko-fi](https://img.shields.io/badge/Support-Ko--fi-ff5e5b?logo=kofi&logoColor=white)](https://ko-fi.com/sivert) -[![Become a sponsor](https://img.shields.io/badge/Become%20a%20sponsor-Discord-5865F2?logo=discord&logoColor=white)](https://discord.gg/n7gHYau7aW) +- Packs for games without a server integration, run on the `manual-report` engine +- Results confirmed by the other captain or by an admin, with a timeout +- Optional per-player stats (kills, goals, ...) for each game +- A square tile per game, drawn for this project, and the game's own app icon where one is allowed +- `index.json` and `catalog.json`, so an instance can list every pack without downloading them all -Using it for a business, paid events or hosting? That needs a commercial licence → [Licensing](https://docs.autotournament.gg/reference/licensing) +## Install -
+In your Auto Tournament instance, open **Modules** and browse the game packs, then import the ones you want. You can also download a pack file from `packs/` and upload it on the same page. + +## Documentation + +Full docs at **[docs.autotournament.gg](https://docs.autotournament.gg)**. In this repo: -A **game pack** describes one game: its name, its square tile, and how a -result gets reported. Nothing in a pack executes — it is data, and it runs on -a module the platform already has. That is what makes a pack safe to hand -around, review in a pull request, and import from a stranger. - -An admin imports one from **Modules** in their instance, either by browsing -this repo from inside the app or by downloading a file and uploading it. - -## What a pack can and cannot do - -A pack works for a game **the platform cannot watch** — the teams know the -result and report it. Rocket League, chess, a fighting game on a console in -somebody's living room. - -A game the platform *watches*, reading rounds off a game server the way it -does for Counter-Strike 2, is not a pack. That needs code, and code is a -different kind of module. - -## The format - -```json -{ - "schema": 1, - "slug": "call-of-duty", - "name": "Call of Duty", - "engine": "manual-report", - "aliases": ["cod"], - "version": "1.0.0", - "description": "One line. Shown on the Modules page.", - "icon": "../icons/call-of-duty.svg", - "report": { "confirmation": "opponent", "confirmTimeoutMin": 60 }, - "stats": [ - { "key": "kills", "label": "Kills", "type": "integer", "scope": "player" } - ] -} -``` - -| Field | Required | What it is | -| --- | --- | --- | -| `schema` | yes | `1`. An instance refuses a schema it does not read. | -| `slug` | yes | `lower-case-with-hyphens`. The game's usual slug (`counter-strike-2`, `rocket-league`), so search enriches the same row instead of adding a second. | -| `name` | yes | What people call the game. | -| `igdbId` | no | Legacy. Game search used IGDB before 3.0 and uses Wikidata now. This id only links games that an older instance added through IGDB search to this pack. New packs leave it out. | -| `engine` | yes | The module that runs it. `manual-report` today. | -| `aliases` | no | Extra search terms. | -| `version` | no | Your own version string. Re-importing the same slug updates it. | -| `description` | no | One line, at most 300 characters. | -| `icon` | no | Where the tile lives, relative to this file — `../icons/.svg`. A path, never markup and never a URL. Without one the app shows the game's text mark. | -| `appIcon` | no | Where the game's own square app icon lives, relative to this file — `../app-icons/.webp`. A PNG or WebP, never a URL. Without one the small game pills show the game's initials. | -| `report.confirmation` | no | `opponent` (the other captain agrees) or `admin`. | -| `report.confirmTimeoutMin` | no | How long the opponent has before it goes to an admin. | -| `stats` | no | Up to 40 fields. `type` is `integer`, `decimal` or `text`; `scope` is `player` or `team`. | -| `account` | no | The account players need for this game, as a sign-in provider: `steam`, `epic`, `discord`, `google`, `github`, `twitch` or `oidc`. It lists the game under that account on people's connections page (Rocket League → Epic Games). Leave it out when the game is on several platforms. Needs an instance that knows the field (older 3.0 betas refuse it). | - -Unknown fields are refused rather than ignored, so a pack written for a newer -schema fails loudly instead of quietly doing less than it says. - -## Tiles - -A tile is a square SVG, full bleed, drawn in the Auto Tournament palette — -every fill written as `fill="var(--at-ember, #ff6a3d)"` with a hex fallback, -so the tile follows whatever theme the instance is using and still looks right -opened on its own. The variables are listed in the platform repo under -`brand/modules/README.md`. - -Tiles are checked on import against a strict allowlist of elements and -attributes, and **rejected, not stripped**, if they contain anything else. A -tile is inlined into the admin's page, so a `