The Quest System of AetherStory
As it seems most MMO-like RPG's all have, they seem to share a quest system. Most of these quest systems have common functionality and features. You pick-up a quest, you have objectives, and then you turn-in the quest and get a reward. AetherStory is no exception. However, we are doing it our own way, with our own twist. My take on quests is to tell a story with the quest. Not just a quick errand to go collect 10 apples or kill 12 boars. No. Let's give a series of objectives that evolve and unfold into an adventure.
As you may imagine, there is a reason why quests are normally designed with just one set of objectives at a time. It gets complicated to design a system that is any more complex than that. But I was up for the challenge and that is exactly what I did. I figured out how to design a quest system that was not only easy to design quests using our custom game editor, but also easy to program and implement into the game and game server.
Designing a Quest System
When designing a quest system you have a lot of questions you must ask yourself. The first question I think you should start with is: what game have you played that has a quest system that you enjoyed? Now think why? Why did you enjoy it? Everyone will have a different opinion as to why they enjoy a quest system. Personally I enjoy quests that are to the point and tell you what you need to do, but they don't need to give arrows and show you exactly where you to go. This may seem counter-intuitive to the modern design philosophy of "show don't tell", but I feel like this is fine. Our game is trying to mimic the RPG's you could find on the Super Nintendo, that era. But we are also adding our own modern conveniences to make it a bit more approachable.
The quest giver, the Botanist, giving you a quest.
What does this all mean? It means our quest system will show you when an NPC has a quest for you with a clear icon that you can see from across your screen. It means the NPC will tell you their problem and give you hints as to solve it. And then on the side of your screen you will be able to see your quest progress. That is it. There will not be arrows or icons showing you where to go. You will have to figure it out yourself. And while in initial play testing this seems to be a bit of a process to complete quests, it does have the side effect of you having to really explore and learn the world we are trying to create. If this is not well received we can look into quest helper features, but for now it seems to work.
One important thing I wanted to do differently was, I did not want the player to have to "accept" the quest. I wanted them to talk to an NPC and just by talking to them the quest would begin. This allows for a more stream line approach to questing.
Once you have a quest you have to complete the objectives. Gather items, talk to someone, explore some place, you get the idea. Once you complete one set of objectives, I decided I wanted to have the next set of objectives to automatically replace the previous set. With this design, the objective of "returning to the quest giver" then can truly be an objective. We can then explicitly tell the player its time to go talk to someone now.
All of this is the design of the quest system I want to create. It isn't the best design, but it will work for us. With the design in hand its time to start thinking data structures and what better way to think about data structures than to create the editor.
The Quest Editor
All parts of the data for AetherStory is editable and easily modified using an Editor that I have been creating. This editor allows us to edit everything from maps, tilesets, items and even quests.
The Quest Editor. Showing how you can easily create objective and stages.
The Quest Editor has many features, but its main functionality is that it allows you to create the objectives. As seen above. The objectives can be reordered and all of its properties can be edited without a line of code. The label provided for an objective is what is shown on the side of your screen, and the amount is the total of the objective you need to complete. This data is even used to automatically determine if you cmpleted all objectives in a stage and to move the player on to the next stage.
In the Quest shown above the quest has 3 stages. Stage 1: You need to collect 4 frogs from around the area. Once you do the next objective will replace the previous and you will be on Stage 2: cook the frogs. Going to the nearby campfire will then mark you as completing that objective, and the final stage will be determined automatically. Stage 3: return to the adventurer, which is the quest giver and quest turn-in.
Implementing the Quests
Having the server be able to automatically determine which stage you are on, and to change which objective set you are on was one of the most complicated parts to the implentation, but also is the most powerful. It was a tough decision if I actually wanted the system to behave this way. Should we more manually invoke stage changes ourselves, or should we have it be automatic? The decision for it to be automatic was what I went with utlimately. And as a result it means that I have to do less quest programming, and I can let the system itself handle the stage changes. Of course at the cost of some server performance. But it does mean that a player's quest state should never be out of sync.
A quest objective sparkles to let the player know they can inteact wtih it.
All quest objectives have their progress be made by interacting with entities in the world. When you interact with an entity we have a script that we can run that is basically saying "add this quest", or "make progress on this quest objective". This is such a simple idea, but it is so flexible. It means that quests can be created by just creating a series of entities, one for each objective type, and then throwing them around the world.
With all of this said, creating a quest takes less than an hour. It was so easy to add quests to the game we were able to add 6 quests to the game in one day. And keep in mind these quests aren't just one step, they all have multiple steps. Most having over 5 stages!
The quest system took over two months to design and create, and I have watched over a dozen players run around and play test the quest system. And while it seems to be a bit of a challenge, a bigger challenge for some, it seems that most people enjoy the system. And I think this means it was a success. If you find yourself wanting to design your own quest system just remember to ask yourself, what would be fun to you? If its fun for you, it will probably be fun for someone else.
I am excited for you to experience the quest system. It is now live in the ALPHA 2 patch that was just launched. If you already have Alpha access be sure to login and download the latest build. If you don't have Alpha access yet consider donating at least $20 and help us fund the project in the process. If you don't have the ability to donate you can always catch the live dev stream on twitch. I have monthly alpha key give aways.
Let me know what you think of the quest system be sure to reply below!