Opciones de partida propias
Un mod puede añadir interruptores (activado / desactivado) y listas de valores (un desplegable) a la lista de REGLAS de la sala, junto a "Fog of war" o "Lock diplomacy". El anfitrión las elige, todos las ven y tus scripts leen la elección con Mod_GetOption("id") (interruptor) o Mod_GetOptionValue("id") (lista). Las dos son API de scripts 6.
Ejemplo: examples/options-example (el interruptor "Fast heroes" y la lista "Hero speed").
Camino rápido
create-option.js escribe el JSON y, si quieres, un esqueleto de script. No necesita la carpeta DATA.
node tools/create-option.js mods/my-mod fast-heroes --name "Fast heroes" --description "All heroes move 50% faster."
node tools/create-option.js mods/my-mod hero-speed --name "Hero speed" --values "Normal,Fast,Very fast" --default Normal --script
El primero crea un interruptor; con --values (de 2 a 16, separados por comas) crea una lista.
| Opción | Qué hace |
|---|---|
--name |
Obligatoria. El nombre que se muestra en la sala |
--name-es, --name-it |
El nombre en español y en italiano |
--description, --description-es, --description-it |
El texto de ayuda de la sala |
--values, --values-es, --values-it |
Los valores de una lista, en el mismo orden y en el mismo número. El id de cada valor sale de su texto en --values |
--default |
Interruptor: true o false. Lista: el número del valor (desde 0), su id o su texto. Sin ella: false, o el primer valor |
--script |
Crea además data\mod\<id>.vs, un comportamiento con el if (Mod_GetOption("<id>")) (o Mod_GetOptionValue) listo para rellenar. Engánchalo a una clase con un parche, como hace el ejemplo |
Genera options\<id>.json y, con --script, data\mod\<id>.vs. Te dice cuántos de los 8 bits usa y cuántos usa ya el mod. Nunca sobrescribe nada: si el mod ya tiene ese id, se detiene sin escribir.
Hacerlo a mano
Un archivo
options\<id>.jsonen tu mod.Un interruptor:
{ "id": "fast-heroes", "name": "Fast heroes", "description": "All heroes move 50% faster.", "default": false }Una lista (de 2 a 16 valores):
{ "id": "hero-speed", "name": "Hero speed", "values": [ { "id": "normal", "name": "Normal" }, { "id": "fast", "name": "Fast (+25%)" }, "Very fast" ], "default": "normal" }id: letras, números,_y-, hasta 32. Lo usan los scripts; no distingue mayúsculas. Si falta, se usa el nombre del archivo.nameydescription: un solo texto, o uno por idioma:{"english": "Fast heroes", "spanish": "Héroes veloces"}(el idioma del juego, y el inglés si falta). El ejemplo lo hace así.values: cada uno es un texto o un objeto conidyname. El primero es el 0.default: en un interruptor,trueofalse; en una lista, el número del valor (desde 0) o suid. Unidque no existe vuelve al 0 sin avisar;validate-mod.jslo detecta.
Un script que la lea (un comportamiento de clase, un evento o un script de victoria):
if (Mod_GetOption("fast-heroes")) { This.AsUnit().SetSpeedFactor(150); } if (Mod_GetOptionValue("hero-speed") == 1) { This.AsUnit().SetSpeedFactor(125); }Mod_GetOptiondevuelvetruesi el valor no es 0 (también en las listas).Mod_GetOptionValuedevuelve el número del valor elegido.
Límites
- Hay 8 bits para todas las opciones de todos los mods activos. Un interruptor usa 1; una lista usa 1 para 2 valores, 2 para 3 o 4, 3 para 5 a 8 y 4 para 9 a 16. Se reparten por orden alfabético de
id; lo que no cabe se ignora y el registro lo indica. Si dos opciones compartenid, el juego usa la primera que encuentra al ensamblar los mods. - Solo funcionan con sala. Las opciones se fijan cuando una partida empieza desde la sala (o cuando vuelves a entrar en una online). Las aventuras, las campañas y los tutoriales no tienen sala:
Mod_GetOptiondevuelve siempre 0 y una lista vale 0, incluso con"default": true. - Los preajustes de la sala (Classic, Competitive) no tocan las opciones de los mods.
Reglas fijas de un mod
Algunas reglas del motor no son opciones de la sala: el mod las fija para todas sus partidas en rules\game.json:
{
"armyStaysWithHero": true,
"sentriesUnselectable": true,
"protectedClasses": ["Peasant", "PeasantAmbient", "Trader", "Tradecar_Donkey", "Camel", "CartTrader"]
}
| Campo | Qué hace |
|---|---|
armyStaysWithHero |
Con true, las unidades de un ejército no se separan de su héroe cuando uno está dentro de las murallas y el otro fuera. El camino se recalcula igualmente. |
sentriesUnselectable |
Con true, los centinelas de las murallas no se pueden seleccionar (al hacer clic en uno se selecciona la puerta) y no se unen a los ejércitos de la IA. |
protectedClasses |
Clases que no reciben daño y no pueden ser atacadas, junto con todas las que heredan de ellas. Son nombres de clase (Peasant), no de unidad. |
Cambian el juego, así que en multijugador todos deben usar el mod. Si varios mods activos aportan reglas, se suman.
Online
Esto es jugabilidad: todos los jugadores deben tener el mismo mod. La opción viaja con el resto de reglas de la sala y se guarda con la partida.