OpenTTD Source  20241121-master-g67a0fccfad
oldloader_sl.cpp File Reference

Chunks and fix-ups for TTO/TTD/TTDP savegames. More...

#include "../stdafx.h"
#include "../town.h"
#include "../industry.h"
#include "../company_func.h"
#include "../aircraft.h"
#include "../roadveh.h"
#include "../ship.h"
#include "../train.h"
#include "../signs_base.h"
#include "../station_base.h"
#include "../subsidy_base.h"
#include "../debug.h"
#include "../depot_base.h"
#include "../timer/timer_game_calendar.h"
#include "../vehicle_func.h"
#include "../effectvehicle_base.h"
#include "../engine_func.h"
#include "../company_base.h"
#include "../disaster_vehicle.h"
#include "../timer/timer.h"
#include "../timer/timer_game_tick.h"
#include "saveload_internal.h"
#include "oldloader.h"
#include "table/strings.h"
#include "../table/engines.h"
#include "../table/townname.h"
#include "../safeguards.h"

Go to the source code of this file.

Macros

#define FIXNUM(x, y, z)   (((((x) << 16) / (y)) + 1) << z)
 

Functions

void FixOldMapArray ()
 
static void FixTTDMapArray ()
 
static void FixTTDDepots ()
 
static uint32_t RemapOldTownName (uint32_t townnameparts, uint8_t old_town_name_type)
 
static void FixOldTowns ()
 
void FixOldVehicles ()
 Convert the old style vehicles into something that resembles the old new style savegames. More...
 
static bool FixTTOMapArray ()
 
static bool FixTTOEngines ()
 
static void FixTTOCompanies ()
 
static Colours RemapTTOColour (Colours tto)
 
static uint RemapTownIndex (uint x)
 
static uint RemapOrderIndex (uint x)
 
static void ClearOldMap3 (TileIndex t)
 
static TownRemapTown (TileIndex fallback)
 
static void ReadTTDPatchFlags ()
 
static bool LoadOldTown (LoadgameState *ls, int num)
 
static bool LoadOldOrder (LoadgameState *ls, int num)
 
static bool LoadOldAnimTileList (LoadgameState *ls, int)
 
static bool LoadOldDepot (LoadgameState *ls, int num)
 
static bool LoadOldGood (LoadgameState *ls, int num)
 
static bool LoadOldStation (LoadgameState *ls, int num)
 
static bool LoadOldIndustry (LoadgameState *ls, int num)
 
static bool LoadOldCompanyYearly (LoadgameState *ls, int num)
 
static bool LoadOldCompanyEconomy (LoadgameState *ls, int)
 
static bool LoadOldCompany (LoadgameState *ls, int num)
 
static bool LoadOldVehicleUnion (LoadgameState *ls, int)
 
bool LoadOldVehicle (LoadgameState *ls, int num)
 Load the vehicles of an old style savegame. More...
 
static bool LoadOldSign (LoadgameState *ls, int num)
 
static bool LoadOldEngine (LoadgameState *ls, int num)
 
static bool LoadOldEngineName (LoadgameState *ls, int num)
 
static bool LoadOldSubsidy (LoadgameState *ls, int num)
 
static bool LoadOldGameDifficulty (LoadgameState *ls, int)
 
static bool LoadOldMapPart1 (LoadgameState *ls, int)
 
static bool LoadOldMapPart2 (LoadgameState *ls, int)
 
static bool LoadTTDPatchExtraChunks (LoadgameState *ls, int)
 
bool LoadTTDMain (LoadgameState *ls)
 
bool LoadTTOMain (LoadgameState *ls)
 

Variables

static bool _read_ttdpatch_flags
 Have we (tried to) read TTDPatch extra flags?
 
static uint16_t _old_extra_chunk_nums
 Number of extra TTDPatch chunks.
 
static uint8_t _old_vehicle_multiplier
 TTDPatch vehicle multiplier.
 
static StringID_old_vehicle_names
 
static Engine_old_engines
 
std::vector< TileIndex_animated_tiles
 The table/list with animated tiles.
 
TimeoutTimer< TimerGameTick_new_competitor_timeout
 
char * _old_name_array
 Location to load the old names to.
 
static uint32_t _old_town_index
 
static uint16_t _old_string_id
 
static uint16_t _old_string_id_2
 
static const OldChunks town_chunk []
 
static uint16_t _old_order
 
static const OldChunks order_chunk []
 
