diff -ru openttd-1.2.3/bin/ai/regression/regression.nut openttd-1.2.3mod/bin/ai/regression/regression.nut --- openttd-1.2.3/bin/ai/regression/regression.nut 2012-10-31 22:39:02.000000000 +0100 +++ openttd-1.2.3mod/bin/ai/regression/regression.nut 2012-12-04 21:56:43.000000000 +0100 @@ -552,6 +552,7 @@ print(" BT_CLEAR_ROCKY: " + AITile.GetBuildCost(AITile.BT_CLEAR_ROCKY)); print(" BT_CLEAR_FIELDS: " + AITile.GetBuildCost(AITile.BT_CLEAR_FIELDS)); print(" BT_CLEAR_HOUSE: " + AITile.GetBuildCost(AITile.BT_CLEAR_HOUSE)); + print(" BT_CLEAR_RIVER: " + AITile.GetBuildCost(AITile.BT_CLEAR_RIVER)); } function cost_callback(old_path, new_tile, new_direction, self) { if (old_path == null) return 0; return old_path.GetCost() + 1; } diff -ru openttd-1.2.3/src/script/api/ai/ai_tile.hpp.sq openttd-1.2.3mod/src/script/api/ai/ai_tile.hpp.sq --- openttd-1.2.3/src/script/api/ai/ai_tile.hpp.sq 2012-10-31 22:38:56.000000000 +0100 +++ openttd-1.2.3mod/src/script/api/ai/ai_tile.hpp.sq 2012-12-04 21:49:01.000000000 +0100 @@ -66,6 +66,7 @@ SQAITile.DefSQConst(engine, ScriptTile::BT_CLEAR_ROCKY, "BT_CLEAR_ROCKY"); SQAITile.DefSQConst(engine, ScriptTile::BT_CLEAR_FIELDS, "BT_CLEAR_FIELDS"); SQAITile.DefSQConst(engine, ScriptTile::BT_CLEAR_HOUSE, "BT_CLEAR_HOUSE"); + SQAITile.DefSQConst(engine, ScriptTile::BT_CLEAR_RIVER, "BT_CLEAR_RIVER"); ScriptError::RegisterErrorMap(STR_ERROR_ALREADY_AT_SEA_LEVEL, ScriptTile::ERR_TILE_TOO_HIGH); ScriptError::RegisterErrorMap(STR_ERROR_ALREADY_AT_SEA_LEVEL, ScriptTile::ERR_TILE_TOO_LOW); @@ -80,6 +81,7 @@ SQAITile.DefSQStaticMethod(engine, &ScriptTile::IsBuildable, "IsBuildable", 2, ".i"); SQAITile.DefSQStaticMethod(engine, &ScriptTile::IsBuildableRectangle, "IsBuildableRectangle", 4, ".iii"); SQAITile.DefSQStaticMethod(engine, &ScriptTile::IsWaterTile, "IsWaterTile", 2, ".i"); + SQAITile.DefSQStaticMethod(engine, &ScriptTile::IsRiverTile, "IsRiverTile", 2, ".i"); SQAITile.DefSQStaticMethod(engine, &ScriptTile::IsCoastTile, "IsCoastTile", 2, ".i"); SQAITile.DefSQStaticMethod(engine, &ScriptTile::IsStationTile, "IsStationTile", 2, ".i"); SQAITile.DefSQStaticMethod(engine, &ScriptTile::IsSteepSlope, "IsSteepSlope", 2, ".i"); diff -ru openttd-1.2.3/src/script/api/game/game_tile.hpp.sq openttd-1.2.3mod/src/script/api/game/game_tile.hpp.sq --- openttd-1.2.3/src/script/api/game/game_tile.hpp.sq 2012-10-31 22:38:55.000000000 +0100 +++ openttd-1.2.3mod/src/script/api/game/game_tile.hpp.sq 2012-12-04 21:49:56.000000000 +0100 @@ -66,6 +66,7 @@ SQGSTile.DefSQConst(engine, ScriptTile::BT_CLEAR_ROCKY, "BT_CLEAR_ROCKY"); SQGSTile.DefSQConst(engine, ScriptTile::BT_CLEAR_FIELDS, "BT_CLEAR_FIELDS"); SQGSTile.DefSQConst(engine, ScriptTile::BT_CLEAR_HOUSE, "BT_CLEAR_HOUSE"); + SQGSTile.DefSQConst(engine, ScriptTile::BT_CLEAR_RIVER, "BT_CLEAR_RIVER"); ScriptError::RegisterErrorMap(STR_ERROR_ALREADY_AT_SEA_LEVEL, ScriptTile::ERR_TILE_TOO_HIGH); ScriptError::RegisterErrorMap(STR_ERROR_ALREADY_AT_SEA_LEVEL, ScriptTile::ERR_TILE_TOO_LOW); @@ -80,6 +81,7 @@ SQGSTile.DefSQStaticMethod(engine, &ScriptTile::IsBuildable, "IsBuildable", 2, ".i"); SQGSTile.DefSQStaticMethod(engine, &ScriptTile::IsBuildableRectangle, "IsBuildableRectangle", 4, ".iii"); SQGSTile.DefSQStaticMethod(engine, &ScriptTile::IsWaterTile, "IsWaterTile", 2, ".i"); + SQGSTile.DefSQStaticMethod(engine, &ScriptTile::IsRiverTile, "IsRiverTile", 2, ".i"); SQGSTile.DefSQStaticMethod(engine, &ScriptTile::IsCoastTile, "IsCoastTile", 2, ".i"); SQGSTile.DefSQStaticMethod(engine, &ScriptTile::IsStationTile, "IsStationTile", 2, ".i"); SQGSTile.DefSQStaticMethod(engine, &ScriptTile::IsSteepSlope, "IsSteepSlope", 2, ".i"); diff -ru openttd-1.2.3/src/script/api/script_tile.cpp openttd-1.2.3mod/src/script/api/script_tile.cpp --- openttd-1.2.3/src/script/api/script_tile.cpp 2012-10-31 22:38:58.000000000 +0100 +++ openttd-1.2.3mod/src/script/api/script_tile.cpp 2012-12-04 21:39:30.000000000 +0100 @@ -64,6 +64,13 @@ return ::IsTileType(tile, MP_WATER) && !::IsCoast(tile); } +/* static */ bool ScriptTile::IsRiverTile(TileIndex tile) +{ + if (!::IsValidTile(tile)) return false; + + return ::IsTileType(tile, MP_WATER) && ::IsRiver(tile); +} + /* static */ bool ScriptTile::IsCoastTile(TileIndex tile) { if (!::IsValidTile(tile)) return false; @@ -302,6 +309,7 @@ case BT_CLEAR_ROCKY: return ::GetPrice(PR_CLEAR_ROCKS, 1, NULL); case BT_CLEAR_FIELDS: return ::GetPrice(PR_CLEAR_FIELDS, 1, NULL); case BT_CLEAR_HOUSE: return ::GetPrice(PR_CLEAR_HOUSE, 1, NULL); + case BT_CLEAR_RIVER: return ::GetPrice(PR_CLEAR_WATER, 1, NULL); default: return -1; } } diff -ru openttd-1.2.3/src/script/api/script_tile.hpp openttd-1.2.3mod/src/script/api/script_tile.hpp --- openttd-1.2.3/src/script/api/script_tile.hpp 2012-10-31 22:38:58.000000000 +0100 +++ openttd-1.2.3mod/src/script/api/script_tile.hpp 2012-12-04 21:40:23.000000000 +0100 @@ -118,6 +118,7 @@ BT_CLEAR_ROCKY, ///< Clear a tile with rocks BT_CLEAR_FIELDS, ///< Clear a tile with farm fields BT_CLEAR_HOUSE, ///< Clear a tile with a house + BT_CLEAR_RIVER, ///< Clear a tile with a river }; /** @@ -153,6 +154,14 @@ static bool IsWaterTile(TileIndex tile); /** + * Checks whether the given tile is actually a river tile. + * @param tile The tile to check on. + * @pre ScriptMap::IsValidTile(tile). + * @return True if and only if the tile is a river tile. + */ + static bool IsRiverTile(TileIndex tile); + + /** * Checks whether the given tile is actually a coast tile. * @param tile The tile to check. * @pre ScriptMap::IsValidTile(tile).