| |
| rumors_and_quests [2026/07/05 21:48] – created appledog | rumors_and_quests [2026/07/05 22:34] (current) – external edit 127.0.0.1 |
|---|
| ====== Quests and Rumors ====== | = Quests and Rumors |
| |
| //Builder reference for the guild board. Two coin-fed systems share one board prop: **rumors** (cheap, unreliable gossip) and **quests** (real, tracked commissions).// | //Builder reference for the guild board. Two coin-fed systems share one board prop: **rumors** (cheap, unreliable gossip) and **quests** (real, tracked commissions).// |
| |
| ===== The board ===== | == The board |
| |
| A **board** is any item flagged ''data.questboard'' standing in a room (e.g. the Adventurer's Guild). Players feed it coins: | A **board** is any item flagged ''data.questboard'' standing in a room (e.g. the Adventurer's Guild). Players feed it coins: |
| |
| * ''insert copper'' -- prints a random **rumor** (true or false; buyer beware). | * ''insert copper'' -- prints a random **rumor** (true or false; buyer beware). |
| * ''insert silver'' -- takes on a **quest** posted at this board. ''insert 3 silver'' takes up to three at once. | * ''insert silver'' -- takes on a **quest** posted at this board. ''insert 3 silver'' takes up to three at once. |
| |
| Either way you're only charged for what's actually delivered -- an empty rumor pool or a board with nothing new for you costs nothing. | Either way you're only charged for what's actually delivered -- an empty rumor pool, or a board with nothing new for you, costs nothing. |
| |
| To make a board: create a fixture item in the room and set ''item <ref> data questboard true''. | To make a board: create a fixture item in the room and set ''item <ref> data questboard true''. |
| |
| ===== Rumors (the copper pool) ===== | == Rumors (the copper pool) |
| |
| Rumors are one-line strings, each tagged true or false -- a pool tag the player never sees (''insert copper'' returns a random one, true or false). The pool is global. Admin-only: | Rumors are one-line strings, each tagged true or false -- a pool tag the player never sees (''insert copper'' returns a random one, true or false). The pool is global. Admin-only: |
| |
| * ''addrumor true|false <text>'' -- post a rumor (stand at a board). | * ''addrumor true|false <text>'' -- post a rumor (stand at a board). |
| * ''remrumor <id>'' -- remove one by id. | * ''remrumor <id>'' -- remove one by id. |
| * ''rumors'' -- list every rumor with its id and T/F tag (works anywhere). | * ''rumors'' -- list every rumor with its id and T/F tag (works anywhere). |
| |
| ===== Quests ===== | == Quests |
| |
| A quest is **authored as an ordinary item**, then posted to a board. Everything the quest does lives in that item's ''data''. | A quest is **authored as an ordinary item**, then posted to a board. Everything the quest does lives in that item's ''data''. |
| |
| ==== Authoring a quest ==== | === Authoring a quest |
| |
| - ''item create Rats!'' -- the item name is the quest name. | * ''item create Cellar Pests'' -- the item name is the quest name. |
| - ''item Rats! desc <the overall goal>'' -- shown at the top of ''quest <name>''. | * ''item Cellar desc <the overall goal>'' -- shown at the top of ''quest <name>''. |
| - ''item Rats! data quest kill'' -- mark it a quest (any non-empty type works as the marker). | * ''item Cellar data quest kill'' -- mark it a quest (any non-empty type works as the marker). |
| - set the step fields below with ''item Rats! data <field> <value>''. | * set the step fields below with ''item Cellar data <field> <value>''. |
| - ''quest add Rats!'' -- file it onto the board you're standing at (this consumes the staging item; ''quest remove'' gets it back). | * ''quest add Cellar'' -- file it onto the board you're standing at (this consumes the staging item; ''quest remove'' gets it back). |
| |
| ==== The step machine ==== | === The step machine |
| |
| A quest is a sequence of steps numbered from **0**. Each player's ticket remembers their current step. Step N is described by these ''data'' fields (N is the step number): | A quest is a sequence of steps numbered from **0**. Each player's ticket remembers their current step. Step N is described by these ''data'' fields (N is the step number): |
| The quest **completes** the moment it reaches a step whose ''cond'' is ''done''. | The quest **completes** the moment it reaches a step whose ''cond'' is ''done''. |
| |
| ==== Conditions ==== | === Conditions |
| |
| * ''find <item>'' -- met while the player is **holding** a matching item. It fires on pickup, on loot, or immediately if they already carry it when they accept the quest. The item is **not** consumed -- they keep it. | * ''find <item>'' -- met while the player is **holding** a matching item. It fires on pickup, on loot, or immediately if they already carry it when they accept the quest. The item is **not** consumed -- they keep it. |
| * ''kill <mob>'' -- met when the player **slays** a matching mob (credited to the killer). | * ''kill <mob>'' -- met when the player **slays** a matching mob (credited to the killer). |
| |
| Matching is case-insensitive and by substring, so ''kill rat'' would trigger on any mob whose name contains "rat". Name the target specifically -- ''kill Lord of the Rats''. | Matching is case-insensitive and by substring, so ''kill rat'' would trigger on any mob whose name contains "rat". Name the target specifically -- ''kill goblin chief'', not just ''kill goblin''. |
| |
| ==== Rewards ==== | === Rewards |
| |
| A reward spec (used for ''reward_N'' / ''repeat_reward_N'') is one of: | A reward spec (used for ''reward_N'' / ''repeat_reward_N'') is one of: |
| |
| * ''<n> xp'' -- experience, e.g. ''1000 xp''. | * ''<n> xp'' -- experience, e.g. ''1000 xp''. |
| * ''<n> gold|silver|copper'' -- coins, e.g. ''5 gold''. | * ''<n> gold|silver|copper'' -- coins, e.g. ''5 gold''. |
| * ''[<n>] <item name>'' -- item(s) copied from the **item factory**, e.g. ''gem of garaldor'' or ''3 healing potion''. The factory is the canonical source, so the reward item is identical to the real thing (a Gem of Garaldor carries its ''skillgem'' flag and turns in at Wizzy's exactly like a dropped one). If no factory template matches, the reward is silently skipped -- so ''itemf add'' the item first. | * ''[<n>] <item name>'' -- item(s) copied from the **item factory**, e.g. ''healing potion'' or ''3 healing potion''. The factory is the canonical source, so the reward item is identical to the real thing -- any special data it carries (skill hooks, flags) comes along. If no factory template matches, the reward is silently skipped, so ''itemf add'' the item first. |
| |
| ==== Repeatable quests ==== | === Repeatable quests |
| |
| Set ''item <quest> data repeatable true''. After a completion the player may take the quest again; it restarts at step 0. On every run **after the first**, each step pays ''repeat_reward_N'' if present, otherwise ''reward_N''. Use this to give a one-time prize the first time and a lesser, farmable reward after -- e.g. ''reward_1'' a Gem of Garaldor, ''repeat_reward_1'' 1000 xp. | Set ''item <quest> data repeatable true''. After a completion the player may take the quest again; it restarts at step 0. On every run **after the first**, each step pays ''repeat_reward_N'' if present, otherwise ''reward_N''. Use this to give a prized reward the first time and a lesser, farmable one after -- a rare item on the first clear, say, and a handful of coins on every run after. |
| |
| ==== Lifecycle ==== | === Lifecycle |
| |
| * **Abandon** (''quest drop''): the quest is hidden from the player's list, but its **step is kept**. Re-taking resumes exactly where they left off -- so nobody can drop-and-retake to farm an early step's reward. | * **Abandon** (''quest drop''): the quest is hidden from the player's list, but its **step is kept**. Re-taking resumes exactly where they left off -- so nobody can drop-and-retake to farm an early step's reward. |
| * **Repeat**: re-taking a completed **repeatable** quest restarts it at step 0, and every step now uses its repeat reward. | * **Repeat**: re-taking a completed **repeatable** quest restarts it at step 0, and every step now uses its repeat reward. |
| * A **non-repeatable** quest, once complete, cannot be taken again. | * A **non-repeatable** quest, once complete, cannot be taken again. |
| |
| ==== Player commands ==== | === Player commands |
| |
| * ''insert silver'' -- take on an available quest at the board. | * ''insert silver'' -- take on an available quest at the board. |
| * ''quest'' -- list your active quests, each with its current objective. | * ''quest'' -- list your active quests, each with its current objective. |
| * ''quest <#|name>'' -- the overall goal plus what to do now. | * ''quest <#|name>'' -- the overall goal plus what to do now. |
| * ''quest drop <#|name>'' (or ''quest d'') -- set a quest aside. | * ''quest drop <#|name>'' (or ''quest d'') -- set a quest aside. |
| |
| ==== Builder board commands ==== | === Builder board commands |
| |
| * ''quest add <item>'' -- post a held quest item onto the board here. | * ''quest add <item>'' -- post a held quest item onto the board here. |
| * ''quest remove <#|name>'' (or ''quest rem'') -- pull a posted quest back into your inventory as an editable item (revise, then ''quest add'' again). | * ''quest remove <#|name>'' (or ''quest rem'') -- pull a posted quest back into your inventory as an editable item (revise, then ''quest add'' again). |
| * ''quest copy <#|name>'' -- take a playable ticket of a posted quest, to test it end to end. | * ''quest copy <#|name>'' -- take a playable ticket of a posted quest, to test it end to end. |
| * ''examine <board>'' -- lists the quests posted at that board with their numbers. | * ''examine <board>'' -- lists the quests posted at that board with their numbers. |
| |
| ===== Worked example: Rats! ===== | == Worked example (a made-up quest) |
| |
| <code> | A whole quest authored from scratch. Nothing here is a real Mossworld quest -- it just shows the shape: a two-step //find//-then-//kill//, with per-step rewards and a repeat reward. |
| name: Rats! | |
| desc: Kill the Lord of the Rats in the Mosgaard Sewers. | |
| data: | |
| quest kill | |
| info_0 To find the Lord of the Rats, you may need a magic key. | |
| They say there is one hidden in the gray wizard's tower. | |
| cond_0 find magic key | |
| pass_0 You found the magic key! | |
| reward_0 1000 xp | |
| info_1 Seek out the lair of the Lord of the Rats, deep beneath the sewers. | |
| cond_1 kill Lord of the Rats | |
| pass_1 You have slain the Lord of the Rats and received your reward! | |
| reward_1 gem of garaldor | |
| repeat_reward_1 1000 xp | |
| cond_2 done | |
| repeatable true | |
| </code> | |
| |
| Play-through: accept the quest -> holding a **magic key** clears step 0 for 1000 xp -> slaying the **Lord of the Rats** clears step 1 for a **Gem of Garaldor** (or 1000 xp on repeats) -> ''done''. | {{{ |
| | item create Cellar Pests |
| | item Cellar desc The innkeeper's cellar is overrun with rats. Clear it out. |
| | item Cellar data quest kill |
| | item Cellar data info_0 Ask the innkeeper for the key to the cellar. |
| | item Cellar data cond_0 find cellar key |
| | item Cellar data pass_0 The innkeeper hands you the cellar key. |
| | item Cellar data reward_0 25 copper |
| | item Cellar data info_1 Go down and clear the rats out of the cellar. |
| | item Cellar data cond_1 kill cellar rat |
| | item Cellar data pass_1 The last of the rats is dealt with. |
| | item Cellar data reward_1 2 silver |
| | item Cellar data repeat_reward_1 50 copper |
| | item Cellar data cond_2 done |
| | item Cellar data repeatable true |
| | quest add Cellar |
| | }}} |
| |
| ===== Notes and limits ===== | Play-through: the player ''insert silver''s to take the quest, gets the cellar key (step 0 clears -- +25 copper), goes down and kills a cellar rat (step 1 clears -- +2 silver, or +50 copper on repeats), and the quest completes. |
| |
| * ''kill'' credit currently goes to the killer only -- no party-wide credit yet. | == Notes and limits |
| * Reward items must already exist in the item factory (''itemf add'') or the reward is skipped. | |
| * Quest **tickets** are pure data (their own table), never real items -- they can't be dropped, sold, or stored, and only show under ''quest''. | * ''kill'' credit currently goes to the killer only -- no party-wide credit yet. |
| | * Reward items must already exist in the item factory (''itemf add'') or the reward is skipped. |
| | * Quest **tickets** are pure data (their own table), never real items -- they can't be dropped, sold, or stored, and only show under ''quest''. |
| |