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 {
Blank% Width, Height

Blankexch
Blankdup
Blank1 sub adjacentBoardsOffset mul
Blankexch
Blankx 2 add mul
Blankadd Unit

Blankexch
Blankdup
Blank1 sub adjacentBoardsOffset mul
Blankexch
Blanky 2 add mul
Blankadd Unit

Blank2 array astore

Blank<< /PageSize 2 index
Blank>> setpagedevice

Blankpop

%BlankGhostscript only
%Blankmark /MediaBox [ 0 0 x 2 add Unit y 2 add Unit ] /PAGE pdfmark
%Blankmark /CropBox [ 0 0 x 2 add Unit y 2 add Unit ] /PAGE pdfmark
} def

/horizontalline {
Blank0 rlineto stroke
} def

/verticalline {
Blank0 exch rlineto stroke
} def

/HorizontalLineTo {
Blank% length > 0

Blankcurrentlinewidth exch currentpoint

Blank% lw length x y

Blankcurrentlinewidth 2 div sub exch

Blank% lw length (y - lw / 2) x

Blankcurrentlinewidth 2 div sub exch

Blank% lw length (x - lw / 2) (y - lw / 2)

Blank2 index currentlinewidth add
Blankcurrentlinewidth

Blank% lw length (x - lw / 2) (y - lw / 2) (length + lw) lw

Blank0 setlinewidth
Blankrectfill

Blankpop

Blanksetlinewidth

Blank% [empty]
} def

/VerticalLineTo {
Blank% length > 0

Blankcurrentlinewidth exch currentpoint

Blank% lw length x y

Blankcurrentlinewidth 2 div sub exch

Blank% lw length (y - lw / 2) x

Blankcurrentlinewidth 2 div sub exch

Blank% lw length (x - lw / 2) (y - lw / 2)

Blank2 index currentlinewidth add
Blankcurrentlinewidth

Blankexch

Blank% lw length (x - lw / 2) (y - lw / 2) lw (length + lw)

Blank0 setlinewidth
Blankrectfill

Blankpop

Blanksetlinewidth

Blank% [empty]
} def

Blank% eventuali funzioni più complesse

/RectStroke {
Blank% xs ys width height

Blank3 index 3 index moveto
Blank1 index HorizontalLineTo

Blank3 index 3 index moveto
Blank0 index VerticalLineTo

Blank3 index
Blank3 index 2 index add
Blankmoveto
Blank1 index HorizontalLineTo

Blank3 index 2 index add
Blank3 index
Blankmoveto
Blank0 index VerticalLineTo

Blank% xs ys width height

Blankpop pop pop pop

} def

/Grid {
Blankgsave
Blank1 Unit 1 Unit translate

BlankBorderRGB setrgbcolor
Blank0 setlinejoin

BlankGridStroke setlinewidth

Blank0 1 x 1 sub {
Blankgsave
BlankUnit 0 translate

Blank0 0 moveto
Blanky Unit verticalline


Blank2 1 10 {
BlankBlankgsave
BlankBlank12 div Unit 0 translate

BlankBlank0 0 moveto
BlankBlank-1 Border mul Unit verticalline

BlankBlank0 y Unit moveto
BlankBlankBorder Unit verticalline


BlankBlankgrestore
Blank} for

BlankgrestoreBlank
Blank} for

Blank0 1 y 1 sub {
Blankgsave
BlankUnit 0 exch translate

Blank0 0 moveto
Blankx Unit horizontalline


Blank2 1 10 {
BlankBlankgsave
BlankBlank12 div Unit 0 exch translate

BlankBlank0 0 moveto
BlankBlank-1 Border mul Unit horizontalline

BlankBlankx Unit 0 moveto
BlankBlankBorder Unit horizontalline


BlankBlankgrestore
Blank} for

BlankgrestoreBlank
Blank} for

Blank% eventuali corridoi e aree scure e della griglia che sono più complesse

Blank0 0
Blankx Unit
Blanky Unit
Blank% Use RectStroke (the function previously defined) instead of ``rectstroke''
Blank% for using PDFs of this file as converted by ghostscript con Illustrator
Blankrectstroke

Blank0 Border sub Unit
Blank0 Border sub Unit
Blank2 Border mul x add Unit
Blank2 Border mul y add Unit
Blankrectstroke

BlankRoomStroke setlinewidth

Blank% Central Room
Blank10 Unit 7 Unit 6 Unit 5 Unit rectstroke

Blank% Lower-Left Rooms
Blank1 Unit 1 Unit 8 Unit 8 Unit rectstroke
Blank9 Unit 1 Unit 3 Unit 5 Unit rectstroke
Blank5 Unit 1 Unit 4 Unit 5 Unit rectstroke
Blank1 Unit 5 Unit 4 Unit 4 Unit rectstroke
Blank5 Unit 6 Unit 2 Unit 3 Unit rectstroke

Blank% Upper-Left Rooms
Blank1 Unit 10 Unit 8 Unit 8 Unit rectstroke
Blank1 Unit 10 Unit 4 Unit 8 Unit rectstroke
Blank1 Unit 15 Unit 8 Unit 3 Unit rectstroke
Blank9 Unit 13 Unit 3 Unit 5 Unit rectstroke

Blank% Lower-Right Rooms
Blank14 Unit 1 Unit 4 Unit 5 Unit rectstroke
Blank18 Unit 1 Unit 7 Unit 4 Unit rectstroke
Blank21 Unit 1 Unit 4 Unit 8 Unit rectstroke

Blank17 Unit 6 Unit moveto 3 Unit verticalline
Blank17 Unit 9 Unit moveto 4 Unit horizontalline

Blank% Upper-Right Rooms
Blank14 Unit 13 Unit 3 Unit 5 Unit rectstroke
Blank17 Unit 10 Unit 8 Unit 8 Unit rectstroke
Blank17 Unit 14 Unit 8 Unit 4 Unit rectstroke
Blank17 Unit 10 Unit 4 Unit 8 Unit rectstroke

Blankgrestore
} def

