User Tools

Site Tools


rumors_and_quests

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

rumors_and_quests [2026/07/05 21:48] – created appledogrumors_and_quests [2026/07/09 13:35] (current) – external edit 127.0.0.1
Line 1: Line 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 poolor a board with nothing new for youcosts 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''. Once posted you can also tune it in place -- see **Builder board commands** below.
  
-==== 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):
Line 40: Line 40:
 ^ Field ^ What it does ^ ^ Field ^ What it does ^
 | ''info_N'' | the "what to do now" line, shown in the quest list and in ''quest <name>'' while at step N | | ''info_N'' | the "what to do now" line, shown in the quest list and in ''quest <name>'' while at step N |
-| ''cond_N'' | how to clear step N: ''find <item>'', ''kill <mob>'', or ''done'' |+| ''cond_N'' | how to clear step N: ''find <item>'', ''kill <mob>'', ''kill <n> <mob>'', ''kill all <a>|<b>'', ''give <item> to <npc>'', or ''done'' 
 +| ''tally_N'' | (optional) the plural noun shown in a counted-kill's progress, e.g. "bats" |
 | ''pass_N'' | flavour line printed the instant cond_N is met | | ''pass_N'' | flavour line printed the instant cond_N is met |
 | ''reward_N'' | reward granted on clearing step N (first run) | | ''reward_N'' | reward granted on clearing step N (first run) |
