. Thanks to our Czech collegues, it has brought to my attention that, due to recent changes in m4nfo core routines, this was no longer possible. After fixing that bug, I took the chance to revisit the way how to efficiently
.
Here, I´d like to show code and graphics for a small test set which re-models one of the
.
sprites and recolour sprites. These may be mixed freely.
easily reduce repetitive code for the bridge "tables". In fact, the code restricts itself to a single macro/function to model every bridge table (-> b_seg()), which is then called for every bridge segment with different parameters.
The set also shows how to divide bridge code into single layouts, if needed/wanted.
Code: Select all
define(GRF_NBRIDGES, xx xx xx xx) // put valid GRF-ID here
define(SUSPENSION,5)
setfeature(_BRIDGE)
setpath(xxxxxx/sprites) // put valid $PATH here
// exit if toyland
skipif(EXIT,CLIMATE,==,TOYLAND)
//------------------------------------------------------------------
// bridge test with custom sprite and recolour sprite allocation
// re-coding th_gergo´s suspension bridge from the TBR Set
//------------------------------------------------------------------
textmode_on()
grfinit(GRF_NBRIDGES,
grfname(ALL,"NewBridge v0.2 (test) 14.02.2018")
grfdescription(ALL,UTF8 CRLF T_LGRAY "NewBridge © 2018 by Michael Blunck. All rights reserved." CRLF
"Bridge graphics by th_gergo" CRLF
"Visit www.ttdpatch.de")
grfurl(ALL,"http://www.ttdpatch.de")
grfpalette(DOS)
grfversion(0)
grfminversion(0)
)
textmode_off()
deftxt(_mybridge,
ALL,"Test bridges",
D, UTF8 "Brückentest",
F, "Test de pontages",
E, "Prueba de puentes",
I, "Test dei ponti",
NL, "Test van de bruggen"
)
// rebuilt original suspension steel (golden) bridge (ID 05)
definebridge(SUSPENSION,
intro(1950)
minlength(2)
maxlength(9)
price(50)
maxspeed(80 km/h)
flags(NOFARPILLARS)
purchasetext(_mybridge)
)
spriteblock(ALLOCATE,
set(
// [0] b_front
sprite(test_bridge.png 2 40 01 47 47 -44 -35)
sprite(test_bridge.png 66 40 01 42 52 -49 -30)
sprite(test_bridge.png 130 40 01 47 52 -49 -35)
sprite(test_bridge.png 194 40 01 42 47 -44 -29)
sprite(test_bridge.png 258 40 01 47 47 1 -34)
sprite(test_bridge.png 322 40 01 42 52 1 -29)
sprite(test_bridge.png 386 40 01 47 52 1 -34)
sprite(test_bridge.png 450 40 01 42 47 0 -29)
// [8] b_rail
sprite(test_bridge.png 514 40 01 47 50 -23 -24)
sprite(test_bridge.png 578 40 01 41 50 -23 -18)
sprite(test_bridge.png 642 40 01 47 50 -23 -24)
sprite(test_bridge.png 706 40 01 41 50 -24 -17)
sprite(test_bridge.png 2 104 01 47 50 -23 -23)
sprite(test_bridge.png 66 104 01 41 50 -23 -17)
sprite(test_bridge.png 130 104 01 47 50 -23 -23)
sprite(test_bridge.png 194 104 01 41 50 -23 -17)
// [16] b_road
sprite(test_bridge.png 258 104 01 47 50 -23 -24)
sprite(test_bridge.png 322 104 01 41 50 -23 -18)
sprite(test_bridge.png 386 104 01 47 50 -23 -24)
sprite(test_bridge.png 450 104 01 41 50 -23 -17)
sprite(test_bridge.png 514 104 01 47 50 -23 -23)
sprite(test_bridge.png 578 104 01 41 50 -23 -17)
sprite(test_bridge.png 642 104 01 47 50 -23 -23)
sprite(test_bridge.png 706 104 01 41 50 -23 -17)
// [24] b_mono
sprite(test_bridge.png 2 168 01 47 50 -23 -24)
sprite(test_bridge.png 66 168 01 41 50 -23 -18)
sprite(test_bridge.png 130 168 01 47 50 -23 -24)
sprite(test_bridge.png 194 168 01 41 50 -23 -17)
sprite(test_bridge.png 258 168 01 47 50 -23 -23)
sprite(test_bridge.png 322 168 01 41 50 -23 -17)
sprite(test_bridge.png 386 168 01 47 50 -23 -23)
sprite(test_bridge.png 450 168 01 41 50 -23 -17)
// [32] b_maglev
sprite(test_bridge.png 514 168 01 47 50 -23 -24)
sprite(test_bridge.png 578 168 01 41 50 -23 -18)
sprite(test_bridge.png 642 168 01 47 50 -23 -24)
sprite(test_bridge.png 706 168 01 41 50 -23 -17)
sprite(test_bridge.png 2 232 01 47 50 -23 -23)
sprite(test_bridge.png 66 232 01 41 50 -23 -17)
sprite(test_bridge.png 130 232 01 47 50 -23 -23)
sprite(test_bridge.png 194 232 01 41 50 -23 -17)
// [40] b_pillar
sprite(test_bridge.png 258 232 01 13 12 -5 -7)
sprite(test_bridge.png 290 232 01 13 12 -5 -7)
// [42] b_pillar_s (shifted pillars)
sprite(test_bridge.png 258 232 01 13 12 -37 9)
sprite(test_bridge.png 290 232 01 13 12 27 9)
// b_pal (recolour tables)
// [44] blue grey, rail
colourtable(DOSMAP,
47 .. 48, D7 .. D8,
49 .. 4F, 10 .. 16
)
// [45] ocean blue, road
colourtable(DOSMAP,
47 .. 48, D7 .. D8,
49 .. 4F, 9A .. A0
)
// [46] golden, mono + maglev
colourtable(DOSMAP,
47 .. 4F, 3C .. 44,
)
)
)
spriteset(0)
// make entry points for sprites
define(b_base,0)
define(b_front,{eval(b_base+$1)})
define(b_rail,{eval(b_front(8)+$1)})
define(b_road,{eval(b_rail(8)+$1)})
define(b_mono,{eval(b_road(8)+$1)})
define(b_mlev,{eval(b_mono(8)+$1)})
define(b_pillar,{eval(b_mlev(8)+$1)})
define(b_pillar_s,{eval(b_pillar(2)+$1)})
define(b_pal,{eval((b_pillar_s(2)+$1) << 16)})
// general bridge segment
define(b_seg,{
segment(
railbridge(front(b_front($1)+b_pal(0), b_front($2)+b_pal(0)), back(b_rail($1)+b_pal(0), b_rail($2)+b_pal(0)), pillar($3, $4))
roadbridge(front(b_front($1)+b_pal(1), b_front($2)+b_pal(1)), back(b_road($1)+b_pal(1), b_road($2)+b_pal(1)), pillar($3, $4))
monobridge(front(b_front($1)+b_pal(2), b_front($2)+b_pal(2)), back(b_mono($1)+b_pal(2), b_mono($2)+b_pal(2)), pillar($3, $4))
mlevbridge(front(b_front($1)+b_pal(2), b_front($2)+b_pal(2)), back(b_mlev($1)+b_pal(2), b_mlev($2)+b_pal(2)), pillar($3, $4))
)}
)
// filling in the bridge segments:
//
// segment entry
// bridge entry gate
// segment exit
// segment body
// segment connector
define(b_segentr,{b_seg(0,4, NONE, NONE)}) // this is '/', without pillar
define(b_segent0,{b_seg(0,4, b_pillar_s(0), b_pillar_s(1))}) // this is '/', with front pillar
define(b_segexit,{b_seg(1,5, b_pillar(0), b_pillar(1))}) // this is '\', with pillar
define(b_segbody,{b_seg(2,6, NONE, NONE)}) // this is '=', without pillar
define(b_segconn,{b_seg(3,7, b_pillar(0), b_pillar(1))}) // this is '^', with pillar
// make all 6 bridge elements
layout(SUSPENSION,0,
b_segexit()
b_segent0()
b_segentr()
b_segexit()
b_segbody()
b_segconn()
)
// bridge ramps - use original TTD sprites but recolor them
define(RAIL, 0x985)
define(ROAD, 0x98D)
define(MONO, 0x10E6)
define(MLEV, 0x110E)
layout(SUSPENSION,6,
segment(
railbridge(flat(front(RAIL, RAIL+2), back(RAIL+1, RAIL+3)),
ramp(front(RAIL+4, RAIL+6), back(RAIL+5, RAIL+7)))
roadbridge(flat(front(ROAD+b_pal(1), ROAD+2+b_pal(1)), back(ROAD+1+b_pal(1), ROAD+3+b_pal(1))),
ramp(front(ROAD+4+b_pal(1), ROAD+6+b_pal(1)), back(ROAD+5+b_pal(1),ROAD+7+b_pal(1))))
monobridge(flat(front(MONO+_BYELLOW, MONO+2+_BYELLOW), back(MONO+1+_BYELLOW, MONO+3+_BYELLOW)),
ramp(front(MONO+4+_BYELLOW, MONO+6+_BYELLOW), back(MONO+5+_BYELLOW,MONO+7+_BYELLOW)))
mlevbridge(flat(front(MLEV+_BWHITE, MLEV+2+_BWHITE), back(MLEV+1+_BWHITE, MLEV+3+_BWHITE)),
ramp(front(MLEV+4+_BWHITE, MLEV+6+_BWHITE), back(MLEV+5+_BWHITE, MLEV+7+_BWHITE)))
)
)