Merge branch 'master' into jgrpp

# Conflicts:
#	cmake/CompileFlags.cmake
#	src/aircraft_cmd.cpp
#	src/blitter/32bpp_anim.cpp
#	src/cargopacket.cpp
#	src/cheat_gui.cpp
#	src/company_cmd.cpp
#	src/company_gui.cpp
#	src/core/pool_func.hpp
#	src/date.cpp
#	src/economy.cpp
#	src/error_gui.cpp
#	src/ground_vehicle.cpp
#	src/ground_vehicle.hpp
#	src/group_gui.cpp
#	src/industry_cmd.cpp
#	src/lang/dutch.txt
#	src/lang/french.txt
#	src/lang/german.txt
#	src/linkgraph/linkgraph_gui.cpp
#	src/linkgraph/mcf.cpp
#	src/network/network_content.cpp
#	src/network/network_server.cpp
#	src/network/network_udp.cpp
#	src/newgrf_engine.cpp
#	src/newgrf_station.cpp
#	src/order_cmd.cpp
#	src/order_gui.cpp
#	src/pathfinder/follow_track.hpp
#	src/pathfinder/yapf/yapf_common.hpp
#	src/saveload/saveload.cpp
#	src/settings_gui.cpp
#	src/station_cmd.cpp
#	src/station_kdtree.h
#	src/string_func.h
#	src/table/settings.ini
#	src/tgp.cpp
#	src/timetable_cmd.cpp
#	src/timetable_gui.cpp
#	src/toolbar_gui.cpp
#	src/town_cmd.cpp
#	src/train_cmd.cpp
#	src/train_gui.cpp
#	src/tree_gui.cpp
#	src/tunnelbridge_cmd.cpp
#	src/vehicle.cpp
#	src/vehicle_gui.cpp
#	src/video/sdl2_v.cpp
#	src/video/sdl_v.cpp
#	src/video/win32_v.cpp
#	src/viewport.cpp
#	src/viewport_sprite_sorter_sse4.cpp
#	src/window.cpp
This commit is contained in:
Jonathan G Rennison
2021-02-01 17:07:34 +00:00
290 changed files with 2135 additions and 1577 deletions

View File

@@ -732,14 +732,22 @@ static uint32 VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *object,
case 0x4A:
switch (v->type) {
case VEH_TRAIN: {
if (Train::From(v)->IsVirtual()) return 0x1FF;
if (Train::From(v)->IsVirtual()) {
return 0x1FF | ((GetRailTypeInfo(Train::From(v)->railtype)->flags & RTFB_CATENARY) ? 0x200 : 0);
}
RailType rt = GetTileRailTypeByTrackBit(v->tile, Train::From(v)->track);
return (HasPowerOnRail(Train::From(v)->railtype, rt) ? 0x100 : 0) | GetReverseRailTypeTranslation(rt, object->ro.grffile);
const RailtypeInfo *rti = GetRailTypeInfo(rt);
return ((rti->flags & RTFB_CATENARY) ? 0x200 : 0) |
(HasPowerOnRail(Train::From(v)->railtype, rt) ? 0x100 : 0) |
GetReverseRailTypeTranslation(rt, object->ro.grffile);
}
case VEH_ROAD: {
RoadType rt = GetRoadType(v->tile, GetRoadTramType(RoadVehicle::From(v)->roadtype));
return 0x100 | GetReverseRoadTypeTranslation(rt, object->ro.grffile);
const RoadTypeInfo *rti = GetRoadTypeInfo(rt);
return ((rti->flags & ROTFB_CATENARY) ? 0x200 : 0) |
0x100 |
GetReverseRoadTypeTranslation(rt, object->ro.grffile);
}
default:
@@ -832,6 +840,36 @@ static uint32 VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *object,
return ret;
}
case 0x63:
/* Tile compatibility wrt. arbitrary track-type
* Format:
* bit 0: Type 'parameter' is known.
* bit 1: Engines with type 'parameter' are compatible with this tile.
* bit 2: Engines with type 'parameter' are powered on this tile.
* bit 3: This tile has type 'parameter' or it is considered equivalent (alternate labels).
*/
switch (v->type) {
case VEH_TRAIN: {
RailType param_type = GetRailTypeTranslation(parameter, object->ro.grffile);
if (param_type == INVALID_RAILTYPE) return 0x00;
RailType tile_type = GetTileRailType(v->tile);
if (tile_type == param_type) return 0x0F;
return (HasPowerOnRail(param_type, tile_type) ? 0x04 : 0x00) |
(IsCompatibleRail(param_type, tile_type) ? 0x02 : 0x00) |
0x01;
}
case VEH_ROAD: {
RoadTramType rtt = GetRoadTramType(RoadVehicle::From(v)->roadtype);
RoadType param_type = GetRoadTypeTranslation(rtt, parameter, object->ro.grffile);
if (param_type == INVALID_ROADTYPE) return 0x00;
RoadType tile_type = GetRoadType(v->tile, rtt);
if (tile_type == param_type) return 0x0F;
return (HasPowerOnRoad(param_type, tile_type) ? 0x06 : 0x00) |
0x01;
}
default: return 0x00;
}
case 0xFE:
case 0xFF: {
uint16 modflags = 0;
@@ -1075,8 +1113,8 @@ static uint32 VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *object,
if (totalsets == 0) return nullptr;
uint set = (v->cargo.StoredCount() * totalsets) / max((uint16)1, v->cargo_cap);
set = min(set, totalsets - 1);
uint set = (v->cargo.StoredCount() * totalsets) / std::max<uint16>(1u, v->cargo_cap);
set = std::min(set, totalsets - 1);
return in_motion ? group->loaded[set] : group->loading[set];
}