Line 47: Line 48:
 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). 
 +* ''kill <n> <mob>'' -- a **counted** kill: slay //n// of the mob. Progress is tracked per player and printed on each kill (''[Quest] 3/10 bats.''); the step clears on the //n//th. Set ''tally_N'' to the noun ("bats") for a tidy message. 
 +* ''give <item> to <npc>'' -- met when the player **hands** the named item to the named NPC (see //Item turn-ins//). The item **is** consumed. Both the item and the NPC match by substring. 
 +* ''collect <n> <item>'' -- met when the player is **carrying at least //n// total** of an item (stacks are summed), re-checked whenever they pick some up or are handed some. On clearing, //n// of the item **are consumed**. A bulk material turn-in / commodity sink -- pair it with a coin reward to set a standing price for a material (e.g. ''collect 1000 wool'' rewarding ''1 gold'' pegs wool at 10 copper a unit, a de-facto auction-house floor).
  
-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 ====+A counted kill can also accept **several targets** separated by ''|'' -- any of them counts toward the tally. For example ''kill 10 lion|tiger|bear'' clears when the player has slain ten in any mix of lions, tigers and bears. 
 + 
 +Where several targets must **all** be dealt with -- a "clear both" objective -- use ''kill all <a>|<b>[|<c>...]'' instead. This tracks each distinct target and clears only once **every** one has fallen, in any order, announcing progress as each goes down (''[Quest] Fence down -- 1/2.''). So ''kill all fence|pickpocket'' needs both the fence **and** a pickpocket dead -- where ''kill 2 fence|pickpocket'' would settle for any two kills between them. 
 + 
 +==== Item turn-ins (give to an NPC) 
 + 
 +An NPC will not take an item **unless an active quest wants it** -- otherwise ''give <item> <npc>'' just gets "//<NPC> doesn't want that item.//" So a ''give <item> to <npc>'' step is only reachable while its quest is active: the player carries the item to that NPC and either ''give''s it or ''sell''s it to them (both hand it in). On the turn-in the item is consumed, the step's ''pass_N'' prints (use it for the NPC's dialogue), and ''reward_N'' is granted. 
 + 
 +To keep the quest item from being sold for coins at some other shop -- and lost -- mark it **''unsellable''** in its data (''item <ref> data unsellable true'', or on a spawn's data). No shopkeeper will buy an ''unsellable'' item; only the turn-in at the right NPC accepts it. //(This is a dedicated no-shop flag -- unlike ''junk'', it has no recycle or auction side effects.)// 
 + 
 +=== 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'exactly like 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. 
 + 
 +**Bundle** several rewards on one step by joining them with ''+'': ''reward_0 = 250 xp + 5 silver'' grants both, each announced on its own line. Any mix works, e.g. ''1000 xp + 10 silver + healing potion''
 + 
 +=== The level gate 
 + 
 +Every quest has a minimum character level, ''data.level'' (default **1**). A board never offers a player a quest above their level, and ''insert silver'' hands out a **random** eligible quest from the pool -- so a single board can post a whole spread of levels and give each adventurer only what suits them. **Unfinished quests come first**: a repeatable you've already cleared is only handed back once there'nothing new or resumable left on the board, so you're never sent to re-grind repeat while fresh content is waiting. If the only quests left are above the player's level, the board tells them to come back stronger (and charges nothing). 
 + 
 +Set it while authoring (''item <quest> data level 7'') or on a posted quest (''quest level <#|name> 7''). 
 + 
 +**Repeats age out.** The level gate has a ceiling on the //repeat// side: once a player is **5 levels past** a quest's minimum, a **repeatable** quest stops being handed back for re-runs -- a level-10 repeatable can be re-farmed at levels 10 through 14, but not from 15 on (you've outgrown the grind). This caps //repeats only//; the **first** run of a quest you've never finished is never aged out -- it stays available until you actually complete it, however high you climb, so no story is lost by outleveling it. (An aged-out repeat is simply not offered; the board doesn't send you to "come back stronger" for it.) 
 + 
 +=== Repeatable and unique quests 
 + 
 +By default a quest can be taken **once**: after completion it can never be taken again. 
 + 
 +* **Repeatable** (''data.repeatable true''): after a completion the player may take it 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. //(Re-runs are offered only while the player is within **5 levels** of the quest's minimum -- see //The level gate// above.)// 
 +* **Unique** (''data.unique true''): one-and-done **forever** -- never handed out again once the player has completed it, even if it was also marked repeatable (unique wins). This is how one-per-character relic quests stay one-per-character. 
 + 
 +=== 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. 
 +* **Repeat**: re-taking a completed **repeatable** quest restarts it at step 0, and every step now uses its repeat reward. A counted kill's tally resets to zero for the new run. 
 +* A **once-only** or **unique** quest, once complete, cannot be taken again. 
 + 
 +=== Player commands 
 + 
 +* ''insert silver'' -- take on a random eligible quest at the board. 
 +* ''quest'' -- list your active quests, each with its current objective. 
 +* ''quest <#|name>'' -- the overall goal plus what to do now (with counted-kill progress). 
 +* ''quest drop <#|name>'' (or ''quest d'') -- set a quest aside.
  
-==== Repeatable quests ====+=== Builder board commands
  
-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.+Stand at the board for all of theseStock the board:
  
-==== Lifecycle ====+* ''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 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.
  
-  * **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. +**Tune a posted quest in place** -- no remove / edit-item / re-add round-trip needed. Refer to the quest by its board number (from ''examine <board>'') or by name:
-  * **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.+
  
-==== Player commands ====+* ''quest raw <#|name>'' -- dump the quest's description and every data field, so you can see what to change. 
 +* ''quest level <#|name> <n>'' -- set the minimum level. 
 +* ''quest unique <#|name> [on|off]'' -- flag it one-and-done (bare toggles). 
 +* ''quest repeat <#|name> [on|off]'' -- flag it repeatable (bare toggles). 
 +* ''quest set <#|name> <field> <value>'' -- set any data field (''cond_0'', ''reward_0'', ''info_0'', ''tally_0'', ...); the value may be several words. 
 +* ''quest unset <#|name> <field>'' -- remove a data field.
  
-  ''insert silver'' -- take on an available quest at the board. +The tune commands read the **first word** as the quest referenceso a multi-word name like "Bat Cull" is matched by its first word ("bat"or -- more reliably -- by its board number.
-  * ''quest'' -- list your active questseach with its current objective. +
-  * ''quest <#|name>'' -- the overall goal plus what to do now. +
-  * ''quest drop <#|name>'' (or ''quest d''-- set a quest aside.+
  
-==== Builder board commands ====+== Worked example (a made-up quest)
  
-  * ''quest add <item>'' -- post held quest item onto the board here. +A whole quest authored from scratch. Nothing here is a real Mossworld quest -- it just shows the shape: two-step //find//-then-//kill//, with per-step rewards and repeat reward.
-  * ''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 playable ticket of a posted quest, to test it end to end. +
-  * ''examine <board>'' -- lists the quests posted at that board with their numbers.+
  
-===== Worked example: Rats! =====+{{{ 
 +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 level 2 
 +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 ten rats out of the cellar. 
 +item Cellar data cond_1 kill 10 cellar rat 
 +item Cellar data tally_1 rats 
 +item Cellar data pass_1 The last of the rats is dealt with. 
 +item Cellar data reward_1 2 silver + 100 xp 
 +item Cellar data repeat_reward_1 50 copper 
 +item Cellar data cond_2 done 
 +item Cellar data repeatable true 
 +quest add Cellar 
 +}}}
  
-<code> +Play-through: the player ''insert silver''s to take the quest (they must be level 2), gets the cellar key (step 0 clears -- +25 copper)goes down and kills ten cellar rats (the board shows ''3/10 rats'' as they go; step 1 clears -- +2 silver and +100 xp, or +50 copper on repeats), and the quest completes.
-name Rats! +
-desc:  Kill the Lord of the Rats in the Mosgaard Sewers. +
-data: +
-  quest            kill +
-  info_0           To find the Lord of the Ratsyou 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 Ratsdeep 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''.+To make it a one-and-done relic quest instead, drop the repeat line and mark it unique: ''quest unique Cellar''.
  
-===== Notes and limits =====+== Notes and limits
  
-  * ''kill'' credit currently goes to the killer only -- no party-wide credit yet. +* ''kill'' credit currently goes to the killer only -- no party-wide credit yet, and one kill counts toward only one of your quests
-  * Reward items must already exist in the item factory (''itemf add'') or the reward is skipped. +* 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''.+* Quest **tickets** are pure data (their own table), never real items -- they can't be dropped, sold, or stored, and only show under ''quest''.
  
rumors_and_quests.1783288106.txt.gz · Last modified: by appledog

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki