/* * This file is part of OpenTTD. * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . */ /** @file smallmap_colours.h Colours used by smallmap. */ #ifndef SMALLMAP_COLOURS_H #define SMALLMAP_COLOURS_H #include "palette_func.h" #include "core/endian_func.hpp" #define MKCOLOUR(x) TO_LE32X(x) #define MKCOLOUR_XXXX(x) (MKCOLOUR(0x01010101) * (uint)(x)) #define MKCOLOUR_X0X0(x) (MKCOLOUR(0x01000100) * (uint)(x)) #define MKCOLOUR_0X0X(x) (MKCOLOUR(0x00010001) * (uint)(x)) #define MKCOLOUR_0XX0(x) (MKCOLOUR(0x00010100) * (uint)(x)) #define MKCOLOUR_X00X(x) (MKCOLOUR(0x01000001) * (uint)(x)) #define MKCOLOUR_XYXY(x, y) (MKCOLOUR_X0X0(x) | MKCOLOUR_0X0X(y)) #define MKCOLOUR_XYYX(x, y) (MKCOLOUR_X00X(x) | MKCOLOUR_0XX0(y)) #define MKCOLOUR_0000 MKCOLOUR_XXXX(0x00) #define MKCOLOUR_0FF0 MKCOLOUR_0XX0(0xFF) #define MKCOLOUR_F00F MKCOLOUR_X00X(0xFF) #define MKCOLOUR_FFFF MKCOLOUR_XXXX(0xFF) #include "table/heightmap_colours.h" #include "table/darklight_colours.h" /** Colour scheme of the smallmap. */ struct SmallMapColourScheme { uint32_t *height_colours; ///< Cached colours for each level in a map. const uint32_t *height_colours_base; ///< Base table for determining the colours size_t colour_count; ///< The number of colours. uint32_t default_colour; ///< Default colour of the land. }; extern SmallMapColourScheme _heightmap_schemes[]; struct AndOr { uint32_t mor; uint32_t mand; }; inline uint32_t ApplyMask(uint32_t colour, const AndOr *mask) { return (colour & mask->mand) | mask->mor; } /** Colour masks for "Contour" and "Routes" modes. */ static const AndOr _smallmap_contours_andor[] = { {MKCOLOUR_0000 , MKCOLOUR_FFFF}, // MP_CLEAR {MKCOLOUR_0XX0(PC_GREY ), MKCOLOUR_F00F}, // MP_RAILWAY {MKCOLOUR_0XX0(PC_BLACK ), MKCOLOUR_F00F}, // MP_ROAD {MKCOLOUR_0XX0(PC_DARK_RED ), MKCOLOUR_F00F}, // MP_HOUSE {MKCOLOUR_0000 , MKCOLOUR_FFFF}, // MP_TREES {MKCOLOUR_XXXX(PC_LIGHT_BLUE), MKCOLOUR_0000}, // MP_STATION {MKCOLOUR_XXXX(PC_WATER ), MKCOLOUR_0000}, // MP_WATER {MKCOLOUR_0000 , MKCOLOUR_FFFF}, // MP_VOID {MKCOLOUR_XXXX(PC_DARK_RED ), MKCOLOUR_0000}, // MP_INDUSTRY {MKCOLOUR_0000 , MKCOLOUR_FFFF}, // MP_TUNNELBRIDGE {MKCOLOUR_0XX0(PC_DARK_RED ), MKCOLOUR_F00F}, // MP_OBJECT {MKCOLOUR_0XX0(PC_GREY ), MKCOLOUR_F00F}, }; /** Colour masks for "Vehicles", "Industry", and "Vegetation" modes. */ static const AndOr _smallmap_vehicles_andor[] = { {MKCOLOUR_0000 , MKCOLOUR_FFFF}, // MP_CLEAR {MKCOLOUR_0XX0(PC_BLACK ), MKCOLOUR_F00F}, // MP_RAILWAY {MKCOLOUR_0XX0(PC_BLACK ), MKCOLOUR_F00F}, // MP_ROAD {MKCOLOUR_0XX0(PC_DARK_RED ), MKCOLOUR_F00F}, // MP_HOUSE {MKCOLOUR_0000 , MKCOLOUR_FFFF}, // MP_TREES {MKCOLOUR_0XX0(PC_BLACK ), MKCOLOUR_F00F}, // MP_STATION {MKCOLOUR_XXXX(PC_WATER ), MKCOLOUR_0000}, // MP_WATER {MKCOLOUR_0000 , MKCOLOUR_FFFF}, // MP_VOID {MKCOLOUR_XXXX(PC_DARK_RED ), MKCOLOUR_0000}, // MP_INDUSTRY {MKCOLOUR_0000 , MKCOLOUR_FFFF}, // MP_TUNNELBRIDGE {MKCOLOUR_0XX0(PC_DARK_RED ), MKCOLOUR_F00F}, // MP_OBJECT {MKCOLOUR_0XX0(PC_BLACK ), MKCOLOUR_F00F}, }; static const uint32_t _vegetation_clear_bits[] = { MKCOLOUR_XXXX(PC_GRASS_LAND), ///< full grass MKCOLOUR_XXXX(PC_ROUGH_LAND), ///< rough land MKCOLOUR_XXXX(PC_GREY), ///< rocks MKCOLOUR_XXXX(PC_FIELDS), ///< fields MKCOLOUR_XXXX(PC_LIGHT_BLUE), ///< snow MKCOLOUR_XXXX(PC_ORANGE), ///< desert MKCOLOUR_XXXX(PC_GRASS_LAND), ///< unused MKCOLOUR_XXXX(PC_GRASS_LAND), ///< unused }; #endif /* SMALLMAP_COLOURS_H */