|  | Creare nuovi tabelloni per HeroScribeDisegnare 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: Questo basterà se il vostro tabellone non comprende oggetti complessi; altrimenti, avrete bisogno di dare un'occhiata alle più complesse funzioni di disegno.Vettoriale: HeroScribe/Icons/Vector/Europe/Board_EU.eps.gz e HeroScribe/Icons/Vector/USA/Board_US.eps.gzObjects.xml: HeroScribe/Objects.xmlRaster: HeroScribe/Icons/Raster/Europe/Board_EU.png e HeroScribe/Icons/Raster/USA/Board_US.png
 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:
 Per approfondire queste parti colorate, passate il vostro mouse sopra di esse e leggete attentamente le relative spiegazioni. D'accordo, ora non impanicatevi:blu: differenze tra le mappe Europea e Nord-Americanarosso: funzioni di disegno che non ci interessanoverde: informazioni vitali che (potremmo) dover modificare
 %!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.xmlPrima 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">
Se il vostro tabellone contiene corridoi più complessi dei semplici rettangoli non preoccupatevi, ci occuperemo di funzioni complesse più avanti.<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>
 La modifica del vostro Objects.xml è terminata! Passiamo alla modifica raster del vostro tabellone.
 Modifica rasterOra 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/binDa 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 disegnoIl 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.
 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.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 setrgbcolorPotete 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 setrgbcolorDopodiché, 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 rectfillIn 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 fillIn 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 fillConfigurazione dei tratti: in caso dobbiate disegnare griglie più complesse, selezionate la dimensione del tratto più appropriata:GridStroke setlinewidthPotete 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 strokeState 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 strokeState 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 strokeState 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 {
Detto questo, potete ora disegnare un'ellisse:/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
 11 Unit 8 Unit 2 Unit 4 Unit 0 360 ellipse strokeState 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
Detto questo, potete ora scrivere:4 -1 roll sub neg 3 -1 roll moveto show} def
 /Times-Bold findfont 7.5 scalefont setfont 9.5 Unit 9.5 Unit (Testo Sul Mio Tabellone) simplecj showpageState scrivendo "Testo Sul Mio Tabellone" in 9.5,9.5.
 |  |