Merge pull request #4414 from Broxzier/extended_tile_inspector

Extended tile inspector
This commit is contained in:
Ted John 2016-10-16 21:12:21 +01:00 committed by GitHub
commit 00e907d007
16 changed files with 1977 additions and 415 deletions

View File

@ -54,6 +54,7 @@ Includes all git commit authors. Aliases are GitHub user names.
* Daniel Trujillo Viedma (gDanix) - Custom currency.
* Niels NTG Poldervaart (Niels-NTG) - Misc.
* (zaxcav) - New pathfinding algorithm
* Hielke Morsink (Broxzier) - Tile inspector, misc.
## Bug fixes
* (halfbro)

View File

@ -3679,8 +3679,8 @@ STR_5337 :Park entrance
STR_5338 :Element type
STR_5339 :{SMALLFONT}{BLACK}Base height
STR_5340 :{SMALLFONT}{BLACK}Clearance height
STR_5341 :Flags
STR_5342 :Choose a map tile
STR_5341 :<removed string - do not use>
STR_5342 :<removed string - do not use>
STR_5343 :Automatically place staff
STR_5344 :Changelog
STR_5345 :Financial cheats
@ -4232,6 +4232,67 @@ STR_5920 :Render weather effects
STR_5921 :{SMALLFONT}{BLACK}If enabled, rain and gloomy colours will be rendered during storms.
STR_5922 :{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{SMALLFONT}{BLACK}Max {STRINGID}
STR_5923 :{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{SMALLFONT}{BLACK}Max {COMMA16} {STRINGID} per train
STR_5924 :Surface details
STR_5925 :Path details
STR_5926 :Track details
STR_5927 :Scenery details
STR_5928 :Entrance details
STR_5929 :Fence details
STR_5930 :Large scenery details
STR_5931 :Banner details
STR_5932 :Currupt element details
STR_5933 :Properties
STR_5934 :{WINDOW_COLOUR_2}Terrain texture: {BLACK}{STRINGID}
STR_5935 :{WINDOW_COLOUR_2}Terrain edge: {BLACK}{STRINGID}
STR_5936 :{WINDOW_COLOUR_2}Land ownership: {BLACK}{STRINGID}
STR_5937 :Not owned and not for sale
STR_5938 :{WINDOW_COLOUR_2}Water level: {BLACK}{COMMA16}
STR_5939 :Remove park fences
STR_5940 :Restore park fences
STR_5941 :{WINDOW_COLOUR_2}Base height:
STR_5942 :{WINDOW_COLOUR_2}Path name: {BLACK}{STRINGID}
STR_5943 :{WINDOW_COLOUR_2}Additions: {BLACK}{STRINGID}
STR_5944 :{WINDOW_COLOUR_2}Additions: {BLACK}None
STR_5945 :{WINDOW_COLOUR_2}Connected edges:
STR_5946 :{WINDOW_COLOUR_2}Ride type: {BLACK}{STRINGID}
STR_5947 :{WINDOW_COLOUR_2}Ride ID: {BLACK}{COMMA16}
STR_5948 :{WINDOW_COLOUR_2}Ride name: {BLACK}{STRINGID}
STR_5949 :{WINDOW_COLOUR_2}Chain lift
STR_5950 :{WINDOW_COLOUR_2}Apply changes to entire track piece
STR_5951 :{WINDOW_COLOUR_2}Track piece ID: {BLACK}{COMMA16}
STR_5952 :{WINDOW_COLOUR_2}Sequence number: {BLACK}{COMMA16}
STR_5953 :{SMALLFONT}{BLACK}Sort the map elements on the current tile based on their base height.
STR_5954 :{WINDOW_COLOUR_2}Scenery age: {BLACK}{COMMA16}
STR_5955 :{WINDOW_COLOUR_2}Quadrant placement: {BLACK}{STRINGID}
STR_5956 :Southwest
STR_5957 :Northwest
STR_5958 :Northeast
STR_5959 :Southeast
STR_5960 :{WINDOW_COLOUR_2}Quadrant placement:
STR_5961 :{WINDOW_COLOUR_2}Entry index: {BLACK}{COMMA16}
STR_5962 :{WINDOW_COLOUR_2}Collission detection:
STR_5963 :{WINDOW_COLOUR_2}Raised Corners:
STR_5964 :{WINDOW_COLOUR_2}Diagonal
STR_5965 :{WINDOW_COLOUR_2}Entrance type: {BLACK}{STRINGID}
STR_5966 :{WINDOW_COLOUR_2}Park entrance part: {BLACK}{STRINGID}
STR_5967 :Middle
STR_5968 :Left
STR_5969 :Right
STR_5970 :{WINDOW_COLOUR_2}Entrance ID: {BLACK}{COMMA16}
STR_5971 :{WINDOW_COLOUR_2}Exit ID: {BLACK}{COMMA16}
STR_5972 :{WINDOW_COLOUR_2}Ride ID: {BLACK}{COMMA16}
STR_5973 :Clamp to next
STR_5974 :{SMALLFONT}{BLACK}Changes the base- and clearance height so that it's at the same as the next element on the current tile. Doing this makes it easier to build on this tile.
STR_5975 :Slope:
STR_5976 :Flat
STR_5977 :Right side up
STR_5978 :Left side up
STR_5979 :{WINDOW_COLOUR_2}Fence type: {BLACK}{COMMA16}
STR_5980 :{WINDOW_COLOUR_2}Banner text: {BLACK}{STRINGID}
STR_5981 :{WINDOW_COLOUR_2}Not a banner
STR_5982 :{WINDOW_COLOUR_2}Large scenery type: {BLACK}{COMMA16}
STR_5983 :{WINDOW_COLOUR_2}Large scenery piece ID: {BLACK}{COMMA16}
STR_5984 :Blocked paths:
#############
# Scenarios #

View File

@ -5,7 +5,7 @@
- Feature: Add cheat to reset date.
- Feature: Add OpenGL drawing engine.
- Feature: Implementation of the user-defined currency
- Feature: Add ability to rotate map elements with the tile inspector.
- Feature: Extended tile inspector.
- Feature: Add ride console command for diagnostics and changing vehicle type.
- Feature: Allow selecting corners when using the mountain tool.
- Feature: Allow setting ownership of map edges.

BIN
resources/g2/77.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 B

View File

@ -1029,6 +1029,18 @@ void widget_scroll_get_part(rct_window *w, rct_widget *widget, int x, int y, int
}
}
void widget_set_enabled(rct_window *w, uint64 widgetIndex, bool enabled)
{
if (enabled) {
w->enabled_widgets |= (1ULL << widgetIndex);
w->disabled_widgets &= ~(1ULL << widgetIndex);
}
else {
w->enabled_widgets &= ~(1ULL << widgetIndex);
w->disabled_widgets |= (1ULL << widgetIndex);
}
}
void widget_set_checkbox_value(rct_window *w, int widgetIndex, int value)
{
if (value)

View File

@ -67,6 +67,7 @@ int widget_is_highlighted(rct_window *w, int widgetIndex);
int widget_is_active_tool(rct_window *w, int widgetIndex);
void widget_scroll_get_part(rct_window *w, rct_widget* widget, int x, int y, int *output_x, int *output_y, int *output_scroll_area, int *scroll_id);
void widget_set_enabled(rct_window *w, uint64 widgetIndex, bool enabled);
void widget_set_checkbox_value(rct_window *w, int widgetIndex, int value);
#endif

View File

@ -3024,8 +3024,6 @@ enum {
STR_TILE_INSPECTOR_ELEMENT_TYPE = 5338,
STR_TILE_INSPECTOR_BASE_HEIGHT = 5339,
STR_TILE_INSPECTOR_CLEARANCE_HEIGHT = 5340,
STR_TILE_INSPECTOR_FLAGS = 5341, // unused
STR_TILE_INSPECTOR_CHOOSE_MSG = 5342,
STR_AUTO_STAFF_PLACEMENT = 5343,
STR_CHANGELOG_TITLE = 5344,
STR_CHEAT_TITLE_FINANCIAL = 5345,
@ -3290,10 +3288,10 @@ enum {
STR_NOTIFICATION_GUEST_BOUGHT_ITEM = 5604,
STR_NOTIFICATION_GUEST_USED_FACILITY = 5605,
STR_NOTIFICATION_GUEST_DIED = 5606,
STR_REMOVE_SELECTED_ELEMENT_TIP = 5607,
STR_TILE_INSPECTOR_BASE_HEIGHT_SHORT = 5608,
STR_TILE_INSPECTOR_CLEARANGE_HEIGHT_SHORT = 5609,
// STR_5610 :{SMALLFONT}{BLACK}Remove the currently selected map element. This will forcefully remove it, so no cash will be used/gained. Use with caution.
STR_REMOVE_SELECTED_ELEMENT_TIP = 5610,
STR_TILE_INSPECTOR_FLAG_GHOST_SHORT = 5611,
STR_TILE_INSPECTOR_FLAG_GHOST = 5612,
STR_TILE_INSPECTOR_FLAG_BROKEN_SHORT = 5613,
@ -3574,6 +3572,67 @@ enum {
STR_RENDER_WEATHER_EFFECTS_TIP = 5921,
STR_MAX_VEHICLES_TIP = 5922,
STR_MAX_CARS_PER_TRAIN_TIP = 5923,
STR_TILE_INSPECTOR_GROUPBOX_SURFACE_INFO = 5924,
STR_TILE_INSPECTOR_GROUPBOX_PATH_INFO = 5925,
STR_TILE_INSPECTOR_GROUPBOX_TRACK_INFO = 5926,
STR_TILE_INSPECTOR_GROUPBOX_SCENERY_INFO = 5927,
STR_TILE_INSPECTOR_GROUPBOX_ENTRANCE_INFO = 5928,
STR_TILE_INSPECTOR_GROUPBOX_FENCE_INFO = 5929,
STR_TILE_INSPECTOR_GROUPBOX_LARGE_SCENERY_INFO = 5930,
STR_TILE_INSPECTOR_GROUPBOX_BANNER_INFO = 5931,
STR_TILE_INSPECTOR_GROUPBOX_CORRUPT_INFO = 5932,
STR_TILE_INSPECTOR_GROUPBOX_PROPERTIES = 5933,
STR_TILE_INSPECTOR_SURFACE_TERAIN = 5934,
STR_TILE_INSPECTOR_SURFACE_EDGE = 5935,
STR_TILE_INSPECTOR_SURFACE_OWNERSHIP = 5936,
STR_TILE_INSPECTOR_LAND_NOT_OWNED_AND_NOT_AVAILABLE = 5937,
STR_TILE_INSPECTOR_SURFACE_WATER_LEVEL = 5938,
STR_TILE_INSPECTOR_SURFACE_REMOVE_FENCES = 5939,
STR_TILE_INSPECTOR_SURFACE_RESTORE_FENCES = 5940,
STR_TILE_INSPECTOR_BASE_HEIGHT_FULL = 5941,
STR_TILE_INSPECTOR_PATH_NAME = 5942,
STR_TILE_INSPECTOR_PATH_ADDITIONS = 5943,
STR_TILE_INSPECTOR_PATH_ADDITIONS_NONE = 5944,
STR_TILE_INSPECTOR_PATH_CONECTED_EDGES = 5945,
STR_TILE_INSPECTOR_TRACK_RIDE_TYPE = 5946,
STR_TILE_INSPECTOR_TRACK_RIDE_ID = 5947,
STR_TILE_INSPECTOR_TRACK_RIDE_NAME = 5948,
STR_TILE_INSPECTOR_TRACK_CHAIN_LIFT = 5949,
STR_TILE_INSPECTOR_TRACK_ENTIRE_TRACK_PIECE = 5950,
STR_TILE_INSPECTOR_TRACK_PIECE_ID = 5951,
STR_TILE_INSPECTOR_TRACK_SEQUENCE = 5952,
STR_TILE_INSPECTOR_SORT_TIP = 5953,
STR_TILE_INSPECTOR_SCENERY_AGE = 5954,
STR_TILE_INSPECTOR_SCENERY_QUADRANT = 5955,
STR_TILE_INSPECTOR_SCENERY_QUADRANT_SW = 5956,
STR_TILE_INSPECTOR_SCENERY_QUADRANT_NW = 5957,
STR_TILE_INSPECTOR_SCENERY_QUADRANT_NE = 5958,
STR_TILE_INSPECTOR_SCENERY_QUADRANT_SE = 5959,
STR_TILE_INSPECTOR_SCENERY_QUADRANT_LABEL = 5960,
STR_TILE_INSPECTOR_SCENERY_ENTRY_IDX = 5961,
STR_TILE_INSPECTOR_COLLISSION = 5962,
STR_TILE_INSPECTOR_SURFACE_CORNERS = 5963,
STR_TILE_INSPECTOR_SURFACE_DIAGONAL = 5964,
STR_TILE_INSPECTOR_ENTRANCE_TYPE = 5965,
STR_TILE_INSPECTOR_ENTRANCE_PART = 5966,
STR_TILE_INSPECTOR_ENTRANCE_MIDDLE = 5967,
STR_TILE_INSPECTOR_ENTRANCE_LEFT = 5968,
STR_TILE_INSPECTOR_ENTRANCE_RIGHT = 5969,
STR_TILE_INSPECTOR_ENTRANCE_ENTRANCE_ID = 5970,
STR_TILE_INSPECTOR_ENTRANCE_EXIT_ID = 5971,
STR_TILE_INSPECTOR_ENTRANCE_RIDE_ID = 5972,
STR_TILE_INSPECTOR_CLAMP_TO_NEXT = 5973,
STR_TILE_INSPECTOR_CLAMP_TO_NEXT_TIP = 5974,
STR_TILE_INSPECTOR_FENCE_SLOPE = 5975,
STR_TILE_INSPECTOR_FENCE_FLAT = 5976,
STR_TILE_INSPECTOR_FENCE_SLOPED_LEFT = 5977,
STR_TILE_INSPECTOR_FENCE_SLOPED_RIGHT = 5978,
STR_TILE_INSPECTOR_FENCE_TYPE = 5979,
STR_TILE_INSPECTOR_ENTRY_BANNER_TEXT = 5980,
STR_TILE_INSPECTOR_ENTRY_BANNER_NONE = 5981,
STR_TILE_INSPECTOR_LARGE_SCENERY_TYPE = 5982,
STR_TILE_INSPECTOR_LARGE_SCENERY_PIECE_ID = 5983,
STR_TILE_INSPECTOR_BANNER_BLOCKED_PATHS = 5984,
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
STR_COUNT = 32768

View File

@ -62,7 +62,7 @@ static void fence_paint_door(uint32 imageId,
imageId = (imageId & 0x7FFFF) | dword_141F710;
}
if (sceneryEntry->wall.flags & WALL_SCENERY_FLAG4) {
if (sceneryEntry->wall.flags & WALL_SCENERY_IS_BANNER) {
paint_struct * ps;
ps = sub_98197C(imageId, (sint8) offset.x, (sint8) offset.y, boundsR1.x, boundsR1.y, (sint8) boundsR1.z, offset.z, boundsR1_.x, boundsR1_.y, boundsR1_.z, get_current_rotation());
@ -137,7 +137,7 @@ void fence_paint(uint8 direction, int height, rct_map_element * map_element)
rct_scenery_entry * sceneryEntry = get_wall_entry(map_element->properties.fence.type);
uint32 frameNum = 0;
if (sceneryEntry->wall.flags2 & WALL_SCENERY_2_FLAG_5) {
if (sceneryEntry->wall.flags2 & WALL_SCENERY_2_FLAG5) {
frameNum = (gCurrentTicks & 7) * 2;
}
@ -279,11 +279,11 @@ void fence_paint(uint8 direction, int height, rct_map_element * map_element)
}
if (sceneryEntry->wall.flags & WALL_SCENERY_FLAG2) {
if (sceneryEntry->wall.flags & WALL_SCENERY_FLAG4) {
if (sceneryEntry->wall.flags & WALL_SCENERY_IS_BANNER) {
imageOffset += 12;
}
} else {
if (sceneryEntry->wall.flags & WALL_SCENERY_FLAG4) {
if (sceneryEntry->wall.flags & WALL_SCENERY_IS_BANNER) {
imageOffset += 6;
}
}
@ -302,7 +302,7 @@ void fence_paint(uint8 direction, int height, rct_map_element * map_element)
imageOffset = 1;
}
if (sceneryEntry->wall.flags & WALL_SCENERY_FLAG4) {
if (sceneryEntry->wall.flags & WALL_SCENERY_IS_BANNER) {
imageOffset += 6;
}

View File

@ -10859,7 +10859,7 @@ static bool peep_find_ride_to_look_at(rct_peep *peep, uint8 edge, uint8 *rideToV
do {
if (map_element_get_type(mapElement) != MAP_ELEMENT_TYPE_FENCE) continue;
if (map_element_get_direction(mapElement) != edge) continue;
if (get_wall_entry(mapElement->properties.fence.type)->wall.flags2 & WALL_SCENERY_FLAG4) continue;
if (get_wall_entry(mapElement->properties.fence.type)->wall.flags2 & WALL_SCENERY_2_FLAG4) continue;
if (peep->next_z + 4 <= mapElement->base_height) continue;
if (peep->next_z + 1 >= mapElement->clearance_height) continue;
@ -10880,7 +10880,7 @@ static bool peep_find_ride_to_look_at(rct_peep *peep, uint8 edge, uint8 *rideToV
do {
if (map_element_get_type(mapElement) != MAP_ELEMENT_TYPE_FENCE) continue;
if ((map_element_get_direction(mapElement) ^ 0x2) != edge) continue;
if (get_wall_entry(mapElement->properties.fence.type)->wall.flags2 & WALL_SCENERY_FLAG4) continue;
if (get_wall_entry(mapElement->properties.fence.type)->wall.flags2 & WALL_SCENERY_2_FLAG4) continue;
// TODO: Check whether this shouldn't be <=, as the other loops use. If so, also extract as loop A.
if (peep->next_z + 4 >= mapElement->base_height) continue;
if (peep->next_z + 1 >= mapElement->clearance_height) continue;
@ -10927,7 +10927,7 @@ static bool peep_find_ride_to_look_at(rct_peep *peep, uint8 edge, uint8 *rideToV
if (map_element_get_type(mapElement) == MAP_ELEMENT_TYPE_PATH) continue;
if (map_element_get_type(mapElement) == MAP_ELEMENT_TYPE_FENCE) {
if (get_wall_entry(mapElement->properties.fence.type)->wall.flags2 & WALL_SCENERY_FLAG4) {
if (get_wall_entry(mapElement->properties.fence.type)->wall.flags2 & WALL_SCENERY_2_FLAG4) {
continue;
}
}
@ -10950,7 +10950,7 @@ static bool peep_find_ride_to_look_at(rct_peep *peep, uint8 edge, uint8 *rideToV
do {
if (map_element_get_type(mapElement) != MAP_ELEMENT_TYPE_FENCE) continue;
if ((map_element_get_direction(mapElement) ^ 0x2) != edge) continue;
if (get_wall_entry(mapElement->properties.fence.type)->wall.flags2 & WALL_SCENERY_FLAG4) continue;
if (get_wall_entry(mapElement->properties.fence.type)->wall.flags2 & WALL_SCENERY_2_FLAG4) continue;
if (peep->next_z + 6 <= mapElement->base_height) continue;
if (peep->next_z >= mapElement->clearance_height) continue;
@ -10996,7 +10996,7 @@ static bool peep_find_ride_to_look_at(rct_peep *peep, uint8 edge, uint8 *rideToV
if (map_element_get_type(mapElement) == MAP_ELEMENT_TYPE_PATH) continue;
if (map_element_get_type(mapElement) == MAP_ELEMENT_TYPE_FENCE) {
if (get_wall_entry(mapElement->properties.fence.type)->wall.flags2 & WALL_SCENERY_FLAG4) {
if (get_wall_entry(mapElement->properties.fence.type)->wall.flags2 & WALL_SCENERY_2_FLAG4) {
continue;
}
}
@ -11018,7 +11018,7 @@ static bool peep_find_ride_to_look_at(rct_peep *peep, uint8 edge, uint8 *rideToV
do {
if (map_element_get_type(mapElement) != MAP_ELEMENT_TYPE_FENCE) continue;
if ((map_element_get_direction(mapElement) ^ 0x2) != edge) continue;
if (get_wall_entry(mapElement->properties.fence.type)->wall.flags2 & WALL_SCENERY_FLAG4) continue;
if (get_wall_entry(mapElement->properties.fence.type)->wall.flags2 & WALL_SCENERY_2_FLAG4) continue;
if (peep->next_z + 8 <= mapElement->base_height) continue;
if (peep->next_z >= mapElement->clearance_height) continue;

View File

@ -768,6 +768,7 @@ int ride_find_track_gap(rct_xy_element *input, rct_xy_element *output)
track_circuit_iterator it, slowIt;
int rideIndex;
assert(map_element_get_type(input->element) == MAP_ELEMENT_TYPE_TRACK);
rideIndex = input->element->properties.track.ride_index;
ride = get_ride(rideIndex);

View File

@ -2120,7 +2120,7 @@ void track_get_front(rct_xy_element *input, rct_xy_element *output)
bool track_element_is_lift_hill(rct_map_element *trackElement)
{
return trackElement->type & 0x80;
return trackElement->type & TRACK_ELEMENT_FLAG_CHAIN_LIFT;
}
/**

View File

@ -742,6 +742,8 @@ enum {
SPR_G2_TAB_NEWS = SPR_G2_BEGIN + 58,
SPR_G2_LOCKED = SPR_G2_BEGIN + 59,
SPR_G2_MENU_MULTIPLAYER = SPR_G2_BEGIN + 60,
SPR_G2_SORT = SPR_G2_BEGIN + 77,
};
#endif

View File

@ -18,6 +18,7 @@
#define _WINDOW_DROPDOWN_H_
#include "../common.h"
#include "../interface/window.h"
#define DROPDOWN_SEPARATOR 0

File diff suppressed because it is too large Load Diff

View File

@ -150,6 +150,7 @@ enum {
MAP_ELEMENT_FLAG_GHOST = (1 << 4),
MAP_ELEMENT_FLAG_BROKEN = (1 << 5),
MAP_ELEMENT_FLAG_BLOCK_BRAKE_CLOSED = (1 << 5),
MAP_ELEMENT_FLAG_CANNOT_REMOVE_TRACK = (1 << 6),
MAP_ELEMENT_FLAG_LAST_TILE = (1 << 7)
};

View File

@ -125,7 +125,7 @@ typedef enum {
WALL_SCENERY_FLAG1 = (1 << 0), // 0x1
WALL_SCENERY_FLAG2 = (1 << 1), // 0x2
WALL_SCENERY_CANT_BUILD_ON_SLOPE = (1 << 2), // 0x4
WALL_SCENERY_FLAG4 = (1 << 3), // 0x8 // Probably indicates translucency
WALL_SCENERY_IS_BANNER = (1 << 3), // 0x8 // Probably indicates translucency
WALL_SCENERY_IS_DOOR = (1 << 4), // 0x10
WALL_SCENERY_FLAG6 = (1 << 5), // 0x20
WALL_SCENERY_HAS_SECONDARY_COLOUR = (1 << 6), // 0x40
@ -133,7 +133,8 @@ typedef enum {
} WALL_SCENERY_FLAGS;
typedef enum {
WALL_SCENERY_2_FLAG_5 = (1 << 4), // 0x10
WALL_SCENERY_2_FLAG4 = (1 << 3), // 0x8
WALL_SCENERY_2_FLAG5 = (1 << 4), // 0x10
} WALL_SCENERY_2_FLAGS;
typedef struct rct_path_bit_scenery_entry {