fix clear scenery for network

This commit is contained in:
zsilencer 2015-07-18 11:22:59 -06:00
parent 04dedbcec4
commit 56f8954e27
3 changed files with 28 additions and 26 deletions

View File

@ -1653,13 +1653,11 @@ void top_toolbar_tool_update_scenery_clear(sint16 x, sint16 y){
if (!state_changed) if (!state_changed)
return; return;
money32 cost = map_clear_scenery( int eax = RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_X, sint16);
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_X, sint16), int ecx = RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_Y, sint16);
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_Y, sint16), int edi = RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_X, sint16);
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_X, sint16), int ebp = RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_Y, sint16);
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_Y, sint16), money32 cost = game_do_command(eax, 0, ecx, 0, GAME_COMMAND_CLEAR_SCENERY, edi, ebp);
0
);
if (RCT2_GLOBAL(0x00F1AD62, money32) != cost){ if (RCT2_GLOBAL(0x00F1AD62, money32) != cost){
RCT2_GLOBAL(0x00F1AD62, money32) = cost; RCT2_GLOBAL(0x00F1AD62, money32) = cost;
@ -2488,7 +2486,7 @@ static void window_top_toolbar_tool_down(rct_window* w, int widgetIndex, int x,
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_X, sint16), RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_X, sint16),
1, 1,
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_Y, sint16), RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_Y, sint16),
0, (gClearSmallScenery | gClearLargeScenery << 1 | gClearFootpath << 2),
GAME_COMMAND_CLEAR_SCENERY, GAME_COMMAND_CLEAR_SCENERY,
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_X, sint16), RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_X, sint16),
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_Y, sint16) RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_Y, sint16)
@ -2697,7 +2695,7 @@ static void window_top_toolbar_tool_drag(rct_window* w, int widgetIndex, int x,
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_X, sint16), RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_X, sint16),
1, 1,
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_Y, sint16), RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_Y, sint16),
0, (gClearSmallScenery | gClearLargeScenery << 1 | gClearFootpath << 2),
GAME_COMMAND_CLEAR_SCENERY, GAME_COMMAND_CLEAR_SCENERY,
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_X, sint16), RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_X, sint16),
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_Y, sint16) RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_Y, sint16)

View File

