Adds IS NOT to the Part II parser and a resolution pass (negation, then
identity lock) that turns parsed rules into the rules in force; harness
gains activeRules() and hasProperty(). A leading NOT now breaks the
sentence instead of being ignored (carried from M6 review). Nouns say
which objects they name ("selects"), so the ALL Expansion Drop is one
line of data. Corrects lesson 06's NOT wording; harness.md M7 details.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
45 lines
1.8 KiB
TypeScript
45 lines
1.8 KiB
TypeScript
// Engine core: generic rules machinery. Never name a specific card here.
|
|
//
|
|
// Module 1: every card in the game is an entity addressed by an id handle.
|
|
// The engine knows which zone each entity is in, who owns it, and when it
|
|
// entered play.
|
|
//
|
|
// Module 2: heroes, Health, Attack and Armor; triggered abilities; and the
|
|
// action queue that resolves a Sequence depth-first, recording an event log.
|
|
//
|
|
// Module 3: deferred death. Damage and destroy effects only mark minions; the
|
|
// Death Creation Step removes them when the outermost Phase ends, and Death
|
|
// Phases resolve their Deathrattles until no new deaths occur.
|
|
//
|
|
// Module 4: auras as card data, Aura Updates at defined points, and one
|
|
// routine that decides how many times a queued trigger activates. Playing a
|
|
// minion from hand, and Battlecries.
|
|
//
|
|
// Module 5: behaviour as data. Cards are definitions in the course's card format,
|
|
// loaded from JSON; one interpreter turns their effects into actions. Assemble
|
|
// builds a new card by swapping half of one card's text for half of another's.
|
|
//
|
|
// Part II lives in `puzzle/`: a second engine, for the rule-writing puzzle game,
|
|
// beside the first.
|
|
// Module 6: the grid, the lexer and the parser.
|
|
// Module 7: `IS NOT`, and the resolution pass that turns parsed rules into rules in force.
|
|
|
|
export * as puzzle from "./puzzle";
|
|
export { AssembleError, assemble, registerAssembled, type Half } from "./assemble";
|
|
export {
|
|
CardLibrary,
|
|
triggerLabel,
|
|
type Aura,
|
|
type Card,
|
|
type CardDef,
|
|
type Clause,
|
|
type Effect,
|
|
type PoolFilter,
|
|
type Target,
|
|
type Trigger,
|
|
type TriggerOn,
|
|
} from "./card";
|
|
export type { Event } from "./event";
|
|
export { Ctx, runSequence, summon, type Action } from "./queue";
|
|
export { HERO_HEALTH, World, type Chooser, type EntityId, type PlayerId, type Zone } from "./world";
|