integrate variable: gTrackPreviewOrigin

This commit is contained in:
Ted John 2016-05-02 18:40:07 +01:00
parent a8a8a7b1b2
commit c844275cea
3 changed files with 23 additions and 33 deletions

View File

@ -35,6 +35,7 @@ uint8 gTrackDesignPlaceFlags;
bool gTrackDesignSceneryToggle;
rct_xyz16 gTrackPreviewMin;
rct_xyz16 gTrackPreviewMax;
rct_xyz16 gTrackPreviewOrigin;
uint8 byte_F4414E;
static uint8 byte_F440D4;
@ -999,18 +1000,13 @@ int track_place_maze(rct_track_td6 *td6, sint16 x, sint16 y, sint16 z, uint8 rid
game_do_command(0, 0x69, 0, rideIndex, GAME_COMMAND_DEMOLISH_RIDE, 0, 0);
}
RCT2_GLOBAL(0x00F44142, sint16) = x;
RCT2_GLOBAL(0x00F44144, sint16) = y;
RCT2_GLOBAL(0x00F44146, sint16) = z;
gTrackPreviewOrigin = (rct_xyz16) { x, y, z };
return 1;
}
int track_place_ride(rct_track_td6 *td6, sint16 x, sint16 y, sint16 z, uint8 rideIndex)
{
RCT2_GLOBAL(0x00F44142, sint16) = x;
RCT2_GLOBAL(0x00F44144, sint16) = y;
RCT2_GLOBAL(0x00F44146, sint16) = z;
gTrackPreviewOrigin = (rct_xyz16) { x, y, z };
if (byte_F440D4== 0) {
gMapSelectionTiles->x = -1;
RCT2_GLOBAL(RCT2_ADDRESS_MAP_ARROW_X, sint16) = x;
@ -1143,8 +1139,8 @@ int track_place_ride(rct_track_td6 *td6, sint16 x, sint16 y, sint16 z, uint8 rid
x = entrance->x;
y = entrance->y;
rotate_map_coordinates(&x, &y, rotation);
x += RCT2_GLOBAL(0x00F44142, sint16);
y += RCT2_GLOBAL(0x00F44144, sint16);
x += gTrackPreviewOrigin.x;
y += gTrackPreviewOrigin.y;
track_design_update_max_min_coordinates(x, y, z);
@ -1169,7 +1165,7 @@ int track_place_ride(rct_track_td6 *td6, sint16 x, sint16 y, sint16 z, uint8 rid
y + TileDirectionDelta[rotation].y
};
rct_map_element* map_element = map_get_first_element_at(tile.x >> 5, tile.y >> 5);
z = RCT2_GLOBAL(0x00F44146, sint16) / 8;
z = gTrackPreviewOrigin.z / 8;
z += (entrance->z == (sint8)0x80) ? -1 : entrance->z;
do {
@ -1197,7 +1193,7 @@ int track_place_ride(rct_track_td6 *td6, sint16 x, sint16 y, sint16 z, uint8 rid
//dl
z = (entrance->z == (sint8)0x80) ? -1 : entrance->z;
z *= 8;
z += RCT2_GLOBAL(0x00F44146, sint16);
z += gTrackPreviewOrigin.z;
z >>= 4;
gGameCommandErrorTitle = STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE;
@ -1271,9 +1267,10 @@ int sub_6D01B3(rct_track_td6 *td6, uint8 bl, uint8 rideIndex, int x, int y, int
if (!track_place_scenery(
scenery,
rideIndex,
RCT2_GLOBAL(0x00F44142, sint16),
RCT2_GLOBAL(0x00F44144, sint16),
RCT2_GLOBAL(0x00F44146, sint16))){
gTrackPreviewOrigin.x,
gTrackPreviewOrigin.y,
gTrackPreviewOrigin.z
)) {
return RCT2_GLOBAL(0x00F440D5, money32);
}
}

View File

@ -160,6 +160,7 @@ extern uint8 gTrackDesignPlaceFlags;
extern bool gTrackDesignSceneryToggle;
extern rct_xyz16 gTrackPreviewMin;
extern rct_xyz16 gTrackPreviewMax;
extern rct_xyz16 gTrackPreviewOrigin;
extern uint8 byte_F4414E;

View File

@ -687,8 +687,8 @@ static bool track_design_save_copy_scenery_to_td6(rct_track_td6 *td6)
}
}
sint16 x = ((uint8)scenery->x) * 32 - RCT2_GLOBAL(0x00F44142, sint16);
sint16 y = ((uint8)scenery->y) * 32 - RCT2_GLOBAL(0x00F44144, sint16);
sint16 x = ((uint8)scenery->x) * 32 - gTrackPreviewOrigin.x;
sint16 y = ((uint8)scenery->y) * 32 - gTrackPreviewOrigin.y;
rotate_map_coordinates(&x, &y, RCT2_GLOBAL(0x00F4414D, uint8) ^ 2);
x /= 32;
y /= 32;
@ -702,7 +702,7 @@ static bool track_design_save_copy_scenery_to_td6(rct_track_td6 *td6)
scenery->x = (sint8)x;
scenery->y = (sint8)y;
int z = scenery->z * 8 - RCT2_GLOBAL(0xF44146, sint16);
int z = scenery->z * 8 - gTrackPreviewOrigin.z;
z /= 8;
if (z > 127 || z < -126) {
window_error_open(3346, STR_TRACK_TOO_LARGE_OR_TOO_MUCH_SCENERY);
@ -830,9 +830,7 @@ static bool track_design_save_to_td6_for_maze(uint8 rideIndex, rct_track_td6 *td
return false;
}
RCT2_GLOBAL(0x00F44142, sint16) = startX;
RCT2_GLOBAL(0x00F44144, sint16) = startY;
RCT2_GLOBAL(0x00F44146, sint16) = mapElement->base_height * 8;
gTrackPreviewOrigin = (rct_xyz16) { startX, startY, mapElement->base_height * 8 };
size_t numMazeElements = 0;
td6->maze_elements = calloc(8192, sizeof(rct_td6_maze_element));
@ -924,11 +922,9 @@ static bool track_design_save_to_td6_for_maze(uint8 rideIndex, rct_track_td6 *td
*((uint8*)&td6->maze_elements[numMazeElements]) = 0xFF;
// Save global vars as they are still used by scenery
sint16 start_z = RCT2_GLOBAL(0x00F44146, sint16);
sint16 startZ = gTrackPreviewOrigin.z;
sub_6D01B3(td6, PTD_OPERATION_DRAW_OUTLINES, 0, 4096, 4096, 0);
RCT2_GLOBAL(0x00F44142, sint16) = startX;
RCT2_GLOBAL(0x00F44144, sint16) = startY;
RCT2_GLOBAL(0x00F44146, sint16) = start_z;
gTrackPreviewOrigin = (rct_xyz16) { startX, startY, startZ };
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, sint16) &= 0xFFF9;
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, sint16) &= 0xFFF7;
@ -991,9 +987,7 @@ static bool track_design_save_to_td6_for_tracked_ride(uint8 rideIndex, rct_track
sint16 start_x = trackElement.x;
sint16 start_y = trackElement.y;
sint16 start_z = z + trackCoordinates->z_begin;
RCT2_GLOBAL(0x00F44142, sint16) = start_x;
RCT2_GLOBAL(0x00F44144, sint16) = start_y;
RCT2_GLOBAL(0x00F44146, sint16) = start_z;
gTrackPreviewOrigin = (rct_xyz16) { start_x, start_y, start_z };
size_t numTrackElements = 0;
td6->track_elements = calloc(8192, sizeof(rct_td6_track_element));
@ -1130,15 +1124,15 @@ static bool track_design_save_to_td6_for_tracked_ride(uint8 rideIndex, rct_track
entrance_direction &= MAP_ELEMENT_DIRECTION_MASK;
entrance->direction = entrance_direction;
x -= RCT2_GLOBAL(0x00F44142, sint16);
y -= RCT2_GLOBAL(0x00F44144, sint16);
x -= gTrackPreviewOrigin.x;
y -= gTrackPreviewOrigin.y;
rotate_map_coordinates(&x, &y, RCT2_GLOBAL(0x00F4414D, uint8) ^ 2);
entrance->x = x;
entrance->y = y;
z *= 8;
z -= RCT2_GLOBAL(0x00F44146, sint16);
z -= gTrackPreviewOrigin.z;
z /= 8;
if (z > 127 || z < -126) {
@ -1166,9 +1160,7 @@ static bool track_design_save_to_td6_for_tracked_ride(uint8 rideIndex, rct_track
sub_6D01B3(td6, PTD_OPERATION_DRAW_OUTLINES, 0, 4096, 4096, 0);
// Resave global vars for scenery reasons.
RCT2_GLOBAL(0x00F44142, sint16) = start_x;
RCT2_GLOBAL(0x00F44144, sint16) = start_y;
RCT2_GLOBAL(0x00F44146, sint16) = start_z;
gTrackPreviewOrigin = (rct_xyz16) { start_x, start_y, start_z };
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, sint16) &= 0xFFF9;
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, sint16) &= 0xFFF7;