mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-23 14:54:30 +01:00
Merge pull request #3782 from janisozaur/desyncs
synchronise reset_0x69EBE4 over network
This commit is contained in:
@@ -48,6 +48,7 @@ Includes all git commit authors. Aliases are GitHub user names.
|
||||
* Aaron van Geffen (AaronVanGeffen) - scenario select screen, font detection, misc.
|
||||
* Michał Janiszewski (janisozaur) - Linux port, crash handling, security, misc.
|
||||
* Kelson Blakewood (spacek531) - title sequence for 0.0.4
|
||||
* Hugo Wallenburg (Goddesen) - Misc.
|
||||
|
||||
## Bug fixes
|
||||
* (halfbro)
|
||||
|
||||
@@ -4179,6 +4179,8 @@ STR_5867 :{WINDOW_COLOUR_2}Provider Name: {BLACK}{STRING}
|
||||
STR_5868 :{WINDOW_COLOUR_2}Provider E-mail: {BLACK}{STRING}
|
||||
STR_5869 :{WINDOW_COLOUR_2}Provider Website: {BLACK}{STRING}
|
||||
STR_5870 :{SMALLFONT}{BLACK}Show server information
|
||||
STR_5871 :Plants don't age.
|
||||
STR_5872 :{SMALLFONT}{BLACK}Disable plant aging such that they don't wilt.
|
||||
|
||||
#############
|
||||
# Scenarios #
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
- Feature: Allow up to 255 cars per train.
|
||||
- Feature: Importing SV4 and SC4 files with rides.
|
||||
- Feature: Added Norwegian translation
|
||||
- Feature: Cheat to disable plant aging.
|
||||
- Removed: BMP screenshots.
|
||||
- Technical: [#3699] Assymmetric-key-based authorisation and assignment storage
|
||||
- Technical: Mulitplayer groups are now stored in JSON format
|
||||
|
||||
@@ -41,6 +41,7 @@ bool gCheatsDisableLittering = false;
|
||||
bool gCheatsNeverendingMarketing = false;
|
||||
bool gCheatsFreezeClimate = false;
|
||||
bool gCheatsDisableTrainLengthLimit = false;
|
||||
bool gCheatsDisablePlantAging = false;
|
||||
|
||||
int park_rating_spinner_value;
|
||||
|
||||
@@ -398,6 +399,7 @@ void game_command_cheat(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* e
|
||||
case CHEAT_WATERPLANTS: cheat_water_plants(); break;
|
||||
case CHEAT_FIXVANDALISM: cheat_fix_vandalism(); break;
|
||||
case CHEAT_REMOVELITTER: cheat_remove_litter(); break;
|
||||
case CHEAT_DISABLEPLANTAGING: gCheatsDisablePlantAging = !gCheatsDisablePlantAging; break;
|
||||
case CHEAT_SETSTAFFSPEED: cheat_set_staff_speed(*edx); break;
|
||||
case CHEAT_RENEWRIDES: cheat_renew_rides(); break;
|
||||
case CHEAT_MAKEDESTRUCTIBLE: cheat_make_destructible(); break;
|
||||
@@ -437,4 +439,5 @@ void cheats_reset()
|
||||
gCheatsDisableLittering = false;
|
||||
gCheatsNeverendingMarketing = false;
|
||||
gCheatsFreezeClimate = false;
|
||||
gCheatsDisablePlantAging = false;
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ extern bool gCheatsDisableLittering;
|
||||
extern bool gCheatsNeverendingMarketing;
|
||||
extern bool gCheatsFreezeClimate;
|
||||
extern bool gCheatsDisableTrainLengthLimit;
|
||||
extern bool gCheatsDisablePlantAging;
|
||||
|
||||
enum {
|
||||
CHEAT_SANDBOXMODE,
|
||||
@@ -60,6 +61,7 @@ enum {
|
||||
CHEAT_GIVEALLGUESTS,
|
||||
CHEAT_SETGRASSLENGTH,
|
||||
CHEAT_WATERPLANTS,
|
||||
CHEAT_DISABLEPLANTAGING,
|
||||
CHEAT_FIXVANDALISM,
|
||||
CHEAT_REMOVELITTER,
|
||||
CHEAT_SETSTAFFSPEED,
|
||||
|
||||
@@ -1078,7 +1078,7 @@ void game_load_or_quit_no_save_prompt()
|
||||
}
|
||||
}
|
||||
|
||||
GAME_COMMAND_POINTER* new_game_command_table[67] = {
|
||||
GAME_COMMAND_POINTER* new_game_command_table[68] = {
|
||||
game_command_set_ride_appearance,
|
||||
game_command_set_land_height,
|
||||
game_pause_toggle,
|
||||
@@ -1145,5 +1145,6 @@ GAME_COMMAND_POINTER* new_game_command_table[67] = {
|
||||
game_command_set_player_group,
|
||||
game_command_modify_groups,
|
||||
game_command_kick_player,
|
||||
game_command_cheat
|
||||
game_command_cheat,
|
||||
game_command_reset_sprites,
|
||||
};
|
||||
|
||||
@@ -88,7 +88,8 @@ enum GAME_COMMAND {
|
||||
GAME_COMMAND_SET_PLAYER_GROUP,
|
||||
GAME_COMMAND_MODIFY_GROUPS,
|
||||
GAME_COMMAND_KICK_PLAYER,
|
||||
GAME_COMMAND_CHEAT
|
||||
GAME_COMMAND_CHEAT,
|
||||
GAME_COMMAND_RESET_SPRITES,
|
||||
};
|
||||
|
||||
enum {
|
||||
@@ -128,7 +129,7 @@ extern rct_string_id gGameCommandErrorText;
|
||||
extern uint8 gErrorType;
|
||||
extern uint16 gErrorStringId;
|
||||
|
||||
extern GAME_COMMAND_POINTER* new_game_command_table[67];
|
||||
extern GAME_COMMAND_POINTER* new_game_command_table[68];
|
||||
|
||||
#define gCurrentTicks RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32)
|
||||
|
||||
|
||||
@@ -2644,6 +2644,9 @@ enum {
|
||||
STR_PROVIDER_WEBSITE = 5869,
|
||||
STR_SHOW_SERVER_INFO_TIP = 5870,
|
||||
|
||||
STR_CHEAT_DISABLE_PLANT_AGING = 5871,
|
||||
STR_CHEAT_DISABLE_PLANT_AGING_TIP = 5872,
|
||||
|
||||
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
|
||||
STR_COUNT = 32768
|
||||
};
|
||||
|
||||
@@ -1477,6 +1477,9 @@ void Network::Server_Client_Joined(const char* name, const std::string &keyhash,
|
||||
format_string(text, STR_MULTIPLAYER_PLAYER_HAS_JOINED_THE_GAME, &player_name);
|
||||
chat_history_add(text);
|
||||
Server_Send_MAP(&connection);
|
||||
// This is needed to synchronise calls to reset sprite order across clients,
|
||||
// otherwise connected clients will fall out of sync in simulation.
|
||||
game_do_command(0, GAME_COMMAND_FLAG_APPLY, 0, 0, GAME_COMMAND_RESET_SPRITES, 0, 0);
|
||||
gNetwork.Server_Send_EVENT_PLAYER_JOINED(player_name);
|
||||
Server_Send_GROUPLIST(connection);
|
||||
Server_Send_PLAYERLIST();
|
||||
|
||||
@@ -54,7 +54,7 @@ extern "C" {
|
||||
// This define specifies which version of network stream current build uses.
|
||||
// It is used for making sure only compatible builds get connected, even within
|
||||
// single OpenRCT2 version.
|
||||
#define NETWORK_STREAM_VERSION "9"
|
||||
#define NETWORK_STREAM_VERSION "10"
|
||||
#define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -480,7 +480,7 @@ extern "C"
|
||||
}
|
||||
|
||||
map_reorganise_elements();
|
||||
reset_0x69EBE4();
|
||||
game_do_command(0, GAME_COMMAND_FLAG_APPLY, 0, 0, GAME_COMMAND_RESET_SPRITES, 0, 0);
|
||||
sprite_clear_all_unused();
|
||||
|
||||
viewport_set_saved_view();
|
||||
@@ -562,6 +562,7 @@ extern "C"
|
||||
SDL_WriteU8(rw, gCheatsDisableLittering);
|
||||
SDL_WriteU8(rw, gCheatsNeverendingMarketing);
|
||||
SDL_WriteU8(rw, gCheatsFreezeClimate);
|
||||
SDL_WriteU8(rw, gCheatsDisablePlantAging);
|
||||
|
||||
gfx_invalidate_screen();
|
||||
return 1;
|
||||
|
||||
@@ -378,7 +378,7 @@ void S6Importer::Import()
|
||||
}
|
||||
reset_loaded_objects();
|
||||
map_update_tile_pointers();
|
||||
reset_0x69EBE4();
|
||||
game_do_command(0, GAME_COMMAND_FLAG_APPLY, 0, 0, GAME_COMMAND_RESET_SPRITES, 0, 0);
|
||||
game_convert_strings_to_utf8();
|
||||
if (FixIssues)
|
||||
{
|
||||
@@ -518,6 +518,7 @@ extern "C"
|
||||
gCheatsDisableLittering = SDL_ReadU8(rw) != 0;
|
||||
gCheatsNeverendingMarketing = SDL_ReadU8(rw) != 0;
|
||||
gCheatsFreezeClimate = SDL_ReadU8(rw) != 0;
|
||||
gCheatsDisablePlantAging = SDL_ReadU8(rw) != 0;
|
||||
|
||||
gLastAutoSaveTick = SDL_GetTicks();
|
||||
return 1;
|
||||
|
||||
@@ -105,6 +105,7 @@ enum WINDOW_CHEATS_WIDGET_IDX {
|
||||
WIDX_WATER_PLANTS,
|
||||
WIDX_FIX_VANDALISM,
|
||||
WIDX_REMOVE_LITTER,
|
||||
WIDX_DISABLE_PLANT_AGING,
|
||||
WIDX_FAST_STAFF,
|
||||
WIDX_NORMAL_STAFF,
|
||||
WIDX_RENEW_RIDES = 8,
|
||||
@@ -220,14 +221,15 @@ static rct_widget window_cheats_misc_widgets[] = {
|
||||
{ WWT_CLOSEBOX, 1, XPL(0), WPL(0), YPL(8), HPL(8), STR_CHEAT_FREEZE_CLIMATE, STR_CHEAT_FREEZE_CLIMATE_TIP }, // Freeze climate
|
||||
{ WWT_DROPDOWN, 1, XPL(1), WPL(1), YPL(9) + 2, YPL(9) + 13, STR_NONE, STR_FORCE_WEATHER_TOOLTIP }, // Force weather
|
||||
{ WWT_DROPDOWN_BUTTON, 1, WPL(1) - 11, WPL(1) - 1, YPL(9) + 3, YPL(9) + 12, STR_DROPDOWN_GLYPH, STR_FORCE_WEATHER_TOOLTIP }, // Force weather
|
||||
{ WWT_GROUPBOX, 1, XPL(0) - GROUP_SPACE, WPL(1) + GROUP_SPACE, YPL(11), HPL(15.5), STR_CHEAT_STAFF_GROUP, STR_NONE }, // Staff group
|
||||
{ WWT_GROUPBOX, 1, XPL(0) - GROUP_SPACE, WPL(1) + GROUP_SPACE, YPL(11), HPL(16.5), STR_CHEAT_STAFF_GROUP, STR_NONE }, // Staff group
|
||||
{ WWT_CLOSEBOX, 1, XPL(0), WPL(0), YPL(12), HPL(12), STR_CHEAT_CLEAR_GRASS, STR_NONE}, // Clear grass
|
||||
{ WWT_CLOSEBOX, 1, XPL(1), WPL(1), YPL(12), HPL(12), STR_CHEAT_MOWED_GRASS, STR_NONE}, // Mowed grass
|
||||
{ WWT_CLOSEBOX, 1, XPL(0), WPL(0), YPL(13), HPL(13), STR_CHEAT_WATER_PLANTS, STR_NONE}, // Water plants
|
||||
{ WWT_CLOSEBOX, 1, XPL(1), WPL(1), YPL(13), HPL(13), STR_CHEAT_FIX_VANDALISM, STR_NONE}, // Fix vandalism
|
||||
{ WWT_CLOSEBOX, 1, XPL(0), WPL(0), YPL(14), HPL(14), STR_CHEAT_REMOVE_LITTER, STR_NONE}, // Remove litter
|
||||
{ WWT_CLOSEBOX, 1, MAX_BTN_LEFT, MAX_BTN_RIGHT, YPL(15), HPL(15), STR_FAST, STR_NONE }, // Fast staff
|
||||
{ WWT_CLOSEBOX, 1, MIN_BTN_LEFT, MIN_BTN_RIGHT, YPL(15), HPL(15), STR_NORMAL, STR_NONE }, // Normal staff
|
||||
{ WWT_CHECKBOX, 1, XPL(0), WPL(0), YPL(15), HPL(15), STR_CHEAT_DISABLE_PLANT_AGING, STR_CHEAT_DISABLE_PLANT_AGING_TIP}, // Disable plant aging
|
||||
{ WWT_CLOSEBOX, 1, MAX_BTN_LEFT, MAX_BTN_RIGHT, YPL(16), HPL(16), STR_FAST, STR_NONE }, // Fast staff
|
||||
{ WWT_CLOSEBOX, 1, MIN_BTN_LEFT, MIN_BTN_RIGHT, YPL(16), HPL(16), STR_NORMAL, STR_NONE }, // Normal staff
|
||||
|
||||
|
||||
{ WIDGETS_END },
|
||||
@@ -411,7 +413,7 @@ static uint64 window_cheats_page_enabled_widgets[] = {
|
||||
(1ULL << WIDX_DISABLE_VANDALISM) | (1ULL << WIDX_DISABLE_LITTERING),
|
||||
(1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2) | (1ULL << WIDX_TAB_3) | (1ULL << WIDX_TAB_4) | (1ULL << WIDX_FREEZE_CLIMATE) |
|
||||
(1ULL << WIDX_OPEN_CLOSE_PARK) | (1ULL << WIDX_WEATHER) | (1ULL << WIDX_WEATHER_DROPDOWN_BUTTON) | (1ULL << WIDX_CLEAR_GRASS) | (1ULL << WIDX_MOWED_GRASS) |
|
||||
(1ULL << WIDX_WATER_PLANTS) | (1ULL << WIDX_FIX_VANDALISM) | (1ULL << WIDX_REMOVE_LITTER) | (1ULL << WIDX_WIN_SCENARIO) | (1ULL << WIDX_HAVE_FUN) |
|
||||
(1ULL << WIDX_WATER_PLANTS) | (1ULL << WIDX_DISABLE_PLANT_AGING) | (1ULL << WIDX_FIX_VANDALISM) | (1ULL << WIDX_REMOVE_LITTER) | (1ULL << WIDX_WIN_SCENARIO) | (1ULL << WIDX_HAVE_FUN) |
|
||||
(1ULL << WIDX_NEVERENDING_MARKETING) | (1ULL << WIDX_UNLOCK_ALL_PRICES) | (1ULL << WIDX_SANDBOX_MODE) | (1ULL << WIDX_FAST_STAFF) | (1ULL << WIDX_NORMAL_STAFF) |
|
||||
(1ULL << WIDX_PARK_PARAMETERS) | (1ULL << WIDX_FORCE_PARK_RATING) | (1ULL << WIDX_INCREASE_PARK_RATING) | (1ULL << WIDX_DECREASE_PARK_RATING),
|
||||
(1ULL << WIDX_CLOSE) | (1ULL << WIDX_TAB_1) | (1ULL << WIDX_TAB_2) | (1ULL << WIDX_TAB_3) | (1ULL << WIDX_TAB_4) | (1ULL << WIDX_RENEW_RIDES) |
|
||||
@@ -631,6 +633,9 @@ static void window_cheats_misc_mouseup(rct_window *w, int widgetIndex)
|
||||
case WIDX_REMOVE_LITTER:
|
||||
game_do_command(0, GAME_COMMAND_FLAG_APPLY, CHEAT_REMOVELITTER, 0, GAME_COMMAND_CHEAT, 0, 0);
|
||||
break;
|
||||
case WIDX_DISABLE_PLANT_AGING:
|
||||
game_do_command(0, GAME_COMMAND_FLAG_APPLY, CHEAT_DISABLEPLANTAGING, 0, GAME_COMMAND_CHEAT, 0, 0);
|
||||
break;
|
||||
case WIDX_WIN_SCENARIO:
|
||||
game_do_command(0, GAME_COMMAND_FLAG_APPLY, CHEAT_WINSCENARIO, 0, GAME_COMMAND_CHEAT, 0, 0);
|
||||
break;
|
||||
@@ -796,6 +801,7 @@ static void window_cheats_invalidate(rct_window *w)
|
||||
w->widgets[WIDX_SANDBOX_MODE].image = gCheatsSandboxMode ? STR_CHEAT_SANDBOX_MODE_DISABLE : STR_CHEAT_SANDBOX_MODE;
|
||||
w->widgets[WIDX_FREEZE_CLIMATE].image = gCheatsFreezeClimate ? STR_CHEAT_UNFREEZE_CLIMATE : STR_CHEAT_FREEZE_CLIMATE;
|
||||
widget_set_checkbox_value(w, WIDX_NEVERENDING_MARKETING, gCheatsNeverendingMarketing);
|
||||
widget_set_checkbox_value(w, WIDX_DISABLE_PLANT_AGING, gCheatsDisablePlantAging);
|
||||
break;
|
||||
case WINDOW_CHEATS_PAGE_RIDES:
|
||||
set_format_arg(0, uint16, 255);
|
||||
@@ -834,7 +840,7 @@ static void window_cheats_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
||||
gfx_draw_string_left(dpi, STR_CHEAT_CLEAR_LOAN_TIP, NULL, 0, w->x + XPL(0) + TXTO, w->y + YPL(2) + TXTO);
|
||||
}
|
||||
else if(w->page == WINDOW_CHEATS_PAGE_MISC){
|
||||
gfx_draw_string_left(dpi, STR_CHEAT_STAFF_SPEED, NULL, 0, w->x + XPL(0) + TXTO, w->y + YPL(15) + TXTO);
|
||||
gfx_draw_string_left(dpi, STR_CHEAT_STAFF_SPEED, NULL, 0, w->x + XPL(0) + TXTO, w->y + YPL(16) + TXTO);
|
||||
gfx_draw_string_left(dpi, STR_FORCE_WEATHER, NULL, 0, w->x + XPL(0) + TXTO, w->y + YPL(9) + TXTO);
|
||||
gfx_draw_string_right(dpi, 5182, &park_rating_spinner_value, w->colours[2], w->x + WPL(1) - 10 - TXTO, w->y + YPL(4) + TXTO);
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include "../common.h"
|
||||
#include "../localisation/localisation.h"
|
||||
#include "../scenario.h"
|
||||
#include "../cheats.h"
|
||||
#include "climate.h"
|
||||
#include "fountain.h"
|
||||
#include "map.h"
|
||||
@@ -102,6 +103,11 @@ void scenery_update_age(int x, int y, rct_map_element *mapElement)
|
||||
rct_scenery_entry *sceneryEntry;
|
||||
|
||||
sceneryEntry = get_small_scenery_entry(mapElement->properties.scenery.type);
|
||||
if (gCheatsDisablePlantAging &&
|
||||
(sceneryEntry->small_scenery.flags & SMALL_SCENERY_FLAG_CAN_BE_WATERED)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (
|
||||
!(sceneryEntry->small_scenery.flags & SMALL_SCENERY_FLAG_CAN_BE_WATERED) ||
|
||||
(gClimateCurrentWeather < WEATHER_RAIN) ||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include "../addresses.h"
|
||||
#include "../audio/audio.h"
|
||||
#include "../cheats.h"
|
||||
#include "../game.h"
|
||||
#include "../interface/viewport.h"
|
||||
#include "../localisation/date.h"
|
||||
#include "../localisation/localisation.h"
|
||||
@@ -121,7 +122,7 @@ void reset_sprite_list()
|
||||
|
||||
gSpriteListCount[SPRITE_LIST_NULL] = MAX_SPRITES;
|
||||
|
||||
reset_0x69EBE4();
|
||||
game_do_command(0, GAME_COMMAND_FLAG_APPLY, 0, 0, GAME_COMMAND_RESET_SPRITES, 0, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -154,6 +155,14 @@ void reset_0x69EBE4()
|
||||
}
|
||||
}
|
||||
|
||||
void game_command_reset_sprites(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp)
|
||||
{
|
||||
if (*ebx & GAME_COMMAND_FLAG_APPLY) {
|
||||
reset_0x69EBE4();
|
||||
}
|
||||
*ebx = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears all the unused sprite memory to zero. Probably so that it can be compressed better when saving.
|
||||
* rct2: 0x0069EBA4
|
||||
|
||||
@@ -395,6 +395,7 @@ extern uint16 *gSpriteListCount;
|
||||
|
||||
rct_sprite *create_sprite(uint8 bl);
|
||||
void reset_sprite_list();
|
||||
void game_command_reset_sprites(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp);
|
||||
void reset_0x69EBE4();
|
||||
void sprite_clear_all_unused();
|
||||
void move_sprite_to_list(rct_sprite *sprite, uint8 cl);
|
||||
|
||||
Reference in New Issue
Block a user