mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-20 13:33:02 +01:00
implement finish-map-window part 5
This commit is contained in:
@@ -1377,7 +1377,285 @@ static void map_window_decrease_map_size()
|
||||
gfx_invalidate_screen();
|
||||
}
|
||||
|
||||
static const uint16 WaterColour = 0xC3C3;
|
||||
static const uint16 TerrainColour[] = {
|
||||
0x4949, // TERRAIN_GRASS
|
||||
0x2828, // TERRAIN_SAND
|
||||
0x6C6C, // TERRAIN_DIRT
|
||||
0x0C0C, // TERRAIN_ROCK
|
||||
0x3E3E, // TERRAIN_MARTIAN
|
||||
0x0A10, // TERRAIN_CHECKERBOARD
|
||||
0x496C, // TERRAIN_GRASS_CLUMPS
|
||||
0x8D8D, // TERRAIN_ICE
|
||||
0xAC0A, // TERRAIN_GRID_RED
|
||||
0x360A, // TERRAIN_GRID_YELLOW
|
||||
0xA20A, // TERRAIN_GRID_BLUE
|
||||
0x660A, // TERRAIN_GRID_GREEN
|
||||
0x6F6F, // TERRAIN_SAND_DARK
|
||||
0xDEDE, // TERRAIN_SAND_LIGHT
|
||||
};
|
||||
|
||||
static const uint16 ElementTypeMaskColour[] = {
|
||||
0xFFFF, // MAP_ELEMENT_TYPE_SURFACE
|
||||
0x0000, // MAP_ELEMENT_TYPE_PATH
|
||||
0x00FF, // MAP_ELEMENT_TYPE_TRACK
|
||||
0xFF00, // MAP_ELEMENT_TYPE_SCENERY
|
||||
0x0000, // MAP_ELEMENT_TYPE_ENTRANCE
|
||||
0xFFFF, // MAP_ELEMENT_TYPE_FENCE
|
||||
0x0000, // MAP_ELEMENT_TYPE_SCENERY_MULTIPLE
|
||||
0xFFFF // MAP_ELEMENT_TYPE_BANNER
|
||||
};
|
||||
|
||||
static const uint16 ElementTypeAddColour[] = {
|
||||
0x0000, // MAP_ELEMENT_TYPE_SURFACE
|
||||
0x1111, // MAP_ELEMENT_TYPE_PATH
|
||||
0xB700, // MAP_ELEMENT_TYPE_TRACK
|
||||
0x0063, // MAP_ELEMENT_TYPE_SCENERY
|
||||
0xBABA, // MAP_ELEMENT_TYPE_ENTRANCE
|
||||
0x0000, // MAP_ELEMENT_TYPE_FENCE
|
||||
0x6363, // MAP_ELEMENT_TYPE_SCENERY_MULTIPLE
|
||||
0x0000 // MAP_ELEMENT_TYPE_BANNER
|
||||
};
|
||||
|
||||
enum {
|
||||
COLOUR_KEY_RIDE,
|
||||
COLOUR_KEY_FOOD,
|
||||
COLOUR_KEY_DRINK,
|
||||
COLOUR_KEY_SOUVENIR,
|
||||
COLOUR_KEY_KIOSK,
|
||||
COLOUR_KEY_FIRST_AID,
|
||||
COLOUR_KEY_CASH_MACHINE,
|
||||
COLOUR_KEY_TOILETS
|
||||
};
|
||||
|
||||
static const uint8 RideColourKey[] = {
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_SPIRAL_ROLLER_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_STAND_UP_ROLLER_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_SUSPENDED_SWINGING_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_INVERTED_ROLLER_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_JUNIOR_ROLLER_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_MINIATURE_RAILWAY
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_MONORAIL
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_MINI_SUSPENDED_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_BOAT_RIDE
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_WOODEN_WILD_MOUSE
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_STEEPLECHASE
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_CAR_RIDE
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_LAUNCHED_FREEFALL
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_BOBSLEIGH_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_OBSERVATION_TOWER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_LOOPING_ROLLER_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_DINGHY_SLIDE
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_MINE_TRAIN_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_CHAIRLIFT
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_CORKSCREW_ROLLER_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_MAZE = 20
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_SPIRAL_SLIDE
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_GO_KARTS
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_LOG_FLUME
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_RIVER_RAPIDS
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_DODGEMS
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_PIRATE_SHIP
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_SWINGING_INVERTER_SHIP
|
||||
COLOUR_KEY_FOOD, // RIDE_TYPE_FOOD_STALL
|
||||
COLOUR_KEY_FOOD, // RIDE_TYPE_1D
|
||||
COLOUR_KEY_DRINK, // RIDE_TYPE_DRINK_STALL
|
||||
COLOUR_KEY_DRINK, // RIDE_TYPE_1F
|
||||
COLOUR_KEY_SOUVENIR, // RIDE_TYPE_SHOP
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_MERRY_GO_ROUND
|
||||
COLOUR_KEY_SOUVENIR, // RIDE_TYPE_22
|
||||
COLOUR_KEY_KIOSK, // RIDE_TYPE_INFORMATION_KIOSK
|
||||
COLOUR_KEY_TOILETS, // RIDE_TYPE_TOILETS
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_FERRIS_WHEEL
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_MOTION_SIMULATOR
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_3D_CINEMA
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_TOP_SPIN
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_SPACE_RINGS
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_REVERSE_FREEFALL_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_LIFT
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER
|
||||
COLOUR_KEY_CASH_MACHINE, // RIDE_TYPE_CASH_MACHINE
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_TWIST
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_HAUNTED_HOUSE
|
||||
COLOUR_KEY_FIRST_AID, // RIDE_TYPE_FIRST_AID
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_CIRCUS_SHOW
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_GHOST_TRAIN
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_TWISTER_ROLLER_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_WOODEN_ROLLER_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_WILD_MOUSE
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_38
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_FLYING_ROLLER_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_3A
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_VIRGINIA_REEL
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_SPLASH_BOATS
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_MINI_HELICOPTERS
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_LAY_DOWN_ROLLER_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_SUSPENDED_MONORAIL
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_40
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_REVERSER_ROLLER_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_HEARTLINE_TWISTER_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_MINI_GOLF
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_GIGA_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_ROTO_DROP
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_FLYING_SAUCERS
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_CROOKED_HOUSE
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_MONORAIL_CYCLES
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_COMPACT_INVERTED_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_WATER_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_INVERTED_HAIRPIN_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_MAGIC_CARPET
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_SUBMARINE_RIDE
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_RIVER_RAFTS
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_50
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_ENTERPRISE
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_52
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_53
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_54
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_55
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_INVERTED_IMPULSE_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_MINI_ROLLER_COASTER
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_MINE_RIDE
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_59
|
||||
COLOUR_KEY_RIDE, // RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER
|
||||
COLOUR_KEY_RIDE, //
|
||||
COLOUR_KEY_RIDE, //
|
||||
COLOUR_KEY_RIDE, //
|
||||
};
|
||||
|
||||
static const uint16 RideKeyColours[] = {
|
||||
0x3D3D, // COLOUR_KEY_RIDE
|
||||
0x2A2A, // COLOUR_KEY_FOOD
|
||||
0x1414, // COLOUR_KEY_DRINK
|
||||
0x0D1D, // COLOUR_KEY_SOUVENIR
|
||||
0x8888, // COLOUR_KEY_KIOSK
|
||||
0x6666, // COLOUR_KEY_FIRST_AID
|
||||
0x3737, // COLOUR_KEY_CASH_MACHINE
|
||||
0xA1A1, // COLOUR_KEY_TOILETS
|
||||
};
|
||||
|
||||
static uint16 map_window_get_pixel_colour_peep(int x, int y)
|
||||
{
|
||||
rct_map_element *mapElement;
|
||||
uint16 colour;
|
||||
|
||||
mapElement = map_get_surface_element_at(x >> 5, y >> 5);
|
||||
colour = TerrainColour[map_element_get_terrain(mapElement)];
|
||||
if (mapElement->properties.surface.terrain & 0x1F)
|
||||
colour = WaterColour;
|
||||
|
||||
if (!(mapElement->properties.surface.ownership & OWNERSHIP_OWNED))
|
||||
colour = 10 | (colour & 0xFF00);
|
||||
|
||||
if (!(mapElement->flags & (1 << 5)))
|
||||
colour = 10 | (colour & 0xFF00);
|
||||
|
||||
while (!map_element_is_last_for_tile(mapElement++)) {
|
||||
int mapElementType = map_element_get_type(mapElement);
|
||||
colour &= ElementTypeMaskColour[mapElementType >> 2];
|
||||
colour |= ElementTypeAddColour[mapElementType >> 2];
|
||||
}
|
||||
|
||||
return colour;
|
||||
}
|
||||
|
||||
static uint16 map_window_get_pixel_colour_ride(int x, int y)
|
||||
{
|
||||
rct_map_element *mapElement;
|
||||
rct_ride *ride;
|
||||
uint32 colour;
|
||||
|
||||
colour = 0x0D0D0000;
|
||||
mapElement = map_get_surface_element_at(x >> 5, y >> 5);
|
||||
do {
|
||||
switch (map_element_get_type(mapElement)) {
|
||||
case MAP_ELEMENT_TYPE_SURFACE:
|
||||
if (mapElement->properties.surface.terrain & 0x1F) {
|
||||
colour &= 0xFFFF;
|
||||
colour |= 0xC2C20000;
|
||||
}
|
||||
if (!(mapElement->properties.surface.ownership & OWNERSHIP_OWNED)) {
|
||||
colour &= 0xFF00FFFF;
|
||||
colour |= 0x000A0000;
|
||||
}
|
||||
break;
|
||||
case MAP_ELEMENT_TYPE_PATH:
|
||||
colour = 0x0E0E;
|
||||
break;
|
||||
case MAP_ELEMENT_TYPE_ENTRANCE:
|
||||
if (mapElement->properties.entrance.type == ENTRANCE_TYPE_PARK_ENTRANCE)
|
||||
break;
|
||||
// fall-through
|
||||
case MAP_ELEMENT_TYPE_TRACK:
|
||||
ride = GET_RIDE(mapElement->properties.track.ride_index);
|
||||
colour = RideKeyColours[RideColourKey[ride->type]];
|
||||
break;
|
||||
}
|
||||
} while (!map_element_is_last_for_tile(mapElement++));
|
||||
|
||||
if ((colour & 0xFFFF) == 0)
|
||||
colour >>= 16;
|
||||
|
||||
return colour & 0xFFFF;
|
||||
}
|
||||
|
||||
static void map_window_set_pixels(rct_window *w)
|
||||
{
|
||||
RCT2_CALLPROC_X(0x0068DC71, 0, 0, 0, 0, (int)w, 0, 0);
|
||||
uint16 colour, *destination;
|
||||
int x, y, dx, dy;
|
||||
|
||||
destination = (uint16*)((RCT2_GLOBAL(0x00F1AD6C, uint32) * 511) + RCT2_GLOBAL(0x00F1AD68, uint32) + 255);
|
||||
switch (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint8)) {
|
||||
case 0:
|
||||
x = RCT2_GLOBAL(0x00F1AD6C, uint32) * 32;
|
||||
y = 0;
|
||||
dx = 0;
|
||||
dy = 32;
|
||||
break;
|
||||
case 1:
|
||||
x = 8192 - 32;
|
||||
y = RCT2_GLOBAL(0x00F1AD6C, uint32) * 32;
|
||||
dx = -32;
|
||||
dy = 0;
|
||||
break;
|
||||
case 2:
|
||||
x = (255 - RCT2_GLOBAL(0x00F1AD6C, uint32)) * 32;
|
||||
y = 8192 - 32;
|
||||
dx = 0;
|
||||
dy = -32;
|
||||
break;
|
||||
case 3:
|
||||
x = 0;
|
||||
y = (255 - RCT2_GLOBAL(0x00F1AD6C, uint32)) * 32;
|
||||
dx = 32;
|
||||
dy = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 256; i++) {
|
||||
if (
|
||||
x > 0 &&
|
||||
y > 0 &&
|
||||
x < RCT2_GLOBAL(RCT2_ADDRESS_MAP_SIZE_UNITS, uint16) &&
|
||||
y < RCT2_GLOBAL(RCT2_ADDRESS_MAP_SIZE_UNITS, uint16)
|
||||
) {
|
||||
switch (w->selected_tab) {
|
||||
case PAGE_PEEPS:
|
||||
colour = map_window_get_pixel_colour_peep(x, y);
|
||||
break;
|
||||
case PAGE_RIDES:
|
||||
colour = map_window_get_pixel_colour_ride(x, y);
|
||||
break;
|
||||
}
|
||||
*destination = colour;
|
||||
}
|
||||
x += dx;
|
||||
y += dy;
|
||||
destination = (uint16*)((int)destination + 513);
|
||||
}
|
||||
RCT2_GLOBAL(0x00F1AD6C, uint32)++;
|
||||
if (RCT2_GLOBAL(0x00F1AD6C, uint32) >= 256)
|
||||
RCT2_GLOBAL(0x00F1AD6C, uint32) = 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user