1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-24 08:12:53 +01:00

remove old RCT1 import code

This commit is contained in:
Ted John
2016-04-22 19:26:15 +01:00
parent 67da464e08
commit 25958b0d30
8 changed files with 297 additions and 2617 deletions

View File

@@ -51,6 +51,7 @@ static int editor_load_landscape_from_sv4(const char *path);
static int editor_load_landscape_from_sc4(const char *path);
static void editor_finalise_main_view();
static int editor_read_s6(const char *path);
static void editor_clear_map_for_editing();
/**
*
@@ -260,37 +261,29 @@ bool editor_load_landscape(const utf8 *path)
*/
static int editor_load_landscape_from_sv4(const char *path)
{
rct1_s4 *s4;
rct1_load_saved_game(path);
editor_clear_map_for_editing();
s4 = malloc(sizeof(rct1_s4));
if (!rct1_read_sv4(path, s4)) {
free(s4);
return 0;
}
rct1_import_s4(s4);
free(s4);
rct1_fix_landscape();
editor_finalise_main_view();
g_editor_step = EDITOR_STEP_LANDSCAPE_EDITOR;
RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_AGE, uint16) = 0;
RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) = SCREEN_FLAGS_SCENARIO_EDITOR;
viewport_init_all();
window_editor_main_open();
editor_finalise_main_view();
return 1;
}
static int editor_load_landscape_from_sc4(const char *path)
{
rct1_s4 *s4;
rct1_load_scenario(path);
editor_clear_map_for_editing();
s4 = malloc(sizeof(rct1_s4));
if (!rct1_read_sc4(path, s4)) {
free(s4);
return 0;
}
rct1_import_s4(s4);
free(s4);
rct1_fix_landscape();
editor_finalise_main_view();
g_editor_step = EDITOR_STEP_LANDSCAPE_EDITOR;
RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_AGE, uint16) = 0;
RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) = SCREEN_FLAGS_SCENARIO_EDITOR;
viewport_init_all();
window_editor_main_open();
editor_finalise_main_view();
return 1;
}
@@ -388,95 +381,12 @@ static int editor_read_s6(const char *path)
reset_loaded_objects();
map_update_tile_pointers();
map_remove_all_rides();
//
for (i = 0; i < MAX_BANNERS; i++)
if (gBanners[i].type == 255)
gBanners[i].flags &= ~BANNER_FLAG_2;
//
rct_ride *ride;
FOR_ALL_RIDES(i, ride)
user_string_free(ride->name);
ride_init_all();
//
for (i = 0; i < MAX_SPRITES; i++) {
rct_sprite *sprite = &g_sprite_list[i];
user_string_free(sprite->unknown.name_string_idx);
}
reset_sprite_list();
staff_reset_modes();
RCT2_GLOBAL(RCT2_ADDRESS_GUESTS_IN_PARK, uint16) = 0;
RCT2_GLOBAL(RCT2_ADDRESS_GUESTS_HEADING_FOR_PARK, uint16) = 0;
RCT2_GLOBAL(RCT2_ADDRESS_LAST_GUESTS_IN_PARK, uint16) = 0;
RCT2_GLOBAL(RCT2_ADDRESS_GUEST_CHANGE_MODIFIER, uint16) = 0;
if (s6Header->type != S6_TYPE_SCENARIO) {
research_populate_list_random();
research_remove_non_separate_vehicle_types();
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY)
RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) |= PARK_FLAGS_NO_MONEY_SCENARIO;
else
RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) &= ~PARK_FLAGS_NO_MONEY_SCENARIO;
RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) |= PARK_FLAGS_NO_MONEY;
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_FEE, money16) == 0)
RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) |= PARK_FLAGS_PARK_FREE_ENTRY;
else
RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) &= ~PARK_FLAGS_PARK_FREE_ENTRY;
RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) &= ~PARK_FLAGS_18;
RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_CASH, money16) = clamp(
MONEY(10,00),
RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_CASH, money16),
MONEY(100,00)
);
RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, uint32) = min(RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, uint32), 100000);
finance_reset_cash_to_initial();
finance_update_loan_hash();
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) = clamp(
MONEY(0,00),
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32),
MONEY(5000000,00)
);
RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32) = clamp(
MONEY(0,00),
RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32),
MONEY(5000000,00)
);
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_INTEREST_RATE, uint8) = clamp(
5,
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_INTEREST_RATE, uint8),
80
);
}
climate_reset(RCT2_GLOBAL(RCT2_ADDRESS_CLIMATE, uint8));
rct_stex_entry* stex = g_stexEntries[0];
if ((int)stex != 0xFFFFFFFF) {
object_unload_chunk((rct_object_entry*)&object_entry_groups[OBJECT_TYPE_SCENARIO_TEXT].entries[0]);
reset_loaded_objects();
format_string(s6Info->details, STR_NO_DETAILS_YET, NULL);
s6Info->name[0] = 0;
}
game_convert_strings_to_utf8();
RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) = SCREEN_FLAGS_SCENARIO_EDITOR;
viewport_init_all();
news_item_init_queue();
window_editor_main_open();
editor_finalise_main_view();
game_convert_strings_to_utf8();
return 1;
}
@@ -486,6 +396,103 @@ static int editor_read_s6(const char *path)
return 0;
}
static void editor_clear_map_for_editing()
{
rct_s6_header *s6Header = (rct_s6_header*)0x009E34E4;
rct_s6_info *s6Info = (rct_s6_info*)0x0141F570;
map_remove_all_rides();
//
for (int i = 0; i < MAX_BANNERS; i++) {
if (gBanners[i].type == 255) {
gBanners[i].flags &= ~BANNER_FLAG_2;
}
}
//
{
int i;
rct_ride *ride;
FOR_ALL_RIDES(i, ride) {
user_string_free(ride->name);
}
}
ride_init_all();
//
for (int i = 0; i < MAX_SPRITES; i++) {
rct_sprite *sprite = &g_sprite_list[i];
user_string_free(sprite->unknown.name_string_idx);
}
reset_sprite_list();
staff_reset_modes();
RCT2_GLOBAL(RCT2_ADDRESS_GUESTS_IN_PARK, uint16) = 0;
RCT2_GLOBAL(RCT2_ADDRESS_GUESTS_HEADING_FOR_PARK, uint16) = 0;
RCT2_GLOBAL(RCT2_ADDRESS_LAST_GUESTS_IN_PARK, uint16) = 0;
RCT2_GLOBAL(RCT2_ADDRESS_GUEST_CHANGE_MODIFIER, uint16) = 0;
if (s6Header->type != S6_TYPE_SCENARIO) {
research_populate_list_random();
research_remove_non_separate_vehicle_types();
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY)
RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) |= PARK_FLAGS_NO_MONEY_SCENARIO;
else
RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) &= ~PARK_FLAGS_NO_MONEY_SCENARIO;
RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) |= PARK_FLAGS_NO_MONEY;
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_FEE, money16) == 0)
RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) |= PARK_FLAGS_PARK_FREE_ENTRY;
else
RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) &= ~PARK_FLAGS_PARK_FREE_ENTRY;
RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) &= ~PARK_FLAGS_18;
RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_CASH, money16) = clamp(
MONEY(10,00),
RCT2_GLOBAL(RCT2_ADDRESS_GUEST_INITIAL_CASH, money16),
MONEY(100,00)
);
RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, uint32) = min(RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, uint32), 100000);
finance_reset_cash_to_initial();
finance_update_loan_hash();
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) = clamp(
MONEY(0,00),
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32),
MONEY(5000000,00)
);
RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32) = clamp(
MONEY(0,00),
RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32),
MONEY(5000000,00)
);
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_INTEREST_RATE, uint8) = clamp(
5,
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_INTEREST_RATE, uint8),
80
);
}
climate_reset(RCT2_GLOBAL(RCT2_ADDRESS_CLIMATE, uint8));
rct_stex_entry* stex = g_stexEntries[0];
if ((int)stex != 0xFFFFFFFF) {
object_unload_chunk((rct_object_entry*)&object_entry_groups[OBJECT_TYPE_SCENARIO_TEXT].entries[0]);
reset_loaded_objects();
format_string(s6Info->details, STR_NO_DETAILS_YET, NULL);
s6Info->name[0] = 0;
}
news_item_init_queue();
}
/**
*
* rct2: 0x0067009A

2554
src/rct1.c

File diff suppressed because it is too large Load Diff

View File

@@ -717,18 +717,18 @@ enum {
RCT1_SCENARIO_FLAG_19 = 1 << 19,
};
extern const uint8 RCT1ColourConversionTable[32];
extern const uint8 gRideCategories[0x60];
bool rct1_read_sc4(const char *path, rct1_s4 *s4);
bool rct1_read_sv4(const char *path, rct1_s4 *s4);
void rct1_import_s4(rct1_s4 *s4);
void rct1_fix_landscape();
bool vehicleIsHigherInHierarchy(int track_type, char *currentVehicleName, char *comparedVehicleName);
bool rideTypeShouldLoseSeparateFlag(rct_ride_entry *ride);
int vehicle_preference_compare(uint8 rideType, const char * a, const char * b);
bool rideTypeShouldLoseSeparateFlag(rct_ride_entry *rideEntry);
bool rct1_load_saved_game(const char *path);
bool rct1_load_scenario(const char *path);
colour_t rct1_get_colour(colour_t colour);
#endif

View File

@@ -70,6 +70,8 @@ void S4Importer::Import()
ImportScenarioNameDetails();
ImportScenarioObjective();
ImportSavedView();
game_convert_strings_to_utf8();
}
void S4Importer::Initialise()
@@ -1508,51 +1510,68 @@ const char * S4Importer::GetUserString(rct_string_id stringId)
// C -> C++ transfer
/////////////////////////////////////////
extern "C"
bool rct1_load_saved_game(const utf8 * path)
{
bool result;
bool rct1_load_saved_game(const utf8 * path)
{
bool result;
auto s4Importer = new S4Importer();
try
{
s4Importer->LoadSavedGame(path);
s4Importer->Import();
result = true;
auto s4Importer = new S4Importer();
try
{
s4Importer->LoadSavedGame(path);
s4Importer->Import();
result = true;
} catch (Exception ex)
{
result = false;
}
delete s4Importer;
return result;
}
catch (Exception ex)
bool rct1_load_scenario(const utf8 * path)
{
result = false;
bool result;
auto s4Importer = new S4Importer();
try
{
s4Importer->LoadScenario(path);
s4Importer->Import();
result = true;
} catch (Exception ex)
{
result = false;
}
delete s4Importer;
return result;
}
delete s4Importer;
if (result)
colour_t rct1_get_colour(colour_t colour)
{
game_load_init();
return RCT1::GetColour(colour);
}
/**
* This function keeps a list of the preferred vehicle for every generic track
* type, out of the available vehicle types in the current game. It determines
* which picture is shown on the new ride tab and which train type is selected
* by default.
*/
int vehicle_preference_compare(uint8 rideType, const char * a, const char * b)
{
List<const char *> rideEntryOrder = RCT1::GetPreferedRideEntryOrder(rideType);
for (const char * object : rideEntryOrder)
{
if (String::Equals(object, a, true))
{
return -1;
}
if (String::Equals(object, b, true))
{
return 1;
}
}
return 0;
}
return result;
}
extern "C"
bool rct1_load_scenario(const utf8 * path)
{
bool result;
auto s4Importer = new S4Importer();
try
{
s4Importer->LoadScenario(path);
s4Importer->Import();
result = true;
}
catch (Exception ex)
{
result = false;
}
delete s4Importer;
if (result)
{
scenario_begin();
}
return result;
}

