Rejection codes
A command the engine cannot accept comes back with a rejection: a structured refusal
carrying a dotted snake_case code, never an exception. Validation is a pure
pre-phase, so a rejected command consumes no randomness, no game time, and mutates
nothing — in-fiction failures are a normal outcome, not an error. See
Rejection and
CommandResult.
This page lists every rejection code the engine emits, grouped by namespace. Each command's own documentation lists the codes it can come back with.
battle.*
| Code | Meaning |
|---|---|
battle.declaration.cannot_move |
A character declares a move while dead, paralyzed, petrified, asleep, or entangled (such as by a web spell), any of which makes movement impossible this round. |
battle.declaration.invisible_target |
A spell or item-use declaration names a specific target that is currently invisible, and the engine won't let the caster target something they can't see. |
battle.declaration.item_unusable |
The declared item has no usable combat effect: it isn't a weapon-capable item in the character's inventory, or it's a magic item category (other than a potion, scroll, rod, staff, or wand) that has no defined combat use. |
battle.declaration.missing_move |
A move action is declared without specifying which kind of movement (closing distance, retreating, or a fighting withdrawal) the character is taking. |
battle.declaration.missing_spell |
A cast action is declared without specifying which spell to cast or which mode of that spell to use. |
battle.declaration.no_target |
The chosen enemy group has no living, visible monster in its front rank that can currently be targeted. |
battle.declaration.not_in_front_rank |
A character who isn't in the party's front rank declares a melee attack, and the formation-width rule in effect this round means only front-rank members are within melee range. |
battle.declaration.roster_mismatch |
The set of characters submitting declarations for the round doesn't exactly match the party members who are currently able to act and are expected to declare. |
battle.declaration.unknown_action |
The declaration's action type isn't one the engine recognizes as a legal move for the round (such as hold, move, attack, use_item, turn_undead, or cast). |
battle.declaration.unknown_group |
The declaration references a target group that doesn't exist in the current encounter, or that has already fled or surrendered. |
battle.declaration.weapon_not_wielded |
An attack declaration names a weapon the character isn't currently wielding. |
battle.none_active |
The command tries to resolve a battle round, but no battle is currently in progress in the session. |
combat.*
| Code | Meaning |
|---|---|
combat.attack.attacker_blind |
The attacking combatant is blinded and cannot make an attack this round. |
combat.attack.attacker_incapacitated |
The attacking combatant is dead, petrified, paralysed, asleep, or weakened, and therefore cannot make an attack. |
combat.attack.out_of_range |
The target is farther away than the attacking missile weapon's longest range band. |
combat.attack.out_of_reach |
The attacker declared a melee attack, or a melee-range magic item effect, against a target or group more than 5 feet away. |
combat.attack.reload |
The attacker tried to fire a weapon that requires a reload, such as a crossbow, again this round after firing it last round without a round spent reloading in between. |
combat.breath.exhausted |
The monster has already used its breath weapon the maximum number of times allowed per day. |
combat.breath.no_breath_weapon |
The monster attempting to breathe does not have a breath weapon ability at all. |
creation.*
| Code | Meaning |
|---|---|
creation.adjustment.above_cap |
The player tried to raise a prime requisite ability score by an amount that would push it above the maximum score of 18. |
creation.adjustment.below_floor |
The player tried to lower an ability score by an amount that would drop it below the minimum allowed score of 9. |
creation.adjustment.class_restriction |
The player tried to lower an ability score that the chosen class specifically forbids lowering, such as a thief's Strength. |
creation.adjustment.not_lowerable |
The player tried to lower an ability score other than Strength, Intelligence, or Wisdom, the only three scores that can be traded down during character creation. |
creation.adjustment.points_mismatch |
The points added to raised ability scores do not equal half the points removed from lowered ability scores, as the two-for-one trade requires. |
creation.adjustment.prime_requisite_lowered |
The player tried to lower one of the chosen class's prime requisite ability scores, which cannot be traded away. |
creation.adjustment.raise_not_prime_requisite |
The player tried to raise an ability score that is not one of the chosen class's prime requisites. |
creation.adjustment.reduction_not_even |
The player tried to lower an ability score by an odd number of points; each reduction must be an even amount. |
creation.class.requirements_not_met |
One of the character's rolled ability scores falls below the chosen class's minimum requirement for that ability. |
creation.languages.duplicate_choice |
The player selected the same extra language more than once among the character's language choices. |
creation.languages.duplicates_native |
The player chose an extra language that the character's class already speaks natively. |
creation.languages.not_available |
The player chose a language that does not appear on the list of languages available for extra selection. |
creation.languages.too_many |
The player chose more extra languages than the character's Intelligence score allows. |
encounter.*
| Code | Meaning |
|---|---|
encounter.evade.already_evading |
The party sends another evade command while it is already fleeing and being chased in the current encounter. |
encounter.evade.nothing_to_drop |
The party tries to drop treasure or food to slow its pursuers, but no living party member is carrying anything of that kind to drop. |
encounter.none_active |
The command applies only during an encounter, but no encounter is currently active in the session. |
encounter.parley.mid_pursuit |
The party tries to open negotiations while a pursuit is underway, and parley isn't available once a chase has started. |
encounter.turning.mid_pursuit |
A cleric tries to turn undead while a pursuit is underway, and turning isn't available once a chase has started. |
exploration.*
| Code | Meaning |
|---|---|
exploration.action.requires_light |
The character tried to take an action that needs light, and neither the party's active light source nor the character's infravision (where it would apply) is available. |
exploration.door.already_closed |
The party tried to close a door that is already closed. |
exploration.door.already_open |
The party tried to open or force a door that is already standing open. |
exploration.door.locked |
The party tried to open or force a door that is locked and hasn't yet been unlocked. |
exploration.door.no_door |
The party targeted a direction that has no known door — it's either solid wall or a secret door the party hasn't discovered yet. |
exploration.door.no_spike |
The party tried to wedge a door open, but no member is carrying an item, such as iron spikes, to wedge it with. |
exploration.door.not_stuck |
The party tried to force open a door that isn't stuck, so forcing it isn't necessary. |
exploration.door.stuck |
The party tried to open a stuck door the normal way; it must be forced open instead. |
exploration.door.wedged |
The party tried to close or re-wedge a door that a spike or similar item is already holding open. |
exploration.feature.emptied |
The party tried to take treasure from a cache that has already been emptied. |
exploration.feature.unknown |
The command references a feature at the party's location that doesn't exist, or that isn't the kind of feature (such as a treasure cache) the action expects. |
exploration.item.not_carried |
The character or party doesn't currently have the referenced item, coin amount, or dropped item in their possession at this location. |
exploration.item.not_equipped |
The character tried to unequip an item that isn't currently worn or wielded. |
exploration.light.no_flame |
The party has no open flame currently burning to light this from, and the character isn't carrying a tinder box to strike a new one. |
exploration.light.not_a_source |
The party tried to light an item that isn't a light source — only a torch, lantern, or flask of oil can be lit. |
exploration.light.not_burning |
The character tried to extinguish a torch or lantern, but has none currently lit. |
exploration.listen.already_tried |
The character already listened at this door and can't attempt it again. |
exploration.lock.locked_out |
The character already failed to pick this lock and hasn't gained a level since, so they can't try it again yet. |
exploration.lock.no_tools |
The character tried to pick a lock without carrying thieves' tools. |
exploration.lock.not_a_thief |
The character's class has no thief skills, so they can't attempt to pick locks. |
exploration.lock.not_locked |
The character tried to pick a lock on a door that isn't locked, or whose lock is already open. |
exploration.move.blocked |
The party tried to move in a direction that isn't passable — a wall, a closed door, or an undiscovered secret door. |
exploration.move.cannot_move |
The party can't move because a member is carrying more than their maximum load, or because a living member is incapacitated or entangled. |
exploration.party.bad_order |
The proposed marching order doesn't list exactly the party's current members. |
exploration.search.already_tried |
The character already searched here for this same kind of thing and can't try again. |
exploration.stairs.none |
The party tried to use stairs or a level transition at a location that has none. |
exploration.trap.already_resolved |
The party tried to disarm or remove a trap that has already been removed or has already sprung. |
exploration.trap.not_a_thief |
The character's class has no thief skills, so they can't find or remove traps on treasure. |
exploration.trap.not_found |
The party tried to remove a trap that hasn't been discovered yet. |
exploration.travel.not_at_entrance |
The party tried to travel to town from somewhere other than the dungeon level's mapped entrance. |
items.*
| Code | Meaning |
|---|---|
items.curse.stuck |
The character tried to unequip or drop a magic item that has already revealed itself as cursed, and a cursed item stays bound to its bearer until a remove curse effect lifts it. |
items.device.inert |
The character tried to activate a charged magic device, such as a wand, staff, or rod, that has no charges remaining. |
items.equip.armour_forbidden |
The character tried to equip body armour, but the class's armour policy forbids wearing armour of any kind. |
items.equip.armour_not_allowed |
The character tried to equip a piece of body armour other than leather, but the class's armour policy restricts it to leather armour only. |
items.equip.not_equippable |
The character tried to equip an item the engine doesn't treat as equippable at all, such as a potion, a scroll, plain ammunition, gear with no combat use, or a magic item whose underlying base item can't be identified. |
items.equip.not_usable |
The character tried to equip a magic device or miscellaneous magic item whose own usability restriction doesn't permit that class to use it. |
items.equip.shield_forbidden |
The character tried to equip a shield, but the class's armour policy doesn't allow shields. |
items.equip.two_handed_with_shield |
The character tried to equip a two-handed weapon while a shield is already equipped, or a shield while a two-handed weapon is already wielded, and the two cannot be used together. |
items.equip.weapon_forbidden |
The character tried to equip a weapon that the class's weapon policy explicitly excludes. |
items.equip.weapon_not_allowed |
The character tried to equip a weapon that isn't on the class's list of permitted weapons. |
items.purchase.insufficient_funds |
The character tried to buy equipment or pay for a temple healing service whose total cost is more coin than the character's purse currently holds. |
items.ring.hands_full |
The character tried to equip a third magic ring while already wearing the maximum of two. |
items.scroll.no_such_spell |
The character tried to read a spell from a scroll that isn't among the spells still inscribed on it. |
items.scroll.spent |
The character tried to read from a scroll whose inscribed spells have all already been used up. |
items.scroll.wrong_caster |
The character tried to read an arcane or divine scroll but the character's class can't cast that kind of magic, and, for a thief attempting a magic-user scroll, doesn't meet the minimum level for that exception. |
items.use.battle_only |
The character tried to activate a magic device whose effect resolves as a strike against a target, which is only possible during battle. |
items.use.not_usable |
The character tried to activate a magic device, such as a wand, staff, or rod, whose own usability restriction doesn't permit that class to use it. |
items.use.target_required |
The character tried to activate an area-effect magic device during an encounter without naming which monster group to target. |
items.use.unknown_target |
The character tried to activate a magic device against a target, an encounter group or a character, that doesn't exist, has already fled or surrendered, or otherwise can't be resolved. |
magic.*
| Code | Meaning |
|---|---|
magic.book.already_chosen |
The character's starting spell book has already been chosen once and cannot be set a second time. |
magic.book.capacity_exceeded |
Adding this spell to the caster's spell book would push the number of book entries at that spell level above the caster's current spell slots for that level. |
magic.book.capacity_mismatch |
The number of starting spells chosen at a given spell level doesn't exactly equal the number of level-1 spell slots the class receives at that level. |
magic.book.duplicate |
The chosen spell already appears in the caster's spell book, whether it was picked twice among the starting choices or is already present from an earlier addition. |
magic.book.not_arcane |
The character's class is not an arcane spellcaster, so it cannot be given starting spells or have spells added to a spell book. |
magic.book.unknown_spell |
The spell id supplied for a starting-spell choice or spell-book addition doesn't match any spell in the loaded spell catalog. |
magic.book.wrong_list |
The spell being chosen as a starting spell or added to a spell book belongs to a different spell list than the one the caster's class uses. |
magic.cast.anti_magic_shell |
An anti-magic shell effect is currently active on the caster, which blocks the caster from casting any spell while inside it. |
magic.cast.caster_incapacitated |
The caster is dead, petrified, paralysed, asleep, silenced, feebleminded, or weakened, any of which leaves it unable to cast spells. |
magic.cast.caster_restrained |
The caster is bound or gagged, and casting a spell requires both free hands and the ability to speak. |
magic.cast.not_memorized |
The caster has no matching prepared copy of the spell in the requested normal or reversed form (or belongs to a class with no spellcasting profile at all), so there is nothing to cast. |
magic.cast.not_reversible |
The cast asks for the reversed form of a spell that has no reversed form. |
magic.cast.out_of_range |
A distance to the target was supplied for the cast and it exceeds the spell's maximum range for the caster's level. |
magic.cast.silenced_area |
The caster's current location is under an active silence effect, which prevents spellcasting there. |
magic.cast.target_count |
The number of targets supplied for the spell doesn't match what its targeting mode requires, such as a self-only spell receiving explicit targets, a single-target spell not receiving exactly one, or a multi-target effect like magic missile not receiving the required number of targets. |
magic.cast.unknown_mode |
The requested casting mode key isn't a valid mode for this spell in the form (normal or reversed) being cast. |
magic.cast.unknown_spell |
The spell id given in a cast command doesn't match any spell in the loaded spell catalog. |
magic.cast.unknown_target |
One of the target references given for a cast, or for reading a spell from a scroll, doesn't resolve to any known entity or location in the current session. |
magic.memorize.divine_reverses_at_cast |
A divine caster tried to prepare a spell already fixed to its reversed form; divine casters choose whether to reverse a spell only at the moment they cast it, not when they memorize it. |
magic.memorize.needs_sleep |
The character hasn't slept yet, or has already prepared its spells since its last sleep, so it cannot memorize spells again until it sleeps. |
magic.memorize.not_a_caster |
The character's class has no spellcasting profile, so it has no spells to memorize. |
magic.memorize.not_in_book |
An arcane caster tried to memorize a spell that isn't in its spell book. |
magic.memorize.not_reversible |
An arcane caster tried to memorize the reversed form of a spell that has no reversed form. |
magic.memorize.slots_exceeded |
The number of spells selected for memorization at a spell level exceeds the caster's available spell slots at that level for its current class level. |
magic.memorize.unknown_spell |
The spell id given in a memorization selection doesn't match any spell in the loaded spell catalog. |
magic.memorize.wrong_list |
A spell selected for memorization belongs to a different spell list than the one the caster's class uses. |
magic.turning.caster_incapacitated |
The would-be turner is dead, petrified, paralysed, asleep, or weakened, any of which prevents it from attempting to turn undead. |
magic.turning.not_a_turner |
The character's class has no turn-undead ability, so it cannot attempt to turn undead. |
session.*
| Code | Meaning |
|---|---|
session.command.encounter_in_progress |
The referee tried to spawn monsters, spawn an NPC party, or place the party while an encounter or battle was already in progress. |
session.command.member_incapacitated |
The named party member is dead, paralyzed, petrified, or asleep and can't carry out the requested action. |
session.command.no_door |
The map edge at the given position and direction is not a door, so no door state can be set there. |
session.command.no_living_members |
The party tried to take treasure from a cache or pile, but every party member is dead, leaving no one to carry it. |
session.command.not_in_dungeon |
The referee tried to spawn monsters or an NPC party while the party wasn't standing on a dungeon grid cell. |
session.command.out_of_bounds |
The party was placed at a dungeon position that falls outside the mapped area of that level. |
session.command.unknown_item |
The command referenced an item id that doesn't exist in the equipment catalog, or, when identifying an item, a magic item the named member isn't carrying. |
session.command.unknown_location |
The command referenced a dungeon id or level number that doesn't exist in the adventure, or the target dungeon has no level with an entrance defined. |
session.command.unknown_member |
The command referenced a character id that doesn't belong to any member of the current party. |
session.command.unknown_monster |
The referee tried to spawn monsters using a template id that doesn't exist in the monster catalog. |
session.command.wrong_mode |
The command isn't legal in the session's current mode, such as sending a battle-only command while the session isn't in battle. |
town.*
| Code | Meaning |
|---|---|
town.sell.no_fixed_value |
The party tried to sell a magic item, which carries no fixed market value a shop will pay for. |