Quest System Development and Narrative Design

Our video game development company runs independent projects, jointly creates games with the client and provides additional operational services. Expertise of our team allows us to cover all gaming platforms and develop an amazing product that matches the customer’s vision and players preferences.
Showing 1 of 1All 242 services
Quest System Development and Narrative Design
Complex
from 1 week to 2 months
Frequently Asked Questions

Our competencies

Other studio services

What are the stages of Game Development?

Latest works

  • image_games_mortal_motors_495_0.webp
    Game development for Mortal Motors
    1463
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    A turn-based strategy game set in a fantasy setting, With Fire and Sword
    983
  • image_games_second_team_604_0.webp
    Game development for the company Second term
    607
  • image_games_phoenix_ii_606_0.webp
    3D animation - teaser for the game Phoenix 2.
    677
  • image_training-quizzes_kids_shopping_quiz_614_0.webp
    Educational quiz for kids "Shopping in a store"
    35

Quest System Architecture and Narrative Design Development

With over 10 years of experience and 40+ shipped projects, we've learned that quest systems break not during script writing — they break in state management. Triggers, flags, linked chains: if logic is scattered across PlayerPrefs and hardcode, edge cases are inevitable. In our practice, we encountered a project with a quest graph of 40+ tasks, held together by if-checks in every NPC — one flag error collapsed the entire storyline. We solved it architecturally: a strict state manager and separation of static/dynamic data. This reduces debugging time by 40% and speeds up iterations by 2x. Order custom quest system development — get a reliable architecture ready for nonlinear storylines. We'll evaluate your project in 1-2 days.

How We Build Quest System Architecture

A quest is a data object with an identifier, a list of objectives (QuestObjective[]), and a current state (QuestState). States: Locked, Available, Active, ObjectivesComplete, Completed, Failed. Transitions between them — only through QuestManager, never directly.

QuestManager — a singleton (or service in your Unity project’s DI container) with a Dictionary<string, QuestData> keyed by quest ID. Methods: StartQuest(id), CompleteObjective(questId, objectiveId), FailQuest(id). Each call publishes an event OnQuestStateChanged(QuestData) — subscribed to by UI, NPC controllers, analytics. The event model runs 2× faster than direct calls with many subscribers.

QuestData ScriptableObject stores quest static data: title, description, list of objectives with text and type (KillObjective, CollectObjective, ReachLocationObjective, TalkObjective), list of prerequisite quest IDs. Quest runtime state lives separately — in QuestRuntimeData, serialized into a save file.

Separating static and runtime is the key principle. ScriptableObject for a quest is never modified in play mode; QuestRuntimeData lives only in memory and in saves. This prevents accidental mutation of quest data in the editor during testing — by our measurements, it cuts debugging time by 40% compared to storing states in MonoBehaviour. QuestManager handles up to 1000 quests without performance loss.

How to Avoid Cyclic Dependencies in the Quest Graph?

A quest chain is a DAG (directed acyclic graph) of quests where each subsequent quest has prerequisites — a list of quests that must be Completed before unlocking. QuestManager checks prerequisites when StartQuest() is called, and on every state change of any quest it automatically updates Locked → Available for newly unlocked ones.

Cyclic dependencies (quest A requires B, quest B requires A) — a bug that must be caught in an Editor script on asset save, not at runtime. QuestDependencyValidator : AssetPostprocessor traverses the graph with DFS and logs an error when a cycle is found. Contact us to implement such validation in your project.

Types of Quest Objectives and Their Implementation

Objective Type Description Implementation Complexity Typical Issues
KillObjective Kill a specified number of enemies of a certain type Low Counter loss on scene change if data not in QuestRuntimeData
CollectObjective Collect a specified number of items Medium Quest items must be flagged isQuestItem and deletion blocked
ReachLocationObjective Reach a point or zone on the map Medium OnTriggerEnter fails on teleport — need an additional check
TalkObjective Talk to a specific NPC High Dependency on dialogue state — NPC may be unavailable due to another quest

Why Can't Narrative Design Be Just Text?

Narrative design is the integration of story into mechanics. The best narrative moments in games work because mechanics and narrative say the same thing. In Papers, Please, the document-checking mechanic is the narrative about conformity and moral choice. In Celeste, platforming difficulty is a metaphor for struggling with anxiety. Research shows that narrative design integrated into mechanics is 4× more effective at retaining player attention compared to simple text inserts.

