Skip to main content
Every member of the team — engineer, designer, QA — uses the same vocabulary when discussing SET: 3D Edition. This is not a loose collection of metaphors; these terms map directly to classes, interfaces, and enums in the codebase. When a document says “Claim,” it means the 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.
Bookmark this page. Architecture, gameplay-systems, and networking documents assume you already know these terms and will not define them inline.

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 through GameSession, touches the Validator, and mutates the Match aggregate (Board, Deck, Players), which then emits reactive state back to the presentation layer.

Common mistakes

Common mistake — “Session” vs “Match”: In everyday speech people say “I was in the middle of a game/session.” In this codebase, Match is the domain data (the cards, scores, rules) and Session (GameSession) is the runtime orchestrator that drives the Match through its state machine. They are different objects. Never access Match fields directly from the presentation layer; go through GameSession’s observable streams.

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.