Mno. Ano. Jistě...
void einstellungen_t::rdwr(loadsave_t *file)
{
xml_tag_t e( file, "einstellungen_t" );
if(file->get_version() < 86000) {
uint32 dummy;
file->rdwr_long(groesse_x, " ");
groesse_y = groesse_x;
file->rdwr_long(nummer, "\n");
// to be compatible with previous savegames
dummy = 0;
file->rdwr_long(dummy, " "); //dummy!
land_industry_chains = 6;
tourist_attractions = 12;
// now towns
mittlere_einwohnerzahl = 1600;
dummy = anzahl_staedte;
file->rdwr_long(dummy, "\n");
dummy &= 127;
if(dummy>63) {
dbg->warning("einstellungen_t::rdwr()","This game was saved with too many cities! (%i of maximum 63). Simutrans may crash!",dummy);
}
anzahl_staedte = dummy;
// rest
file->rdwr_long(dummy, " "); // scroll ingnored
file->rdwr_long(verkehr_level, "\n");
file->rdwr_long(show_pax, "\n");
dummy = grundw****er;
file->rdwr_long(dummy, "\n");
grundw****er = (sint16)(dummy/16)*Z_TILE_STEP;
file->rdwr_double(max_mountain_height);
file->rdwr_double(map_roughness);
station_coverage_size = 3;
beginner_mode = false;
rotation = 0;
}
else {
// newer versions
file->rdwr_long(groesse_x, " ");
file->rdwr_long(nummer, "\n");
// industries
file->rdwr_long(land_industry_chains, " ");
if(file->get_version()<99018) {
uint32 dummy; // was city chains
file->rdwr_long(dummy, " ");
}
else {
file->rdwr_long( electric_promille, "" );
}
file->rdwr_long(tourist_attractions, "\n");
// now towns
file->rdwr_long(mittlere_einwohnerzahl, " ");
file->rdwr_long(anzahl_staedte, " ");
// rest
if(file->get_version() < 101000) {
uint32 dummy; // was scroll dir
file->rdwr_long(dummy, " ");
}
file->rdwr_long(verkehr_level, "\n");
file->rdwr_long(show_pax, "\n");
sint32 dummy = grundw****er/Z_TILE_STEP;
file->rdwr_long(dummy, "\n");
if(file->get_version() < 99005) {
grundw****er = (sint16)(dummy/16)*Z_TILE_STEP;
}
else {
grundw****er = (sint16)dummy*Z_TILE_STEP;
}
file->rdwr_double(max_mountain_height);
file->rdwr_double(map_roughness);
if(file->get_version() >= 86003) {
dummy = station_coverage_size;
file->rdwr_long(dummy, " ");
station_coverage_size = (uint16)dummy;
}
if(file->get_version() >= 86006) {
// handle also size on y direction
file->rdwr_long(groesse_y, " ");
}
else {
groesse_y = groesse_x;
}
if(file->get_version() >= 86011) {
// some more settings
file->rdwr_byte(allow_player_change, " ");
file->rdwr_byte(use_timeline, " " );
file->rdwr_short(starting_year, "\n");
}
else {
allow_player_change = 1;
use_timeline = 1;
starting_year = 1930;
}
if(file->get_version()>=88005) {
file->rdwr_short(bits_per_month,"b");
}
else {
bits_per_month = 18;
}
if(file->get_version()>=89003) {
file->rdwr_bool(beginner_mode,"\n");
}
else {
beginner_mode = false;
}
if(file->get_version()>=89004) {
file->rdwr_bool(just_in_time,"\n");
}
// rotation of the map with respect to the original value
if(file->get_version()>=99015) {
file->rdwr_byte(rotation,"\n");
}
else {
rotation = 0;
}
// clear the name when loading ...
if(file->is_loading()) {
filename = "";
}
// climate corders
if(file->get_version()>=91000) {
for( int i=0; i<8; i++ ) {
file->rdwr_short(climate_borders[i], "c");
}
file->rdwr_short(winter_snowline, "c");
}
// since vehicle will need realignment afterwards!
if(file->get_version()<=99018) {
vehikel_basis_t::set_diagonal_multiplier( pak_diagonal_multiplier, 1024 );
}
else {
uint16 old_multiplier = pak_diagonal_multiplier;
file->rdwr_short( old_multiplier, "m" );
vehikel_basis_t::set_diagonal_multiplier( pak_diagonal_multiplier, old_multiplier );
// since vehicle will need realignment afterwards!
}
if(file->get_version()>=101000) {
// game mechanics
file->rdwr_short( origin_x, "ox" );
file->rdwr_short( origin_y, "oy" );
file->rdwr_long( p****enger_factor, "" );
file->rdwr_long( electric_promille, "" );
file->rdwr_short( factory_spacing, "" );
file->rdwr_bool( crossconnect_factories, "" );
file->rdwr_short( crossconnect_factor, "" );
file->rdwr_bool( fussgaenger, "" );
file->rdwr_long( stadtauto_duration , "" );
file->rdwr_bool( numbered_stations, "" );
file->rdwr_str( city_road_type, 256 );
file->rdwr_long( max_route_steps , "" );
file->rdwr_long( max_transfers , "" );
file->rdwr_long( max_hops , "" );
file->rdwr_long( beginner_price_factor , "" );
// name of stops
file->rdwr_str( language_code_names, 4 );
// restore AI state
for( int i=0; i<15; i++ ) {
file->rdwr_bool( automaten[i], "" );
file->rdwr_byte( spieler_type[i], "" );
file->rdwr_str( p****word[i], 16 );
}
// cost section ...
file->rdwr_bool( freeplay, "" );
file->rdwr_longlong( starting_money, "" );
file->rdwr_long( maint_building, "" );
file->rdwr_longlong( cst_multiply_dock, "" );
file->rdwr_longlong( cst_multiply_station, "" );
file->rdwr_longlong( cst_multiply_roadstop, "" );
file->rdwr_longlong( cst_multiply_airterminal, "" );
file->rdwr_longlong( cst_multiply_post, "" );
file->rdwr_longlong( cst_multiply_headquarter, "" );
file->rdwr_longlong( cst_depot_rail, "" );
file->rdwr_longlong( cst_depot_road, "" );
file->rdwr_longlong( cst_depot_ship, "" );
file->rdwr_longlong( cst_depot_air, "" );
file->rdwr_longlong( cst_signal, "" );
file->rdwr_longlong( cst_tunnel, "" );
file->rdwr_longlong( cst_third_rail, "" );
// alter landscape
file->rdwr_longlong( cst_buy_land, "" );
file->rdwr_longlong( cst_alter_land, "" );
file->rdwr_longlong( cst_set_slope, "" );
file->rdwr_longlong( cst_found_city, "" );
file->rdwr_longlong( cst_multiply_found_industry, "" );
file->rdwr_longlong( cst_remove_tree, "" );
file->rdwr_longlong( cst_multiply_remove_haus, "" );
file->rdwr_longlong( cst_multiply_remove_field, "" );
// cost for transformers
file->rdwr_longlong( cst_transformer, "" );
file->rdwr_longlong( cst_maintain_transformer, "" );
// wayfinder
file->rdwr_long( way_count_straight, "" );
file->rdwr_long( way_count_curve, "" );
file->rdwr_long( way_count_double_curve, "" );
file->rdwr_long( way_count_90_curve, "" );
file->rdwr_long( way_count_slope, "" );
file->rdwr_long( way_count_tunnel, "" );
file->rdwr_long( way_max_bridge_len, "" );
file->rdwr_long( way_count_leaving_road, "" );
}
else {
// name of stops
set_name_language_iso( umgebung_t::language_iso );
// default AIs active
for( int i=0; i<MAX_PLAYER_COUNT; i++ ) {
if( i<2 ) {
spieler_type[i] = spieler_t::HUMAN;
}
else if( i==3 ) {
spieler_type[i] = spieler_t::AI_P****ENGER;
}
else if( i<8 ) {
spieler_type[i] = spieler_t::AI_GOODS;
}
else {
spieler_type[i] = spieler_t::EMPTY;
}
automaten[i] = false;
p****word[i][0] = 0;
}
}
if(file->get_version()>101000) {
file->rdwr_bool( seperate_halt_capacities, "" );
file->rdwr_byte( pay_for_total_distance, "" );
file->rdwr_short(starting_month, "");
file->rdwr_short( river_number, "" );
file->rdwr_short( min_river_length, "" );
file->rdwr_short( max_river_length, "" );
}
if(file->get_version()>102000) {
file->rdwr_bool( avoid_overcrowding, "" );
}
if(file->get_version()>102001) {
file->rdwr_bool( no_routing_over_overcrowding, "" );
file->rdwr_bool( with_private_paks, "" );
file->rdwr_long( starting_size, "" );
}
}
}
Takže, teď si to přečtu...