mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r17598) [0.7] -Backport from trunk:
- Fix: Vehicle image was not always updated when needed (r17594) - Fix: [NoAI] Could not query the size of small airports when they could not be build anymore [FS#3212] (r17591) - Fix: Erroneous message about changing the difficulty level [FS#3220] (r17588) - Fix: Assertion triggered when the second vehicle in a 101+ (or 11+ if mammoth trains is disabled) vehicle free wagon chain is an engine and the first vehicle is moved to another chain [FS#3208] (r17576)
This commit is contained in:
parent
429eb416ac
commit
57992d5eac
|
@ -213,6 +213,7 @@ function Regression::Airport()
|
||||||
print(" GetAirportType(): " + AIAirport.GetAirportType(32116));
|
print(" GetAirportType(): " + AIAirport.GetAirportType(32116));
|
||||||
|
|
||||||
for (local i = -1; i < 10; i++) {
|
for (local i = -1; i < 10; i++) {
|
||||||
|
print(" IsAirportInformationAvailable(" + i + "): " + AIAirport.IsAirportInformationAvailable(i));
|
||||||
print(" IsValidAirportType(" + i + "): " + AIAirport.IsValidAirportType(i));
|
print(" IsValidAirportType(" + i + "): " + AIAirport.IsValidAirportType(i));
|
||||||
print(" GetAirportWidth(" + i + "): " + AIAirport.GetAirportWidth(i));
|
print(" GetAirportWidth(" + i + "): " + AIAirport.GetAirportWidth(i));
|
||||||
print(" GetAirportHeight(" + i + "): " + AIAirport.GetAirportHeight(i));
|
print(" GetAirportHeight(" + i + "): " + AIAirport.GetAirportHeight(i));
|
||||||
|
|
|
@ -575,46 +575,57 @@
|
||||||
IsAirportTile(): false
|
IsAirportTile(): false
|
||||||
GetHangarOfAirport(): -1
|
GetHangarOfAirport(): -1
|
||||||
GetAirportType(): 255
|
GetAirportType(): 255
|
||||||
|
IsAirportInformationAvailable(-1): false
|
||||||
IsValidAirportType(-1): false
|
IsValidAirportType(-1): false
|
||||||
GetAirportWidth(-1): -1
|
GetAirportWidth(-1): -1
|
||||||
GetAirportHeight(-1): -1
|
GetAirportHeight(-1): -1
|
||||||
GetAirportCoverageRadius(-1): -1
|
GetAirportCoverageRadius(-1): -1
|
||||||
|
IsAirportInformationAvailable(0): true
|
||||||
IsValidAirportType(0): true
|
IsValidAirportType(0): true
|
||||||
GetAirportWidth(0): 4
|
GetAirportWidth(0): 4
|
||||||
GetAirportHeight(0): 3
|
GetAirportHeight(0): 3
|
||||||
GetAirportCoverageRadius(0): 4
|
GetAirportCoverageRadius(0): 4
|
||||||
|
IsAirportInformationAvailable(1): true
|
||||||
IsValidAirportType(1): false
|
IsValidAirportType(1): false
|
||||||
GetAirportWidth(1): -1
|
GetAirportWidth(1): 6
|
||||||
GetAirportHeight(1): -1
|
GetAirportHeight(1): 6
|
||||||
GetAirportCoverageRadius(1): -1
|
GetAirportCoverageRadius(1): 5
|
||||||
|
IsAirportInformationAvailable(2): true
|
||||||
IsValidAirportType(2): false
|
IsValidAirportType(2): false
|
||||||
GetAirportWidth(2): -1
|
GetAirportWidth(2): 1
|
||||||
GetAirportHeight(2): -1
|
GetAirportHeight(2): 1
|
||||||
GetAirportCoverageRadius(2): -1
|
GetAirportCoverageRadius(2): 4
|
||||||
|
IsAirportInformationAvailable(3): true
|
||||||
IsValidAirportType(3): false
|
IsValidAirportType(3): false
|
||||||
GetAirportWidth(3): -1
|
GetAirportWidth(3): 6
|
||||||
GetAirportHeight(3): -1
|
GetAirportHeight(3): 6
|
||||||
GetAirportCoverageRadius(3): -1
|
GetAirportCoverageRadius(3): 6
|
||||||
|
IsAirportInformationAvailable(4): true
|
||||||
IsValidAirportType(4): false
|
IsValidAirportType(4): false
|
||||||
GetAirportWidth(4): -1
|
GetAirportWidth(4): 7
|
||||||
GetAirportHeight(4): -1
|
GetAirportHeight(4): 7
|
||||||
GetAirportCoverageRadius(4): -1
|
GetAirportCoverageRadius(4): 8
|
||||||
|
IsAirportInformationAvailable(5): true
|
||||||
IsValidAirportType(5): false
|
IsValidAirportType(5): false
|
||||||
GetAirportWidth(5): -1
|
GetAirportWidth(5): 5
|
||||||
GetAirportHeight(5): -1
|
GetAirportHeight(5): 4
|
||||||
GetAirportCoverageRadius(5): -1
|
GetAirportCoverageRadius(5): 4
|
||||||
|
IsAirportInformationAvailable(6): true
|
||||||
IsValidAirportType(6): false
|
IsValidAirportType(6): false
|
||||||
GetAirportWidth(6): -1
|
GetAirportWidth(6): 2
|
||||||
GetAirportHeight(6): -1
|
GetAirportHeight(6): 2
|
||||||
GetAirportCoverageRadius(6): -1
|
GetAirportCoverageRadius(6): 4
|
||||||
|
IsAirportInformationAvailable(7): true
|
||||||
IsValidAirportType(7): false
|
IsValidAirportType(7): false
|
||||||
GetAirportWidth(7): -1
|
GetAirportWidth(7): 9
|
||||||
GetAirportHeight(7): -1
|
GetAirportHeight(7): 11
|
||||||
GetAirportCoverageRadius(7): -1
|
GetAirportCoverageRadius(7): 10
|
||||||
|
IsAirportInformationAvailable(8): true
|
||||||
IsValidAirportType(8): false
|
IsValidAirportType(8): false
|
||||||
GetAirportWidth(8): -1
|
GetAirportWidth(8): 4
|
||||||
GetAirportHeight(8): -1
|
GetAirportHeight(8): 2
|
||||||
GetAirportCoverageRadius(8): -1
|
GetAirportCoverageRadius(8): 4
|
||||||
|
IsAirportInformationAvailable(9): false
|
||||||
IsValidAirportType(9): false
|
IsValidAirportType(9): false
|
||||||
GetAirportWidth(9): -1
|
GetAirportWidth(9): -1
|
||||||
GetAirportHeight(9): -1
|
GetAirportHeight(9): -1
|
||||||
|
|
|
@ -12,7 +12,12 @@
|
||||||
|
|
||||||
/* static */ bool AIAirport::IsValidAirportType(AirportType type)
|
/* static */ bool AIAirport::IsValidAirportType(AirportType type)
|
||||||
{
|
{
|
||||||
return type >= AT_SMALL && type <= AT_HELISTATION && HasBit(::GetValidAirports(), type);
|
return IsAirportInformationAvailable(type) && HasBit(::GetValidAirports(), type);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* static */ bool AIAirport::IsAirportInformationAvailable(AirportType type)
|
||||||
|
{
|
||||||
|
return type >= 0 && type <= AT_HELISTATION;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ Money AIAirport::GetPrice(AirportType type)
|
/* static */ Money AIAirport::GetPrice(AirportType type)
|
||||||
|
@ -39,21 +44,21 @@
|
||||||
|
|
||||||
/* static */ int32 AIAirport::GetAirportWidth(AirportType type)
|
/* static */ int32 AIAirport::GetAirportWidth(AirportType type)
|
||||||
{
|
{
|
||||||
if (!IsValidAirportType(type)) return -1;
|
if (!IsAirportInformationAvailable(type)) return -1;
|
||||||
|
|
||||||
return ::GetAirport(type)->size_x;
|
return ::GetAirport(type)->size_x;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ int32 AIAirport::GetAirportHeight(AirportType type)
|
/* static */ int32 AIAirport::GetAirportHeight(AirportType type)
|
||||||
{
|
{
|
||||||
if (!IsValidAirportType(type)) return -1;
|
if (!IsAirportInformationAvailable(type)) return -1;
|
||||||
|
|
||||||
return ::GetAirport(type)->size_y;
|
return ::GetAirport(type)->size_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ int32 AIAirport::GetAirportCoverageRadius(AirportType type)
|
/* static */ int32 AIAirport::GetAirportCoverageRadius(AirportType type)
|
||||||
{
|
{
|
||||||
if (!IsValidAirportType(type)) return -1;
|
if (!IsAirportInformationAvailable(type)) return -1;
|
||||||
|
|
||||||
return _settings_game.station.modified_catchment ? ::GetAirport(type)->catchment : (uint)CA_UNMODIFIED;
|
return _settings_game.station.modified_catchment ? ::GetAirport(type)->catchment : (uint)CA_UNMODIFIED;
|
||||||
}
|
}
|
||||||
|
@ -136,7 +141,7 @@
|
||||||
extern Town *AirportGetNearestTown(const AirportFTAClass *afc, TileIndex airport_tile);
|
extern Town *AirportGetNearestTown(const AirportFTAClass *afc, TileIndex airport_tile);
|
||||||
|
|
||||||
if (!::IsValidTile(tile)) return INVALID_TOWN;
|
if (!::IsValidTile(tile)) return INVALID_TOWN;
|
||||||
if (!IsValidAirportType(type)) return INVALID_TOWN;
|
if (!IsAirportInformationAvailable(type)) return INVALID_TOWN;
|
||||||
|
|
||||||
return AirportGetNearestTown(GetAirport(type), tile)->index;
|
return AirportGetNearestTown(GetAirport(type), tile)->index;
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,12 +50,24 @@ public:
|
||||||
* Checks whether the given AirportType is valid and available.
|
* Checks whether the given AirportType is valid and available.
|
||||||
* @param type The AirportType to check.
|
* @param type The AirportType to check.
|
||||||
* @return True if and only if the AirportType is valid and available.
|
* @return True if and only if the AirportType is valid and available.
|
||||||
|
* @post return value == true -> IsAirportInformationAvailable returns true.
|
||||||
*/
|
*/
|
||||||
static bool IsValidAirportType(AirportType type);
|
static bool IsValidAirportType(AirportType type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Can you get information on this airport type? As opposed to
|
||||||
|
* IsValidAirportType this will return also return true when
|
||||||
|
* an airport type is no longer buildable.
|
||||||
|
* @param type The AirportType to check.
|
||||||
|
* @return True if and only if the AirportType is valid.
|
||||||
|
* @post return value == false -> IsValidAirportType returns false.
|
||||||
|
*/
|
||||||
|
static bool IsAirportInformationAvailable(AirportType type);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the cost to build this AirportType.
|
* Get the cost to build this AirportType.
|
||||||
* @param type The AirportType to check.
|
* @param type The AirportType to check.
|
||||||
|
* @pre AirportAvailable(type).
|
||||||
* @return The cost of building this AirportType.
|
* @return The cost of building this AirportType.
|
||||||
*/
|
*/
|
||||||
static Money GetPrice(AirportType type);
|
static Money GetPrice(AirportType type);
|
||||||
|
@ -79,6 +91,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* Get the width of this type of airport.
|
* Get the width of this type of airport.
|
||||||
* @param type The type of airport.
|
* @param type The type of airport.
|
||||||
|
* @pre IsAirportInformationAvailable(type).
|
||||||
* @return The width in tiles.
|
* @return The width in tiles.
|
||||||
*/
|
*/
|
||||||
static int32 GetAirportWidth(AirportType type);
|
static int32 GetAirportWidth(AirportType type);
|
||||||
|
@ -86,6 +99,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* Get the height of this type of airport.
|
* Get the height of this type of airport.
|
||||||
* @param type The type of airport.
|
* @param type The type of airport.
|
||||||
|
* @pre IsAirportInformationAvailable(type).
|
||||||
* @return The height in tiles.
|
* @return The height in tiles.
|
||||||
*/
|
*/
|
||||||
static int32 GetAirportHeight(AirportType type);
|
static int32 GetAirportHeight(AirportType type);
|
||||||
|
@ -93,6 +107,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* Get the coverage radius of this type of airport.
|
* Get the coverage radius of this type of airport.
|
||||||
* @param type The type of airport.
|
* @param type The type of airport.
|
||||||
|
* @pre IsAirportInformationAvailable(type).
|
||||||
* @return The radius in tiles.
|
* @return The radius in tiles.
|
||||||
*/
|
*/
|
||||||
static int32 GetAirportCoverageRadius(AirportType type);
|
static int32 GetAirportCoverageRadius(AirportType type);
|
||||||
|
@ -167,6 +182,7 @@ public:
|
||||||
* an airport at some tile.
|
* an airport at some tile.
|
||||||
* @param tile The tile to check.
|
* @param tile The tile to check.
|
||||||
* @param type The AirportType to check.
|
* @param type The AirportType to check.
|
||||||
|
* @pre IsAirportInformationAvailable(type).
|
||||||
* @return The TownID of the town closest to the tile.
|
* @return The TownID of the town closest to the tile.
|
||||||
*/
|
*/
|
||||||
static TownID GetNearestTown(TileIndex tile, AirportType type);
|
static TownID GetNearestTown(TileIndex tile, AirportType type);
|
||||||
|
|
|
@ -39,6 +39,7 @@ void SQAIAirport_Register(Squirrel *engine) {
|
||||||
SQAIAirport.DefSQConst(engine, AIAirport::PT_INVALID, "PT_INVALID");
|
SQAIAirport.DefSQConst(engine, AIAirport::PT_INVALID, "PT_INVALID");
|
||||||
|
|
||||||
SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsValidAirportType, "IsValidAirportType", 2, ".i");
|
SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsValidAirportType, "IsValidAirportType", 2, ".i");
|
||||||
|
SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsAirportInformationAvailable, "IsAirportInformationAvailable", 2, ".i");
|
||||||
SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetPrice, "GetPrice", 2, ".i");
|
SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetPrice, "GetPrice", 2, ".i");
|
||||||
SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsHangarTile, "IsHangarTile", 2, ".i");
|
SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsHangarTile, "IsHangarTile", 2, ".i");
|
||||||
SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsAirportTile, "IsAirportTile", 2, ".i");
|
SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsAirportTile, "IsAirportTile", 2, ".i");
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
* API additions:
|
* API additions:
|
||||||
* \li AIAbstractList::SORT_ASCENDING
|
* \li AIAbstractList::SORT_ASCENDING
|
||||||
* \li AIAbstractList::SORT_DESCENDING
|
* \li AIAbstractList::SORT_DESCENDING
|
||||||
|
* \li AIAirport::IsAirportInformationAvailable
|
||||||
* \li AICompany::GetPresidentGender
|
* \li AICompany::GetPresidentGender
|
||||||
* \li AICompany::SetPresidentGender
|
* \li AICompany::SetPresidentGender
|
||||||
* \li AIEngine::GetDesignDate
|
* \li AIEngine::GetDesignDate
|
||||||
|
@ -27,7 +28,7 @@
|
||||||
* Other changes:
|
* Other changes:
|
||||||
* \li AIs are now killed when they execute a DoCommand or Sleep at a time
|
* \li AIs are now killed when they execute a DoCommand or Sleep at a time
|
||||||
* they are not allowed to do so.
|
* they are not allowed to do so.
|
||||||
* \li When the API requests a string as parameter you can give ever squirrel
|
* \li When the API requests a string as parameter you can give every squirrel
|
||||||
* type and it'll be converted to a string
|
* type and it'll be converted to a string
|
||||||
* \li AIs can create subclasses of API classes and use API constants as part
|
* \li AIs can create subclasses of API classes and use API constants as part
|
||||||
* of their own constants
|
* of their own constants
|
||||||
|
|
|
@ -1303,6 +1303,7 @@ static void CrashAirplane(Vehicle *v)
|
||||||
CreateEffectVehicleRel(v, 4, 4, 8, EV_EXPLOSION_LARGE);
|
CreateEffectVehicleRel(v, 4, 4, 8, EV_EXPLOSION_LARGE);
|
||||||
|
|
||||||
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
|
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
|
||||||
|
v->MarkDirty();
|
||||||
|
|
||||||
uint amt = 2;
|
uint amt = 2;
|
||||||
if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) amt += v->cargo.Count();
|
if (IsCargoInClass(v->cargo_type, CC_PASSENGERS)) amt += v->cargo.Count();
|
||||||
|
|
|
@ -651,6 +651,7 @@ static void HandleBrokenRoadVeh(Vehicle *v)
|
||||||
|
|
||||||
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
|
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
|
||||||
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
|
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
|
||||||
|
v->MarkDirty();
|
||||||
|
|
||||||
if (!PlayVehicleSound(v, VSE_BREAKDOWN)) {
|
if (!PlayVehicleSound(v, VSE_BREAKDOWN)) {
|
||||||
SndPlayVehicleFx((_settings_game.game_creation.landscape != LT_TOYLAND) ?
|
SndPlayVehicleFx((_settings_game.game_creation.landscape != LT_TOYLAND) ?
|
||||||
|
@ -667,6 +668,7 @@ static void HandleBrokenRoadVeh(Vehicle *v)
|
||||||
if (--v->breakdown_delay == 0) {
|
if (--v->breakdown_delay == 0) {
|
||||||
v->breakdown_ctr = 0;
|
v->breakdown_ctr = 0;
|
||||||
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
|
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
|
||||||
|
v->MarkDirty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -551,6 +551,9 @@ public:
|
||||||
GameSettings *opt_ptr = (_game_mode == GM_MENU) ? &_settings_newgame : &_settings_game;
|
GameSettings *opt_ptr = (_game_mode == GM_MENU) ? &_settings_newgame : &_settings_game;
|
||||||
|
|
||||||
uint i;
|
uint i;
|
||||||
|
GetSettingFromName("difficulty.diff_level", &i);
|
||||||
|
DoCommandP(0, i, this->opt_mod_temp.difficulty.diff_level, CMD_CHANGE_SETTING);
|
||||||
|
|
||||||
const SettingDesc *sd = GetSettingFromName("difficulty.max_no_competitors", &i);
|
const SettingDesc *sd = GetSettingFromName("difficulty.max_no_competitors", &i);
|
||||||
for (uint btn = 0; btn != GAME_DIFFICULTY_NUM; btn++, sd++) {
|
for (uint btn = 0; btn != GAME_DIFFICULTY_NUM; btn++, sd++) {
|
||||||
int32 new_val = (int32)ReadValue(GetVariableAddress(&this->opt_mod_temp, &sd->save), sd->save.conv);
|
int32 new_val = (int32)ReadValue(GetVariableAddress(&this->opt_mod_temp, &sd->save), sd->save.conv);
|
||||||
|
@ -560,9 +563,6 @@ public:
|
||||||
DoCommandP(0, i + btn, new_val, CMD_CHANGE_SETTING);
|
DoCommandP(0, i + btn, new_val, CMD_CHANGE_SETTING);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GetSettingFromName("difficulty.diff_level", &i);
|
|
||||||
DoCommandP(0, i, this->opt_mod_temp.difficulty.diff_level, CMD_CHANGE_SETTING);
|
|
||||||
delete this;
|
delete this;
|
||||||
/* If we are in the editor, we should reload the economy.
|
/* If we are in the editor, we should reload the economy.
|
||||||
* This way when you load a game, the max loan and interest rate
|
* This way when you load a game, the max loan and interest rate
|
||||||
|
|
|
@ -189,6 +189,7 @@ static void HandleBrokenShip(Vehicle *v)
|
||||||
|
|
||||||
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
|
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
|
||||||
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
|
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
|
||||||
|
v->MarkDirty();
|
||||||
|
|
||||||
if (!PlayVehicleSound(v, VSE_BREAKDOWN)) {
|
if (!PlayVehicleSound(v, VSE_BREAKDOWN)) {
|
||||||
SndPlayVehicleFx((_settings_game.game_creation.landscape != LT_TOYLAND) ?
|
SndPlayVehicleFx((_settings_game.game_creation.landscape != LT_TOYLAND) ?
|
||||||
|
@ -205,6 +206,7 @@ static void HandleBrokenShip(Vehicle *v)
|
||||||
if (!--v->breakdown_delay) {
|
if (!--v->breakdown_delay) {
|
||||||
v->breakdown_ctr = 0;
|
v->breakdown_ctr = 0;
|
||||||
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
|
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
|
||||||
|
v->MarkDirty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1061,6 +1061,15 @@ CommandCost CmdMoveRailVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, u
|
||||||
if (dst_len < 0) return_cmd_error(STR_881A_TRAINS_CAN_ONLY_BE_ALTERED);
|
if (dst_len < 0) return_cmd_error(STR_881A_TRAINS_CAN_ONLY_BE_ALTERED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (src_head == src && !HasBit(p2, 0)) {
|
||||||
|
/* Moving of a *single* vehicle at the front of the train.
|
||||||
|
* If the next vehicle is an engine a new train will be created
|
||||||
|
* instead of removing a vehicle from a free chain. The newly
|
||||||
|
* created train may not be too long. */
|
||||||
|
const Vehicle *u = GetNextVehicle(src_head);
|
||||||
|
if (u != NULL && IsTrainEngine(u) && (src_len - 1) > max_len) return_cmd_error(STR_8819_TRAIN_TOO_LONG);
|
||||||
|
}
|
||||||
|
|
||||||
/* We are moving between rows, so only count the wagons from the source
|
/* We are moving between rows, so only count the wagons from the source
|
||||||
* row that are being moved. */
|
* row that are being moved. */
|
||||||
if (HasBit(p2, 0)) {
|
if (HasBit(p2, 0)) {
|
||||||
|
@ -4048,6 +4057,7 @@ static void HandleBrokenTrain(Vehicle *v)
|
||||||
|
|
||||||
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
|
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
|
||||||
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
|
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
|
||||||
|
v->MarkDirty();
|
||||||
|
|
||||||
if (!PlayVehicleSound(v, VSE_BREAKDOWN)) {
|
if (!PlayVehicleSound(v, VSE_BREAKDOWN)) {
|
||||||
SndPlayVehicleFx((_settings_game.game_creation.landscape != LT_TOYLAND) ?
|
SndPlayVehicleFx((_settings_game.game_creation.landscape != LT_TOYLAND) ?
|
||||||
|
@ -4064,6 +4074,7 @@ static void HandleBrokenTrain(Vehicle *v)
|
||||||
if (!--v->breakdown_delay) {
|
if (!--v->breakdown_delay) {
|
||||||
v->breakdown_ctr = 0;
|
v->breakdown_ctr = 0;
|
||||||
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
|
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
|
||||||
|
v->MarkDirty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1734,6 +1734,7 @@ void StopAllVehicles()
|
||||||
v->vehstatus |= VS_STOPPED;
|
v->vehstatus |= VS_STOPPED;
|
||||||
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
|
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
|
||||||
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
|
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
|
||||||
|
v->MarkDirty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -115,6 +115,7 @@ CommandCost CmdStartStopVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
||||||
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
|
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
|
||||||
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
|
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
|
||||||
InvalidateWindowClasses(vehicle_list[v->type]);
|
InvalidateWindowClasses(vehicle_list[v->type]);
|
||||||
|
v->MarkDirty();
|
||||||
}
|
}
|
||||||
return CommandCost();
|
return CommandCost();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue