diff --git a/src/systems/generation/parser.js b/src/systems/generation/parser.js index 7fec28a..f61ab4d 100644 --- a/src/systems/generation/parser.js +++ b/src/systems/generation/parser.js @@ -187,7 +187,8 @@ function extractSkills(statsText) { } // Check if this is a skill line (starts with -, has level info) - const skillMatch = line.match(/^-\s*(.+?)\s*\(Lv\s*(\d+)\)/i); + // Try numeric format first: "- Skill Name (Lv 5)" + let skillMatch = line.match(/^-\s*(.+?)\s*\(Lv\s*(\d+)\)/i); if (skillMatch) { const skillName = skillMatch[1].trim(); const level = parseInt(skillMatch[2], 10) || 1; @@ -204,6 +205,45 @@ function extractSkills(statsText) { } else if (currentCategory && skillsData.categories[currentCategory]) { skillsData.categories[currentCategory].push(skill); } + } else { + // Fallback: Try text-based proficiency format: "- Skill Name (Proficient)" + const textMatch = line.match(/^-\s*(.+?)\s*\((.+?)\)/i); + if (textMatch) { + const skillName = textMatch[1].trim(); + const proficiencyText = textMatch[2].trim().toLowerCase(); + + // Map text proficiency to numeric level + const proficiencyMap = { + 'initiated': 1, + 'novice': 1, + 'basic': 2, + 'beginner': 2, + 'intermediate': 4, + 'proficient': 5, + 'competent': 6, + 'advanced': 7, + 'expert': 8, + 'mastered': 9, + 'master': 9, + 'grandmaster': 10, + 'legendary': 10 + }; + + const level = proficiencyMap[proficiencyText] || 5; // Default to 5 if unknown + + const skill = { + name: skillName, + level: level, + xp: 0, + maxXP: 100 + }; + + if (currentCategory === 'Uncategorized' || currentCategory === null) { + skillsData.uncategorized.push(skill); + } else if (currentCategory && skillsData.categories[currentCategory]) { + skillsData.categories[currentCategory].push(skill); + } + } } } diff --git a/src/systems/generation/promptBuilder.js b/src/systems/generation/promptBuilder.js index a1dbf42..17f1547 100644 --- a/src/systems/generation/promptBuilder.js +++ b/src/systems/generation/promptBuilder.js @@ -219,7 +219,7 @@ export function generateTrackerInstructions(includeHtmlPrompt = true, includeCon instructions += `- [Another Skill] (Lv [1-100])\n`; instructions += `Uncategorized:\n`; instructions += `- [Uncategorized Skill] (Lv [1-100])\n`; - instructions += `(Organize skills by logical categories like Combat, Magic, Social, Crafting, etc. Include level as integer 1-100. Skills without a clear category go in Uncategorized.)\n`; + instructions += `(Organize skills by logical categories like Combat, Magic, Social, Crafting, etc. IMPORTANT: Use numeric levels only - write "Lv 5" not "Proficient", "Lv 7" not "Advanced". Use integers 1-100 where 1=novice, 5=intermediate, 10=expert. Skills without a clear category go in Uncategorized.)\n`; } // Add inventory format based on feature flag