View File

@@ -24,4 +24,6 @@ namespace RCT1
const char * GetSceneryGroupObject(uint8 sceneryGroupType);
const List<const char *> GetSceneryObjects(uint8 sceneryType);
const List<const char *> GetPreferedRideEntryOrder(uint8 rideType);
}

View File

@@ -368,9 +368,13 @@ bool rct2_open_file(const char *path)
// TODO track design install
return true;
} else if (_stricmp(extension, "sv4") == 0) {
rct1_load_saved_game(path);
if (rct1_load_saved_game(path)) {
game_load_init();
}
} else if (_stricmp(extension, "sc4") == 0) {
rct1_load_scenario(path);
if (rct1_load_scenario(path)) {
scenario_begin();
}
}
return false;

View File

@@ -616,12 +616,12 @@ rct_track_td6* load_track_design(const char *path)
// Unsure why it is 67
edi = (uint8*)&track_design->vehicle_colours;
for (i = 0; i < 67; i++, edi++)
*edi = RCT1ColourConversionTable[*edi];
*edi = rct1_get_colour(*edi);
// Edit the colours to use the new versions
edi = (uint8*)&track_design->track_spine_colour;
for (i = 0; i < 12; i++, edi++)
*edi = RCT1ColourConversionTable[*edi];
*edi = rct1_get_colour(*edi);
// Highest drop height is 1bit = 3/4 a meter in td6
// Highest drop height is 1bit = 1/3 a meter in td4

