Building quests
Quests are structured goal/reward bundles. They have a name, description, type, target (mob/obj/room depending on type), point/gold/exp/object rewards, level limits, optional prereq chain, and optional time limit. You build them with qedit.
Open the editor
qedit 8000 Create or edit quest vnum 8000
Quest vnums are usually grouped with the zone’s mob/obj range — typical convention is <zone>00-<zone>99.
Main menu
-- Quest Number : [8000]
1) Quest Name : Lost Crown
2) Description : Find the lost crown of King Welmar.
3) Accept Message
The old herald hands you a moth-eaten map and gestures wearily.
4) Completion Message
The herald's face lights up. "Welmar's crown — you found it!"
5) Quit Message
The herald sighs. "Perhaps another day, friend."
6) Quest Flags : REPEATABLE
7) Quest Type : AQ_OBJ_RETURN to herald [8001]
8) Quest Master : [8001] the old herald
9) Quest Target : [8050] a moth-eaten crown
A) Quantity : [1]
Quest Point Rewards
B) Completed : [50] C) Abandoned : [-10]
Other Rewards
G) Gold Coins : [500] T) Exp Points : [10000] O) Object : [8051]
Level Limits to Accept Quest
D) Lower Level : [5] E) Upper Level : [25]
F) Prerequisite : [-1] (none)
L) Time Limit : [60] (minutes)
N) Next Quest : [8001]
P) Previous Quest : [-1]
X) Delete Quest
Q) Quit
Pick the quest type FIRST
Type determines what the target field means and how the engine checks completion.
| Type | Target | Completion check |
|---|---|---|
AQ_OBJ_FIND | Object vnum | Player has the object in inventory |
AQ_OBJ_RETURN | Object vnum + value[5] = return-to mob vnum | Player gives the object to the return mob |
AQ_ROOM_FIND | Room vnum | Player enters the room |
AQ_ROOM_CLEAR | Room vnum | No hostile mobs remain in the room |
AQ_MOB_FIND | Mob vnum | Player encounters the mob (sees them in a room) |
AQ_MOB_KILL | Mob vnum | Player kills the mob (quantity lets you require N kills) |
AQ_MOB_SAVE | Mob vnum | Player saves the mob (via heal / rescue scripts) |
Choosing the type
- OBJ_RETURN — most common quest type. Find item X, bring to mob Y. Quest auto-completes when the player
gives the object. - MOB_KILL — second most common. Kill N of mob X. Quest auto-completes when the kill count is met.
- ROOM_FIND — exploration goal. Find the hidden waterfall.
- MOB_SAVE — needs script support; the mob must call
quest save <questname>from a trigger. - OBJ_FIND — possession-based. Player must just have the item — they don’t need to do anything else.
Fields
Name, description, messages (1-5)
- Name appears in
quest listand quest tracking displays. Keep short. - Description is the longer pitch shown when the player asks the quest master about it.
- Accept message displays when the player accepts. Set the tone.
- Completion message displays on success. The “thank you, brave adventurer” moment.
- Quit message displays on abandon. Lets you flavor failure.
Multi-line OK for all three messages.
Quest flags (6)
| Flag | Meaning |
|---|---|
REPEATABLE | Player can do this quest more than once. |
HIDDEN | Doesn’t show in quest list unless the player is eligible. |
IN_PROGRESS_OK | Player can accept while already doing the quest (e.g. for cross-character quest sharing). |
INSTANT | Auto-accept on quest-master interaction. No accept step. |
Quest master (8)
The mob vnum that gives + receives this quest. The quest master needs a Postmaster or quest-handling spec proc (or DG trigger) to actually dispatch the accept/complete handshake. A bare mob without a quest hook will not auto-handle quests.
Quest target (9)
Interpretation depends on type:
- For
OBJ_*types — the object vnum. - For
ROOM_*types — the room vnum. - For
MOB_*types — the mob vnum.
For AQ_OBJ_RETURN, also set the return-to mob by editing the target’s value[5] field (the editor labels it). This is who the player turns the item in to (often but not always the quest master).
Quantity (A)
For MOB_KILL: how many of the target mob must die. For OBJ_FIND: how many of the target object must be in inventory. Default 1.
Quest point rewards (B/C)
- B (Completed) — quest points granted on success.
- C (Abandoned) — quest points subtracted on quit. Often negative (penalty) but can be 0 (free quit).
Quest points are a separate currency from gold/exp; players spend them on quest-shop items.
Other rewards (G/T/O)
- G — gold coins on completion.
- T — exp points on completion.
- O — object vnum to give the player on completion (set to -1 for no item reward).
Level limits (D/E)
Lower and upper level required to accept the quest. Players outside this range can’t pick it up. 0 for no limit on that end.
Prereq (F)
A quest vnum that must be completed before this one can be accepted. Chain prereqs to build quest arcs:
- Quest A: “Find the broken sword” — no prereq.
- Quest B: “Forge the broken sword” — prereq = A’s vnum.
- Quest C: “Slay the dark lord with the sword” — prereq = B’s vnum.
Players who don’t have the prereq complete won’t see Quest C in quest list.
Time limit (L)
Minutes from accept to auto-fail. 0 = no limit. Useful for time-pressure quests (“save the village within 30 minutes”).
Next / Previous quest (N/P)
Linked navigation between related quests — quest info shows the chain. Mostly cosmetic; doesn’t enforce sequencing (use Prerequisite for that).
Workflow
A typical quest build:
- Build the target first. Mob to kill / object to find / room to enter / mob to save.
- Build the quest master. Usually an NPC with quest-handler spec proc or DG triggers.
qedit <vnum>the quest.- Wire the quest master so it knows about your quest. The simplest path: a
Postmaster-style proc that handles quest commands generically. Or DG triggers on COMMAND that matchquest acceptetc. - Test the happy path. Accept → progress → complete. Check rewards land.
- Test the failure paths. Quit. Time limit. Level too low. Prereq missing.
- Verify level limits and rewards balance. A 5-25 level quest awarding 100k gold is broken.
Common patterns
Fetch quest (OBJ_RETURN)
Quest type: AQ_OBJ_RETURN. Target = item vnum. value[5] = return-to mob.
Player accepts → looks for item → finds it → gives to mob → quest completes.
Make sure the item is reachable (zone reset spawns it, or it drops from a specific mob). Don’t put it behind another quest’s reward unless that’s intentional.
Kill quest (MOB_KILL)
Quest type: AQ_MOB_KILL. Target = mob vnum. Quantity = number of kills.
For a “kill 10 wolves” quest, set quantity to 10. Each kill increments the player’s progress counter.
For unique-boss kills, quantity = 1.
Exploration quest (ROOM_FIND)
Quest type: AQ_ROOM_FIND. Target = room vnum.
Player enters → quest completes automatically. Pair with a memorable destination — a hidden glade, a secret chamber.
Multi-stage quest chains
Use Prerequisite (F) to link quests. Quest B requires Quest A done. Quest C requires Quest B. The game enforces the order — players can’t skip to C.
For a long arc (5+ quests), consider whether each step has its own satisfying mini-reward, or whether the chain is just a single long quest broken up.
Time-pressure quest
Set Time Limit (L) to N minutes. Be generous — players reading descriptions, looking up wiki pages, and walking to the destination take longer than you think.
Pair with a flavor description that hints at urgency (“the village has only an hour before…”).
Repeatable daily quest
Set flag REPEATABLE. Pair with a DG trigger or spec proc on the quest master that resets the player’s “daily count” once per game-day.
Quest commands (player-side)
Players interact via these standard commands:
quest list Show available quests
quest info <num> Detail on one quest
quest history What I've completed
quest accept <num> Accept a quest
quest quit Abandon current quest
quest progress How far along am I?
Some quest masters override accept and quit via triggers — they want the player to say accept or bow to the quest giver. That’s a per-quest-master choice you make as the builder.
Integration: triggers
For quests that need scripted behavior (custom dialogue, mid-quest events), attach DG triggers to the quest master:
MTRIG_COMMANDmatchingacceptfor custom acceptance behavior.MTRIG_RECEIVEforOBJ_RETURNquests — react when the player hands over the item.MTRIG_TELLfor “ask npc about quest” style dialogue.MTRIG_DEATHon the target mob forMOB_KILLquests with scripted aftermath.
See Building triggers.
Save + test
Q → y saves the quest to lib/world/qst/<zone>.qst. The next zone reset (or qedit reload) registers it.
Testing checklist:
- Quest master shows the quest in their dialogue /
sayresponse. quest listshows it (assuming you meet level limits + prereqs).quest accept <num>works and the accept message displays.- Progress against the target works (kill the mob, find the item).
- Completion fires the message AND grants all three reward types (gold, exp, object).
quest historyshows the completion.- Re-do it (or fail to) based on REPEATABLE flag.
- Prereq quests gate access correctly.
See also
- Building mobiles — quest masters and quest-target mobs.
- Building objects — quest-target objects.
- Building triggers — scripted quest behavior.
- Building zones — placing quest content via zone resets.