diff options
author | peter1138 <peter1138@openttd.org> | 2006-03-01 23:14:03 +0000 |
---|---|---|
committer | peter1138 <peter1138@openttd.org> | 2006-03-01 23:14:03 +0000 |
commit | 741fc265225e879d77515d14f056c8969f6fde82 (patch) | |
tree | 5d55a4f5db80674d8bee645029acf2132b708c08 | |
parent | 4367870b18782051c9262e7d599341749c2206fa (diff) | |
download | openttd-741fc265225e879d77515d14f056c8969f6fde82.tar.xz |
(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.
-rw-r--r-- | data/2ccmap.grf | bin | 0 -> 66566 bytes | |||
-rw-r--r-- | engine.h | 9 | ||||
-rw-r--r-- | gfxinit.c | 3 | ||||
-rw-r--r-- | table/sprites.h | 5 | ||||
-rw-r--r-- | vehicle.c | 16 |
5 files changed, 26 insertions, 7 deletions
diff --git a/data/2ccmap.grf b/data/2ccmap.grf Binary files differnew file mode 100644 index 000000000..4e833c0e8 --- /dev/null +++ b/data/2ccmap.grf @@ -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, @@ -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 c29ffddf1..54ef424ee 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 }; @@ -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 |