mirror of https://github.com/OpenRCT2/OpenRCT2.git
parent
5578a16663
commit
eef779378e
|
@ -1918,6 +1918,15 @@ void top_toolbar_tool_update_water(sint16 x, sint16 y){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
money32 sub_6E24F6(rct_xy16 map_tile, uint32 parameter_1, uint32 parameter_2, uint32 parameter_3, uint16 selected_tab){
|
||||||
|
|
||||||
|
int eax = map_tile.x, ebx = parameter_1, ecx = map_tile.y, edx = parameter_2, esi = 0, ebp = selected_tab, edi = parameter_3;
|
||||||
|
|
||||||
|
RCT2_CALLFUNC_X(0x006E24F6, &eax, &ebx, &ecx, &edx, &esi, &edi, &ebp);
|
||||||
|
|
||||||
|
return (money32)ebx;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* rct2: 0x006E287B
|
* rct2: 0x006E287B
|
||||||
|
@ -1950,16 +1959,171 @@ void top_toolbar_tool_update_scenery(sint16 x, sint16 y){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rct_scenery_entry* scenery;
|
||||||
|
uint8 bl;
|
||||||
|
money32 cost;
|
||||||
|
|
||||||
switch (scenery_type){
|
switch (scenery_type){
|
||||||
case 0:
|
case 0:
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, uint16) |= (1 << 0);
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_X, sint16) = mapTile.x;
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_Y, sint16) = mapTile.y;
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_X, sint16) = mapTile.x;
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_Y, sint16) = mapTile.y;
|
||||||
|
|
||||||
|
scenery = g_smallSceneryEntries[selected_scenery];
|
||||||
|
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_TYPE, uint16) = 4;
|
||||||
|
if (!(scenery->small_scenery.flags & SMALL_SCENERY_FLAG_FULL_TILE)){
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_TYPE, uint16) = ((parameter2 & 0xFF) ^ 2) + 6;
|
||||||
|
}
|
||||||
|
|
||||||
|
map_invalidate_selection_rect();
|
||||||
|
|
||||||
|
// If no change in ghost placement
|
||||||
|
if ((RCT2_GLOBAL(0x00F64F0D, uint8) & (1 << 0)) &&
|
||||||
|
mapTile.x == RCT2_GLOBAL(0x00F64EC4, sint16) &&
|
||||||
|
mapTile.y == RCT2_GLOBAL(0x00F64EC6, sint16) &&
|
||||||
|
(parameter2 & 0xFF) == RCT2_GLOBAL(0x00F64F0E, uint8)&&
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_SCENERY_Z_COORDINATE, sint16) == RCT2_GLOBAL(0x00F64F0A, sint16) &&
|
||||||
|
RCT2_GLOBAL(0x00F64EDA, uint16) == selected_tab){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
scenery_remove_ghost_tool_placement();
|
||||||
|
|
||||||
|
RCT2_GLOBAL(0x00F64F0E, uint8) = (parameter2 & 0xFF);
|
||||||
|
RCT2_GLOBAL(0x00F64F0A, sint16) = RCT2_GLOBAL(RCT2_ADDRESS_SCENERY_Z_COORDINATE, sint16);
|
||||||
|
|
||||||
|
bl = 1;
|
||||||
|
if (RCT2_GLOBAL(RCT2_ADDRESS_SCENERY_Z_COORDINATE, sint16) != 0 &&
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_SCENERY_TOOL_SHIFT_PRESSED, uint8) != 0){
|
||||||
|
bl = 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; bl != 0; bl--){
|
||||||
|
cost = sub_6E24F6(
|
||||||
|
mapTile,
|
||||||
|
parameter1,
|
||||||
|
parameter2,
|
||||||
|
parameter3,
|
||||||
|
selected_tab);
|
||||||
|
|
||||||
|
if (cost != MONEY32_UNDEFINED)
|
||||||
|
break;
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_SCENERY_Z_COORDINATE, sint16) += 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
RCT2_GLOBAL(0x00F64EB4, money32) = cost;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, uint16) |= (1 << 0);
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_X, sint16) = mapTile.x;
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_Y, sint16) = mapTile.y;
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_X, sint16) = mapTile.x;
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_Y, sint16) = mapTile.y;
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_TYPE, uint16) = 4;
|
||||||
|
|
||||||
|
map_invalidate_selection_rect();
|
||||||
|
|
||||||
|
// If no change in ghost placement
|
||||||
|
if ((RCT2_GLOBAL(0x00F64F0D, uint8) & (1 << 1)) &&
|
||||||
|
mapTile.x == RCT2_GLOBAL(0x00F64EC4, sint16) &&
|
||||||
|
mapTile.y == RCT2_GLOBAL(0x00F64EC6, sint16) &&
|
||||||
|
(parameter2 & 0xFF) == RCT2_GLOBAL(0x00F64F09, uint8)){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
scenery_remove_ghost_tool_placement();
|
||||||
|
|
||||||
|
cost = sub_6E24F6(
|
||||||
|
mapTile,
|
||||||
|
parameter1,
|
||||||
|
parameter2,
|
||||||
|
parameter3,
|
||||||
|
selected_tab);
|
||||||
|
|
||||||
|
RCT2_GLOBAL(0x00F64EB4, money32) = cost;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, uint16) |= (1 << 0);
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_X, sint16) = mapTile.x;
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_Y, sint16) = mapTile.y;
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_X, sint16) = mapTile.x;
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_Y, sint16) = mapTile.y;
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_TYPE, uint16) = 10 + parameter2 & 0xFF;
|
||||||
|
|
||||||
|
map_invalidate_selection_rect();
|
||||||
|
|
||||||
|
// If no change in ghost placement
|
||||||
|
if ((RCT2_GLOBAL(0x00F64F0D, uint8) & (1 << 2)) &&
|
||||||
|
mapTile.x == RCT2_GLOBAL(0x00F64EC4, sint16) &&
|
||||||
|
mapTile.y == RCT2_GLOBAL(0x00F64EC6, sint16) &&
|
||||||
|
(parameter2 & 0xFF) == RCT2_GLOBAL(0x00F64F11, uint8) &&
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_SCENERY_Z_COORDINATE, sint16) == RCT2_GLOBAL(0x00F64F0A, sint16)
|
||||||
|
){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
scenery_remove_ghost_tool_placement();
|
||||||
|
|
||||||
|
RCT2_GLOBAL(0x00F64F11, uint8) = (parameter2 & 0xFF);
|
||||||
|
RCT2_GLOBAL(0x00F64F0A, sint16) = RCT2_GLOBAL(RCT2_ADDRESS_SCENERY_Z_COORDINATE, sint16);
|
||||||
|
|
||||||
|
bl = 1;
|
||||||
|
if (RCT2_GLOBAL(RCT2_ADDRESS_SCENERY_Z_COORDINATE, sint16) != 0 &&
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_SCENERY_TOOL_SHIFT_PRESSED, uint8) != 0){
|
||||||
|
bl = 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
cost = 0;
|
||||||
|
for (; bl != 0; bl--){
|
||||||
|
cost = sub_6E24F6(
|
||||||
|
mapTile,
|
||||||
|
parameter1,
|
||||||
|
parameter2,
|
||||||
|
parameter3,
|
||||||
|
selected_tab);
|
||||||
|
|
||||||
|
if (cost != MONEY32_UNDEFINED)
|
||||||
|
break;
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_SCENERY_Z_COORDINATE, sint16) += 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
RCT2_GLOBAL(0x00F64EB4, money32) = cost;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
|
//6e29f2
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, uint16) |= (1 << 0);
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_X, sint16) = mapTile.x;
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_Y, sint16) = mapTile.y;
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_X, sint16) = mapTile.x;
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_Y, sint16) = mapTile.y;
|
||||||
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_TYPE, uint16) = 4;
|
||||||
|
|
||||||
|
map_invalidate_selection_rect();
|
||||||
|
|
||||||
|
// If no change in ghost placement
|
||||||
|
if ((RCT2_GLOBAL(0x00F64F0D, uint8) & (1 << 4)) &&
|
||||||
|
mapTile.x == RCT2_GLOBAL(0x00F64EC4, sint16) &&
|
||||||
|
mapTile.y == RCT2_GLOBAL(0x00F64EC6, sint16) &&
|
||||||
|
(parameter2 & 0xFF) == RCT2_GLOBAL(0x00F64F09, uint8) &&
|
||||||
|
((parameter2 >> 8) & 0xFF) == RCT2_GLOBAL(0x00F64EC0, uint8)){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
scenery_remove_ghost_tool_placement();
|
||||||
|
|
||||||
|
cost = sub_6E24F6(
|
||||||
|
mapTile,
|
||||||
|
parameter1,
|
||||||
|
parameter2,
|
||||||
|
parameter3,
|
||||||
|
selected_tab);
|
||||||
|
|
||||||
|
RCT2_GLOBAL(0x00F64EB4, money32) = cost;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1991,7 +2155,7 @@ static void window_top_toolbar_tool_update()
|
||||||
top_toolbar_tool_update_water(x, y);
|
top_toolbar_tool_update_water(x, y);
|
||||||
break;
|
break;
|
||||||
case WIDX_SCENERY:
|
case WIDX_SCENERY:
|
||||||
RCT2_CALLPROC_X(0x006E287B, x, y, 0, widgetIndex, (int)w, 0, 0);
|
top_toolbar_tool_update_scenery(x, y);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue