{"id":13485460,"url":"https://github.com/sinbad/SUQS","last_synced_at":"2025-03-27T19:31:11.374Z","repository":{"id":139584213,"uuid":"344882161","full_name":"sinbad/SUQS","owner":"sinbad","description":"Steve's Unreal Quest System: data-driven quest system for Unreal Engine","archived":false,"fork":false,"pushed_at":"2024-08-19T09:40:27.000Z","size":1077,"stargazers_count":108,"open_issues_count":0,"forks_count":20,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-08-19T11:30:05.042Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sinbad.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"License.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-03-05T17:18:33.000Z","updated_at":"2024-08-19T09:40:31.000Z","dependencies_parsed_at":null,"dependency_job_id":"10411744-be79-4216-913a-1a8e6412823f","html_url":"https://github.com/sinbad/SUQS","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sinbad%2FSUQS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sinbad%2FSUQS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sinbad%2FSUQS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sinbad%2FSUQS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sinbad","download_url":"https://codeload.github.com/sinbad/SUQS/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245910759,"owners_count":20692497,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T18:00:23.166Z","updated_at":"2025-03-27T19:31:11.004Z","avatar_url":"https://github.com/sinbad.png","language":"C++","funding_links":[],"categories":["Game Data","Awesome Unreal Repositories"],"sub_categories":["Gameplay"],"readme":"# Steve's Unreal Quest System (SUQS)\n\n## What Is It?\n\nSUQS is a simple, data-driven quest system for Unreal Engine. It helps you define quest structures for your game, \nand track progress against those quests for a player in a simple way. \n\nAll quests are defined in static asset datatables, which can either be edited directly in UE, or written\nas JSON - a schema is provided to provide handy autocomplete and validation in most editors \n(see [Editor Setup](docs/EditorSetup.md)).\n\nAt runtime, you use a simple API to record progress against these quests: accept quests, complete tasks,\nincrement progress etc. As tasks are completed they trigger progression based on simple rules, and callbacks\nand a query API let you reflect those changes in your world.\n\n\n## Installing\n\n### Cloning\n\nThe best way is to clone this repository as a submodule; that way you can contribute\npull requests if you want. The project should be placed in your project's Plugins folder.\n\n```\n\u003e cd YourProject\n\u003e git submodule add https://github.com/sinbad/SUQS Plugins/SUQS\n\u003e git add ../.gitmodules\n\u003e git commit\n```\n\nAlternatively you can download the ZIP of this repo and place it in \n`YourProject/Plugins/SUQS`.\n\n### Referencing in C++\n\nEdit YourProject.Build.cs and do something similar to this:\n\n```csharp\nusing System.IO;\nusing UnrealBuildTool;\n\npublic class YourProject : ModuleRules\n{\n\tprivate string PluginsPath\n\t{\n\t\tget { return Path.GetFullPath( Path.Combine( ModuleDirectory, \"../../Plugins/\" ) ); }\n\t}\n\t\n\tprotected void AddSUQS() {\n\t\t// Linker\n\t\tPrivateDependencyModuleNames.AddRange(new string[] { \"SUQS\" });\n\t\t// Headers\n\t\tPublicIncludePaths.Add(Path.Combine( PluginsPath, \"SUQS\", \"Source\", \"SUQS\", \"Public\"));\n\t}\n\n\tpublic SUQSExamples(ReadOnlyTargetRules Target) : base(Target)\n\t{\n\t\tPCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;\n\n\t\tPublicDependencyModuleNames.AddRange(new string[] { \"Core\", \"CoreUObject\", \"Engine\", \"InputCore\" });\n\t\t\n\t\tAddSUQS();\n\t}\n}\n```\n\nAfter adding this you should right-click your .uproject file and \"Generate Visual\nStudio Project Files\". \n\n## Usage Overview\n\n### Defining Quests\n\nQuests are static data tables stored in assets. They can't be altered dynamically, and this is deliberate;\nnot only does it keep the implementation simpler, it means you always have a single source of truth for\nyour quest structure.\n\nThat doesn't mean you can't have branching quests. Branching within a quest is supported (the branches\nare predefined in the data), and also quests can be dependent on each other's success or failure. \n\n\nWhile you can edit quest data tables in the UE5 editor, let's see a JSON example \nbecause it's the easiest to see easily. You can configure your editor to\nprovide auto-complete and documentation, see [Editor Setup](docs/EditorSetup.md). \nThere are lots of optional features, so here is the simplest possible quest:\n\n```json\n[\n  {\n    \"Identifier\": \"Q_Smol\",\n    \"Title\": \"NSLOCTEXT(\\\"TestQuests\\\", \\\"SmolQuestTitle\\\", \\\"Smol Quest\\\")\",\n    \"DescriptionWhenActive\": \"NSLOCTEXT(\\\"TestQuests\\\", \\\"SmolQuestDesc\\\", \\\"The smallest possible quest\\\")\",\n    \"Objectives\": [\n      {\n        \"Tasks\": [\n          {\n            \"Identifier\": \"T_Smol\",\n            \"Title\": \"NSLOCTEXT(\\\"TestQuests\\\", \\\"SmolQuestTaskTitle\\\", \\\"Easiest possible thing\\\")\"\n          }\n        ]\n      }\n    ]\n  }\n]\n```\n\nSome basic notes:\n* A single JSON file can include multiple [Quests](docs/Quests.md), each of which must have a globally unique Identifier\n* All player-visible text can be localised using NSLOCTEXT\n* Each quest is comprised of 1 or more [Objectives](docs/Objectives.md)\n  * Objectives are always sequential (but can [branch](docs/Branching.md))\n  * Objectives contain [Tasks](docs/Tasks.md), which are the unit of progression\n  * Objectives group Tasks, determining whether they are sequential or flexibly ordered, or whether all mandatory tasks have to be completed or only 1 (or 2, or 3...) of those in the group, \n  * Tasks track actual progress, can be mandatory or optional, and can have target numbers (e.g. collect 3 otter's noses, 7 ocelot spleens), and time limits\n\nMore details on the specifics can be found in [Quests](docs/Quests.md).\n\n### Quest Progression\n\nQuest definitions are static, but of course your players will progress through\nthem over time. The main object you'll interact with in SUQS is `USuqsProgression`,\nwhich tracks this, and holds the quest definition library as well. \n\nIt's through `USuqsProgression` that you'll accept quests, complete tasks, \nand store the current status of active quests, and permanently store the quest archive.\nFor example:\n\n![Accept Quest](docs/img/acceptquest.png)\n![Complete Task](docs/img/completetask.png)\n\nThis object can be serialized for inclusion in save games. \n\nSee [Quest Progression](docs/Progression.md) for more details.\n\n## More Information\n\n* [Quest Definitions](docs/Quests.md)\n* [Quest Progression](docs/Progression.md)\n\n## License\n\nThe MIT License (MIT)\nCopyright © 2021 Steve Streeting\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the “Software”), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsinbad%2FSUQS","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsinbad%2FSUQS","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsinbad%2FSUQS/lists"}