integrate park entrance ghost variables

This commit is contained in:
Ted John 2016-04-23 01:21:00 +01:00
parent b59f5c17ca
commit 171388e9a3
4 changed files with 35 additions and 23 deletions

View File

@ -248,12 +248,6 @@
#define RCT2_ADDRESS_SELECTED_TERRAIN_EDGE 0x009E2E24 #define RCT2_ADDRESS_SELECTED_TERRAIN_EDGE 0x009E2E24
#define RCT2_ADDRESS_SELECTED_TERRAIN_SURFACE 0x009E2E25 #define RCT2_ADDRESS_SELECTED_TERRAIN_SURFACE 0x009E2E25
#define RCT2_ADDRESS_PARK_ENTRANCE_GHOST_X 0x009E32CC
#define RCT2_ADDRESS_PARK_ENTRANCE_GHOST_Y 0x009E32CE
#define RCT2_ADDRESS_PARK_ENTRANCE_GHOST_DIRECTION 0x009E32D1
#define RCT2_ADDRESS_PARK_ENTRANCE_GHOST_EXISTS 0x009E32D2
#define RCT2_ADDRESS_PARK_ENTRANCE_GHOST_PRICE 0x009E32D3
#define RCT2_ADDRESS_G1_ELEMENTS 0x009EBD28 #define RCT2_ADDRESS_G1_ELEMENTS 0x009EBD28
//Every pixel changed by rain is stored. //Every pixel changed by rain is stored.
@ -602,6 +596,13 @@
#define RCT2_ADDRESS_CURRENT_TOOL 0x009DE545 #define RCT2_ADDRESS_CURRENT_TOOL 0x009DE545
#define RCT2_ADDRESS_TOOL_WIDGETINDEX 0x009DE546 #define RCT2_ADDRESS_TOOL_WIDGETINDEX 0x009DE546
#define RCT2_ADDRESS_PARK_ENTRANCE_GHOST_X 0x009E32CC
#define RCT2_ADDRESS_PARK_ENTRANCE_GHOST_Y 0x009E32CE
#define RCT2_ADDRESS_PARK_ENTRANCE_GHOST_Z 0x009E32D0
#define RCT2_ADDRESS_PARK_ENTRANCE_GHOST_DIRECTION 0x009E32D1
#define RCT2_ADDRESS_PARK_ENTRANCE_GHOST_EXISTS 0x009E32D2
#define RCT2_ADDRESS_PARK_ENTRANCE_GHOST_PRICE 0x009E32D3
#define RCT2_ADDRESS_PROVISIONAL_PATH_FLAGS 0x00F3EF92 #define RCT2_ADDRESS_PROVISIONAL_PATH_FLAGS 0x00F3EF92
#define RCT2_ADDRESS_PROVISIONAL_PATH_X 0x00F3EF94 #define RCT2_ADDRESS_PROVISIONAL_PATH_X 0x00F3EF94
#define RCT2_ADDRESS_PROVISIONAL_PATH_Y 0x00F3EF96 #define RCT2_ADDRESS_PROVISIONAL_PATH_Y 0x00F3EF96

View File

