1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-16 03:23:15 +01:00

Identify sprites

This commit is contained in:
Marijn van der Werf
2016-04-25 11:49:34 +02:00
parent 568556a719
commit 91e1f106c6
2 changed files with 150 additions and 68 deletions

View File

@@ -22,7 +22,6 @@
#include "viewport.h"
#include "../config.h"
const uint8 byte_97B444[] = {
0, 2, 1, 3, 8, 10, 9, 11, 4, 6,
5, 7, 12, 14, 13, 15, 0, 0, 0, 0,
@@ -173,56 +172,56 @@ const uint8 byte_97B740[] = {
};
const uint32 dword_97B750[][2] = {
{1915, 1934},
{2086, 2105},
{2485, 2504},
{2542, 2561},
{2314, 2333},
{2371, 2390},
{2200, 2219},
{2143, 2162},
{2257 | COLOUR_BRIGHT_RED << 19 | 0x20000000, 2276 | COLOUR_BRIGHT_RED << 19 | 0x20000000},
{2257 | COLOUR_YELLOW << 19 | 0x20000000, 2276 | COLOUR_YELLOW << 19 | 0x20000000},
{2257 | COLOUR_BRIGHT_PURPLE << 19 | 0x20000000, 2276 | COLOUR_BRIGHT_PURPLE << 19 | 0x20000000},
{2257 | COLOUR_BRIGHT_GREEN << 19 | 0x20000000, 2276 | COLOUR_BRIGHT_GREEN << 19 | 0x20000000},
{2029, 2048},
{1972, 1991},
{2428, 2447},
{SPR_TERRAIN_GRASS, SPR_TERRAIN_GRASS_GRID},
{SPR_TERRAIN_SAND_YELLOW, SPR_TERRAIN_SAND_YELLOW_GRID},
{SPR_TERRAIN_DIRT, SPR_TERRAIN_DIRT_GRID},
{SPR_TERRAIN_ROCK, SPR_TERRAIN_ROCK_GRID},
{SPR_TERRAIN_MARTIAN, SPR_TERRAIN_MARTIAN_GRID},
{SPR_TERRAIN_CHECKERBOARD, SPR_TERRAIN_CHECKERBOARD_GRID},
{SPR_TERRAIN_GRASS_CLUMPS, SPR_TERRAIN_GRASS_CLUMPS_GRID},
{SPR_TERRAIN_ICE, SPR_TERRAIN_ICE_GRID},
{SPR_TERRAIN_GRID | COLOUR_BRIGHT_RED << 19 | 0x20000000, SPR_TERRAIN_GRID_GRID | COLOUR_BRIGHT_RED << 19 | 0x20000000},
{SPR_TERRAIN_GRID | COLOUR_YELLOW << 19 | 0x20000000, SPR_TERRAIN_GRID_GRID | COLOUR_YELLOW << 19 | 0x20000000},
{SPR_TERRAIN_GRID | COLOUR_BRIGHT_PURPLE << 19 | 0x20000000, SPR_TERRAIN_GRID_GRID | COLOUR_BRIGHT_PURPLE << 19 | 0x20000000},
{SPR_TERRAIN_GRID | COLOUR_BRIGHT_GREEN << 19 | 0x20000000, SPR_TERRAIN_GRID_GRID | COLOUR_BRIGHT_GREEN << 19 | 0x20000000},
{SPR_TERRAIN_SAND_RED, SPR_TERRAIN_SAND_RED_GRID},
{SPR_TERRAIN_SAND, SPR_TERRAIN_SAND_GRID},
{SPR_TERRAIN_CHECKERBOARD_INVERTED, SPR_TERRAIN_CHECKERBOARD_INVERTED_GRID},
};
const uint32 dword_97B7C8[] = {
1953,
2124,
2523,
2580,
2352,
2409,
2238,
2181,
2295 | COLOUR_BRIGHT_RED << 19 | 0x20000000,
2295 | COLOUR_YELLOW << 19 | 0x20000000,
2295 | COLOUR_BRIGHT_PURPLE << 19 | 0x20000000,
2295 | COLOUR_BRIGHT_GREEN << 19 | 0x20000000,
2067,
2010,
2466,
SPR_TERRAIN_GRASS_UNDERGROUND,
SPR_TERRAIN_SAND_YELLOW_UNDERGROUND,
SPR_TERRAIN_DIRT_UNDERGROUND,
SPR_TERRAIN_ROCK_UNDERGROUND,
SPR_TERRAIN_MARTIAN_UNDERGROUND,
SPR_TERRAIN_CHECKERBOARD_UNDERGROUND,
SPR_TERRAIN_GRASS_CLUMPS_UNDERGROUND,
SPR_TERRAIN_ICE_UNDERGROUND,
SPR_TERRAIN_GRID_UNDERGROUND | COLOUR_BRIGHT_RED << 19 | 0x20000000,
SPR_TERRAIN_GRID_UNDERGROUND | COLOUR_YELLOW << 19 | 0x20000000,
SPR_TERRAIN_GRID_UNDERGROUND | COLOUR_BRIGHT_PURPLE << 19 | 0x20000000,
SPR_TERRAIN_GRID_UNDERGROUND | COLOUR_BRIGHT_GREEN << 19 | 0x20000000,
SPR_TERRAIN_SAND_RED_UNDERGROUND,
SPR_TERRAIN_SAND_UNDERGROUND,
SPR_TERRAIN_CHECKERBOARD_INVERTED_UNDERGROUND,
};
const uint32 dword_97B804[] = {
28959,
28983,
28977,
28989,
28995,
28959,
29001,
29007,
28959,
28959,
28959,
28959,
28971,
28965
SPR_TERRAIN_PATTERN_GRASS,
SPR_TERRAIN_PATTERN_SAND_YELLOW,
SPR_TERRAIN_PATTERN_DIRT,
SPR_TERRAIN_PATTERN_ROCK,
SPR_TERRAIN_PATTERN_MARTIAN,
SPR_TERRAIN_PATTERN_GRASS,
SPR_TERRAIN_PATTERN_GRASS_CLUMPS,
SPR_TERRAIN_PATTERN_ICE,
SPR_TERRAIN_PATTERN_GRASS,
SPR_TERRAIN_PATTERN_GRASS,
SPR_TERRAIN_PATTERN_GRASS,
SPR_TERRAIN_PATTERN_GRASS,
SPR_TERRAIN_PATTERN_SAND_RED,
SPR_TERRAIN_PATTERN_SAND
};
const uint8 byte_97B83C[] = {
@@ -236,24 +235,24 @@ const uint8 byte_97B84A[] = {
};
const uint32 dword_97B858[][2] = {
{2739, 2758},
{2777, 2796},
{2815, 2834},
{2853, 2872},
{SPR_TERRAIN_GRASS_LENGTH_4_VARIANT_1, SPR_TERRAIN_GRASS_LENGTH_4_VARIANT_1_GRID},
{SPR_TERRAIN_GRASS_LENGTH_4_VARIANT_2, SPR_TERRAIN_GRASS_LENGTH_4_VARIANT_2_GRID},
{SPR_TERRAIN_GRASS_LENGTH_4_VARIANT_3, SPR_TERRAIN_GRASS_LENGTH_4_VARIANT_3_GRID},
{SPR_TERRAIN_GRASS_LENGTH_4_VARIANT_4, SPR_TERRAIN_GRASS_LENGTH_4_VARIANT_4_GRID},
};
const uint32 dword_97B878[][2] = {
{2891, 2910},
{2929, 2948},
{2967, 2986},
{3005, 3024},
{SPR_TERRAIN_GRASS_LENGTH_6_VARIANT_1, SPR_TERRAIN_GRASS_LENGTH_6_VARIANT_1_GRID},
{SPR_TERRAIN_GRASS_LENGTH_6_VARIANT_2, SPR_TERRAIN_GRASS_LENGTH_6_VARIANT_2_GRID},
{SPR_TERRAIN_GRASS_LENGTH_6_VARIANT_3, SPR_TERRAIN_GRASS_LENGTH_6_VARIANT_3_GRID},
{SPR_TERRAIN_GRASS_LENGTH_6_VARIANT_4, SPR_TERRAIN_GRASS_LENGTH_6_VARIANT_4_GRID},
};
const uint32 dword_97B898[][2] = {
{2701, 2720},
{2663, 2682},
{2701, 2720},
{2663, 2682}
{SPR_TERRAIN_GRASS_MOWED_90, SPR_TERRAIN_GRASS_MOWED_90_GRID},
{SPR_TERRAIN_GRASS_MOWED, SPR_TERRAIN_GRASS_MOWED_GRID},
{SPR_TERRAIN_GRASS_MOWED_90, SPR_TERRAIN_GRASS_MOWED_90_GRID},
{SPR_TERRAIN_GRASS_MOWED, SPR_TERRAIN_GRASS_MOWED_GRID}
};
@@ -398,7 +397,7 @@ void viewport_surface_smooth_bottom_left()
}
}
uint32 image_id = local_9E3290 + 28921;
uint32 image_id = SPR_TERRAIN_EDGE_MASK_BOTTOM_LEFT + local_9E3290;
paint_struct * out;
if (sub_68818E(image_id, 0, 0, &out)) {
@@ -461,7 +460,7 @@ void viewport_surface_smooth_bottom_right()
}
}
uint32 image_id = local_9E3290 + 28902;
uint32 image_id = SPR_TERRAIN_EDGE_MASK_BOTTOM_RIGHT + local_9E3290;
paint_struct * out;
if (sub_68818E(image_id, 0, 0, &out)) {
@@ -524,7 +523,7 @@ void viewport_surface_smooth_top_left()
}
}
uint32 image_id = local_9E3290 + 28940;
uint32 image_id = SPR_TERRAIN_EDGE_MASK_TOP_LEFT + local_9E3290;
paint_struct * out;
if (sub_68818E(image_id, 0, 0, &out)) {
@@ -587,7 +586,7 @@ void viewport_surface_smooth_top_right()
}
}
uint32 image_id = local_9E3290 + 28883;
uint32 image_id = SPR_TERRAIN_EDGE_MASK_TOP_RIGHT + local_9E3290;
paint_struct * out;
if (sub_68818E(image_id, 0, 0, &out)) {
@@ -943,6 +942,7 @@ void viewport_surface_paint_setup(uint8 direction, uint16 height, rct_map_elemen
image_id = dword_97B750[ebp][showGridlines ? 1 : 0] + image_offset;
if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & (SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER)) {
// TODO: SPR_TERRAIN_TRACK_DESIGNER ???
image_id = 2623;
}
@@ -1006,7 +1006,7 @@ void viewport_surface_paint_setup(uint8 direction, uint16 height, rct_map_elemen
if (do_it) {
assert(_dword_9E3278 < countof(byte_97B444));
ebx = 2599 + byte_97B444[_dword_9E3278];
ebx = SPR_TERRAIN_SELECTION_PATROL_AREA + byte_97B444[_dword_9E3278];
sub_68818E(ebx | ebp, 0, 0, NULL);
}
}
@@ -1018,6 +1018,7 @@ void viewport_surface_paint_setup(uint8 direction, uint16 height, rct_map_elemen
rct_xy16 pos = {RCT2_GLOBAL(0x009DE56A, sint16), RCT2_GLOBAL(0x009DE56E, sint16)};
for (int i = 0; i < 2; ++i) {
if ((spawn->x & 0xFFE0) == pos.x && (spawn->y & 0xFFE0) == pos.y) {
// TODO: SPR_TERRAIN_SELECTION_SQUARE_SIMPLE ??? (no variations)
sub_98196C(2624, 0, 0, 32, 32, 16, spawn->z * 16, get_current_rotation());
int offset = ((spawn->direction ^ 2) + get_current_rotation()) & 3;
@@ -1032,6 +1033,7 @@ void viewport_surface_paint_setup(uint8 direction, uint16 height, rct_map_elemen
// loc_660E9A:
if (mapElement->properties.surface.ownership & OWNERSHIP_OWNED) {
assert(ebx < countof(byte_97B444));
// TODO: SPR_TERRAIN_SELECTION_SQUARE?
sub_68818E(2625 + byte_97B444[ebx], 0, 0, NULL);
} else if (mapElement->properties.surface.ownership & OWNERSHIP_AVAILABLE) {
// TODO: Fix this. Currently not working.
@@ -1047,6 +1049,7 @@ void viewport_surface_paint_setup(uint8 direction, uint16 height, rct_map_elemen
&& !(mapElement->properties.surface.ownership & OWNERSHIP_OWNED)) {
if (mapElement->properties.surface.ownership & OWNERSHIP_CONSTRUCTION_RIGHTS_OWNED) {
assert(ebx < countof(byte_97B444));
// TODO: SPR_TERRAIN_SELECTION_DOTTED ???
sub_68818E(2644 + byte_97B444[ebx], 0, 0, NULL);
} else if (mapElement->properties.surface.ownership & OWNERSHIP_CONSTRUCTION_RIGHTS_AVAILABLE) {
paint_struct * backup = RCT2_GLOBAL(0xF1AD28, paint_struct*);
@@ -1074,13 +1077,13 @@ void viewport_surface_paint_setup(uint8 direction, uint16 height, rct_map_elemen
// Walls
// loc_661089:
uint32 eax = ((((mapSelectionType - 9) + get_current_rotation()) & 3) + 0x21) << 19;
uint32 image_id = (byte_97B444[ebx] + 0x20000BF6) | eax;
uint32 image_id = (SPR_TERRAIN_SELECTION_EDGE + byte_97B444[ebx]) | eax | 0x20000000;
sub_68818E(image_id, 0, 0, NULL);
} else if (mapSelectionType >= 6) {
// loc_661051:(no jump)
// Selection split into four quarter segments
uint32 eax = ((((mapSelectionType - 6) + get_current_rotation()) & 3) + 0x27) << 19;
uint32 image_id = (byte_97B444[ebx] + 0x20000C09) | eax;
uint32 image_id = (SPR_TERRAIN_SELECTION_QUARTER + byte_97B444[ebx]) | eax | 0x20000000;
sub_68818E(image_id, 0, 0, NULL);
} else if (mapSelectionType <= 4) {
// Corners
@@ -1090,7 +1093,7 @@ void viewport_surface_paint_setup(uint8 direction, uint16 height, rct_map_elemen
}
eax = (eax + 0x21) << 19;
uint32 image_id = (byte_97B444[ebx] + 0x20000BE3) | eax;
uint32 image_id = (SPR_TERRAIN_SELECTION_CORNER + byte_97B444[ebx]) | eax | 0x20000000;
sub_68818E(image_id, 0, 0, NULL);
} else {
int local_ebx = ebx;
@@ -1115,7 +1118,7 @@ void viewport_surface_paint_setup(uint8 direction, uint16 height, rct_map_elemen
}
}
int image_id = byte_97B444[local_ebx] + 0x21300BE3;
int image_id = (SPR_TERRAIN_SELECTION_CORNER + byte_97B444[local_ebx]) | 0x21300000;
paint_struct * backup = RCT2_GLOBAL(0xF1AD28, paint_struct*);
sub_98196C(image_id, 0, 0, 32, 32, 1, local_height, get_current_rotation());
@@ -1223,10 +1226,10 @@ void viewport_surface_paint_setup(uint8 direction, uint16 height, rct_map_elemen
image_offset = byte_97B740[ebx & 0xF];
}
int image_id = image_offset + 0x610013B8;
int image_id = (SPR_WATER_MASK + image_offset) | 0x61000000;
sub_98196C(image_id, 0, 0, 32, 32, -1, dx, get_current_rotation());
sub_68818E(5053 + image_offset, 0, 0, NULL);
sub_68818E(SPR_WATER_OVERLAY + image_offset, 0, 0, NULL);
for (int i = 0; i <= 0x7C; i += 4) {
RCT2_GLOBAL(0x009E3138 + i, uint32) = RCT2_GLOBAL(0x009E2F30 + i, uint32);

View File

@@ -23,6 +23,85 @@
#include "../world/map.h"
enum
{
SPR_TERRAIN_GRASS = 1915,
SPR_TERRAIN_GRASS_GRID = 1934,
SPR_TERRAIN_GRASS_UNDERGROUND = 1953,
SPR_TERRAIN_SAND = 1972,
SPR_TERRAIN_SAND_GRID = 1991,
SPR_TERRAIN_SAND_UNDERGROUND = 2010,
SPR_TERRAIN_SAND_RED = 2029,
SPR_TERRAIN_SAND_RED_GRID = 2048,
SPR_TERRAIN_SAND_RED_UNDERGROUND = 2067,
SPR_TERRAIN_SAND_YELLOW = 2086,
SPR_TERRAIN_SAND_YELLOW_GRID = 2105,
SPR_TERRAIN_SAND_YELLOW_UNDERGROUND = 2124,
SPR_TERRAIN_ICE = 2143,
SPR_TERRAIN_ICE_GRID = 2162,
SPR_TERRAIN_ICE_UNDERGROUND = 2181,
SPR_TERRAIN_GRASS_CLUMPS = 2200,
SPR_TERRAIN_GRASS_CLUMPS_GRID = 2219,
SPR_TERRAIN_GRASS_CLUMPS_UNDERGROUND = 2238,
SPR_TERRAIN_GRID = 2257,
SPR_TERRAIN_GRID_GRID = 2276,
SPR_TERRAIN_GRID_UNDERGROUND = 2295,
SPR_TERRAIN_MARTIAN = 2314,
SPR_TERRAIN_MARTIAN_GRID = 2333,
SPR_TERRAIN_MARTIAN_UNDERGROUND = 2352,
SPR_TERRAIN_CHECKERBOARD = 2371,
SPR_TERRAIN_CHECKERBOARD_GRID = 2390,
SPR_TERRAIN_CHECKERBOARD_UNDERGROUND = 2409,
SPR_TERRAIN_CHECKERBOARD_INVERTED = 2428,
SPR_TERRAIN_CHECKERBOARD_INVERTED_GRID = 2447,
SPR_TERRAIN_CHECKERBOARD_INVERTED_UNDERGROUND = 2466,
SPR_TERRAIN_DIRT = 2485,
SPR_TERRAIN_DIRT_GRID = 2504,
SPR_TERRAIN_DIRT_UNDERGROUND = 2523,
SPR_TERRAIN_ROCK = 2542,
SPR_TERRAIN_ROCK_GRID = 2561,
SPR_TERRAIN_ROCK_UNDERGROUND = 2580,
SPR_TERRAIN_SELECTION_PATROL_AREA = 2599,
SPR_TERRAIN_GRASS_MOWED = 2663,
SPR_TERRAIN_GRASS_MOWED_GRID = 2682,
SPR_TERRAIN_GRASS_MOWED_90 = 2701,
SPR_TERRAIN_GRASS_MOWED_90_GRID = 2720,
SPR_TERRAIN_GRASS_LENGTH_4_VARIANT_1 = 2739,
SPR_TERRAIN_GRASS_LENGTH_4_VARIANT_1_GRID = 2758,
SPR_TERRAIN_GRASS_LENGTH_4_VARIANT_2 = 2777,
SPR_TERRAIN_GRASS_LENGTH_4_VARIANT_2_GRID = 2796,
SPR_TERRAIN_GRASS_LENGTH_4_VARIANT_3 = 2815,
SPR_TERRAIN_GRASS_LENGTH_4_VARIANT_3_GRID = 2834,
SPR_TERRAIN_GRASS_LENGTH_4_VARIANT_4 = 2853,
SPR_TERRAIN_GRASS_LENGTH_4_VARIANT_4_GRID = 2872,
SPR_TERRAIN_GRASS_LENGTH_6_VARIANT_1 = 2891,
SPR_TERRAIN_GRASS_LENGTH_6_VARIANT_1_GRID = 2910,
SPR_TERRAIN_GRASS_LENGTH_6_VARIANT_2 = 2929,
SPR_TERRAIN_GRASS_LENGTH_6_VARIANT_2_GRID = 2948,
SPR_TERRAIN_GRASS_LENGTH_6_VARIANT_3 = 2967,
SPR_TERRAIN_GRASS_LENGTH_6_VARIANT_3_GRID = 2986,
SPR_TERRAIN_GRASS_LENGTH_6_VARIANT_4 = 3005,
SPR_TERRAIN_GRASS_LENGTH_6_VARIANT_4_GRID = 3024,
SPR_TERRAIN_SELECTION_CORNER = 3043,
SPR_TERRAIN_SELECTION_EDGE = 3062,
SPR_TERRAIN_SELECTION_QUARTER = 3081,
SPR_WATER_MASK = 5048,
SPR_WATER_OVERLAY = 5053,
SPR_TERRAIN_EDGE_MASK_TOP_RIGHT = 28883,
SPR_TERRAIN_EDGE_MASK_BOTTOM_RIGHT = 28902,
SPR_TERRAIN_EDGE_MASK_BOTTOM_LEFT = 28921,
SPR_TERRAIN_EDGE_MASK_TOP_LEFT = 28940,
SPR_TERRAIN_PATTERN_GRASS = 28959,
SPR_TERRAIN_PATTERN_SAND = 28965,
SPR_TERRAIN_PATTERN_SAND_RED = 28971,
SPR_TERRAIN_PATTERN_DIRT = 28977,
SPR_TERRAIN_PATTERN_SAND_YELLOW = 28983,
SPR_TERRAIN_PATTERN_ROCK = 28989,
SPR_TERRAIN_PATTERN_MARTIAN = 28995,
SPR_TERRAIN_PATTERN_GRASS_CLUMPS = 29001,
SPR_TERRAIN_PATTERN_ICE = 29007,
};
void viewport_surface_paint_setup(uint8 direction, uint16 height, rct_map_element *mapElement);
#endif //_PAINT_SURFACE_H