Character Identity
Define la identidad y personalidad de tus NPCs. Este recurso contiene toda la informacion necesaria para que la IA genere dialogos consistentes con la personalidad del personaje.
Vision General
CharacterIdentity es un Resource de Godot que encapsula la personalidad completa de un NPC. Cuando el LLM genera respuestas, usa el metodo to_system_prompt() para convertir estos datos en instrucciones que guian su comportamiento.
Flujo de datos
CharacterIdentity -> to_system_prompt()
-> LlamaInterface -> Respuesta con personalidad
📋 Grupo: Identity
| Propiedad | Tipo | Descripcion |
|---|---|---|
| character_id | String | Identificador unico del personaje (para saves y referencias) |
| character_name | String | Nombre visible en dialogos |
| portrait | Texture2D | Textura opcional para UI |
🎭 Grupo: Personality
| Propiedad | Tipo | Descripcion |
|---|---|---|
| personality | String | Rasgos de personalidad y tendencias |
| background | String | Historia, origen y experiencias |
| speech_style | SpeechStyle | Preset de estilo de habla |
| speech_patterns | String | Patrones de habla personalizados |
🧠 Grupo: Knowledge & Motivations
| Propiedad | Tipo | Descripcion |
|---|---|---|
| knowledge | Array[String] | Temas que el personaje conoce |
| goals | Array[String] | Objetivos del personaje |
| fears | Array[String] | Miedos y cosas que evita |
| secrets | Array[String] | Informacion oculta |
👥 Grupo: Social
| Propiedad | Tipo | Descripcion |
|---|---|---|
| relationships | Dictionary | Diccionario character_id -> descripcion |
| example_dialogues | Array[String] | Dialogos de ejemplo que muestran su voz |
🗣 Estilos de Habla (SpeechStyle)
CASUAL
Relajado, usa contracciones e informalidad
FORMAL
Profesional, gramatica correcta
MEDIEVAL
Arcaico, usa "vos", "habeis", etc.
SCIENTIFIC
Tecnico, terminologia precisa
STREET
Jerga callejera, expresiones coloquiales
POETIC
Metaforico, lenguaje florido
MILITARY
Directo, oraciones cortas
CHILDISH
Simple, jugueton
ELDERLY
Sabio, pausado, usa proverbios
ROBOTIC
Mecanico, literal, sin emociones
🔧 Metodos Principales
| Metodo | Retorno | Descripcion |
|---|---|---|
| to_system_prompt() | String | Convierte los datos a system prompt para el LLM |
| to_dict() | Dictionary | Serializa a diccionario para JSON/storage |
| from_dict(dict) | CharacterIdentity | Crea CharacterIdentity desde diccionario |
| is_valid() | bool | Verifica si tiene datos minimos requeridos |
| get_summary() | String | Resumen corto para debugging |
| estimate_tokens() | int | Estima tokens que usara el prompt (~4 chars/token) |
📝 Ejemplo de Uso
# Crear una identidad de personaje
var blacksmith = CharacterIdentity.new()
# Configurar identidad
blacksmith.character_id = "blacksmith_01"
blacksmith.character_name = "Grondar"
blacksmith.portrait = preload("res://portraits/grondar.png")
# Configurar personalidad
blacksmith.personality = "Gruñon pero con buen corazon. Perfeccionista con su trabajo."
blacksmith.background = "Ex-soldado que perdio su brazo en batalla. Ahora forja armas."
blacksmith.speech_style = CharacterIdentity.SpeechStyle.MILITARY
blacksmith.speech_patterns = "Usa metaforas de batalla. Dice 'muchacho' a menudo."
# Conocimiento y motivaciones
blacksmith.knowledge = ["forja", "metales", "guerra del norte", "armas legendarias"]
blacksmith.goals = ["forjar su obra maestra", "encontrar aprendiz digno"]
blacksmith.fears = ["perder su otro brazo", "ser olvidado"]
blacksmith.secrets = ["Sabe donde esta la Espada del Rey"]
# Relaciones
blacksmith.relationships = {
"mayor_01": "Viejo amigo de guerra, le debe la vida",
"merchant_01": "Rival comercial, desconfia de el"
}
# Ejemplos de dialogo
blacksmith.example_dialogues = [
"Escucha, muchacho, el acero no miente.",
"Esta espada? Tardare tres lunas. La perfeccion no se apura."
]
# Usar con DialogueManager
var dialogue_manager = DialogueManager.new()
dialogue_manager.character_identity = blacksmith
dialogue_manager.start_dialogue()