From 058ccfb1578d0568dc2fdbd65c1c4b957c9a4cfd Mon Sep 17 00:00:00 2001 From: peter1138 Date: Wed, 1 Mar 2006 23:14:03 +0000 Subject: [PATCH] (svn r3717) - [2cc] Add 2cc colour maps and use for newgrf engines requiring them. Currently the second colour is fixed to be the player's colour. --- data/2ccmap.grf | Bin 0 -> 66566 bytes engine.h | 9 +++++++++ gfxinit.c | 3 +++ table/sprites.h | 5 +++-- vehicle.c | 16 +++++++++++----- 5 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 data/2ccmap.grf diff --git a/data/2ccmap.grf b/data/2ccmap.grf new file mode 100644 index 0000000000000000000000000000000000000000..4e833c0e885423f7542f4635e75182babb137e30 GIT binary patch literal 66566 zcmZQ%{LjF^$i&RT%Er#Y$;HjX%f~MuC?qT*Dkd%=DJ3l ztEX>ZXk=_+YG!U>X=QC=YiIA^=;Z9;>gMj@>E-R?>*s&$_=%IJPMIRvK4a#r*>mR3o4;V;qQy&=E?d50<*LVdJLFTefc7zGLUE-Fx=#+kfET zp~FXx!fZWv{=&sem#&lpTB(l z_Wj4tU%&tS{r7+PgaIt1M{*dz(&$JI16ZCM$zcF4B9<&&Hj={tR(_7;FbE0`2?hBd zghy<>0Ii8fau~qc6eBqdVC}Av90st~=12|$SW9~(hk*m6+n_#@!@$%G(z6@MVGxm} zps4Yci+d!80m%QLp8wzo16VJ1B#$2qOc=my9m(lnaE%|pVuZeVVQ`Hf3``gduJMC` z34_5kelRd$Fu2AK1||#=2G#h%z=Xlz8b27AFc@6p2LlrZgKPX?V8UQqriR!8LvW zixK*k2ZL+;U|_;vaE%`fOc)HV@q>X0gTXa^Ffd^-xW*3#CJYAG_`$%0!QdJ{7?>~^ zT;m4=69$88{9s_hU~r8e3``gduJMC`34_5kegNye(6_%ZxW*3#CJYAG_`$%00W1d& zj`4$m2?Lm|BRLEP*Z2V}M(A564zBTofeC}bHGVKKVKBJH4+bU-2G{t(z=Xlz8b27A zFc@6p2LlrZgKPX?V8UQX0gTXa^ zFfd^-xW*3#CJYAG_`$%0!QdJ{7?>~^T;m4=69$88{9s_hU~r8e3``gduJHp{tCha( z#KARwFfd^-xW*3#CJYAG_`$%0!QdJ{7??1CmBfQ%{9s_h0A}k*4uiopegKOR`qqtu zYy4nf!eDTX9}G+w46gBmfeC}bHGVKKVKBJH4+bU-2G{t(z=Xlz8b27AFc@6p2LlrZ zgKPW%)?%Y?8)X0gTXa^0Bfz#w|y|U#t#N23=Yy4nf z!eDTX9}G+w46gBmfeC}bHGVKKVE}8D436=Gfe8bcts^-M2G{rjEJoX016a#!aEu=eOc=my9m!!Z zxW*4)F+$(A^57aj7?>~^T;m4=69$88{9s_hU~r8e3``gduJHp{2~FQJad3?v3``gd zuJMC`34_5kelRd$Fu2AK1||#!*Z9G}gu&n%KNy%W7+m8A0}}>=Yy4nf!eDTX9}G+w zz*?t+WBg!X!T@ILNDhO+HGTk#5&HHQ2G{t(z=Xlz8b27AFc@6p2LlrZgKPW%RyxtQ zJQ!T#2LlrZgKPX?V8UQ=Yy4nf!eDTX z9}G+w46gBmfeC}bHGVKKVKBJH4+bU-2G{t(z=Q#;mohlU4+bU-V789rFc@6p2e25S zZ@+PHjUNn57!0oQ16Zo0Z#o!U;|Bv127_z-U|_;vaE%`fOc)HV@q>X0gTXa^Ffd^- zxW*3#CJYAG_`$%0!QdJ{7?>~^T;m4=69$88{9s_hU~r8e3``gduJMC`2?JP9ZE%bq z3``inY#qsAFu2AKU@=19zVqN3KY+yueZydIjUNn57!0oQgMkTy!8Lv`Fkvvb#t#N2 z3X0gTXa^Ffd^-xW*3# zCJYAG_`$%00j#$=IK~eKCJbPHT;m5Y*No)xgMkTy!8Lv`Fkvvb#t#N23X0gTXa^Ffd^-xW*3#CJYAG l_`$%0!QdJ{7?>~^T;m4=69$88{9s_h0A?%cV<-$@006j<%mV-b literal 0 HcmV?d00001 diff --git a/engine.h b/engine.h index 637e9f6494..14e21f311a 100644 --- a/engine.h +++ b/engine.h @@ -98,6 +98,15 @@ typedef struct Engine { byte type; // type, ie VEH_Road, VEH_Train, etc. Same as in vehicle.h } Engine; +/** + * EngineInfo.misc_flags is a bitmask, with the following values + */ +enum { + EF_RAIL_TILTS = 0, ///< Rail vehicle tilts in curves (unsupported) + EF_ROAD_TRAM = 0, ///< Road vehicle is a tram/light rail vehicle (unsup) + EF_USES_2CC = 1, ///< Vehicle uses two company colours + EF_RAIL_IS_MU = 2, ///< Rail vehicle is a multiple-unit (DMU/EMU) +}; enum { RVI_MULTIHEAD = 1, diff --git a/gfxinit.c b/gfxinit.c index 9977536f08..e60a5308ab 100644 --- a/gfxinit.c +++ b/gfxinit.c @@ -352,6 +352,9 @@ static void LoadSpriteTables(void) load_index = SPR_AUTORAIL_BASE; load_index += LoadGrfFile("autorail.grf", load_index, i++); + assert(load_index == SPR_2CCMAP_BASE); + load_index += LoadGrfFile("2ccmap.grf", load_index, i++); + assert(load_index == SPR_OPENTTD_BASE); LoadGrfIndexed("openttd.grf", _openttd_grf_indexes, i++); load_index = SPR_OPENTTD_BASE + OPENTTD_SPRITES_COUNT; diff --git a/table/sprites.h b/table/sprites.h index c29ffddf19..54ef424ee8 100644 --- a/table/sprites.h +++ b/table/sprites.h @@ -51,7 +51,8 @@ enum Sprites { SPR_CANALS_BASE = 5382, SPR_SLOPES_BASE = SPR_CANALS_BASE + 70, SPR_AUTORAIL_BASE = SPR_SLOPES_BASE + 78, - SPR_OPENTTD_BASE = SPR_AUTORAIL_BASE + 55, + SPR_2CCMAP_BASE = SPR_AUTORAIL_BASE + 55, + SPR_OPENTTD_BASE = SPR_2CCMAP_BASE + 256, SPR_BLOT = SPR_OPENTTD_BASE + 29, // colored circle (mainly used as vehicle profit marker and for sever compatibility) @@ -1071,7 +1072,7 @@ enum SpriteSetup { TRANSPARENT_BIT = 31, ///< toggles transparency in the sprite RECOLOR_BIT = 15, ///< toggles recoloring in the sprite PALETTE_SPRITE_START = 16, ///< number of the first bit of the sprite containing the recolor palette - PALETTE_SPRITE_WIDTH = 11, ///< number of bits of the sprite containing the recolor palette + PALETTE_SPRITE_WIDTH = 14, ///< number of bits of the sprite containing the recolor palette SPRITE_WIDTH = 14, ///< number of bits for the sprite number }; diff --git a/vehicle.c b/vehicle.c index fa8ba98936..0074a03551 100644 --- a/vehicle.c +++ b/vehicle.c @@ -2040,20 +2040,26 @@ UnitID GetFreeUnitNumber(byte type) return unit; } -// XXX Temporary stub -- will be expanded -static PalSpriteID GetEngineColourMap(PlayerID player) +static PalSpriteID GetEngineColourMap(EngineID engine_type, PlayerID player) { - return SPRITE_PALETTE(PLAYER_SPRITE_COLOR(player)); + SpriteID map; + byte colour = _player_colors[player]; + + /* XXX Magic 0x307 is the first company colour remap sprite */ + map = HASBIT(_engine_info[engine_type].misc_flags, EF_USES_2CC) ? + (SPR_2CCMAP_BASE + colour + colour * 16) : (0x307 + colour); + + return SPRITE_PALETTE(map << PALETTE_SPRITE_START); } PalSpriteID GetEnginePalette(EngineID engine_type, PlayerID player) { - return GetEngineColourMap(player); + return GetEngineColourMap(engine_type, player); } PalSpriteID GetVehiclePalette(const Vehicle *v) { - return GetEngineColourMap(v->owner); + return GetEngineColourMap(v->engine_type, v->owner); } // Save and load of vehicles