diff options
author | smatz <smatz@openttd.org> | 2009-01-23 13:36:12 +0000 |
---|---|---|
committer | smatz <smatz@openttd.org> | 2009-01-23 13:36:12 +0000 |
commit | 042d7800d0c448d093b0fb1fff03bb761a4b510d (patch) | |
tree | 67cab509cdc1c89f5601c8ab38d4ed1f45cd3c49 /src/saveload | |
parent | decd0c51e45f0cddfd03e83db5a3b9d460694546 (diff) | |
download | openttd-042d7800d0c448d093b0fb1fff03bb761a4b510d.tar.xz |
(svn r15223) -Codechange: move GetOldTownName to oldloader_sl.cpp as it is specific to loading of TTO/TTD savegames
Diffstat (limited to 'src/saveload')
-rw-r--r-- | src/saveload/oldloader.h | 2 | ||||
-rw-r--r-- | src/saveload/oldloader_sl.cpp | 46 |
2 files changed, 40 insertions, 8 deletions
diff --git a/src/saveload/oldloader.h b/src/saveload/oldloader.h index 6bee5d5f6..c449c8cd4 100644 --- a/src/saveload/oldloader.h +++ b/src/saveload/oldloader.h @@ -37,7 +37,7 @@ enum OldChunkType { /* 4 bits allocated (16 max) */ OC_TTD = 1 << 4, ///< chunk is valid ONLY for TTD savegames - OC_TTO = 1 << 5, ///< -//- TTO (default in neither of these) + OC_TTO = 1 << 5, ///< -//- TTO (default is neither of these) /* 4 bits allocated */ OC_VAR_I8 = 1 << 8, diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index afb60401e..bae21a99c 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -29,6 +29,7 @@ #include "table/strings.h" #include "../table/engines.h" +#include "../table/namegen.h" static bool _read_ttdpatch_flags; @@ -98,7 +99,38 @@ static void FixTTDMapArray() FixOldMapArray(); } -extern uint32 GetOldTownName(uint32 townnameparts, byte old_town_name_type); +#define FIXNUM(x, y, z) (((((x) << 16) / (y)) + 1) << z) + +static uint32 RemapOldTownName(uint32 townnameparts, byte old_town_name_type) +{ + switch (old_town_name_type) { + case 0: case 3: // English, American + /* Already OK */ + return townnameparts; + + case 1: // French + /* For some reason 86 needs to be subtracted from townnameparts + * 0000 0000 0000 0000 0000 0000 1111 1111 */ + return FIXNUM(townnameparts - 86, lengthof(name_french_real), 0); + + case 2: // German + DEBUG(misc, 0, "German Townnames are buggy (%d)", townnameparts); + return townnameparts; + + case 4: // Latin-American + /* 0000 0000 0000 0000 0000 0000 1111 1111 */ + return FIXNUM(townnameparts, lengthof(name_spanish_real), 0); + + case 5: // Silly + /* NUM_SILLY_1 - lower 16 bits + * NUM_SILLY_2 - upper 16 bits without leading 1 (first 8 bytes) + * 1000 0000 2222 2222 0000 0000 1111 1111 */ + return FIXNUM(townnameparts, lengthof(name_silly_1), 0) | FIXNUM(GB(townnameparts, 16, 8), lengthof(name_silly_2), 16); + } + return 0; +} + +#undef FIXNUM void FixOldTowns() { @@ -108,7 +140,7 @@ void FixOldTowns() FOR_ALL_TOWNS(town) { if (IsInsideMM(town->townnametype, 0x20C1, 0x20C3)) { town->townnametype = SPECSTR_TOWNNAME_ENGLISH + _settings_game.game_creation.town_name; - town->townnameparts = GetOldTownName(town->townnameparts, _settings_game.game_creation.town_name); + town->townnameparts = RemapOldTownName(town->townnameparts, _settings_game.game_creation.town_name); } } } @@ -678,7 +710,7 @@ static bool LoadOldCargoPaymentRate(LoadgameState *ls, int num) return true; } -VehicleID _current_station_id; +static StationID _current_station_id; static uint16 _waiting_acceptance; static uint8 _cargo_source; static uint8 _cargo_days; @@ -861,7 +893,7 @@ static bool LoadOldIndustry(LoadgameState *ls, int num) return true; } -CompanyID _current_company_id; +static CompanyID _current_company_id; static int32 _old_yearly; static const OldChunks _company_yearly_chunk[] = { @@ -1030,7 +1062,7 @@ static bool LoadOldCompany(LoadgameState *ls, int num) static uint32 _old_order_ptr; static uint16 _old_next_ptr; -VehicleID _current_vehicle_id; +static VehicleID _current_vehicle_id; static const OldChunks vehicle_train_chunk[] = { OCL_SVAR( OC_UINT8, VehicleRail, track ), @@ -1259,8 +1291,8 @@ bool LoadOldVehicle(LoadgameState *ls, int num) switch (v->type) { case VEH_TRAIN: { static const byte spriteset_rail[] = { - 0, 2, 4, 4, 8, 10, 12, 14, 16, 18, 20, 22, 40, 42, 44, 46, - 48, 52, 54, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 120, 122, + 0, 2, 4, 4, 8, 10, 12, 14, 16, 18, 20, 22, 40, 42, 44, 46, + 48, 52, 54, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140 }; if (v->spritenum / 2 >= lengthof(spriteset_rail)) return false; |