summaryrefslogtreecommitdiff
path: root/src/saveload
diff options
context:
space:
mode:
authorsmatz <smatz@openttd.org>2009-01-23 13:36:12 +0000
committersmatz <smatz@openttd.org>2009-01-23 13:36:12 +0000
commit042d7800d0c448d093b0fb1fff03bb761a4b510d (patch)
tree67cab509cdc1c89f5601c8ab38d4ed1f45cd3c49 /src/saveload
parentdecd0c51e45f0cddfd03e83db5a3b9d460694546 (diff)
downloadopenttd-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.h2
-rw-r--r--src/saveload/oldloader_sl.cpp46
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;