static const OldChunks depot_chunk []
 
static StationID _current_station_id
 
static uint16_t _waiting_acceptance
 
static uint8_t _cargo_source
 
static uint8_t _cargo_periods
 
static const OldChunks goods_chunk []
 
static const OldChunks station_chunk []
 
static std::array< Industry::AcceptedCargo, INDUSTRY_ORIGINAL_NUM_INPUTS_old_accepted {}
 
static std::array< Industry::ProducedCargo, INDUSTRY_ORIGINAL_NUM_OUTPUTS_old_produced {}
 
static const OldChunks industry_chunk []
 
static CompanyID _current_company_id
 
static int32_t _old_yearly
 
static const OldChunks _company_yearly_chunk []
 
static const OldChunks _company_economy_chunk []
 
static const OldChunks _company_chunk []
 
static uint32_t _old_order_ptr
 
static uint16_t _old_next_ptr
 
static VehicleID _current_vehicle_id
 
static const OldChunks vehicle_train_chunk []
 
static const OldChunks vehicle_road_chunk []
 
static const OldChunks vehicle_ship_chunk []
 
static const OldChunks vehicle_air_chunk []
 
static const OldChunks vehicle_effect_chunk []
 
static const OldChunks vehicle_disaster_chunk []
 
static const OldChunks vehicle_empty_chunk []
 
static uint16_t _cargo_count
 
static const OldChunks vehicle_chunk []
 
static const OldChunks sign_chunk []
 
static const OldChunks engine_chunk []
 
static const OldChunks subsidy_chunk []
 
static const OldChunks game_difficulty_chunk []
 
TileIndex _cur_tileloop_tile
 
uint16_t _disaster_delay
 Delay counter for considering the next disaster.
 
uint8_t _trees_tick_ctr
 Determines when to consider building more trees.
 
uint8_t _age_cargo_skip_counter
 Skip aging of cargo? Used before savegame version 162.
 
uint8_t _old_diff_level
 
uint8_t _old_units
 
static const OldChunks main_chunk []
 

Detailed Description

Chunks and fix-ups for TTO/TTD/TTDP savegames.

TTO loader code is based on SVXConverter by Roman Vetter.

Definition in file oldloader_sl.cpp.

Function Documentation

◆ FixOldVehicles()

void FixOldVehicles ( )

Convert the old style vehicles into something that resembles the old new style savegames.

Then AfterLoadGame can handle the rest of the conversion.

Definition at line 163 of file oldloader_sl.cpp.

◆ FixTTDDepots()

static void FixTTDDepots ( )
static

Workaround for SVXConverter bug, depots 252-255 could be invalid

Definition at line 102 of file oldloader_sl.cpp.