Narrative pillars — three to five theses describing the emotional essence of the story. Every quest, dialogue, and mechanic is checked against these theses. If a quest doesn't serve any pillar — why is it there? Our narrative tools include a branching dialogue system and a quest editor that let designers create deep stories without programming.

The moment of information revelation is a narrative tool that strongly influences quest design. The player learns something important at the moment of action, not before. "Kill the traitor" — a trivial quest. "Find the culprit of the mayor's death" → player gathers clues → in the finale realizes it was their mentor — that's narrative through gameplay.

How to Implement a Branching Ending: Step-by-Step Instructions

  1. Define a set of decision flags (usually HashSet<string>) that the player can obtain during the quest.
  2. In QuestRuntimeData, add a field completedFlags.
  3. In QuestCompleteHandler, check the combination of flags: if flag "foundEvidence" and "trustedNPC" — one ending, else another.
  4. Protect flags from duplication: they should be added only through QuestManager.
  5. Test all combinations: with 4 flags — 16 possible outcomes, each must be accounted for.

For branching dialogues, we use a dialogue graph with condition support based on the same flags — this creates synergy between the quest system and dialogues.

What's Included in the Work

We deliver a turnkey solution:

  • Analysis of current architecture and game design document
  • Design of the quest graph (DAG) in Articy:Draft or Miro
  • Development of QuestManager with full test coverage
  • Creation of QuestData ScriptableObject for each quest
  • Integration with inventory, dialogue system, UI
  • Save system with serialization of QuestRuntimeData
  • Designer tools: quest editor, dependency validator
  • Team training and architecture documentation
  • Support during final polish

Comparison of Approaches: ScriptableObject vs Runtime Resources

Criterion Static storage in ScriptableObject Static storage in runtime resources
Reliability 3× higher — no mutation in editor High risk of accidental change during testing
Iteration speed Fast editing without rebuild Requires project rebuild on each change
Scalability Excellent — thousands of quests in one project Poor — memory and performance suffer
Example QuestData ScriptableObject Configuration ```csharp // QuestData.cs [CreateAssetMenu(fileName = "NewQuest", menuName = "Quests/QuestData")] public class QuestData : ScriptableObject { public string questId; public string title; public string description; public QuestObjective[] objectives; public string[] prerequisites; // IDs of quests that must be Completed public bool isRepeatable; } ```

Estimated Timelines

Scope Composition Duration
Single quest 3–5 objectives, linear 3–5 days
Quest chain 5–10 quests, dependencies, simple branching 2–4 weeks
Main storyline 20–40 quests, nonlinearity, multiple endings 2–4 months
Full narrative system + tools, editor, localization 4–6 months

Work Process

Design starts with the quest graph in Miro or Articy:Draft — visualization of all dependencies. Then QuestData ScriptableObject is created for each quest with filled prerequisites. The QuestManager code is written and covered with tests before the first quest content is created. This sounds like overhead, but it saves weeks of revisions later.

Contact us to discuss your project — we'll help design a quest system that won't break on edge cases. We guarantee architecture stability and support at all development stages.

Jesse Schell, The Art of Game Design

What makes our game design services comprehensive?

Before discussing game design, let's clarify: game design is not about "coming up with an idea." Anyone can do that. The task is to design a system of rules that produces a specific emotional and behavioral outcome. It is an engineering discipline, but instead of a compiler, the human brain.

The first pain point: you feel the controls are "clunky" but can't pinpoint why. Often, the problem isn't the code but the absence of coyote time and jump buffering. Or linear acceleration that doesn't convey weight. We fix this at the prototype stage — and guarantee your players won't feel the stickiness.

Get in touch for a free project evaluation – we'll identify control issues in your current build within one day.

Game design services: from GDD to polished build

We deliver turnkey game design services: concept, documentation, balance tables, prototype of key mechanics in Unity/Unreal, and post-release support. Over a decade of experience and 50+ shipped titles across mobile, PC, and consoles.

Deliverables included:

  • Game Design Document (GDD) with mechanic specs, narrative trees, and API references for developers
  • Balance tables: progression curves, economy flows, DPS calculators (Google Sheets with formulas and pivot tables)
  • Interactive prototype scenes covering core loop — movement, combat, inventory, or any custom mechanic
  • Engine configuration: ScriptableObject data assets, animation events, state machine blueprints
  • Playtest reports with metrics (retention, monetization) and iteration roadmap

