/** * QuestDataLoader.js * * Loads quest data from QUEST_MANIFEST.md v2.0 * Converts markdown quest definitions to QuestSystem format * * Integration: GameScene → QuestSystem → QuestDataLoader */ export default class QuestDataLoader { /** * Load all quests from Quest Manifest v2.0 * Returns array of quest objects ready for QuestSystem */ static loadAllQuests() { const quests = []; // Load all quests from manifest quests.push(...this.getMainStoryQuests()); quests.push(...this.getCollectionQuests()); quests.push(...this.getSocialQuests()); quests.push(...this.getProgressionQuests()); quests.push(...this.getBiomeQuests()); return quests; } /** * Main Story Quests (Kai's Journey - Ana's Search) */ static getMainStoryQuests() { return [ // Q001: Kje Sem? { id: 'q001_kje_sem', title: 'Kje Sem?', type: 'main_story', priority: 5, description: 'Kai se zbudi v kleti brez spominov. Nekaj je narobe...', objectives: [ { id: 'wake_up', text: 'Prebudi se', type: 'flag', flag: 'awakened', complete: false }, { id: 'explore', text: 'Raziskuj klet', type: 'flag', flag: 'explored_basement', complete: false }, { id: 'find_exit', text: 'Najdi izhod', type: 'flag', flag: 'found_exit', complete: false } ], rewards: { xp: 100, unlocks: ['surface'] }, dialogue: { start: ["...au glava... kje sm?", "Čak... kdo SM jaz sploh?!"], complete: ["Včeri sm bla tam, zdej pa tuki...", "MORŠ NEC NAJT!"] }, vfx: { start: 'amnesia_blur', complete: 'clarity' }, npc: null, location: 'basement' }, // Q002: Prvi Koraki { id: 'q002_prvi_koraki', title: 'Prvi Koraki', type: 'main_story', priority: 5, description: 'Nauči se osnovnih preživetvenh veščin', objectives: [ { id: 'plant', text: 'Posadi prvo seme', type: 'action', action: 'plant', required: 1, current: 0 }, { id: 'water', text: 'Zalij rastlino', type: 'action', action: 'water', required: 1, current: 0 }, { id: 'harvest', text: 'Požanji prvo sadje', type: 'action', action: 'harvest', required: 1, current: 0 } ], rewards: { xp: 200, items: ['seeds:10'], gold: 50 }, dialogue: { start: ["Hm... mam tools pa zemljo...", "Probam narit farmo?"], progress: ["Nice! Raste!"], complete: ["DAAAAJ! Prva plants! Kul!"] }, prerequisites: ['q001_kje_sem'], npc: null, location: 'farm' }, // Q003: Glas v Glavi { id: 'q003_glas_v_glavi', title: 'Glas v Glavi', type: 'main_story', priority: 5, description: 'Sliš glas... nekje iz daljave... poznaš ta glas', objectives: [ { id: 'hear_voice', text: 'Poslušaj glas', type: 'flag', flag: 'heard_ana', complete: false }, { id: 'find_photo', text: 'Najdi fotografijo', type: 'item', item: 'ana_photo', required: 1, current: 0 } ], rewards: { xp: 500, items: ['ana_photo'], unlocks: ['twin_bond_system'] }, dialogue: { start: ["...Kaj je to? Neki slišim...", "Dekle? Govori slovensko.. mam občutek da jo POZNAM?!"], onVoice: ["Kai, a me slišiš?", "Ne skrbi zame... najd se..."], complete: ["TA FOTKA! To je... ANA?!", "SESTRA! Moja SESTRA!", "...pomnim se! ANA JE ŽIVA!"] }, vfx: { start: 'amnesia_blur', onVoice: 'echo', complete: 'flashback' }, prerequisites: ['q002_prvi_koraki'], npc: null, location: 'basement_hidden' } ]; } /** * Collection Quests */ static getCollectionQuests() { return [ // Q010: 80 Crops Challenge { id: 'q010_80_crops', title: '80 Crops Challenge', type: 'collection', priority: 3, description: 'Požanji VSE različne vrste sadja (80 total!)', objectives: [ { id: 'crops', text: 'Različne vrste sadja (0/80)', type: 'collection', collection: 'unique_crops', required: 80, current: 0 } ], rewards: { xp: 5000, items: ['master_farmer_title'], gold: 10000, unlocks: ['greenhouse'] }, dialogue: { start: ["80 različnih crops? Challenge accepted!"], progress: ["Še {remaining} da konč!"], complete: ["DAAAAAJ 80/80! MASTER FARMER STATUS UNLOCKED!"] }, npc: null, location: 'farm' }, // Q011: Tree Planter { id: 'q011_tree_planter', title: 'Tree Planter Supreme', type: 'collection', priority: 2, description: 'Posadi vseh 11 vrst dreves', objectives: [ { id: 'trees', text: 'Različne vrste dreves (0/11)', type: 'collection', collection: 'unique_trees', required: 11, current: 0 } ], rewards: { xp: 2000, items: ['tree_planter_title'], unlocks: ['forest_zone'] }, dialogue: { start: ["11 vrst dreves... začenjam z oak!"], complete: ["DONE! Ves forest je moj!"] }, npc: 'arborist' }, // Q020: Creature Catalog { id: 'q020_creature_catalog', title: 'Creature Catalog Complete', type: 'collection', priority: 4, description: 'Dokumentiraj vse 99 creatures', objectives: [ { id: 'creatures', text: 'Dokumentirani creatures (0/99)', type: 'collection', collection: 'creature_entries', required: 99, current: 0 } ], rewards: { xp: 10000, items: ['master_zoologist_title'], unlocks: ['creature_lab'] }, dialogue: { start: ["HOLY SHIT 99 creatures?! OK gremo!"], progress: ["{current}/99... keep going!"], complete: ["COMPLETE CREATURE CATALOG! SICK!"] }, npc: 'researcher' } ]; } /** * Social/NPC Quests */ static getSocialQuests() { return [ // Q080: 166 Friends { id: 'q080_166_friends', title: '166 Friends', type: 'social', priority: 2, description: 'Spoznaj vse NPCje v igri', objectives: [ { id: 'npcs', text: 'Spoznani NPCji (0/166)', type: 'collection', collection: 'met_npcs', required: 166, current: 0 } ], rewards: { xp: 15000, items: ['social_butterfly_title'], gold: 50000 }, dialogue: { start: ["166 ljudi? Noben me ne pozna... but I'll try!"], progress: ["{current} friends... getting there!"], complete: ["166/166! EVERYONE KNOWS ME NOW!"] }, npc: null } ]; } /** * Progression/Building Quests */ static getProgressionQuests() { return [ // Q040: Gothic Farm Empire { id: 'q040_gothic_empire', title: 'Gothic Farm Empire', type: 'building', priority: 3, description: 'Zgradi vse 6 osnovnih farm buildingov', objectives: [ { id: 'farmhouse', text: 'Zgradi Farmhouse', type: 'building', building: 'farmhouse', complete: false }, { id: 'barn', text: 'Zgradi Barn', type: 'building', building: 'barn', complete: false }, { id: 'silo', text: 'Zgradi Silo', type: 'building', building: 'silo', complete: false }, { id: 'shed', text: 'Zgradi Shed', type: 'building', building: 'shed', complete: false }, { id: 'well', text: 'Zgradi Well', type: 'building', building: 'well', complete: false }, { id: 'windmill', text: 'Zgradi Windmill', type: 'building', building: 'windmill', complete: false } ], rewards: { xp: 3000, items: ['master_builder_title'], unlocks: ['advanced_buildings'] }, dialogue: { start: ["6 buildings... let's gooo!"], complete: ["FARM EMPIRE COMPLETE!"] }, npc: null } ]; } /** * Biome/Exploration Quests */ static getBiomeQuests() { return [ // Q050: Underwater Secrets { id: 'q050_underwater_secrets', title: 'Underwater Secrets', type: 'exploration', priority: 4, description: 'Raziskuj podvodni svet s popolnimi water physics!', objectives: [ { id: 'enter_water', text: 'Vstopi v vodo', type: 'flag', flag: 'entered_water', complete: false }, { id: 'dive_deep', text: 'Potoniruj 50m globoko', type: 'action', action: 'dive', required: 50, current: 0 }, { id: 'find_treasure', text: 'Najdi podvodni zaklad', type: 'item', item: 'underwater_treasure', required: 1, current: 0 } ], rewards: { xp: 2000, items: ['diving_gear'], unlocks: ['water_biomes'] }, dialogue: { start: ["Voda! Water physics so sick! Dreads plavajo! 😂"], complete: ["Podvodni treasures found! DOPE!"] }, vfx: { start: 'water_ripples', complete: 'treasure_glow' }, npc: null, location: 'cenote' }, // Q060: Baba Yaga's Challenge { id: 'q060_baba_yaga', title: 'Baba Yaga\'s Challenge', type: 'boss', priority: 5, description: 'Premagi Baba Yago in dobi broomstick!', objectives: [ { id: 'find_witch_forest', text: 'Najdi Witch Forest', type: 'flag', flag: 'found_witch_forest', complete: false }, { id: 'defeat_baba', text: 'Premagi Baba Yago', type: 'kill', target: 'baba_yaga', required: 1, current: 0 } ], rewards: { xp: 5000, items: ['baba_broomstick'], unlocks: ['flying_mount'] }, dialogue: { start: ["Witch Forest... creepy af"], onBoss: ["BABA YAGA?! OH SHIT!"], complete: ["DEFEATED! Broomstick je moj! LETIM!"] }, vfx: { start: 'dark_fog', onBoss: 'boss_appear', complete: 'boss_defeat' }, npc: null, location: 'witch_forest' }, // Q070: Jurassic Farm { id: 'q070_jurassic_farm', title: 'Jurassic Farm', type: 'exploration', priority: 3, description: 'Raziskuj Dinosaur Valley!', objectives: [ { id: 'find_valley', text: 'Najdi Dino Valley', type: 'flag', flag: 'found_dino_valley', complete: false }, { id: 'tame_dino', text: 'Prijaj dinozavra', type: 'action', action: 'tame_dinosaur', required: 1, current: 0 } ], rewards: { xp: 4000, items: ['dino_saddle'], unlocks: ['dino_mounts'] }, dialogue: { start: ["DINOZAVRI?! WHAT?!"], complete: ["TAMED T-REX! BEST DAY EVER!"] }, vfx: { onTame: 'tame_success' }, npc: null, location: 'dino_valley' } ]; } /** * Get quest by ID */ static getQuestById(questId) { const allQuests = this.loadAllQuests(); return allQuests.find(q => q.id === questId); } /** * Get quests by type */ static getQuestsByType(type) { const allQuests = this.loadAllQuests(); return allQuests.filter(q => q.type === type); } }