CHAR ANIMATIONS COMPLETE - 52 frames generated
Session: 11hr marathon (Jan 8, 2026) Assets: 52 animation frames total Progress: 36% to 54% Kai: 20 frames (idle 4, walk 6, dig 5, swing 5) Ana: 10 frames (idle 4, walk 6) Gronk: 10 frames (idle 4, walk 6) Susi: 12 frames (idle 4, run 6, bark 2) Demo Status: 157/292 assets (54%) Remaining: 135 assets Files updated: - TASK_TRACKER.md - PRODUCTION_CHECKLIST.md - 64 new PNG assets - Susi reference updated
This commit is contained in:
310
src/data/QuestDataLoader.js
Normal file
310
src/data/QuestDataLoader.js
Normal file
@@ -0,0 +1,310 @@
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user