mirror of https://github.com/OpenRCT2/OpenRCT2.git
Check for ride validity in game commands
This commit is contained in:
parent
1c063e74b0
commit
ff2cdd4b1d
|
@ -3596,6 +3596,12 @@ void game_command_set_ride_setting(int *eax, int *ebx, int *ecx, int *edx, int *
|
||||||
RCT2_GLOBAL(RCT2_ADDRESS_NEXT_EXPENDITURE_TYPE, uint8) = RCT_EXPENDITURE_TYPE_RIDE_RUNNING_COSTS * 4;
|
RCT2_GLOBAL(RCT2_ADDRESS_NEXT_EXPENDITURE_TYPE, uint8) = RCT_EXPENDITURE_TYPE_RIDE_RUNNING_COSTS * 4;
|
||||||
|
|
||||||
uint8 ride_id = *edx & 0xFF;
|
uint8 ride_id = *edx & 0xFF;
|
||||||
|
if (ride_id >= MAX_RIDES)
|
||||||
|
{
|
||||||
|
log_warning("Invalid game command for ride %u", ride_id);
|
||||||
|
*ebx = MONEY32_UNDEFINED;
|
||||||
|
return;
|
||||||
|
}
|
||||||
rct_ride* ride = GET_RIDE(ride_id);
|
rct_ride* ride = GET_RIDE(ride_id);
|
||||||
if (ride->type == RIDE_TYPE_NULL)
|
if (ride->type == RIDE_TYPE_NULL)
|
||||||
{
|
{
|
||||||
|
@ -4879,6 +4885,12 @@ void game_command_set_ride_status(int *eax, int *ebx, int *ecx, int *edx, int *e
|
||||||
rct_ride *ride;
|
rct_ride *ride;
|
||||||
|
|
||||||
rideIndex = *edx & 0xFF;
|
rideIndex = *edx & 0xFF;
|
||||||
|
if (rideIndex >= MAX_RIDES)
|
||||||
|
{
|
||||||
|
log_warning("Invalid game command for ride %u", rideIndex);
|
||||||
|
*ebx = MONEY32_UNDEFINED;
|
||||||
|
return;
|
||||||
|
}
|
||||||
targetStatus = (*edx >> 8) & 0xFF;
|
targetStatus = (*edx >> 8) & 0xFF;
|
||||||
|
|
||||||
RCT2_GLOBAL(RCT2_ADDRESS_NEXT_EXPENDITURE_TYPE, uint8) = RCT_EXPENDITURE_TYPE_RIDE_RUNNING_COSTS * 4;
|
RCT2_GLOBAL(RCT2_ADDRESS_NEXT_EXPENDITURE_TYPE, uint8) = RCT_EXPENDITURE_TYPE_RIDE_RUNNING_COSTS * 4;
|
||||||
|
@ -4962,6 +4974,12 @@ void game_command_set_ride_name(int *eax, int *ebx, int *ecx, int *edx, int *esi
|
||||||
static char newName[128];
|
static char newName[128];
|
||||||
|
|
||||||
int rideIndex = (*ebx >> 8) & 0xFF;
|
int rideIndex = (*ebx >> 8) & 0xFF;
|
||||||
|
if (rideIndex >= MAX_RIDES)
|
||||||
|
{
|
||||||
|
log_warning("Invalid game command for ride %u", rideIndex);
|
||||||
|
*ebx = MONEY32_UNDEFINED;
|
||||||
|
return;
|
||||||
|
}
|
||||||
int nameChunkIndex = *eax & 0xFFFF;
|
int nameChunkIndex = *eax & 0xFFFF;
|
||||||
|
|
||||||
RCT2_GLOBAL(RCT2_ADDRESS_NEXT_EXPENDITURE_TYPE, uint8) = RCT_EXPENDITURE_TYPE_RIDE_RUNNING_COSTS * 4;
|
RCT2_GLOBAL(RCT2_ADDRESS_NEXT_EXPENDITURE_TYPE, uint8) = RCT_EXPENDITURE_TYPE_RIDE_RUNNING_COSTS * 4;
|
||||||
|
@ -4982,6 +5000,12 @@ void game_command_set_ride_name(int *eax, int *ebx, int *ecx, int *edx, int *esi
|
||||||
}
|
}
|
||||||
|
|
||||||
ride = GET_RIDE(rideIndex);
|
ride = GET_RIDE(rideIndex);
|
||||||
|
if (ride->type == RIDE_TYPE_NULL)
|
||||||
|
{
|
||||||
|
log_warning("Invalid game command for ride %u", rideIndex);
|
||||||
|
*ebx = MONEY32_UNDEFINED;
|
||||||
|
return;
|
||||||
|
}
|
||||||
format_string(oldName, ride->name, &ride->name_arguments);
|
format_string(oldName, ride->name, &ride->name_arguments);
|
||||||
if (strcmp(oldName, newName) == 0) {
|
if (strcmp(oldName, newName) == 0) {
|
||||||
*ebx = 0;
|
*ebx = 0;
|
||||||
|
@ -5633,6 +5657,12 @@ void game_command_callback_ride_remove_track_piece(int eax, int ebx, int ecx, in
|
||||||
void game_command_demolish_ride(int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi, int *ebp)
|
void game_command_demolish_ride(int *eax, int *ebx, int *ecx, int *edx, int *esi, int *edi, int *ebp)
|
||||||
{
|
{
|
||||||
uint8 ride_id = *(uint8*)edx;
|
uint8 ride_id = *(uint8*)edx;
|
||||||
|
if (ride_id >= MAX_RIDES)
|
||||||
|
{
|
||||||
|
log_warning("Invalid game command for ride %u", ride_id);
|
||||||
|
*ebx = MONEY32_UNDEFINED;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
RCT2_GLOBAL(RCT2_ADDRESS_COMMAND_MAP_X, uint16) = 0;
|
RCT2_GLOBAL(RCT2_ADDRESS_COMMAND_MAP_X, uint16) = 0;
|
||||||
RCT2_GLOBAL(RCT2_ADDRESS_COMMAND_MAP_Y, uint16) = 0;
|
RCT2_GLOBAL(RCT2_ADDRESS_COMMAND_MAP_Y, uint16) = 0;
|
||||||
|
@ -5769,6 +5799,12 @@ void game_command_set_ride_appearance(int *eax, int *ebx, int *ecx, int *edx, in
|
||||||
bool apply = (*ebx & GAME_COMMAND_FLAG_APPLY);
|
bool apply = (*ebx & GAME_COMMAND_FLAG_APPLY);
|
||||||
|
|
||||||
uint8 ride_id = *edx;
|
uint8 ride_id = *edx;
|
||||||
|
if (ride_id >= MAX_RIDES)
|
||||||
|
{
|
||||||
|
log_warning("Invalid game command for ride %u", ride_id);
|
||||||
|
*ebx = MONEY32_UNDEFINED;
|
||||||
|
return;
|
||||||
|
}
|
||||||
uint8 type = *ebx >> 8;
|
uint8 type = *ebx >> 8;
|
||||||
uint8 value = *edx >> 8;
|
uint8 value = *edx >> 8;
|
||||||
int index = *edi;
|
int index = *edi;
|
||||||
|
@ -5892,7 +5928,19 @@ void game_command_set_ride_price(int *eax, int *ebx, int *ecx, int *edx, int *es
|
||||||
|
|
||||||
flags = *ebx;
|
flags = *ebx;
|
||||||
ride_number = (*edx & 0xFF);
|
ride_number = (*edx & 0xFF);
|
||||||
|
if (ride_number >= MAX_RIDES)
|
||||||
|
{
|
||||||
|
log_warning("Invalid game command for ride %u", ride_number);
|
||||||
|
*ebx = MONEY32_UNDEFINED;
|
||||||
|
return;
|
||||||
|
}
|
||||||
ride = GET_RIDE(ride_number);
|
ride = GET_RIDE(ride_number);
|
||||||
|
if (ride->type == RIDE_TYPE_NULL)
|
||||||
|
{
|
||||||
|
log_warning("Invalid game command for ride %u", ride_number);
|
||||||
|
*ebx = MONEY32_UNDEFINED;
|
||||||
|
return;
|
||||||
|
}
|
||||||
rideEntry = GET_RIDE_ENTRY(ride->subtype);
|
rideEntry = GET_RIDE_ENTRY(ride->subtype);
|
||||||
price = *edi;
|
price = *edi;
|
||||||
secondary_price = (*edx >> 8);
|
secondary_price = (*edx >> 8);
|
||||||
|
@ -6989,6 +7037,12 @@ void game_command_set_ride_vehicles(int *eax, int *ebx, int *ecx, int *edx, int
|
||||||
|
|
||||||
commandType = (*ebx >> 8) & 0xFF;
|
commandType = (*ebx >> 8) & 0xFF;
|
||||||
rideIndex = *edx & 0xFF;
|
rideIndex = *edx & 0xFF;
|
||||||
|
if (rideIndex >= MAX_RIDES)
|
||||||
|
{
|
||||||
|
log_warning("Invalid game command for ride %u", rideIndex);
|
||||||
|
*ebx = MONEY32_UNDEFINED;
|
||||||
|
return;
|
||||||
|
}
|
||||||
value = (*edx >> 8) & 0xFF;
|
value = (*edx >> 8) & 0xFF;
|
||||||
|
|
||||||
ride = GET_RIDE(rideIndex);
|
ride = GET_RIDE(rideIndex);
|
||||||
|
@ -7190,7 +7244,17 @@ money32 place_ride_entrance_or_exit(sint16 x, sint16 y, sint16 z, uint8 directio
|
||||||
return MONEY32_UNDEFINED;
|
return MONEY32_UNDEFINED;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (rideIndex >= MAX_RIDES)
|
||||||
|
{
|
||||||
|
log_warning("Invalid game command for ride %u", rideIndex);
|
||||||
|
return MONEY32_UNDEFINED;
|
||||||
|
}
|
||||||
rct_ride* ride = GET_RIDE(rideIndex);
|
rct_ride* ride = GET_RIDE(rideIndex);
|
||||||
|
if (ride->type == RIDE_TYPE_NULL)
|
||||||
|
{
|
||||||
|
log_warning("Invalid game command for ride %u", rideIndex);
|
||||||
|
return MONEY32_UNDEFINED;
|
||||||
|
}
|
||||||
if (ride->status != RIDE_STATUS_CLOSED) {
|
if (ride->status != RIDE_STATUS_CLOSED) {
|
||||||
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TEXT, rct_string_id) = STR_MUST_BE_CLOSED_FIRST;
|
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TEXT, rct_string_id) = STR_MUST_BE_CLOSED_FIRST;
|
||||||
return MONEY32_UNDEFINED;
|
return MONEY32_UNDEFINED;
|
||||||
|
@ -7338,6 +7402,11 @@ void game_command_place_ride_entrance_or_exit(int *eax, int *ebx, int *ecx, int
|
||||||
}
|
}
|
||||||
|
|
||||||
money32 remove_ride_entrance_or_exit(sint16 x, sint16 y, uint8 rideIndex, uint8 station_num, uint8 flags){
|
money32 remove_ride_entrance_or_exit(sint16 x, sint16 y, uint8 rideIndex, uint8 station_num, uint8 flags){
|
||||||
|
if (rideIndex >= MAX_RIDES)
|
||||||
|
{
|
||||||
|
log_warning("Invalid game command for ride %u", rideIndex);
|
||||||
|
return MONEY32_UNDEFINED;
|
||||||
|
}
|
||||||
rct_ride* ride = GET_RIDE(rideIndex);
|
rct_ride* ride = GET_RIDE(rideIndex);
|
||||||
if (ride->type == RIDE_TYPE_NULL)
|
if (ride->type == RIDE_TYPE_NULL)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue