--- id: kw-model name: model category: structure kind: keyword tokens: model sig: model Name { PropA, PropB, … } tip: A named kind of thing — a fixed bundle of properties you spawn by one name. order: 2 --- A model names a kind of thing in your game and the fixed set of properties every instance of it carries. Instead of attaching properties one by one, you `spawn` the model by name and every listed property comes with it, seeded from its defaults. A model's name doubles as a query tag: write `{Player}` inside a `query [...]` to match only instances of that model. The model itself has no fields of its own, so you never bind it to a variable — you bind its properties and filter by its tag. ```ludic program Arena { property Position { column: int = 0, row: int = 0 } property Velocity { delta_x: int = 0, delta_y: int = 0 } property Health { current: int = 100, maximum: int = 100 } model Player { Position, Health } model Enemy { Position, Velocity, Health } handler Spawn phase Start { spawn Hero { Position { column: 2, row: 8 } } spawn Grunt { Position { column: 18, row: 8 }; Velocity { delta_x: -1 } } } handler AdvanceEnemies phase Update { for (position, velocity) in query [Position, Velocity, {Enemy}] { position.column = position.column + velocity.delta_x } } } ```