When a pack is refused
This page lists every message RollQuest can give when it checks, creates, edits, binds, applies or retires a homebrew pack, with what each one means and how to fix it.
RollQuest checks a homebrew pack before it accepts it, so a mistake can't reach a player's sheet. The checker, called the validator, runs when you click Check this pack, again when you create the pack, and on every edit. It lists what it finds, each with a code such as DAMAGE_TYPE_UNDECLARED. Most of these are things that would look fine in the file but silently do nothing at the table, such as a damage type the system doesn't have. Find the code on this page, then fix the pack and check it again. Binding, re-stamping and adding items have their own refusals, further down. This page is for the Game Master (GM) who wrote the pack.
Plan: writing homebrew is on Pro.
Read the checker's report
The report appears under What the validator says in Check and create, and under What the validator says about this change in Edit.

- The verdict. Nothing here stops this pack being created. or This pack cannot be created yet. In Edit: Nothing here stops this change being saved. or This change cannot be saved yet.
- The groups. Blocking (badge Blocks saving) must be fixed before Create pack works. Advice (badge Does not block) is worth reading but stops nothing. In Edit, Introduced by this change blocks the save, and Already in this pack lists problems that were there before your change and don't block.
- Each finding shows its code, then the key of the row it's in and where in that row, then a message starting with the row's key (or This pack), then You can use: and the values that would work, when there's a list.
The location reads like an address. items[0] is the first row of the pack, counting from 0; items[0].spec.actions[1].damageType is the damage type of that row's second action. requiredDecisions[0] is the first builder step a game system declares.
Fix a refused pack, step by step
Here is the Thornwhip from Your first homebrew pack with three mistakes in it. Its subType reads "weapons", its price's groupId reads "gold", and its Damage action's damageType reads "slash".
- Paste the broken pack into Check and create and click Check this pack. The verdict reads This pack cannot be created yet., with three findings under Blocking:
PRICE_GROUP_UNDECLAREDatitems[0].spec.price.groupId: neither the pack nor its system declares a currency group "gold", so buying the item would cost nothing. You can use:coinage.DAMAGE_TYPE_UNDECLAREDatitems[0].spec.actions[1].damageType: the system doesn't declare a damage type "slash", and damage of an unknown type can't be applied, so the action's damage would be lost. You can use:acid,bludgeoning,coldand the rest of the list, includingslashing.SUBTYPE_UNDECLAREDatitems[0].spec.subType: "weapons" isn't one of the system's item categories, so the item would be filed under the first one,power, and its effects would switch on and off by that category's rule. You can use:background,feat,item,power,weapon.
- In the box, change
"weapons"to"weapon","gold"to"coinage"and"slash"to"slashing". - Click Check this pack again. The verdict reads Nothing here stops this pack being created.
- Click Create pack.
Before the check: problems with the text
These come from the Check and create window itself, before anything is sent.
| Message | What it means | How to fix it |
|---|---|---|
| Line 12, column 5: and the browser's own words, with the line shown and a mark under the spot | The text isn't valid JSON at that point. The JSON ends before it is finished means a bracket or brace is missing at the end. Near line gives the line only. Your browser's JSON parser did not say where means your browser gave no position (Safari often does this). | Look at the marked spot and the line before it: the usual causes are a missing comma between two entries, a comma after the last one, a missing closing } or ], or a name without double quotes. |
| A pack must be a JSON object | The box holds a list or a single value, not one pack in curly braces. | Wrap the pack in { } with a "name" and an "items" list. One pack per check. |
| The size line reads large | The pack is over 1 MB. It can still be created; the check adds a PACK_SIZE_WARNING. |
Trim it, or split it into two packs. |
| The size line reads over the limit | The pack is over 2 MB, measured without spaces and line breaks. It isn't sent. | Remove the amount the message names, or split the pack in two. |
| A file has not been opened | The file is over 16 MB, too big to be a pack. | Check you chose the right file. |
| "scope", "visibility" were removed before checking | Your JSON sets who owns or can see the pack. RollQuest decides that, so it removes them. | Nothing to fix. Delete them from your file to stop the note. |
Problems with the whole pack
These stop Check this pack or Create pack before the checker looks at the rows.
| Message | What it means | How to fix it |
|---|---|---|
| This pack was not created: name is required | The pack has no name. |
Add "name": "..." at the top. |
derivedFrom names pack "...", which is neither a curated game system nor one of your own packs. (PACK_DERIVED_FROM_UNKNOWN) |
derivedFrom isn't the slug of a game system's core pack, or of one of your own packs that isn't retired. |
Use 5-5e-core (5.5e), 5e-core (5e), ashfall-core (Ashfall), brightline-core (Brightline), tidewrack-core (Tidewrack), no-system-core, or the slug of one of your own packs. See What your pack can refer to. |
The identifier "..." belongs to a built-in pack (PACK_SLUG_RESERVED) |
Your slug is the slug of one of RollQuest's packs, such as 5-5e-srd-weapons. |
Give the pack its own slug, such as my-thornwhip. |
| You have 20 of the 20 homebrew packs your plan allows. | You're at your plan's limit. It's checked only at Create pack, so the check itself passes. The message goes on to suggest retiring a pack you no longer use or upgrading your plan, and says the pack will then go through unchanged: nothing about it was rejected. | Retire a pack you no longer use (see Retire a pack), then click Create pack again. A retired pack gives its slot back only once no character has anything from it: if characters still do, remove it from them first. |
| Content authoring is not switched on for this account | Homebrew authoring is switched off for your account. It isn't about the pack or your plan, and nothing in the JSON will change it. | Try again later. If it keeps happening, contact support. |
| Creating homebrew is not included in your current plan | Your plan doesn't include homebrew. The pack wasn't rejected. | Homebrew is on Pro. See Plan and billing. |
| Confirm your email address to create, edit or retire homebrew packs., and in the window This pack was not created because your email address is not confirmed yet. | Creating, editing and retiring a pack, and removing a retired pack from characters, need a confirmed email address. The pack itself wasn't rejected. | Click Resend confirmation email, confirm your address from the link in the email, then click Create pack again. |
| We could not check that your email address is confirmed, so this pack was not created. | RollQuest couldn't read whether your email is confirmed. | Try again in a moment. |
The server checked this pack again as it saved it and refused it. (PACK_VALIDATION_FAILED) |
Something changed between your check and the save, and the save's own check found problems. They're listed below the message. | Fix them as below and create again. |
This request is too large for a content pack. A pack can be at most 2 MB, so this one was not read. (PACK_REQUEST_TOO_LARGE) |
What was sent is well over the 2 MB a pack can be, so RollQuest refused it before reading it. | Trim it under 2 MB, or split it into two smaller packs. |
| The server refused this pack as too large before reading it. | Something between you and RollQuest has a smaller size limit than a pack does. | Split the pack into two smaller ones. |
| The server could not create this pack and did not say why. | An unexpected failure. Nothing was saved, and the problem isn't your pack. | Try again in a moment. If it keeps happening, contact support. |
| The check never reached the server. | Your connection dropped. Nothing was created. | Check your connection and try again. |
| You are not signed in any more | Your session ended. Nothing was lost. | Sign in again in another tab, then try again. |
The pack's own fields
These are about the fields at the top of the pack, not its rows.
| Code | What it means | How to fix it |
|---|---|---|
ITEMS_NOT_ARRAY |
items is there but isn't a list, such as { ... } in curly braces. |
Put the rows in square brackets: "items": [ { ... } ]. Leave items out only for an empty pack. |
CURRENCY_GROUPS_INVALID |
currencyGroups isn't a list of coin groups, or one of them is missing a part: each group needs an id, a label and at least one denomination, each denomination an id, a label and an abbr, and one of them worth exactly 1 ("minorUnits": 1). The message names the group and the part. |
An add-on doesn't need currencyGroups: remove it. In a system of your own, fix the part the message names. |
APPLY_AT_CREATION_INVALID |
applyAtCreation isn't true or false, or a pack with no derivedFrom sets it. A system's core pack is always put on a new character first. |
Use true or false, and only on a pack that builds on another. |
Rows, keys and kinds
| Code | What it means | How to fix it |
|---|---|---|
ITEM_MISSING_KEY |
A row has no key, or a row isn't an object at all, such as a bare "oops" in the list. |
Give every row a key of its own, such as "key": "THORN_WHIP", and write every row as { "kind": ..., "key": ..., "spec": { ... } }. |
ITEM_KIND_INVALID |
A row's kind isn't one of the ten kinds. Kinds are case-sensitive, so inventoryitem fails. A row with no kind, or with no spec, is reported as has kind null. |
Use one of the kinds listed under You can use:, spelt exactly, and give every row a spec object. |
ITEM_DUPLICATE_KEY |
Two rows in the pack have the same key. The message says where it was first seen. |
Give each row its own key. |
ITEM_NAME_MISSING |
An item has no spec.name. Players would see its key in place of a name. |
Add "name": "..." inside its spec. |
ITEM_SUBTYPE_MISSING |
An item has no spec.subType, so it would land in no list a sheet shows and players could never add it. The message lists the system's item categories. |
Add a subType from the list. For 5e and 5.5e: weapon, item, power, feat or background. |
ITEM_KEY_COLLISION |
The key is already used by one of RollQuest's packs for your system, or by another of your own packs of that system, such as WEAPON_LONGSWORD in the 5.5e weapons pack. |
Rename the row. Start your keys with a word of your own, such as THORN_. |
ITEM_RUNTIME_ID_COLLISION |
The row's spec.id (or its key, when there's no spec.id) is an ID the system already uses, such as AC. One would hide the other on the sheet. |
Change spec.id, and keep the key the same as it. |
HTML_ITEM_KIND_FORBIDDEN |
The pack has a textBox row. Homebrew packs can't carry HTML. |
Remove the row. Put the text in an item's meta.description. |
SUBTYPE_UNDECLARED |
An item's subType isn't one of the system's item categories. Unchecked, it would be filed under the system's first category (power, the spells, on 5e and 5.5e), and its effects would switch on and off by that category's rule. |
Use one from You can use:. For 5e and 5.5e: weapon, item, power, feat or background. See The kinds of row. |
CREATURE_SPEC_INVALID |
A creature row has no name, its values isn't a set of numbers, or one value is text, such as "13" in quotes. A value that isn't a number is ignored in play, which can silently remove a resistance. |
Give the creature a name, and write every value as a number without quotes. See Creatures. |
VALUE_FIELD_CONTROL_INVALID |
A value's control isn't dots or boxes, or the track it asks for can't be drawn: it needs a whole-number min and max, max above min, and at most 20 steps between them. |
Fix the bounds the message names, or leave control out. |
PACK_TOO_LARGE |
The pack is over 2 MB. | Trim it, or split it into two packs. |
PACK_SIZE_WARNING |
Advice: the pack is over 1 MB. | Worth trimming before it reaches 2 MB. |
A pack that isn't one JSON object is stopped in Check and create before it's sent (A pack must be a JSON object), so PACK_NOT_AN_OBJECT doesn't appear in the panel. Nor do ITEM_MISSING_SPEC and ITEM_NOT_AN_OBJECT: a row with no spec is reported as ITEM_KIND_INVALID, and a row that isn't an object as ITEM_MISSING_KEY.
Damage, prices and areas
| Code | What it means | How to fix it |
|---|---|---|
DAMAGE_TYPE_UNDECLARED |
An action's damageType isn't one the system declares, such as frost. Damage of an unknown type can't be applied, so the action's damage would be lost. |
Use one from You can use:, such as cold. Capitals don't matter. healing and varies are always allowed. On Ashfall the types are cutting, impact, rending, toxic and warp; on Brightline, kinetic, energy and mental. |
PRICE_GROUP_UNDECLARED |
price.groupId isn't a currency group the pack or its system declares, such as gold. Buying the item would cost nothing. |
Use the system's group, with the price in the smallest coin: coinage on 5e, 5.5e and Ashfall ("minor": 2500 is 25 gp), cash on Brightline. |
AREA_SHAPE_UNKNOWN |
meta.area.shape isn't a shape the board can draw, such as sphere. |
Use circle, square, cone or rectangle. |
AREA_DIMS_MISMATCH |
The area is missing the size its shape needs, such as a cone with no lengthFt. |
Add the size the message names, as a number above 0. See Spells. |
AREA_ORIGIN_UNKNOWN |
meta.area.origin isn't one RollQuest knows. |
Use point or self. |
What an action does to its targets (meta.applies)
meta.applies lists what happens to a creature an action targets: damage, healing, a condition, an effect, or a check the target makes. These codes are about that list. Spells and Magic items and consumables show it in use.
| Code | What it means | How to fix it |
|---|---|---|
APPLIES_NOT_AN_ARRAY |
meta.applies isn't a list, so the action targets nobody. |
Put the entries in square brackets: "applies": [ { ... } ]. |
APPLIES_KIND_UNRECOGNISED |
An entry's kind isn't one RollQuest can carry out, such as explode, or the entry isn't an object. |
Use damage, heal, condition, effect or check. |
APPLIES_CHECK_INVALID |
A check entry, which puts a test to each target, can't work: its check doesn't name a calculation that is a plain test, such as Ashfall's WITS_CHECK (=1d100<=WITS), it has a save, which a check never reads, or it sits beside other entries. A check action is one check entry and nothing else. |
Name a test from the system, drop the save, and move other entries into the check's onPass or onFail. |
APPLIES_HEAL_METER_UNDECLARED |
An entry names a meter to restore, but only a heal entry can, or the meter isn't one of the system's token meters, such as sanity on Ashfall. |
Put meter only on a heal, and name a meter the system has. |
APPLIES_RESIST_INVALID |
An entry's resist, a check the target makes against the hit, isn't on a damage entry or isn't shaped as { stat, dcBase, ladder } the system can read. |
Keep resist on a damage entry, with the parts the message names. |
APPLIES_DAMAGE_TYPE_UNDECLARED |
A damage entry's damageType isn't one the system has, so resistances to it would never apply. |
Use one from You can use:. |
APPLIES_ENTRY_INERT |
The entry would apply nothing: a condition with no conditionId, a damage or heal with no formula, or an effect with no target or op. |
Fill in the missing field. |
APPLIES_CONDITION_UNDECLARED |
The conditionId isn't a condition the system has, such as dazzled. It would be skipped at the table. |
Use one from You can use:, such as blinded or frightened. |
APPLIES_HALF_SAVE_ON_NON_DAMAGE |
A saving throw on a condition or an effect says "onSuccess": "half". Half a condition isn't a thing, so it would act as all or nothing. |
Use "negate". |
APPLIES_SAVE_DC_UNUSABLE |
save.dc isn't a whole number from 1 to 50. It would fall back to the caster's own spell save DC. |
Write the DC as a whole number, such as 15. |
APPLIES_SAVE_DC_SOURCE_UNPUBLISHABLE |
save.dcSource isn't a value ID the sheet shares with the board, or it's a formula. |
Name a value ID, not a formula. On a system of your own, list it in systemRules.scalingFields. |
APPLIES_ACTION_ID_UNKNOWN |
An entry's actionId names an action this item doesn't have. |
Use one of the item's action IDs, listed under You can use:. |
APPLIES_UPCAST_KEY |
An entry has an upcast field, which nothing reads. |
Put the extra dice for a higher slot in meta.upcastFormula, such as "1d6". See Spells. |
APPLIES_SPEND_UNCAPPED |
A spend (an amount the player types, such as how many points to spend) has no ceiling, or isn't an object. |
Give it a max, a maxSource or "from": "uses". |
APPLIES_SPEND_WRONG_KIND |
A spend is on a condition or effect entry. |
Only damage and heal entries take a spend. |
APPLIES_SPEND_MAX_UNUSABLE |
spend.max isn't a whole number from 1 to 100,000. |
Write a whole number. |
APPLIES_SPEND_MAX_SOURCE_UNPUBLISHABLE |
spend.maxSource isn't a value ID the sheet shares, or it's a formula. |
Name a value ID; on a system of your own, list it in systemRules.scalingFields or end its name with _POOL. |
APPLIES_SPEND_FROM_UNKNOWN |
spend.from isn't something an action can spend from, such as mana. |
Use uses, the item's own uses. |
APPLIES_SPEND_FORMULA_UNSCALABLE |
With a chosen amount, the formula is what one unit is worth, and RollQuest multiplies it. A formula like =2d4+MOD can't be multiplied without guessing. |
Use bare dice, such as =2d10, or a bare number, such as =1. |
APPLIES_SPEND_DUPLICATED |
Two entries on the item each spend from its uses. One use can't have two prices. | Keep the spend on one entry. |
Effects
An effect is what an item changes while it's on, such as +1 to armour class. Effects explains targets, ops and triggers in full.
| Code | What it means | How to fix it |
|---|---|---|
EFFECT_ID_MISSING |
An effect has no id, wherever it sits: in spec.effects, or in a choice's options. A sheet stores every effect by its id, so re-stamping a sheet that has the item would fail. |
Give every effect an id that's unique within its item, such as "id": "THORN_AC". |
EFFECT_TARGET_UNRESOLVED |
The target isn't a value, roll or action tag your pack can use, such as AC_BONUS, or ARMOR on Ashfall, where it's spelt ARMOUR. The effect would never take effect. |
Use a name from You can use: or from the authoring contract's Legal effect targets. DMG_ROLL and HEAL_ROLL become usable once your own pack has an action with that tag. |
EFFECT_OP_WRONG_CHANNEL |
The op doesn't work on that kind of target, such as advantage on AC, a value. |
A value takes add, setMin or setTo. On 5e and 5.5e, a roll or action tag takes add, advantage, bonusDie, critRange, disadvantage, onCritDice, setFormula or setMin. Ashfall has no advantage or disadvantage: a roll takes fortune, fortune2, misfortune and misfortune2 in their place. Pick from You can use:. |
EFFECT_OP_NOT_ON_CHANNEL |
An effect with a trigger uses an op its target doesn't take, such as add on SELF.uses. |
SELF and SELF.uses take addRandom, increment, reset or setTo. SELF.maxUses takes setToVF and not reset. Only POOL("...") takes setPoolMax. |
EFFECT_CONDITION_PROSE |
The condition is words, such as while raging. It would never be true. |
Use a number, a formula starting with = that reads sheet values, or leave it empty. Some conditions, such as "with a ranged weapon", can't be written as a formula at all. |
FORMULA_REFERENCE_UNRESOLVED (in a condition) |
The condition names something that doesn't exist, such as RAGING. It reads as false, so the effect never fires. |
Name a value or roll your pack can use. |
EFFECT_VALUE_UNPARSEABLE |
The value can't be read. "1d4" on add adds nothing (dice need bonusDie); "PROF" needs an = to be a formula; and an effect with a trigger takes only a plain number, such as 1. |
Use a number or a formula starting with =; use bonusDie for a die; on a triggered effect, use a number. |
EFFECT_TRIGGER_TARGET_MISMATCH |
An effect with a trigger names a bare ID such as HP_TEMP, or an effect without one names a wrapped target such as SELF.uses. |
With a trigger, wrap the target: SELF, SELF.uses, SELF.maxUses, VF("id"), POOL("id") or POOL_GROUP("group"). Without one, name a bare ID. |
TRIGGER_NOT_DECLARED |
The trigger isn't one of the system's buttons, such as dawn, or one the engine fires itself. Nothing could ever run it. |
5.5e: longRest, shortRest, sunrise, sunset. 5e: longRest, shortRest, sunrise. Ashfall: longRest, shortRest, tempering. Brightline: longRest, shortRest. Tidewrack: downtime. On every system, also the four the engine fires itself: turnStart (the character's turn begins in a battle), dayStart (the campaign clock passes midnight), onCast (the character uses an item of a kind that spends slots, such as a spell) and levelUp (a Level Up is finished). |
TRIGGER_CONDITION_UNRECOGNISED |
A triggered effect's condition isn't one the trigger can read, so it would be treated as always true. |
Use exactly one of =EQUIPPED("id"), =PREPARED("id"), =EXCLUSIVE("group","value"), =POOL_AVAILABLE("id") or =CLASS_LEVEL_GTE("Cleric",5), a number, or leave it empty. Don't combine them, and use a one-word class name. |
TRIGGER_CONDITION_CLASS_UNKNOWN |
Advice: CLASS_LEVEL_GTE names a class that no class level your pack can see declares, so the effect would never fire. |
Check the spelling and capitals: it must match the class's kitClass exactly. If the class is in a pack yours doesn't build on, you can ignore this. |
EFFECT_SCOPE_WITHOUT_OWNER |
A sheet-wide effect row has "scope": "self". There's no item for it to belong to. |
Move it into an item's spec.effects with a roll target, or drop scope. |
EFFECT_SCOPE_ON_VALUE_FIELD |
An item's effect has "scope": "self" but targets a value, where it applies to the whole sheet anyway. |
self only means "this item's own rolls" on a roll or action tag target. Drop scope, or point it at a roll. |
EFFECT_OP_NO_SURFACE |
Advice: onCritDice or setFormula on 5e. Only the Canvas view reads them, and 5e has no Canvas view. |
Use an op from You can use:, or keep the rule in the item's description. |
SCALING_SOURCE_UNPUBLISHABLE |
A setToVF on SELF.maxUses reads a value the sheet doesn't share, so the uses would never grow. |
Use a name ending _LEVEL, _MOD or _POOL, or LEVEL or PROF, such as CON_MOD. |
Formulas
| Code | What it means | How to fix it |
|---|---|---|
FORMULA_REFERENCE_UNRESOLVED |
A formula names something that isn't a value or roll your pack can use, such as MY_BONUS or MELE. It would count as 0. |
Fix the spelling, or use a name from the contract. A value from your own pack is fine, as long as the pack declares it. |
FORMULA_FUNCTION_NOT_ALLOWED |
The formula uses a function that isn't allowed, such as INDIRECT. It's usually reported alongside FORMULA_REFERENCE_UNRESOLVED for the same name. |
Use an allowed function: the contract lists all of them. |
FORMULA_VOLATILE_FUNCTION |
The formula uses RAND, RANDBETWEEN, NOW or TODAY. A value must come out the same every time. |
Use dice, such as 1d6, for chance. |
FORMULA_DICE_OUT_OF_RANGE |
A dice term is beyond what RollQuest rolls, such as 1d1001. |
At most 100 dice of up to a d1000 in one term. |
FORMULA_TOO_MANY_DICE |
The formula has more than 10 separate dice terms. | Combine them, such as 4d6 for four 1d6. |
FORMULA_MALFORMED |
The formula can't be read, such as brackets that don't pair up. | Count the ( and ). |
FORMULA_TOO_LONG |
The formula is over 1,000 characters. | Shorten it, or split it across a value and a roll. |
FORMULA_TOO_DEEPLY_NESTED |
Brackets go more than 12 deep. | Simplify it. |
FORMULA_TOO_MANY_REFERENCES |
The formula names more than 50 different values. | Split it. |
FORMULA_DISALLOWED_OPERATOR |
The formula has a character that isn't an allowed operator. | Use the usual operators, such as +, -, *, /, <, > and =. |
Uses and spending
| Code | What it means | How to fix it |
|---|---|---|
USE_BUDGET_INCOHERENT |
An item has maxUses but no uses, or a different number. It would arrive with every use already spent. |
Set uses to the same number as maxUses. They're copied when a player takes the item and never updated afterwards, so get them right first. |
CONSUMES_INCOHERENT |
meta.consumes names a parent item nothing declares. Using the option would spend nothing. |
Name the item it spends from, by a key that exists. See Magic items and consumables. |
CONSUME_ON_EMPTY_INVALID |
meta.consumeOnEmpty, which makes an item leave the sheet when its last use is spent, can't work: it isn't true or false, the item has no maxUses, or the item refills its own uses with a triggered effect (such as on a rest), so it's never used up. |
Give the item maxUses and an equal uses, or remove the flag. On an item that refills, remove the flag or the refill. |
Choices and grants
A choice is a question a player answers when they take an item, such as which skill. Choices and grants lists the kinds.
| Code | What it means | How to fix it |
|---|---|---|
CHOICE_INVALID |
A choice can't be answered: it has no id, or the same id as another choice on the item; its kind isn't one a player can answer; a kind that picks from another pack has no packSlug; it has no from list, or an empty one, where its kind needs one; or a feature choice has no options, an option with no id, or the same option twice. spell as a kind is refused with Use "power", which works the same way. |
Fix the part the message names. Use a kind from You can use:: abilityIncrease, asiOrFeat, baseWeapon, feat, feature, power, skillProf, spellSwap or weaponMastery. |
CHOICE_FROM_UNRESOLVED |
A choice offers an ID in from that isn't a value the system or your pack declares, such as ACRO for Acrobatics. Picking it would change nothing on the sheet. |
Use an ID from You can use:, such as ACR. |
CHOICE_MAX_SCORE_INVALID |
A choice's maxScore isn't a whole number, such as "30" in quotes. |
Write "maxScore": 30. |
PACK_REFERENCE_UNKNOWN_PACK |
An autoInclude or bundle entry, or a choice's packSlug, names a pack that isn't in reach, such as a typo or a pack of another system. |
Use a slug from You can use:: your own pack, RollQuest's packs for your system, or your other packs of that system. |
PACK_REFERENCE_UNKNOWN_ITEM |
The entry names a key the pack doesn't have, or a choice's from lists a key that isn't in the pack its packSlug names. |
Use a key from You can use:. |
Item fields that use a system's own rules
Some systems, such as Ashfall and Brightline, read extra fields on an item: a button offered under a roll's result, the range an attack counts as, or a power built up by rank. These codes are about those fields.
| Code | What it means | How to fix it |
|---|---|---|
ITEM_FOLLOW_UP_INVALID |
An item's meta.followUps, the buttons it offers under a roll's result (such as a reroll), can't be read: it isn't a list, a follow-up has a kind other than reroll or spendToTarget, a key that kind doesn't read, no label (or a reroll no markLabel), or no on.calcs naming the rolls it's offered on. uses: true needs a reroll on an item with maxUses. |
Fix the part the message names. Copy the shape from the authoring contract's traps for your system. |
ATTACK_RANGE_INVALID |
meta.attackRange isn't melee or ranged. A system that defends each range with a different number couldn't tell which to use, and the attack would go to the GM. |
Use "melee" or "ranged", or leave it out. |
RANKED_ITEM_INVALID |
An item built by rank (meta.ranked), or a grant's ranked build, can't be read by the system's builder: a missing or wrong costPerRank, ranks that aren't whole numbers in order, a modifier the system doesn't declare, or a scales entry that would write the rank nowhere. |
Fix the part the message names, using the modifiers the system declares. |
Subclasses, class features and classes
These are about adding a subclass option or a class feature to an existing class, and about whole new classes. See Subclasses and class features and A whole new class.
| Code | What it means | How to fix it |
|---|---|---|
CONTRIBUTION_UNKNOWN_PACK |
The pack your subclass adds to isn't one it can reach. It can add to RollQuest's packs for your own system, your own packs of that system, or the pack it derives from. A 5.5e pack can't add to a 5e class. | Check the slug, such as 5-5e-srd-class-features for 5.5e or 5e-srd-class-features for 5e, and that your pack's system is the same as the target's. |
CONTRIBUTION_UNKNOWN_ITEM |
That pack has no item with the key you named. Keys differ between editions: the 5.5e cleric's level 3 is CLASS_CLER_L3, and 5e's subclass choice is at CLASS_CLERIC_L1. |
Copy the key exactly. Subclasses and class features lists each class's subclass level and choice. |
CONTRIBUTION_UNKNOWN_CHOICE |
The item has no choice with that ID that offers a list of options. | Use the choice ID under You can use:, such as cleric_l3_subclass. |
CONTRIBUTION_OPTION_MALFORMED |
The option has no id or no label. The label is what a player's pick is saved with. |
Give the option both. |
CONTRIBUTION_OPTION_ID_COLLISION |
The choice already has an option with that ID, such as life. An option can only be added, never replace one. |
Give your option its own ID, such as hearth. |
CLASS_CONTRIBUTION_UNKNOWN_PACK |
The pack your class feature adds to isn't one it can reach, as for subclasses above. | Check the slug and your pack's system. |
CLASS_CONTRIBUTION_UNKNOWN_ITEM |
That pack has no class level with that key, such as CLASS_FIGHTER_L99. |
Use a key from You can use:. |
CLASS_CONTRIBUTION_TARGET_NOT_KIT |
The target is an ordinary item, such as FEATURE_RAGE, not a class level. A grant there would reach anyone holding the item, not everyone in the class. |
Target the class level the feature belongs to, such as CLASS_BARB_L3. |
CLASS_CONTRIBUTION_MALFORMED |
contributesTo has something besides packSlug and itemKey, such as kitClass; or spec has a field other than contributesTo, autoInclude and choices, such as effects or meta; or both autoInclude and choices are empty. The class and level come from the target. |
Keep to those three fields, with at least one grant or choice. Put effects on a feature or a choice's option. |
CLASS_CONTRIBUTION_GRANT_LEVEL_INVALID |
A grant's grantAtLevel is below the level it's attached to, or above 20. |
Use a level from the target's level to 20, shown under You can use:. |
KIT_CLASS_WHITESPACE |
A class name in meta.kitClass has a space, such as Blood Hunter. Every level check on it would pass, even at level 1. |
Use one word, such as BloodHunter. |
CLASS_LADDER_INVALID |
A class has some levels but not all of them. Level Up would do nothing at a missing level. | Give the class a row for every level from 1 to 20. |
Values and rolls
| Code | What it means | How to fix it |
|---|---|---|
VALUE_FIELD_UNRENDERABLE_GROUP |
Advice: a value has no group, or a group no sheet layout shows, so it would never appear on a sheet. On a game system of your own, which has no built-in layout, every named group is shown, so only a value with no group gets this. |
Use "group": "skills" or "group": "spells", which every layout shows. For a value that's meant to stay hidden, add "hidden": true or "engineOnly": true. |
CALCULATION_UNREACHED |
Advice: a roll that no value points at, so nothing on the sheet rolls it. | Give a value "calculationId" with the roll's ID, or remove the roll. |
Editing a pack
| Code or message | What it means | How to fix it |
|---|---|---|
ITEM_KEY_REMOVED |
Your edit takes away a key players may already have. If you added exactly one new key, the message suggests it's a rename. | To withdraw the row, add "retired": ["THE_KEY"] to the pack (better: keep the row too). To rename it, add "renamedFrom": "OLD_KEY" to the new row's spec. See Remove or rename a row. |
RETIRED_INVALID |
retired isn't a list of keys, such as "OLD" without brackets. |
Write "retired": ["OLD"]. |
RENAMED_FROM_INVALID |
renamedFrom isn't a key or a list of keys, such as a number. |
Write the old key in quotes. |
RENAMED_FROM_UNRESOLVABLE |
The old key is still in the pack, or two rows claim it. | Rename in two saves when shifting names along. |
RENAME_NOT_YET_MIGRATED |
Advice: the rename is saved. New characters get the new key; sheets that already have the row keep the old one. | Nothing to fix. Rename only when you need to. |
FORK_PROVENANCE_DROPPED |
Advice: a copied row has lost its forkedFrom. |
Put forkedFrom back as it was. |
| Slug, system and derives-from are locked | A character has taken something from the pack, so these three can't change. | Leave them. If you need a different slug or system, make a new pack. |
Something started using this pack while you were editing it (PACK_IDENTITY_FROZEN) |
A player took an item while you were changing the slug, system or derives-from. Nothing was saved. | Click Reload the pack; those fields come back locked. Make the rest of your change again. |
This pack changed somewhere else after you opened it. (REVISION_CONFLICT) |
The pack was saved from another tab or window. Nothing was saved, so neither change is lost. | Copy anything you want to keep, click Reload the pack, and make your change again. |
Your change WAS saved. (REVISION_MINT_CONFLICT) |
Your change went in; only its revision number clashed with another save. | Click Reload the pack before editing again. |
| This pack has been retired, so it can no longer be edited. | The pack was retired. | Nothing to do: a retired pack stays as it is. |
| Nothing has changed yet, so there is nothing to save. | Save changes is waiting for a change. | Change something, then Check this change. |
CATEGORY_INVALID |
Your edit sets category to something other than base, addon or subclass. |
Set category to addon (or base for a system of your own). |
| The server could not save this change and did not say why. | An unexpected failure. | Try again in a moment. |
Only in a game system of your own
These come from the rules block (systemRules) and builder steps (requiredDecisions) of a pack with no derivedFrom, a whole system of your own. Most of them are about engine pieces a system can declare, such as named roll results, dice pools or point-buy steps, and each is refused when the engine couldn't read it, rather than quietly doing nothing at the table. The message names the exact path to fix. See A game system of your own.
| Code | What it means | How to fix it |
|---|---|---|
DECISION_UNKNOWN_PACK |
A builder step in requiredDecisions names a pack that isn't in reach. |
Name your own pack, or a pack you've already created for that system. |
DECISION_DEPENDS_ON_UNKNOWN |
A step's dependsOn names a step that doesn't exist. |
Use a step ID from You can use:. |
DECISION_DEPENDS_ON_SELF |
A step depends on itself, so it could never be done. | Remove it from its own dependsOn. |
CONDITION_DEFINITION_INVALID |
A condition in systemRules.conditions can't be read, so no picker would offer it. The message says which part. |
Fix the part named. Only a system's own core pack can declare conditions. |
INCAPACITATED_CONDITION_UNRESOLVED |
Advice: a condition listed as incapacitating isn't one the system declares. | Use a condition ID the system has. |
LIGHTING_STATE_INVALID |
systemRules.lighting.states isn't a list, or a state has no key. |
Make it a list, with a key on each state. |
SENSE_TYPE_INVALID |
systemRules.lighting.senseTypes isn't a list, or a sense has no key. |
Make it a list, with a key on each sense. |
ENVIRONMENT_EFFECT_INVALID |
systemRules.environmentEffects isn't a list of rows, or it's the only rule an add-on sets, which would replace a sheet's whole rule set. |
Put weather rules only in a system's own core pack. |
ENVIRONMENT_EFFECT_TARGET_UNRESOLVED |
A weather rule targets a roll nothing declares. | Target a roll the system has. |
ENVIRONMENT_EFFECT_BROAD_TAG |
Advice: a weather rule targets an action tag many actions share, so it applies to all of them. | Expected if that's what you meant; a rule can't pick out one kind of attack. |
ENCUMBRANCE_FIELD_UNDECLARED |
The encumbrance rules name a value the pack doesn't declare. | Declare the value in the same pack. |
ENCUMBRANCE_EFFECT_OP_INVALID |
An encumbrance band's effect isn't add. |
Use add. |
ENCUMBRANCE_BAND_THRESHOLD_FEEDBACK |
A band's threshold reads a value the same bands change, which would loop. | Base the threshold on a value the bands don't change. |
ENCUMBRANCE_COUNTS_INVALID |
The encumbrance rules' counts isn't all (every row the character carries) or active (only what's equipped, prepared or switched on). Anything else would be read as all. |
Use "all" or "active". |
DECISION_FILTER_INVALID |
A builder step's filterBy, which narrows its options to match an earlier pick, isn't { field, fromStep } (with an optional fromField), is on a step that isn't a pick step, or names a step this one doesn't depend on. |
Put filterBy on a pickFromPacks step, and name an earlier pick step it depends on. |
DECISION_MAX_PICKS_INVALID |
A builder step's maxPicks isn't a whole number of 1 or more, or the step isn't a pick step. |
Use a whole number, on a pickFromPacks step. |
POINT_BUDGET_INVALID |
A pointBudget builder step, where a player spends points on values, can't be read: a key it doesn't know, a budget with no formula, or a target, cap or spend list it can't use. The message names the path. |
Fix the part named. The authoring contract's trap on point-budget steps shows the shape. |
ROLL_OUTCOME_INVALID |
systemRules.rollOutcomes, the named results a roll can land on (such as Ashfall's Triumph, Sharp and Solid), has a band, a test, a tone, a cost, a follow-up or a tag the engine can't read. A band it can't read would never match. |
Fix the part named. Tones are crit, success, partial, failure and fumble. |
DICE_RULE_INVALID |
systemRules.diceRules.zeroPool, what a pool of 0 dice rolls instead, isn't { count, keep } with a count from 1 to 100 and a keep such as kh1 or kl1. |
Write it in that shape. |
ROLL_TAG_INVALID |
systemRules.rollTags, the tags a roll can carry without changing its dice, isn't a list of { id, label, options, default } groups the engine can read. |
Fix the part named. |
ROLL_MARK_INVALID |
systemRules.rollMarks, which add to a value after a roll, isn't a list of { id, when, field } marks the engine can read. |
Fix the part named. |
TRACK_OVERFLOW_INVALID |
systemRules.trackOverflow, which turns a track pushed past its maximum into a reset and a mark on another value, isn't a list of { field, into } the engine can read. |
Fix the part named. |
POOL_BUILDER_INVALID |
systemRules.poolBuilder, the short build step that sets a dice pool before a roll, isn't an object the engine can read. |
Fix the part named. |
TAG_SETS_INVALID |
systemRules.tagSets, the tag sets players write on their own sheets, isn't an object the engine can read. |
Fix the part named. |
STATUS_TIERS_INVALID |
systemRules.statusTiers, which gives some conditions a tier, isn't { max, conditions, tiers } the engine can read. |
Fix the part named. |
DAMAGE_PIPELINE_INVALID |
A step in systemRules.damagePipeline has a mode other than soak, absorb, deplete, accumulate, overflow or resist, or a resist step is shaped wrong. The engine would skip the step, and the hit would land nothing. |
Use one of those modes, and give a resist step the parts the message names. |
METER_THRESHOLD_INVALID |
A damage step's meter rule (a threshold, or what happens when the meter empties, fills or is hit while a condition is on) names a condition the system doesn't declare, or a test that isn't a plain-test calculation. | Name a declared condition, and a test calculation such as Ashfall's VIGOUR_CHECK (=1d100<=VIGOUR). |
ROUND_CHECK_INVALID |
systemRules.roundChecks, the checks made each round while a condition is on, isn't a list of { while, prompt, onPass, onFail } the engine can use. |
Fix the part named. |
SYSTEM_TABLE_INVALID |
systemRules.tables, the system's roll tables, can't be read. |
Fix the part named. |
CONTEST_INVALID |
systemRules.contests, the answers a defender can choose, isn't { responses, against } the engine can read, or an item's meta.contest names a contest key no against lists. |
Fix the part named, and use a contest key the system lists. |
DEFENCE_BINDING_INVALID |
systemRules.defenseBase isn't a number, or a defence meter's appliesTo isn't melee, ranged or any, or two meters defend against the same range. Two with no range only get Advice. |
Fix the value named, and give each range one defence. |
TOKEN_BINDING_INVALID |
A token meter's maxPips is on a meter that isn't pips, or isn't a whole number in range. |
Put maxPips only on a pips meter, as a whole number. |
MACRO_TEMPLATE_INVALID |
systemRules.macroTemplates, the ready-made macros the system offers, isn't a list of macros RollQuest can read, or one names a value the system doesn't have. |
Fix the macro named. See Macros: what they are. |
SYSTEM_FEATURE_INVALID |
systemRules.clocks or systemRules.partySheets isn't { "enabled": true } or { "enabled": false }. |
Write it in that shape. |
RANKED_ITEM_INVALID |
systemRules.rankedItems, the system's cost rules and modifiers for items built by rank, can't be read. (The same code covers an item's meta.ranked: see Item fields that use a system's own rules.) |
Fix the part named. |
On Ashfall: the usual mistakes
Building on Ashfall uses the same codes, and these are the slips most likely when you're used to 5e. See Build on Ashfall.
| Mistake | Code | Fix |
|---|---|---|
Effect target ARMOR (US spelling) |
EFFECT_TARGET_UNRESOLVED |
ARMOUR |
"damageType": "slashing" |
DAMAGE_TYPE_UNDECLARED, and APPLIES_DAMAGE_TYPE_UNDECLARED in meta.applies |
cutting, impact, rending, toxic or warp |
"subType": "spell" or "item" |
SUBTYPE_UNDECLARED |
archetype, skill, weapon, talent, corruption, armour, kit, rite, cinderbook or horror |
"groupId": "gold" |
PRICE_GROUP_UNDECLARED |
coinage |
"condition": "while wielded" |
EFFECT_CONDITION_PROSE |
Leave it empty: a weapon's effects only count while it's equipped. |
A rest effect with add on VF("WOUNDS") |
EFFECT_OP_NOT_ON_CHANNEL |
addRandom, increment, reset, setTo or setToVF |
"op": "advantage" on a roll |
EFFECT_OP_WRONG_CHANNEL |
fortune (or fortune2); misfortune (or misfortune2) in place of disadvantage |
=1d100<=MELE |
FORMULA_REFERENCE_UNRESOLVED |
=1d100<=MELEE |
"trigger": "sleep" or "sunrise" |
TRIGGER_NOT_DECLARED |
longRest, shortRest or tempering, or one the engine fires itself, such as turnStart |
"key": "WPN_CLEAVER" |
ITEM_KEY_COLLISION |
A key of your own: Ashfall's gear pack already has it. |
Copying rows
These come from Prepare the copy in the copy window. See Copy rows (Fork).
| Message | What it means | How to fix it |
|---|---|---|
| Choose at least one row to fork. | No rows are ticked. | Tick the rows to copy. |
| A message beside Key prefix, such as A fork prefix is required | The Key prefix is empty or starts with a digit. | Use letters, digits and underscores, starting with a letter. |
| None of the rows you chose are in that pack any more | The source changed after you opened it. | Close the window, refresh the panel and pick again. |
| Those rows cannot be added to that pack | The rows carry different licence terms, and a pack has one. | Copy rows with the same licence into each pack. |
| That pack cannot be read from this account | You can copy from RollQuest's packs and your own, not from a pack you only see at someone else's game. | Pick a different source. |
Binding a pack
These appear in the Bind window. See Put your pack on a table.
| Code or message | What it means | How to fix it |
|---|---|---|
This pack was not bound. You can bind a pack you own, or a curated one (PACK_NOT_REACHABLE) |
The pack isn't yours. | Bind your own packs only. |
This pack has been retired (PACK_ARCHIVED) |
A retired pack can't be bound. | Use another pack. |
This pack is already bound to this table (PACK_ALREADY_BOUND) |
A game holds each pack once. | Move the existing binding to a newer revision with Move this table to rN. |
This pack has no published revision to pin (PACK_HAS_NO_REVISION) |
The pack has no saved revision. | Save an edit to it, then bind it. |
No list of creation steps could be resolved for this table (SYSTEM_UNRESOLVED) |
The game has no system yet, so there's nothing to route into. | Bind with no routing, or set the game's system in Game settings, then unbind and bind again with the routing ticked. |
Not a creation step this table offers (UNKNOWN_EXTENDS_DECISION) |
The steps on screen are out of date. | Refresh the panel and bind again. |
This routing deletes players' existing picks (DESTRUCTIVE_DECISION_CONFIRMATION_REQUIRED) |
You ticked a step that takes one pick without the acknowledgement. | Tick I understand this replaces existing picks on sheets at this table, or untick the step. See Steps that take one pick. |
CONTRIBUTION_TARGET_NOT_BOUND, where the game plays one system and the target is curated content for another |
A subclass pack for one system, bound at a game of another. A pack can only add to the system its game plays. | Bind it at a game of that system, or aim it at this system's class features pack. |
CONTRIBUTION_TARGET_NOT_BOUND, has not bound a pack |
The subclass adds to a class in another of your own packs, and that pack isn't bound here. | Bind that pack first, then this one. |
CONTRIBUTION_TARGET_NOT_BOUND, has no item or has no choice |
The target pack is here but lacks the item or choice. For RollQuest's packs the message says to check the item key and choice ID. | Check the key and choice ID against the class. For your own target pack, move it to a revision that has them. |
CLASS_CONTRIBUTION_TARGET_NOT_BOUND |
The same for a class feature, plus: the target is not a class level carrier, usually an item from the other edition. | As above. Check you've aimed at a class level of this game's edition. |
CONTRIBUTION_OPTION_ID_COLLISION |
Another pack bound to this game already adds an option with the same ID to that choice. | Give your option a different ID. |
CLASS_CONTRIBUTION_CHOICE_ID_COLLISION, CLASS_CONTRIBUTION_GRANT_COLLISION |
The class level, or another pack bound here, already has that decision ID or that grant. A contribution can only add. | Use a different ID, or remove the duplicate grant. |
CLASS_ID_COLLISION |
Another pack bound to this game already has a class with the same kitClass, or the game's own system already has a class with that name, such as Wizard on 5.5e. Nothing is bound. |
Give your class a kitClass of its own; the name players see (meta.class) can stay the same. Or unbind the other pack. |
This table's homebrew is being changed somewhere else right now (BIND_CONFLICT) |
Two changes at once. | Try again in a moment. |
| This is your personal character-sheet workspace, not a table | Homebrew is bound to games, not to your own sheets area. | Open a game and bind it there. |
| Only the GM who created this table can change which homebrew is bound to it. | You aren't the game's creator. | Ask the game's creator. |
A homebrew subclass or class feature doesn't need RollQuest's class features pack bound: the game's own system is always at the table. You bind only your own pack.
Moving, re-stamping, applying, unbinding and retiring
| Code or message | What it means | How to fix it |
|---|---|---|
Someone else moved this table's pinned revision while you were deciding (REVISION_MOVED) |
The pin moved in another tab. Nothing changed. | The panel refreshes; look again and retry. |
The revision this table is pinned to is missing (PINNED_REVISION_MISSING) |
The pinned revision can't be found, so nothing is offered or re-stamped. | Move the game to a newer revision if the pack has one; otherwise unbind and bind again, which pins the newest. |
... is turned off for this table (BINDING_DISABLED) |
You can't re-stamp or apply a pack that's off. | Click Turn back on, then try again. |
Re-stamping adds a new decision for 1 character to answer. (or Applying this pack adds ...), with the decisions listed and the tick box Add these decisions to their sheets (NEW_CLASS_DECISIONS_CONFIRMATION_REQUIRED) |
A class feature pack would give characters already past that level a new question to answer. Nothing has changed yet. | Read the list, tick Add these decisions to their sheets, then click Re-stamp N sheets or Apply to N sheets. See New decisions for characters already past a level. |
This sheet uses system ... These cannot be mixed (SYSTEM_MISMATCH) |
Apply to N sheets left a sheet of another system alone. | Nothing to fix: that character can't use this pack. |
... builds on ..., which this sheet does not have (MISSING_PARENT) |
Apply to N sheets left alone a sheet that doesn't have the pack's base, such as a 5e pack and a 5.5e sheet. | Use a pack made for that sheet's system. |
Turning this pack off drops ... sheets at this table off its pinned revision (PIN_DROPPED) |
A warning, every time you turn a pack off. | Nothing to fix. Turn it back on to restore the pin. |
... sheets at this table have already taken items from this pack (BINDING_HAS_DEPENDENTS) |
Unbinding keeps their items but loses the pin for good. | Click Unbind anyway, or Cancel. |
A message that nothing has been changed because the pack is still in use, then It is held by: (PACK_IN_USE) |
You tried to retire a pack that a game still binds (even turned off), that a game or character sheet runs on as its system, or that another homebrew pack builds on. The window lists them. Characters who only took items from it don't stop a retire. | Unbind it at each of those games, and retire the packs built on it or point them at another pack, then click Try again. See Retire a pack. |
| The pack was not retired because your email address is not confirmed yet. | Retiring needs a confirmed email address. | Confirm it from the link we emailed you, then retire it again. |
| The server could not retire this pack and did not say why. | An unexpected failure. Rarely, a bind landed at the same moment as the retire. | Refresh the panel to see whether the pack was retired, and try again. If it keeps happening, contact support. |
"..." is not retired. Only a retired pack can be taken off characters this way (PACK_NOT_RETIRED) |
Remove from characters works only on a retired pack. | Retire it first, or, while it's live, unbind it from the game instead. |
| Only the pack's owner can take it off characters. Nothing has been changed. | You aren't the pack's owner. | Ask its owner. |
| The pack was not removed from any character: the request did not complete. | The removal didn't finish. Nothing has been changed. | Try again in a moment. |
| ... no longer have an independent right to it. Unbind it instead | The pack is no longer one you own, for example because its author deleted their account. You can turn it off or unbind it, nothing else. | Unbind it when you no longer need it. |
Adding an item
These appear to a player (or the GM) taking an item in the character builder, at Level Up or with + From pack.
| Message | What it means | How to fix it |
|---|---|---|
| Pack not applied to this sheet | The pack isn't bound to this game (or is turned off), and the sheet has never taken from it. | Bind the pack, or turn it back on. |
| This table's pinned pack revision could not be found | The game's pinned revision is missing. | Unbind and bind again. |
| "..." has been retired from this pack and can no longer be added. | You retired that item. Characters who have it keep it. | Remove the key from retired if you want it offered again. |
| inventoryItem not found in pack | The item isn't in the pinned revision, or isn't an item row. | Move the game to the revision that has it. |
"..." is not something a character holds (CONTRIBUTION_CARRIER_NOT_ADDABLE) |
Someone tried to add the row that carries a subclass as if it were an item. | Pick the subclass inside its choice, at Level Up or in the builder. |
"..." is a ... feature, and this character has no ... levels. It arrives with the class level, subclass or feature choice that grants it. (CLASS_FEATURE_NOT_ADDABLE) |
Someone tried to add another class's feature on its own, such as "Rage" is a Barbarian feature, and this character has no Barbarian levels. + From pack never offers class features, so this comes from adding one some other way. | Let the feature arrive with its class level, subclass or choice, through the builder or Level Up. |
"..." comes with a class level this character has not reached. (CLASS_FEATURE_NOT_ADDABLE) |
The feature is one your pack adds to a class level the character hasn't reached yet. | It arrives when the character reaches that level. |
Only the GM can add "..." to a sheet. (GM_TABLE_OFFER_ONLY) |
The item is of a kind the game's system keeps for the GM, such as an Ashfall horror, and a player tried to add it. + From pack never offers one to a player, so this comes from adding it some other way. | The GM adds it. |
| Use Level Up to add a class level. / A class level can only be added through Level Up. | Class levels aren't added like items. | Use the builder's Choose Your Class or Level Up. |
| Item "..." auto-includes pack "..." which isn't applied to this sheet | The item grants something from a pack that isn't at this game: not bound here, not taken from before, and not one of RollQuest's packs. | Bind the pack the grant comes from. |
| autoInclude target "..." not found in pack "..." | The item grants a key the other pack doesn't have at the revision in use. | Fix the key, or move the game to a revision that has it. |
| Unsupported choice kind | The item's choice has a kind RollQuest doesn't know. The checker refuses a pack with one (CHOICE_INVALID), so this only comes from a pack saved before that check existed. |
Use a kind from Choices and grants, save the pack, move the game to the new revision, then re-stamp. |
| Missing resolution for choice | The item asks a question that wasn't answered. | Add it again and answer every choice. |
| A price shown in red and Need ... more | The player can't afford the item. | Earn the coins, or the GM adds it. |
Related
Your first homebrew pack, step by step · The pack file, field by field · Put your pack on a table · Effects · Choices and grants