View File

@@ -334,17 +334,15 @@ static void window_new_ride_populate_list()
continue;
// Skip if the vehicle isn't the preferred vehicle for this generic track type
if(gConfigInterface.select_by_track_type && (!(rideEntry->flags & RIDE_ENTRY_FLAG_SEPARATE_RIDE) || rideTypeShouldLoseSeparateFlag(rideEntry))) {
if(strcmp(preferredVehicleName," \0")==0) {
strcpy(preferredVehicleName,rideEntryName);
preferredVehicleName[8]=0;
}
else {
if(vehicleIsHigherInHierarchy(rideType,preferredVehicleName,rideEntryName)) {
strcpy(preferredVehicleName,rideEntryName);
preferredVehicleName[8]=0;
}
else {
if (gConfigInterface.select_by_track_type && (!(rideEntry->flags & RIDE_ENTRY_FLAG_SEPARATE_RIDE) || rideTypeShouldLoseSeparateFlag(rideEntry))) {
if (strcmp(preferredVehicleName, " \0") == 0) {
strcpy(preferredVehicleName, rideEntryName);
preferredVehicleName[8] = 0;
} else {
if (vehicle_preference_compare(rideType, preferredVehicleName, rideEntryName) == 1) {
strcpy(preferredVehicleName, rideEntryName);
preferredVehicleName[8] = 0;
} else {
continue;
}
}