Receta: incorporar hambre a los personajes¶
Supongamos que querés que un personaje pierda saciedad con el tiempo, pueda alimentarse y reciba consecuencias cuando el nivel llega a cero. El problema interesante no es restar un número: es colaborar con inventario, salud, IA, presentación y guardado sin convertir Hunger en un administrador universal.
Estado e invariantes¶
La instancia del personaje conserva current_satiety y un máximo definido por sus atributos. El módulo de necesidades garantiza que la saciedad no supere los límites y especifica si puede disminuir durante pausa, sueño u otras situaciones.
Las definiciones de comidas son compartidas. Un ítem individual y su cantidad en el inventario son estado mutable: no deben guardarse en el YAML de la definición.
Primer corte vertical¶
CharacterNeeds:
current_satiety
max_satiety
NeedsSystem.tick:
for each affected character:
lower_satiety_as_rules_allow()
UseFood action:
validate_actor_and_item()
validate_character_needs()
apply_food_effect()
consume_inventory_item()
return_result()
La operación de consumo debe definir qué ocurre cuando no se puede completar una parte. Validar antes de aplicar y utilizar las interfaces de cada propietario suele alcanzar para una primera versión local.
Definiciones configurables¶
id: item.apple
kind: consumable
use:
strategy: consume_food
effects:
- type: restore_satiety
amount: 18
- type: consume_item
amount: 1
El algoritmo consume_food existe en código. El YAML elige las operaciones permitidas y sus parámetros. Si se incorporan efectos arbitrarios, necesitás reglas claras de orden, rollback lógico e incompatibilidades.
IA y presentación¶
La IA detecta saciedad baja, busca alimentos o solicita consumir uno. No modifica la variable directamente. La UI lee un modelo observable y dibuja el nivel; no decide si comer fue válido.
Qué probar¶
- Comer con y sin comida disponible.
- Saciedad mínima y máxima.
- Múltiples solicitudes en el mismo tick.
- Guardar y restaurar una entidad hambrienta.
- Ejecutar cien ticks sin renderer.
- En red, rechazar resultados impuestos por un cliente.
Si crece a miles de NPC, medí el presupuesto del sistema y considerá un ritmo de simulación reducido para entidades lejanas. No empieces por ECS solo por existir un contador.
Fundamentos: Agregar una mecánica sin acoplar todo el juego, Estado del mundo, definiciones e identidad, Autoridad: quién puede cambiar el mundo, Gameplay dirigido por datos y comportamientos declarativos, Probar la simulación y medir antes de optimizar.