/Dark {
BlankDarkRGB setrgbcolor
Blank0 setlinewidth

Blank3 index Unit
Blank3 index Unit
Blank3 index Unit
Blank3 index Unit

Blankrectfill

Blankpop pop pop pop
} def

/Trap {
% Solo versione Nord-Americana, INIZIO
BlankTrapRGB setrgbcolor
Blank0 setlinewidth

Blank3 index Unit
Blank3 index Unit
Blank3 index Unit
Blank3 index Unit

Blank3 index
Blank3 index
Blank3 index
Blank3 index

Blankgsave
Blankrectclip
Blankrectfill
BlankGrid
Blankgrestore
% Solo versione Nord-Americana, FINE
Blankpop pop pop pop
} def

/Corridor {
% Solo versione Nord-Americana, INIZIO
BlankCorridorRGB setrgbcolor
Blank0 setlinewidth

Blank3 index Unit
Blank3 index Unit
Blank3 index Unit
Blank3 index Unit

Blankrectfill
% Solo versione Nord-Americana, FINE
Blankpop pop pop pop
} def

/StartBoard {
Blank% Column Row

Blankexch
Blankdup
BlankadjacentBoardsOffset mul
Blankexch
Blankx 2 add mul
Blankadd Unit

Blankexch
Blankdup
BlankadjacentBoardsOffset mul
Blankexch
Blanky 2 add mul
Blankadd Unit

Blankgsave
Blanktranslate
} def

/EndBoard {
Blankgrestore
} def

/HorizontalBridge {
Blank% bottom

Blankdup

BlankCorridorRGB setrgbcolor

BlankUnit
Blankx 1 add Unit
Blankexch
Blank2 adjacentBoardsOffset add Unit
Blank1 Unit
Blankrectfill

BlankBorderRGB setrgbcolor
BlankGridStroke setlinewidth

BlankUnit
Blankx 1 add Unit
Blankexch
Blank2 adjacentBoardsOffset add Unit
Blank1 Unit
Blankrectstroke
} def

/VerticalBridge {
Blank% left

Blankdup

BlankCorridorRGB setrgbcolor

BlankUnit
Blank2 adjacentBoardsOffset add -1 mul 1 add Unit
Blank1 Unit
Blank2 adjacentBoardsOffset add Unit
Blankrectfill

BlankBorderRGB setrgbcolor
BlankGridStroke setlinewidth

BlankUnit
Blank2 adjacentBoardsOffset add -1 mul 1 add Unit
Blank1 Unit
Blank2 adjacentBoardsOffset add Unit
Blankrectstroke
} 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 cmd 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 cmd -> 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©:

Tabellone Dragon Strike© della Città

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
    Arc
    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.

Artefatto HeroQuest
Homepage
Download
Download
FAQ
FAQ
Artefatto
Font
Font
Remake
Remake
XML
XML
GuestBook
GuestBook
Links
Link
E-mail
Contatti
Eroi
Eroi
Lunga Vita
Lunga Vita
News
News
Pacchetti Icone
Pacchetti Icone
Copyright 1989, 1990 Milton Bradley Company. Tutti i Diritti Riservati.
Nulla su questo sito è inteso come sfida ai diritti
della Milton Bradley Company/Hasbro, Inc. nei riguardi di HeroQuest.