diff options
-rw-r--r-- | src/table/unmovable_land.h | 8 | ||||
-rw-r--r-- | src/unmovable.h | 21 | ||||
-rw-r--r-- | src/unmovable_cmd.cpp | 13 |
3 files changed, 33 insertions, 9 deletions
diff --git a/src/table/unmovable_land.h b/src/table/unmovable_land.h index 25db9828c..000183564 100644 --- a/src/table/unmovable_land.h +++ b/src/table/unmovable_land.h @@ -92,3 +92,11 @@ static const DrawTileSprites _unmovable_display_datas[] = { }; #undef TILE_SPRITE_LINE + +static const UnmovableSpec _original_unmovable[] = { + {STR_5801_TRANSMITTER, 1, 1}, + {STR_5802_LIGHTHOUSE, 1, 1}, + {STR_2016_STATUE, 1, 1}, + {STR_5805_COMPANY_OWNED_LAND, 10, 2}, + {STR_5803_COMPANY_HEADQUARTERS, 1, 1}, +}; diff --git a/src/unmovable.h b/src/unmovable.h index ebcaa7513..f640a2ece 100644 --- a/src/unmovable.h +++ b/src/unmovable.h @@ -5,6 +5,27 @@ #ifndef UNMOVABLE_H #define UNMOVABLE_H +#include "unmovable_map.h" +#include "economy_type.h" +#include "economy_func.h" + void UpdateCompanyHQ(Company *c, uint score); +struct UnmovableSpec { + StringID name; + uint8 buy_cost_multiplier; + uint8 sell_cost_multiplier; + + Money GetRemovalCost() const { return (_price.clear_roughland * this->sell_cost_multiplier); } + Money GetBuildingCost() const { return (_price.clear_roughland * this->buy_cost_multiplier); } + +}; + +extern const UnmovableSpec _original_unmovable[]; + +static inline const UnmovableSpec *GetUnmovableSpec(UnmovableType type) +{ + return &_original_unmovable[type]; +} + #endif /* UNMOVABLE_H */ diff --git a/src/unmovable_cmd.cpp b/src/unmovable_cmd.cpp index 3e45b6d22..508cdc1d5 100644 --- a/src/unmovable_cmd.cpp +++ b/src/unmovable_cmd.cpp @@ -22,6 +22,7 @@ #include "economy_func.h" #include "cheat_type.h" #include "landscape_type.h" +#include "unmovable.h" #include "table/strings.h" #include "table/sprites.h" @@ -132,7 +133,7 @@ CommandCost CmdPurchaseLandArea(TileIndex tile, uint32 flags, uint32 p1, uint32 MarkTileDirtyByTile(tile); } - return cost.AddCost(_price.clear_roughland * 10); + return cost.AddCost(GetUnmovableSpec(UNMOVABLE_OWNED_LAND)->GetBuildingCost()); } /** Sell a land area. Actually you only sell one tile, so @@ -152,7 +153,7 @@ CommandCost CmdSellLandArea(TileIndex tile, uint32 flags, uint32 p1, uint32 p2, if (flags & DC_EXEC) DoClearSquare(tile); - return CommandCost(EXPENSES_CONSTRUCTION, - _price.clear_roughland * 2); + return CommandCost(EXPENSES_CONSTRUCTION, - GetUnmovableSpec(UNMOVABLE_OWNED_LAND)->GetRemovalCost()); } static Foundation GetFoundation_Unmovable(TileIndex tile, Slope tileh); @@ -300,13 +301,7 @@ static void GetAcceptedCargo_Unmovable(TileIndex tile, AcceptedCargo ac) static void GetTileDesc_Unmovable(TileIndex tile, TileDesc *td) { - switch (GetUnmovableType(tile)) { - case UNMOVABLE_TRANSMITTER: td->str = STR_5801_TRANSMITTER; break; - case UNMOVABLE_LIGHTHOUSE: td->str = STR_5802_LIGHTHOUSE; break; - case UNMOVABLE_STATUE: td->str = STR_2016_STATUE; break; - case UNMOVABLE_OWNED_LAND: td->str = STR_5805_COMPANY_OWNED_LAND; break; - default: td->str = STR_5803_COMPANY_HEADQUARTERS; break; - } + td->str = GetUnmovableSpec(GetUnmovableType(tile))->name; td->owner[0] = GetTileOwner(tile); } |