Imperivm Resurrected

Modos de victoria propios

Las condiciones de victoria del juego (Eliminación, Límite de puntuación…) son scripts .vs. Un mod puede traer los suyos y salen solos en el desplegable "Modo" de la sala.

Ejemplo: ejemplos/victoria-ejemplo (modo "Dominio": gana quien controla N asentamientos).

El script

Va en data\GameScripts\ de tu mod:

data\GameScripts\6 Dominio.vs
  • El nombre del archivo es el id del modo, número incluido. La sala lista los modos por nombre de archivo completo. Dos mods chocan solo si usan exactamente el mismo nombre (6 Dominio.vs en los dos). Los del juego son del 1 al 5.
  • En la sala se muestra sin el número inicial y pasa por la traducción: si el texto "Dominio" tiene entrada en tu loc, saldrá traducido (Idiomas).
  • La primera línea es la firma: //void, int player, str param. player es el jugador (1 a 8). param es el valor del límite que se elige en la sala (ver más abajo).
  • El juego lanza 8 copias del script, una por jugador, cada una en su hilo, aunque haya menos jugadores. Escríbelo desde el punto de vista de un solo jugador y que mire a los demás. Tiene que aguantar los huecos vacíos: el del ejemplo los da por eliminados porque no tienen ni asentamientos ni tropas.

Funciones que se usan

Función Para qué
EndGame(player, false) / EndGame(player, true) El jugador gana / pierde. Después, return
SetPlayerStatus(player, linea, texto, important) Texto de estado arriba: línea 0 el nombre del modo, línea 1 el aviso. También existe SetPlayerStatus(player, linea, bool); los scripts del juego usan las dos
ClassPlayerObjs("BaseTownhall", player) Objetos de una clase de un jugador; .count los cuenta, .IsEmpty() dice si no hay ninguno
MilUnits(player) Cuántas tropas tiene
DiplAreAllied(a, b) Si dos jugadores son aliados
Str2Int(param) Pasa param a número
EnvReadInt / EnvWriteInt Variables compartidas entre los scripts. Con jugador (EnvWriteInt(player, "clave", n)) o sin él (EnvWriteInt("modo", 1))
GetConst("…") Constantes de CONST.INI
Translate("…") / Translatef("…", a, b) Textos con idioma

Para ver cómo lo hace el juego, saca sus scripts con extraer-datos.js (node herramientas\extraer-datos.js "<carpeta del juego>" <salida>) y mira GAMESCRIPTS\1 ELIMINATION.VS y 2 SCORE LIMIT.VS. Con el volcado de Parches también se puede, con la ruta completa: Dump=data/GameScripts/1 ELIMINATION.VS.

El desplegable "Límite"

Lo rellena el juego con entradas de CONST.INI, sección [GamePlay]. La clave es el nombre del archivo con _ en vez de espacios, más un número desde 0. El valor son dos partes separadas por una coma: el texto que se ve y lo que recibirá el script como param.

El ejemplo lo hace con un parche INI en patches\data\const.ini:

[GamePlay]
6_Dominio0 = 2 asentamientos, 2
6_Dominio1 = 3 asentamientos, 3
6_Dominio2 = 4 asentamientos, 4
6_Dominio3 = 5 asentamientos, 5

Si no pones entradas, el desplegable sale vacío y no hay límite que elegir. Qué recibe entonces param no se ha visto en partida: el ejemplo cae a 3 si Str2Int(param) da menos de 2.

Online

Un modo nuevo cambia la jugabilidad: todos los jugadores tienen que llevar el mismo mod.