@ -318,7 +318,7 @@ static void window_map_mouseup(rct_window *w, int widgetIndex)
if (tool_set(w, widgetIndex, 2)) if (tool_set(w, widgetIndex, 2))
break; break;
RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_GHOST_EXISTS, sint8) = 0; gParkEntranceGhostExists = false;
gInputFlags |= INPUT_FLAG_6; gInputFlags |= INPUT_FLAG_6;
show_gridlines(); show_gridlines();
@ -1166,7 +1166,7 @@ void sub_666EEF(int x, int y, sint16 *mapX, sint16 *mapY, sint16 *mapZ, int *dir
return; return;
mapElement = map_get_surface_element_at(*mapX >> 5, *mapY >> 5); mapElement = map_get_surface_element_at(*mapX >> 5, *mapY >> 5);
*mapZ = mapElement->properties.surface.slope & 0x1F; *mapZ = mapElement->properties.surface.terrain & 0x1F;
if (*mapZ == 0) { if (*mapZ == 0) {
*mapZ = mapElement->base_height / 2; *mapZ = mapElement->base_height / 2;
if ((mapElement->properties.surface.slope & 0x0F) != 0) { if ((mapElement->properties.surface.slope & 0x0F) != 0) {
@ -1211,16 +1211,16 @@ static void window_map_place_park_entrance_tool_update(int x, int y)
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, uint16) |= (1 << 1); RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, uint16) |= (1 << 1);
map_invalidate_map_selection_tiles(); map_invalidate_map_selection_tiles();
if ( if (
(RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_GHOST_EXISTS, uint8) & (1 << 0)) && gParkEntranceGhostExists &&
mapX == RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_GHOST_X, uint16) && mapX == gParkEntranceGhostPosition.x &&
mapY == RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_GHOST_Y, uint16) && mapY == gParkEntranceGhostPosition.y &&
direction == RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_GHOST_DIRECTION, uint8) direction == gParkEntranceGhostDirection
) { ) {
return; return;
} }
park_remove_ghost_entrance(); park_remove_ghost_entrance();
RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_GHOST_PRICE, uint32) = park_place_ghost_entrance(mapX, mapY, mapZ, direction); gParkEntranceGhostPrice = park_place_ghost_entrance(mapX, mapY, mapZ, direction);
} }
/** /**

View File

@ -57,6 +57,11 @@ int _suggestedGuestMaximum;
*/ */
int _guestGenerationProbability; int _guestGenerationProbability;
bool gParkEntranceGhostExists;
rct_xyz16 gParkEntranceGhostPosition;
uint8 gParkEntranceGhostDirection;
money32 gParkEntranceGhostPrice;
int park_is_open() int park_is_open()
{ {
return (gParkFlags & PARK_FLAGS_PARK_OPEN) != 0; return (gParkFlags & PARK_FLAGS_PARK_OPEN) != 0;
@ -1121,13 +1126,13 @@ int get_forced_park_rating(){
*/ */
void park_remove_ghost_entrance() void park_remove_ghost_entrance()
{ {
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_GHOST_EXISTS, uint8) & (1 << 0)) { if (gParkEntranceGhostExists) {
RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_GHOST_EXISTS, uint8) &= ~(1 << 0); gParkEntranceGhostExists = false;
game_do_command( game_do_command(
RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_GHOST_X, uint16), gParkEntranceGhostPosition.x,
40 | GAME_COMMAND_FLAG_APPLY, 40 | GAME_COMMAND_FLAG_APPLY,
RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_GHOST_Y, uint16), gParkEntranceGhostPosition.y,
RCT2_GLOBAL(0x009E32D0, uint8), gParkEntranceGhostPosition.z,
GAME_COMMAND_REMOVE_PARK_ENTRANCE, GAME_COMMAND_REMOVE_PARK_ENTRANCE,
0, 0,
0 0
@ -1154,11 +1159,11 @@ money32 park_place_ghost_entrance(int x, int y, int z, int direction)
0 0
); );
if (result != MONEY32_UNDEFINED) { if (result != MONEY32_UNDEFINED) {
RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_GHOST_X, uint16) = x; gParkEntranceGhostPosition.x = x;
RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_GHOST_Y, uint16) = y; gParkEntranceGhostPosition.y = y;
RCT2_GLOBAL(0x009E32D0, uint8) = z; gParkEntranceGhostPosition.z = z;
RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_GHOST_DIRECTION, uint8) = direction; gParkEntranceGhostDirection = direction;
RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_GHOST_EXISTS, uint8) |= (1 << 0); gParkEntranceGhostExists = true;
} }
return result; return result;
} }

View File

@ -22,6 +22,7 @@
#define _PARK_H_ #define _PARK_H_
#include "../common.h" #include "../common.h"
#include "map.h"
#define DECRYPT_MONEY(money) rol32((money) ^ 0xF4EC9621, 13) #define DECRYPT_MONEY(money) rol32((money) ^ 0xF4EC9621, 13)
#define ENCRYPT_MONEY(money) (ror32((money), 13) ^ 0xF4EC9621) #define ENCRYPT_MONEY(money) (ror32((money), 13) ^ 0xF4EC9621)
@ -57,6 +58,11 @@ extern uint8 *gGuestsInParkHistory;
extern int _guestGenerationProbability; extern int _guestGenerationProbability;
extern int _suggestedGuestMaximum; extern int _suggestedGuestMaximum;
extern bool gParkEntranceGhostExists;
extern rct_xyz16 gParkEntranceGhostPosition;
extern uint8 gParkEntranceGhostDirection;
extern money32 gParkEntranceGhostPrice;
void set_forced_park_rating(int rating); void set_forced_park_rating(int rating);
int get_forced_park_rating(); int get_forced_park_rating();