Validare una mod
Il validatore controlla la tua mod senza aprire il gioco e ti dice gli errori con file e riga. Serve Node.js.
node strumenti/valida-mod.js <cartella del mod>
node strumenti/valida-mod.js <cartella del mod> --dati <cartella DATA>
--dati è la cartella DATA del data.pak estratto (la ricava strumenti/estrai-dati.js, vedi il README). Con essa controlla anche che i file che la tua mod patcha esistano e che esistano gli script a cui puntano le tue classi. Guarda solo i percorsi che iniziano con data/: se patchi units/…, buildings/… o currentlang/…, non li controlla. Senza --dati si controlla tutto il resto.
Con --gioco <cartella del gioco> (sola lettura) guarda i nomi di Units.pak, Buildings.pak, MapObjects.pak e Visuals.pak per sapere se esistono le immagini e le entità che la tua mod prende dal gioco, e avvisa se il tuo .rle ha lo stesso nome di uno del gioco:
node strumenti/valida-mod.js <cartella del mod> --dati <DATA> --gioco "C:\Program Files (x86)\Steam\steamapps\common\Imperivm - Great Battles of Rome HD"
Esce con codice 1 se ci sono errori, con 0 se ci sono solo avvisi o niente, e con 2 se lo chiami male. Serve per automatizzare.
Un errore è qualcosa che il gioco rifiuterebbe o che fallirà. Un avviso è un sospetto: qualcosa che il gioco ignora o che probabilmente non volevi.
Cosa controlla
mod.json: JSON rotto, categoria che non è di GameBanana, testi con il tipo sbagliato (errori). Mancanza diid,name,versionocategory, nome di categoria vecchio, tag che il gioco non usa, mappa senza tag dei giocatori e campagna, traduzione o audio senza tag della lingua (avvisi).- File: estensioni di eseguibili e script di sistema (errore: la mod non si caricherebbe) e percorsi con
... Un'estensione strana ma innocua (.psd,.gif,.zip…) dà solo un avviso: la mod si carica, il file occupa solo spazio. civs\*.json:idnon valido,indexfuori da 10–99 o ripetuto,baseche non esiste,letterdi più di una lettera,biomesconosciuto,templatescritta male o senza il suo file. Con"ai": truesenza tabellaaliasavvisa, e controlla che l'aliaspunti a classi e comandi che la mod ha.specials\*.json:idnon valido o che è una specialità del gioco,bitfuori da 36–63 o ripetuto.options\*.json: la ripartizione dei bit (tra tutte le mod ne stanno 8).- Patch XML: XML malformato (la patch non si applicherebbe per intero), operazione senza
select, selettore scritto male, tag che non sono operazioni. Un selettore che non inizia con/o//dà errore anche se la DLL lo accetterebbe. - Patch di script (
.vs): direttiva che non esiste,@before,@aftero@replacesenza testo, direttiva senza codice sotto, e@topcon codice che non sia dichiarazione di variabili. Non controlla il codice della patch, né le funzioniMod_*, né la firma. - Patch INI: righe che non si capiscono, e una sezione nuova in
UNIT_SPECIALS.INI(il gioco può chiudersi). Non avvisa dei commenti a fine riga di una patch, che il motore non supporta (vedi Patch). - Classi (
data\classes): XML malformato,racesconosciuta,unit_specialsscritte male o sconosciute (il gioco distingue le maiuscole:Parry, nonparry), e una classe senzaentity(avviso: il gioco non la eredita dal padre e l'unità sparisce). - Codifica: un XML di classe in Latin-1 con caratteri accentati. Il gioco non carica la classe e non avvisa; salvalo come UTF-8.
- Comandi (
data\commands): XML malformato e comandi ripetuti in un file. - Entità (
.ent.xml): errore se l'immagine non esiste (il gioco si blocca caricando la classe; con la cartella della mod se porta i suoi.rle, e sempre con--gioco),idxripetuto o fuori da 1–32, livelli e animazioni che puntano a qualcosa che non c'è, limiti del motore (32 immagini, 32 livelli, 8 stati, animazioni 1–28, 64 fotogrammi), ecolumns,rowso numero di<frame>che non tornano. Un'animazione che legge più righe di quante ne ha la sua immagine è solo un avviso. - Grafica (
.rle,.pass):.rletagliato o corrotto,.rle.mmprinominato (senza pixel, da una mod non si carica), palette vuota,.passmalformato o vuoto,pass_fileche non esiste, e un.rlecon lo stesso nome di uno del gioco (vince quello del gioco; con--gioco). placeobjects.xml(mappe casuali): una classe nominata che non esiste (con--dati). La generazione della mappa si blocca senza messaggio.- Testi (
loc): XML malformato, voci senzatexto senzaresult. - Script (
.vs): manca la firma nella prima riga, evento sconosciuto o con la firma sbagliata,Sleepin un evento che non può aspettare, funzioniMod_*che non esistono,Mod_HasSpecialcon unObjinvece di unaUnit.
Esempio di output
AVVISO specials/c.json senza "name": si vedrà l'id
ERRORE specials/d.json il bit 40 è già usato da specials/c.json
AVVISO data/classes/G.sc.xml:2 specialità "Zzz" sconosciuta: il gioco la ignora
5 file controllati: 1 errori, 5 avvisi.
Cosa non fa
Non applica le patch né esegue gli script: questo si vede solo nel gioco (usa Dump= di Patch per vedere il risultato, e Logs\imperivm\imperivm-mod.log per gli errori in corso). Non giudica nemmeno la qualità delle immagini.
È pensato per mod nuove, fatte con questo SDK. Una mod vecchia che funziona nel gioco, come il Community Mod, dà errori (script senza firma, script di classe che non esistono, righe di animazione) senza che questo voglia dire che non si carichi.