| Creare nuovi tabelloni per HeroScribe
Disegnare tabelloni per HeroScribe può sembrare difficile, ma con la seguente guida ed un po' di fortuna potrete farlo in tranquillità. Fondamentalmente, ci sono tre passaggi di modifica:
- Vettoriale: HeroScribe/Icons/Vector/Europe/Board_EU.eps.gz e HeroScribe/Icons/Vector/USA/Board_US.eps.gz
- Objects.xml: HeroScribe/Objects.xml
- Raster: HeroScribe/Icons/Raster/Europe/Board_EU.png e HeroScribe/Icons/Raster/USA/Board_US.png
Questo basterà se il vostro tabellone non comprende oggetti complessi; altrimenti, avrete bisogno di dare un'occhiata alle più complesse funzioni di disegno.
Modifica vettoriale
Le informazioni vettoriali del tabellone base di HeroQuest sono conservate in HeroScribe/Icons/Vector/Europe/Board_EU.eps.gz e HeroScribe/Icons/Vector/USA/Board_US.eps.gz, dentro file .eps compressi in un archivio .gzip (suggeriamo 7-Zip per gestire tali file); questi file .eps contengono informazioni PostScript che saranno convertite in .eps o .pdf da Ghostscript, all'interno di HeroScribe. Estraete Board_EU.eps dal file .gzip, poi apritelo con NotePad++, o TextEdit.
Per creare un nuovo tabellone per HeroScribe dovrete abituarvi al codice utilizzato in PostScript; questi tabelloni sono solitamente semplici da disegnare, ma potrebbe sembrare difficile capire come funziona il processo: non lo è, in realtà, ma c'è bisogno di un po' di pratica. Non ci concentreremo su ogni dettaglio, poiché ci interessa solamente creare un nuovo tabellone per HeroScribe; per cui le sezioni fondamentali che guarderemo sono le seguenti:
Mentre lavorate al vostro tabellone, potreste voler vedere come sembra dopo le prime modifiche: se è questo il caso, salvate Board_EU.eps dentro Notepad++ / TextEdit poi trascinatelo dentro Board_EU.eps.gz, sovrascrivendo quello originale; adesso aprite HeroScribe ed esportate l'impresa vuota come .pdf. Apritelo e vedrete come sta venendo la vostra mappa.
Una volta che la versione Europea del vostro tabellone è pronta, andate alla Sezione Modifica Objects.xml per completare la creazione del vostro tabellone. Ora daremo uno sguardo completo ai file .eps del tabellone di HeroQuest; le parti più interessanti sono colorate come segue:
- blu: differenze tra le mappe Europea e Nord-Americana
- rosso: funzioni di disegno che non ci interessano
- verde: informazioni vitali che (potremmo) dover modificare
Per approfondire queste parti colorate, passate il vostro mouse sopra di esse e leggete attentamente le relative spiegazioni. D'accordo, ora non impanicatevi:
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 0 0 538 404
%%HiResBoundingBox: 0 0 537.6 403.2
%%LanguageLevel: 2
% Made with/for HeroScribe
% The board layout is (C) Milton Bradley Company
% This eps file is (C) 2003-2014 Flavio and Valerio Chierichetti
%/adjacentBoardsOffset offset def
/x 26 def
/y 19 def
/Unit { 19.2 mul } def
/Border 0.15 def
/RoomStroke 1.3 def
/GridStroke 0.1 def
/BorderRGB { 0 0 0 } def
% Solo nella versione Europea, INIZIO
/DarkRGB { 0.8 0.8 0.8 } def
/CorridorRGB { 1 1 1 } def
% Solo nella versione Europea, FINE
% Solo nella versione Nord-Americana, INIZIO
/DarkRGB { 0.7 0.7 0.7 } def
/CorridorRGB { 0.9 0.9 0.9 } def
/TrapRGB { 0.976 0.486 0.200 } def
% Solo nella versione Nord-Americana, FINE
/BoundingBox {
% Width, Height
exch
dup
1 sub adjacentBoardsOffset mul
exch
x 2 add mul
add Unit
exch
dup
1 sub adjacentBoardsOffset mul
exch
y 2 add mul
add Unit
2 array astore
<< /PageSize 2 index
>> setpagedevice
pop
%Ghostscript only
%mark /MediaBox [ 0 0 x 2 add Unit y 2 add Unit ] /PAGE pdfmark
%mark /CropBox [ 0 0 x 2 add Unit y 2 add Unit ] /PAGE pdfmark
} def
/horizontalline {
0 rlineto stroke
} def
/verticalline {
0 exch rlineto stroke
} def
/HorizontalLineTo {
% length > 0
currentlinewidth exch currentpoint
% lw length x y
currentlinewidth 2 div sub exch
% lw length (y - lw / 2) x
currentlinewidth 2 div sub exch
% lw length (x - lw / 2) (y - lw / 2)
2 index currentlinewidth add
currentlinewidth
% lw length (x - lw / 2) (y - lw / 2) (length + lw) lw
0 setlinewidth
rectfill
pop
setlinewidth
% [empty]
} def
/VerticalLineTo {
% length > 0
currentlinewidth exch currentpoint
% lw length x y
currentlinewidth 2 div sub exch
% lw length (y - lw / 2) x
currentlinewidth 2 div sub exch
% lw length (x - lw / 2) (y - lw / 2)
2 index currentlinewidth add
currentlinewidth
exch
% lw length (x - lw / 2) (y - lw / 2) lw (length + lw)
0 setlinewidth
rectfill
pop
setlinewidth
% [empty]
} def
% eventuali funzioni più complesse
/RectStroke {
% xs ys width height
3 index 3 index moveto
1 index HorizontalLineTo
3 index 3 index moveto
0 index VerticalLineTo
3 index
3 index 2 index add
moveto
1 index HorizontalLineTo
3 index 2 index add
3 index
moveto
0 index VerticalLineTo
% xs ys width height
pop pop pop pop
} def
/Grid {
gsave
1 Unit 1 Unit translate
BorderRGB setrgbcolor
0 setlinejoin
GridStroke setlinewidth
0 1 x 1 sub {
gsave
Unit 0 translate
0 0 moveto
y Unit verticalline
2 1 10 {
gsave
12 div Unit 0 translate
0 0 moveto
-1 Border mul Unit verticalline
0 y Unit moveto
Border Unit verticalline
grestore
} for
grestore
} for
0 1 y 1 sub {
gsave
Unit 0 exch translate
0 0 moveto
x Unit horizontalline
2 1 10 {
gsave
12 div Unit 0 exch translate
0 0 moveto
-1 Border mul Unit horizontalline
x Unit 0 moveto
Border Unit horizontalline
grestore
} for
grestore
} for
% eventuali corridoi e aree scure e della griglia che sono più complesse
0 0
x Unit
y Unit
% Use RectStroke (the function previously defined) instead of ``rectstroke''
% for using PDFs of this file as converted by ghostscript con Illustrator
rectstroke
0 Border sub Unit
0 Border sub Unit
2 Border mul x add Unit
2 Border mul y add Unit
rectstroke
RoomStroke setlinewidth
% Central Room
10 Unit 7 Unit 6 Unit 5 Unit rectstroke
% Lower-Left Rooms
1 Unit 1 Unit 8 Unit 8 Unit rectstroke
9 Unit 1 Unit 3 Unit 5 Unit rectstroke
5 Unit 1 Unit 4 Unit 5 Unit rectstroke
1 Unit 5 Unit 4 Unit 4 Unit rectstroke
5 Unit 6 Unit 2 Unit 3 Unit rectstroke
% Upper-Left Rooms
1 Unit 10 Unit 8 Unit 8 Unit rectstroke
1 Unit 10 Unit 4 Unit 8 Unit rectstroke
1 Unit 15 Unit 8 Unit 3 Unit rectstroke
9 Unit 13 Unit 3 Unit 5 Unit rectstroke
% Lower-Right Rooms
14 Unit 1 Unit 4 Unit 5 Unit rectstroke
18 Unit 1 Unit 7 Unit 4 Unit rectstroke
21 Unit 1 Unit 4 Unit 8 Unit rectstroke
17 Unit 6 Unit moveto 3 Unit verticalline
17 Unit 9 Unit moveto 4 Unit horizontalline
% Upper-Right Rooms
14 Unit 13 Unit 3 Unit 5 Unit rectstroke
17 Unit 10 Unit 8 Unit 8 Unit rectstroke
17 Unit 14 Unit 8 Unit 4 Unit rectstroke
17 Unit 10 Unit 4 Unit 8 Unit rectstroke
grestore
} def
/Dark {
DarkRGB setrgbcolor
0 setlinewidth
3 index Unit
3 index Unit
3 index Unit
3 index Unit
rectfill
pop pop pop pop
} def
/Trap {
% Solo versione Nord-Americana, INIZIO
TrapRGB setrgbcolor
0 setlinewidth
3 index Unit
3 index Unit
3 index Unit
3 index Unit
3 index
3 index
3 index
3 index
gsave
rectclip
rectfill
Grid
grestore
% Solo versione Nord-Americana, FINE
pop pop pop pop
} def
/Corridor {
% Solo versione Nord-Americana, INIZIO
CorridorRGB setrgbcolor
0 setlinewidth
3 index Unit
3 index Unit
3 index Unit
3 index Unit
rectfill
% Solo versione Nord-Americana, FINE
pop pop pop pop
} def
/StartBoard {
% Column Row
exch
dup
adjacentBoardsOffset mul
exch
x 2 add mul
add Unit
exch
dup
adjacentBoardsOffset mul
exch
y 2 add mul
add Unit
gsave
translate
} def
/EndBoard {
grestore
} def
/HorizontalBridge {
% bottom
dup
CorridorRGB setrgbcolor
Unit
x 1 add Unit
exch
2 adjacentBoardsOffset add Unit
1 Unit
rectfill
BorderRGB setrgbcolor
GridStroke setlinewidth
Unit
x 1 add Unit
exch
2 adjacentBoardsOffset add Unit
1 Unit
rectstroke
} def
/VerticalBridge {
% left
dup
CorridorRGB setrgbcolor
Unit
2 adjacentBoardsOffset add -1 mul 1 add Unit
1 Unit
2 adjacentBoardsOffset add Unit
rectfill
BorderRGB setrgbcolor
GridStroke setlinewidth
Unit
2 adjacentBoardsOffset add -1 mul 1 add Unit
1 Unit
2 adjacentBoardsOffset add Unit
rectstroke
} def
% width height BoundingBox
% Deactivating showpage and setpagedevice
% We have to reactivate them before the end
% 2 dict dup dup /showpage {} put /setpagedevice {} put begin
%
% column row StartBoard
%
% x1 y1 width height Corridor
% ...
% x1 y1 width height Dark
% ...
% Grid
%
% EndBoard
Modifica Objects.xml
Prima di apportare qualsiasi cambiamento al vostro Objects.xml, dovete reimpacchettare la versione Europea del vostro tabellone.
Rinominate Board_EU.eps (p.e. DewayneBoard_EU.eps, o qualsiasi altra cosa), poi aprite Board_EU.eps.gz (con 7-Zip, ricordate?) e trascinateci il vostro nuovo, ipotetico DewayneBoard_EU.eps; sempre dentro 7-Zip, fate tasto destro sull'originale Board_EU.eps e cancellatelo. Ora chiudete 7-Zip e rinominate Board_EU.eps.gz in DewayneBoard_EU.eps.gz. Siete a metà strada della modifica vettoriale del vostro tabellone!
Ora aprite NotePad++: c'è il menu Compare, sotto Plugin? Se sì, passate pure al prossimo paragrafo. Altrimenti, chiudete Notepad++ e scaricate il plugin (andate con la versione UNI), poi copiate l'estratto ComparePlugin.dll in C:\Programmi\Notepad++\plugins.
Ora, aprite HeroScribe/Icons/Vector/Europe/DewayneBoard_EU.eps con Notepad++, poi andate in HeroScribe/Icons/Vector/USA/, estraete Board_US.eps da Board_US.eps.gz ed apritelo con Notepad++; dovreste avere sia DewayneBoard_EU.eps che Board_US.eps aperti in Notepad++. Clickate su Plugin -> Compare -> Compare e copiate le modifiche fatte in DewayneBoard_EU.eps per poi incollarle dentro Board_US.eps (assicuratevi di incollarle nella stessa parte del file!). Ancora una volta: rinominate Board_US.eps nell'ipotetico DewayneBoard_US.eps (o quello che avete scelto voi, ma deve essere lo stesso di quello Europeo), inseritelo dentro Board_US.eps.gz, cancellate Board_US.eps da dentro Board_US.eps.gz e finalmente rinominate Board_US.eps.gz in DewayneBoard_US.eps.gz. La modifica vettoriale del vostro tabellone è terminata! Passiamo al vostro Objects.xml.
Apritelo con Notepad++ / TextEdit e date un'occhiata alla sezione <board></board>:
<board width="26" height="19" borderDoorsOffset="0.08" adjacentBoardsOffset="-0.5">
<icon region="Europe" path="Europe/Board_EU" />
<icon region="USA" path="USA/Board_US" />
<!-- Border corridors -->
<corridor left="1" top="1" width="26" height="1" />
<corridor left="1" top="19" width="26" height="1" />
<corridor left="1" top="1" width="1" height="19" />
<corridor left="26" top="1" width="1" height="19" />
<!-- 2x7 corridors -->
<corridor left="13" top="1" width="2" height="7" />
<corridor left="13" top="13" width="2" height="7" />
<!-- 10x1 corridors -->
<corridor left="1" top="10" width="10" height="1" />
<corridor left="17" top="10" width="10" height="1" />
<!-- 1x7 corridors -->
<corridor left="10" top="7" width="1" height="7" />
<corridor left="17" top="7" width="1" height="7" />
<!-- 8x1 corridors -->
<corridor left="10" top="7" width="8" height="1" />
<corridor left="10" top="13" width="8" height="1" />
</board>
Se il vostro tabellone contiene corridoi più complessi dei semplici rettangoli non preoccupatevi, ci occuperemo di funzioni complesse più avanti.
La modifica del vostro Objects.xml è terminata! Passiamo alla modifica raster del vostro tabellone.
Modifica raster
Ora dovrete lavorare alla versione raster del vostro tabellone, quella utilizzata in HeroScribe come sfondo dell'impresa. Aprite HeroScribe ed esportate un'impresa Europea vuota in un .eps chiamato eu.eps; poi cambiate la versione in quella Nord-Americana ed esportate l'impresa vuota in un .eps di nome us.eps; potete ora chiudere HeroScribe.
Per esportare in .eps/.pdf HeroScribe ha bisogno di Ghostscript: è questo il software che useremo per rasterizzare il vostro tabellone. Trovate la cartella bin del vostro Ghostscript (la nostra è in C:\Programmi/gs/gs9.04/bin) ed incollate lì i due file .eps che avete estratto poco fa (eu.eps e us.eps); ora avviate la riga di comando (Start -> Esegui, poi scrivete cmd) ed inserite questo comando:
cd c:\Programmi/gs/gs9.04/bin
Da lì date il seguente comando (copiate ed incollatelo clickando sull'icona in alto a sinistra e poi andando su Modifica -> Incolla):
gswin32c -dMaxBitmap=2147483647 -sDEVICE=pngalpha -r125 -sOutputFile="eu.png" -dNOPAUSE -dEPSCrop "eu.eps"
La versione Europea del vostro tabellone raster è pronta! Ora date Ctrl+C per uscire dal comando e tornare al terminale, poi inserite (o copiate e -> Modifica -> Incolla):
gswin32c -dMaxBitmap=2147483647 -sDEVICE=pngalpha -r125 -sOutputFile="us.png" -dNOPAUSE -dEPSCrop "us.eps"
La versione Nord-Americana del vostro tabellone raster è fatta! Potete chiudere Ghostscript. Ora spostate i due file raster (eu.png e us.png) nelle loro rispettive cartelle (HeroScribe/Icons/Raster/Europe/ e HeroScribe/Icons/Raster/USA/) e rinominateli in base ai loro file vettoriali (DewayneBoard_EU.png e DewayneBoard_US.png).
Ecco fatto, anche la versione raster del vostro tabellone è terminata| Aprite HeroScribe e divertiti. Oppure proseguite alle più complesse funzioni di disegno per impanicarvi un po'.
Più complesse funzioni di disegno
Il tabellone originale di HeroQuest comprende poligoni semplici: nella maggior parte dei casi sono rettangoli e quadrati, altrimenti linee singole. Non sarà sempre così: potreste aver bisogno di disegnare tabelloni più complessi, come questo proveniente da Dragon Strike©:
Per disegnare un simile tabellone avreste bisogno di nuove funzioni come: colorazioni, percorsi, linee oblique, archi ed ellissi. Finché parliamo di corridoi o aree scure, o griglie, dovreste inserire i codici in questo punto dell'.eps; se invece avete bisogno di disegnare stanze, fatelo nella sezione delle stanze nell'.eps.
- Configurazione dei colori: in caso dobbiate disegnare corridoi o stanze scure più complesse, modificare il vostro Objects.xml non sarà sufficiente; avreste bisogno di disegnarle direttamente all'interno del tabellone. Per farlo, selezionate il colore desiderato:
DarkRGB setrgbcolor Potete scegliere quale dalla sezione dei colori, o selezionarne uno nuovo convertendo il classico codice RGB con questo convertitore online, poi configurandolo con:0.3 0.3 0.3 setrgbcolor Dopodiché, avreste bisogno di una funzione con cui colorare.
- Colorazione di un rettangolo: come con RectStroke, questa funzione ha bisogno di coordinate per la casella di partenza e per le dimensioni del rettangolo:
10 Unit 1 Unit 2 Unit 5 Unit rectfill In questo modo state colorando il rettangolo 2x5 che comincia in 10,1 con il colore precedentemente configurato, DarkRGB.
- Colorazione di un percorso: questa funzione disegna un poligono complesso composto da coordinate:
newpath 1 Unit 1 Unit moveto 2 Unit 3 Unit lineto 3 Unit 1 Unit lineto closepath fill In questo modo, disegnereste un triangolo (coi vertici in 1,1 - 2,3 - 3,1) colorato col colore precedentemente configurato, DarkRGB. I percorsi possono essere costruiti da qualsiasi numero di coordinate:newpath 1 Unit 1 Unit moveto 2 Unit 3 Unit lineto 3 Unit 4 Unit lineto 5 Unit 6 Unit lineto 3 Unit 1 Unit lineto closepath fill
- Configurazione dei tratti: in caso dobbiate disegnare griglie più complesse, selezionate la dimensione del tratto più appropriata:
GridStroke setlinewidth Potete scegliere quale dalla sezione dei tratti nell'.eps. Poi, avreste bisogno di una funzione che disegni quel tratto.
- Disegno di linee oblique: questa funzione disegna una linea obliqua, superando così le più semplici linee orizzontali e verticali:
1 Unit 1 Unit moveto 4 Unit 4 Unit lineto stroke State disegnando una linea obliqua da 1,1 a 4,4; nessuna colorazione interna stavolta, solo una linea.
- Disegno di archi: questa funzione disegna un arco, parziale o pieno:
11 Unit 8 Unit 3 Unit 0 360 arc stroke State disegnando un cerchio con raggio di 3 caselle, col centro in 11,8. Con 0 si intende l'inizio anti-orario del tratto (a ore 3) e con 360 si intende la fine anti-oraria del tratto (ancora a ore 3): un cerchio pieno, come mostrato nel tabellone della Città in Dragon Strike©. Mettiamo che vogliate un cerchio parziale e colorato nel terzo quarto d'ora (12:30-12:45), il codice sarebbe il seguente:11 Unit 8 Unit 3 Unit 180 270 arc fill Vi preghiamo di notare che con 0 si intende l'inizio del cerchio (a ore 3), con 360 la fine.
- Disegno di percordi ed archi: potete disegnare un complesso percorso che includa un arco:
newpath 11 Unit 8 Unit 3 Unit 180 270 arc 11 Unit 8 Unit lineto closepath stroke State così disegnando un arco parziale e chiuso; di nuovo, potreste colorarlo rimpiazzando stroke con fill.
- Disegno di stanze: per disegnare i bordi delle stanze, assicuratevi di configurare il giusto tratto (RoomStroke setlinewidth) e scegliete una qualsiasi delle funzioni conosciute per cominciare a disegnare.
- Disegno di ellissi: questa funzione disegna un'ellisse, parziale o completa. Per poterla disegnare, avrete bisogno di inserire il seguente codice in questo punto dell'.eps:
/ellipse {
/endangle exch def
/startangle exch def
/yrad exch def
/xrad exch def
/y exch def
/x exch def
/savematrix matrix currentmatrix def
x y translate
xrad yrad scale
0 0 1 startangle endangle arc
savematrix setmatrix
} def
Detto questo, potete ora disegnare un'ellisse:11 Unit 8 Unit 2 Unit 4 Unit 0 360 ellipse stroke State disegnando un'ellisse completa alta 2 caselle e larga 4, il cui centro è in 11,8. Con 0 si intende l'inizio anti-ortario del tratto (a ore 3) e con 360 si intende la fine anti-oraria del tratto (ancora a ore 3).
- Testo: questa funzione vi permetterà di scrivere testi nel vostro tabellone. Per poterla usare, dovete inserire il seguente codice in questo punto dell'.eps:
/simplecj {dup stringwidth pop 2 div
4 -1 roll sub neg 3 -1 roll moveto show} def
Detto questo, potete ora scrivere:/Times-Bold findfont 7.5 scalefont setfont 9.5 Unit 9.5 Unit (Testo Sul Mio Tabellone) simplecj showpage State scrivendo "Testo Sul Mio Tabellone" in 9.5,9.5.
Ecco qui, ora siete pronti per disegnare il vostro tabellone di HeroScribe! Potete dare un'occhiata ai tabelloni disponibili nel Pacchetto Icone Solo Tabelloni nella Sezione Pacchetti Icone; estraete i file vettoriali del tabellone (HeroScribe/Icons/Vector/Europe/xBoard_EU.eps.gz e HeroScribe/Icons/Vector/USA/xBoard_US.eps.gz) con 7-Zip, poi apriteli con NotePad++, o TextEdit. | |