├── .godot ├── .gdignore ├── uid_cache.bin ├── editor │ ├── QMQuest.gd-folding-353cd8493c833598898cebe56e8ce82d.cfg │ ├── QMItemsStep.gd-folding-dae03ba0f16a8746d61f5efa4219d49e.cfg │ ├── QMQuestStep.gd-folding-ca56181645d62e104b13cd10215f2c09.cfg │ ├── ScriptQuest.gd-folding-1d4eda7233a8fb40b7d9317c327d0ede.cfg │ ├── QMIncrementalStep.gd-folding-72e9f0032b5d12d567d63565e29579b4.cfg │ ├── All Nodes.quest-5c630602503abe2a3b0bb96b2b100b94.tres-folding-634475e4955925b2513131d2998090c0.cfg │ ├── ExampleQuests.quest-1a6f9296a852f70ead827b0e3dab69a2.tres-folding-9322b460dd421902045aef70d963b29a.cfg │ ├── filesystem_update4 │ ├── project_metadata.cfg │ ├── editor_layout.cfg │ ├── EditorWindow.tscn-folding-071bb97aef45b28d99695aa44a1eecc5.cfg │ ├── EditorWindow.tscn-editstate-071bb97aef45b28d99695aa44a1eecc5.cfg │ └── script_editor_cache.cfg ├── imported │ ├── icon.png-487276ed1e3a0c39cad0279d744ee560.md5 │ ├── icon.png-5f94bd0d5f157e6c2587641e78273150.md5 │ ├── icon.png-99585f9f0a3871289c6b17682e167c27.md5 │ ├── All Nodes.quest-5c630602503abe2a3b0bb96b2b100b94.md5 │ ├── Editorview.png-ab59bf558aa2ae7990c44794177a09ce.md5 │ ├── QuestManager.jpg-25beea9ccead450fe462d33f0b18d225.md5 │ ├── SpriteSheet.png-1a22a9aa9536de3cffc33bd2b30980eb.md5 │ ├── Character Sheet.png-ad0eb847c8170f682b778bcc83b8c05b.md5 │ ├── ExampleQuests.quest-1a6f9296a852f70ead827b0e3dab69a2.md5 │ ├── arcade_shooter.png-110a8d8f265280fd33cd38fde50cc198.md5 │ ├── example_editor_quest.jpg-f902bdd683e080d5227f9f2a71103a86.md5 │ ├── icon.png-487276ed1e3a0c39cad0279d744ee560.ctex │ ├── icon.png-5f94bd0d5f157e6c2587641e78273150.ctex │ ├── icon.png-99585f9f0a3871289c6b17682e167c27.ctex │ ├── Editorview.png-ab59bf558aa2ae7990c44794177a09ce.ctex │ ├── QuestManager.jpg-25beea9ccead450fe462d33f0b18d225.ctex │ ├── SpriteSheet.png-1a22a9aa9536de3cffc33bd2b30980eb.ctex │ ├── arcade_shooter.png-110a8d8f265280fd33cd38fde50cc198.ctex │ ├── Character Sheet.png-ad0eb847c8170f682b778bcc83b8c05b.ctex │ └── example_editor_quest.jpg-f902bdd683e080d5227f9f2a71103a86.ctex ├── shader_cache │ ├── GiShaderRD │ │ └── f24d17ee1f67a68835b2061e8df137aa37c9a931eab9ce3e7b5cab5e8396f365 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── BlitShaderRD │ │ └── 4573e55ab387a07522f8e5f37a54798d452190602371c6f7c8517da1152c4222 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── CopyShaderRD │ │ └── 566003fe6a892fe99f72136f718012da7137e47054ed02915d16d63df3acc85a │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── SkyShaderRD │ │ └── ba493b7431bf534f55dd1d868a5edc4098417eec6b59af13f48c6bffa90c2b20 │ │ │ ├── 03e3b11c69e24394b2d955a8c0ba85587bb70839.cache │ │ │ ├── 373ee543239aa1af0bc6b8ffc3d8251e6104a5b4.cache │ │ │ ├── de678811d1bad3cad4892a8db7b6ea0be197d51d.cache │ │ │ └── f0c584bf613e745cb630a0a20c515f41a21099e8.cache │ ├── SortShaderRD │ │ └── f708223ee11d6380669522620815bc98bc5e836c6bc620dfdbff52dd70b83734 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── SsaoShaderRD │ │ └── 4db0d61178391a206166d78338a3baba1ff3c4c4e5ddff9cdf79eef3b6e7e1b8 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── SsilShaderRD │ │ └── 2f8683d40d91c2f16c7b0ca2b484a38cbd8f1fc0c4327a47b1e3a190216af070 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── VrsShaderRD │ │ └── fbb391592247eb23025c9c0f5f11a4684146a6c3bb6bdfd8ed62af8dd0d6139c │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── CanvasShaderRD │ │ └── 446d51ed83b0516b66a117dfd73204a2f30615626014f8f31309ae9792f71ba9 │ │ │ ├── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ │ │ ├── 45fb1ddc6499e56682916a355ce2839e61f42dfe.cache │ │ │ ├── 8a7277c8d3ac029b087c3fa9c55de85560be5119.cache │ │ │ ├── 9bcac378d4e61e619a04bca2518f348d5c571569.cache │ │ │ ├── c0a681ae42aa3e0b5abba232ccae0b036be455e4.cache │ │ │ ├── c58570947be7f76937b1582424c0fd3d81be0352.cache │ │ │ ├── ddbe30d4d1be5d69b00075293fd27da8decd4af2.cache │ │ │ └── f3e258e8f7ec2e7e740b62f3bc48ecf5c99fb0db.cache │ ├── ResolveShaderRD │ │ └── bd263b8dec1117eb8bc00d6ba8e624d99358fcfe298981dd5605d3e70bf41c7b │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── TonemapShaderRD │ │ └── ac9eb0dcaa2743b04bbbb63d46fe08d7cc38f5c36f914d6048853ac21a4794ed │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── VoxelGiShaderRD │ │ └── 221e89572aca34e9ea7b5ef7f6e9a8f373b7a6974c3a7e5f8fb97b30bf5c278d │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── BokehDofShaderRD │ │ └── 1a5035c06f91066efe2ae274ee686b41b220d901a3d9edbaccbea03622f50125 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── CanvasSdfShaderRD │ │ └── fd99060a31380613872c713346d21096ea2beebfbd5a8c09ab919e35f67cd329 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── CopyToFbShaderRD │ │ └── a785f280374f3415511cba1c313c7ad48042e1f81455b21a944cabc345f0477c │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── CubeToDpShaderRD │ │ └── c879ac3d95686dbe6f08ca4621bb550834cf11a4ea4d4f468e17b246317b56f0 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── FsrUpscaleShaderRD │ │ └── 7e11bd19e2f564611cc5c630a43fe6174ffa832736ad004a4fff136c9e06bd2f │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── ParticlesShaderRD │ │ └── 313c56bac023725110f620bdf9e1e915017495b0ad2b314b4acec93fee494260 │ │ │ └── f128cab0b22fb7e0d9f023d6cdb81309be392d95.cache │ ├── SdfgiDebugShaderRD │ │ └── 6da17e1dd254ded180fb840f768402e09d44184e2b57eb3feff934fcbe207690 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── SkeletonShaderRD │ │ └── 58d04267366dc00ac88ff6018451aaad32b0ba1349d0c84c37fe40ffcb91645f │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── SsaoBlurShaderRD │ │ └── 35a4b4fefc8da387acbbaf6f7386439e9983673ee4a91f9a6f6247bc5405707d │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── SsilBlurShaderRD │ │ └── 01370bed1db2263ddf229c794bc8213b061285baa21be0cdf871f2ef872af74c │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── TaaResolveShaderRD │ │ └── d657e6b8741b6ae510c90bdbe81f9f96a44d1a629220a3a3bd6a54b268bc7ab0 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── ClusterDebugShaderRD │ │ └── aa9d76b3c8577da7c3dd45e75e7c9dddf37015fa35abbe3a086ed3cd44489332 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── ClusterStoreShaderRD │ │ └── 5ee452df7872e207402b3f6d272b5774037c7528f6d432978170672069513be6 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── VoxelGiDebugShaderRD │ │ └── 312dd60768314e40df1a123a3d9f7e72bb3d893d5425b2f2151fe36c10ba1065 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── CanvasOcclusionShaderRD │ │ └── 5e209b47d7776c94a72cb441941c748525368cbfce3f75461e268583fcd080ff │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── ClusterRenderShaderRD │ │ └── fb1d4fbcd82f610d09f5d39f94a86b811783bab0a3b39b8020bec7b3275bcc24 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── CubemapFilterShaderRD │ │ └── 223f190df3eeca1d766d36c8ece63e356f6942e3733a22e5dc723e94b9a429d3 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── LuminanceReduceShaderRD │ │ └── 703874ed069226c80bacb27324415253fcc09d971e82df1e37a2a467f3a7d15d │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── MotionVectorsShaderRD │ │ └── 1f3af49e62cb816bac3f98509457c5cc3b944aa651f88ee2a0f5e766bb5401b5 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── ParticlesCopyShaderRD │ │ └── c76cd2aed74dd99bda998b700615e2504dbfb6afbbf0dacb381b157a85a6e0d0 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── SdfgiIntegrateShaderRD │ │ └── 625c83fcaa2321819ef0d6bca658d2334914b68d454444d187acd859dcbe8480 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── SdfgiPreprocessShaderRD │ │ └── 15bae473b0ac810d1970c190f68f941453f29cd033c738a90ba40c3a26de3ff0 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── ShadowFrustumShaderRD │ │ └── d022bd9094e564c17ba5a3857e875b763b8e418ad419a5884044955124e233d8 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── SpecularMergeShaderRD │ │ └── 172d8d8590def41ca8366fd9b9069b7b4e0a1efb895b9728940c1f4955b7b31e │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── SsaoInterleaveShaderRD │ │ └── e97ad6b5da44168d2c8b40cd5a611e6e02849f0e82c42c1d6adcafa57b54c65b │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── SsilInterleaveShaderRD │ │ └── 4434557c465ed47697abe0223ae851216963b51ba69043443b6895b14d79b8bb │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── VolumetricFogShaderRD │ │ └── ab5196cd68b47e4082c22286677462703cdc69c03320c5ad5c74fbb2588a2d07 │ │ │ └── 9a227745af2d65830f930370a9fbba551fbd6f60.cache │ ├── CubemapRoughnessShaderRD │ │ └── 8bc6fa8516e55f36354902efc0f7d8ef46a52ca3605932fa051e6d829961506c │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── SdfgiDebugProbesShaderRD │ │ └── 9ef7bf51799e1f54dc76cc3599f6339a36f07a236c0b0afb0957341fa0149a88 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── SdfgiDirectLightShaderRD │ │ └── 427f3b5f5edfe5ff453b058ffe6863062ccdfe075deccb5092d69feaa5c644e6 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── SsaoImportanceMapShaderRD │ │ └── c03564f181f2688e730bb1bd3ee62d4ae8a379062cd04576ee55d26cdfbf3997 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── SsilImportanceMapShaderRD │ │ └── 3554f3a7e39b5a429e639a6aa6b3e09215cb4e6be8ca40ced4450ac7c0899335 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── CubemapDownsamplerShaderRD │ │ └── d18462d3c6ae154832c4823b0b30679d4287a9ef0645eb6e57776782eabd595e │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── SsEffectsDownsampleShaderRD │ │ └── 912e287a61544a3f66a9054499caf3543d1cf3d5674de23bedb7ff64f6f9fdf8 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── SubsurfaceScatteringShaderRD │ │ └── 7c97428de641bad5c2a3cb9a8e780df7656148f55ddf4cd10a88c27f838c1c34 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── VolumetricFogProcessShaderRD │ │ └── 394deaf32fef05fa9885e5d50fdfdd5c06bee20baa8a467874fc70647de5c9a7 │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── SceneForwardClusteredShaderRD │ │ └── 8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b │ │ │ ├── 048236defb6bf03aff4593ae5e1ee179e6446005.cache │ │ │ ├── 0f1bcf11b9f7757773a7866f1cd2e297cb2acf5f.cache │ │ │ ├── 44a3b542d1a7aa433841301aac88e07ec68bb95b.cache │ │ │ ├── 513036325ff64a2245643eae4a83f8c916df1372.cache │ │ │ ├── 6f9f221665bfceef9ee7104462ade0892fae85b4.cache │ │ │ ├── 7e4276feb9e7788110465d53faa6226c57f8116f.cache │ │ │ ├── 7fb66440f65dac23b75016fc52fb82ae26e9393f.cache │ │ │ ├── 7fdaf9a9f33dad9936aaccf6e0d8586657dd71d5.cache │ │ │ ├── 9192e10d5d060dba18a014008198b12b09a48e50.cache │ │ │ ├── 91a7b7c4f6a2d81e1b66e70a1bdca580a0276806.cache │ │ │ ├── 979584fc9058fc31b2a6d1e00d2ae8801f62209b.cache │ │ │ ├── a3c143fc7cc5e43b3cd10abbecaa4001e645acad.cache │ │ │ ├── a6d99b637dfee75712ae57f13dc63ae39e299a45.cache │ │ │ ├── ab60f8b228c0dad11d9d882c2ab4f61eb6ca2f20.cache │ │ │ ├── c4c828897f8a3fe72e3713d35b4ba452d7ed9acf.cache │ │ │ ├── c911b2eb203b7525047b1fc26929407fb3d4191d.cache │ │ │ ├── dfe2cd8f6a54d8a4d9cde5047b4dc131c46d8b1d.cache │ │ │ └── f24bd7cfaf611a139286a23d4d013a86b1753920.cache │ ├── ScreenSpaceReflectionShaderRD │ │ └── 75a98cb7c423b4821931cee9c154738d8213bc538d0459fd341f0d92c07c8aea │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ ├── ScreenSpaceReflectionFilterShaderRD │ │ └── 2a685f532b023c59b81ffd6ab9f4024ccaa2cc682ea1f2f22b1baf5b30a9dbef │ │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache │ └── ScreenSpaceReflectionScaleShaderRD │ │ └── 6cb95948e057d81ca98f1485bcc7a0ece4029023d368682bca1777773aad9f67 │ │ └── 087916079fba7c625e62b0c2cca570e0fb87c99a.cache └── global_script_class_cache.cfg ├── addons └── quest_manager │ ├── Examples │ ├── ExampleTwo │ │ ├── Item.gd │ │ ├── Stove.gd │ │ ├── Apple.gd │ │ ├── ExampleTwo.gd │ │ ├── apple_spawner.tscn │ │ ├── Apple_Spawn.gd │ │ ├── NPC.gd │ │ ├── Apple.tscn │ │ ├── npc.tscn │ │ ├── UI.gd │ │ ├── Player.gd │ │ └── player.tscn │ ├── All Nodes.quest │ ├── ExampleQuests.quest │ ├── ExampleOne │ │ ├── Spawner.gd │ │ ├── Projectile.gd │ │ ├── Enemy.gd │ │ ├── Player.gd │ │ ├── Enemy.tscn │ │ ├── Player.tscn │ │ ├── Projectile.tscn │ │ └── UI.gd │ ├── Test.qm │ ├── ScriptQuestExample │ │ ├── ScriptQuestExampleScene.tscn │ │ └── ScriptQuestExampleScene.gd │ ├── Test.qm.import │ ├── All Nodes.quest.import │ └── ExampleQuests.quest.import │ ├── Editor │ ├── right_mouse_menu.gd │ ├── recent_project_btn.gd │ ├── Nodes │ │ ├── Group.gd │ │ ├── End.gd │ │ ├── Callable_Step.gd │ │ ├── Step.gd │ │ ├── IncrementalStep.gd │ │ ├── End.tscn │ │ ├── Branch.gd │ │ ├── Group.tscn │ │ ├── Quest.gd │ │ ├── items_step.gd │ │ ├── Timer_Step.gd │ │ ├── Step.tscn │ │ ├── Callable_Step.tscn │ │ ├── Branch.tscn │ │ ├── IncrementalStep.tscn │ │ ├── Quest.tscn │ │ ├── items_step.tscn │ │ ├── Quest_Rewards.gd │ │ ├── EditorNode.gd │ │ ├── Meta_data.gd │ │ ├── Timer_Step.tscn │ │ ├── Quest_Rewards.tscn │ │ └── Meta_data.tscn │ ├── right_mouse_menu.tscn │ ├── Updater.gd │ ├── RecentsList.gd │ ├── SaveSystem.gd │ └── TestScene │ │ ├── AvailableQuests.gd │ │ └── PlayerQuests.gd │ ├── extras │ ├── icon.png │ ├── Action_Step_Area.gd │ ├── action_step_area.tscn │ └── icon.png.import │ ├── assets │ ├── icons │ │ ├── icon.png │ │ └── icon.png.import │ ├── SpriteSheet.png │ ├── Character Sheet.png │ ├── SpriteSheet.aseprite │ ├── Character Sheet.aseprite │ ├── SpriteSheet.png.import │ └── Character Sheet.png.import │ ├── plugin.cfg │ ├── LICENSE.md │ ├── ImportPlugin.gd │ ├── QMStepTracker.gd │ ├── QuestResource.gd │ ├── plugin.gd │ └── ScriptQuest.gd ├── icon.png ├── documentation ├── Editorview.png ├── QuestManager.jpg ├── arcade_shooter.png ├── example_editor_quest.jpg ├── Editorview.png.import ├── QuestManager.jpg.import ├── arcade_shooter.png.import ├── example_editor_quest.jpg.import ├── Script_Quest_API.md └── Creating_Quests.md ├── icon.png.import ├── project.godot ├── LICENSE.md └── README.md /.godot/.gdignore: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleTwo/Item.gd: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/icon.png -------------------------------------------------------------------------------- /.godot/uid_cache.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/uid_cache.bin -------------------------------------------------------------------------------- /documentation/Editorview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/documentation/Editorview.png -------------------------------------------------------------------------------- /documentation/QuestManager.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/documentation/QuestManager.jpg -------------------------------------------------------------------------------- /documentation/arcade_shooter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/documentation/arcade_shooter.png -------------------------------------------------------------------------------- /.godot/editor/QMQuest.gd-folding-353cd8493c833598898cebe56e8ce82d.cfg: -------------------------------------------------------------------------------- 1 | [folding] 2 | 3 | sections_unfolded=PackedStringArray() 4 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/right_mouse_menu.gd: -------------------------------------------------------------------------------- 1 | extends PopupMenu 2 | 3 | 4 | func _on_popup_hide(): 5 | gui_release_focus() 6 | -------------------------------------------------------------------------------- /addons/quest_manager/extras/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/addons/quest_manager/extras/icon.png -------------------------------------------------------------------------------- /.godot/editor/QMItemsStep.gd-folding-dae03ba0f16a8746d61f5efa4219d49e.cfg: -------------------------------------------------------------------------------- 1 | [folding] 2 | 3 | sections_unfolded=PackedStringArray() 4 | -------------------------------------------------------------------------------- /.godot/editor/QMQuestStep.gd-folding-ca56181645d62e104b13cd10215f2c09.cfg: -------------------------------------------------------------------------------- 1 | [folding] 2 | 3 | sections_unfolded=PackedStringArray() 4 | -------------------------------------------------------------------------------- /.godot/editor/ScriptQuest.gd-folding-1d4eda7233a8fb40b7d9317c327d0ede.cfg: -------------------------------------------------------------------------------- 1 | [folding] 2 | 3 | sections_unfolded=PackedStringArray() 4 | -------------------------------------------------------------------------------- /documentation/example_editor_quest.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/documentation/example_editor_quest.jpg -------------------------------------------------------------------------------- /.godot/editor/QMIncrementalStep.gd-folding-72e9f0032b5d12d567d63565e29579b4.cfg: -------------------------------------------------------------------------------- 1 | [folding] 2 | 3 | sections_unfolded=PackedStringArray() 4 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleTwo/Stove.gd: -------------------------------------------------------------------------------- 1 | extends StaticBody2D 2 | 3 | 4 | func interact(): 5 | $QMStepTracker.update_step() 6 | -------------------------------------------------------------------------------- /addons/quest_manager/assets/icons/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/addons/quest_manager/assets/icons/icon.png -------------------------------------------------------------------------------- /addons/quest_manager/Examples/All Nodes.quest: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/addons/quest_manager/Examples/All Nodes.quest -------------------------------------------------------------------------------- /addons/quest_manager/assets/SpriteSheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/addons/quest_manager/assets/SpriteSheet.png -------------------------------------------------------------------------------- /addons/quest_manager/assets/Character Sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/addons/quest_manager/assets/Character Sheet.png -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleQuests.quest: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/addons/quest_manager/Examples/ExampleQuests.quest -------------------------------------------------------------------------------- /addons/quest_manager/assets/SpriteSheet.aseprite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/addons/quest_manager/assets/SpriteSheet.aseprite -------------------------------------------------------------------------------- /addons/quest_manager/assets/Character Sheet.aseprite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/addons/quest_manager/assets/Character Sheet.aseprite -------------------------------------------------------------------------------- /.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.md5: -------------------------------------------------------------------------------- 1 | source_md5="4d7ede1b2682b46f97f819e7cc171cc2" 2 | dest_md5="9f95bca6cd60699030309ce1c8a3b2ec" 3 | 4 | -------------------------------------------------------------------------------- /.godot/imported/icon.png-5f94bd0d5f157e6c2587641e78273150.md5: -------------------------------------------------------------------------------- 1 | source_md5="4d7ede1b2682b46f97f819e7cc171cc2" 2 | dest_md5="9f95bca6cd60699030309ce1c8a3b2ec" 3 | 4 | -------------------------------------------------------------------------------- /.godot/imported/icon.png-99585f9f0a3871289c6b17682e167c27.md5: -------------------------------------------------------------------------------- 1 | source_md5="09defee46c94edb876b0f2531fc46d9d" 2 | dest_md5="eb14e3fe778fa59d6145ec4025ed3b9e" 3 | 4 | -------------------------------------------------------------------------------- /.godot/editor/All Nodes.quest-5c630602503abe2a3b0bb96b2b100b94.tres-folding-634475e4955925b2513131d2998090c0.cfg: -------------------------------------------------------------------------------- 1 | [folding] 2 | 3 | sections_unfolded=PackedStringArray() 4 | -------------------------------------------------------------------------------- /.godot/imported/All Nodes.quest-5c630602503abe2a3b0bb96b2b100b94.md5: -------------------------------------------------------------------------------- 1 | source_md5="ef3eae50d7a2e80c96aaf7035c7015c0" 2 | dest_md5="e297578463418c42847fab9ee656de8c" 3 | 4 | -------------------------------------------------------------------------------- /.godot/imported/Editorview.png-ab59bf558aa2ae7990c44794177a09ce.md5: -------------------------------------------------------------------------------- 1 | source_md5="2c6dc198e2f4548816e679301088d043" 2 | dest_md5="a2ce82d3e3e8911597e6b3678a4c3775" 3 | 4 | -------------------------------------------------------------------------------- /.godot/imported/QuestManager.jpg-25beea9ccead450fe462d33f0b18d225.md5: -------------------------------------------------------------------------------- 1 | source_md5="64c6b047d9729057ce259fd040e30698" 2 | dest_md5="3bc91a0eb785bac011da21f4cdcb032e" 3 | 4 | -------------------------------------------------------------------------------- /.godot/imported/SpriteSheet.png-1a22a9aa9536de3cffc33bd2b30980eb.md5: -------------------------------------------------------------------------------- 1 | source_md5="63a66b1707d424111771d0138c7412f4" 2 | dest_md5="2f5a756447f8fd5b5aaebf89753cccd0" 3 | 4 | -------------------------------------------------------------------------------- /.godot/editor/ExampleQuests.quest-1a6f9296a852f70ead827b0e3dab69a2.tres-folding-9322b460dd421902045aef70d963b29a.cfg: -------------------------------------------------------------------------------- 1 | [folding] 2 | 3 | sections_unfolded=PackedStringArray() 4 | -------------------------------------------------------------------------------- /.godot/imported/Character Sheet.png-ad0eb847c8170f682b778bcc83b8c05b.md5: -------------------------------------------------------------------------------- 1 | source_md5="df27ee2cad7d75b562396e8ff3debc7b" 2 | dest_md5="b0e63dc44efc86254770414eab5eda76" 3 | 4 | -------------------------------------------------------------------------------- /.godot/imported/ExampleQuests.quest-1a6f9296a852f70ead827b0e3dab69a2.md5: -------------------------------------------------------------------------------- 1 | source_md5="1bd295fc0578ac1fa5cbf6ed77fe2ed5" 2 | dest_md5="24c9843146e4acf3234c50b3e5738812" 3 | 4 | -------------------------------------------------------------------------------- /.godot/imported/arcade_shooter.png-110a8d8f265280fd33cd38fde50cc198.md5: -------------------------------------------------------------------------------- 1 | source_md5="6e4b0b5dbc8562e42f08598045c80625" 2 | dest_md5="0eb962a3e26dbbeacf5bfea6577d866f" 3 | 4 | -------------------------------------------------------------------------------- /.godot/imported/example_editor_quest.jpg-f902bdd683e080d5227f9f2a71103a86.md5: -------------------------------------------------------------------------------- 1 | source_md5="4906f2edc5b377d51ca2648a5db28ba1" 2 | dest_md5="5335b6c56a06bd89a1e6925e12e189bb" 3 | 4 | -------------------------------------------------------------------------------- /.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex -------------------------------------------------------------------------------- /.godot/imported/icon.png-5f94bd0d5f157e6c2587641e78273150.ctex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/imported/icon.png-5f94bd0d5f157e6c2587641e78273150.ctex -------------------------------------------------------------------------------- /.godot/imported/icon.png-99585f9f0a3871289c6b17682e167c27.ctex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/imported/icon.png-99585f9f0a3871289c6b17682e167c27.ctex -------------------------------------------------------------------------------- /.godot/imported/Editorview.png-ab59bf558aa2ae7990c44794177a09ce.ctex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/imported/Editorview.png-ab59bf558aa2ae7990c44794177a09ce.ctex -------------------------------------------------------------------------------- /.godot/imported/QuestManager.jpg-25beea9ccead450fe462d33f0b18d225.ctex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/imported/QuestManager.jpg-25beea9ccead450fe462d33f0b18d225.ctex -------------------------------------------------------------------------------- /.godot/imported/SpriteSheet.png-1a22a9aa9536de3cffc33bd2b30980eb.ctex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/imported/SpriteSheet.png-1a22a9aa9536de3cffc33bd2b30980eb.ctex -------------------------------------------------------------------------------- /.godot/imported/arcade_shooter.png-110a8d8f265280fd33cd38fde50cc198.ctex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/imported/arcade_shooter.png-110a8d8f265280fd33cd38fde50cc198.ctex -------------------------------------------------------------------------------- /.godot/imported/Character Sheet.png-ad0eb847c8170f682b778bcc83b8c05b.ctex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/imported/Character Sheet.png-ad0eb847c8170f682b778bcc83b8c05b.ctex -------------------------------------------------------------------------------- /.godot/imported/example_editor_quest.jpg-f902bdd683e080d5227f9f2a71103a86.ctex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/imported/example_editor_quest.jpg-f902bdd683e080d5227f9f2a71103a86.ctex -------------------------------------------------------------------------------- /addons/quest_manager/plugin.cfg: -------------------------------------------------------------------------------- 1 | [plugin] 2 | 3 | name="Quest Manager" 4 | description="A Quest Manager plugin for making and managing quests" 5 | author="Chevon Champier(Chevifier)" 6 | version="0.9.0" 7 | script="plugin.gd" 8 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleTwo/Apple.gd: -------------------------------------------------------------------------------- 1 | extends Area2D 2 | 3 | func _on_body_entered(body): 4 | if body.name == "Player": 5 | $QMStepTracker.update_step() 6 | body.apples += 1 7 | get_parent().notify_collected() 8 | queue_free() 9 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleOne/Spawner.gd: -------------------------------------------------------------------------------- 1 | extends Marker2D 2 | 3 | @export var Enemy: PackedScene 4 | 5 | 6 | 7 | func _on_timer_timeout(): 8 | var e = Enemy.instantiate() 9 | get_parent().add_child(e) 10 | e.position = Vector2(randf_range(372,800),-30) 11 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/recent_project_btn.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends Button 3 | 4 | var project_path = "test" 5 | 6 | func set_project_path(path:String): 7 | tooltip_text= path 8 | project_path = path 9 | var p = path.rsplit("/") 10 | p = p[-1].rsplit(".") 11 | text = p[0] 12 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/Test.qm: -------------------------------------------------------------------------------- 1 | [gd_resource type="Resource" load_steps=2 format=3 uid="uid://cw6kvhmsi6twp"] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/GraphData.gd" id="1_y1ksj"] 4 | 5 | [resource] 6 | script = ExtResource("1_y1ksj") 7 | connections = null 8 | nodes = null 9 | -------------------------------------------------------------------------------- /.godot/shader_cache/GiShaderRD/f24d17ee1f67a68835b2061e8df137aa37c9a931eab9ce3e7b5cab5e8396f365/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/GiShaderRD/f24d17ee1f67a68835b2061e8df137aa37c9a931eab9ce3e7b5cab5e8396f365/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/BlitShaderRD/4573e55ab387a07522f8e5f37a54798d452190602371c6f7c8517da1152c4222/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/BlitShaderRD/4573e55ab387a07522f8e5f37a54798d452190602371c6f7c8517da1152c4222/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/CopyShaderRD/566003fe6a892fe99f72136f718012da7137e47054ed02915d16d63df3acc85a/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/CopyShaderRD/566003fe6a892fe99f72136f718012da7137e47054ed02915d16d63df3acc85a/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SkyShaderRD/ba493b7431bf534f55dd1d868a5edc4098417eec6b59af13f48c6bffa90c2b20/03e3b11c69e24394b2d955a8c0ba85587bb70839.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SkyShaderRD/ba493b7431bf534f55dd1d868a5edc4098417eec6b59af13f48c6bffa90c2b20/03e3b11c69e24394b2d955a8c0ba85587bb70839.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SkyShaderRD/ba493b7431bf534f55dd1d868a5edc4098417eec6b59af13f48c6bffa90c2b20/373ee543239aa1af0bc6b8ffc3d8251e6104a5b4.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SkyShaderRD/ba493b7431bf534f55dd1d868a5edc4098417eec6b59af13f48c6bffa90c2b20/373ee543239aa1af0bc6b8ffc3d8251e6104a5b4.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SkyShaderRD/ba493b7431bf534f55dd1d868a5edc4098417eec6b59af13f48c6bffa90c2b20/de678811d1bad3cad4892a8db7b6ea0be197d51d.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SkyShaderRD/ba493b7431bf534f55dd1d868a5edc4098417eec6b59af13f48c6bffa90c2b20/de678811d1bad3cad4892a8db7b6ea0be197d51d.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SkyShaderRD/ba493b7431bf534f55dd1d868a5edc4098417eec6b59af13f48c6bffa90c2b20/f0c584bf613e745cb630a0a20c515f41a21099e8.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SkyShaderRD/ba493b7431bf534f55dd1d868a5edc4098417eec6b59af13f48c6bffa90c2b20/f0c584bf613e745cb630a0a20c515f41a21099e8.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SortShaderRD/f708223ee11d6380669522620815bc98bc5e836c6bc620dfdbff52dd70b83734/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SortShaderRD/f708223ee11d6380669522620815bc98bc5e836c6bc620dfdbff52dd70b83734/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SsaoShaderRD/4db0d61178391a206166d78338a3baba1ff3c4c4e5ddff9cdf79eef3b6e7e1b8/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SsaoShaderRD/4db0d61178391a206166d78338a3baba1ff3c4c4e5ddff9cdf79eef3b6e7e1b8/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SsilShaderRD/2f8683d40d91c2f16c7b0ca2b484a38cbd8f1fc0c4327a47b1e3a190216af070/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SsilShaderRD/2f8683d40d91c2f16c7b0ca2b484a38cbd8f1fc0c4327a47b1e3a190216af070/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/VrsShaderRD/fbb391592247eb23025c9c0f5f11a4684146a6c3bb6bdfd8ed62af8dd0d6139c/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/VrsShaderRD/fbb391592247eb23025c9c0f5f11a4684146a6c3bb6bdfd8ed62af8dd0d6139c/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/CanvasShaderRD/446d51ed83b0516b66a117dfd73204a2f30615626014f8f31309ae9792f71ba9/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/CanvasShaderRD/446d51ed83b0516b66a117dfd73204a2f30615626014f8f31309ae9792f71ba9/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/CanvasShaderRD/446d51ed83b0516b66a117dfd73204a2f30615626014f8f31309ae9792f71ba9/45fb1ddc6499e56682916a355ce2839e61f42dfe.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/CanvasShaderRD/446d51ed83b0516b66a117dfd73204a2f30615626014f8f31309ae9792f71ba9/45fb1ddc6499e56682916a355ce2839e61f42dfe.cache -------------------------------------------------------------------------------- /.godot/shader_cache/CanvasShaderRD/446d51ed83b0516b66a117dfd73204a2f30615626014f8f31309ae9792f71ba9/8a7277c8d3ac029b087c3fa9c55de85560be5119.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/CanvasShaderRD/446d51ed83b0516b66a117dfd73204a2f30615626014f8f31309ae9792f71ba9/8a7277c8d3ac029b087c3fa9c55de85560be5119.cache -------------------------------------------------------------------------------- /.godot/shader_cache/CanvasShaderRD/446d51ed83b0516b66a117dfd73204a2f30615626014f8f31309ae9792f71ba9/9bcac378d4e61e619a04bca2518f348d5c571569.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/CanvasShaderRD/446d51ed83b0516b66a117dfd73204a2f30615626014f8f31309ae9792f71ba9/9bcac378d4e61e619a04bca2518f348d5c571569.cache -------------------------------------------------------------------------------- /.godot/shader_cache/CanvasShaderRD/446d51ed83b0516b66a117dfd73204a2f30615626014f8f31309ae9792f71ba9/c0a681ae42aa3e0b5abba232ccae0b036be455e4.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/CanvasShaderRD/446d51ed83b0516b66a117dfd73204a2f30615626014f8f31309ae9792f71ba9/c0a681ae42aa3e0b5abba232ccae0b036be455e4.cache -------------------------------------------------------------------------------- /.godot/shader_cache/CanvasShaderRD/446d51ed83b0516b66a117dfd73204a2f30615626014f8f31309ae9792f71ba9/c58570947be7f76937b1582424c0fd3d81be0352.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/CanvasShaderRD/446d51ed83b0516b66a117dfd73204a2f30615626014f8f31309ae9792f71ba9/c58570947be7f76937b1582424c0fd3d81be0352.cache -------------------------------------------------------------------------------- /.godot/shader_cache/CanvasShaderRD/446d51ed83b0516b66a117dfd73204a2f30615626014f8f31309ae9792f71ba9/ddbe30d4d1be5d69b00075293fd27da8decd4af2.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/CanvasShaderRD/446d51ed83b0516b66a117dfd73204a2f30615626014f8f31309ae9792f71ba9/ddbe30d4d1be5d69b00075293fd27da8decd4af2.cache -------------------------------------------------------------------------------- /.godot/shader_cache/CanvasShaderRD/446d51ed83b0516b66a117dfd73204a2f30615626014f8f31309ae9792f71ba9/f3e258e8f7ec2e7e740b62f3bc48ecf5c99fb0db.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/CanvasShaderRD/446d51ed83b0516b66a117dfd73204a2f30615626014f8f31309ae9792f71ba9/f3e258e8f7ec2e7e740b62f3bc48ecf5c99fb0db.cache -------------------------------------------------------------------------------- /.godot/shader_cache/ResolveShaderRD/bd263b8dec1117eb8bc00d6ba8e624d99358fcfe298981dd5605d3e70bf41c7b/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/ResolveShaderRD/bd263b8dec1117eb8bc00d6ba8e624d99358fcfe298981dd5605d3e70bf41c7b/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/TonemapShaderRD/ac9eb0dcaa2743b04bbbb63d46fe08d7cc38f5c36f914d6048853ac21a4794ed/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/TonemapShaderRD/ac9eb0dcaa2743b04bbbb63d46fe08d7cc38f5c36f914d6048853ac21a4794ed/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/VoxelGiShaderRD/221e89572aca34e9ea7b5ef7f6e9a8f373b7a6974c3a7e5f8fb97b30bf5c278d/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/VoxelGiShaderRD/221e89572aca34e9ea7b5ef7f6e9a8f373b7a6974c3a7e5f8fb97b30bf5c278d/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/BokehDofShaderRD/1a5035c06f91066efe2ae274ee686b41b220d901a3d9edbaccbea03622f50125/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/BokehDofShaderRD/1a5035c06f91066efe2ae274ee686b41b220d901a3d9edbaccbea03622f50125/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/CanvasSdfShaderRD/fd99060a31380613872c713346d21096ea2beebfbd5a8c09ab919e35f67cd329/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/CanvasSdfShaderRD/fd99060a31380613872c713346d21096ea2beebfbd5a8c09ab919e35f67cd329/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/CopyToFbShaderRD/a785f280374f3415511cba1c313c7ad48042e1f81455b21a944cabc345f0477c/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/CopyToFbShaderRD/a785f280374f3415511cba1c313c7ad48042e1f81455b21a944cabc345f0477c/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/CubeToDpShaderRD/c879ac3d95686dbe6f08ca4621bb550834cf11a4ea4d4f468e17b246317b56f0/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/CubeToDpShaderRD/c879ac3d95686dbe6f08ca4621bb550834cf11a4ea4d4f468e17b246317b56f0/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/FsrUpscaleShaderRD/7e11bd19e2f564611cc5c630a43fe6174ffa832736ad004a4fff136c9e06bd2f/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/FsrUpscaleShaderRD/7e11bd19e2f564611cc5c630a43fe6174ffa832736ad004a4fff136c9e06bd2f/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/ParticlesShaderRD/313c56bac023725110f620bdf9e1e915017495b0ad2b314b4acec93fee494260/f128cab0b22fb7e0d9f023d6cdb81309be392d95.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/ParticlesShaderRD/313c56bac023725110f620bdf9e1e915017495b0ad2b314b4acec93fee494260/f128cab0b22fb7e0d9f023d6cdb81309be392d95.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SdfgiDebugShaderRD/6da17e1dd254ded180fb840f768402e09d44184e2b57eb3feff934fcbe207690/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SdfgiDebugShaderRD/6da17e1dd254ded180fb840f768402e09d44184e2b57eb3feff934fcbe207690/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SkeletonShaderRD/58d04267366dc00ac88ff6018451aaad32b0ba1349d0c84c37fe40ffcb91645f/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SkeletonShaderRD/58d04267366dc00ac88ff6018451aaad32b0ba1349d0c84c37fe40ffcb91645f/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SsaoBlurShaderRD/35a4b4fefc8da387acbbaf6f7386439e9983673ee4a91f9a6f6247bc5405707d/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SsaoBlurShaderRD/35a4b4fefc8da387acbbaf6f7386439e9983673ee4a91f9a6f6247bc5405707d/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SsilBlurShaderRD/01370bed1db2263ddf229c794bc8213b061285baa21be0cdf871f2ef872af74c/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SsilBlurShaderRD/01370bed1db2263ddf229c794bc8213b061285baa21be0cdf871f2ef872af74c/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/TaaResolveShaderRD/d657e6b8741b6ae510c90bdbe81f9f96a44d1a629220a3a3bd6a54b268bc7ab0/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/TaaResolveShaderRD/d657e6b8741b6ae510c90bdbe81f9f96a44d1a629220a3a3bd6a54b268bc7ab0/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /addons/quest_manager/extras/Action_Step_Area.gd: -------------------------------------------------------------------------------- 1 | extends Area2D 2 | #Helper Class for positional Actions 3 | #i.e Go to location (WIP) 4 | #Requires a Collision shape to be added 5 | 6 | func _on_body_entered(body): 7 | if body.name == "Player": 8 | print(QuestManager.active_quest) 9 | $QMStepTracker.update_step() 10 | queue_free() 11 | -------------------------------------------------------------------------------- /.godot/shader_cache/ClusterDebugShaderRD/aa9d76b3c8577da7c3dd45e75e7c9dddf37015fa35abbe3a086ed3cd44489332/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/ClusterDebugShaderRD/aa9d76b3c8577da7c3dd45e75e7c9dddf37015fa35abbe3a086ed3cd44489332/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/ClusterStoreShaderRD/5ee452df7872e207402b3f6d272b5774037c7528f6d432978170672069513be6/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/ClusterStoreShaderRD/5ee452df7872e207402b3f6d272b5774037c7528f6d432978170672069513be6/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/VoxelGiDebugShaderRD/312dd60768314e40df1a123a3d9f7e72bb3d893d5425b2f2151fe36c10ba1065/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/VoxelGiDebugShaderRD/312dd60768314e40df1a123a3d9f7e72bb3d893d5425b2f2151fe36c10ba1065/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/CanvasOcclusionShaderRD/5e209b47d7776c94a72cb441941c748525368cbfce3f75461e268583fcd080ff/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/CanvasOcclusionShaderRD/5e209b47d7776c94a72cb441941c748525368cbfce3f75461e268583fcd080ff/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/ClusterRenderShaderRD/fb1d4fbcd82f610d09f5d39f94a86b811783bab0a3b39b8020bec7b3275bcc24/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/ClusterRenderShaderRD/fb1d4fbcd82f610d09f5d39f94a86b811783bab0a3b39b8020bec7b3275bcc24/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/CubemapFilterShaderRD/223f190df3eeca1d766d36c8ece63e356f6942e3733a22e5dc723e94b9a429d3/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/CubemapFilterShaderRD/223f190df3eeca1d766d36c8ece63e356f6942e3733a22e5dc723e94b9a429d3/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/LuminanceReduceShaderRD/703874ed069226c80bacb27324415253fcc09d971e82df1e37a2a467f3a7d15d/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/LuminanceReduceShaderRD/703874ed069226c80bacb27324415253fcc09d971e82df1e37a2a467f3a7d15d/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/MotionVectorsShaderRD/1f3af49e62cb816bac3f98509457c5cc3b944aa651f88ee2a0f5e766bb5401b5/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/MotionVectorsShaderRD/1f3af49e62cb816bac3f98509457c5cc3b944aa651f88ee2a0f5e766bb5401b5/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/ParticlesCopyShaderRD/c76cd2aed74dd99bda998b700615e2504dbfb6afbbf0dacb381b157a85a6e0d0/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/ParticlesCopyShaderRD/c76cd2aed74dd99bda998b700615e2504dbfb6afbbf0dacb381b157a85a6e0d0/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SdfgiIntegrateShaderRD/625c83fcaa2321819ef0d6bca658d2334914b68d454444d187acd859dcbe8480/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SdfgiIntegrateShaderRD/625c83fcaa2321819ef0d6bca658d2334914b68d454444d187acd859dcbe8480/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SdfgiPreprocessShaderRD/15bae473b0ac810d1970c190f68f941453f29cd033c738a90ba40c3a26de3ff0/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SdfgiPreprocessShaderRD/15bae473b0ac810d1970c190f68f941453f29cd033c738a90ba40c3a26de3ff0/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/ShadowFrustumShaderRD/d022bd9094e564c17ba5a3857e875b763b8e418ad419a5884044955124e233d8/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/ShadowFrustumShaderRD/d022bd9094e564c17ba5a3857e875b763b8e418ad419a5884044955124e233d8/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SpecularMergeShaderRD/172d8d8590def41ca8366fd9b9069b7b4e0a1efb895b9728940c1f4955b7b31e/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SpecularMergeShaderRD/172d8d8590def41ca8366fd9b9069b7b4e0a1efb895b9728940c1f4955b7b31e/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SsaoInterleaveShaderRD/e97ad6b5da44168d2c8b40cd5a611e6e02849f0e82c42c1d6adcafa57b54c65b/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SsaoInterleaveShaderRD/e97ad6b5da44168d2c8b40cd5a611e6e02849f0e82c42c1d6adcafa57b54c65b/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SsilInterleaveShaderRD/4434557c465ed47697abe0223ae851216963b51ba69043443b6895b14d79b8bb/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SsilInterleaveShaderRD/4434557c465ed47697abe0223ae851216963b51ba69043443b6895b14d79b8bb/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/VolumetricFogShaderRD/ab5196cd68b47e4082c22286677462703cdc69c03320c5ad5c74fbb2588a2d07/9a227745af2d65830f930370a9fbba551fbd6f60.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/VolumetricFogShaderRD/ab5196cd68b47e4082c22286677462703cdc69c03320c5ad5c74fbb2588a2d07/9a227745af2d65830f930370a9fbba551fbd6f60.cache -------------------------------------------------------------------------------- /.godot/shader_cache/CubemapRoughnessShaderRD/8bc6fa8516e55f36354902efc0f7d8ef46a52ca3605932fa051e6d829961506c/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/CubemapRoughnessShaderRD/8bc6fa8516e55f36354902efc0f7d8ef46a52ca3605932fa051e6d829961506c/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SdfgiDebugProbesShaderRD/9ef7bf51799e1f54dc76cc3599f6339a36f07a236c0b0afb0957341fa0149a88/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SdfgiDebugProbesShaderRD/9ef7bf51799e1f54dc76cc3599f6339a36f07a236c0b0afb0957341fa0149a88/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SdfgiDirectLightShaderRD/427f3b5f5edfe5ff453b058ffe6863062ccdfe075deccb5092d69feaa5c644e6/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SdfgiDirectLightShaderRD/427f3b5f5edfe5ff453b058ffe6863062ccdfe075deccb5092d69feaa5c644e6/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SsaoImportanceMapShaderRD/c03564f181f2688e730bb1bd3ee62d4ae8a379062cd04576ee55d26cdfbf3997/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SsaoImportanceMapShaderRD/c03564f181f2688e730bb1bd3ee62d4ae8a379062cd04576ee55d26cdfbf3997/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SsilImportanceMapShaderRD/3554f3a7e39b5a429e639a6aa6b3e09215cb4e6be8ca40ced4450ac7c0899335/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SsilImportanceMapShaderRD/3554f3a7e39b5a429e639a6aa6b3e09215cb4e6be8ca40ced4450ac7c0899335/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/CubemapDownsamplerShaderRD/d18462d3c6ae154832c4823b0b30679d4287a9ef0645eb6e57776782eabd595e/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/CubemapDownsamplerShaderRD/d18462d3c6ae154832c4823b0b30679d4287a9ef0645eb6e57776782eabd595e/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SsEffectsDownsampleShaderRD/912e287a61544a3f66a9054499caf3543d1cf3d5674de23bedb7ff64f6f9fdf8/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SsEffectsDownsampleShaderRD/912e287a61544a3f66a9054499caf3543d1cf3d5674de23bedb7ff64f6f9fdf8/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SubsurfaceScatteringShaderRD/7c97428de641bad5c2a3cb9a8e780df7656148f55ddf4cd10a88c27f838c1c34/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SubsurfaceScatteringShaderRD/7c97428de641bad5c2a3cb9a8e780df7656148f55ddf4cd10a88c27f838c1c34/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/VolumetricFogProcessShaderRD/394deaf32fef05fa9885e5d50fdfdd5c06bee20baa8a467874fc70647de5c9a7/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/VolumetricFogProcessShaderRD/394deaf32fef05fa9885e5d50fdfdd5c06bee20baa8a467874fc70647de5c9a7/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ScriptQuestExample/ScriptQuestExampleScene.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://cxs5n68ejcxr0"] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/Examples/ScriptQuestExample/ScriptQuestExampleScene.gd" id="1_pyllk"] 4 | 5 | [node name="ScriptQuestExampleScene" type="Node2D"] 6 | script = ExtResource("1_pyllk") 7 | -------------------------------------------------------------------------------- /.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/048236defb6bf03aff4593ae5e1ee179e6446005.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/048236defb6bf03aff4593ae5e1ee179e6446005.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/0f1bcf11b9f7757773a7866f1cd2e297cb2acf5f.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/0f1bcf11b9f7757773a7866f1cd2e297cb2acf5f.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/44a3b542d1a7aa433841301aac88e07ec68bb95b.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/44a3b542d1a7aa433841301aac88e07ec68bb95b.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/513036325ff64a2245643eae4a83f8c916df1372.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/513036325ff64a2245643eae4a83f8c916df1372.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/6f9f221665bfceef9ee7104462ade0892fae85b4.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/6f9f221665bfceef9ee7104462ade0892fae85b4.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/7e4276feb9e7788110465d53faa6226c57f8116f.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/7e4276feb9e7788110465d53faa6226c57f8116f.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/7fb66440f65dac23b75016fc52fb82ae26e9393f.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/7fb66440f65dac23b75016fc52fb82ae26e9393f.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/7fdaf9a9f33dad9936aaccf6e0d8586657dd71d5.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/7fdaf9a9f33dad9936aaccf6e0d8586657dd71d5.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/9192e10d5d060dba18a014008198b12b09a48e50.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/9192e10d5d060dba18a014008198b12b09a48e50.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/91a7b7c4f6a2d81e1b66e70a1bdca580a0276806.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/91a7b7c4f6a2d81e1b66e70a1bdca580a0276806.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/979584fc9058fc31b2a6d1e00d2ae8801f62209b.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/979584fc9058fc31b2a6d1e00d2ae8801f62209b.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/a3c143fc7cc5e43b3cd10abbecaa4001e645acad.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/a3c143fc7cc5e43b3cd10abbecaa4001e645acad.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/a6d99b637dfee75712ae57f13dc63ae39e299a45.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/a6d99b637dfee75712ae57f13dc63ae39e299a45.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/ab60f8b228c0dad11d9d882c2ab4f61eb6ca2f20.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/ab60f8b228c0dad11d9d882c2ab4f61eb6ca2f20.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/c4c828897f8a3fe72e3713d35b4ba452d7ed9acf.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/c4c828897f8a3fe72e3713d35b4ba452d7ed9acf.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/c911b2eb203b7525047b1fc26929407fb3d4191d.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/c911b2eb203b7525047b1fc26929407fb3d4191d.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/dfe2cd8f6a54d8a4d9cde5047b4dc131c46d8b1d.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/dfe2cd8f6a54d8a4d9cde5047b4dc131c46d8b1d.cache -------------------------------------------------------------------------------- /.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/f24bd7cfaf611a139286a23d4d013a86b1753920.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/f24bd7cfaf611a139286a23d4d013a86b1753920.cache -------------------------------------------------------------------------------- /.godot/shader_cache/ScreenSpaceReflectionShaderRD/75a98cb7c423b4821931cee9c154738d8213bc538d0459fd341f0d92c07c8aea/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/ScreenSpaceReflectionShaderRD/75a98cb7c423b4821931cee9c154738d8213bc538d0459fd341f0d92c07c8aea/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/ScreenSpaceReflectionFilterShaderRD/2a685f532b023c59b81ffd6ab9f4024ccaa2cc682ea1f2f22b1baf5b30a9dbef/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/ScreenSpaceReflectionFilterShaderRD/2a685f532b023c59b81ffd6ab9f4024ccaa2cc682ea1f2f22b1baf5b30a9dbef/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /.godot/shader_cache/ScreenSpaceReflectionScaleShaderRD/6cb95948e057d81ca98f1485bcc7a0ece4029023d368682bca1777773aad9f67/087916079fba7c625e62b0c2cca570e0fb87c99a.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chevifier/QuestManager/HEAD/.godot/shader_cache/ScreenSpaceReflectionScaleShaderRD/6cb95948e057d81ca98f1485bcc7a0ece4029023d368682bca1777773aad9f67/087916079fba7c625e62b0c2cca570e0fb87c99a.cache -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleOne/Projectile.gd: -------------------------------------------------------------------------------- 1 | extends Area2D 2 | 3 | func _physics_process(delta): 4 | var vel = Vector2(0,-600) * delta 5 | position += vel 6 | 7 | if position.y < -50: 8 | queue_free() 9 | 10 | func _on_area_entered(area): 11 | if area.is_in_group("enemy"): 12 | area.queue_free() 13 | $QMStepTracker.update_step() 14 | queue_free() 15 | 16 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleOne/Enemy.gd: -------------------------------------------------------------------------------- 1 | extends Area2D 2 | const SPEED = 300 3 | 4 | 5 | func _physics_process(delta): 6 | var velocity = Vector2.DOWN * SPEED * delta 7 | position += velocity 8 | 9 | if position.y > 1000: 10 | queue_free() 11 | 12 | func _on_body_entered(body): 13 | if body.has_method("take_damage"): 14 | body.take_damage() 15 | queue_free() 16 | -------------------------------------------------------------------------------- /addons/quest_manager/extras/action_step_area.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://4mxj5ftcj1fx"] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/extras/Action_Step_Area.gd" id="1_x1dbr"] 4 | 5 | [node name="Action_Step_Area" type="Area2D"] 6 | script = ExtResource("1_x1dbr") 7 | 8 | [connection signal="body_entered" from="." to="." method="_on_body_entered"] 9 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleTwo/ExampleTwo.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | @export var enter_pos : Marker2D 4 | @export var exit_pos : Marker2D 5 | func _on_house_enter_body_entered(body): 6 | if body.name == "Player": 7 | body.position = enter_pos.position 8 | 9 | func _on_house_exit_body_entered(body): 10 | if body.name == "Player": 11 | body.position = exit_pos.position 12 | 13 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/Test.qm.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="quest_importer" 4 | type="Resource" 5 | uid="uid://x4xqsh2q3moi" 6 | path="res://.godot/imported/Test.qm-ca1b9836e209703bd4029eda251af8bb.qm" 7 | 8 | [deps] 9 | 10 | source_file="res://addons/quest_manager/Template/Test.qm" 11 | dest_files=["res://.godot/imported/Test.qm-ca1b9836e209703bd4029eda251af8bb.qm"] 12 | 13 | [params] 14 | 15 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/All Nodes.quest.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="quest_importer" 4 | type="Resource" 5 | uid="uid://d0xwa1tto7pd8" 6 | path="res://.godot/imported/All Nodes.quest-5c630602503abe2a3b0bb96b2b100b94.tres" 7 | 8 | [deps] 9 | 10 | source_file="res://addons/quest_manager/Examples/All Nodes.quest" 11 | dest_files=["res://.godot/imported/All Nodes.quest-5c630602503abe2a3b0bb96b2b100b94.tres"] 12 | 13 | [params] 14 | 15 | defaults=true 16 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleQuests.quest.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="quest_importer" 4 | type="Resource" 5 | uid="uid://xpnw6ggixm3w" 6 | path="res://.godot/imported/ExampleQuests.quest-1a6f9296a852f70ead827b0e3dab69a2.tres" 7 | 8 | [deps] 9 | 10 | source_file="res://addons/quest_manager/Examples/ExampleQuests.quest" 11 | dest_files=["res://.godot/imported/ExampleQuests.quest-1a6f9296a852f70ead827b0e3dab69a2.tres"] 12 | 13 | [params] 14 | 15 | defaults=true 16 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/Group.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends EditorNode 3 | 4 | @onready var group = $LineEdit 5 | func setup(): 6 | super.setup() 7 | Node_Type = Type.GROUP_NODE 8 | focus_nodes.append(group) 9 | 10 | func get_data(): 11 | node_data["group"] = group.text 12 | super.get_data() 13 | return node_data 14 | 15 | func set_data(data): 16 | super.set_data(data) 17 | group.text = data["group"] 18 | 19 | func _on_line_edit_text_changed(new_text): 20 | node_data["text"] = group.text 21 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ScriptQuestExample/ScriptQuestExampleScene.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | #Use scripted quest to create quests procedurally when needed 3 | func _ready(): 4 | var Quest = ScriptQuest.new("Example","Disc") 5 | #add an action step 6 | Quest.add_action_step("Step1") 7 | #add an incremental step 8 | Quest.add_incremental_step("Step2", "item", 10) 9 | #finalize 10 | Quest.finalize_quest() 11 | #Add quest to player quests 12 | QuestManager.add_scripted_quest(Quest) 13 | #print the quest disctionary 14 | print(QuestManager.get_player_quest("Example")) 15 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleTwo/apple_spawner.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=3 format=3] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/Examples/ExampleTwo/Apple_Spawn.gd" id="1_rdk8x"] 4 | [ext_resource type="PackedScene" path="res://addons/quest_manager/Examples/ExampleTwo/Apple.tscn" id="2_eqm1k"] 5 | 6 | [node name="Apple_Spawn" type="Marker2D"] 7 | script = ExtResource("1_rdk8x") 8 | Apple = ExtResource("2_eqm1k") 9 | 10 | [node name="Timer" type="Timer" parent="."] 11 | 12 | [connection signal="timeout" from="Timer" to="." method="_spawn_apple"] 13 | -------------------------------------------------------------------------------- /.godot/editor/filesystem_update4: -------------------------------------------------------------------------------- 1 | res://addons/quest_manager/Editor/EditorWindow.tscn 2 | res://addons/quest_manager/Editor/EditorWindow.gd 3 | res://addons/quest_manager/Editor/Nodes/Branch.tscn 4 | res://addons/quest_manager/Editor/Nodes/Callable_Step.tscn 5 | res://addons/quest_manager/Editor/Nodes/items_step.tscn 6 | res://addons/quest_manager/Editor/Nodes/Timer_Step.tscn 7 | res://addons/quest_manager/QuestManager.gd 8 | res://addons/quest_manager/Examples/ExampleOne/SpaceArcade.tscn 9 | res://addons/quest_manager/Examples/ExampleOne/UI.gd 10 | res://addons/quest_manager/Examples/ExampleTwo/ExampleTwoScene.tscn 11 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/End.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends EditorNode 3 | 4 | var nodes = 0 5 | 6 | func add_node(): 7 | nodes += 1 8 | 9 | func propagate_quest_id(_id): 10 | if quest_id == "": 11 | super.propagate_quest_id(_id) 12 | 13 | 14 | func clear_quest_id(): 15 | nodes -= 1 16 | if nodes == 0: 17 | super.clear_quest_id() 18 | 19 | func setup(): 20 | super.setup() 21 | Node_Type = Type.END_NODE 22 | 23 | func get_data(): 24 | node_data["step_type"] = "end" 25 | node_data["details"] = "Complete" 26 | super.get_data() 27 | return node_data 28 | 29 | func set_data(data): 30 | super.set_data(data) 31 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/Callable_Step.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends EditorNode 3 | 4 | @onready var callable = %callable 5 | 6 | 7 | func setup(): 8 | Node_Type = Type.FUNCTION_CALL_NODE 9 | focus_nodes.append(callable) 10 | super.setup() 11 | 12 | func set_data(data): 13 | callable.text = data["callable"] 14 | super.set_data(data) 15 | 16 | func get_data(): 17 | node_data["step_type"] = "callable_step" 18 | node_data["details"] = callable.text 19 | node_data["callable"] = callable.text 20 | node_data["params"] = get_meta_data(true) 21 | node_data["complete"] = false 22 | super.get_data() 23 | return node_data 24 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleTwo/Apple_Spawn.gd: -------------------------------------------------------------------------------- 1 | extends Marker2D 2 | 3 | @export var Apple : PackedScene 4 | 5 | 6 | var apple_count = 0 7 | const max_apples = 3 8 | 9 | func _ready(): 10 | $Timer.wait_time = randf_range(5,15) 11 | $Timer.start() 12 | 13 | func notify_collected(): 14 | apple_count -= 1 15 | if apple_count < max_apples: 16 | $Timer.start() 17 | 18 | func _spawn_apple(): 19 | var apple = Apple.instantiate() 20 | add_child(apple) 21 | var offset = Vector2(randf_range(-96,96),randf_range(-96,96)) 22 | apple.position = offset 23 | apple_count += 1 24 | if apple_count >= max_apples: 25 | $Timer.stop() 26 | 27 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/Step.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends EditorNode 3 | 4 | @onready var details = %details 5 | 6 | func setup(): 7 | Node_Type = Type.STEP_NODE 8 | focus_nodes.append(details) 9 | super.setup() 10 | 11 | func get_data(): 12 | node_data["step_type"] = "action_step" 13 | node_data["details"] = details.text 14 | node_data["meta_data"] = get_meta_data() 15 | node_data["completed"] = false 16 | super.get_data() 17 | return node_data 18 | 19 | func set_data(data): 20 | super.set_data(data) 21 | details.text = data["details"] 22 | 23 | func _on_details_gui_input(event): 24 | if event is InputEventKey: 25 | if event.keycode == KEY_ENTER: 26 | details.release_focus() 27 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleOne/Player.gd: -------------------------------------------------------------------------------- 1 | extends CharacterBody2D 2 | 3 | @export var left := "ui_left" 4 | @export var right := "ui_right" 5 | @export var shoot := "ui_accept" 6 | const SPEED = 400 7 | var hp = 3 8 | @export var projectile :PackedScene 9 | func _ready(): 10 | hp = 3 11 | 12 | func _physics_process(delta): 13 | var dir = Input.get_axis(left,right) 14 | 15 | velocity.x = dir * SPEED 16 | move_and_slide() 17 | 18 | if position.x <= 372: 19 | position.x = 373 20 | if position.x >= 800: 21 | position.x = 799 22 | 23 | if Input.is_action_just_pressed(shoot): 24 | fire_pojectile() 25 | 26 | func fire_pojectile(): 27 | var p = projectile.instantiate() 28 | get_parent().add_child(p) 29 | p.position = position 30 | func take_damage(): 31 | hp -= 1 32 | func fly_away_n_exit(): 33 | velocity.y = -500 34 | if position.y < -10: 35 | get_tree().quit() 36 | -------------------------------------------------------------------------------- /icon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://y51eupjlyloi" 6 | path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://icon.png" 14 | dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /documentation/Editorview.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://8hdr26kwkfvb" 6 | path="res://.godot/imported/Editorview.png-ab59bf558aa2ae7990c44794177a09ce.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://documentation/Editorview.png" 14 | dest_files=["res://.godot/imported/Editorview.png-ab59bf558aa2ae7990c44794177a09ce.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /addons/quest_manager/extras/icon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cgnqx5up6iph0" 6 | path="res://.godot/imported/icon.png-5f94bd0d5f157e6c2587641e78273150.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/quest_manager/extras/icon.png" 14 | dest_files=["res://.godot/imported/icon.png-5f94bd0d5f157e6c2587641e78273150.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /documentation/QuestManager.jpg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://1vdd7pb5q4wl" 6 | path="res://.godot/imported/QuestManager.jpg-25beea9ccead450fe462d33f0b18d225.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://documentation/QuestManager.jpg" 14 | dest_files=["res://.godot/imported/QuestManager.jpg-25beea9ccead450fe462d33f0b18d225.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /addons/quest_manager/assets/icons/icon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://csfwnghm868c4" 6 | path="res://.godot/imported/icon.png-99585f9f0a3871289c6b17682e167c27.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/quest_manager/assets/icons/icon.png" 14 | dest_files=["res://.godot/imported/icon.png-99585f9f0a3871289c6b17682e167c27.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /documentation/arcade_shooter.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://m05piv6g6kxr" 6 | path="res://.godot/imported/arcade_shooter.png-110a8d8f265280fd33cd38fde50cc198.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://documentation/arcade_shooter.png" 14 | dest_files=["res://.godot/imported/arcade_shooter.png-110a8d8f265280fd33cd38fde50cc198.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/right_mouse_menu.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://bdxun5nw54paa"] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/Editor/right_mouse_menu.gd" id="1_tpqfi"] 4 | 5 | [node name="right_mouse_list" type="PopupMenu"] 6 | position = Vector2i(125, 0) 7 | size = Vector2i(195, 197) 8 | visible = true 9 | transparent = true 10 | max_size = Vector2i(200, 200) 11 | hide_on_checkable_item_selection = false 12 | allow_search = false 13 | item_count = 7 14 | item_0/text = "Add Quest" 15 | item_0/id = 0 16 | item_1/text = "Add Step" 17 | item_1/id = 1 18 | item_2/text = "Add Incremental Step" 19 | item_2/id = 2 20 | item_3/text = "Add Item Step" 21 | item_3/id = 3 22 | item_4/text = "Add Group Tag" 23 | item_4/id = 4 24 | item_5/text = "Add Meta Data" 25 | item_5/id = 5 26 | item_6/text = "And End Node" 27 | item_6/id = 6 28 | script = ExtResource("1_tpqfi") 29 | 30 | [connection signal="popup_hide" from="." to="." method="_on_popup_hide"] 31 | -------------------------------------------------------------------------------- /addons/quest_manager/assets/SpriteSheet.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://ux6u0ocdyfmb" 6 | path="res://.godot/imported/SpriteSheet.png-1a22a9aa9536de3cffc33bd2b30980eb.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/quest_manager/assets/SpriteSheet.png" 14 | dest_files=["res://.godot/imported/SpriteSheet.png-1a22a9aa9536de3cffc33bd2b30980eb.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /documentation/example_editor_quest.jpg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://7plfko7jgd0k" 6 | path="res://.godot/imported/example_editor_quest.jpg-f902bdd683e080d5227f9f2a71103a86.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://documentation/example_editor_quest.jpg" 14 | dest_files=["res://.godot/imported/example_editor_quest.jpg-f902bdd683e080d5227f9f2a71103a86.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleTwo/NPC.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | @export var dialogue := "" 3 | @export var quest_resource : QuestResource 4 | @export_enum("Father", "Mother", "Sister") var family_member = 0 5 | var quest_name = "Meal for the Family" 6 | var gave_quest = false 7 | func _ready(): 8 | match family_member: 9 | 0: 10 | $Father.show() 11 | 1: 12 | $Mother.show() 13 | get_quest() 14 | 2: 15 | $Sister.show() 16 | 17 | func get_quest(): 18 | if gave_quest == false: 19 | QuestManager.add_quest(quest_name,quest_resource) 20 | gave_quest = true 21 | 22 | 23 | func get_family_member(): 24 | return family_member 25 | 26 | func give_pie(): 27 | dialogue = "Thank You" 28 | 29 | func get_dialogue(num = 0): 30 | match family_member: 31 | 0: 32 | if num == 1: 33 | return "This is really good son" 34 | 1: 35 | if num == 1: 36 | return "Thank you son, Its delicious" 37 | 2: 38 | if num == 1: 39 | return "Yum Tasty" 40 | return dialogue 41 | -------------------------------------------------------------------------------- /addons/quest_manager/assets/Character Sheet.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cqw68ky2utcct" 6 | path="res://.godot/imported/Character Sheet.png-ad0eb847c8170f682b778bcc83b8c05b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/quest_manager/assets/Character Sheet.png" 14 | dest_files=["res://.godot/imported/Character Sheet.png-ad0eb847c8170f682b778bcc83b8c05b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /project.godot: -------------------------------------------------------------------------------- 1 | ; Engine configuration file. 2 | ; It's best edited using the editor UI and not directly, 3 | ; since the parameters that go here are not all obvious. 4 | ; 5 | ; Format: 6 | ; [section] ; section goes between [] 7 | ; param=value ; assign values to parameters 8 | 9 | config_version=5 10 | 11 | :config_version=5 12 | quest_file_path="res://addons/quest_manager/Examples/ExampleQuests.quest" 13 | recent_projects=["res://addons/quest_manager/Examples/ExampleQuests.quest", "res://addons/quest_manager/Examples/All Nodes.quest"] 14 | 15 | [application] 16 | 17 | config/name="Quest Manager" 18 | run/main_scene="res://addons/quest_manager/Editor/EditorWindow.tscn" 19 | config/features=PackedStringArray("4.2", "Forward Plus") 20 | config/icon="res://icon.png" 21 | 22 | [autoload] 23 | 24 | QuestManager="*res://addons/quest_manager/QuestManager.gd" 25 | 26 | [editor_plugins] 27 | 28 | enabled=PackedStringArray("res://addons/quest_manager/plugin.cfg") 29 | 30 | [filesystem] 31 | 32 | import/blender/enabled=false 33 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleOne/Enemy.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=5 format=3 uid="uid://b1x0n5bd18fi4"] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/Examples/ExampleOne/Enemy.gd" id="1_ww3ap"] 4 | [ext_resource type="Texture2D" uid="uid://ux6u0ocdyfmb" path="res://addons/quest_manager/assets/SpriteSheet.png" id="2_65dc7"] 5 | 6 | [sub_resource type="AtlasTexture" id="AtlasTexture_sw6wr"] 7 | atlas = ExtResource("2_65dc7") 8 | region = Rect2(480, 352, 32, 31.4437) 9 | 10 | [sub_resource type="CircleShape2D" id="CircleShape2D_tvtvb"] 11 | radius = 15.1327 12 | 13 | [node name="Enemy" type="Area2D" groups=["enemy"]] 14 | script = ExtResource("1_ww3ap") 15 | 16 | [node name="Sprite2D" type="Sprite2D" parent="."] 17 | texture = SubResource("AtlasTexture_sw6wr") 18 | 19 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 20 | position = Vector2(1, -2) 21 | shape = SubResource("CircleShape2D_tvtvb") 22 | 23 | [connection signal="body_entered" from="." to="." method="_on_body_entered"] 24 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleOne/Player.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=6 format=3 uid="uid://dkgxjm5uka6l7"] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/Examples/ExampleOne/Player.gd" id="1_e3ya5"] 4 | [ext_resource type="PackedScene" path="res://addons/quest_manager/Examples/ExampleOne/Projectile.tscn" id="2_8g4sx"] 5 | [ext_resource type="Texture2D" uid="uid://ux6u0ocdyfmb" path="res://addons/quest_manager/assets/SpriteSheet.png" id="2_qskpn"] 6 | 7 | [sub_resource type="AtlasTexture" id="AtlasTexture_5k4io"] 8 | atlas = ExtResource("2_qskpn") 9 | region = Rect2(480, 448, 32, 32) 10 | 11 | [sub_resource type="CircleShape2D" id="CircleShape2D_tvtvb"] 12 | radius = 13.0384 13 | 14 | [node name="Player" type="CharacterBody2D"] 15 | script = ExtResource("1_e3ya5") 16 | projectile = ExtResource("2_8g4sx") 17 | 18 | [node name="Sprite2D" type="Sprite2D" parent="."] 19 | texture = SubResource("AtlasTexture_5k4io") 20 | 21 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 22 | position = Vector2(1, 3) 23 | shape = SubResource("CircleShape2D_tvtvb") 24 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/IncrementalStep.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends EditorNode 3 | 4 | @onready var details = %details 5 | @onready var item_name = %item_name 6 | @onready var quantity = %quantity 7 | 8 | func setup(): 9 | super.setup() 10 | Node_Type = Type.INCREMENTAL_NODE 11 | focus_nodes.append(details) 12 | focus_nodes.append(quantity) 13 | 14 | func propogate_quest_id(id): 15 | if output_node != null: 16 | output_node.propogate_quest_id(id) 17 | 18 | func get_data(): 19 | node_data["step_type"] = "incremental_step" 20 | node_data["details"] = details.text 21 | node_data["item_name"] = item_name.text 22 | node_data["required"] = quantity.value 23 | node_data["collected"] = 0 24 | node_data["completed"] = false 25 | node_data["meta_data"] = get_meta_data() 26 | super.get_data() 27 | return node_data 28 | 29 | func set_data(data): 30 | super.set_data(data) 31 | details.text = data.details 32 | item_name.text = data.item_name 33 | quantity.value = data.required 34 | 35 | func _on_details_gui_input(event): 36 | if event is InputEventKey: 37 | if event.keycode == KEY_ENTER: 38 | item_name.release_focus() 39 | details.release_focus() 40 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023-Present Chevon Champier(Chevifier) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Quest Manager Banner](documentation/QuestManager.jpg) 2 | 3 | # Quest Manager 4 | QuestManager is a plugin created to make creating and managing quests/missions/objectives easier. 5 | 6 | __NOTICE!__ 7 | This plugin only supports Godot 4.2+. Please update the engine if youre 8 | on an older Godot 4 version 9 | 10 | ## Installation 11 | 1. Copy the `quest_manager` directory to your `res://addons/` folder. 12 | 2. Open `Project>Project Settings>Plugins` and enable the `Quest Manager` plugin 13 | 3. You now have a new tab `Quest Manager` at the top of the editor. 14 | 15 | ## Documentations 16 | 17 | [Creating Quests](documentation/Creating_Quests.md) 18 | 19 | [Quest Manager API](documentation/Quest_Manager_API.md) 20 | 21 | [Video Tutorial pt 1: Setup and Interface](https://youtu.be/zBJ6NEJTT9s) 22 | 23 | [Video Tutorial pt 2: Adding and Completing Quests](https://youtu.be/JI_LXcY8-Ug) 24 | 25 | ## Discord 26 | 27 | [Join the Chevifier Discord](https://discord.gg/xEBEm5JeCU) 28 | 29 | ## License 30 | 31 | Licensed under the MIT license, see `LICENSE` for more information. 32 | 33 | ## Other 34 | 35 | [Chevifier Youtube Channel](https://www.youtube.com/Chevifier) 36 | -------------------------------------------------------------------------------- /addons/quest_manager/LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023-Present Chevon Champier(Chevifier) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/End.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://bnbtwf5q2hh1n"] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/Editor/Nodes/End.gd" id="1_18gav"] 4 | 5 | [node name="d2cee2d1af" type="GraphNode"] 6 | custom_minimum_size = Vector2(111, 80) 7 | offset_right = 111.0 8 | offset_bottom = 80.0 9 | title = "END" 10 | slot/0/left_enabled = true 11 | slot/0/left_type = 0 12 | slot/0/left_color = Color(0, 1, 0, 1) 13 | slot/0/left_icon = null 14 | slot/0/right_enabled = false 15 | slot/0/right_type = 0 16 | slot/0/right_color = Color(1, 1, 1, 1) 17 | slot/0/right_icon = null 18 | slot/0/draw_stylebox = true 19 | slot/1/left_enabled = false 20 | slot/1/left_type = 0 21 | slot/1/left_color = Color(1, 1, 1, 1) 22 | slot/1/left_icon = null 23 | slot/1/right_enabled = false 24 | slot/1/right_type = 0 25 | slot/1/right_color = Color(1, 1, 1, 1) 26 | slot/1/right_icon = null 27 | slot/1/draw_stylebox = true 28 | script = ExtResource("1_18gav") 29 | 30 | [node name="end" type="Label" parent="."] 31 | layout_mode = 2 32 | text = "Complete 33 | " 34 | vertical_alignment = 1 35 | 36 | [node name="id_lbl" type="LineEdit" parent="."] 37 | layout_mode = 2 38 | size_flags_vertical = 6 39 | text = "d2cee2d1af" 40 | editable = false 41 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/Branch.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | class_name Branch 3 | extends EditorNode 4 | 5 | @onready var details = %details 6 | 7 | var branch_step_id = "" 8 | var alt_output_node = null 9 | enum Condition { 10 | GREATER_THAN, 11 | LESS_THAN, 12 | EQUAL_TO, 13 | NOT_EQUAL_TO 14 | } 15 | 16 | func setup(): 17 | super.setup() 18 | Node_Type = Type.BRANCH_NODE 19 | focus_nodes.append(details) 20 | 21 | func get_data(): 22 | node_data["step_type"]= "branch_step" 23 | node_data["details"]= details.text 24 | node_data["branch"]= false 25 | node_data["completed"]= false 26 | node_data["branch_step_id"]=branch_step_id # the step to jump if branching 27 | node_data["meta_data"] = get_meta_data() 28 | super.get_data() 29 | return node_data 30 | 31 | 32 | func propagate_quest_id(id): 33 | super.propagate_quest_id(id) 34 | if alt_output_node != null: 35 | alt_output_node.propagate_quest_id(id) 36 | 37 | func clear_quest_id(): 38 | super.clear_quest_id() 39 | alt_output_node.clear_quest_id() 40 | 41 | func set_data(data): 42 | super.set_data(data) 43 | details.text = data["details"] 44 | 45 | func _on_details_gui_input(event): 46 | if event is InputEventKey: 47 | if event.keycode == KEY_ENTER: 48 | details.release_focus() 49 | 50 | 51 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleTwo/Apple.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=6 format=3 uid="uid://c33jsppqupobi"] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/Examples/ExampleTwo/Apple.gd" id="1_xin7v"] 4 | [ext_resource type="Texture2D" uid="uid://ux6u0ocdyfmb" path="res://addons/quest_manager/assets/SpriteSheet.png" id="2_arn76"] 5 | [ext_resource type="Script" path="res://addons/quest_manager/QMStepTracker.gd" id="3_84w1a"] 6 | 7 | [sub_resource type="AtlasTexture" id="AtlasTexture_p3byu"] 8 | atlas = ExtResource("2_arn76") 9 | region = Rect2(263, 39, 18, 18) 10 | 11 | [sub_resource type="CircleShape2D" id="CircleShape2D_xkq5d"] 12 | 13 | [node name="Item" type="Area2D"] 14 | script = ExtResource("1_xin7v") 15 | 16 | [node name="Sprite2D" type="Sprite2D" parent="."] 17 | texture = SubResource("AtlasTexture_p3byu") 18 | 19 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 20 | shape = SubResource("CircleShape2D_xkq5d") 21 | 22 | [node name="QMStepTracker" type="Node" parent="."] 23 | script = ExtResource("3_84w1a") 24 | step_type = 1 25 | quest_id = "e6040ba290" 26 | step_id = "ef2e76154d" 27 | item_name = "" 28 | quantity = 1 29 | is_branching = false 30 | 31 | [connection signal="body_entered" from="." to="." method="_on_body_entered"] 32 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleOne/Projectile.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=6 format=3 uid="uid://dx3k0hwo1vibo"] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/Examples/ExampleOne/Projectile.gd" id="1_qhv4u"] 4 | [ext_resource type="Texture2D" uid="uid://ux6u0ocdyfmb" path="res://addons/quest_manager/assets/SpriteSheet.png" id="2_s0dt4"] 5 | [ext_resource type="Script" path="res://addons/quest_manager/QMStepTracker.gd" id="3_gv4dd"] 6 | 7 | [sub_resource type="CircleShape2D" id="CircleShape2D_j7na8"] 8 | 9 | [sub_resource type="AtlasTexture" id="AtlasTexture_fccpt"] 10 | atlas = ExtResource("2_s0dt4") 11 | region = Rect2(495, 399, 13, 13) 12 | 13 | [node name="Projectile" type="Area2D"] 14 | script = ExtResource("1_qhv4u") 15 | 16 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 17 | shape = SubResource("CircleShape2D_j7na8") 18 | 19 | [node name="Sprite2D" type="Sprite2D" parent="."] 20 | texture_filter = 2 21 | texture = SubResource("AtlasTexture_fccpt") 22 | 23 | [node name="QMStepTracker" type="Node" parent="."] 24 | script = ExtResource("3_gv4dd") 25 | step_type = 1 26 | quest_id = "1e3cd6e59f" 27 | step_id = "1118a2488c" 28 | item_name = "" 29 | quantity = 1 30 | is_branching = false 31 | 32 | [connection signal="area_entered" from="." to="." method="_on_area_entered"] 33 | -------------------------------------------------------------------------------- /addons/quest_manager/ImportPlugin.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends EditorImportPlugin 3 | 4 | enum Presets { DEFAULT } 5 | 6 | func _get_importer_name(): 7 | return "quest_importer" 8 | 9 | func _get_import_options(path, preset_index): 10 | return [{ 11 | name = "defaults", 12 | default_value = true 13 | }] 14 | 15 | func _get_option_visibility(path,option, options): 16 | return false 17 | 18 | func _get_visible_name(): 19 | return "Quest File" 20 | 21 | func _get_priority(): 22 | return 1000.0 23 | 24 | func _get_import_order(): 25 | return -1000 26 | 27 | func _get_recognized_extensions(): 28 | return PackedStringArray(["quest"]) #Quest Manager file 29 | 30 | func _get_save_extension(): 31 | return "tres" 32 | 33 | func _get_resource_type(): 34 | return "Resource" 35 | 36 | func _get_preset_count(): 37 | return Presets.size() 38 | 39 | func _get_preset_name(preset): 40 | match preset: 41 | Presets.DEFAULT: 42 | return "Default" 43 | _: 44 | return "Unknown" 45 | 46 | 47 | func _import(source_file, save_path, options, platform_variants, gen_files): 48 | var file = FileAccess.open(source_file,FileAccess.READ) 49 | var err = file.get_open_error() 50 | if err != OK: 51 | return err 52 | var quest_res = QuestResource.new() 53 | 54 | quest_res.quest_data = file.get_var() 55 | quest_res.editor_data = file.get_var() 56 | return ResourceSaver.save(quest_res, "%s.%s" % [save_path, _get_save_extension()]) 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/Group.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://dn40x8acrpxak"] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/Editor/Nodes/Group.gd" id="1_qh728"] 4 | 5 | [node name="2f555e113a" type="GraphNode"] 6 | custom_minimum_size = Vector2(50, 80) 7 | offset_right = 186.0 8 | offset_bottom = 111.0 9 | tooltip_text = "Groups are useful for filtering multiple quests to access. Can only be attached to Quest Nodes" 10 | resizable = true 11 | title = "Group" 12 | slot/0/left_enabled = false 13 | slot/0/left_type = 0 14 | slot/0/left_color = Color(1, 1, 1, 1) 15 | slot/0/left_icon = null 16 | slot/0/right_enabled = true 17 | slot/0/right_type = 1 18 | slot/0/right_color = Color(1, 1, 1, 1) 19 | slot/0/right_icon = null 20 | slot/0/draw_stylebox = true 21 | slot/1/left_enabled = false 22 | slot/1/left_type = 0 23 | slot/1/left_color = Color(1, 1, 1, 1) 24 | slot/1/left_icon = null 25 | slot/1/right_enabled = false 26 | slot/1/right_type = 0 27 | slot/1/right_color = Color(1, 1, 1, 1) 28 | slot/1/right_icon = null 29 | slot/1/draw_stylebox = true 30 | script = ExtResource("1_qh728") 31 | 32 | [node name="LineEdit" type="LineEdit" parent="."] 33 | custom_minimum_size = Vector2(150, 0) 34 | layout_mode = 2 35 | alignment = 1 36 | clear_button_enabled = true 37 | middle_mouse_paste_enabled = false 38 | 39 | [node name="id_lbl" type="LineEdit" parent="."] 40 | layout_mode = 2 41 | size_flags_vertical = 6 42 | text = "2f555e113a" 43 | editable = false 44 | 45 | [connection signal="text_changed" from="LineEdit" to="." method="_on_line_edit_text_changed"] 46 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleTwo/npc.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=7 format=3] 2 | 3 | [ext_resource type="Texture2D" uid="uid://ux6u0ocdyfmb" path="res://addons/quest_manager/assets/SpriteSheet.png" id="1_ooyks"] 4 | [ext_resource type="Script" path="res://addons/quest_manager/Examples/ExampleTwo/NPC.gd" id="2_vio6p"] 5 | 6 | [sub_resource type="RectangleShape2D" id="RectangleShape2D_qwep7"] 7 | size = Vector2(20, 43) 8 | 9 | [sub_resource type="AtlasTexture" id="AtlasTexture_jwpbm"] 10 | atlas = ExtResource("1_ooyks") 11 | region = Rect2(67, 333, 26, 51) 12 | 13 | [sub_resource type="AtlasTexture" id="AtlasTexture_0a6i1"] 14 | atlas = ExtResource("1_ooyks") 15 | region = Rect2(4, 341, 24, 44) 16 | 17 | [sub_resource type="AtlasTexture" id="AtlasTexture_6hjjc"] 18 | atlas = ExtResource("1_ooyks") 19 | region = Rect2(40, 352, 16, 32) 20 | 21 | [node name="NPC" type="StaticBody2D" groups=["NPC"]] 22 | script = ExtResource("2_vio6p") 23 | 24 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 25 | position = Vector2(0, 1.5) 26 | shape = SubResource("RectangleShape2D_qwep7") 27 | 28 | [node name="Father" type="Sprite2D" parent="."] 29 | visible = false 30 | z_index = 2 31 | y_sort_enabled = true 32 | texture_filter = 1 33 | texture = SubResource("AtlasTexture_jwpbm") 34 | 35 | [node name="Mother" type="Sprite2D" parent="."] 36 | visible = false 37 | z_index = 2 38 | y_sort_enabled = true 39 | texture_filter = 1 40 | texture = SubResource("AtlasTexture_0a6i1") 41 | 42 | [node name="Sister" type="Sprite2D" parent="."] 43 | visible = false 44 | z_index = 2 45 | y_sort_enabled = true 46 | texture_filter = 1 47 | texture = SubResource("AtlasTexture_6hjjc") 48 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/Quest.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends EditorNode 3 | 4 | #All data get pull to this node on save 5 | @onready var quest_name = $Quest_Name 6 | @onready var quest_details = $Quest_Details 7 | 8 | var group_node = null 9 | var quest_rewards_node = null 10 | var group := "" 11 | var quest_rewards := {} 12 | var quest_steps = {} 13 | 14 | func setup(): 15 | super.setup() 16 | Node_Type = Type.QUEST_NODE 17 | focus_nodes.append(quest_name) 18 | focus_nodes.append(quest_details) 19 | quest_id = id 20 | 21 | func get_data(): 22 | node_data["quest_id"]= id 23 | node_data["quest_name"]= quest_name.text 24 | node_data["quest_details"]= quest_details.text 25 | node_data["first_step"]= next_id 26 | node_data["quest_steps"] = quest_steps 27 | node_data["completed"]= false 28 | node_data["failed"]= false 29 | node_data["group"]= group 30 | node_data["meta_data"]= get_meta_data() 31 | node_data["quest_rewards"]= quest_rewards 32 | super.get_data() 33 | return node_data 34 | 35 | func set_data(data): 36 | super.set_data(data) 37 | id = data["quest_id"] 38 | quest_id = id 39 | quest_name.text = data.quest_name 40 | quest_details.text = data.quest_details 41 | group = data["group"] 42 | 43 | 44 | func update_group_data(): 45 | group = "" 46 | if is_instance_valid(group_node): 47 | group = group_node.get_data()["group"] 48 | 49 | 50 | func update_quest_rewards(): 51 | if is_instance_valid(quest_rewards_node): 52 | quest_rewards = quest_rewards_node.get_data()["rewards"] 53 | else: 54 | quest_rewards = {} 55 | 56 | func clear_group(): 57 | group = "" 58 | group_node = null 59 | func clear_rewards(): 60 | quest_rewards = {} 61 | quest_rewards_node = null 62 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Updater.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends Button 3 | const GIT_REPO = "https://github.com/Chevifier/QuestManager/releases/latest" 4 | const CONFIG_PATH = "res://addons/quest_manager/plugin.cfg" 5 | const TEST_IMAGE = "https://github.com/Chevifier/QuestManager/blob/main/documentation/QuestManager.jpg?raw=true" 6 | @onready var http_request : HTTPRequest = $HTTPRequest 7 | @onready var cfg = ConfigFile.new() 8 | 9 | func _ready(): 10 | cfg.load(CONFIG_PATH) 11 | var error = http_request.request(GIT_REPO) 12 | if error != OK: 13 | push_error("An error occurred in the HTTP request.") 14 | return 15 | 16 | func _on_http_request_request_completed(result, response_code, headers, body): 17 | if result != HTTPRequest.RESULT_SUCCESS: 18 | print("Error Checking for updates") 19 | return 20 | # Parse the version number from the remote config file 21 | var response = body.get_string_from_utf8() 22 | var regex = RegEx.create_from_string("/Chevifier/QuestManager/releases/tag/v(?\\d+\\.\\d+\\.\\d+)") 23 | var found = regex.search(response) 24 | 25 | if not found: return 26 | var new_version = found.strings[found.names.get("version")] 27 | var current_version = cfg.get_value("plugin","version") 28 | if version_number(current_version) < version_number(new_version): 29 | text = new_version 30 | add_theme_color_override("font_color",Color.GREEN) 31 | else: 32 | text = current_version 33 | add_theme_color_override("font_color",Color.WHITE) 34 | 35 | func version_number(version:String): 36 | var numsplit = version.split(".") 37 | return numsplit[0].to_int() * 1000 + numsplit[1].to_int() * 100 + numsplit[2].to_int()*10 38 | 39 | func _on_pressed(): 40 | OS.shell_open("https://github.com/Chevifier/QuestManager/releases/") 41 | -------------------------------------------------------------------------------- /addons/quest_manager/QMStepTracker.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | class_name QMStepTracker extends Node 3 | #for use as child on area nodes 4 | #call _update_step 5 | #get step id from QuestManager Quests Window 6 | enum Step_Type { 7 | ACTION_STEP, 8 | INCREMENTAL_STEP, 9 | ITEM_STEP, 10 | BRANCH, 11 | TIMER_STEP, 12 | CALLABLE, 13 | END 14 | 15 | } 16 | 17 | @export var step_type :Step_Type = 0: 18 | set(v): 19 | step_type = v 20 | notify_property_list_changed() 21 | 22 | @export var quest_id = "12345abc" 23 | @export var step_id = "123456abc" 24 | 25 | var item_name = "" 26 | var quantity = 1 27 | var is_branching = false 28 | 29 | 30 | func update_step(): 31 | if step_type == Step_Type.BRANCH: 32 | QuestManager.set_branch_step(quest_id,is_branching) 33 | QuestManager.progress_quest(quest_id,step_id,item_name,quantity) 34 | 35 | func _get_property_list() -> Array: 36 | var quest_id_usage = PROPERTY_USAGE_NO_EDITOR 37 | var item_name_usage = PROPERTY_USAGE_NO_EDITOR 38 | var quantity_usage = PROPERTY_USAGE_NO_EDITOR 39 | var is_branching_usage = PROPERTY_USAGE_NO_EDITOR 40 | if step_type == Step_Type.ITEM_STEP: 41 | item_name_usage = PROPERTY_USAGE_DEFAULT 42 | if step_type == Step_Type.INCREMENTAL_STEP: 43 | quantity_usage = PROPERTY_USAGE_DEFAULT 44 | if step_type == Step_Type.BRANCH: 45 | is_branching_usage = PROPERTY_USAGE_DEFAULT 46 | var properties = [] 47 | properties.append({ 48 | "name": "item_name", 49 | "type": TYPE_STRING, 50 | "usage": item_name_usage 51 | }) 52 | properties.append({ 53 | "name": "quantity", 54 | "type": TYPE_INT, 55 | "usage": quantity_usage 56 | }) 57 | properties.append({ 58 | "name": "is_branching", 59 | "type": TYPE_BOOL, 60 | "usage": is_branching_usage 61 | }) 62 | return properties 63 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/RecentsList.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends Node 3 | 4 | @onready var recents_btn = %recent_btn_template 5 | @onready var recents_box = %recents_box 6 | @onready var save_system = %QuestManagerSaveSystem 7 | var recents = [] 8 | 9 | func _ready(): 10 | reload_recents() 11 | 12 | func reload_recents(): 13 | for i in recents_box.get_children(): 14 | i.queue_free() 15 | recents = ProjectSettings.get_setting("recent_projects",[]) 16 | for path in recents: 17 | var btn = recents_btn.duplicate() 18 | recents_box.add_child(btn) 19 | btn.set_project_path(path) 20 | btn.show() 21 | btn.pressed.connect(project_selected.bind(btn.project_path)) 22 | 23 | func project_selected(path): 24 | var exist = save_system.load_data(path) 25 | if exist != null and exist == false: 26 | print("File: %s invalid or deleted. Removing..." % path) 27 | recents.erase(path) 28 | ProjectSettings.set_setting("recent_projects",recents) 29 | ProjectSettings.save() 30 | reload_recents() 31 | 32 | func add_recent(path): 33 | if recents.has(path) == false: 34 | #if path doesnt exist add it to front(most recent) 35 | recents.push_front(path) 36 | else: 37 | #if path exist move it to front(most recent) 38 | recents.erase(path) 39 | recents.push_front(path) 40 | ProjectSettings.set_setting("recent_projects",recents) 41 | ProjectSettings.save() 42 | reload_recents() 43 | 44 | func _on_clear_recents_pressed(): 45 | #clear config as well 46 | for i in recents_box.get_children(): 47 | i.queue_free() 48 | recents = [] 49 | ProjectSettings.set_setting("recent_projects",recents) 50 | ProjectSettings.save() 51 | 52 | func _on_quest_manager_save_system_data_saved(path): 53 | add_recent(path) 54 | 55 | func _on_quest_manager_save_system_data_loaded(path): 56 | add_recent(path) 57 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/items_step.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends EditorNode 3 | 4 | @onready var details = %details 5 | @onready var list:ItemList = %list 6 | @onready var item_to_add = %ItemEdit 7 | 8 | var item_list = [] 9 | var last_selected = -1 10 | func setup(): 11 | super.setup() 12 | Node_Type = Type.ITEM_STEP_NODE 13 | focus_nodes.append(details) 14 | focus_nodes.append(list) 15 | focus_nodes.append(item_to_add) 16 | 17 | #Returns All added items for processing 18 | func get_data(): 19 | node_data["step_type"] = "items_step" 20 | node_data["details"]= details.text 21 | node_data["item_list"]= item_list 22 | node_data["completed"] = false 23 | node_data["meta_data"]= get_meta_data() 24 | super.get_data() 25 | return node_data 26 | 27 | func get_items(): 28 | return item_list 29 | 30 | func set_data(data): 31 | super.set_data(data) 32 | details.text = data.details 33 | item_list = data.item_list 34 | for item in data.item_list: 35 | list.add_item(item.name) 36 | 37 | func _on_add_pressed(): 38 | if item_to_add.text == "": 39 | print("Add item name") 40 | return 41 | for item in item_list: 42 | if item_to_add.text == item["name"]: 43 | print("Item already added") 44 | return 45 | 46 | list.add_item(item_to_add.text) 47 | item_list.append({ 48 | "name" : item_to_add.text, 49 | "completed" : false 50 | }) 51 | item_to_add.clear() 52 | print(item_list) 53 | 54 | func _on_remove_pressed(): 55 | var item_name = list.get_item_text(last_selected) 56 | for i in range(item_list.size()): 57 | var item = item_list[i] 58 | if item.name == item_name: 59 | item_list.remove_at(i) 60 | break 61 | list.remove_item(last_selected) 62 | last_selected = -1 63 | print(item_list) 64 | 65 | func _on_list_item_selected(index): 66 | last_selected = index 67 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleTwo/UI.gd: -------------------------------------------------------------------------------- 1 | extends CanvasLayer 2 | 3 | enum { 4 | RUNNING, 5 | DIALOGUE 6 | } 7 | var state = RUNNING 8 | var exitpressed = false 9 | func _ready(): 10 | QuestManager.new_quest_added.connect(new_quest) 11 | QuestManager.step_updated.connect(update_ui) 12 | QuestManager.step_complete.connect(update_ui) 13 | QuestManager.next_step.connect(update_ui) 14 | QuestManager.quest_completed.connect(quest_complete) 15 | func new_quest(n): 16 | update_ui(QuestManager.get_current_step(n)) 17 | 18 | 19 | func _process(delta): 20 | %Apples.text = "Apples: %02d" % %Player.apples 21 | match state: 22 | RUNNING: 23 | return 24 | DIALOGUE: 25 | process_input() 26 | 27 | func update_ui(step): 28 | for c in %items.get_children(): 29 | c.free() 30 | match step.step_type: 31 | QuestManager.ACTION_STEP: 32 | %discription.text = step.details 33 | QuestManager.INCREMENTAL_STEP: 34 | var text = "%s %02d/%02d" % [step.details, step.collected, step.required] 35 | %discription.text = text 36 | QuestManager.ITEMS_STEP: 37 | %discription.text = step.details 38 | for item in step.item_list: 39 | var i = %item.duplicate() 40 | %items.add_child(i) 41 | i.text = item.name 42 | i.button_pressed = item.complete 43 | i.show() 44 | 45 | func quest_complete(quest): 46 | for c in %items.get_children(): 47 | c.free() 48 | %discription.text = "QUEST COMPLETE" 49 | 50 | func process_input(): 51 | if Input.is_action_just_pressed("ui_accept")and exitpressed == false: 52 | exitpressed = true 53 | return 54 | if Input.is_action_just_pressed("ui_accept"): 55 | exitpressed = false 56 | hide_dialogue() 57 | 58 | 59 | func set_text(text): 60 | $Panel/Dialogue.text = text 61 | $Panel.show() 62 | get_tree().paused = true 63 | state = DIALOGUE 64 | 65 | func hide_dialogue(): 66 | $Panel.hide() 67 | get_tree().paused = false 68 | state = RUNNING 69 | -------------------------------------------------------------------------------- /.godot/editor/project_metadata.cfg: -------------------------------------------------------------------------------- 1 | [editor_metadata] 2 | 3 | executable_path="/home/chevon/Programs/Godot4/Godot_v4.2.2-stable_linux.x86_64" 4 | 5 | [debug_options] 6 | 7 | run_live_debug=true 8 | run_reload_scripts=true 9 | 10 | [recent_files] 11 | 12 | scenes=["res://addons/quest_manager/Examples/ExampleTwo/ExampleTwoScene.tscn", "res://addons/quest_manager/Examples/ExampleOne/SpaceArcade.tscn", "res://addons/quest_manager/Editor/EditorWindow.tscn", "res://addons/quest_manager/Editor/Nodes/Timer_Step.tscn", "res://addons/quest_manager/Editor/Nodes/items_step.tscn", "res://addons/quest_manager/Editor/Nodes/Callable_Step.tscn", "res://addons/quest_manager/Editor/Nodes/Branch.tscn", "res://addons/quest_manager/Editor/Nodes/IncrementalStep.tscn", "res://addons/quest_manager/Editor/Nodes/Step.tscn", "res://addons/quest_manager/Examples/ExampleTwo/Apple.tscn"] 13 | scripts=["res://addons/quest_manager/Examples/ExampleTwo/ExampleTwo.gd", "res://addons/quest_manager/Editor/Nodes/Branch.gd", "res://addons/quest_manager/Editor/Nodes/items_step.gd", "res://addons/quest_manager/Examples/ExampleOne/UI.gd", "res://addons/quest_manager/Examples/ExampleOne/Player.gd", "res://addons/quest_manager/Editor/EditorWindow.gd", "res://addons/quest_manager/Editor/Nodes/Timer_Step.gd", "res://addons/quest_manager/Editor/Nodes/Meta_data.gd", "res://addons/quest_manager/Editor/Nodes/EditorNode.gd", "res://addons/quest_manager/Editor/Nodes/Callable_Step.gd"] 14 | 15 | [linked_properties] 16 | 17 | Control:scale=true 18 | GraphNode:scale=true 19 | LineEdit:scale=true 20 | Node2D:scale=true 21 | Area2D:scale=true 22 | Label:scale=true 23 | CollisionShape2D:scale=true 24 | StaticBody2D:scale=true 25 | Marker2D:scale=true 26 | CanvasLayer:scale=true 27 | RichTextLabel:scale=true 28 | Sprite2D:scale=true 29 | Node3D:scale=true 30 | Area3D:scale=true 31 | 32 | [dialog_bounds] 33 | 34 | project_settings=Rect2(510, 190, 900, 700) 35 | create_new_node=Rect2(510, 190, 900, 700) 36 | 37 | [script_setup] 38 | 39 | last_selected_language="GDScript" 40 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/Timer_Step.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends EditorNode 3 | 4 | @onready var details = %details 5 | @onready var minutes_node = %minutes 6 | @onready var seconds_node = %seconds 7 | @onready var count_dir = %count_dir 8 | @onready var fail_toggle = %fail_on_timeout 9 | func setup(): 10 | super.setup() 11 | Node_Type = Type.TIMER_NODE 12 | focus_nodes.append(details) 13 | 14 | func get_data(): 15 | node_data["step_type"]= "timer_step" 16 | node_data["details"]= details.text 17 | node_data["total_time"]= get_time_in_seconds() 18 | node_data["time"]= get_time(count_dir.button_pressed) 19 | node_data["is_count_down"]= count_dir.button_pressed 20 | node_data["fail_on_timeout"]= fail_toggle.button_pressed 21 | node_data["time_minutes"]= minutes_node.value 22 | node_data["time_seconds"]= seconds_node.value 23 | node_data["meta_data"]= get_meta_data() 24 | node_data["completed"] = false 25 | 26 | super.get_data() 27 | return node_data 28 | 29 | func set_data(data): 30 | super.set_data(data) 31 | details.text = data["details"] 32 | minutes_node.value = data["time_minutes"] 33 | seconds_node.value = data["time_seconds"] 34 | count_dir.button_pressed = data["is_count_down"] 35 | fail_toggle.button_pressed = data["fail_on_timeout"] 36 | 37 | func _on_details_gui_input(event): 38 | if event is InputEventKey: 39 | if event.keycode == KEY_ENTER: 40 | details.release_focus() 41 | func get_time(dir): 42 | if dir: 43 | return get_time_in_seconds() 44 | else: 45 | return 0 46 | func get_time_in_seconds(): 47 | var seconds = 0 48 | for i in minutes_node.value: 49 | seconds += 60 50 | seconds += seconds_node.value 51 | return seconds 52 | 53 | func _on_count_down_toggled(button_pressed): 54 | if button_pressed: 55 | count_dir.text = "Timer" 56 | else: 57 | count_dir.text = "Stop Watch" 58 | 59 | func _on_fail_on_timeout_toggled(button_pressed): 60 | if button_pressed: 61 | fail_toggle.text = "Fail On Timeout" 62 | else: 63 | fail_toggle.text = "Complete On Timeout" 64 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/Step.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://b7vnivpp87vho"] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/Editor/Nodes/Step.gd" id="1_sv62o"] 4 | 5 | [node name="96bdc61386" type="GraphNode"] 6 | custom_minimum_size = Vector2(150, 150) 7 | offset_right = 150.0 8 | offset_bottom = 150.0 9 | size_flags_vertical = 4 10 | tooltip_text = "Action Quest Step requires an action to be completed to advance" 11 | resizable = true 12 | title = "Action Step" 13 | slot/0/left_enabled = true 14 | slot/0/left_type = 0 15 | slot/0/left_color = Color(0, 1, 0, 1) 16 | slot/0/left_icon = null 17 | slot/0/right_enabled = true 18 | slot/0/right_type = 0 19 | slot/0/right_color = Color(0, 1, 0, 1) 20 | slot/0/right_icon = null 21 | slot/0/draw_stylebox = true 22 | slot/1/left_enabled = true 23 | slot/1/left_type = 2 24 | slot/1/left_color = Color(0, 0, 1, 1) 25 | slot/1/left_icon = null 26 | slot/1/right_enabled = false 27 | slot/1/right_type = 0 28 | slot/1/right_color = Color(1, 1, 1, 1) 29 | slot/1/right_icon = null 30 | slot/1/draw_stylebox = true 31 | slot/2/left_enabled = false 32 | slot/2/left_type = 0 33 | slot/2/left_color = Color(1, 1, 1, 1) 34 | slot/2/left_icon = null 35 | slot/2/right_enabled = false 36 | slot/2/right_type = 0 37 | slot/2/right_color = Color(1, 1, 1, 1) 38 | slot/2/right_icon = null 39 | slot/2/draw_stylebox = true 40 | script = ExtResource("1_sv62o") 41 | 42 | [node name="details" type="TextEdit" parent="."] 43 | unique_name_in_owner = true 44 | layout_mode = 2 45 | size_flags_horizontal = 3 46 | size_flags_vertical = 3 47 | placeholder_text = "Step details" 48 | context_menu_enabled = false 49 | caret_blink = true 50 | caret_blink_interval = 0.5 51 | 52 | [node name="meta_data" type="Label" parent="."] 53 | layout_mode = 2 54 | size_flags_vertical = 3 55 | text = "Meta Data" 56 | 57 | [node name="id_lbl" type="LineEdit" parent="."] 58 | layout_mode = 2 59 | size_flags_vertical = 6 60 | text = "96bdc61386" 61 | editable = false 62 | 63 | [connection signal="gui_input" from="details" to="." method="_on_details_gui_input"] 64 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/Callable_Step.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://b2virj1vctulb"] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/Editor/Nodes/Callable_Step.gd" id="1_mxhm0"] 4 | 5 | [node name="c86bb5d76d" type="GraphNode"] 6 | custom_minimum_size = Vector2(150, 100) 7 | offset_right = 267.0 8 | offset_bottom = 113.0 9 | size_flags_vertical = 4 10 | tooltip_text = "Callable step calls a function from an Auto Loaded script and then advances to next step" 11 | resizable = true 12 | title = "Callable Step" 13 | slot/0/left_enabled = true 14 | slot/0/left_type = 0 15 | slot/0/left_color = Color(0, 1, 0, 1) 16 | slot/0/left_icon = null 17 | slot/0/right_enabled = true 18 | slot/0/right_type = 0 19 | slot/0/right_color = Color(0, 1, 0, 1) 20 | slot/0/right_icon = null 21 | slot/0/draw_stylebox = true 22 | slot/1/left_enabled = true 23 | slot/1/left_type = 2 24 | slot/1/left_color = Color(0, 0, 1, 1) 25 | slot/1/left_icon = null 26 | slot/1/right_enabled = false 27 | slot/1/right_type = 0 28 | slot/1/right_color = Color(1, 1, 1, 1) 29 | slot/1/right_icon = null 30 | slot/1/draw_stylebox = true 31 | slot/2/left_enabled = false 32 | slot/2/left_type = 0 33 | slot/2/left_color = Color(1, 1, 1, 1) 34 | slot/2/left_icon = null 35 | slot/2/right_enabled = false 36 | slot/2/right_type = 0 37 | slot/2/right_color = Color(1, 1, 1, 1) 38 | slot/2/right_icon = null 39 | slot/2/draw_stylebox = true 40 | script = ExtResource("1_mxhm0") 41 | 42 | [node name="callable" type="LineEdit" parent="."] 43 | unique_name_in_owner = true 44 | layout_mode = 2 45 | size_flags_horizontal = 3 46 | size_flags_vertical = 3 47 | placeholder_text = "callable function" 48 | context_menu_enabled = false 49 | caret_blink = true 50 | caret_blink_interval = 0.5 51 | 52 | [node name="meta_data" type="Label" parent="."] 53 | layout_mode = 2 54 | size_flags_vertical = 3 55 | text = "params 56 | " 57 | 58 | [node name="id_lbl" type="LineEdit" parent="."] 59 | layout_mode = 2 60 | size_flags_vertical = 6 61 | text = "c86bb5d76d" 62 | editable = false 63 | 64 | [connection signal="gui_input" from="callable" to="." method="_on_details_gui_input"] 65 | -------------------------------------------------------------------------------- /.godot/editor/editor_layout.cfg: -------------------------------------------------------------------------------- 1 | [docks] 2 | 3 | dock_1_selected_tab_idx=0 4 | dock_2_selected_tab_idx=0 5 | dock_3_selected_tab_idx=0 6 | dock_4_selected_tab_idx=0 7 | dock_5_selected_tab_idx=0 8 | dock_6_selected_tab_idx=0 9 | dock_7_selected_tab_idx=0 10 | dock_8_selected_tab_idx=0 11 | dock_floating={} 12 | dock_split_2=0 13 | dock_split_3=0 14 | dock_hsplit_1=0 15 | dock_hsplit_2=270 16 | dock_hsplit_3=-570 17 | dock_hsplit_4=0 18 | dock_filesystem_split=0 19 | dock_filesystem_display_mode=0 20 | dock_filesystem_file_sort=0 21 | dock_filesystem_file_list_display_mode=1 22 | dock_filesystem_selected_paths=PackedStringArray("res://addons/quest_manager/Examples/ExampleTwo/ExampleTwoScene.tscn") 23 | dock_filesystem_uncollapsed_paths=PackedStringArray("Favorites", "res://", "res://addons/", "res://addons/quest_manager/", "res://addons/quest_manager/extras/", "res://addons/quest_manager/Examples/", "res://addons/quest_manager/Examples/ExampleTwo/") 24 | dock_3="Scene,Import" 25 | dock_4="FileSystem" 26 | dock_5="Inspector,Node,History" 27 | 28 | [EditorNode] 29 | 30 | open_scenes=PackedStringArray() 31 | current_scene="" 32 | center_split_offset=0 33 | selected_default_debugger_tab_idx=0 34 | selected_main_editor_idx=0 35 | selected_bottom_panel_item=0 36 | 37 | [ScriptEditor] 38 | 39 | open_scripts=["res://addons/quest_manager/Editor/Nodes/Branch.gd", "res://addons/quest_manager/Editor/Nodes/Callable_Step.gd", "res://addons/quest_manager/Editor/Nodes/EditorNode.gd", "res://addons/quest_manager/Editor/EditorWindow.gd", "res://addons/quest_manager/Examples/ExampleTwo/ExampleTwo.gd", "res://addons/quest_manager/Editor/Nodes/items_step.gd", "res://addons/quest_manager/Editor/Nodes/Meta_data.gd", "res://addons/quest_manager/Examples/ExampleOne/Player.gd", "res://addons/quest_manager/QuestManager.gd", "res://addons/quest_manager/Editor/Nodes/Timer_Step.gd", "res://addons/quest_manager/Examples/ExampleOne/UI.gd"] 40 | selected_script="res://addons/quest_manager/Examples/ExampleTwo/ExampleTwo.gd" 41 | open_help=[] 42 | script_split_offset=70 43 | list_split_offset=0 44 | 45 | [ShaderEditor] 46 | 47 | open_shaders=[] 48 | split_offset=0 49 | selected_shader="" 50 | -------------------------------------------------------------------------------- /addons/quest_manager/QuestResource.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | class_name QuestResource 3 | extends Resource 4 | #Data for quest Management 5 | @export var quest_data = {} #all data related to the quests 6 | @export var editor_data = {} #all data related to nodes 7 | 8 | func get_quest_by_name(quest_name:String) -> Dictionary: 9 | var return_quest = {} 10 | for quest in quest_data: 11 | if quest_data[quest]["quest_name"] == quest_name: 12 | return_quest = quest_data[quest].duplicate() 13 | break 14 | assert(!return_quest.is_empty(),"The Quest: %s was not found in loaded resource" % quest_name) 15 | return return_quest 16 | 17 | 18 | func get_quests(group:String="") -> Dictionary: 19 | var quests = {} 20 | if group == "": 21 | quests = quest_data.duplicate() 22 | else: 23 | for quest in quest_data: 24 | if quest.group == group: 25 | quests[quest.id] = quest.duplicate() 26 | return quests 27 | 28 | func get_quest_list() -> Dictionary: 29 | return {} 30 | 31 | func get_editor_data() -> Dictionary: 32 | return editor_data 33 | 34 | func sort_linked_list(steps): 35 | var start_id = null 36 | var next_ids = [] 37 | for step in steps: 38 | if step.has("next_id"): 39 | next_ids.append(step["next_id"]) 40 | 41 | # Find the start_id 42 | for step in steps: 43 | if not next_ids.has(step["id"]): 44 | start_id = step["id"] 45 | break 46 | 47 | # Construct the sorted list 48 | var sorted_steps = [] 49 | var current_id = start_id 50 | while current_id != null: 51 | var current_step = null 52 | for step in steps: 53 | if step["id"] == current_id: 54 | current_step = step 55 | break 56 | current_id = null 57 | if current_step: 58 | sorted_steps.append(current_step) 59 | # Update current_id to the next in the list, if it exists 60 | if current_step.has("next_id"): 61 | current_id = current_step.get("next_id") 62 | return sorted_steps 63 | 64 | func get_quest_steps_sorted(quest_name:String) -> Array: 65 | var steps = [] 66 | var quest = get_quest_by_name(quest_name) 67 | 68 | var steps_dic = quest.quest_steps 69 | for step in steps_dic: 70 | steps.append(steps_dic[step]) 71 | steps = sort_linked_list(steps) 72 | return steps 73 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleTwo/Player.gd: -------------------------------------------------------------------------------- 1 | extends CharacterBody2D 2 | 3 | @export var move_speed = 200 4 | @onready var anim :AnimatedSprite2D = $Sprite 5 | @onready var interact_area = $Interact 6 | @export_category("Controls") 7 | @export var up := "ui_up" 8 | @export var down := "ui_down" 9 | @export var left := "ui_left" 10 | @export var right := "ui_right" 11 | @export var interact := "ui_accept" 12 | enum { 13 | IDLE, 14 | WALKING 15 | } 16 | var state = IDLE 17 | var apples = 0 18 | var has_pie = false 19 | func _physics_process(delta): 20 | var dir = Input.get_vector(left,right,up,down) 21 | velocity = move_speed * dir.normalized() 22 | if velocity.length() == 0.0: 23 | state = IDLE 24 | else: 25 | state = WALKING 26 | match state : 27 | IDLE: 28 | anim.play("idle") 29 | WALKING: 30 | if velocity.y > 1: 31 | anim.play("walk_down") 32 | elif velocity.y < -1: 33 | anim.play("walk_up") 34 | else: 35 | anim.play("walk_horizontal") 36 | 37 | if velocity.x < 0: 38 | anim.flip_h = true 39 | else: 40 | anim.flip_h = false 41 | 42 | move_and_slide() 43 | 44 | if Input.is_action_just_pressed(interact): 45 | talk() 46 | 47 | func talk(): 48 | var objects = interact_area.get_overlapping_bodies() 49 | var npc = null 50 | #get closest object 51 | var dis = 10000000 52 | for ob in objects: 53 | var d = ob.position.distance_to(position) 54 | if d < dis and ob.is_in_group("NPC"): 55 | npc = ob 56 | dis = d 57 | if ob.is_in_group("stove"): 58 | if apples >= 10: 59 | ob.interact() 60 | has_pie = true 61 | if npc == null: 62 | return 63 | 64 | 65 | if has_pie == false: 66 | get_parent().get_node("UI").set_text(npc.get_dialogue(0)) 67 | else: 68 | if npc.family_member == 0: 69 | QuestManager.progress_quest_by_name(QuestManager.active_quest,"Father") 70 | elif npc.family_member == 2: 71 | QuestManager.progress_quest_by_name(QuestManager.active_quest,"Sister") 72 | elif npc.family_member == 1: 73 | QuestManager.progress_quest_by_name(QuestManager.active_quest,"Mother") 74 | get_parent().get_node("UI").set_text(npc.get_dialogue(1)) 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleOne/UI.gd: -------------------------------------------------------------------------------- 1 | extends CanvasLayer 2 | 3 | @export var quest_name = "" 4 | @export var quest_resource:QuestResource 5 | @onready var quest_info_label = $Do 6 | @onready var life = $HP 7 | enum { 8 | START, 9 | RUNNING, 10 | LOSE, 11 | WIN 12 | } 13 | 14 | var state = START 15 | func _ready(): 16 | state = START 17 | get_tree().paused = true 18 | #Connect quest manager needed signals 19 | QuestManager.step_updated.connect(update_ui) 20 | QuestManager.step_complete.connect(update_ui) 21 | QuestManager.next_step.connect(update_ui) 22 | QuestManager.quest_completed.connect(quest_complete) 23 | QuestManager.quest_failed.connect(quest_failed) 24 | #add the quest to player quests 25 | QuestManager.add_quest(quest_name,quest_resource) 26 | $Quest.text = QuestManager.get_player_quest(quest_name).quest_details 27 | #scale quest label to initailly be 0 for tweening 28 | $Quest.scale.y = 0 29 | #Show quest info and start game after tween 30 | var t = create_tween().chain() 31 | t.tween_property($Quest,"scale:y",1,0.5) 32 | t.tween_property($Quest,"scale:y",0,0.5).set_delay(2) 33 | t.tween_callback(start) 34 | 35 | func start(): 36 | state = RUNNING 37 | get_tree().paused = false 38 | $Quest.hide() 39 | 40 | func quest_complete(quest): 41 | state = WIN 42 | $Complete.text += "\n Money " + str(quest.quest_rewards.money) 43 | $Complete.show() 44 | 45 | get_tree().paused = true 46 | 47 | func quest_failed(n): 48 | state = LOSE 49 | $GameOver.show() 50 | get_tree().paused = true 51 | 52 | func update_ui(step): 53 | match step.step_type: 54 | QuestManager.INCREMENTAL_STEP: 55 | var text = "%s %02d/%02d" % [step.details,step.collected,step.required] 56 | quest_info_label.text = text 57 | QuestManager.TIMER_STEP: 58 | var text = "%s %03d" % [step.details,step.time] 59 | quest_info_label.text = text 60 | func _process(delta): 61 | if %Player.hp <= 0: 62 | QuestManager.fail_quest(quest_name) 63 | match state: 64 | RUNNING: 65 | life.text = "LIVES %02d/03" % %Player.hp 66 | 67 | 68 | func _on_retry_pressed(): 69 | QuestManager.reset_quest(quest_name) 70 | get_tree().reload_current_scene() 71 | 72 | 73 | func _on_exit_pressed(): 74 | get_tree().quit() 75 | -------------------------------------------------------------------------------- /addons/quest_manager/plugin.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends EditorPlugin 3 | 4 | 5 | var editor_window_scene = preload("res://addons/quest_manager/Editor/EditorWindow.tscn") 6 | var quest_manager 7 | 8 | var quest_importer 9 | 10 | var EditorWindow 11 | 12 | func _enter_tree(): 13 | add_autoload_singleton("QuestManager", "res://addons/quest_manager/QuestManager.gd") 14 | EditorWindow = editor_window_scene.instantiate() 15 | get_editor_interface().get_editor_main_screen().add_child(EditorWindow) 16 | quest_importer = preload("res://addons/quest_manager/ImportPlugin.gd").new() 17 | add_import_plugin(quest_importer) 18 | _make_visible(false) 19 | EditorWindow.editor_plugin = self 20 | 21 | func _edit(object): 22 | if is_instance_valid(EditorWindow) and is_instance_valid(object): 23 | EditorWindow.get_node("QuestManagerSaveSystem").load_data(object.resource_path) 24 | 25 | func _handles(object): 26 | return object is QuestResource 27 | 28 | func _has_main_screen(): 29 | return true 30 | 31 | func _input(event: InputEvent) -> void: 32 | if not EditorWindow.visible: 33 | return 34 | if event is InputEventKey and event.is_pressed(): 35 | match event.as_text(): 36 | "Ctrl+S": 37 | EditorWindow._on_save_pressed(0) 38 | 39 | func _get_plugin_name(): 40 | return "Quest Manager" 41 | 42 | func _make_visible(visible): 43 | if EditorWindow: 44 | EditorWindow.visible = visible 45 | 46 | func _get_plugin_icon(): 47 | return get_icon() 48 | 49 | func get_icon(scale: float = 1.0) -> Texture2D: 50 | var size: Vector2 = Vector2(16, 16) * get_editor_interface().get_editor_scale() * scale 51 | #var base_color: Color = get_editor_interface().get_editor_main_screen().get_theme_color("base_color", "Editor") 52 | #var light_theme = true if base_color.v > 0.5 else false 53 | var base_icon: Texture2D = load("res://addons/quest_manager/assets/icons/icon.png") 54 | var image: Image = base_icon.get_image() 55 | 56 | image.resize(size.x, size.y, Image.INTERPOLATE_TRILINEAR) 57 | return ImageTexture.create_from_image(image) 58 | 59 | func _exit_tree(): 60 | if EditorWindow: 61 | EditorWindow.queue_free() 62 | remove_autoload_singleton("QuestManager") 63 | remove_import_plugin(quest_importer) 64 | quest_importer = null 65 | -------------------------------------------------------------------------------- /.godot/global_script_class_cache.cfg: -------------------------------------------------------------------------------- 1 | list=Array[Dictionary]([{ 2 | "base": &"EditorNode", 3 | "class": &"Branch", 4 | "icon": "", 5 | "language": &"GDScript", 6 | "path": "res://addons/quest_manager/Editor/Nodes/Branch.gd" 7 | }, { 8 | "base": &"GraphNode", 9 | "class": &"EditorNode", 10 | "icon": "", 11 | "language": &"GDScript", 12 | "path": "res://addons/quest_manager/Editor/Nodes/EditorNode.gd" 13 | }, { 14 | "base": &"QMQuestStep", 15 | "class": &"QMBranchStep", 16 | "icon": "", 17 | "language": &"GDScript", 18 | "path": "res://addons/quest_manager/QuestClassInstances/QMBranchStep.gd" 19 | }, { 20 | "base": &"QMQuestStep", 21 | "class": &"QMCallableStep", 22 | "icon": "", 23 | "language": &"GDScript", 24 | "path": "res://addons/quest_manager/QuestClassInstances/QMCallableStep.gd" 25 | }, { 26 | "base": &"QMQuestStep", 27 | "class": &"QMEndStep", 28 | "icon": "", 29 | "language": &"GDScript", 30 | "path": "res://addons/quest_manager/QuestClassInstances/QMEndStep.gd" 31 | }, { 32 | "base": &"QMQuestStep", 33 | "class": &"QMIncrementalStep", 34 | "icon": "", 35 | "language": &"GDScript", 36 | "path": "res://addons/quest_manager/QuestClassInstances/QMIncrementalStep.gd" 37 | }, { 38 | "base": &"QMQuestStep", 39 | "class": &"QMItemsStep", 40 | "icon": "", 41 | "language": &"GDScript", 42 | "path": "res://addons/quest_manager/QuestClassInstances/QMItemsStep.gd" 43 | }, { 44 | "base": &"Node", 45 | "class": &"QMQuest", 46 | "icon": "", 47 | "language": &"GDScript", 48 | "path": "res://addons/quest_manager/QuestClassInstances/QMQuest.gd" 49 | }, { 50 | "base": &"Node", 51 | "class": &"QMQuestStep", 52 | "icon": "", 53 | "language": &"GDScript", 54 | "path": "res://addons/quest_manager/QuestClassInstances/QMQuestStep.gd" 55 | }, { 56 | "base": &"Node", 57 | "class": &"QMStepTracker", 58 | "icon": "", 59 | "language": &"GDScript", 60 | "path": "res://addons/quest_manager/QMStepTracker.gd" 61 | }, { 62 | "base": &"QMQuestStep", 63 | "class": &"QMTimerStep", 64 | "icon": "", 65 | "language": &"GDScript", 66 | "path": "res://addons/quest_manager/QuestClassInstances/QMTimerStep.gd" 67 | }, { 68 | "base": &"Node", 69 | "class": &"QuestManagerSaveFileManager", 70 | "icon": "", 71 | "language": &"GDScript", 72 | "path": "res://addons/quest_manager/Editor/SaveSystem.gd" 73 | }, { 74 | "base": &"Resource", 75 | "class": &"QuestResource", 76 | "icon": "", 77 | "language": &"GDScript", 78 | "path": "res://addons/quest_manager/QuestResource.gd" 79 | }, { 80 | "base": &"RefCounted", 81 | "class": &"ScriptQuest", 82 | "icon": "", 83 | "language": &"GDScript", 84 | "path": "res://addons/quest_manager/ScriptQuest.gd" 85 | }]) 86 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/Branch.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://c8o5anacgxamn"] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/Editor/Nodes/Branch.gd" id="1_5cc0i"] 4 | 5 | [node name="30c291fba6" type="GraphNode"] 6 | custom_minimum_size = Vector2(150, 250) 7 | offset_right = 197.0 8 | offset_bottom = 250.0 9 | size_flags_vertical = 4 10 | tooltip_text = "Branch Step goes to alternate step if branch contition is true. 11 | Use QuestManager.set_branching_step(quest_name) before calling progress quest on a branch step to enable. if called will be true by defaut otherwise false " 12 | resizable = true 13 | title = "Branch Step" 14 | slot/0/left_enabled = true 15 | slot/0/left_type = 0 16 | slot/0/left_color = Color(0, 1, 0, 1) 17 | slot/0/left_icon = null 18 | slot/0/right_enabled = true 19 | slot/0/right_type = 0 20 | slot/0/right_color = Color(0, 1, 0, 1) 21 | slot/0/right_icon = null 22 | slot/0/draw_stylebox = true 23 | slot/1/left_enabled = false 24 | slot/1/left_type = 2 25 | slot/1/left_color = Color(0, 0, 1, 1) 26 | slot/1/left_icon = null 27 | slot/1/right_enabled = true 28 | slot/1/right_type = 0 29 | slot/1/right_color = Color(0, 1, 0, 1) 30 | slot/1/right_icon = null 31 | slot/1/draw_stylebox = true 32 | slot/2/left_enabled = true 33 | slot/2/left_type = 2 34 | slot/2/left_color = Color(0, 0, 1, 1) 35 | slot/2/left_icon = null 36 | slot/2/right_enabled = false 37 | slot/2/right_type = 0 38 | slot/2/right_color = Color(0, 1, 0, 1) 39 | slot/2/right_icon = null 40 | slot/2/draw_stylebox = true 41 | slot/3/left_enabled = false 42 | slot/3/left_type = 0 43 | slot/3/left_color = Color(1, 1, 1, 1) 44 | slot/3/left_icon = null 45 | slot/3/right_enabled = false 46 | slot/3/right_type = 0 47 | slot/3/right_color = Color(1, 1, 1, 1) 48 | slot/3/right_icon = null 49 | slot/3/draw_stylebox = true 50 | script = ExtResource("1_5cc0i") 51 | 52 | [node name="details" type="TextEdit" parent="."] 53 | unique_name_in_owner = true 54 | custom_minimum_size = Vector2(0, 120) 55 | layout_mode = 2 56 | size_flags_horizontal = 3 57 | size_flags_vertical = 3 58 | placeholder_text = "Details" 59 | context_menu_enabled = false 60 | caret_blink = true 61 | caret_blink_interval = 0.5 62 | 63 | [node name="Branch" type="Label" parent="."] 64 | unique_name_in_owner = true 65 | layout_mode = 2 66 | text = "Branch" 67 | 68 | [node name="meta_data" type="Label" parent="."] 69 | layout_mode = 2 70 | size_flags_vertical = 3 71 | text = "Meta Data" 72 | 73 | [node name="id_lbl" type="LineEdit" parent="."] 74 | layout_mode = 2 75 | size_flags_vertical = 6 76 | text = "30c291fba6" 77 | editable = false 78 | 79 | [connection signal="gui_input" from="details" to="." method="_on_details_gui_input"] 80 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/SaveSystem.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | class_name QuestManagerSaveFileManager 3 | extends Node 4 | signal data_saved(file_path:String) 5 | signal data_loaded(file_path:String) 6 | var current_file_path = "" 7 | @onready var Editor = get_parent() 8 | 9 | func save_data(file_path): 10 | var Save = FileAccess.open(file_path,FileAccess.WRITE) 11 | Save.store_var(Editor.get_quests_data()) 12 | Save.store_var(Editor.get_editor_data()) 13 | current_file_path = file_path 14 | Save.close() #Fixes reimport issue 15 | 16 | if Editor.quest_name_duplicate == true: 17 | %Quest_Name_Warning.popup_centered() 18 | data_saved.emit(file_path) 19 | print("Quest Resource File saved: %s" % file_path) 20 | EditorInterface.get_resource_filesystem().scan() 21 | 22 | func load_data(file_path): 23 | if FileAccess.file_exists(file_path) == false: 24 | return false 25 | var quest_res = ResourceLoader.load(file_path) 26 | current_file_path = file_path 27 | #clear the current nodes in the graph 28 | Editor.clear_graph() 29 | #load new node and set data from resource 30 | 31 | for i in quest_res.editor_data: 32 | var node 33 | #skip connection list until all node are loaded 34 | if i == "connections_list": 35 | continue 36 | 37 | match quest_res.editor_data[i].type: 38 | EditorNode.Type.QUEST_NODE: 39 | node = Editor.quest_node.instantiate() 40 | EditorNode.Type.STEP_NODE: 41 | node = Editor.step.instantiate() 42 | EditorNode.Type.INCREMENTAL_NODE: 43 | node = Editor.inc_step.instantiate() 44 | EditorNode.Type.ITEM_STEP_NODE: 45 | node = Editor.item_step.instantiate() 46 | EditorNode.Type.META_DATA: 47 | node = Editor.meta_data.instantiate() 48 | EditorNode.Type.GROUP_NODE: 49 | node = Editor.group_tag.instantiate() 50 | EditorNode.Type.END_NODE: 51 | node = Editor.end.instantiate() 52 | EditorNode.Type.TIMER_NODE: 53 | node = Editor.timer_step.instantiate() 54 | EditorNode.Type.REWARDS_NODE: 55 | node = Editor.rewards.instantiate() 56 | EditorNode.Type.BRANCH_NODE: 57 | node = Editor.branch.instantiate() 58 | EditorNode.Type.FUNCTION_CALL_NODE: 59 | node = Editor.callable_node.instantiate() 60 | Editor.graph.add_child(node) 61 | node.set_data(quest_res.editor_data[i]) 62 | node.show_id(%show_ids.button_pressed) 63 | for con in quest_res.editor_data.connections_list: 64 | Editor._on_graph_edit_connection_request(con.from_node,con.from_port,con.to_node,con.to_port) 65 | data_loaded.emit(file_path) 66 | 67 | func create_new_file(file_path): 68 | Editor.clear_graph() 69 | current_file_path = file_path 70 | var Save = FileAccess.open(file_path,FileAccess.WRITE) 71 | Save.store_var(Editor.get_quests_data()) 72 | Save.store_var(Editor.get_editor_data()) 73 | Save.close() 74 | data_saved.emit(file_path) 75 | EditorInterface.get_resource_filesystem().scan() 76 | 77 | 78 | -------------------------------------------------------------------------------- /.godot/editor/EditorWindow.tscn-folding-071bb97aef45b28d99695aa44a1eecc5.cfg: -------------------------------------------------------------------------------- 1 | [folding] 2 | 3 | node_unfolds=[NodePath("."), PackedStringArray("Layout"), NodePath("MarginContainer"), PackedStringArray("Layout", "Theme Overrides"), NodePath("MarginContainer/hb"), PackedStringArray("Layout"), NodePath("MarginContainer/hb/side_panel"), PackedStringArray("Layout"), NodePath("MarginContainer/hb/side_panel/hb"), PackedStringArray("Layout"), NodePath("MarginContainer/hb/side_panel/hb/New"), PackedStringArray("Layout", "Tooltip"), NodePath("MarginContainer/hb/side_panel/hb/Load"), PackedStringArray("Layout", "Tooltip"), NodePath("MarginContainer/hb/side_panel/hb/Save"), PackedStringArray("Layout", "Tooltip"), NodePath("MarginContainer/hb/side_panel/HSeparator"), PackedStringArray("Layout", "Theme Overrides"), NodePath("MarginContainer/hb/side_panel/RecentsList"), PackedStringArray("Layout"), NodePath("MarginContainer/hb/side_panel/RecentsList/recent_btn_template"), PackedStringArray("Visibility", "Layout", "BiDi"), NodePath("MarginContainer/hb/side_panel/RecentsList/VBoxContainer"), PackedStringArray("Layout"), NodePath("MarginContainer/hb/side_panel/RecentsList/VBoxContainer/recentlabel"), PackedStringArray("Layout"), NodePath("MarginContainer/hb/side_panel/RecentsList/VBoxContainer/HSeparator"), PackedStringArray("Layout"), NodePath("MarginContainer/hb/side_panel/RecentsList/VBoxContainer/sc"), PackedStringArray("Layout"), NodePath("MarginContainer/hb/side_panel/RecentsList/VBoxContainer/sc/recents_box"), PackedStringArray("Layout"), NodePath("MarginContainer/hb/side_panel/RecentsList/VBoxContainer/HSeparator2"), PackedStringArray("Layout"), NodePath("MarginContainer/hb/side_panel/RecentsList/VBoxContainer/clear_recents"), PackedStringArray("Layout"), NodePath("MarginContainer/hb/Quest Panel"), PackedStringArray("Layout"), NodePath("MarginContainer/hb/Quest Panel/hb"), PackedStringArray("Layout"), NodePath("MarginContainer/hb/Quest Panel/hb/MenuButton"), PackedStringArray("Layout", "Tooltip"), NodePath("MarginContainer/hb/Quest Panel/hb/test"), PackedStringArray("Layout", "Tooltip"), NodePath("MarginContainer/hb/Quest Panel/hb/update"), PackedStringArray("Layout", "Theme Overrides", "BiDi"), NodePath("MarginContainer/hb/Quest Panel/hb/show_ids"), PackedStringArray("Layout"), NodePath("MarginContainer/hb/Quest Panel/HSeparator"), PackedStringArray("Layout", "Theme Overrides"), NodePath("MarginContainer/hb/Quest Panel/GraphEdit"), PackedStringArray("Layout", "Mouse", "Zoom"), NodePath("MarginContainer/hb/Quest Panel/right_mouse_list"), PackedStringArray("Flags"), NodePath("Quest_Warning"), PackedStringArray("Dialog"), NodePath("Quest_Name_Warning"), PackedStringArray("Dialog")] 4 | resource_unfolds=["res://addons/quest_manager/Editor/EditorWindow.tscn::ImageTexture_1max1", PackedStringArray(), "res://addons/quest_manager/Editor/EditorWindow.tscn::StyleBoxFlat_amscl", PackedStringArray()] 5 | nodes_folded=[] 6 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/IncrementalStep.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://bq6mr5rd3n8lp"] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/Editor/Nodes/IncrementalStep.gd" id="1_dipun"] 4 | 5 | [node name="8d52f805d4" type="GraphNode"] 6 | custom_minimum_size = Vector2(240, 150) 7 | offset_right = 240.0 8 | offset_bottom = 100.0 9 | size_flags_vertical = 3 10 | tooltip_text = "Incremental quest steps require 11 | a quantity of an item to be collected" 12 | resizable = true 13 | title = "Incremental Step" 14 | slot/0/left_enabled = true 15 | slot/0/left_type = 0 16 | slot/0/left_color = Color(0, 1, 0, 1) 17 | slot/0/left_icon = null 18 | slot/0/right_enabled = true 19 | slot/0/right_type = 0 20 | slot/0/right_color = Color(0, 1, 0, 1) 21 | slot/0/right_icon = null 22 | slot/0/draw_stylebox = true 23 | slot/1/left_enabled = true 24 | slot/1/left_type = 2 25 | slot/1/left_color = Color(0, 0, 1, 1) 26 | slot/1/left_icon = null 27 | slot/1/right_enabled = false 28 | slot/1/right_type = 0 29 | slot/1/right_color = Color(1, 1, 1, 1) 30 | slot/1/right_icon = null 31 | slot/1/draw_stylebox = true 32 | slot/2/left_enabled = false 33 | slot/2/left_type = 0 34 | slot/2/left_color = Color(1, 1, 1, 1) 35 | slot/2/left_icon = null 36 | slot/2/right_enabled = false 37 | slot/2/right_type = 0 38 | slot/2/right_color = Color(1, 1, 1, 1) 39 | slot/2/right_icon = null 40 | slot/2/draw_stylebox = true 41 | script = ExtResource("1_dipun") 42 | 43 | [node name="VBoxContainer" type="VBoxContainer" parent="."] 44 | layout_mode = 2 45 | size_flags_vertical = 3 46 | 47 | [node name="details" type="TextEdit" parent="VBoxContainer"] 48 | unique_name_in_owner = true 49 | custom_minimum_size = Vector2(0, 120) 50 | layout_mode = 2 51 | size_flags_horizontal = 3 52 | size_flags_vertical = 3 53 | placeholder_text = "Step details" 54 | wrap_mode = 1 55 | caret_blink = true 56 | caret_blink_interval = 0.5 57 | 58 | [node name="hb" type="HBoxContainer" parent="VBoxContainer"] 59 | layout_mode = 2 60 | alignment = 1 61 | 62 | [node name="item_name" type="LineEdit" parent="VBoxContainer/hb"] 63 | unique_name_in_owner = true 64 | layout_mode = 2 65 | size_flags_horizontal = 3 66 | size_flags_vertical = 4 67 | placeholder_text = "Item Name" 68 | 69 | [node name="quantity" type="SpinBox" parent="VBoxContainer/hb"] 70 | unique_name_in_owner = true 71 | layout_mode = 2 72 | size_flags_horizontal = 4 73 | size_flags_vertical = 4 74 | size_flags_stretch_ratio = 0.4 75 | allow_greater = true 76 | alignment = 1 77 | 78 | [node name="meta_data" type="Label" parent="."] 79 | layout_mode = 2 80 | size_flags_vertical = 3 81 | text = "Meta Data" 82 | 83 | [node name="id_lbl" type="LineEdit" parent="."] 84 | layout_mode = 2 85 | size_flags_vertical = 6 86 | text = "8d52f805d4" 87 | editable = false 88 | 89 | [connection signal="gui_input" from="VBoxContainer/details" to="." method="_on_details_gui_input"] 90 | -------------------------------------------------------------------------------- /documentation/Script_Quest_API.md: -------------------------------------------------------------------------------- 1 | ## ScriptQuest API 2 | 3 | Create an instance of this class to make a quest. adding steps using the various step function such as `add_action_step` or `add_incremental_step`. The quest steps are added in order of progression. 4 | When finished call the `finialize_quest` function. Then add this quest to the player's quest using the [QuestManager's](Quest_Manager_API.md) `add_scripted_quest` function. 5 | 6 | ### Variables 7 | `quest_data :Dictionary` - Dictionary containing all data for this quest. Accessing directly not recommended. 8 | 9 | `last_added_id :String` - id tracker for last added step. Used to set a step's `next_id`. Accessing directly not recommended. 10 | 11 | ### Functions 12 | 13 | #### `_init(quest_name:String,quest_details :String= "") -> void` 14 | 15 | Class initializer when `ScriptQuest.new()` is called. Requires the name of the quest and optionally its details/discription. 16 | 17 | #### `set_quest_details(details:String) -> void` 18 | 19 | Set or change the details of a quest. 20 | 21 | #### `add_action_step(step_details:String,step_meta_data:Dictionary={}) -> void` 22 | 23 | Add an `action_step` to the quest passing its details. Optionally pass meta_data. 24 | 25 | #### `add_incremental_step(step_details:String, item_name:String, required:int,step_meta_data:Dictionary={}) -> void` 26 | 27 | Adds an `incremental_step` to the quest passing its details item name and the amount required.Optionally pass meta_data. 28 | 29 | #### `add_items_step(step_details:String, items:PackedStringArray,step_meta_data:Dictionary={}) -> void` 30 | 31 | Adds an `items_step` to the quest passing its details and a Array of strings of the items required. Optionally pass meta_data. 32 | 33 | #### `add_callable_step(function:String,params:Array = []) -> void` 34 | 35 | Adds an `callable_step` passing the function as a string to be called. For example `"QuestManager.testfunc()"`. Optionally pass an array of parameters to be passed to the calling function. 36 | 37 | #### `add_timer_step(step_details:String,time_in_seconds:int,is_count_down:bool = true,fail_on_timeout:bool=true,step_meta_data:Dictionary={}) -> void` 38 | 39 | Adds a `timer_step` passing its details and time in seconds. Optionally set if is_count_down and fail_on_timeout as well as meta_data. 40 | 41 | #### `set_rewards(rewards:Dictionary) -> void` 42 | Set quest rewards dictionary. 43 | 44 | #### `set_quest_meta_data(meta_data:Dictionary) -> void` 45 | Set quest meta_data dictionary. 46 | 47 | #### `add_quest_to_group(group:String) -> void` 48 | Adds this quest to specified group. 49 | 50 | #### `add_step(step_data:Dictionary) -> void` 51 | 52 | This is called automatically by each `add` function. adds the created step to the quest. 53 | 54 | #### `finalize_quest() -> void:` 55 | 56 | Finalizes the created quest after steps are added. 57 | Must call after adding all steps to quest. 58 | 59 | #### `get_random_id() -> String:` 60 | 61 | Returns unique id for quest and steps. -------------------------------------------------------------------------------- /addons/quest_manager/Editor/TestScene/AvailableQuests.gd: -------------------------------------------------------------------------------- 1 | extends Control 2 | 3 | @onready var Quest_list = %Quest_List 4 | 5 | @onready var quest_name_lbl = %Quest_Name 6 | 7 | @onready var quest_description = %Quest_Description 8 | @onready var quest_step_details = %QuestSteps 9 | @onready var quest_rewards_details = %Rewards 10 | 11 | var selected_quest :="" 12 | func _ready(): 13 | set_defaults() 14 | var quest_path = ProjectSettings.get_setting("quest_file_path","Error") 15 | print(quest_path) 16 | assert(quest_path != "Error","Path Not Set") 17 | if ResourceLoader.exists(quest_path): 18 | print("resource loaded") 19 | var quest:QuestResource = ResourceLoader.load(quest_path) 20 | QuestManager.load_quest_resource(quest) 21 | setup_available_quests(QuestManager.get_quest_list()) 22 | else: 23 | print("Quest File Not found") 24 | 25 | func setup_available_quests(quests): 26 | Quest_list.clear() 27 | for quest in quests: 28 | Quest_list.add_item(quests[quest].quest_name) 29 | 30 | func _on_quest_list_item_selected(index): 31 | selected_quest = Quest_list.get_item_text(index) 32 | if selected_quest == "-None-": 33 | return 34 | var quest = QuestManager.get_quest_from_resource(selected_quest) 35 | quest_name_lbl.text = quest.quest_name 36 | quest_description.text = quest.quest_details 37 | var steps = QuestManager.get_quest_steps_from_resource(selected_quest) 38 | var steps_string :String= "" 39 | var step_no = 1 40 | for step in steps: 41 | steps_string += "%d: %s \n" % [step_no,step.details] 42 | step_no +=1 43 | #TO-DO display branch steps list 44 | quest_step_details.text = steps_string 45 | 46 | var quest_rewards = QuestManager.get_quest_from_resource(selected_quest).quest_rewards 47 | var rewards_string: String = "" 48 | var reward_no = 1 49 | for reward in quest_rewards: 50 | rewards_string += str(reward_no) +". %s : %s" % [reward,quest_rewards[reward]] 51 | reward_no += 1 52 | if quest_rewards.is_empty(): 53 | rewards_string = "None" 54 | quest_rewards_details.text = rewards_string 55 | %accept_quest.disabled = false 56 | 57 | 58 | func _on_accept_quest_pressed(): 59 | if selected_quest == "": 60 | return 61 | QuestManager.add_quest(selected_quest) 62 | %accept_quest.disabled = true 63 | 64 | 65 | func set_defaults(): 66 | quest_name_lbl.text = "No Quest Select" 67 | quest_description.text = "No Quest selected" 68 | quest_step_details.text = "No Quest selected" 69 | 70 | 71 | func _on_quest_meta_data_pressed(): 72 | if selected_quest == "": 73 | return 74 | #Get the quest data from the resource because its not yet accepted 75 | var quest = QuestManager.get_quest_from_resource(selected_quest) 76 | if quest.is_empty(): 77 | return 78 | var quest_data = "Group: %s \nMeta Data \n" % quest.group 79 | var new_line = 0 80 | for data in quest.meta_data: 81 | if new_line%2 == 0: 82 | quest_data += "%s = %s, " % [data, quest.meta_data[data]] 83 | else: 84 | quest_data += "%s = %s \n" % [data, quest.meta_data[data]] 85 | new_line += 1 86 | 87 | %quest_data_label.text = quest_data 88 | %quest_data.popup_centered() 89 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/Quest.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://c3h2fldn3q6t6"] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/Editor/Nodes/Quest.gd" id="1_i7joj"] 4 | 5 | [node name="fa76506ad3" type="GraphNode"] 6 | custom_minimum_size = Vector2(200, 250) 7 | offset_right = 200.0 8 | offset_bottom = 250.0 9 | tooltip_text = "The Main Node for Creating a Quest 10 | Set Quest name and Information about the Quest" 11 | mouse_filter = 1 12 | position_offset = Vector2(80, 194) 13 | resizable = true 14 | title = "Quest" 15 | slot/0/left_enabled = false 16 | slot/0/left_type = 0 17 | slot/0/left_color = Color(1, 1, 1, 1) 18 | slot/0/left_icon = null 19 | slot/0/right_enabled = true 20 | slot/0/right_type = 0 21 | slot/0/right_color = Color(0, 1, 0, 1) 22 | slot/0/right_icon = null 23 | slot/0/draw_stylebox = true 24 | slot/1/left_enabled = false 25 | slot/1/left_type = 0 26 | slot/1/left_color = Color(1, 1, 1, 1) 27 | slot/1/left_icon = null 28 | slot/1/right_enabled = false 29 | slot/1/right_type = 0 30 | slot/1/right_color = Color(1, 1, 1, 1) 31 | slot/1/right_icon = null 32 | slot/1/draw_stylebox = true 33 | slot/2/left_enabled = true 34 | slot/2/left_type = 1 35 | slot/2/left_color = Color(1, 1, 1, 1) 36 | slot/2/left_icon = null 37 | slot/2/right_enabled = false 38 | slot/2/right_type = 0 39 | slot/2/right_color = Color(1, 1, 1, 1) 40 | slot/2/right_icon = null 41 | slot/2/draw_stylebox = true 42 | slot/3/left_enabled = true 43 | slot/3/left_type = 3 44 | slot/3/left_color = Color(1, 0.843137, 0, 1) 45 | slot/3/left_icon = null 46 | slot/3/right_enabled = false 47 | slot/3/right_type = 0 48 | slot/3/right_color = Color(1, 1, 1, 1) 49 | slot/3/right_icon = null 50 | slot/3/draw_stylebox = true 51 | slot/4/left_enabled = true 52 | slot/4/left_type = 2 53 | slot/4/left_color = Color(0, 0, 1, 1) 54 | slot/4/left_icon = null 55 | slot/4/right_enabled = false 56 | slot/4/right_type = 0 57 | slot/4/right_color = Color(1, 1, 1, 1) 58 | slot/4/right_icon = null 59 | slot/4/draw_stylebox = true 60 | slot/5/left_enabled = false 61 | slot/5/left_type = 0 62 | slot/5/left_color = Color(1, 1, 1, 1) 63 | slot/5/left_icon = null 64 | slot/5/right_enabled = false 65 | slot/5/right_type = 0 66 | slot/5/right_color = Color(1, 1, 1, 1) 67 | slot/5/right_icon = null 68 | slot/5/draw_stylebox = true 69 | script = ExtResource("1_i7joj") 70 | 71 | [node name="Quest_Name" type="LineEdit" parent="."] 72 | layout_mode = 2 73 | placeholder_text = "Quest Name" 74 | 75 | [node name="Quest_Details" type="TextEdit" parent="."] 76 | layout_mode = 2 77 | size_flags_vertical = 3 78 | mouse_filter = 1 79 | placeholder_text = "Quest Details" 80 | 81 | [node name="Group_Tag" type="Label" parent="."] 82 | layout_mode = 2 83 | size_flags_vertical = 3 84 | text = "Group" 85 | 86 | [node name="Quest_Rewards" type="Label" parent="."] 87 | layout_mode = 2 88 | size_flags_vertical = 3 89 | text = "Quest Rewards" 90 | 91 | [node name="Meta_Data" type="Label" parent="."] 92 | layout_mode = 2 93 | size_flags_vertical = 3 94 | text = "Meta Data" 95 | 96 | [node name="id_lbl" type="LineEdit" parent="."] 97 | layout_mode = 2 98 | size_flags_vertical = 6 99 | text = "fa76506ad3" 100 | editable = false 101 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/items_step.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://cbb2etfgwxtv0"] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/Editor/Nodes/items_step.gd" id="1_xb21r"] 4 | 5 | [node name="1a12c51ce6" type="GraphNode"] 6 | custom_minimum_size = Vector2(200, 350) 7 | offset_right = 200.0 8 | offset_bottom = 325.0 9 | tooltip_text = "Item Quest Steps are Similar to Action Quest Steps but requires multiple actions to be completed. 10 | Useful for Collecting unique items or completing unique tasks in one Step." 11 | resizable = true 12 | title = "Items Step" 13 | slot/0/left_enabled = true 14 | slot/0/left_type = 0 15 | slot/0/left_color = Color(0, 1, 0, 1) 16 | slot/0/left_icon = null 17 | slot/0/right_enabled = true 18 | slot/0/right_type = 0 19 | slot/0/right_color = Color(0, 1, 0, 1) 20 | slot/0/right_icon = null 21 | slot/0/draw_stylebox = true 22 | slot/1/left_enabled = true 23 | slot/1/left_type = 2 24 | slot/1/left_color = Color(0, 0, 1, 1) 25 | slot/1/left_icon = null 26 | slot/1/right_enabled = false 27 | slot/1/right_type = 0 28 | slot/1/right_color = Color(1, 1, 1, 1) 29 | slot/1/right_icon = null 30 | slot/1/draw_stylebox = true 31 | slot/2/left_enabled = false 32 | slot/2/left_type = 0 33 | slot/2/left_color = Color(1, 1, 1, 1) 34 | slot/2/left_icon = null 35 | slot/2/right_enabled = false 36 | slot/2/right_type = 0 37 | slot/2/right_color = Color(1, 1, 1, 1) 38 | slot/2/right_icon = null 39 | slot/2/draw_stylebox = true 40 | script = ExtResource("1_xb21r") 41 | 42 | [node name="ItemList" type="VBoxContainer" parent="."] 43 | layout_mode = 2 44 | size_flags_vertical = 3 45 | 46 | [node name="details" type="TextEdit" parent="ItemList"] 47 | unique_name_in_owner = true 48 | custom_minimum_size = Vector2(0, 120) 49 | layout_mode = 2 50 | size_flags_vertical = 3 51 | placeholder_text = "Step Details" 52 | 53 | [node name="ScrollContainer" type="ScrollContainer" parent="ItemList"] 54 | custom_minimum_size = Vector2(0, 120) 55 | layout_mode = 2 56 | size_flags_vertical = 3 57 | 58 | [node name="list" type="ItemList" parent="ItemList/ScrollContainer"] 59 | unique_name_in_owner = true 60 | custom_minimum_size = Vector2(0, 120) 61 | layout_mode = 2 62 | size_flags_horizontal = 3 63 | size_flags_vertical = 3 64 | mouse_filter = 1 65 | auto_height = true 66 | item_count = 1 67 | item_0/text = "" 68 | 69 | [node name="ItemEdit" type="LineEdit" parent="ItemList"] 70 | unique_name_in_owner = true 71 | layout_mode = 2 72 | placeholder_text = "Item Name" 73 | caret_blink = true 74 | caret_blink_interval = 0.5 75 | 76 | [node name="Add" type="Button" parent="ItemList"] 77 | layout_mode = 2 78 | text = "ADD ITEM" 79 | 80 | [node name="Remove" type="Button" parent="ItemList"] 81 | layout_mode = 2 82 | text = "REMOVE" 83 | 84 | [node name="meta_data" type="Label" parent="."] 85 | layout_mode = 2 86 | size_flags_vertical = 3 87 | text = "Meta Data" 88 | 89 | [node name="id_lbl" type="LineEdit" parent="."] 90 | layout_mode = 2 91 | size_flags_vertical = 6 92 | text = "1a12c51ce6" 93 | editable = false 94 | 95 | [connection signal="item_selected" from="ItemList/ScrollContainer/list" to="." method="_on_list_item_selected"] 96 | [connection signal="pressed" from="ItemList/Add" to="." method="_on_add_pressed"] 97 | [connection signal="pressed" from="ItemList/Remove" to="." method="_on_remove_pressed"] 98 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/Quest_Rewards.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends EditorNode 3 | 4 | @onready var data_container = %data 5 | @onready var string_meta = %String 6 | @onready var integer_meta = %Integer 7 | @onready var float_meta = %Float 8 | @onready var bool_meta = %Bool 9 | @onready var vec2 = %Vector2 10 | @onready var vec3 = %Vector3 11 | 12 | 13 | func setup(): 14 | Node_Type = Type.REWARDS_NODE 15 | super.setup() 16 | %AddButton.get_popup().index_pressed.connect(_on_option_selected) 17 | 18 | func get_data(): 19 | var data = {} 20 | for node in data_container.get_children(): 21 | var meta_name = node.get_node("name").text 22 | var meta_value 23 | if node.is_in_group("numerical"): 24 | meta_value = node.get_node("data").value 25 | if node.is_in_group("string"): 26 | meta_value = node.get_node("data").text 27 | if node.is_in_group("boolean"): 28 | meta_value = node.get_node("data").button_pressed 29 | if node.is_in_group("vector2"): 30 | var x = node.get_node("x").value 31 | var y = node.get_node("y").value 32 | meta_value = Vector2(x,y) 33 | if node.is_in_group("vector3"): 34 | var x = node.get_node("x").value 35 | var y = node.get_node("y").value 36 | var z = node.get_node("z").value 37 | meta_value = Vector3(x,y,z) 38 | data[meta_name] = meta_value 39 | node_data["rewards"] = data 40 | super.get_data() 41 | return node_data 42 | 43 | func set_data(data): 44 | super.set_data(data) 45 | var user_data = data["rewards"] 46 | for meta in user_data: 47 | #skip function params setting 48 | if meta == "funcparams": 49 | continue 50 | var meta_node 51 | match typeof(user_data[meta]): 52 | TYPE_STRING: meta_node = string_meta.duplicate() 53 | TYPE_INT: meta_node = integer_meta.duplicate() 54 | TYPE_FLOAT: meta_node = float_meta.duplicate() 55 | TYPE_BOOL: meta_node = bool_meta.duplicate() 56 | TYPE_VECTOR2: meta_node = vec2.duplicate() 57 | TYPE_VECTOR3: meta_node = vec3.duplicate() 58 | data_container.add_child(meta_node) 59 | meta_node.get_node("name").text = meta 60 | if typeof(user_data[meta]) == TYPE_STRING: 61 | meta_node.get_node("data").text = user_data[meta] 62 | elif typeof(user_data[meta]) == TYPE_VECTOR2: 63 | meta_node.get_node("x").value = user_data[meta].x 64 | meta_node.get_node("y").value = user_data[meta].y 65 | elif typeof(user_data[meta]) == TYPE_VECTOR3: 66 | meta_node.get_node("x").value = user_data[meta].x 67 | meta_node.get_node("y").value = user_data[meta].y 68 | meta_node.get_node("z").value = user_data[meta].z 69 | elif typeof(user_data[meta]) == TYPE_BOOL: 70 | meta_node.get_node("data").button_pressed = user_data[meta] 71 | else: 72 | #Integer/Float 73 | meta_node.get_node("data").value = user_data[meta] 74 | meta_node.get_node("delete").pressed.connect(delete_meta_data.bind(meta_node.get_path())) 75 | 76 | func delete_meta_data(node_path): 77 | data_container.get_node(node_path).queue_free() 78 | 79 | 80 | func _on_option_selected(index): 81 | var option 82 | match index: 83 | 0: option = string_meta.duplicate() 84 | 1: option = integer_meta.duplicate() 85 | 2: option = float_meta.duplicate() 86 | 3: option = bool_meta.duplicate() 87 | 4: option = vec2.duplicate() 88 | 5: option = vec3.duplicate() 89 | focus_nodes.append(option.get_node("name")) 90 | focus_nodes.append(option.get_node("data")) 91 | data_container.add_child(option) 92 | option.get_node("delete").pressed.connect(delete_meta_data.bind(option.get_path())) 93 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/EditorNode.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | class_name EditorNode 3 | extends GraphNode 4 | enum SLOTTYPE { 5 | STEP = 0, 6 | GROUP = 1, 7 | META_DATA = 2, 8 | REWARDS = 3 9 | } 10 | 11 | enum Type { 12 | QUEST_NODE, 13 | STEP_NODE, 14 | INCREMENTAL_NODE, 15 | ITEM_STEP_NODE, 16 | GROUP_NODE, 17 | META_DATA, 18 | END_NODE, 19 | TIMER_NODE, 20 | REWARDS_NODE, 21 | BRANCH_NODE, 22 | FUNCTION_CALL_NODE 23 | } 24 | 25 | var Node_Type : Type 26 | 27 | var node_data :Dictionary= {} 28 | var input_node :Node= null 29 | var output_node :Node= null 30 | var meta_data_node :Node= null 31 | var id :String= "" 32 | var next_id :String= "" 33 | var quest_id :String= "" 34 | var focus_nodes :Array[Node]= [] 35 | @onready var id_lbl = $id_lbl 36 | func _ready(): 37 | setup() 38 | func show_id(vis:bool): 39 | id_lbl.visible = vis 40 | 41 | func setup(): 42 | delete_request.connect(_on_close_request) 43 | resize_request.connect(_on_resize_request) 44 | slot_updated.connect(_on_slot_updated) 45 | node_selected.connect(_on_node_selected) 46 | node_deselected.connect(_on_node_deselected) 47 | dragged.connect(_on_node_dragged) 48 | position_offset_changed.connect(_on_position_offset_changed) 49 | raise_request.connect(_on_raise_request) 50 | id = get_random_id() 51 | name = id 52 | id_lbl.text = id 53 | 54 | func get_meta_data(func_params:bool = false): 55 | var data = {} 56 | if is_instance_valid(meta_data_node): 57 | data = meta_data_node.get_data(func_params) 58 | return data["meta_data"] 59 | else: 60 | data = {"funcparams":[]} 61 | return data 62 | 63 | func get_data(): 64 | node_data["id"] = id 65 | node_data["type"] = Node_Type 66 | node_data["position"] = position_offset 67 | node_data["size"] = size 68 | node_data["next_id"] = next_id 69 | node_data["quest_id"] = quest_id 70 | return node_data 71 | 72 | func set_data(data): 73 | id = data["id"] 74 | name = id 75 | Node_Type = data["type"] 76 | position_offset = data["position"] 77 | size = data["size"] 78 | id_lbl.text = id 79 | 80 | 81 | #passes quest id to output node when a connection accures 82 | func propagate_quest_id(_id): 83 | quest_id = _id 84 | if output_node != null: 85 | #failsafe avoid wiping quest Id from quest node 86 | if output_node.Node_Type != Type.QUEST_NODE: 87 | node_data["quest_id"]= quest_id 88 | output_node.propagate_quest_id(_id) 89 | 90 | func clear_quest_id(): 91 | quest_id = "" 92 | node_data["quest_id"]= quest_id 93 | if output_node != null: 94 | output_node.clear_quest_id() 95 | 96 | func _on_node_selected(): 97 | pass 98 | 99 | func _on_node_deselected(): 100 | pass 101 | 102 | func _on_node_dragged(to,from): 103 | pass 104 | 105 | func _on_position_offset_changed(): 106 | pass 107 | 108 | func _on_close_request(): 109 | queue_free() 110 | 111 | func _on_resize_request(new_minsize): 112 | set_size(new_minsize) 113 | 114 | func _on_slot_updated(slot): 115 | pass 116 | 117 | func _on_raise_request(): 118 | pass 119 | 120 | func release_all_focus(): 121 | for node in focus_nodes: 122 | if node != null: 123 | node.release_focus() 124 | 125 | func get_random_id() -> String: 126 | randomize() 127 | return str(randi() % 1000000).sha1_text().substr(0, 10) 128 | 129 | func update_meta_data(): 130 | if is_instance_valid(meta_data_node): 131 | node_data["meta_data"] = meta_data_node.get_data() 132 | 133 | 134 | func clear_meta_data(): 135 | node_data["meta_data"] = {} 136 | meta_data_node = null 137 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/Meta_data.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends EditorNode 3 | 4 | @onready var data_container = %data 5 | @onready var string_meta = %String 6 | @onready var integer_meta = %Integer 7 | @onready var float_meta = %Float 8 | @onready var bool_meta = %Bool 9 | @onready var vec2 = %Vector2 10 | @onready var vec3 = %Vector3 11 | 12 | 13 | func setup(): 14 | super.setup() 15 | Node_Type = Type.META_DATA 16 | %AddButton.get_popup().index_pressed.connect(_on_option_selected) 17 | 18 | #set is_function_param to true if you want an ordered array to be returnd 19 | func get_data(is_function_params :bool= false): 20 | #Array for function parameter for callable Node 21 | var meta_data = {} 22 | var arr = [] 23 | for node in data_container.get_children(): 24 | var meta_name = node.get_node("name").text 25 | var meta_value 26 | if node.is_in_group("numerical"): 27 | meta_value = node.get_node("data").value 28 | if node.is_in_group("string"): 29 | meta_value = node.get_node("data").text 30 | if node.is_in_group("boolean"): 31 | meta_value = node.get_node("data").button_pressed 32 | if node.is_in_group("vector2"): 33 | var x = node.get_node("x").value 34 | var y = node.get_node("y").value 35 | meta_value = Vector2(x,y) 36 | if node.is_in_group("vector3"): 37 | var x = node.get_node("x").value 38 | var y = node.get_node("y").value 39 | var z = node.get_node("z").value 40 | meta_value = Vector3(x,y,z) 41 | meta_data[meta_name] = meta_value 42 | #store only value in array if for a function call 43 | if is_function_params: 44 | arr.append(meta_value) 45 | meta_data["funcparams"] = arr 46 | node_data["meta_data"] = meta_data 47 | super.get_data() 48 | return node_data 49 | 50 | func set_data(data): 51 | super.set_data(data) 52 | var user_data = data["meta_data"] 53 | for meta in user_data: 54 | #skip function params setting 55 | if meta == "funcparams": 56 | continue 57 | var meta_node 58 | match typeof(user_data[meta]): 59 | TYPE_STRING: meta_node = string_meta.duplicate() 60 | TYPE_INT: meta_node = integer_meta.duplicate() 61 | TYPE_FLOAT: meta_node = float_meta.duplicate() 62 | TYPE_BOOL: meta_node = bool_meta.duplicate() 63 | TYPE_VECTOR2: meta_node = vec2.duplicate() 64 | TYPE_VECTOR3: meta_node = vec3.duplicate() 65 | data_container.add_child(meta_node) 66 | meta_node.get_node("name").text = meta 67 | if typeof(user_data[meta]) == TYPE_STRING: 68 | meta_node.get_node("data").text = user_data[meta] 69 | elif typeof(user_data[meta]) == TYPE_VECTOR2: 70 | meta_node.get_node("x").value = user_data[meta].x 71 | meta_node.get_node("y").value = user_data[meta].y 72 | elif typeof(user_data[meta]) == TYPE_VECTOR3: 73 | meta_node.get_node("x").value = user_data[meta].x 74 | meta_node.get_node("y").value = user_data[meta].y 75 | meta_node.get_node("z").value = user_data[meta].z 76 | elif typeof(user_data[meta]) == TYPE_BOOL: 77 | meta_node.get_node("data").button_pressed = user_data[meta] 78 | else: 79 | #Integer/Float 80 | meta_node.get_node("data").value = user_data[meta] 81 | meta_node.get_node("delete").pressed.connect(delete_meta_data.bind(meta_node.get_path())) 82 | 83 | func delete_meta_data(node_path): 84 | data_container.get_node(node_path).queue_free() 85 | 86 | func _on_option_selected(index): 87 | var option 88 | match index: 89 | 0: option = string_meta.duplicate() 90 | 1: option = integer_meta.duplicate() 91 | 2: option = float_meta.duplicate() 92 | 3: option = bool_meta.duplicate() 93 | 4: option = vec2.duplicate() 94 | 5: option = vec3.duplicate() 95 | data_container.add_child(option) 96 | option.get_node("delete").pressed.connect(delete_meta_data.bind(option.get_path())) 97 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/Timer_Step.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://cjrkm3t758l2"] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/Editor/Nodes/Timer_Step.gd" id="1_7ncg0"] 4 | 5 | [node name="248795475e" type="GraphNode"] 6 | custom_minimum_size = Vector2(150, 150) 7 | offset_right = 150.009 8 | offset_bottom = 150.012 9 | size_flags_vertical = 4 10 | tooltip_text = "Action Quest Step requires an action to be completed to advance" 11 | resizable = true 12 | title = "Timer Step" 13 | slot/0/left_enabled = true 14 | slot/0/left_type = 0 15 | slot/0/left_color = Color(0, 1, 0, 1) 16 | slot/0/left_icon = null 17 | slot/0/right_enabled = true 18 | slot/0/right_type = 0 19 | slot/0/right_color = Color(0, 1, 0, 1) 20 | slot/0/right_icon = null 21 | slot/0/draw_stylebox = true 22 | slot/1/left_enabled = true 23 | slot/1/left_type = 2 24 | slot/1/left_color = Color(0, 0, 1, 1) 25 | slot/1/left_icon = null 26 | slot/1/right_enabled = false 27 | slot/1/right_type = 0 28 | slot/1/right_color = Color(1, 1, 1, 1) 29 | slot/1/right_icon = null 30 | slot/1/draw_stylebox = true 31 | slot/2/left_enabled = false 32 | slot/2/left_type = 0 33 | slot/2/left_color = Color(1, 1, 1, 1) 34 | slot/2/left_icon = null 35 | slot/2/right_enabled = false 36 | slot/2/right_type = 0 37 | slot/2/right_color = Color(1, 1, 1, 1) 38 | slot/2/right_icon = null 39 | slot/2/draw_stylebox = true 40 | script = ExtResource("1_7ncg0") 41 | 42 | [node name="VBoxContainer" type="VBoxContainer" parent="."] 43 | layout_mode = 2 44 | size_flags_vertical = 3 45 | alignment = 1 46 | 47 | [node name="details" type="TextEdit" parent="VBoxContainer"] 48 | unique_name_in_owner = true 49 | custom_minimum_size = Vector2(0, 100) 50 | layout_mode = 2 51 | size_flags_horizontal = 3 52 | size_flags_vertical = 3 53 | placeholder_text = "Step details" 54 | context_menu_enabled = false 55 | caret_blink = true 56 | caret_blink_interval = 0.5 57 | 58 | [node name="h" type="HBoxContainer" parent="VBoxContainer"] 59 | layout_mode = 2 60 | 61 | [node name="minutes" type="SpinBox" parent="VBoxContainer/h"] 62 | unique_name_in_owner = true 63 | layout_mode = 2 64 | size_flags_vertical = 0 65 | tooltip_text = "Minutes" 66 | max_value = 999.0 67 | 68 | [node name="seconds" type="SpinBox" parent="VBoxContainer/h"] 69 | unique_name_in_owner = true 70 | layout_mode = 2 71 | size_flags_vertical = 0 72 | tooltip_text = "Seconds" 73 | max_value = 999.0 74 | 75 | [node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer"] 76 | layout_mode = 2 77 | 78 | [node name="count_dir" type="CheckButton" parent="VBoxContainer/VBoxContainer"] 79 | unique_name_in_owner = true 80 | layout_mode = 2 81 | tooltip_text = "Timer: Counts Down to 0 82 | Stop Watch: Counts up to time set" 83 | button_pressed = true 84 | text = "Timer" 85 | 86 | [node name="fail_on_timeout" type="CheckButton" parent="VBoxContainer/VBoxContainer"] 87 | unique_name_in_owner = true 88 | layout_mode = 2 89 | tooltip_text = "If the quest fails on Timeout. 90 | Completes this step if false" 91 | button_pressed = true 92 | text = "Fail On Timeout" 93 | 94 | [node name="meta_data" type="Label" parent="."] 95 | layout_mode = 2 96 | size_flags_vertical = 3 97 | text = "Meta Data" 98 | 99 | [node name="id_lbl" type="LineEdit" parent="."] 100 | layout_mode = 2 101 | size_flags_vertical = 6 102 | text = "248795475e" 103 | editable = false 104 | 105 | [connection signal="gui_input" from="VBoxContainer/details" to="." method="_on_details_gui_input"] 106 | [connection signal="toggled" from="VBoxContainer/VBoxContainer/count_dir" to="." method="_on_count_down_toggled"] 107 | [connection signal="toggled" from="VBoxContainer/VBoxContainer/fail_on_timeout" to="." method="_on_fail_on_timeout_toggled"] 108 | -------------------------------------------------------------------------------- /.godot/editor/EditorWindow.tscn-editstate-071bb97aef45b28d99695aa44a1eecc5.cfg: -------------------------------------------------------------------------------- 1 | [editor_states] 2 | 3 | Anim={ 4 | "visible": false 5 | } 6 | 2D={ 7 | "grid_offset": Vector2(0, 0), 8 | "grid_snap_active": false, 9 | "grid_step": Vector2(8, 8), 10 | "grid_visibility": 1, 11 | "ofs": Vector2(-509.318, -250.594), 12 | "primary_grid_step": Vector2i(8, 8), 13 | "show_edit_locks": true, 14 | "show_guides": true, 15 | "show_helpers": false, 16 | "show_origin": true, 17 | "show_rulers": true, 18 | "show_transformation_gizmos": true, 19 | "show_viewport": true, 20 | "show_zoom_control": true, 21 | "smart_snap_active": false, 22 | "snap_guides": true, 23 | "snap_node_anchors": true, 24 | "snap_node_center": true, 25 | "snap_node_parent": true, 26 | "snap_node_sides": true, 27 | "snap_other_nodes": true, 28 | "snap_pixel": true, 29 | "snap_relative": false, 30 | "snap_rotation": false, 31 | "snap_rotation_offset": 0.0, 32 | "snap_rotation_step": 0.261799, 33 | "snap_scale": false, 34 | "snap_scale_step": 0.1, 35 | "zoom": 0.561231 36 | } 37 | 3D={ 38 | "fov": 70.01, 39 | "gizmos_status": { 40 | "AudioListener3D": 0, 41 | "AudioStreamPlayer3D": 0, 42 | "CPUParticles3D": 0, 43 | "CSGShape3D": 0, 44 | "Camera3D": 0, 45 | "CollisionObject3D": 0, 46 | "CollisionPolygon3D": 0, 47 | "CollisionShape3D": 0, 48 | "Decal": 0, 49 | "FogVolume": 0, 50 | "GPUParticles3D": 0, 51 | "GPUParticlesCollision3D": 0, 52 | "Joint3D": 0, 53 | "Light3D": 0, 54 | "LightmapGI": 0, 55 | "LightmapProbe": 0, 56 | "Marker3D": 0, 57 | "NavigationLink3D": 0, 58 | "NavigationRegion3D": 0, 59 | "OccluderInstance3D": 0, 60 | "Path3D": 0, 61 | "PhysicalBone3D": 0, 62 | "RayCast3D": 0, 63 | "ReflectionProbe": 0, 64 | "ShapeCast3D": 0, 65 | "Skeleton3D": 0, 66 | "SoftBody3D": 0, 67 | "SpringArm3D": 0, 68 | "VehicleWheel3D": 0, 69 | "VisibleOnScreenNotifier3D": 0, 70 | "VoxelGI": 0 71 | }, 72 | "local_coords": false, 73 | "preview_sun_env": { 74 | "environ_ao_enabled": false, 75 | "environ_enabled": true, 76 | "environ_energy": 1.0, 77 | "environ_gi_enabled": false, 78 | "environ_glow_enabled": true, 79 | "environ_ground_color": Color(0.2, 0.169, 0.133, 1), 80 | "environ_sky_color": Color(0.385, 0.454, 0.55, 1), 81 | "environ_tonemap_enabled": true, 82 | "sun_color": Color(1, 1, 1, 1), 83 | "sun_enabled": true, 84 | "sun_energy": 1.0, 85 | "sun_max_distance": 100.0, 86 | "sun_rotation": Vector2(-1.0472, 2.61799) 87 | }, 88 | "rotate_snap": 15.0, 89 | "scale_snap": 10.0, 90 | "show_grid": true, 91 | "show_origin": true, 92 | "snap_enabled": false, 93 | "translate_snap": 1.0, 94 | "viewport_mode": 1, 95 | "viewports": [{ 96 | "auto_orthogonal": false, 97 | "auto_orthogonal_enabled": true, 98 | "cinematic_preview": false, 99 | "display_mode": 20, 100 | "distance": 4.0, 101 | "doppler": false, 102 | "frame_time": false, 103 | "gizmos": true, 104 | "half_res": false, 105 | "information": false, 106 | "listener": true, 107 | "lock_rotation": false, 108 | "orthogonal": false, 109 | "position": Vector3(0, 0, 0), 110 | "use_environment": false, 111 | "view_type": 0, 112 | "x_rotation": 0.5, 113 | "y_rotation": -0.5 114 | }, { 115 | "auto_orthogonal": false, 116 | "auto_orthogonal_enabled": true, 117 | "cinematic_preview": false, 118 | "display_mode": 20, 119 | "distance": 4.0, 120 | "doppler": false, 121 | "frame_time": false, 122 | "gizmos": true, 123 | "half_res": false, 124 | "information": false, 125 | "listener": false, 126 | "lock_rotation": false, 127 | "orthogonal": false, 128 | "position": Vector3(0, 0, 0), 129 | "use_environment": false, 130 | "view_type": 0, 131 | "x_rotation": 0.5, 132 | "y_rotation": -0.5 133 | }, { 134 | "auto_orthogonal": false, 135 | "auto_orthogonal_enabled": true, 136 | "cinematic_preview": false, 137 | "display_mode": 20, 138 | "distance": 4.0, 139 | "doppler": false, 140 | "frame_time": false, 141 | "gizmos": true, 142 | "half_res": false, 143 | "information": false, 144 | "listener": false, 145 | "lock_rotation": false, 146 | "orthogonal": false, 147 | "position": Vector3(0, 0, 0), 148 | "use_environment": false, 149 | "view_type": 0, 150 | "x_rotation": 0.5, 151 | "y_rotation": -0.5 152 | }, { 153 | "auto_orthogonal": false, 154 | "auto_orthogonal_enabled": true, 155 | "cinematic_preview": false, 156 | "display_mode": 20, 157 | "distance": 4.0, 158 | "doppler": false, 159 | "frame_time": false, 160 | "gizmos": true, 161 | "half_res": false, 162 | "information": false, 163 | "listener": false, 164 | "lock_rotation": false, 165 | "orthogonal": false, 166 | "position": Vector3(0, 0, 0), 167 | "use_environment": false, 168 | "view_type": 0, 169 | "x_rotation": 0.5, 170 | "y_rotation": -0.5 171 | }], 172 | "zfar": 4000.01, 173 | "znear": 0.05 174 | } 175 | selected_nodes=Array[NodePath]([]) 176 | -------------------------------------------------------------------------------- /addons/quest_manager/ScriptQuest.gd: -------------------------------------------------------------------------------- 1 | class_name ScriptQuest 2 | var quest_data = {} 3 | var last_added_id = "" 4 | #Note Script Quest dont currently support branches 5 | func _init(quest_name:String,quest_details :String= "") -> void: 6 | quest_data["quest_id"] = get_random_id() 7 | quest_data["quest_name"]= quest_name 8 | quest_data["quest_details"]= quest_details 9 | quest_data["first_step"]= "" 10 | quest_data["quest_steps"] = {} 11 | quest_data["completed"]= false 12 | quest_data["failed"]= false 13 | quest_data["group"]= "" 14 | quest_data["meta_data"]= {} 15 | quest_data["quest_rewards"]= {} 16 | 17 | func set_quest_details(details:String) -> void: 18 | quest_data["quest_details"] = details 19 | 20 | func add_action_step(step_details:String,step_meta_data:Dictionary={}) -> void: 21 | var step_data = {} 22 | step_data["id"] = get_random_id() 23 | step_data["step_type"] = "action_step" 24 | step_data["details"] = step_details 25 | step_data["meta_data"] = step_meta_data 26 | step_data["complete"] = false 27 | step_data["next_id"] = "" 28 | add_step(step_data) 29 | 30 | func add_incremental_step(step_details:String, item_name:String, required:int,step_meta_data:Dictionary={}) -> void: 31 | var step_data = {} 32 | step_data["id"] = get_random_id() 33 | step_data["next_id"] = "" 34 | step_data["step_type"] = "incremental_step" 35 | step_data["details"] = step_details 36 | step_data["item_name"] = item_name 37 | step_data["required"] = required 38 | step_data["collected"] = 0 39 | step_data["meta_data"] = step_meta_data 40 | step_data["complete"] = false 41 | add_step(step_data) 42 | 43 | func add_items_step(step_details:String, items:PackedStringArray,step_meta_data:Dictionary={}) -> void: 44 | var step_data = {} 45 | step_data["id"] = get_random_id() 46 | step_data["next_id"] = "" 47 | step_data["step_type"] = "items_step" 48 | step_data["details"]= step_details 49 | var arr = [] 50 | for item in items: 51 | arr.append({ 52 | "name" : item, 53 | "complete" : false 54 | }) 55 | step_data["item_list"]= arr 56 | step_data["complete"] = false 57 | step_data["meta_data"]= step_meta_data 58 | add_step(step_data) 59 | 60 | func add_callable_step(function:String,params:Array = []) -> void: 61 | var step_data = {} 62 | step_data["id"] = get_random_id() 63 | step_data["next_id"] = "" 64 | step_data["step_type"] = "callable_step" 65 | step_data["details"] = function 66 | step_data["callable"] = function 67 | step_data["params"] = params 68 | step_data["complete"] = false 69 | add_step(step_data) 70 | #add a timer step 71 | func add_timer_step(step_details:String,time_in_seconds:int,is_count_down:bool = true,fail_on_timeout:bool=true,step_meta_data:Dictionary={}) -> void: 72 | var step_data = {} 73 | step_data["id"] = get_random_id() 74 | step_data["next_id"] = "" 75 | step_data["step_type"]= "timer_step" 76 | step_data["details"]= step_details 77 | step_data["total_time"]= time_in_seconds 78 | step_data["time"]= time_in_seconds if is_count_down else 0 79 | step_data["is_count_down"]= is_count_down 80 | step_data["fail_on_timeout"]= fail_on_timeout 81 | step_data["time_minutes"]= round(time_in_seconds/60) 82 | step_data["time_seconds"]= time_in_seconds%60 83 | step_data["meta_data"]= step_meta_data 84 | step_data["complete"] = false 85 | add_step(step_data) 86 | 87 | #set quest rewards dictionary 88 | func set_rewards(rewards:Dictionary) -> void: 89 | quest_data["quest_rewards"] = rewards 90 | 91 | #set quest meta_data dictionary 92 | func set_quest_meta_data(meta_data:Dictionary) -> void: 93 | quest_data["meta_data"] = meta_data 94 | 95 | #add quest to group 96 | func add_quest_to_group(group:String) -> void: 97 | quest_data["group"] = group 98 | 99 | #add step also setting first step 100 | func add_step(step_data:Dictionary) -> void: 101 | quest_data["quest_steps"][step_data["id"]] = step_data 102 | if quest_data["first_step"] == "": 103 | quest_data["first_step"] = step_data["id"] 104 | quest_data["next_id"] = step_data["id"] 105 | last_added_id = step_data["id"] 106 | else: 107 | quest_data["quest_steps"][last_added_id]["next_id"] = step_data["id"]; 108 | last_added_id = step_data["id"] 109 | 110 | #must call after adding all steps to quest 111 | func finalize_quest() -> void: 112 | assert(quest_data["quest_steps"].is_empty()==false,"No Quest steps Added") 113 | var end_data = {} 114 | end_data["id"] = get_random_id() 115 | end_data["step_type"] = "end" 116 | end_data["details"] = "Complete" 117 | quest_data["quest_steps"][end_data["id"]] = end_data 118 | add_step(end_data) 119 | 120 | func get_random_id() -> String: 121 | randomize() 122 | return str(randi() % 1000000).sha1_text().substr(0, 10) 123 | 124 | -------------------------------------------------------------------------------- /addons/quest_manager/Examples/ExampleTwo/player.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=20 format=3] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/Examples/ExampleTwo/Player.gd" id="1_sryyx"] 4 | [ext_resource type="Texture2D" uid="uid://cqw68ky2utcct" path="res://addons/quest_manager/assets/Character Sheet.png" id="2_ok8vs"] 5 | 6 | [sub_resource type="AtlasTexture" id="AtlasTexture_ljfaj"] 7 | atlas = ExtResource("2_ok8vs") 8 | region = Rect2(0, 0, 29, 64) 9 | 10 | [sub_resource type="AtlasTexture" id="AtlasTexture_ptcbf"] 11 | atlas = ExtResource("2_ok8vs") 12 | region = Rect2(0, 0, 32, 64) 13 | 14 | [sub_resource type="AtlasTexture" id="AtlasTexture_nxyod"] 15 | atlas = ExtResource("2_ok8vs") 16 | region = Rect2(32, 0, 32, 64) 17 | 18 | [sub_resource type="AtlasTexture" id="AtlasTexture_k3fd7"] 19 | atlas = ExtResource("2_ok8vs") 20 | region = Rect2(64, 0, 32, 64) 21 | 22 | [sub_resource type="AtlasTexture" id="AtlasTexture_07a6c"] 23 | atlas = ExtResource("2_ok8vs") 24 | region = Rect2(96, 0, 32, 64) 25 | 26 | [sub_resource type="AtlasTexture" id="AtlasTexture_m554h"] 27 | atlas = ExtResource("2_ok8vs") 28 | region = Rect2(0, 64, 32, 64) 29 | 30 | [sub_resource type="AtlasTexture" id="AtlasTexture_jx4gj"] 31 | atlas = ExtResource("2_ok8vs") 32 | region = Rect2(32, 64, 32, 64) 33 | 34 | [sub_resource type="AtlasTexture" id="AtlasTexture_1hv32"] 35 | atlas = ExtResource("2_ok8vs") 36 | region = Rect2(64, 64, 32, 64) 37 | 38 | [sub_resource type="AtlasTexture" id="AtlasTexture_mlepg"] 39 | atlas = ExtResource("2_ok8vs") 40 | region = Rect2(96, 64, 32, 64) 41 | 42 | [sub_resource type="AtlasTexture" id="AtlasTexture_o17x8"] 43 | atlas = ExtResource("2_ok8vs") 44 | region = Rect2(0, 128, 32, 64) 45 | 46 | [sub_resource type="AtlasTexture" id="AtlasTexture_ooj40"] 47 | atlas = ExtResource("2_ok8vs") 48 | region = Rect2(32, 128, 32, 64) 49 | 50 | [sub_resource type="AtlasTexture" id="AtlasTexture_5leos"] 51 | atlas = ExtResource("2_ok8vs") 52 | region = Rect2(64, 128, 32, 64) 53 | 54 | [sub_resource type="AtlasTexture" id="AtlasTexture_w4so3"] 55 | atlas = ExtResource("2_ok8vs") 56 | region = Rect2(96, 128, 32, 64) 57 | 58 | [sub_resource type="AtlasTexture" id="AtlasTexture_wanhp"] 59 | atlas = ExtResource("2_ok8vs") 60 | region = Rect2(128, 128, 32, 64) 61 | 62 | [sub_resource type="SpriteFrames" id="SpriteFrames_e8qyr"] 63 | animations = [{ 64 | "frames": [{ 65 | "duration": 1.0, 66 | "texture": SubResource("AtlasTexture_ljfaj") 67 | }], 68 | "loop": true, 69 | "name": &"idle", 70 | "speed": 5.0 71 | }, { 72 | "frames": [{ 73 | "duration": 1.0, 74 | "texture": SubResource("AtlasTexture_ptcbf") 75 | }, { 76 | "duration": 1.0, 77 | "texture": SubResource("AtlasTexture_nxyod") 78 | }, { 79 | "duration": 1.0, 80 | "texture": SubResource("AtlasTexture_k3fd7") 81 | }, { 82 | "duration": 1.0, 83 | "texture": SubResource("AtlasTexture_07a6c") 84 | }], 85 | "loop": true, 86 | "name": &"walk_down", 87 | "speed": 5.0 88 | }, { 89 | "frames": [{ 90 | "duration": 1.0, 91 | "texture": SubResource("AtlasTexture_m554h") 92 | }, { 93 | "duration": 1.0, 94 | "texture": SubResource("AtlasTexture_jx4gj") 95 | }, { 96 | "duration": 1.0, 97 | "texture": SubResource("AtlasTexture_1hv32") 98 | }, { 99 | "duration": 1.0, 100 | "texture": SubResource("AtlasTexture_mlepg") 101 | }], 102 | "loop": true, 103 | "name": &"walk_horizontal", 104 | "speed": 5.0 105 | }, { 106 | "frames": [{ 107 | "duration": 1.0, 108 | "texture": SubResource("AtlasTexture_o17x8") 109 | }, { 110 | "duration": 1.0, 111 | "texture": SubResource("AtlasTexture_ooj40") 112 | }, { 113 | "duration": 1.0, 114 | "texture": SubResource("AtlasTexture_5leos") 115 | }, { 116 | "duration": 1.0, 117 | "texture": SubResource("AtlasTexture_w4so3") 118 | }, { 119 | "duration": 1.0, 120 | "texture": SubResource("AtlasTexture_wanhp") 121 | }], 122 | "loop": true, 123 | "name": &"walk_up", 124 | "speed": 5.0 125 | }] 126 | 127 | [sub_resource type="CapsuleShape2D" id="CapsuleShape2D_ngli1"] 128 | radius = 8.0 129 | 130 | [sub_resource type="CircleShape2D" id="CircleShape2D_ob6rt"] 131 | radius = 38.0132 132 | 133 | [node name="Player" type="CharacterBody2D"] 134 | position = Vector2(185, 3) 135 | script = ExtResource("1_sryyx") 136 | 137 | [node name="Sprite" type="AnimatedSprite2D" parent="."] 138 | z_index = 2 139 | y_sort_enabled = true 140 | texture_filter = 1 141 | position = Vector2(-1, -9) 142 | sprite_frames = SubResource("SpriteFrames_e8qyr") 143 | animation = &"walk_horizontal" 144 | frame_progress = 0.255773 145 | 146 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 147 | position = Vector2(0, 9) 148 | shape = SubResource("CapsuleShape2D_ngli1") 149 | 150 | [node name="Camera2D" type="Camera2D" parent="."] 151 | 152 | [node name="Interact" type="Area2D" parent="."] 153 | 154 | [node name="CollisionShape2D" type="CollisionShape2D" parent="Interact"] 155 | shape = SubResource("CircleShape2D_ob6rt") 156 | -------------------------------------------------------------------------------- /documentation/Creating_Quests.md: -------------------------------------------------------------------------------- 1 | # Creating Quests 2 | 3 | ## The Editor 4 | 5 | To create a quest you should use the editor. The editor has various nodes required to create quests. These nodes are: 6 | 1. `Quest Node` - This Node is the main quest node it requires the `quest_name` and `quest_details` 7 | 2. `Step Node` - This node is an `action_step` node and only requires a discription of the action to complete. 8 | 3. `Incremental Step Node` - This node is an `incremental_step` node and requires both its `details` , `item_name` and the `required` amount to complete. 9 | 4. `Item Step Node` - This node is an `items_step` node and requires the `details` as well as the list of items/actions to complete 10 | 5. `Group Node` - A group node only requires its `group` name and can be connected to multiple quest nodes. 11 | 6. `Meta Data Node` - A meta data node is use to add meta data to quest such as quest rewards or any arbitrary information stored as a `String`, `Integer`, `float` or `boolean` 12 | 7. `Timer Node` - This Node is a `timer_step` node that is used as a Timer or a Stopwatch 13 | 8. `Callable Node` - This Node is a `callable_step` node that is used to call a function from an Autoloaded Script. 14 | 9. `Branch Node` - The Node is a `branch_step` that works similar to anc `action_step` but has 2 output for creating branching quests. 15 | 10. `Rewards Node` -This Node is similar to a meta_data node but can only be connected to a `Quest Node` 16 | 11. `End Node` - This node is required to end a quest after the final step. 17 | 18 | ## How to use 19 | 20 | For this example we'll keep it simple and create a 1 step Quest to kill 15 enemies. 21 | ![Arcade Shooter](arcade_shooter.png) 22 | 1. First add a Quest node, an Incremental Step Node and a End Node. 23 | 2. Connect these nodes dragging the green connection pins from one to another: Quest Node > Incremental Node > End Node 24 | 25 | ![Example Editor Quest](example_editor_quest.jpg) 26 | 3. Additionally, you can add a group and Meta Data Node and Fill in the information for each node we wont use the Group and meta data so theyre not required here. 27 | 4. Save the quest file choosing a location and giving it a name. Quest files are save with the `.quest` extension. 28 | 5. The Space Arcade Scene is included in the Examples Folder. Open it and find the UI node. Drag the quest file into the Quest property in the UI inspector window. 29 | 6. Notice the Quest Resource is Read only and has 2 dictionaries. 30 | - `Quest Data` -Contains all the quests stored in the quest resource 31 | - `Graph Data` -Contains all the Data for the Editor 32 | 7. Open up the UI.gd script. Notice in the _ready() function we do a few things: 33 | - `QuestManager.add_quest_from_resource(quest,"ShootEmUp")` - Here we tell the Quest Manager to load this resource and add its quest thats named `ShootEmUp` to the player quests 34 | - We also connect a few signals: 35 | - `step_updated` - we update the UI to show what changed in the case an enemy was killed so the value increases 36 | - `step_complete` - We just use a lambda here to print step complete 37 | - `quest complete` - We update the UI to show that the quest was completed 38 | - `quest_failed` - Show if the quest failed i.e if the player died 39 | - Then we set the QuestStart label text to the quest details and do some tweening the start the level 40 | 8. Open up the `Example/ExampleOne/Projectile.gd` script. Notice we check to see if the bullet hits an enemy. If it did, we call `$QMStepTracker.update_step()` before removing the projectile. 41 | 9. QMStepTracker is a Node you can add to objects in your project to track a quest's step. You set its type and pass in the quest_id and Step id. In this case this Trancker is an Incremental Step Tracker that increases `collected` items of the `Incremental Step` by 1 by default. 42 | 10. In the UI we also check if the player ran out of lives. If so we call `QuestManager.fail_quest("ShootEmUp")` This sets the quest as failed and emits the `quest_failed` signal. 43 | 11. And Thats about it for the tutorial. If a quest has multiple steps the `step_updated` and `step_completed` signals returns a new step its up to you how you want to display the information of that current step by checking its `step_type`. Check the [API](Quest_Manager_API.md) for what properties each `step_type` contains. 44 | 45 | # Creating Quests from code 46 | 47 | As of version 0.3.0, you can now create quest at Run-Time using the ScriptQuest class. This allows you to be able to randomly/procedurally make quests if necessary. To do this check the ScriptQuest class in the [Script Quest API](Script_Quest_API.md) 48 | 49 | ## Exporting Projects 50 | 51 | Running a project in the editor is fine but when you want to export a project youll need to tell godot to export your quest files. To do this, in the export window, select your export format(Window/Linux/Android etc) then open the Resources tab and add `*.quest` as an entry with comma seperating other file types. 52 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/TestScene/PlayerQuests.gd: -------------------------------------------------------------------------------- 1 | extends Control 2 | @onready var player_quest_list = %Player_Quests_List 3 | @onready var player_quest_name_lbl = %Player_Quest_Name 4 | @onready var player_quest_description = %Player_Quest_Description 5 | 6 | @onready var step_details = %Current_Step_Details 7 | @onready var action_step_btn = %action_step_button 8 | @onready var incremental_step_ctrls = %incremental_step 9 | @onready var item_step_btn = %item_step_button 10 | @onready var controls = %step_controls 11 | var selected_quest := "" 12 | var quest_id := "" 13 | var current_step_id := "" 14 | func _ready(): 15 | set_defaults() 16 | QuestManager.new_quest_added.connect(update_quest_list) 17 | QuestManager.step_updated.connect(update_current_step) 18 | QuestManager.next_step.connect(update_current_step) 19 | QuestManager.step_complete.connect(step_complete) 20 | QuestManager.quest_completed.connect(on_quest_complete) 21 | QuestManager.quest_failed.connect(on_quest_failed) 22 | 23 | func update_quest_list(quest_name): 24 | player_quest_list.clear() 25 | for quest in QuestManager.get_all_player_quests_names(): 26 | player_quest_list.add_item(quest) 27 | 28 | func on_quest_complete(quest): 29 | step_details.text = "QUEST COMPLETE" 30 | for control in controls.get_children(): 31 | control.queue_free() 32 | print(quest.quest_rewards) 33 | 34 | func on_quest_failed(n): 35 | step_details.text = "QUEST FAILED" 36 | for control in controls.get_children(): 37 | control.queue_free() 38 | 39 | func step_complete(step): 40 | update_current_step(step) 41 | pass 42 | 43 | func update_current_step(step:Dictionary): 44 | quest_id = step.quest_id 45 | current_step_id = step.id 46 | for node in controls.get_children(): 47 | node.queue_free() 48 | if QuestManager.is_quest_complete(quest_id,true): 49 | step_details.text = "QUEST COMPLETE" 50 | return 51 | if QuestManager.is_quest_failed(quest_id,true): 52 | step_details.text = "QUEST FAILED" 53 | return 54 | step_details.text = step.details 55 | 56 | match step.step_type: 57 | QuestManager.ACTION_STEP: 58 | var c = action_step_btn.duplicate() 59 | controls.add_child(c) 60 | c.pressed.connect(action_button_pressed) 61 | QuestManager.INCREMENTAL_STEP: 62 | var c = incremental_step_ctrls.duplicate() 63 | controls.add_child(c) 64 | var item_name = step.item_name 65 | var amount_node = c.get_node("amount") 66 | c.get_node("add").pressed.connect(add_amount_pressed.bind(item_name,amount_node)) 67 | step_details.text = "%s: %02d/%02d" % [step.details,step.collected,step.required] 68 | QuestManager.ITEMS_STEP: 69 | for i in step.item_list: 70 | var c = item_step_btn.duplicate() 71 | controls.add_child(c) 72 | c.text = i.name 73 | c.button_pressed = i.complete 74 | c.toggled.connect(item_completed.bind(c.text)) 75 | QuestManager.TIMER_STEP: 76 | step_details.text = "%s, \n Time Remaining: %03d"%[step.details,step.time] 77 | var c = action_step_btn.duplicate() 78 | controls.add_child(c) 79 | c.pressed.connect(action_button_pressed) 80 | QuestManager.BRANCH_STEP: 81 | var c = action_step_btn.duplicate() 82 | controls.add_child(c) 83 | c.pressed.connect(action_button_pressed) 84 | var d = action_step_btn.duplicate() 85 | controls.add_child(d) 86 | d.text = "BRANCH" 87 | d.pressed.connect(branch_button_pressed) 88 | current_step_id = step.id 89 | func action_button_pressed(): 90 | QuestManager.set_branch_step(quest_id,current_step_id,false) 91 | QuestManager.progress_quest(quest_id,current_step_id) 92 | 93 | func branch_button_pressed(): 94 | QuestManager.set_branch_step(quest_id,current_step_id,true) 95 | QuestManager.progress_quest(quest_id,current_step_id) 96 | 97 | func add_amount_pressed(item_name,node:SpinBox): 98 | QuestManager.progress_quest(quest_id,current_step_id,item_name,node.value) 99 | 100 | func item_completed(collected,item_name): 101 | print(collected) 102 | print(item_name) 103 | QuestManager.progress_quest(quest_id,current_step_id,item_name,1,collected) 104 | 105 | func _on_player_quests_list_item_selected(index): 106 | selected_quest = player_quest_list.get_item_text(index) 107 | var quest = QuestManager.get_player_quest(selected_quest) 108 | quest_id = quest.quest_id 109 | player_quest_name_lbl.text = quest.quest_name 110 | player_quest_description.text = quest.quest_details 111 | update_current_step(QuestManager.get_current_step(quest_id,true)) 112 | 113 | 114 | func _on_delete_quest_pressed(): 115 | QuestManager.remove_quest(selected_quest) 116 | set_defaults() 117 | update_quest_list("") 118 | %accept_quest.disabled = false 119 | 120 | func set_defaults(): 121 | player_quest_name_lbl.text = "No Quest Select" 122 | player_quest_description.text = "No Quest selected" 123 | step_details.text = "No Quest selected" 124 | for i in controls.get_children(): 125 | i.queue_free() 126 | player_quest_list.clear() 127 | 128 | func _on_show_data_pressed(): 129 | if selected_quest == "": 130 | return 131 | #get quest from player quest because its added to player quest 132 | var quest = QuestManager.get_player_quest(selected_quest) 133 | if quest.is_empty(): 134 | return 135 | if quest.meta_data.is_empty(): 136 | 137 | return 138 | var quest_data = "Group: %s \nMeta Data \n" % quest.group 139 | var new_line = 0 140 | for data in quest.meta_data: 141 | if new_line%2 == 0: 142 | quest_data += "%s = %s, " % [data, quest.meta_data[data]] 143 | else: 144 | quest_data += "%s = %s \n" % [data, quest.meta_data[data]] 145 | new_line += 1 146 | %quest_data.get_window().title = "Quest Data" 147 | %quest_data_label.text = quest_data 148 | %quest_data.popup_centered() 149 | 150 | 151 | func _on_show_step_data_pressed() -> void: 152 | if selected_quest == "": 153 | return 154 | #get quest from player quest because its added to player quest 155 | var quest = QuestManager.get_player_quest(selected_quest) 156 | if quest.is_empty(): 157 | return 158 | var step = QuestManager.get_current_step(selected_quest,false) 159 | if step.meta_data.is_empty(): 160 | return 161 | var step_data = "" 162 | var new_line = 0 163 | for data in step.meta_data: 164 | if new_line%2 == 0: 165 | step_data += "%s = %s, " % [data, step.meta_data[data]] 166 | else: 167 | step_data += "%s = %s \n" % [data, step.meta_data[data]] 168 | new_line += 1 169 | %quest_data.get_window().title = "Step Meta Data" 170 | %quest_data_label.text = step_data 171 | %quest_data.popup_centered() 172 | -------------------------------------------------------------------------------- /.godot/editor/script_editor_cache.cfg: -------------------------------------------------------------------------------- 1 | [res://addons/quest_manager/Editor/EditorWindow.gd] 2 | 3 | state={ 4 | "bookmarks": PackedInt32Array(), 5 | "breakpoints": PackedInt32Array(), 6 | "column": 14, 7 | "folded_lines": Array[int]([]), 8 | "h_scroll_position": 0, 9 | "row": 49, 10 | "scroll_position": 0.0, 11 | "selection": false, 12 | "syntax_highlighter": "GDScript" 13 | } 14 | 15 | [res://addons/quest_manager/QuestManager.gd] 16 | 17 | state={ 18 | "bookmarks": PackedInt32Array(), 19 | "breakpoints": PackedInt32Array(), 20 | "column": 14, 21 | "folded_lines": Array[int]([116]), 22 | "h_scroll_position": 0, 23 | "row": 32, 24 | "scroll_position": 30.0, 25 | "selection": true, 26 | "selection_from_column": 5, 27 | "selection_from_line": 32, 28 | "selection_to_column": 14, 29 | "selection_to_line": 32, 30 | "syntax_highlighter": "GDScript" 31 | } 32 | 33 | [res://addons/quest_manager/Examples/ExampleOne/UI.gd] 34 | 35 | state={ 36 | "bookmarks": PackedInt32Array(), 37 | "breakpoints": PackedInt32Array(), 38 | "column": 3, 39 | "folded_lines": Array[int]([]), 40 | "h_scroll_position": 3, 41 | "row": 31, 42 | "scroll_position": 0.0, 43 | "selection": false, 44 | "syntax_highlighter": "GDScript" 45 | } 46 | 47 | [res://addons/quest_manager/Examples/ExampleOne/Projectile.gd] 48 | 49 | state={ 50 | "bookmarks": PackedInt32Array(), 51 | "breakpoints": PackedInt32Array(), 52 | "column": 17, 53 | "folded_lines": Array[int]([]), 54 | "h_scroll_position": 0, 55 | "row": 12, 56 | "scroll_position": 0.0, 57 | "selection": false, 58 | "syntax_highlighter": "GDScript" 59 | } 60 | 61 | [res://addons/quest_manager/QMStepTracker.gd] 62 | 63 | state={ 64 | "bookmarks": PackedInt32Array(), 65 | "breakpoints": PackedInt32Array(), 66 | "column": 28, 67 | "folded_lines": Array[int]([]), 68 | "h_scroll_position": 0, 69 | "row": 32, 70 | "scroll_position": 51.0, 71 | "selection": false, 72 | "syntax_highlighter": "GDScript" 73 | } 74 | 75 | [res://addons/quest_manager/Examples/ExampleTwo/Apple.gd] 76 | 77 | state={ 78 | "bookmarks": PackedInt32Array(), 79 | "breakpoints": PackedInt32Array(), 80 | "column": 0, 81 | "folded_lines": Array[int]([]), 82 | "h_scroll_position": 0, 83 | "row": 1, 84 | "scroll_position": 0.0, 85 | "selection": false, 86 | "syntax_highlighter": "GDScript" 87 | } 88 | 89 | [res://addons/quest_manager/Examples/ExampleTwo/ExampleTwo.gd] 90 | 91 | state={ 92 | "bookmarks": PackedInt32Array(), 93 | "breakpoints": PackedInt32Array(), 94 | "column": 0, 95 | "folded_lines": Array[int]([]), 96 | "h_scroll_position": 0, 97 | "row": 1, 98 | "scroll_position": 0.0, 99 | "selection": false, 100 | "syntax_highlighter": "GDScript" 101 | } 102 | 103 | [res://addons/quest_manager/Examples/ExampleTwo/Player.gd] 104 | 105 | state={ 106 | "bookmarks": PackedInt32Array(), 107 | "breakpoints": PackedInt32Array(), 108 | "column": 7, 109 | "folded_lines": Array[int]([]), 110 | "h_scroll_position": 0, 111 | "row": 44, 112 | "scroll_position": 44.0, 113 | "selection": false, 114 | "syntax_highlighter": "GDScript" 115 | } 116 | 117 | [res://addons/quest_manager/Examples/ExampleTwo/Stove.gd] 118 | 119 | state={ 120 | "bookmarks": PackedInt32Array(), 121 | "breakpoints": PackedInt32Array(), 122 | "column": 29, 123 | "folded_lines": Array[int]([]), 124 | "h_scroll_position": 0, 125 | "row": 4, 126 | "scroll_position": 0.0, 127 | "selection": false, 128 | "syntax_highlighter": "GDScript" 129 | } 130 | 131 | [res://addons/quest_manager/extras/Action_Step_Area.gd] 132 | 133 | state={ 134 | "bookmarks": PackedInt32Array(), 135 | "breakpoints": PackedInt32Array(), 136 | "column": 22, 137 | "folded_lines": Array[int]([]), 138 | "h_scroll_position": 0, 139 | "row": 8, 140 | "scroll_position": 0.0, 141 | "selection": false, 142 | "syntax_highlighter": "GDScript" 143 | } 144 | 145 | [res://addons/quest_manager/Examples/ExampleTwo/NPC.gd] 146 | 147 | state={ 148 | "bookmarks": PackedInt32Array(), 149 | "breakpoints": PackedInt32Array(), 150 | "column": 30, 151 | "folded_lines": Array[int]([]), 152 | "h_scroll_position": 0, 153 | "row": 3, 154 | "scroll_position": 3.0, 155 | "selection": true, 156 | "selection_from_column": 24, 157 | "selection_from_line": 3, 158 | "selection_to_column": 30, 159 | "selection_to_line": 3, 160 | "syntax_highlighter": "GDScript" 161 | } 162 | 163 | [res://addons/quest_manager/Examples/ExampleTwo/UI.gd] 164 | 165 | state={ 166 | "bookmarks": PackedInt32Array(), 167 | "breakpoints": PackedInt32Array(), 168 | "column": 25, 169 | "folded_lines": Array[int]([]), 170 | "h_scroll_position": 400, 171 | "row": 44, 172 | "scroll_position": 31.0, 173 | "selection": false, 174 | "syntax_highlighter": "GDScript" 175 | } 176 | 177 | [res://addons/quest_manager/plugin.gd] 178 | 179 | state={ 180 | "bookmarks": PackedInt32Array(), 181 | "breakpoints": PackedInt32Array(), 182 | "column": 0, 183 | "folded_lines": Array[int]([]), 184 | "h_scroll_position": 0, 185 | "row": 0, 186 | "scroll_position": 0.0, 187 | "selection": false, 188 | "syntax_highlighter": "GDScript" 189 | } 190 | 191 | [res://addons/quest_manager/plugin.cfg] 192 | 193 | state={ 194 | "bookmarks": PackedInt32Array(), 195 | "breakpoints": PackedInt32Array(), 196 | "column": 18, 197 | "folded_lines": Array[int]([]), 198 | "h_scroll_position": 0, 199 | "row": 6, 200 | "scroll_position": 0.0, 201 | "selection": false, 202 | "syntax_highlighter": "Plain Text" 203 | } 204 | 205 | [res://addons/quest_manager/Editor/Nodes/Step.gd] 206 | 207 | state={ 208 | "bookmarks": PackedInt32Array(), 209 | "breakpoints": PackedInt32Array(), 210 | "column": 0, 211 | "folded_lines": Array[int]([]), 212 | "h_scroll_position": 0, 213 | "row": 0, 214 | "scroll_position": 0.0, 215 | "selection": false, 216 | "syntax_highlighter": "GDScript" 217 | } 218 | 219 | [res://addons/quest_manager/Editor/Nodes/Timer_Step.gd] 220 | 221 | state={ 222 | "bookmarks": PackedInt32Array(), 223 | "breakpoints": PackedInt32Array(), 224 | "column": 0, 225 | "folded_lines": Array[int]([]), 226 | "h_scroll_position": 0, 227 | "row": 0, 228 | "scroll_position": 0.0, 229 | "selection": false, 230 | "syntax_highlighter": "GDScript" 231 | } 232 | 233 | [res://addons/quest_manager/Editor/Nodes/Branch.gd] 234 | 235 | state={ 236 | "bookmarks": PackedInt32Array(), 237 | "breakpoints": PackedInt32Array(), 238 | "column": 0, 239 | "folded_lines": Array[int]([]), 240 | "h_scroll_position": 0, 241 | "row": 0, 242 | "scroll_position": 0.0, 243 | "selection": false, 244 | "syntax_highlighter": "GDScript" 245 | } 246 | 247 | [res://addons/quest_manager/Editor/Nodes/IncrementalStep.gd] 248 | 249 | state={ 250 | "bookmarks": PackedInt32Array(), 251 | "breakpoints": PackedInt32Array(), 252 | "column": 0, 253 | "folded_lines": Array[int]([]), 254 | "h_scroll_position": 0, 255 | "row": 0, 256 | "scroll_position": 0.0, 257 | "selection": false, 258 | "syntax_highlighter": "GDScript" 259 | } 260 | 261 | [res://addons/quest_manager/Editor/Nodes/Callable_Step.gd] 262 | 263 | state={ 264 | "bookmarks": PackedInt32Array(), 265 | "breakpoints": PackedInt32Array(), 266 | "column": 28, 267 | "folded_lines": Array[int]([]), 268 | "h_scroll_position": 143, 269 | "row": 19, 270 | "scroll_position": 12.0, 271 | "selection": false, 272 | "syntax_highlighter": "GDScript" 273 | } 274 | 275 | [res://addons/quest_manager/Editor/Nodes/items_step.gd] 276 | 277 | state={ 278 | "bookmarks": PackedInt32Array(), 279 | "breakpoints": PackedInt32Array(), 280 | "column": 0, 281 | "folded_lines": Array[int]([]), 282 | "h_scroll_position": 0, 283 | "row": 0, 284 | "scroll_position": 0.0, 285 | "selection": false, 286 | "syntax_highlighter": "GDScript" 287 | } 288 | 289 | [res://addons/quest_manager/Editor/Nodes/EditorNode.gd] 290 | 291 | state={ 292 | "bookmarks": PackedInt32Array(), 293 | "breakpoints": PackedInt32Array(), 294 | "column": 21, 295 | "folded_lines": Array[int]([]), 296 | "h_scroll_position": 53, 297 | "row": 59, 298 | "scroll_position": 53.0, 299 | "selection": true, 300 | "selection_from_column": 11, 301 | "selection_from_line": 59, 302 | "selection_to_column": 21, 303 | "selection_to_line": 59, 304 | "syntax_highlighter": "GDScript" 305 | } 306 | 307 | [res://addons/quest_manager/Editor/Nodes/Meta_data.gd] 308 | 309 | state={ 310 | "bookmarks": PackedInt32Array(), 311 | "breakpoints": PackedInt32Array(), 312 | "column": 22, 313 | "folded_lines": Array[int]([]), 314 | "h_scroll_position": 8, 315 | "row": 44, 316 | "scroll_position": 34.0, 317 | "selection": true, 318 | "selection_from_column": 12, 319 | "selection_from_line": 44, 320 | "selection_to_column": 22, 321 | "selection_to_line": 44, 322 | "syntax_highlighter": "GDScript" 323 | } 324 | 325 | [res://addons/quest_manager/Examples/ExampleOne/Player.gd] 326 | 327 | state={ 328 | "bookmarks": PackedInt32Array(), 329 | "breakpoints": PackedInt32Array(), 330 | "column": 3, 331 | "folded_lines": Array[int]([]), 332 | "h_scroll_position": 0, 333 | "row": 30, 334 | "scroll_position": 0.0, 335 | "selection": true, 336 | "selection_from_column": 1, 337 | "selection_from_line": 30, 338 | "selection_to_column": 3, 339 | "selection_to_line": 30, 340 | "syntax_highlighter": "GDScript" 341 | } 342 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/Quest_Rewards.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://dirh1n1wsgfst"] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/Editor/Nodes/Quest_Rewards.gd" id="1_y2wej"] 4 | 5 | [node name="84e7a4369c" type="GraphNode"] 6 | custom_minimum_size = Vector2(250, 150) 7 | offset_right = 247.0 8 | offset_bottom = 147.0 9 | tooltip_text = "Quest Reward nodes are items the player receive on quest completion. 10 | i.e How much coins this quest rewards or 11 | what items the player receives 12 | " 13 | resizable = true 14 | title = "Quest Rewards" 15 | slot/0/left_enabled = false 16 | slot/0/left_type = 2 17 | slot/0/left_color = Color(1, 1, 1, 1) 18 | slot/0/left_icon = null 19 | slot/0/right_enabled = true 20 | slot/0/right_type = 3 21 | slot/0/right_color = Color(1, 0.843137, 0, 1) 22 | slot/0/right_icon = null 23 | slot/0/draw_stylebox = true 24 | slot/1/left_enabled = false 25 | slot/1/left_type = 0 26 | slot/1/left_color = Color(1, 1, 1, 1) 27 | slot/1/left_icon = null 28 | slot/1/right_enabled = false 29 | slot/1/right_type = 0 30 | slot/1/right_color = Color(1, 1, 1, 1) 31 | slot/1/right_icon = null 32 | slot/1/draw_stylebox = true 33 | slot/2/left_enabled = false 34 | slot/2/left_type = 0 35 | slot/2/left_color = Color(1, 1, 1, 1) 36 | slot/2/left_icon = null 37 | slot/2/right_enabled = false 38 | slot/2/right_type = 0 39 | slot/2/right_color = Color(1, 1, 1, 1) 40 | slot/2/right_icon = null 41 | slot/2/draw_stylebox = true 42 | script = ExtResource("1_y2wej") 43 | 44 | [node name="vb" type="VBoxContainer" parent="."] 45 | layout_mode = 2 46 | size_flags_vertical = 3 47 | 48 | [node name="data" type="VBoxContainer" parent="vb"] 49 | unique_name_in_owner = true 50 | layout_mode = 2 51 | size_flags_horizontal = 3 52 | size_flags_vertical = 3 53 | alignment = 1 54 | 55 | [node name="AddButton" type="MenuButton" parent="vb"] 56 | unique_name_in_owner = true 57 | layout_mode = 2 58 | text = "Add" 59 | switch_on_hover = true 60 | item_count = 6 61 | popup/item_0/text = "String" 62 | popup/item_0/id = 0 63 | popup/item_1/text = "Int" 64 | popup/item_1/id = 1 65 | popup/item_2/text = "Float" 66 | popup/item_2/id = 2 67 | popup/item_3/text = "Boolean" 68 | popup/item_3/id = 3 69 | popup/item_4/text = "Vector2" 70 | popup/item_4/id = 4 71 | popup/item_5/text = "Vector3" 72 | popup/item_5/id = 5 73 | 74 | [node name="Types" type="Control" parent="."] 75 | visible = false 76 | layout_mode = 2 77 | mouse_filter = 2 78 | 79 | [node name="String" type="HBoxContainer" parent="Types" groups=["string"]] 80 | unique_name_in_owner = true 81 | layout_mode = 1 82 | anchors_preset = 14 83 | anchor_top = 0.5 84 | anchor_right = 1.0 85 | anchor_bottom = 0.5 86 | offset_left = -88.0 87 | offset_top = -15.5 88 | offset_right = 88.0 89 | offset_bottom = 15.5 90 | grow_horizontal = 2 91 | grow_vertical = 2 92 | alignment = 1 93 | 94 | [node name="delete" type="Button" parent="Types/String"] 95 | layout_mode = 2 96 | text = "X" 97 | flat = true 98 | 99 | [node name="name" type="LineEdit" parent="Types/String"] 100 | layout_mode = 2 101 | size_flags_horizontal = 3 102 | placeholder_text = "String Name" 103 | 104 | [node name="data" type="LineEdit" parent="Types/String"] 105 | layout_mode = 2 106 | size_flags_horizontal = 3 107 | placeholder_text = "String Value" 108 | 109 | [node name="Integer" type="HBoxContainer" parent="Types" groups=["numerical"]] 110 | unique_name_in_owner = true 111 | layout_mode = 1 112 | anchors_preset = 14 113 | anchor_top = 0.5 114 | anchor_right = 1.0 115 | anchor_bottom = 0.5 116 | offset_top = -15.5 117 | offset_bottom = 15.5 118 | grow_horizontal = 2 119 | grow_vertical = 2 120 | alignment = 1 121 | 122 | [node name="delete" type="Button" parent="Types/Integer"] 123 | layout_mode = 2 124 | text = "X" 125 | flat = true 126 | 127 | [node name="name" type="LineEdit" parent="Types/Integer"] 128 | layout_mode = 2 129 | size_flags_horizontal = 3 130 | placeholder_text = "Integer name" 131 | 132 | [node name="data" type="SpinBox" parent="Types/Integer"] 133 | layout_mode = 2 134 | size_flags_horizontal = 3 135 | size_flags_stretch_ratio = 0.2 136 | min_value = -1e+07 137 | max_value = 1e+07 138 | allow_greater = true 139 | allow_lesser = true 140 | alignment = 1 141 | update_on_text_changed = true 142 | 143 | [node name="Bool" type="HBoxContainer" parent="Types" groups=["boolean"]] 144 | unique_name_in_owner = true 145 | layout_mode = 1 146 | anchors_preset = 14 147 | anchor_top = 0.5 148 | anchor_right = 1.0 149 | anchor_bottom = 0.5 150 | offset_top = -15.5 151 | offset_bottom = 15.5 152 | grow_horizontal = 2 153 | grow_vertical = 2 154 | alignment = 1 155 | 156 | [node name="delete" type="Button" parent="Types/Bool"] 157 | layout_mode = 2 158 | text = "X" 159 | flat = true 160 | 161 | [node name="name" type="LineEdit" parent="Types/Bool"] 162 | layout_mode = 2 163 | size_flags_horizontal = 3 164 | placeholder_text = "Boolean name" 165 | 166 | [node name="data" type="CheckBox" parent="Types/Bool"] 167 | layout_mode = 2 168 | size_flags_horizontal = 3 169 | size_flags_stretch_ratio = 0.2 170 | 171 | [node name="Float" type="HBoxContainer" parent="Types" groups=["numerical"]] 172 | unique_name_in_owner = true 173 | layout_mode = 1 174 | anchors_preset = 14 175 | anchor_top = 0.5 176 | anchor_right = 1.0 177 | anchor_bottom = 0.5 178 | offset_top = -15.5 179 | offset_bottom = 15.5 180 | grow_horizontal = 2 181 | grow_vertical = 2 182 | alignment = 1 183 | 184 | [node name="delete" type="Button" parent="Types/Float"] 185 | layout_mode = 2 186 | text = "X" 187 | flat = true 188 | 189 | [node name="name" type="LineEdit" parent="Types/Float"] 190 | layout_mode = 2 191 | size_flags_horizontal = 3 192 | placeholder_text = "Float name" 193 | 194 | [node name="data" type="SpinBox" parent="Types/Float"] 195 | layout_mode = 2 196 | size_flags_horizontal = 3 197 | size_flags_stretch_ratio = 0.2 198 | min_value = -1e+07 199 | max_value = 1e+07 200 | step = 0.001 201 | allow_greater = true 202 | allow_lesser = true 203 | alignment = 1 204 | update_on_text_changed = true 205 | 206 | [node name="Vector2" type="HBoxContainer" parent="Types" groups=["vector2"]] 207 | unique_name_in_owner = true 208 | layout_mode = 1 209 | anchors_preset = 14 210 | anchor_top = 0.5 211 | anchor_right = 1.0 212 | anchor_bottom = 0.5 213 | offset_top = -15.5 214 | offset_bottom = 15.5 215 | grow_horizontal = 2 216 | grow_vertical = 2 217 | alignment = 1 218 | 219 | [node name="delete" type="Button" parent="Types/Vector2"] 220 | layout_mode = 2 221 | text = "X" 222 | flat = true 223 | 224 | [node name="name" type="LineEdit" parent="Types/Vector2"] 225 | custom_minimum_size = Vector2(120, 0) 226 | layout_mode = 2 227 | size_flags_horizontal = 3 228 | placeholder_text = "Vector2 name" 229 | 230 | [node name="x" type="SpinBox" parent="Types/Vector2"] 231 | layout_mode = 2 232 | size_flags_horizontal = 0 233 | size_flags_stretch_ratio = 0.1 234 | min_value = -1e+07 235 | max_value = 1e+07 236 | step = 0.001 237 | allow_greater = true 238 | allow_lesser = true 239 | alignment = 1 240 | update_on_text_changed = true 241 | 242 | [node name="y" type="SpinBox" parent="Types/Vector2"] 243 | layout_mode = 2 244 | size_flags_horizontal = 0 245 | size_flags_stretch_ratio = 0.1 246 | min_value = -1e+07 247 | max_value = 1e+07 248 | step = 0.001 249 | allow_greater = true 250 | allow_lesser = true 251 | alignment = 1 252 | update_on_text_changed = true 253 | 254 | [node name="Vector3" type="HBoxContainer" parent="Types" groups=["vector3"]] 255 | unique_name_in_owner = true 256 | layout_mode = 1 257 | anchors_preset = 14 258 | anchor_top = 0.5 259 | anchor_right = 1.0 260 | anchor_bottom = 0.5 261 | offset_top = -15.5 262 | offset_bottom = 15.5 263 | grow_horizontal = 2 264 | grow_vertical = 2 265 | alignment = 1 266 | 267 | [node name="delete" type="Button" parent="Types/Vector3"] 268 | layout_mode = 2 269 | text = "X" 270 | flat = true 271 | 272 | [node name="name" type="LineEdit" parent="Types/Vector3"] 273 | layout_mode = 2 274 | size_flags_horizontal = 3 275 | placeholder_text = "Vector3 name" 276 | 277 | [node name="x" type="SpinBox" parent="Types/Vector3"] 278 | layout_mode = 2 279 | size_flags_horizontal = 3 280 | size_flags_stretch_ratio = 0.2 281 | min_value = -1e+07 282 | max_value = 1e+07 283 | step = 0.001 284 | allow_greater = true 285 | allow_lesser = true 286 | alignment = 1 287 | update_on_text_changed = true 288 | 289 | [node name="y" type="SpinBox" parent="Types/Vector3"] 290 | layout_mode = 2 291 | size_flags_horizontal = 3 292 | size_flags_stretch_ratio = 0.2 293 | min_value = -1e+07 294 | max_value = 1e+07 295 | step = 0.001 296 | allow_greater = true 297 | allow_lesser = true 298 | alignment = 1 299 | update_on_text_changed = true 300 | 301 | [node name="z" type="SpinBox" parent="Types/Vector3"] 302 | layout_mode = 2 303 | size_flags_horizontal = 3 304 | size_flags_stretch_ratio = 0.2 305 | min_value = -1e+07 306 | max_value = 1e+07 307 | step = 0.001 308 | allow_greater = true 309 | allow_lesser = true 310 | alignment = 1 311 | update_on_text_changed = true 312 | 313 | [node name="id_lbl" type="LineEdit" parent="."] 314 | layout_mode = 2 315 | size_flags_vertical = 6 316 | text = "84e7a4369c" 317 | editable = false 318 | -------------------------------------------------------------------------------- /addons/quest_manager/Editor/Nodes/Meta_data.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=2 format=3 uid="uid://dhmvblhnaeape"] 2 | 3 | [ext_resource type="Script" path="res://addons/quest_manager/Editor/Nodes/Meta_data.gd" id="1_q8meh"] 4 | 5 | [node name="5d2223dea3" type="GraphNode"] 6 | custom_minimum_size = Vector2(250, 150) 7 | offset_right = 247.0 8 | offset_bottom = 147.0 9 | tooltip_text = "Meta data nodes are extra parameters you can add to each quest/quest step to keep 10 | track of something related to the quest. 11 | i.e some extra condition to progress a step or other quest related variables. 12 | This data is not directly used by the quest manager but you can access it using 13 | QuestManager.get_quest_meta_data(quest_name) or QuestManager.get_step_meta_data(step_id) 14 | " 15 | resizable = true 16 | title = "Meta Data" 17 | slot/0/left_enabled = false 18 | slot/0/left_type = 2 19 | slot/0/left_color = Color(1, 1, 1, 1) 20 | slot/0/left_icon = null 21 | slot/0/right_enabled = true 22 | slot/0/right_type = 2 23 | slot/0/right_color = Color(0, 0, 1, 1) 24 | slot/0/right_icon = null 25 | slot/0/draw_stylebox = true 26 | slot/1/left_enabled = false 27 | slot/1/left_type = 0 28 | slot/1/left_color = Color(1, 1, 1, 1) 29 | slot/1/left_icon = null 30 | slot/1/right_enabled = false 31 | slot/1/right_type = 0 32 | slot/1/right_color = Color(1, 1, 1, 1) 33 | slot/1/right_icon = null 34 | slot/1/draw_stylebox = true 35 | slot/2/left_enabled = false 36 | slot/2/left_type = 0 37 | slot/2/left_color = Color(1, 1, 1, 1) 38 | slot/2/left_icon = null 39 | slot/2/right_enabled = false 40 | slot/2/right_type = 0 41 | slot/2/right_color = Color(1, 1, 1, 1) 42 | slot/2/right_icon = null 43 | slot/2/draw_stylebox = true 44 | script = ExtResource("1_q8meh") 45 | 46 | [node name="vb" type="VBoxContainer" parent="."] 47 | layout_mode = 2 48 | size_flags_vertical = 3 49 | 50 | [node name="data" type="VBoxContainer" parent="vb"] 51 | unique_name_in_owner = true 52 | layout_mode = 2 53 | size_flags_horizontal = 3 54 | size_flags_vertical = 3 55 | alignment = 1 56 | 57 | [node name="AddButton" type="MenuButton" parent="vb"] 58 | unique_name_in_owner = true 59 | layout_mode = 2 60 | text = "Add" 61 | switch_on_hover = true 62 | item_count = 6 63 | popup/item_0/text = "String" 64 | popup/item_0/id = 0 65 | popup/item_1/text = "Int" 66 | popup/item_1/id = 1 67 | popup/item_2/text = "Float" 68 | popup/item_2/id = 2 69 | popup/item_3/text = "Boolean" 70 | popup/item_3/id = 3 71 | popup/item_4/text = "Vector2" 72 | popup/item_4/id = 4 73 | popup/item_5/text = "Vector3" 74 | popup/item_5/id = 5 75 | 76 | [node name="Types" type="Control" parent="."] 77 | visible = false 78 | layout_mode = 2 79 | mouse_filter = 2 80 | 81 | [node name="String" type="HBoxContainer" parent="Types" groups=["string"]] 82 | unique_name_in_owner = true 83 | layout_mode = 1 84 | anchors_preset = 14 85 | anchor_top = 0.5 86 | anchor_right = 1.0 87 | anchor_bottom = 0.5 88 | offset_left = -88.0 89 | offset_top = -15.5 90 | offset_right = 88.0 91 | offset_bottom = 15.5 92 | grow_horizontal = 2 93 | grow_vertical = 2 94 | alignment = 1 95 | 96 | [node name="delete" type="Button" parent="Types/String"] 97 | layout_mode = 2 98 | text = "X" 99 | flat = true 100 | 101 | [node name="name" type="LineEdit" parent="Types/String"] 102 | layout_mode = 2 103 | size_flags_horizontal = 3 104 | placeholder_text = "String Name" 105 | 106 | [node name="data" type="LineEdit" parent="Types/String"] 107 | layout_mode = 2 108 | size_flags_horizontal = 3 109 | placeholder_text = "String Value" 110 | 111 | [node name="Integer" type="HBoxContainer" parent="Types" groups=["numerical"]] 112 | unique_name_in_owner = true 113 | layout_mode = 1 114 | anchors_preset = 14 115 | anchor_top = 0.5 116 | anchor_right = 1.0 117 | anchor_bottom = 0.5 118 | offset_top = -15.5 119 | offset_bottom = 15.5 120 | grow_horizontal = 2 121 | grow_vertical = 2 122 | alignment = 1 123 | 124 | [node name="delete" type="Button" parent="Types/Integer"] 125 | layout_mode = 2 126 | text = "X" 127 | flat = true 128 | 129 | [node name="name" type="LineEdit" parent="Types/Integer"] 130 | layout_mode = 2 131 | size_flags_horizontal = 3 132 | placeholder_text = "Integer name" 133 | 134 | [node name="data" type="SpinBox" parent="Types/Integer"] 135 | layout_mode = 2 136 | size_flags_horizontal = 3 137 | size_flags_stretch_ratio = 0.2 138 | min_value = -1e+07 139 | max_value = 1e+07 140 | allow_greater = true 141 | allow_lesser = true 142 | alignment = 1 143 | update_on_text_changed = true 144 | 145 | [node name="Float" type="HBoxContainer" parent="Types" groups=["numerical"]] 146 | unique_name_in_owner = true 147 | layout_mode = 1 148 | anchors_preset = 14 149 | anchor_top = 0.5 150 | anchor_right = 1.0 151 | anchor_bottom = 0.5 152 | offset_top = -15.5 153 | offset_bottom = 15.5 154 | grow_horizontal = 2 155 | grow_vertical = 2 156 | alignment = 1 157 | 158 | [node name="delete" type="Button" parent="Types/Float"] 159 | layout_mode = 2 160 | text = "X" 161 | flat = true 162 | 163 | [node name="name" type="LineEdit" parent="Types/Float"] 164 | layout_mode = 2 165 | size_flags_horizontal = 3 166 | placeholder_text = "Float name" 167 | 168 | [node name="data" type="SpinBox" parent="Types/Float"] 169 | layout_mode = 2 170 | size_flags_horizontal = 3 171 | size_flags_stretch_ratio = 0.2 172 | min_value = -1e+07 173 | max_value = 1e+07 174 | step = 0.001 175 | allow_greater = true 176 | allow_lesser = true 177 | alignment = 1 178 | update_on_text_changed = true 179 | 180 | [node name="Vector2" type="HBoxContainer" parent="Types" groups=["vector2"]] 181 | unique_name_in_owner = true 182 | layout_mode = 1 183 | anchors_preset = 14 184 | anchor_top = 0.5 185 | anchor_right = 1.0 186 | anchor_bottom = 0.5 187 | offset_top = -15.5 188 | offset_bottom = 15.5 189 | grow_horizontal = 2 190 | grow_vertical = 2 191 | alignment = 1 192 | 193 | [node name="delete" type="Button" parent="Types/Vector2"] 194 | layout_mode = 2 195 | text = "X" 196 | flat = true 197 | 198 | [node name="name" type="LineEdit" parent="Types/Vector2"] 199 | custom_minimum_size = Vector2(120, 0) 200 | layout_mode = 2 201 | size_flags_horizontal = 3 202 | placeholder_text = "Vector2 name" 203 | 204 | [node name="x" type="SpinBox" parent="Types/Vector2"] 205 | layout_mode = 2 206 | size_flags_horizontal = 0 207 | size_flags_stretch_ratio = 0.1 208 | min_value = -1e+07 209 | max_value = 1e+07 210 | step = 0.001 211 | allow_greater = true 212 | allow_lesser = true 213 | alignment = 1 214 | update_on_text_changed = true 215 | 216 | [node name="y" type="SpinBox" parent="Types/Vector2"] 217 | layout_mode = 2 218 | size_flags_horizontal = 0 219 | size_flags_stretch_ratio = 0.1 220 | min_value = -1e+07 221 | max_value = 1e+07 222 | step = 0.001 223 | allow_greater = true 224 | allow_lesser = true 225 | alignment = 1 226 | update_on_text_changed = true 227 | 228 | [node name="Vector3" type="HBoxContainer" parent="Types" groups=["vector3"]] 229 | unique_name_in_owner = true 230 | layout_mode = 1 231 | anchors_preset = 14 232 | anchor_top = 0.5 233 | anchor_right = 1.0 234 | anchor_bottom = 0.5 235 | offset_top = -15.5 236 | offset_bottom = 15.5 237 | grow_horizontal = 2 238 | grow_vertical = 2 239 | alignment = 1 240 | 241 | [node name="delete" type="Button" parent="Types/Vector3"] 242 | layout_mode = 2 243 | text = "X" 244 | flat = true 245 | 246 | [node name="name" type="LineEdit" parent="Types/Vector3"] 247 | layout_mode = 2 248 | size_flags_horizontal = 3 249 | placeholder_text = "Vector3 name" 250 | 251 | [node name="x" type="SpinBox" parent="Types/Vector3"] 252 | layout_mode = 2 253 | size_flags_horizontal = 3 254 | size_flags_stretch_ratio = 0.2 255 | min_value = -1e+07 256 | max_value = 1e+07 257 | step = 0.001 258 | allow_greater = true 259 | allow_lesser = true 260 | alignment = 1 261 | update_on_text_changed = true 262 | 263 | [node name="y" type="SpinBox" parent="Types/Vector3"] 264 | layout_mode = 2 265 | size_flags_horizontal = 3 266 | size_flags_stretch_ratio = 0.2 267 | min_value = -1e+07 268 | max_value = 1e+07 269 | step = 0.001 270 | allow_greater = true 271 | allow_lesser = true 272 | alignment = 1 273 | update_on_text_changed = true 274 | 275 | [node name="z" type="SpinBox" parent="Types/Vector3"] 276 | layout_mode = 2 277 | size_flags_horizontal = 3 278 | size_flags_stretch_ratio = 0.2 279 | min_value = -1e+07 280 | max_value = 1e+07 281 | step = 0.001 282 | allow_greater = true 283 | allow_lesser = true 284 | alignment = 1 285 | update_on_text_changed = true 286 | 287 | [node name="Bool" type="HBoxContainer" parent="Types" groups=["boolean"]] 288 | unique_name_in_owner = true 289 | layout_mode = 1 290 | anchors_preset = 14 291 | anchor_top = 0.5 292 | anchor_right = 1.0 293 | anchor_bottom = 0.5 294 | offset_top = -15.5 295 | offset_bottom = 15.5 296 | grow_horizontal = 2 297 | grow_vertical = 2 298 | alignment = 1 299 | 300 | [node name="delete" type="Button" parent="Types/Bool"] 301 | layout_mode = 2 302 | text = "X" 303 | flat = true 304 | 305 | [node name="name" type="LineEdit" parent="Types/Bool"] 306 | layout_mode = 2 307 | size_flags_horizontal = 3 308 | placeholder_text = "Boolean name" 309 | 310 | [node name="data" type="CheckBox" parent="Types/Bool"] 311 | layout_mode = 2 312 | size_flags_horizontal = 3 313 | size_flags_stretch_ratio = 0.2 314 | 315 | [node name="id_lbl" type="LineEdit" parent="."] 316 | layout_mode = 2 317 | size_flags_vertical = 6 318 | text = "f6257ac3a1" 319 | editable = false 320 | --------------------------------------------------------------------------------