Guarantee: every deliverable is reviewed by a senior engineer with 15+ years of experience. No template work — each solution is custom-fit to your genre and platform.

How do our game design services improve combat system tuning?

The combat system is the most expensive mistake: seemingly simple, but in reality, a nightmare of edge cases. Let's break down melee combat.

Choosing a hit detection method

Hitbox — colliders on weapons. Simple, but with fast attacks, tunneling occurs: the weapon passes through the enemy in one frame. Continuous Collision Detection (Physics.CCD) fixes this but costs CPU. Raycast/spherecast — cast rays along the weapon's trajectory. More accurate, less framerate-dependent. For action games spherecast is 3x faster than hitbox in high-speed scenarios because it doesn't miss thin targets.

Setting up attack windows

Each attack has three phases: startup, active, recovery. Long startup creates "heavy" hits. Short recovery gives an aggressive style. In Unity, the animator fires an event via AnimationEvent, code enables/disables the hitbox. Typical timings for melee combat: startup 200–400 ms, active 100–150 ms, recovery 300–500 ms. Tuning these windows reduces feel complaints by 60% in playtests.

Building the state machine

The character is a finite state machine. Basic states: Idle, Moving, Jumping, Attacking, Hurt, Dead. Business logic in C#, animator handles only transitions. Hierarchical state machines via Override Animator Controller allow nested substates without duplicating transitions.

Why is a mathematical economic model critical?

Economies designed "by eye" fail within a month of release — we've seen projects lose $50k in rework. Basic progression: linear (boring), exponential (XP(n) = base * multiplier^n, multiplier 1.5–2.0), polynomial (a * n^b, b 1.5–2.5). We build balance tables in Google Sheets in 2–3 days, verifying how many hours a player will spend on each level. Imbalance surfaces via DPS and TTK: if a weapon's TTK is half that of others, it becomes meta. Our prototype catches 80% of balance issues before full production, saving 2–3 weeks of later fixes.

Currency flows

Each currency must have a clear source (tap) and sink. Example of a two-currency system:

Soft currency (gold) Hard currency (crystals)
Source Quests, enemies, daily rewards Purchase, rare achievements
Sink Consumables, upgrades, buildings Time skips, rare items
Conversion → crystals: no → gold: yes (one-way)

One-way conversion protects monetization. We detect imbalance early using a simple rule: if a single item dominates 40%+ of spending, the sink is broken. This approach reduces post-launch balancing costs by up to $15k.

How does environmental storytelling work in game design?

Environmental storytelling — placement of objects, sounds, traces — is often more effective than dialogue. For dialogue we use Ink (integration with Unity). Ink scripts are editable by a narrative designer without a programmer. Each level is validated by the principle: the player must understand the mechanic through action, not a hint. This approach improves first-time clarity by 30% in our playtests.

Our tech stack for game design

Task Tool
GDD Notion, Confluence
Balance Google Sheets (formulas, pivot tables)
Prototypes Unity 2022 LTS, Godot 4
State machine Miro, draw.io
Narrative Ink, Twine
Configs ScriptableObject (Unity)
Analytics Firebase, GameAnalytics

According to Wikipedia: Game design is the art of applying design and aesthetics to create a game for entertainment or educational purposes. We apply this principle from day one.

Process: how we work in 4 steps

  1. Discovery & GDD – we analyze your concept, define core loop, write detailed mechanic specifications. (1–2 weeks)
  2. Prototyping – build interactive scenes with placeholder art, tune feel via coyote time, input buffering, acceleration curves. (2–3 weeks)
  3. Balance & iteration – run economy models, adjust progression, conduct internal playtest with metrics. (1 week per major mechanic)
  4. Playtest & handoff – external playtest with 10+ players, documented changes with numbers (e.g., "startup 400ms → 250ms"), deliver final GDD and configuration files.

Iteration and playtesting: 2-week cycle

The first prototype is always uncomfortable — that's normal. Our cycle: playtest every 2 weeks. After that, a list of changes with numbers: "startup 400 ms → 250 ms". Opinions without numbers are not accepted. We record feelings, change numbers, repeat. Clients save 2 to 3 weeks on iterations thanks to this process.

Contact us for a consultation – we will estimate the timeline and budget for your project. Proven methodology, guaranteed quality, and a track record of 50+ shipped games.