summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpeter1138 <peter1138@openttd.org>2006-03-01 23:14:03 +0000
committerpeter1138 <peter1138@openttd.org>2006-03-01 23:14:03 +0000
commit741fc265225e879d77515d14f056c8969f6fde82 (patch)
tree5d55a4f5db80674d8bee645029acf2132b708c08
parent4367870b18782051c9262e7d599341749c2206fa (diff)
downloadopenttd-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.grfbin0 -> 66566 bytes
-rw-r--r--engine.h9
-rw-r--r--gfxinit.c3
-rw-r--r--table/sprites.h5
-rw-r--r--vehicle.c16
5 files changed, 26 insertions, 7 deletions
diff --git a/data/2ccmap.grf b/data/2ccmap.grf
new file mode 100644
index 000000000..4e833c0e8
--- /dev/null
+++ b/data/2ccmap.grf
Binary files differ
diff --git a/engine.h b/engine.h
index 637e9f649..14e21f311 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 9977536f0..e60a5308a 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 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
};
diff --git a/vehicle.c b/vehicle.c
index fa8ba9893..0074a0355 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