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:
219
src/editor.c
219
src/editor.c
@@ -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
2554
src/rct1.c
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user