mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-19 13:03:11 +01:00
use S6Importer for network load game
This commit is contained in:
78
src/game.c
78
src/game.c
@@ -766,84 +766,6 @@ void game_fix_save_vars() {
|
||||
}
|
||||
}
|
||||
|
||||
// Load game state for multiplayer
|
||||
int game_load_network(SDL_RWops* rw)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
rct_s6_header *s6Header = (rct_s6_header*)0x009E34E4;
|
||||
rct_s6_info *s6Info = (rct_s6_info*)0x0141F570;
|
||||
|
||||
// Read first chunk
|
||||
sawyercoding_read_chunk(rw, (uint8*)s6Header);
|
||||
if (s6Header->type == S6_TYPE_SAVEDGAME) {
|
||||
// Read packed objects
|
||||
if (s6Header->num_packed_objects > 0) {
|
||||
j = 0;
|
||||
for (i = 0; i < s6Header->num_packed_objects; i++)
|
||||
j += object_load_packed(rw);
|
||||
if (j > 0)
|
||||
object_list_load();
|
||||
}
|
||||
}
|
||||
|
||||
uint8 load_success = object_read_and_load_entries(rw);
|
||||
|
||||
// Read flags (16 bytes)
|
||||
sawyercoding_read_chunk(rw, (uint8*)RCT2_ADDRESS_CURRENT_MONTH_YEAR);
|
||||
|
||||
// Read map elements
|
||||
memset((void*)RCT2_ADDRESS_MAP_ELEMENTS, 0, MAX_MAP_ELEMENTS * sizeof(rct_map_element));
|
||||
sawyercoding_read_chunk(rw, (uint8*)RCT2_ADDRESS_MAP_ELEMENTS);
|
||||
|
||||
// Read game data, including sprites
|
||||
sawyercoding_read_chunk(rw, (uint8*)0x010E63B8);
|
||||
|
||||
// Read checksum
|
||||
uint32 checksum;
|
||||
SDL_RWread(rw, &checksum, sizeof(uint32), 1);
|
||||
|
||||
// Read other data not in normal save files
|
||||
gGamePaused = SDL_ReadLE32(rw);
|
||||
_guestGenerationProbability = SDL_ReadLE32(rw);
|
||||
_suggestedGuestMaximum = SDL_ReadLE32(rw);
|
||||
gCheatsSandboxMode = SDL_ReadU8(rw);
|
||||
gCheatsDisableClearanceChecks = SDL_ReadU8(rw);
|
||||
gCheatsDisableSupportLimits = SDL_ReadU8(rw);
|
||||
gCheatsDisableTrainLengthLimit = SDL_ReadU8(rw);
|
||||
gCheatsShowAllOperatingModes = SDL_ReadU8(rw);
|
||||
gCheatsShowVehiclesFromOtherTrackTypes = SDL_ReadU8(rw);
|
||||
gCheatsFastLiftHill = SDL_ReadU8(rw);
|
||||
gCheatsDisableBrakesFailure = SDL_ReadU8(rw);
|
||||
gCheatsDisableAllBreakdowns = SDL_ReadU8(rw);
|
||||
gCheatsUnlockAllPrices = SDL_ReadU8(rw);
|
||||
gCheatsBuildInPauseMode = SDL_ReadU8(rw);
|
||||
gCheatsIgnoreRideIntensity = SDL_ReadU8(rw);
|
||||
gCheatsDisableVandalism = SDL_ReadU8(rw);
|
||||
gCheatsDisableLittering = SDL_ReadU8(rw);
|
||||
gCheatsNeverendingMarketing = SDL_ReadU8(rw);
|
||||
gCheatsFreezeClimate = SDL_ReadU8(rw);
|
||||
|
||||
if (!load_success){
|
||||
set_load_objects_fail_reason();
|
||||
if (gInputFlags & INPUT_FLAG_5){
|
||||
//call 0x0040705E Sets cursor position and something else. Calls maybe wind func 8 probably pointless
|
||||
gInputFlags &= ~INPUT_FLAG_5;
|
||||
}
|
||||
|
||||
return 0;//This never gets called
|
||||
}
|
||||
|
||||
// The rest is the same as in scenario load and play
|
||||
reset_loaded_objects();
|
||||
map_update_tile_pointers();
|
||||
reset_0x69EBE4();
|
||||
openrct2_reset_object_tween_locations();
|
||||
game_convert_strings_to_utf8();
|
||||
gLastAutoSaveTick = SDL_GetTicks();
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x00675E1B
|
||||
|
||||
@@ -48,6 +48,7 @@ public:
|
||||
|
||||
S6Importer::S6Importer()
|
||||
{
|
||||
FixIssues = false;
|
||||
memset(&_s6, 0, sizeof(_s6));
|
||||
}
|
||||
|
||||
@@ -388,7 +389,10 @@ void S6Importer::Import()
|
||||
map_update_tile_pointers();
|
||||
reset_0x69EBE4();
|
||||
game_convert_strings_to_utf8();
|
||||
game_fix_save_vars(); // OpenRCT2 fix broken save games
|
||||
if (FixIssues)
|
||||
{
|
||||
game_fix_save_vars();
|
||||
}
|
||||
}
|
||||
|
||||
extern "C"
|
||||
@@ -412,6 +416,7 @@ extern "C"
|
||||
auto s6Importer = new S6Importer();
|
||||
try
|
||||
{
|
||||
s6Importer->FixIssues = true;
|
||||
s6Importer->LoadSavedGame(rw);
|
||||
s6Importer->Import();
|
||||
|
||||
@@ -444,6 +449,7 @@ extern "C"
|
||||
auto s6Importer = new S6Importer();
|
||||
try
|
||||
{
|
||||
s6Importer->FixIssues = true;
|
||||
s6Importer->LoadScenario(path);
|
||||
s6Importer->Import();
|
||||
|
||||
@@ -470,4 +476,59 @@ extern "C"
|
||||
gLastAutoSaveTick = SDL_GetTicks();
|
||||
return result;
|
||||
}
|
||||
|
||||
int game_load_network(SDL_RWops* rw)
|
||||
{
|
||||
bool result = false;
|
||||
auto s6Importer = new S6Importer();
|
||||
try
|
||||
{
|
||||
s6Importer->LoadSavedGame(rw);
|
||||
s6Importer->Import();
|
||||
|
||||
openrct2_reset_object_tween_locations();
|
||||
result = true;
|
||||
}
|
||||
catch (ObjectLoadException)
|
||||
{
|
||||
set_load_objects_fail_reason();
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
delete s6Importer;
|
||||
|
||||
if (!result)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Read checksum
|
||||
uint32 checksum;
|
||||
SDL_RWread(rw, &checksum, sizeof(uint32), 1);
|
||||
|
||||
// Read other data not in normal save files
|
||||
gGamePaused = SDL_ReadLE32(rw);
|
||||
_guestGenerationProbability = SDL_ReadLE32(rw);
|
||||
_suggestedGuestMaximum = SDL_ReadLE32(rw);
|
||||
gCheatsSandboxMode = SDL_ReadU8(rw) != 0;
|
||||
gCheatsDisableClearanceChecks = SDL_ReadU8(rw) != 0;
|
||||
gCheatsDisableSupportLimits = SDL_ReadU8(rw) != 0;
|
||||
gCheatsDisableTrainLengthLimit = SDL_ReadU8(rw) != 0;
|
||||
gCheatsShowAllOperatingModes = SDL_ReadU8(rw) != 0;
|
||||
gCheatsShowVehiclesFromOtherTrackTypes = SDL_ReadU8(rw) != 0;
|
||||
gCheatsFastLiftHill = SDL_ReadU8(rw) != 0;
|
||||
gCheatsDisableBrakesFailure = SDL_ReadU8(rw) != 0;
|
||||
gCheatsDisableAllBreakdowns = SDL_ReadU8(rw) != 0;
|
||||
gCheatsUnlockAllPrices = SDL_ReadU8(rw) != 0;
|
||||
gCheatsBuildInPauseMode = SDL_ReadU8(rw) != 0;
|
||||
gCheatsIgnoreRideIntensity = SDL_ReadU8(rw) != 0;
|
||||
gCheatsDisableVandalism = SDL_ReadU8(rw) != 0;
|
||||
gCheatsDisableLittering = SDL_ReadU8(rw) != 0;
|
||||
gCheatsNeverendingMarketing = SDL_ReadU8(rw) != 0;
|
||||
gCheatsFreezeClimate = SDL_ReadU8(rw) != 0;
|
||||
|
||||
gLastAutoSaveTick = SDL_GetTicks();
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,8 @@ extern "C"
|
||||
class S6Importer
|
||||
{
|
||||
public:
|
||||
bool FixIssues;
|
||||
|
||||
S6Importer();
|
||||
|
||||
void LoadSavedGame(const utf8 * path);
|
||||
|
||||
Reference in New Issue
Block a user