PREMESSA
Questo tutorial vi permetterà di comprendere come funziona un file molto interessante, il descr_cursor_actions. Questo file permette di modificare non le abilità intrinseche dei personaggi (hardcoded), bensì la loro applicabilità nei confronti di altri personaggi, quando si seleziona un elemento e poi si sposta il cursore su un altro elemento.
STRUTTURA
Strutturalmente, il file presenta all'inizio una legenda dei codici utilizzati:
Testo nascosto - clicca qui
;; S = Select
;; NA = Not Allowed
;; NM = Move not allowed (may be same as NA)
;; Mov = Move
;; Mov+ = Move cursor + number of turns needed to arrive
;; Ig = Ignore the item and treat as an empty square
;; Mer = Merge (Will always bring up merge screen)
;; Mer* = Automerge if allowed, otherwise Merge
;; Em = Embark (Will always bring up embarkation screen)
;; Em * = AutoEmbark if allowed, otherwise Embark)
;; G = Garrison (Will always bring up merge screen)
;; G* = AutoGerrison if allowed, otherwise Garrison)
;; A = Attack
;; Talk = Begin diplomatic negotiation
;; Talk / Bribe Choice between talk and bribe is bribe is allowed. Otherwise just talk
;; Spy = Perform a spying mission
;; Inf = Infiltrate the settlement
;; Ass = Assassinate one of the characters in the square
;; Ass / NA = Assassinate one of the characters in the square. Not allowed if no characters in square
;; Mission = Perform one of a range of missions that are allowed to either the spy, assassin or diplomat
;; SetRP = Set rally_point point
;; SetRP* = Set one or more rally_point points
;; SetRpSel = Set rally point and select
;; Disem / NM = If the target square is a costal one, and the admiral can reach an adjacent square, and has something to disembark, then show the disembark cursor, otherwise NM
;; Valid items for 'over' flag and 'selected' flag: nothing, army, admiral, diplomat, spy, assassin, family, settlement, fort, rally_point
;; Valid alignments: own, enemy, neutral
;; The default is nothing selected, in which case when over own pieces, show S, and when over enemy or allied, show Na
;; Order of declarations:
;; If the tooltip keyword is specified, then the following word should be an identifier from the lookup file "data/descr_cursor_tooltips_lookup.txt",
;; which itself is a lookup table for the strings in 'data/text/cursor_action_tooltips.txt'
Vedremo in seguito il significato e l'utilizzo di questi codici.
Dopo la legenda, il file si presenta come una successione di blocchi del tipo: "selected ..." dedicati a ciascun personaggio quando esso viene selezionato dal giocatore umano in campagna. Ogni blocco è a sua volta diviso in 3 sezioni, a seconda dell'elemento su cui si punta il cursore dopo che è stato selezionato il personaggio: over_own (cursore puntato su propri elementi), over_enemy (su elementi nemici), over_allied (su elementi alleati). I neutrali rientrano nella voce nemici, tranne per gli inquisitori, dove hanno una voce apposita (over_neutral)
ESEMPIO
Il primo blocco riguarda la selezione nulla (quando sulla mappa non viene selezionato nulla) quindi potete ignorarlo. Il secondo blocco si presenta così:
Testo nascosto - clicca qui
selected army
{
over own
{
initial_never_seen Mov Mov
land Mov Mov
sea Na Na tooltip armies_cannot_go_on_sea
army Mer* (Mer) Mer (Mer*)
admiral Em* (Em) Em (Em*) tooltip embark_army
diplomat S S
princess S S
merchant S S
priest S S
heretic S S
witch S S
inquisitor S S
spy S S
assassin S S
family Mer* (Mer) Mer (Mer*)
settlement G* (S) G (S)
fort G* (S) G (S)
rally_point Mov
naval_rally_point Na tooltip armies_cannot_go_on_sea
garrisoned_settlement Mer* (Mer) Mer (Mer*)
garrisoned_fort Mer* (Mer) Mer (Mer*)
garrisoned_ship Em* (Em) Em (Em*)
sieged_settlement S tooltip cannot_enter_sieged_settlement
sieged_fort S tooltip cannot_enter_sieged_fort
garrisoned_dock Mer* (Mer) Mer (Mer*)
dock Na
port Mov
}
over enemy
{
default A
diplomat Mov
princess Mov
merchant Mov
priest Mov
heretic Mov
witch Mov
inquisitor Mov
spy Mov
assassin Mov
land Mov Mov
sea Na Na tooltip armies_cannot_go_on_sea
admiral Na tooltip armies_cannot_attack_navies
rally_point Mov
naval_rally_point Na tooltip armies_cannot_go_on_sea
garrisoned_ship Na tooltip armies_cannot_attack_navies
garrisoned_dock Na tooltip armies_cannot_attack_ports
port Mov
}
over allied
{
default A
diplomat Mov
princess Mov
merchant Mov
priest Mov
heretic Mov
witch Mov
inquisitor Mov
spy Mov
assassin Mov
land Mov Mov
sea Na Na tooltip armies_cannot_go_on_sea
admiral Na tooltip armies_cannot_attack_navies
rally_point Mov
naval_rally_point Na tooltip armies_cannot_go_on_sea
garrisoned_ship Na tooltip armies_cannot_attack_navies
garrisoned_dock Na tooltip armies_cannot_attack_ports
port Mov
}
}
Come potete vedere, si riferisce a una generica armata selezionata (selected army) dal giocatore umano, quindi si riferisce sia a semplici capitani sia a generali.
Il senso è piuttosto semplice: una volta selezionata una propria armata, se si sposta il cursore su un altro elemento sarà possibile una determinata azione. Ad esempio: se sposto il cursore su un altra armata posseduta (army, nella sezione over_own) le azioni possibili saranno "Mer" e "Mer*", il cui significato è spiegato nel dettaglio all'inizio del file:
Testo nascosto - clicca qui
;; Mer = Merge (Will always bring up merge screen)
;; Mer* = Automerge if allowed, otherwise Merge
se invece selezionassi un'armata nemica, l'azione non sarebbe ovviamente il merge. Infatti nella sezione over_enemy non c'è traccia della voce army, per cui il file legge l'azione default, che in questo caso è "A" (ovvero: attacco).
Idem per un'armata alleata.
Da notare che, oltre alle azioni disponibili, vi è anche la possibilità di inserire un tooltip (riga di testo che verrà visualizzata al momento del puntamento) la cui stringa dovrà essere riportata nel file data\text\cursor_action_tooltips.
APPLICAZIONI
Come si intuisce, le potenzialità di questo file sono moltemplici e sono già state sfruttate in molti settori.In BC abbiamo modificato le voci in modo da consentire agli inquisitori di perseguire solo personaggi alleati; abbiamo consentito alle flotte si sbarcare truppe anche dentro un proprio insediamento sotto assedio; in passato avevamo anche vietato alle principesse di poter entrare in terra nemica.
Ad es. si potrebbe esaltare il valore dei generali a scapito dei semplici capitani. Si potrebbe impedire ai semplici capitani di entrare in terra straniera, riservando tale privilegio solo ai generali; analogamente, si potrebbe lasciare solo a questi ultimi la possibilità di fare assedi.
Oppure si potrebbe imporre la condizione di non attaccabilità di qualsiasi obiettivo alleato; questo costringerebbe il giocatore umano a rompere l'alleanza con un diplomatico prima di dichiarare guerra con un attacco diretto.
LIMITI
I limiti principali alle modifiche effettuate su questo file sono due:
- solo il giocatore umano subisce l'effetto delle modifiche, mentre la IA continuerà a sottostare alle condizioni normali di gioco. Ad es. se vietassimo alle principesse di entrare in terra straniera, questo effetto varrebbe solo per il giocatore umano, ma nella campagna potremmo vedere principesse della IA muoversi liberamente per la mappa.
- come già detto in precedenza, non è possibile modificare direttamente le abilità intrinseche dei personaggi; ad es. se attribuissimo a un assassino la facoltà di vedere come obiettivo un generale della propria fazione, in campagna potremmo effettivamente selezionarlo come obiettivo, ma si aprirebbe una schermata (quella degli obiettivi dell'assassino) completamente vuota, perchè tra le abilità dell'agente non c'è quella di assassinare i propri generali (hardcoded).
ALTRI FILES
Questo file si riferisce alle azioni effettuare esclusivamente su mappa strategica. Tuttavia esiste un file gemello, il descr_cursor_actions_battle_classic, che permette di effettuare modifiche analoghe per le azioni sulla mappa tattica.