summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryexo <yexo@openttd.org>2010-06-20 19:13:02 +0000
committeryexo <yexo@openttd.org>2010-06-20 19:13:02 +0000
commit9cfb61adf58f882f03f17da05e84c25f7572be6d (patch)
treeeeff74805ecd5cdd0a0869ee5dab36d34492a883
parentf2d6bf6b584e22932fc2e7778aa2d57c033ab62a (diff)
downloadopenttd-9cfb61adf58f882f03f17da05e84c25f7572be6d.tar.xz
(svn r20003) -Feature [FS#3886]: [NewGRF] var 43 depot build date for railtypes
-rw-r--r--src/depot_base.h1
-rw-r--r--src/newgrf_railtype.cpp7
-rw-r--r--src/rail_cmd.cpp3
-rw-r--r--src/road_cmd.cpp3
-rw-r--r--src/saveload/afterload.cpp5
-rw-r--r--src/saveload/depot_sl.cpp1
-rw-r--r--src/saveload/saveload.cpp2
-rw-r--r--src/water_cmd.cpp7
8 files changed, 27 insertions, 2 deletions
diff --git a/src/depot_base.h b/src/depot_base.h
index 0b05d5418..4bc4af67c 100644
--- a/src/depot_base.h
+++ b/src/depot_base.h
@@ -24,6 +24,7 @@ struct Depot : DepotPool::PoolItem<&_depot_pool> {
TileIndex xy;
uint16 town_cn; ///< The Nth depot for this town (consecutive number)
+ Date build_date; ///< Date of construction
Depot(TileIndex xy = INVALID_TILE) : xy(xy) {}
~Depot();
diff --git a/src/newgrf_railtype.cpp b/src/newgrf_railtype.cpp
index 4a40d6605..53894dca7 100644
--- a/src/newgrf_railtype.cpp
+++ b/src/newgrf_railtype.cpp
@@ -15,6 +15,9 @@
#include "newgrf_railtype.h"
#include "newgrf_spritegroup.h"
#include "core/bitmath_func.hpp"
+#include "date_func.h"
+#include "depot_base.h"
+#include "rail_map.h"
static uint32 RailTypeGetRandomBits(const ResolverObject *object)
{
@@ -41,6 +44,7 @@ static uint32 RailTypeGetVariable(const ResolverObject *object, byte variable, b
case 0x40: return 0;
case 0x41: return 0;
case 0x42: return 0;
+ case 0x43: return _date;
}
}
@@ -48,6 +52,9 @@ static uint32 RailTypeGetVariable(const ResolverObject *object, byte variable, b
case 0x40: return GetTerrainType(tile);
case 0x41: return 0;
case 0x42: return IsLevelCrossingTile(tile) && IsCrossingBarred(tile);
+ case 0x43:
+ if (IsRailDepotTile(tile)) return Depot::GetByTile(tile)->build_date;
+ return _date;
}
DEBUG(grf, 1, "Unhandled rail type tile property 0x%X", variable);
diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp
index 58d1f5191..86eaa5ca2 100644
--- a/src/rail_cmd.cpp
+++ b/src/rail_cmd.cpp
@@ -37,6 +37,7 @@
#include "pbs.h"
#include "company_base.h"
#include "core/backup_type.hpp"
+#include "date_func.h"
#include "table/strings.h"
#include "table/sprites.h"
@@ -869,6 +870,7 @@ CommandCost CmdBuildTrainDepot(TileIndex tile, DoCommandFlag flags, uint32 p1, u
if (flags & DC_EXEC) {
Depot *d = new Depot(tile);
+ d->build_date = _date;
MakeRailDepot(tile, _current_company, d->index, dir, railtype);
MarkTileDirtyByTile(tile);
@@ -2644,6 +2646,7 @@ static void GetTileDesc_Track(TileIndex tile, TileDesc *td)
td->rail_speed = 61;
}
}
+ td->build_date = Depot::GetByTile(tile)->build_date;
break;
default:
diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp
index ac81ea005..ab5a5df5c 100644
--- a/src/road_cmd.cpp
+++ b/src/road_cmd.cpp
@@ -36,6 +36,7 @@
#include "company_base.h"
#include "core/random_func.hpp"
#include "newgrf_railtype.h"
+#include "date_func.h"
#include "table/strings.h"
@@ -909,6 +910,7 @@ CommandCost CmdBuildRoadDepot(TileIndex tile, DoCommandFlag flags, uint32 p1, ui
if (flags & DC_EXEC) {
Depot *dep = new Depot(tile);
+ dep->build_date = _date;
MakeRoadDepot(tile, _current_company, dep->index, dir, rt);
MarkTileDirtyByTile(tile);
@@ -1534,6 +1536,7 @@ static void GetTileDesc_Road(TileIndex tile, TileDesc *td)
case ROAD_TILE_DEPOT:
td->str = STR_LAI_ROAD_DESCRIPTION_ROAD_VEHICLE_DEPOT;
road_owner = GetTileOwner(tile); // Tile has only one owner, roadtype does not matter
+ td->build_date = Depot::GetByTile(tile)->build_date;
break;
default: {
diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp
index c616ce6e7..55eee19ba 100644
--- a/src/saveload/afterload.cpp
+++ b/src/saveload/afterload.cpp
@@ -2126,6 +2126,11 @@ bool AfterLoadGame()
FOR_ALL_DEPOTS(d) MakeDefaultName(d);
}
+ if (CheckSavegameVersion(142)) {
+ Depot *d;
+ FOR_ALL_DEPOTS(d) d->build_date = _date;
+ }
+
/* Road stops is 'only' updating some caches */
AfterLoadRoadStops();
AfterLoadLabelMaps();
diff --git a/src/saveload/depot_sl.cpp b/src/saveload/depot_sl.cpp
index 0b0320c66..9b8fd224a 100644
--- a/src/saveload/depot_sl.cpp
+++ b/src/saveload/depot_sl.cpp
@@ -24,6 +24,7 @@ static const SaveLoad _depot_desc[] = {
SLE_CONDREF(Depot, town, REF_TOWN, 141, SL_MAX_VERSION),
SLE_CONDVAR(Depot, town_cn, SLE_UINT16, 141, SL_MAX_VERSION),
SLE_CONDSTR(Depot, name, SLE_STR, 0, 141, SL_MAX_VERSION),
+ SLE_CONDVAR(Depot, build_date, SLE_INT32, 142, SL_MAX_VERSION),
SLE_END()
};
diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp
index c002f87dd..a2cfdf7df 100644
--- a/src/saveload/saveload.cpp
+++ b/src/saveload/saveload.cpp
@@ -47,7 +47,7 @@
#include "saveload_internal.h"
-extern const uint16 SAVEGAME_VERSION = 141;
+extern const uint16 SAVEGAME_VERSION = 142;
SavegameType _savegame_type; ///< type of savegame we are loading
diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp
index ae8d52271..a83c1aa56 100644
--- a/src/water_cmd.cpp
+++ b/src/water_cmd.cpp
@@ -35,6 +35,7 @@
#include "ai/ai.hpp"
#include "core/random_func.hpp"
#include "core/backup_type.hpp"
+#include "date_func.h"
#include "table/sprites.h"
#include "table/strings.h"
@@ -131,6 +132,7 @@ CommandCost CmdBuildShipDepot(TileIndex tile, DoCommandFlag flags, uint32 p1, ui
if (flags & DC_EXEC) {
Depot *depot = new Depot(tile);
+ depot->build_date = _date;
MakeShipDepot(tile, _current_company, depot->index, DEPOT_NORTH, axis, wc1);
MakeShipDepot(tile2, _current_company, depot->index, DEPOT_SOUTH, axis, wc2);
@@ -729,7 +731,10 @@ static void GetTileDesc_Water(TileIndex tile, TileDesc *td)
break;
case WATER_TILE_COAST: td->str = STR_LAI_WATER_DESCRIPTION_COAST_OR_RIVERBANK; break;
case WATER_TILE_LOCK : td->str = STR_LAI_WATER_DESCRIPTION_LOCK; break;
- case WATER_TILE_DEPOT: td->str = STR_LAI_WATER_DESCRIPTION_SHIP_DEPOT; break;
+ case WATER_TILE_DEPOT:
+ td->str = STR_LAI_WATER_DESCRIPTION_SHIP_DEPOT;
+ td->build_date = Depot::GetByTile(tile)->build_date;
+ break;
default: NOT_REACHED(); break;
}