Skip to content

Appendix I: The Blueprint & NPC Design Manual


Foreword: The Curator’s Toolkit

The following section provides an advanced, optional toolset for Curators who wish to create and share content using a standardized shorthand. This 'codex language' is not required for play but offers a powerful method for procedural generation and campaign management. Feel free to use or ignore this section based on your personal style.

This appendix details the Psychromattica System’s complete toolset for creating and codifying content. It provides the full design pipeline, from architecting a character's entire ecosystem to procedurally generating the scenes they inhabit. The core of this system is the relationship between three key tools:

  1. The Entity Design Codex: A set of syntaxes for creating deep, persistent characters, animations, items, and factions.
  2. The Scene Blueprint Language: A shorthand for generating dynamic scenes.
  3. The Procedural Generation Engine: A series of tables and steps to randomly generate any entity or scene on the fly.

Part 1: The Entity Design Codex

This section defines the syntax for creating each type of entity in the game. Each complete build can be stored with a unique ID (e.g., Archivist_L3, TomeGolem) for easy reference by the Scene Blueprint.

1.0 The Unified Build String & Core Syntax

A Unified Build String represents a complete character loadout. It is composed of one or more entity strings, each prefixed to identify its type and separated by a semicolon.

Master Syntax: C:[character_string]; A:[animation_string]; I:[item_string]; F:[faction_string]

  • Prefixes:
    • C: = Character / NPC
    • A: = Animation
    • I: = Item
    • F: = Faction
  • Delimiter: A semicolon ; separates distinct entity strings.
  • Order: The Character string (C:) should always come first. The order of other entities is optional.

1.1 Character & NPC Design (C:)

This string defines a fully-fledged character or major NPC.

Syntax: C:#####[+####]-##-##.##.##-##.##.S...

  • ##### Profile: The required 5-digit Motivational Profile code.
  • +#### Flaw Package (Optional): The additive Flaw/Compensation code. Can appear anywhere after the Profile.
  • -## Seed: The character's first keyword.
  • -##.##.## Awakening: The three keywords learned to reach Level 1.
  • -##.##.S Progression: Standard two-keyword packages for leveling up. S denotes the primary stat for that level.

1.2 Animation Design (A:)

This string defines a simplified entity, such as a companion, minion, or summon.