@ -1370,7 +1370,7 @@ void game_command_set_banner_colour(int* eax, int* ebx, int* ecx, int* edx, int*
* *
* rct2: 0x0068DFE4 * rct2: 0x0068DFE4
*/ */
money32 map_clear_scenery_from_tile(int x, int y, int flags) money32 map_clear_scenery_from_tile(int x, int y, int clear, int flags)
{ {
int type; int type;
money32 cost, totalCost; money32 cost, totalCost;
@ -1384,8 +1384,14 @@ restart_from_beginning:
type = map_element_get_type(mapElement); type = map_element_get_type(mapElement);
switch (type) { switch (type) {
case MAP_ELEMENT_TYPE_PATH: case MAP_ELEMENT_TYPE_PATH:
if (gClearFootpath) { if (clear & (1 << 2)) {
cost = footpath_remove_real(x * 32, y * 32, mapElement->base_height, flags); int eax = x * 32;
int ebx = flags;
int ecx = y * 32;
int edx = mapElement->base_height;
int edi, ebp;
cost = game_do_command(eax, ebx, ecx, edx, GAME_COMMAND_REMOVE_PATH, edi, ebp);
if (cost == MONEY32_UNDEFINED) if (cost == MONEY32_UNDEFINED)
return MONEY32_UNDEFINED; return MONEY32_UNDEFINED;
@ -1394,14 +1400,13 @@ restart_from_beginning:
goto restart_from_beginning; goto restart_from_beginning;
} break; } break;
case MAP_ELEMENT_TYPE_SCENERY: case MAP_ELEMENT_TYPE_SCENERY:
if (gClearSmallScenery) { if (clear & (1 << 0)) {
int eax = x * 32; int eax = x * 32;
int ebx = (mapElement->type << 8) | flags; int ebx = (mapElement->type << 8) | flags;
int ecx = y * 32; int ecx = y * 32;
int edx = (mapElement->properties.scenery.type << 8) | (mapElement->base_height); int edx = (mapElement->properties.scenery.type << 8) | (mapElement->base_height);
int esi, edi, ebp; int edi, ebp;
game_command_remove_scenery(&eax, &ebx, &ecx, &edx, &esi, &edi, &ebp); cost = game_do_command(eax, ebx, ecx, edx, GAME_COMMAND_REMOVE_SCENERY, edi, ebp);
cost = ebx;
if (cost == MONEY32_UNDEFINED) if (cost == MONEY32_UNDEFINED)
return MONEY32_UNDEFINED; return MONEY32_UNDEFINED;
@ -1412,14 +1417,13 @@ restart_from_beginning:
} break; } break;
case MAP_ELEMENT_TYPE_FENCE: case MAP_ELEMENT_TYPE_FENCE:
if (gClearSmallScenery) { if (clear & (1 << 0)) {
int eax = x * 32; int eax = x * 32;
int ebx = flags; int ebx = flags;
int ecx = y * 32; int ecx = y * 32;
int edx = (mapElement->base_height << 8) | (mapElement->type & MAP_ELEMENT_DIRECTION_MASK); int edx = (mapElement->base_height << 8) | (mapElement->type & MAP_ELEMENT_DIRECTION_MASK);
int esi, edi, ebp; int edi, ebp;
game_command_remove_fence(&eax, &ebx, &ecx, &edx, &esi, &edi, &ebp); cost = game_do_command(eax, ebx, ecx, edx, GAME_COMMAND_REMOVE_FENCE, edi, ebp);
cost = ebx;
if (cost == MONEY32_UNDEFINED) if (cost == MONEY32_UNDEFINED)
return MONEY32_UNDEFINED; return MONEY32_UNDEFINED;
@ -1430,14 +1434,13 @@ restart_from_beginning:
} break; } break;
case MAP_ELEMENT_TYPE_SCENERY_MULTIPLE: case MAP_ELEMENT_TYPE_SCENERY_MULTIPLE:
if (gClearLargeScenery) { if (clear & (1 << 1)) {
int eax = x * 32; int eax = x * 32;
int ebx = flags | ((mapElement->type & MAP_ELEMENT_DIRECTION_MASK) << 8); int ebx = flags | ((mapElement->type & MAP_ELEMENT_DIRECTION_MASK) << 8);
int ecx = y * 32; int ecx = y * 32;
int edx = mapElement->base_height | ((mapElement->properties.scenerymultiple.type >> 10) << 8); int edx = mapElement->base_height | ((mapElement->properties.scenerymultiple.type >> 10) << 8);
int esi, edi, ebp; int edi, ebp;
game_command_remove_large_scenery(&eax, &ebx, &ecx, &edx, &esi, &edi, &ebp); cost = game_do_command(eax, ebx, ecx, edx, GAME_COMMAND_REMOVE_LARGE_SCENERY, edi, ebp);
cost = ebx;
if (cost == MONEY32_UNDEFINED) if (cost == MONEY32_UNDEFINED)
return MONEY32_UNDEFINED; return MONEY32_UNDEFINED;
@ -1454,7 +1457,7 @@ restart_from_beginning:
return totalCost; return totalCost;
} }
money32 map_clear_scenery(int x0, int y0, int x1, int y1, int flags) money32 map_clear_scenery(int x0, int y0, int x1, int y1, int clear, int flags)
{ {
int x, y, z; int x, y, z;
money32 totalCost, cost; money32 totalCost, cost;
@ -1504,6 +1507,7 @@ void game_command_clear_scenery(int* eax, int* ebx, int* ecx, int* edx, int* esi
(sint16)(*ecx & 0xFFFF), (sint16)(*ecx & 0xFFFF),
(sint16)(*edi & 0xFFFF), (sint16)(*edi & 0xFFFF),
(sint16)(*ebp & 0xFFFF), (sint16)(*ebp & 0xFFFF),
*edx,
*ebx & 0xFF *ebx & 0xFF
); );
} }

View File

@ -301,7 +301,7 @@ int map_can_construct_with_clear_at(int x, int y, int zLow, int zHigh, void *cle
int map_can_construct_at(int x, int y, int zLow, int zHigh, uint8 bl); int map_can_construct_at(int x, int y, int zLow, int zHigh, uint8 bl);
void rotate_map_coordinates(sint16 *x, sint16 *y, int rotation); void rotate_map_coordinates(sint16 *x, sint16 *y, int rotation);
rct_xy16 coordinate_3d_to_2d(const rct_xyz16* coordinate_3d, int rotation); rct_xy16 coordinate_3d_to_2d(const rct_xyz16* coordinate_3d, int rotation);
money32 map_clear_scenery(int x0, int y0, int x1, int y1, int flags); money32 map_clear_scenery(int x0, int y0, int x1, int y1, int clear, int flags);
money32 lower_water(sint16 x0, sint16 y0, sint16 x1, sint16 y1, uint8 flags); money32 lower_water(sint16 x0, sint16 y0, sint16 x1, sint16 y1, uint8 flags);
money32 raise_water(sint16 x0, sint16 y0, sint16 x1, sint16 y1, uint8 flags); money32 raise_water(sint16 x0, sint16 y0, sint16 x1, sint16 y1, uint8 flags);
money32 map_place_fence(int type, int x, int y, int z, int edge, int primaryColour, int secondaryColour, int tertiaryColour, int flags); money32 map_place_fence(int type, int x, int y, int z, int edge, int primaryColour, int secondaryColour, int tertiaryColour, int flags);