ClaimSelected() call on GameSession. When it says “Tick,” it means one iteration of the Nakama server loop at 20 Hz. Reading this page once before diving into architecture or gameplay-systems docs will save you hours of confusion.
Why shared vocabulary matters
In a project with three distinct game modes, a domain layer, a presentation layer, and a server-side runtime, the same conceptual thing can easily get called different names by different people: “game” vs “match” vs “session,” “board” vs “grid” vs “play area.” Ambiguous language causes bugs — an engineer optimising the “session timer” and another fixing the “match timer” may not realise they are touching different systems until something breaks in production. The terms below define the ubiquitous language of SET: 3D Edition. Use them exactly as written in code, pull-request descriptions, comments, and conversations.Glossary
These terms reflect the actual class and method names in the codebase. If you see a discrepancy between this glossary and the code during development, update the glossary (and open a discussion) — the vocabulary and the code must stay in sync.
How these terms relate to each other
The diagram below shows how the core terms connect at runtime. An incoming player action travels from Input throughGameSession, touches the Validator, and mutates the Match aggregate (Board, Deck, Players), which then emits reactive state back to the presentation layer.
Common mistakes
Related pages
Introduction
Project overview, tech stack, and design pillars.
Complete SET Rules
Deck structure, the validation algorithm, board logic, and every edge case — all using this vocabulary.
Card Model
How Card, Board, Deck, Player, and Match are implemented as entities and value objects in the domain layer.
Session Lifecycle
SetValidator, AIScanner, BoardManager, GameSession — the classes behind the terms above.