top of page

Quest System (2024)

During the programming focus track at Hanze University, I had to design and develop the quest system for the existing game (FPS Microgame Unity template). For this project I had to, first of all, understood how the existing game works. My next step was to design the system: make requirements list, UML diagram, make research on existing quest systems. At the end, I wrote a Technical Design Document for system I developed. 

Research

Before developing and designing the system, I looked at different examples of existing quest systems and some tutorials of developing different quest system. At the end, I came up with this requirements list and UML class diagram. 

UML.png

Quest

Quest system contains the Quest script, which is ScriptableObject and can be made using the asset menu. Quest objects contain a title(name of the quest), description, list of quest stages and, if a quest can be received only after completing the different quest, it can have a required quest.

 

I decided to make quests using a state design pattern, where stages are different states of the quest because it makes quests more organized and logical. The quest stage can be created in the inspector inside the quest scriptable object. It contains the title and a list of objectives.

Objectives

There are three types of objectives:

  1. Reach point – generates an area, which should be touched by the player to finish the objective. Contains: description, reach point prefab and the position where this reach point will be spawned.

  2. Kill enemies – to finish this objective you have to a specific amount of enemies of a specific type. I also created an enum with types of enemies, so each enemy can have a unique type, or some different enemies can have the same types, depending on the designers’ needs. Contains: description, amount of enemies to kill, the required type of enemy to kill, notification of enemies remaining threshold (it is the feature, which is not implemented by me, so I decided to not touch it).

  3. Talk to – to finish this objective you need to finish a specific dialogue object. Contains: description and required dialogue object.

Dialogues

I did not want to make a very complex dialogue system, so I made a simple dialogue script which inherits from ScriptableObject and can be made using the asset menu. The dialogue object contains a list of strings (phrases) and a list of responses.

The response can be created in the inspector inside the dialogue scriptable object. It contains: the text of the answer, dialogue which will be started, and two optional fields – required quest and required objective. Optional fields are used for creating responses, which are connected to quests.

If the response has a required quest it will be shown only, if this quest is available. If the response has a required objective it will be shown only, when the objective is active.

bottom of page