feat(backend): Implement base framework for Perks, Skills, and Derived Stats

This commit is contained in:
Joan
2026-02-25 10:05:14 +01:00
parent aa71a6be7c
commit 185781d168
5 changed files with 931 additions and 1 deletions

194
gamedata/perks.json Normal file
View File

@@ -0,0 +1,194 @@
{
"perks": {
"heavy_hitter": {
"name": {
"en": "Heavy Hitter",
"es": "Golpe Pesado"
},
"description": {
"en": "+10% damage with two-handed weapons",
"es": "+10% de daño con armas a dos manos"
},
"icon": "🔨",
"requirements": {
"strength": 10
},
"effects": {
"two_handed_damage_bonus": 0.1
}
},
"iron_fist": {
"name": {
"en": "Iron Fist",
"es": "Puño de Hierro"
},
"description": {
"en": "Unarmed attacks deal STR × 1 damage",
"es": "Los ataques sin armas hacen STR × 1 de daño"
},
"icon": "👊",
"requirements": {
"strength": 20
},
"effects": {
"unarmed_str_scaling": 1.0
}
},
"fleet_footed": {
"name": {
"en": "Fleet Footed",
"es": "Pies Ligeros"
},
"description": {
"en": "-20% stamina cost on travel",
"es": "-20% de coste de aguante al viajar"
},
"icon": "🏃",
"requirements": {
"agility": 10
},
"effects": {
"travel_stamina_reduction": 0.2
}
},
"lucky_strike": {
"name": {
"en": "Lucky Strike",
"es": "Golpe de Suerte"
},
"description": {
"en": "+5% crit chance",
"es": "+5% de probabilidad de crítico"
},
"icon": "🍀",
"requirements": {
"agility": 20
},
"effects": {
"crit_chance_bonus": 0.05
}
},
"thick_skin": {
"name": {
"en": "Thick Skin",
"es": "Piel Gruesa"
},
"description": {
"en": "+10% max HP",
"es": "+10% de vida máxima"
},
"icon": "🛡️",
"requirements": {
"endurance": 10
},
"effects": {
"max_hp_bonus_percent": 0.1
}
},
"resilient": {
"name": {
"en": "Resilient",
"es": "Resistente"
},
"description": {
"en": "Status effects last 1 fewer turn (min 1)",
"es": "Los efectos de estado duran 1 turno menos (mín 1)"
},
"icon": "💪",
"requirements": {
"endurance": 20
},
"effects": {
"status_duration_reduction": 1
}
},
"quick_learner": {
"name": {
"en": "Quick Learner",
"es": "Aprendiz Rápido"
},
"description": {
"en": "+15% XP gain",
"es": "+15% de experiencia ganada"
},
"icon": "📖",
"requirements": {
"intellect": 10
},
"effects": {
"xp_bonus": 0.15
}
},
"scavenger": {
"name": {
"en": "Scavenger",
"es": "Carroñero"
},
"description": {
"en": "+1 quantity on consumable/resource drops",
"es": "+1 cantidad en drops de consumibles/recursos"
},
"icon": "🦅",
"requirements": {
"intellect": 20
},
"effects": {
"consumable_loot_bonus": 1
}
},
"survivor": {
"name": {
"en": "Survivor",
"es": "Superviviente"
},
"description": {
"en": "Heal 2% max HP every combat turn",
"es": "Cura 2% de vida máxima cada turno de combate"
},
"icon": "❤️‍🩹",
"requirements": {
"endurance": 15,
"agility": 10
},
"effects": {
"combat_regen_percent": 0.02
}
},
"glass_cannon": {
"name": {
"en": "Glass Cannon",
"es": "Cañón de Cristal"
},
"description": {
"en": "+30% damage, -20% max HP",
"es": "+30% de daño, -20% de vida máxima"
},
"icon": "💣",
"requirements": {
"strength": 20,
"endurance_max": 8
},
"effects": {
"damage_bonus": 0.3,
"max_hp_penalty_percent": 0.2
}
},
"last_stand": {
"name": {
"en": "Last Stand",
"es": "Última Resistencia"
},
"description": {
"en": "Once per combat, survive lethal damage with 1 HP",
"es": "Una vez por combate, sobrevive daño letal con 1 de vida"
},
"icon": "💀",
"requirements": {
"endurance": 30
},
"effects": {
"cheat_death": true
}
}
}
}