# Code Style ## Naming | Kind | Convention | Examples | |---|---|---| | Variables & functions | camelCase | `fighterMap`, `startBattle()`, `getFullParty()` | | Classes, enums, enum values | PascalCase | `BattleFighter`, `FighterTeam`, `ALLY` | | Constants & static data | SCREAMING_SNAKE_CASE | `CUTSCENE_CONTINUE`, `ITEM_DATA`, `PARTY_JOHN` | | Private/internal helpers | leading underscore | `_onConversationInteract()`, `_applyGravity()` | No trailing underscores. Leading underscore = "don't call this externally." ## Formatting - **2-space indent** — not 4, not tabs - **Type annotations everywhere**: `var health:int`, `func damage(amount:int, crit:bool) -> void:` - **No space** between name and type: `var foo:int` not `var foo : int` - Blank lines between logical sections; comment headers label groups: `# Health`, `# Signals` ## General Rules - `assert()` for invariants and preconditions — prefer over silent failures - `params:Dictionary` for multi-argument constructors/callables; access with `.get('key', default)` or `.has('key')` guards - `match` for enum dispatch; `if/elif` chains for non-exhaustive checks - `continue` / early `return` to flatten nesting instead of deep else-branches - Avoid long inline lambdas — extract named static functions when logic is non-trivial