beasty-visual-novel / scripting / generated-accessors.md
Accesores generados: VNVars y VNChars
VNVars y VNChars son archivos C# que el editor genera a partir de las variables y personajes de tu
proyecto. Hacen que un error de tipeo en una clave deje de ser una respuesta equivocada y silenciosa y pase a
ser un error de compilación.
El problema que resuelven
El almacén de variables se indexa por string. VN.GetBool("met_maya") sobre una clave que en realidad
escribiste como met_Maya no lanza excepción ni advierte: devuelve el valor de respaldo, false. La
condición nunca se dispara, la rama nunca se ejecuta, y terminas buscando el bug en el grafo.
VN.SetInt("money", 100); // compila sin importar lo que escribas
int m = VN.GetInt("mony"); // 0. Sin error. Sin advertencia.
Con los accesores generados, el mismo error no compila:
VNVars.Money = 100;
int m = VNVars.Mony; // CS0117: 'VNVars' does not contain a definition for 'Mony'
Cómo se ven
VNVars es una clase estática plana, una propiedad por variable, tipada según el tipo de valor declarado de
la variable:

public static class VNVars
{
/// <summary>Variable [money] (Fixed/Int).</summary>
public static int Money { get => VN.GetInt("money"); set => VN.SetInt("money", value); }
}
VNChars es una clase estática por personaje, una propiedad por variable de personaje:
public static class VNChars
{
public static class Maya
{
public static int Affection { get => VN.GetCharInt("maya", "affection");
set => VN.SetCharInt("maya", "affection", value); }
}
}
Los miembros exactos dependen de tu proyecto. Las claves se convierten en propiedades PascalCase; el id del personaje se convierte en el nombre de la clase anidada.
Regenerar
| Menú | Regenera |
|---|---|
Tools > Beasty VN > Codegen > Regenerate VNVars Accessors | VNVars — una propiedad por variable |
Tools > Beasty VN > Codegen > Regenerate VNChars Accessors | VNChars — una clase anidada por personaje |
Regenera después de añadir, renombrar o eliminar una variable, una variable de personaje o un personaje. Nada más los cambia, y nada te avisa cuando quedan desactualizados — una variable renombrada deja un accesor apuntando a una clave que ya no existe, que lee el valor de respaldo exactamente igual que lo haría un error de tipeo.
Ambos archivos llevan un encabezado <auto-generated>. No los edites a mano: la próxima regeneración los
sobrescribe. Ambos viven en el ensamblado y namespace Beasty.VN.Runtime, así que tus scripts de juego los
ven sin ninguna referencia extra.
Usarlos junto a la API de strings
Son una comodidad sobre el mismo almacén, no un sistema separado. VNVars.Money compila a
VN.GetInt("money"). Ambos caminos llegan al mismo VariableStore, así que puedes mezclarlos libremente:
using Beasty.VN.Runtime;
public static class Shop
{
public static bool Buy(int price)
{
if (VNVars.Money < price) return false;
VNVars.Money -= price; // tipado
VN.SetBool("bought_something", true); // con clave de string, sin accesor necesario
VNChars.Maya.Affection += 1; // tipado, variable de personaje
return true;
}
}
Todo lo que dice la API de VN aplica sin cambios, incluyendo la parte
importante: estos leen la SESIÓN ACTIVA. Fuera de una historia en ejecución, cada getter devuelve su valor de
respaldo y cada setter advierte y no hace nada. Para leer el estado del juego desde FreeRoam, el menú
principal o tu propio modo, usa VNGameController.Instance.SharedVariables, o una de las
APIs de gameplay, que ya lo hacen.
Una clave que nunca declaraste en el editor no tiene accesor. Escríbela con la API de strings, o declárala — declararla es lo que la hace visible para el selector de condiciones, el validador y el guardado.
ItemIds
La pestaña Items genera el mismo tipo de archivo para los ids de inventario: una clase ItemIds de
constantes de string, pensada para pasarse a Inventory.Item(...). Aplican las mismas reglas — regenera
cuando tus ids cambien, no la edites a mano. Consulta APIs de gameplay.