Syntax: A:[+####]-##.##.##...

  • No Profile: Animations do not have a 5-Point Profile.
  • +#### Flaw Package (Optional): Can be included if the Animation has a defining flaw.
  • ## Seed: The first keyword is the Animation's Seed.
  • .## Progression: Each subsequent keyword increases the Animation's Level by one. An Animation's Level is equal to the total number of keywords in its string.

1.3 Item Design (I:)

This string defines a piece of gear.

Syntax: I:L#[+####]-##.##.##...

  • L# Level Declaration: The string must begin by declaring the Item's Level (L0-L9). This determines its keyword capacity.
  • Keyword Capacity: An item can hold a number of keywords up to its Level, with a maximum of 5 keywords at Level 4 and above.
  • +#### Flaw Package (Optional): An item can have a Flaw. The #### code does not consume a keyword slot.
  • -##.##... Keywords: The list of keywords embedded in the item.

1.4 Faction Design (F:)

This string defines an organization, its ideology, resources, and specializations.

Syntax: F:#####-L#[S#.S#...]-[K##.##...]

  • ##### Profile: A Faction has a 5-Point Profile that defines its core ideology and goals.
  • L# Level Declaration: The Faction's Level, which must match the number of Civil Systems it possesses.
  • [S#.S#...] Systems: A list of established Civil Systems.
  • [K##.##...] Keywords: A list of keywords the Faction can grant via Items or Downtime.

1.5 The Flaw/Compensation Protocol (####)

A Flaw is a significant, character-defining event. It is not part of normal progression but a narrative addition to a character, representing a permanent drawback accepted in exchange for a unique active ability.

  1. The Rule of One: An entity’s codex string can contain only one #### code.
  2. The Pure Exchange: When a character gains a Flaw, they receive a "Flaw Package." This package consists of a single #### code. The trade-off is direct:
    • The Penalty: The character is now subject to the permanent penalty of the Flaw keyword.
    • The Ability: The character gains permanent access to the active effect of the Compensation keyword.
  3. No Keyword Gain: The Flaw Package adds zero keywords to the character's total count for leveling purposes. The Compensation is a special ability gained from the Flaw, not a "learned keyword" in the standard sense.
  4. The Additive Event: Gaining a Flaw is an additive event, not a progression step. It occurs due to story events and is added on top of a character's existing progression, denoted by a + delimiter. It does not replace, consume, or alter the standard, two-keyword leveling cycle.

1.6 Progression

All Character and Animation progression, including Level, Keyword, and Stat Point gain, follows the rules and tables outlined in Layer 5, Section 2.4: Character Progression: The Path of Refinement.

1.7 Codifying Entity State (Optional Syntax)

While the core syntax defines an entity's permanent build (stats and learned keywords), these optional modifiers allow a Curator to codify an entity's current configuration. This is especially useful for tracking major NPCs and their loadouts between sessions.

Slotted Passive Keywords (!)

To denote a keyword that is currently slotted and active as a passive, prefix its two-digit code with an exclamation mark (!). An entity cannot have more active passives than their slots allow (determined by Force for innate keywords and Expertise for gear keywords).

Syntax: !##

Keyword Option Selections (())

For keywords that require a permanent or semi-permanent choice (e.g., a movement type for Traveller, a sense for Sensor), the chosen option's code is appended in parentheses (#) immediately after the keyword's code. The number corresponds to the option listed in the keyword's description in Appendix A.

Syntax: ##(#)


Combined Example:

A Level 1 Character has Alert (0.3) as their Seed, slotted passively. For their Awakening, they learned Traveller (1.1) with Teleport (option 1), Martial (1.2), and Attuned (1.3), with Attuned also slotted passively.

Their keyword string would be: -!03-11(1).12.!13

1.8 Attachment & Separation Delimiters

The original semicolon delimiter ; is reserved for separating completely independent ecosystems. To build a single, connected ecosystem where entities are owned by a primary character or each other, use the following attachment delimiters:

  • @ (Attach to Root): Attaches an entity directly to the root Character (C:) of the ecosystem.
    • Example: C:char_data@A:companion attaches the companion to the character.
  • / (Attach to Previous/Nested Attachment): Attaches an entity to the immediately preceding entity in the string. This is used to create nested ownership, such as an item owned by a specific animation.
    • Example: ...A:companion/I:item attaches the item specifically to the companion, not the root character.
  • ; (Ecosystem Separator): Separates two completely distinct and unrelated ecosystems.

Master Example:

C:01@A:!37/I:L0-97@A:11(2)@I:L0-!46

This string defines a single ecosystem with the following relationships: 1. A:!37 is attached to the root Character. 2. I:L0-97 is attached only to A:!37. Its passives affect A:!37 and use A:!37's gear passive slots. 3. A:11(2) is also attached to the root Character. 4. I:L0-!46 is attached to the root Character and is part of their personal inventory. Its passives affect the character and use the character's gear passive slots.

1.9 Standalone Faction Ecosystems

While the standard ecosystem is rooted in a Character (C:), the blueprint language also supports the creation of standalone Faction ecosystems. This is used to codify organizations that exist independently in the world, complete with their leadership structure.

  • (1.9.1) The Faction as a Root: When a Faction string (F:) is the first entity in a string or follows a semicolon ;, it is considered the root of its own ecosystem.
  • (1.9.2) Attaching Leadership: The @ (Attach to Root) delimiter is used to attach the codex strings of the faction's leaders directly to the Faction string. Since leaders are fully-fledged NPCs, they are defined using the Character (C:) syntax.
  • (1.9.3) Syntax and Master Example: The structure for a standalone faction is F:[faction_data]@C:[leader_1_data]@C:[leader_2_data]....

Example: The Rivertown Coalition (Codex ID: RivertownCoalition_L3)

The following string defines the entire organization: its core profile and systems, plus the complete codex strings for its three Civil System leaders.

F:35928-L3[S0.S2.S3]-[K31.53.82]@C:30672-51-41.61.71@C:32486-32-31.38.37@C:33519-52-53.57.58

When a Curator calls this single entity in a Scene Blueprint, they instantly have access to:

  • The Faction: A Level 3 organization with a population of ~1,000 and generic Level 3 members.
  • The Leaders: Forager Elara, Foreman Jax, and Engineer Mave, each a fully defined Level 2 NPC with their own unique profile and build.

1.10 Nation-Tier Ecosystems

The blueprint language uses a nested hierarchy to codify a Nation and its member Factions. This structure clearly defines the relationship between the parent Nation and its constituent parts.

  • (1.10.1) Syntax: A Nation ecosystem is defined by placing the Nation's Faction string (F:) at the root. The full ecosystem strings of its member Factions are then nested under it using the / (Attach to Previous/Nested Attachment) delimiter.

    F:[Nation_Data] /F:[Faction_1_Ecosystem] /F:[Faction_2_Ecosystem] /F:[Faction_3_Ecosystem]... * (1.10.2) Master Example: The Valen Concord

    Let's say three Factions unite: 1. The Wardens (L4, Goal: Security): The most powerful, they become the Goal Faction. 2. The Rivertown Coalition (L3, Goal: Security): Their methods are pragmatic. The Curator decides they become the Method Faction. 3. The Sunbringers (L3, Goal: Purity): A philosophical order. They become the Purpose Faction.

    The Valen Concord is formed. Its Profile is derived from its Trinity: * Goal: Security (from The Wardens) * Method: Security (from The Rivertown Coalition) * Purpose: Purity (from The Sunbringers) * Conflicts: Inherited from The Wardens.

    The final codex string would look like this (abbreviated):

    F:[ValenConcord_Profile]-L0 /F:[Wardens_Ecosystem] /F:[Rivertown_Ecosystem] /F:[Sunbringers_Ecosystem]

    This string now represents a complete political entity defined by its core ideologies. It clearly shows who is in charge (The Wardens), how they operate (pragmatic security from Rivertown), and what they believe in (the purifying justice of the Sunbringers), while also containing the complete data for every Faction and leader within the alliance.


Part 2: The Scene Blueprint Language

This language allows a Curator to generate a complete Scene from a single string, populating it with challenges and entities.

2.0 Core Components & Delimiters

  • ##, ####, L#, S#, K#: Standard codes from the Codex.
  • X, Y: Barrier and Puzzle challenges.
  • *: Operator for a Race Situation (activates Threat Clock).
  • (): Scene Complexity override.
  • -, |, :, ,: Structural delimiters.

2.1 Scene Structure

A Scene is generated from: (Complexity)[Theme Code]-[Situation Code(s)]:[Manifest(s)]

2.2 The Manifest: Populating a Situation

The Manifest [...] contains packages that generate the specific challenges. It supports two primary methods for entity placement: Embedded (Raw Code) and Referenced (ID).

  • Embedded Entity Package [Prefix:(full_codex_string)]: The entity's complete, raw codex string is placed directly into the manifest, encapsulated by parentheses (). This creates a fully self-contained scene blueprint.
  • Referenced Entity Package [Prefix:ID]: Calls a pre-designed entity that has been stored elsewhere with a unique ID. Ideal for recurring entities in a campaign.
  • Generic Entity Package [Gen:Type-L±#-Seed##]: Creates a generic, unnamed entity on the fly.
  • Challenge & Item Packages: X[L±#], Y[L±#], Item[L#-KW##...]
  • The Chaos Slot (Optional Tool): To inject unpredictability, the Curator can choose to add a "Chaos Slot" to any Situation. This is a discretionary tool, not a mandatory rule. When used, the Curator adds one extra, randomly generated entity to the manifest.

Part 3: Master Example & Core Reference

3.0 Master Example: The Archivist's Sanctum (Self-Contained Blueprint)

This example demonstrates a complete Scene Blueprint using embedded raw codex strings.

The Complete, Self-Contained Scene Blueprint: (2)43-6|*1:[Y[L+0]],[C:(46978-43-4x3-63.62.T+4067-91.93.F), A:(31.36), A:(31.36)]

Blueprint Breakdown:

  1. (2)43-6|*1 (Scene Parameters): A 2-Situation Scene, Theme 43, Sit 1 is Interaction, Sit 2 is a Race/Conflict.
  2. :[Y[L+0]] (Manifest for Situation 1): Contains one Puzzle at the party's level.
  3. ,[...manifest...] (Manifest for Situation 2): Contains one embedded Level 3 Character and two embedded Level 2 Animations.

3.1 Core Reference Tables

Motivation Code Reference

  • Code 0: Discovery
  • Code 1: Ambition
  • Code 2: Freedom
  • Code 3: Security
  • Code 4: Legacy
  • Code 5: Innovation
  • Code 6: Purity
  • Code 7: Glory
  • Code 8: Influence
  • Code 9: Faith

Civil System Codes (for Factions)

  • Code S0: Food
  • Code S1: Water
  • Code S2: Shelter
  • Code S3: Infrastructure
  • Code S4: Humanitarian
  • Code S5: Education
  • Code S6: Healthcare
  • Code S7: Government
  • Code S8: Commerce
  • Code S9: Military

Part 4: The Procedural Generation Engine

This engine provides a step-by-step method for randomly generating a complete Scene Blueprint and all the entities within it. Use d10s for all rolls; a d100 is rolled as two d10s.

4.1 Step 1: Generate the Scene Blueprint Structure

  1. Determine Complexity (Total Situations): Roll 1d10, divide by 2, and round up (1-5). This is the (Complexity) override.
  2. Determine Scene Theme: Roll 1d100. The result is the ## keyword code.
  3. Determine Situation Types: For each situation, roll 1d10 and consult the Situation Type list below.
  4. Check for Race Situations: For each situation, roll 1d10. On a result of 1 or 2, add a * prefix to its code.
  5. Assemble the Blueprint Structure (e.g., (4)[21]-3|*8|1|5:[...manifests...]).

Situation Type List (1d10)

Roll Type Code
1-2 Conflict 1
3-4 Obstacle 2
5-6 Interaction 3
7-8 Exploration 4
9 Twist 5
10 Curator's Choice/Hybrid 0

4.2 Step 2: Generate the Manifest for Each Situation

  1. Determine Number of Packages: Roll a die based on the situation's type:
    • Conflict: (1d10 / 3, rounded down) + 1 packages.
    • Obstacle, Interaction, Exploration: (1d10 / 3, rounded down) packages.
    • Twist: 1 package.
  2. Generate Each Package: For each package, roll 1d100 and consult the Master Manifest list.

Master Manifest List (d100)

Roll Package Type Instructions
01-20 Challenge Roll 1d10: 1-5 = Barrier X, 6-10 = Puzzle Y. Set Level L+0.
21-50 Generic Animation Generate [Gen:A-L±#-Seed##]. Roll L±#, roll d100 for Seed.
51-70 Generic Character Generate [Gen:C-L±#-Seed##]. Roll L±#, roll d100 for Seed.
71-85 Item Generate a random Item (see 4.3).
86-95 Referenced Entity Choose a relevant stored ID from your Codex.
96-00 Full Random Character Generate a complete, unique Character from scratch (see 4.3).

Level Modifier List (1d10 for L±#)

Roll Modifier
1-4 L-1
5-8 L+0
9 L+1
10 L+2 (Boss)

4.3 Step 3: Generate Entities from Scratch

Generating a Character/NPC (C:)

  1. Target Level: Determined by the manifest roll.
  2. Profile (#####): Roll 1d10 (0-9) five times.
  3. Seed (-##): Roll 1d100.
  4. Awakening (-##.##.##): Roll 1d10 for color (#x3) or 1d100 three times.
  5. Progression (-##.##.S): For each two-keyword package needed to reach the target level, roll 1d100 twice for keywords and 1d10 for the Stat point S (see list below).

Procedural Flaw Generation Rule:

  1. When rolling 1d100 for any keyword (Seed, Awakening, or Progression), if the result is a multiple of 10 (00, 10, 20... 90), a Flaw is triggered.
  2. If the entity already has a Flaw, discard the result and reroll the 1d100 until you get a valid keyword result.
  3. If the character does not already have a Flaw: Use the triggering roll (e.g., 30) as the first two digits of the Flaw code. Roll 1d100 again for the last two digits (e.g., 58) to create the full Flaw package (e.g., +3058). Add this package to the character string.
  4. After the Flaw package is added, you must reroll the original 1d100 for that keyword slot until the result is not a multiple of 10.

Stat Allocation List (1d10)

Roll Stat
1 M
2 A
3 B
4 W
5 E
6 T
7 P
8 I
9 F
10 Reroll

Generating an Animation (A:)

  1. Target Level: Determined by the manifest.
  2. Keywords: Roll 1d100 a number of times equal to the target Level + 1 (for the Seed). (re-roll duplicates)
    • Procedural Flaw Generation: Follow the same rule as for Characters. If a keyword roll results in a multiple of 10, use that roll to generate the first half of a Flaw package and add it to the string (if one does not already exist), then reroll the keyword.

Generating an Item (I:)

  1. Level (L#): Roll 1d10 for a level of 0-9.
  2. Keywords: Roll 1d100 a number of times equal to the Item's Level (maximum of 5), re-rolling duplicates.
    • Procedural Flaw Generation: Follow the same rule as for Characters. If a keyword roll results in a multiple of 10, use that roll to generate the first half of a Flaw package and add it to the string (if one does not already exist), then reroll the keyword.

Generating a Faction (F:)

  1. Profile (#####): Roll 1d10 five times (re-roll duplicates).
  2. Level (L#): Roll 1d10.
  3. Systems ([S#...]): Roll 1d10 (0-9) a number of times equal to the Faction's Level (re-roll duplicates).
  4. Keywords ([K#...]): Faction masters keywords equal to Level / 2 (rounded up). Roll 1d100 for each.

4.4 Putting It All Together: A Full Generation Example

The Curator needs a quick one-situation scene.

  1. Blueprint Structure: Complexity 1d10/2 -> (3). Theme d100 -> 71. Situations d10 -> 1, 3, 5. Race checks are 8, 9, 1.
    • Result: (3)[71]-1|3|*5:
  2. Manifest (Situation 1 - Conflict): (1d3, rounded down)+1 -> 2 packages.
    • Package 1: d100 -> 25 (Gen Animation). L-1, Seed 88. [Gen:A-L-1-88]
    • Package 2: d100 -> 60 (Gen Character). L+0, Seed 38. [Gen:C-L+0-38]
  3. Manifest (Situation 2 - Obstacle): (1d3, rounded down) -> 1 package.
    • Package 1: d100 -> 15 (Challenge). d10->2 (Barrier). [X[L+0]]
  4. Manifest (Situation 3 - Race/Interaction): (1d3, rounded down) -> 3 packages.
    • Package 1: d100 -> 01 (Challenge). d10->9 (Puzzle). [Y[L+0]]
    • Package 2: d100 -> 80 (Item). Generate L2 Item: I:L2-29.96.
    • Package 3: d100 -> 97 (Full Random Character). L+2 Boss.
  5. Final Blueprint: (3)[71]-1|3|*5:[Gen:A-L-1-88, Gen:C-L+0-38],[X[L+0]],[Y[L+0], I:(L2-29.96), C:(...full boss string...)]