Reia icon indicating copy to clipboard operation
Reia copied to clipboard

Create a Quest and Dialogue addon.

Open Makosai opened this issue 1 year ago • 3 comments

Tasks

  • [ ] Quest System
  • [ ] Dialogue System
  • [ ] Character System

Focus & Requirements

Overview

These two systems should work together. Both would require a Character system. It's already been started as a part of the Game Manager addon. The goal is to have a list of characters with a profile: name, age, gender, race, or whatever is relevant to be displayed.

Quest System

This uses a series of chained events that can be placed on a node graph. An example would be start -> talk to NPC ID #001 -> [yes -> retrieve barrel of water] or [no -> NPC ignores player and continues what they were doing.]

That process repeats and branches out with different possibilities. Additionally, to start a quest, requirements can be set based on stats, items, achievements, or previously completed quests.

Dialogue System

This also links with the Quest System. Really the way the priority of these systems works is the Character System requires nothing. The Dialogue System requires the Character System. The Quest System may require the Dialogue System but could potentially function without it. But because it may require it, it requires the Character System too. This is also node-based and is used to get through conversations and have callbacks from certain responses. Usually to trigger updated quest states.

Makosai avatar Feb 13 '25 20:02 Makosai

I actually want to License this as MIT. I want everyone to use this both privately and publicly in all of their projects. So I'd probably do further development in a different repository and link it to this repository. It'll probably be under Quaint-Studios/Godot-Game-Manager. It won't require a CLA either. So if you're working on this let me know. I'll create the repository and link to it here.

Makosai avatar Feb 13 '25 20:02 Makosai

Created a repository at https://github.com/Quaint-Studios/godot-game-manager.

Makosai avatar Feb 13 '25 21:02 Makosai

https://github.com/Quaint-Studios/godot-game-manager/commit/b70762a3ca6a34653845b461daaa1ed2c231e94a Improves the Character System's UI and starts working on the design of the system.

Here are some notes from this update:

Maybe have a Dictionary of characters and import them one at a time to avoid duplicates. If a duplicate appears, put it in a separate list and warn the user that there are duplicates. The separate list would be an array that needs to be resolved in a separate window.

The ID of this has an issue where two IDs can be the same and conflict here. I would recommend warning the user that the ID is already in use whenever sorting. It'll slow down the sorting process but there should never be so many characters that it's a problem. Let's be honest, it isn't until you have thousands of characters that it becomes a problem. At that point, a database would be a better solution. Or even separating the characters into different files. We could try importing all the characters and then warning the user that some IDs are conflicting. But truly the best solution would be to use an SQLite database so we can enforce unique IDs and perform queries. Alternatively, since we don't expect a ton of characters, we could perform a "Unique ID" on the character.

Ultimately, I think resources will be the way to go. SQLite is nice but probably overkill for this tool. It'd be great to have SQL used as an exported thing. Where you can import as SQLite/Resource/JSON/YAML and export the same way.

So this may be an approach going forward.

  1. Get all CharacterInfo resources.
  2. Sort it.
  3. Import it into an Array[GameManager__CharacterInfo].
  4. Check for duplicate IDs.
  5. Place the duplicate in a separate array.
  6. Prompt the user to resolve duplicate issues in a different window.
  7. Once all issues are resolved, re-import.
  8. On adding a new entry, re-sort all characters.
  9. On delete, just delete but make sure it's also deleted from the original list too. Deleting isn't allowed while there are conflicts.
  10. When an entry is being updated, don't allow the user to set the ID to one that exists that isn't its own.
  11. Immediately update the list on the side with the new data.

Image

Makosai avatar Feb 16 '25 07:02 Makosai