1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-21 14:02:59 +01:00

Depreciate game command. Fix error messages

This commit is contained in:
duncanspumpkin
2017-04-16 11:29:14 +01:00
committed by Michał Janiszewski
parent 5103113740
commit 205a1c9e12
4 changed files with 36 additions and 40 deletions

View File

@@ -165,7 +165,7 @@ namespace GameActions
callback(result);
}
if (result.Error != GA_ERROR::OK)
if (result.Error != GA_ERROR::OK && !(flags & GAME_COMMAND_FLAG_GHOST))
{
// Show the error box
Memory::Copy(gCommonFormatArgs, result.ErrorMessageArgs, sizeof(result.ErrorMessageArgs));

View File

@@ -26,6 +26,13 @@ extern "C"
#include "../world/footpath.h"
}
struct PlaceParkEntranceGameActionResult : public GameActionResult {
PlaceParkEntranceGameActionResult(GA_ERROR error, rct_string_id message) :GameActionResult(error, message)
{
ErrorTitle = STR_CANT_BUILD_PARK_ENTRANCE_HERE;
}
};
class PlaceParkEntranceAction : public IGameAction
{
public:
@@ -64,7 +71,7 @@ public:
{
if (!(gScreenFlags & SCREEN_FLAGS_EDITOR) && !gCheatsSandboxMode)
{
return GameActionResult(GA_ERROR::NOT_IN_EDITOR_MODE, STR_NONE);
return PlaceParkEntranceGameActionResult(GA_ERROR::NOT_IN_EDITOR_MODE, STR_NONE);
}
gCommandExpenditureType = RCT_EXPENDITURE_TYPE_LAND_PURCHASE;
@@ -75,12 +82,12 @@ public:
if (!map_check_free_elements_and_reorganise(3))
{
return GameActionResult(GA_ERROR::NO_FREE_ELEMENTS, STR_NONE);
return PlaceParkEntranceGameActionResult(GA_ERROR::NO_FREE_ELEMENTS, STR_NONE);
}
if (x <= 32 || y <= 32 || x >= (gMapSizeUnits - 32) || y >= (gMapSizeUnits - 32))
{
return GameActionResult(GA_ERROR::INVALID_PARAMETERS, STR_TOO_CLOSE_TO_EDGE_OF_MAP);
return PlaceParkEntranceGameActionResult(GA_ERROR::INVALID_PARAMETERS, STR_TOO_CLOSE_TO_EDGE_OF_MAP);
}
sint8 entranceNum = -1;
@@ -95,7 +102,7 @@ public:
if (entranceNum == -1)
{
return GameActionResult(GA_ERROR::INVALID_PARAMETERS, STR_ERR_TOO_MANY_PARK_ENTRANCES);
return PlaceParkEntranceGameActionResult(GA_ERROR::INVALID_PARAMETERS, STR_ERR_TOO_MANY_PARK_ENTRANCES);
}
sint8 zLow = z * 2;
@@ -118,7 +125,7 @@ public:
{
if (!map_can_construct_at(entranceLoc.x, entranceLoc.y, zLow, zHigh, 0xF))
{
return GameActionResult(GA_ERROR::NO_CLEARANCE, STR_NONE);
return PlaceParkEntranceGameActionResult(GA_ERROR::NO_CLEARANCE, STR_NONE);
}
}
@@ -126,7 +133,7 @@ public:
rct_map_element* entranceElement = map_get_park_entrance_element_at(entranceLoc.x, entranceLoc.y, zLow, false);
if (entranceElement != NULL)
{
return GameActionResult(GA_ERROR::ITEM_ALREADY_PLACED, STR_NONE);
return PlaceParkEntranceGameActionResult(GA_ERROR::ITEM_ALREADY_PLACED, STR_NONE);
}
}
return GameActionResult();
@@ -180,7 +187,7 @@ public:
}
rct_map_element* newElement = map_element_insert(entranceLoc.x / 32, entranceLoc.y / 32, zLow, 0xF);
assert(newElement != NULL);
Guard::Assert(newElement != NULL);
newElement->clearance_height = zHigh;
if (flags & GAME_COMMAND_FLAG_GHOST)
@@ -220,6 +227,23 @@ static auto Factory UNUSED_ATTR = GameActions::Register<PlaceParkEntranceAction>
extern "C"
{
money32 place_park_entrance(sint16 x, sint16 y, sint16 z, uint8 direction)
{
auto gameAction = PlaceParkEntranceAction();
gameAction.x = x;
gameAction.y = y;
gameAction.z = z;
gameAction.direction = direction;
auto result = GameActions::Execute(&gameAction);
if (result.Error == GA_ERROR::OK)
{
return 0;
}
else
{
return MONEY32_UNDEFINED;
}
}
/**
*
@@ -233,29 +257,7 @@ extern "C"
sint32* edi,
sint32* ebp)
{
auto gameAction = PlaceParkEntranceAction();
gameAction.x = (*eax & 0xFFFF);
gameAction.y = (*ecx & 0xFFFF);
gameAction.z = (*edx & 0xFF);
gameAction.direction = ((*ebx >> 8) & 0xFF);
uint8 flags = (*ebx & 0xFF);
GameActionResult result;
if (flags & GAME_COMMAND_FLAG_APPLY) {
result = GameActions::Execute(&gameAction, flags);
}
else
{
result = GameActions::Query(&gameAction, flags);
}
if (result.Error != GA_ERROR::OK)
{
*ebx = MONEY32_UNDEFINED;
}
else
{
*ebx = result.Cost;
}
Guard::Assert(false, "GAME_COMMAND_PLACE_PARK_ENTRANCE DEPRECIATED");
}
/**

View File

@@ -1325,15 +1325,7 @@ static void window_map_place_park_entrance_tool_down(sint32 x, sint32 y)
place_park_entrance_get_map_position(x, y, &mapX, &mapY, &mapZ, &direction);
if (mapX != MAP_LOCATION_NULL) {
gGameCommandErrorTitle = STR_CANT_BUILD_PARK_ENTRANCE_HERE;
money32 price = game_do_command(
mapX,
GAME_COMMAND_FLAG_APPLY | (direction << 8),
mapY,
mapZ,
GAME_COMMAND_PLACE_PARK_ENTRANCE,
0,
0
);
money32 price = place_park_entrance(mapX, mapY, mapZ, direction);
if (price != MONEY32_UNDEFINED) {
audio_play_sound_at_location(
SOUND_PLACE_ITEM,

View File

@@ -52,6 +52,8 @@ extern uint8 gRideEntranceExitGhostStationIndex;
void park_entrance_remove_ghost();
money32 park_entrance_place_ghost(sint32 x, sint32 y, sint32 z, sint32 direction);
money32 place_park_entrance(sint16 x, sint16 y, sint16 z, uint8 direction);
void reset_park_entrance();
void maze_entrance_hedge_replacement(sint32 x, sint32 y, rct_map_element *mapElement);
void maze_entrance_hedge_removal(sint32 x, sint32 y, rct_map_element *mapElement);