References GetDepotIndex(), IsDepotTile(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_depot_pool >::Iterate().

◆ FixTTOEngines()

static bool FixTTOEngines ( )
static

TTD->TTO remapping of engines; 255 means there is no equivalent. SVXConverter uses (almost) the same table.

TTO->TTD remapping of engines. SVXConverter uses the same table.

Definition at line 343 of file oldloader_sl.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_vehicle_pool >::Iterate(), and lengthof.

◆ LoadOldVehicle()

bool LoadOldVehicle ( LoadgameState ls,
int  num 
)

Load the vehicles of an old style savegame.

So we can set the proper next pointer while loading.

Parameters
lsState (buffer) of the currently loaded game.
numThe number of vehicles to load.
Returns
True iff loading went without problems.

Definition at line 1249 of file oldloader_sl.cpp.

◆ RemapTTOColour()

static Colours RemapTTOColour ( Colours  tto)
inlinestatic

Lossy remapping of TTO colours to TTD colours. SVXConverter uses the same conversion.

Definition at line 458 of file oldloader_sl.cpp.

Variable Documentation

◆ _company_economy_chunk

const OldChunks _company_economy_chunk[]
static
Initial value:
= {
OCL_SVAR( OC_FILE_I32 | OC_VAR_I64, CompanyEconomyEntry, income ),
OCL_SVAR( OC_FILE_I32 | OC_VAR_I64, CompanyEconomyEntry, expenses ),
OCL_SVAR( OC_INT32, CompanyEconomyEntry, delivered_cargo[NUM_CARGO - 1] ),
OCL_SVAR( OC_INT32, CompanyEconomyEntry, performance_history ),
OCL_SVAR( OC_TTD | OC_FILE_I32 | OC_VAR_I64, CompanyEconomyEntry, company_value ),
}
static const CargoID NUM_CARGO
Maximum number of cargo types in a game.
Definition: cargo_type.h:74
@ OC_TTD
chunk is valid ONLY for TTD savegames
Definition: oldloader.h:42
Statistics about the economy.
Definition: company_base.h:24

Definition at line 910 of file oldloader_sl.cpp.

◆ _company_yearly_chunk

const OldChunks _company_yearly_chunk[]
static
Initial value:
= {
OCL_VAR( OC_INT32, 1, &_old_yearly ),
}

Definition at line 888 of file oldloader_sl.cpp.

◆ depot_chunk

const OldChunks depot_chunk[]
static
Initial value:
= {
OCL_SVAR( OC_TILE, Depot, xy ),
OCL_VAR ( OC_UINT32, 1, &_old_town_index ),
}

Definition at line 679 of file oldloader_sl.cpp.

◆ engine_chunk

const OldChunks engine_chunk[]
static
Initial value:
= {
OCL_SVAR( OC_UINT16, Engine, company_avail ),
OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Engine, intro_date ),
OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, Engine, age ),
OCL_SVAR( OC_UINT16, Engine, reliability ),
OCL_SVAR( OC_UINT16, Engine, reliability_spd_dec ),
OCL_SVAR( OC_UINT16, Engine, reliability_start ),
OCL_SVAR( OC_UINT16, Engine, reliability_max ),
OCL_SVAR( OC_UINT16, Engine, reliability_final ),
OCL_SVAR( OC_UINT16, Engine, duration_phase_1 ),
OCL_SVAR( OC_UINT16, Engine, duration_phase_2 ),
OCL_SVAR( OC_UINT16, Engine, duration_phase_3 ),
OCL_NULL( 1 ),
OCL_SVAR( OC_UINT8, Engine, flags ),
OCL_NULL( 1 ),
OCL_SVAR( OC_UINT8, Engine, preview_wait ),
OCL_CNULL( OC_TTD, 2 ),
}

Definition at line 1416 of file oldloader_sl.cpp.

◆ game_difficulty_chunk

const OldChunks game_difficulty_chunk[]
static
Initial value:
= {
OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, DifficultySettings, max_no_competitors ),
OCL_NULL( 2),
OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, DifficultySettings, number_towns ),
OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, DifficultySettings, industry_density ),
OCL_SVAR( OC_FILE_U16 | OC_VAR_U32, DifficultySettings, max_loan ),
OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, DifficultySettings, initial_interest ),
OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, DifficultySettings, vehicle_costs ),
OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, DifficultySettings, competitor_speed ),
OCL_NULL( 2),
OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, DifficultySettings, vehicle_breakdowns ),
OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, DifficultySettings, subsidy_multiplier ),
OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, DifficultySettings, construction_cost ),
OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, DifficultySettings, terrain_type ),
OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, DifficultySettings, quantity_sea_lakes ),
OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, DifficultySettings, economy ),
OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, DifficultySettings, line_reverse_mode ),
OCL_SVAR( OC_FILE_U16 | OC_VAR_U8, DifficultySettings, disasters ),
}
Settings related to the difficulty of the game.
Definition: settings_type.h:95

Definition at line 1469 of file oldloader_sl.cpp.

◆ goods_chunk

const OldChunks goods_chunk[]
static
Initial value:
= {
OCL_VAR ( OC_UINT16, 1, &_waiting_acceptance ),
OCL_SVAR( OC_UINT8, GoodsEntry, time_since_pickup ),
OCL_SVAR( OC_UINT8, GoodsEntry, rating ),
OCL_VAR ( OC_UINT8, 1, &_cargo_source ),
OCL_VAR ( OC_UINT8, 1, &_cargo_periods ),
OCL_SVAR( OC_UINT8, GoodsEntry, last_speed ),
OCL_SVAR( OC_UINT8, GoodsEntry, last_age ),
}
Stores station stats for a single cargo.
Definition: station_base.h:166

Definition at line 704 of file oldloader_sl.cpp.

◆ order_chunk

const OldChunks order_chunk[]
static
Initial value:
= {
OCL_VAR ( OC_UINT16, 1, &_old_order ),
}

Definition at line 636 of file oldloader_sl.cpp.

◆ sign_chunk

