From 9cfb61adf58f882f03f17da05e84c25f7572be6d Mon Sep 17 00:00:00 2001 From: yexo Date: Sun, 20 Jun 2010 19:13:02 +0000 Subject: [PATCH] (svn r20003) -Feature [FS#3886]: [NewGRF] var 43 depot build date for railtypes --- src/depot_base.h | 1 + src/newgrf_railtype.cpp | 7 +++++++ src/rail_cmd.cpp | 3 +++ src/road_cmd.cpp | 3 +++ src/saveload/afterload.cpp | 5 +++++ src/saveload/depot_sl.cpp | 1 + src/saveload/saveload.cpp | 2 +- src/water_cmd.cpp | 7 ++++++- 8 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/depot_base.h b/src/depot_base.h index 0b05d5418b..4bc4af67c7 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 4a40d66053..53894dca7e 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 58d1f51911..86eaa5ca24 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 ac81ea005f..ab5a5df5c1 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 c616ce6e7a..55eee19baf 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 0b0320c667..9b8fd224ac 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 c002f87dd2..a2cfdf7dfc 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 ae8d522716..a83c1aa568 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; }