const OldChunks sign_chunk[]
static
Initial value:
= {
OCL_VAR ( OC_UINT16, 1, &_old_string_id ),
OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, Sign, x ),
OCL_SVAR( OC_FILE_U16 | OC_VAR_I32, Sign, y ),
OCL_SVAR( OC_FILE_U16 | OC_VAR_I8, Sign, z ),
OCL_NULL( 6 ),
}

Definition at line 1386 of file oldloader_sl.cpp.

◆ subsidy_chunk

const OldChunks subsidy_chunk[]
static
Initial value:
= {
OCL_SVAR( OC_UINT8, Subsidy, cargo_type ),
OCL_SVAR( OC_UINT8, Subsidy, remaining ),
OCL_SVAR( OC_FILE_U8 | OC_VAR_U16, Subsidy, src ),
OCL_SVAR( OC_FILE_U8 | OC_VAR_U16, Subsidy, dst ),
}
Struct about subsidies, offered and awarded.
Definition: subsidy_base.h:22

Definition at line 1452 of file oldloader_sl.cpp.

◆ vehicle_air_chunk

const OldChunks vehicle_air_chunk[]
static
Initial value:
= {
OCL_SVAR( OC_UINT8, Aircraft, pos ),
OCL_SVAR( OC_FILE_U8 | OC_VAR_U16, Aircraft, targetairport ),
OCL_SVAR( OC_UINT16, Aircraft, crashed_counter ),
OCL_SVAR( OC_UINT8, Aircraft, state ),
OCL_NULL( 5 ),
}
Aircraft, helicopters, rotors and their shadows belong to this class.
Definition: aircraft.h:72

Definition at line 1088 of file oldloader_sl.cpp.

◆ vehicle_disaster_chunk

const OldChunks vehicle_disaster_chunk[]
static
Initial value:
= {
OCL_SVAR( OC_UINT16, DisasterVehicle, image_override ),
OCL_SVAR( OC_UINT16, DisasterVehicle, big_ufo_destroyer_target ),
OCL_NULL( 6 ),
}
Disasters, like submarines, skyrangers and their shadows, belong to this class.

Definition at line 1108 of file oldloader_sl.cpp.

◆ vehicle_effect_chunk

const OldChunks vehicle_effect_chunk[]
static
Initial value:
= {
OCL_SVAR( OC_UINT16, EffectVehicle, animation_state ),
OCL_SVAR( OC_UINT8, EffectVehicle, animation_substate ),
OCL_NULL( 7 ),
}
A special vehicle is one of the following:

Definition at line 1099 of file oldloader_sl.cpp.

◆ vehicle_empty_chunk

const OldChunks vehicle_empty_chunk[]
static
Initial value:
= {
OCL_NULL( 10 ),
}

Definition at line 1117 of file oldloader_sl.cpp.

◆ vehicle_road_chunk

const OldChunks vehicle_road_chunk[]
static
Initial value:
= {
OCL_SVAR( OC_UINT8, RoadVehicle, state ),
OCL_SVAR( OC_UINT8, RoadVehicle, frame ),
OCL_SVAR( OC_UINT16, RoadVehicle, blocked_ctr ),
OCL_SVAR( OC_UINT8, RoadVehicle, overtaking ),
OCL_SVAR( OC_UINT8, RoadVehicle, overtaking_ctr ),
OCL_SVAR( OC_UINT16, RoadVehicle, crashed_ctr ),
OCL_SVAR( OC_UINT8, RoadVehicle, reverse_ctr ),
OCL_NULL( 1 ),
}
Buses, trucks and trams belong to this class.
Definition: roadveh.h:98

Definition at line 1066 of file oldloader_sl.cpp.

◆ vehicle_ship_chunk

const OldChunks vehicle_ship_chunk[]
static
Initial value:
= {
OCL_SVAR( OC_UINT8, Ship, state ),
OCL_NULL( 9 ),
}
All ships have this type.
Definition: ship.h:32

Definition at line 1080 of file oldloader_sl.cpp.

◆ vehicle_train_chunk

const OldChunks vehicle_train_chunk[]
static
Initial value:
= {
OCL_SVAR( OC_UINT8, Train, track ),
OCL_SVAR( OC_UINT8, Train, force_proceed ),
OCL_SVAR( OC_UINT16, Train, crash_anim_pos ),
OCL_SVAR( OC_UINT8, Train, railtype ),
OCL_NULL( 5 ),
}
'Train' is either a loco or a wagon.
Definition: train.h:89

Definition at line 1055 of file oldloader_sl.cpp.