mirror of https://github.com/OpenTTD/OpenTTD
(svn r8455) -Codechange: Give a more meaningful name (railveh_type)to member flags of RailVehInfo, as well as changing the code to reflect the fact that it was not a flag but rather a one value only variable. Doing so, some evaluations have been simplified.
-Codechange: Add and use RAILVEH_SINGLEHEAD when railveh_type is set to 0, which was implicit before. -Cleanup: Remove some extraneous parenthesis.release/0.6
parent
e3b63e6d83
commit
0c45071bb0
|
@ -143,8 +143,8 @@ static EngineID AiChooseTrainToBuild(RailType railtype, int32 money, byte flag,
|
||||||
const Engine* e = GetEngine(i);
|
const Engine* e = GetEngine(i);
|
||||||
|
|
||||||
if (!IsCompatibleRail(rvi->railtype, railtype) ||
|
if (!IsCompatibleRail(rvi->railtype, railtype) ||
|
||||||
rvi->flags & RVI_WAGON ||
|
rvi->railveh_type == RAILVEH_WAGON ||
|
||||||
(rvi->flags & RVI_MULTIHEAD && flag & 1) ||
|
(rvi->railveh_type == RAILVEH_MULTIHEAD && flag & 1) ||
|
||||||
!HASBIT(e->player_avail, _current_player) ||
|
!HASBIT(e->player_avail, _current_player) ||
|
||||||
e->reliability < 0x8A3D) {
|
e->reliability < 0x8A3D) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -2366,7 +2366,7 @@ static EngineID AiFindBestWagon(CargoID cargo, RailType railtype)
|
||||||
const Engine* e = GetEngine(i);
|
const Engine* e = GetEngine(i);
|
||||||
|
|
||||||
if (!IsCompatibleRail(rvi->railtype, railtype) ||
|
if (!IsCompatibleRail(rvi->railtype, railtype) ||
|
||||||
!(rvi->flags & RVI_WAGON) ||
|
rvi->railveh_type != RAILVEH_WAGON ||
|
||||||
!HASBIT(e->player_avail, _current_player)) {
|
!HASBIT(e->player_avail, _current_player)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,7 +63,7 @@ static void train_engine_drawing_loop(int *x, int *y, int *pos, int *sel, Engine
|
||||||
if (!(ENGINE_AVAILABLE && show_outdated && RailVehInfo(i)->power && IsCompatibleRail(rvi->railtype, railtype))) {
|
if (!(ENGINE_AVAILABLE && show_outdated && RailVehInfo(i)->power && IsCompatibleRail(rvi->railtype, railtype))) {
|
||||||
if ((!IsCompatibleRail(rvi->railtype, railtype) && show_compatible)
|
if ((!IsCompatibleRail(rvi->railtype, railtype) && show_compatible)
|
||||||
|| (rvi->railtype != railtype && !show_compatible)
|
|| (rvi->railtype != railtype && !show_compatible)
|
||||||
|| !(rvi->flags & RVI_WAGON) != is_engine ||
|
|| (rvi->railveh_type != RAILVEH_WAGON) != is_engine ||
|
||||||
!HASBIT(e->player_avail, _local_player))
|
!HASBIT(e->player_avail, _local_player))
|
||||||
continue;
|
continue;
|
||||||
#if 0
|
#if 0
|
||||||
|
|
|
@ -187,8 +187,8 @@ static int CDECL TrainEnginePowerSorter(const void *a, const void *b)
|
||||||
const RailVehicleInfo *rvi_a = RailVehInfo(*(const EngineID*)a);
|
const RailVehicleInfo *rvi_a = RailVehInfo(*(const EngineID*)a);
|
||||||
const RailVehicleInfo *rvi_b = RailVehInfo(*(const EngineID*)b);
|
const RailVehicleInfo *rvi_b = RailVehInfo(*(const EngineID*)b);
|
||||||
|
|
||||||
int va = rvi_a->power << (rvi_a->flags & RVI_MULTIHEAD ? 1 : 0);
|
int va = rvi_a->power << (rvi_a->railveh_type == RAILVEH_MULTIHEAD ? 1 : 0);
|
||||||
int vb = rvi_b->power << (rvi_b->flags & RVI_MULTIHEAD ? 1 : 0);
|
int vb = rvi_b->power << (rvi_b->railveh_type == RAILVEH_MULTIHEAD ? 1 : 0);
|
||||||
int r = va - vb;
|
int r = va - vb;
|
||||||
|
|
||||||
return _internal_sort_order ? -r : r;
|
return _internal_sort_order ? -r : r;
|
||||||
|
@ -199,8 +199,8 @@ static int CDECL TrainEngineRunningCostSorter(const void *a, const void *b)
|
||||||
const RailVehicleInfo *rvi_a = RailVehInfo(*(const EngineID*)a);
|
const RailVehicleInfo *rvi_a = RailVehInfo(*(const EngineID*)a);
|
||||||
const RailVehicleInfo *rvi_b = RailVehInfo(*(const EngineID*)b);
|
const RailVehicleInfo *rvi_b = RailVehInfo(*(const EngineID*)b);
|
||||||
|
|
||||||
int va = rvi_a->running_cost_base * _price.running_rail[rvi_a->running_cost_class] * (rvi_a->flags & RVI_MULTIHEAD ? 2 : 1);
|
int va = rvi_a->running_cost_base * _price.running_rail[rvi_a->running_cost_class] * (rvi_a->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
|
||||||
int vb = rvi_b->running_cost_base * _price.running_rail[rvi_b->running_cost_class] * (rvi_b->flags & RVI_MULTIHEAD ? 2 : 1);
|
int vb = rvi_b->running_cost_base * _price.running_rail[rvi_b->running_cost_class] * (rvi_b->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
|
||||||
int r = va - vb;
|
int r = va - vb;
|
||||||
|
|
||||||
return _internal_sort_order ? -r : r;
|
return _internal_sort_order ? -r : r;
|
||||||
|
@ -228,8 +228,8 @@ static int CDECL TrainEnginesThenWagonsSorter(const void *a, const void *b)
|
||||||
{
|
{
|
||||||
EngineID va = *(const EngineID*)a;
|
EngineID va = *(const EngineID*)a;
|
||||||
EngineID vb = *(const EngineID*)b;
|
EngineID vb = *(const EngineID*)b;
|
||||||
int val_a = ((RailVehInfo(va)->flags & RVI_WAGON) != 0) ? 1 : 0;
|
int val_a = (RailVehInfo(va)->railveh_type != RAILVEH_WAGON ? 1 : 0);
|
||||||
int val_b = ((RailVehInfo(vb)->flags & RVI_WAGON) != 0) ? 1 : 0;
|
int val_b = (RailVehInfo(vb)->railveh_type != RAILVEH_WAGON ? 1 : 0);
|
||||||
int r = val_a - val_b;
|
int r = val_a - val_b;
|
||||||
|
|
||||||
/* Use EngineID to sort instead since we want consistent sorting */
|
/* Use EngineID to sort instead since we want consistent sorting */
|
||||||
|
@ -388,7 +388,7 @@ static int DrawRailWagonPurchaseInfo(int x, int y, EngineID engine_number, const
|
||||||
/* Draw locomotive specific details */
|
/* Draw locomotive specific details */
|
||||||
static int DrawRailEnginePurchaseInfo(int x, int y, EngineID engine_number, const RailVehicleInfo *rvi)
|
static int DrawRailEnginePurchaseInfo(int x, int y, EngineID engine_number, const RailVehicleInfo *rvi)
|
||||||
{
|
{
|
||||||
int multihead = (rvi->flags&RVI_MULTIHEAD?1:0);
|
int multihead = (rvi->railveh_type == RAILVEH_MULTIHEAD ? 1 : 0);
|
||||||
|
|
||||||
/* Purchase Cost - Engine weight */
|
/* Purchase Cost - Engine weight */
|
||||||
SetDParam(0, rvi->base_cost * (_price.build_railvehicle >> 3) >> 5);
|
SetDParam(0, rvi->base_cost * (_price.build_railvehicle >> 3) >> 5);
|
||||||
|
@ -529,7 +529,7 @@ void DrawVehiclePurchaseInfo(int x, int y, uint w, EngineID engine_number)
|
||||||
|
|
||||||
refitable = (EngInfo(engine_number)->refit_mask != 0) && (rvi->capacity > 0);
|
refitable = (EngInfo(engine_number)->refit_mask != 0) && (rvi->capacity > 0);
|
||||||
|
|
||||||
if (rvi->flags & RVI_WAGON) {
|
if (rvi->railveh_type == RAILVEH_WAGON) {
|
||||||
y = DrawRailWagonPurchaseInfo(x, y, engine_number, rvi);
|
y = DrawRailWagonPurchaseInfo(x, y, engine_number, rvi);
|
||||||
} else {
|
} else {
|
||||||
y = DrawRailEnginePurchaseInfo(x, y, engine_number, rvi);
|
y = DrawRailEnginePurchaseInfo(x, y, engine_number, rvi);
|
||||||
|
@ -540,7 +540,7 @@ void DrawVehiclePurchaseInfo(int x, int y, uint w, EngineID engine_number)
|
||||||
SetDParam(0, CT_INVALID);
|
SetDParam(0, CT_INVALID);
|
||||||
SetDParam(2, STR_EMPTY);
|
SetDParam(2, STR_EMPTY);
|
||||||
} else {
|
} else {
|
||||||
int multihead = (rvi->flags & RVI_MULTIHEAD ? 1 : 0);
|
int multihead = (rvi->railveh_type == RAILVEH_MULTIHEAD ? 1 : 0);
|
||||||
|
|
||||||
SetDParam(0, rvi->cargo_type);
|
SetDParam(0, rvi->cargo_type);
|
||||||
SetDParam(1, (rvi->capacity * (CountArticulatedParts(engine_number) + 1)) << multihead);
|
SetDParam(1, (rvi->capacity * (CountArticulatedParts(engine_number) + 1)) << multihead);
|
||||||
|
@ -566,7 +566,7 @@ void DrawVehiclePurchaseInfo(int x, int y, uint w, EngineID engine_number)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Draw details, that applies to all types except rail wagons */
|
/* Draw details, that applies to all types except rail wagons */
|
||||||
if (e->type != VEH_Train || !(RailVehInfo(engine_number)->flags & RVI_WAGON)) {
|
if (e->type != VEH_Train || RailVehInfo(engine_number)->railveh_type != RAILVEH_WAGON) {
|
||||||
/* Design date - Life length */
|
/* Design date - Life length */
|
||||||
SetDParam(0, ymd.year);
|
SetDParam(0, ymd.year);
|
||||||
SetDParam(1, e->lifelength);
|
SetDParam(1, e->lifelength);
|
||||||
|
@ -607,7 +607,7 @@ static void GenerateBuildTrainList(Window *w)
|
||||||
if (!IsEngineBuildable(eid, VEH_Train, _local_player)) continue;
|
if (!IsEngineBuildable(eid, VEH_Train, _local_player)) continue;
|
||||||
|
|
||||||
EngList_Add(&bv->eng_list, eid);
|
EngList_Add(&bv->eng_list, eid);
|
||||||
if ((rvi->flags & RVI_WAGON) == 0) {
|
if (rvi->railveh_type != RAILVEH_WAGON) {
|
||||||
num_engines++;
|
num_engines++;
|
||||||
} else {
|
} else {
|
||||||
num_wagons++;
|
num_wagons++;
|
||||||
|
@ -826,7 +826,7 @@ static void BuildVehicleClickEvent(Window *w, WindowEvent *e)
|
||||||
if (sel_eng != INVALID_ENGINE) {
|
if (sel_eng != INVALID_ENGINE) {
|
||||||
switch (bv->vehicle_type) {
|
switch (bv->vehicle_type) {
|
||||||
case VEH_Train:
|
case VEH_Train:
|
||||||
DoCommandP(w->window_number, sel_eng, 0, (RailVehInfo(sel_eng)->flags & RVI_WAGON) ? CcBuildWagon : CcBuildLoco,
|
DoCommandP(w->window_number, sel_eng, 0, (RailVehInfo(sel_eng)->railveh_type == RAILVEH_WAGON) ? CcBuildWagon : CcBuildLoco,
|
||||||
CMD_BUILD_RAIL_VEHICLE | CMD_MSG(STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE));
|
CMD_BUILD_RAIL_VEHICLE | CMD_MSG(STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE));
|
||||||
break;
|
break;
|
||||||
case VEH_Road:
|
case VEH_Road:
|
||||||
|
|
|
@ -285,7 +285,7 @@ int32 CmdWantEnginePreview(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
// Determine if an engine type is a wagon (and not a loco)
|
// Determine if an engine type is a wagon (and not a loco)
|
||||||
static bool IsWagon(EngineID index)
|
static bool IsWagon(EngineID index)
|
||||||
{
|
{
|
||||||
return index < NUM_TRAIN_ENGINES && RailVehInfo(index)->flags & RVI_WAGON;
|
return index < NUM_TRAIN_ENGINES && RailVehInfo(index)->railveh_type == RAILVEH_WAGON;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void NewVehicleAvailable(Engine *e)
|
static void NewVehicleAvailable(Engine *e)
|
||||||
|
|
13
src/engine.h
13
src/engine.h
|
@ -9,9 +9,15 @@
|
||||||
#include "rail.h"
|
#include "rail.h"
|
||||||
#include "sound.h"
|
#include "sound.h"
|
||||||
|
|
||||||
|
enum RailVehicleTypes {
|
||||||
|
RAILVEH_SINGLEHEAD,
|
||||||
|
RAILVEH_MULTIHEAD,
|
||||||
|
RAILVEH_WAGON,
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct RailVehicleInfo {
|
typedef struct RailVehicleInfo {
|
||||||
byte image_index;
|
byte image_index;
|
||||||
byte flags; /* 1=multihead engine, 2=wagon */
|
RailVehicleTypes railveh_type;
|
||||||
byte base_cost;
|
byte base_cost;
|
||||||
RailTypeByte railtype;
|
RailTypeByte railtype;
|
||||||
uint16 max_speed;
|
uint16 max_speed;
|
||||||
|
@ -117,11 +123,6 @@ enum {
|
||||||
EF_RAIL_IS_MU = 2, ///< Rail vehicle is a multiple-unit (DMU/EMU)
|
EF_RAIL_IS_MU = 2, ///< Rail vehicle is a multiple-unit (DMU/EMU)
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
|
||||||
RVI_MULTIHEAD = 1,
|
|
||||||
RVI_WAGON = 2,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
NUM_VEHICLE_TYPES = 6
|
NUM_VEHICLE_TYPES = 6
|
||||||
};
|
};
|
||||||
|
|
|
@ -122,7 +122,7 @@ void ShowEnginePreviewWindow(EngineID engine)
|
||||||
static void DrawTrainEngineInfo(EngineID engine, int x, int y, int maxw)
|
static void DrawTrainEngineInfo(EngineID engine, int x, int y, int maxw)
|
||||||
{
|
{
|
||||||
const RailVehicleInfo *rvi = RailVehInfo(engine);
|
const RailVehicleInfo *rvi = RailVehInfo(engine);
|
||||||
uint multihead = (rvi->flags & RVI_MULTIHEAD) ? 1 : 0;
|
uint multihead = (rvi->railveh_type == RAILVEH_MULTIHEAD) ? 1 : 0;
|
||||||
|
|
||||||
SetDParam(0, (_price.build_railvehicle >> 3) * rvi->base_cost >> 5);
|
SetDParam(0, (_price.build_railvehicle >> 3) * rvi->base_cost >> 5);
|
||||||
SetDParam(2, rvi->max_speed);
|
SetDParam(2, rvi->max_speed);
|
||||||
|
|
|
@ -215,10 +215,10 @@ static void dewagonize(int condition, int engine)
|
||||||
|
|
||||||
if (condition != 0) {
|
if (condition != 0) {
|
||||||
ei->unk2 &= ~0x80;
|
ei->unk2 &= ~0x80;
|
||||||
rvi->flags &= ~2;
|
rvi->railveh_type = RAILVEH_SINGLEHEAD;
|
||||||
} else {
|
} else {
|
||||||
ei->unk2 |= 0x80;
|
ei->unk2 |= 0x80;
|
||||||
rvi->flags |= 2;
|
rvi->railveh_type = RAILVEH_WAGON;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -265,7 +265,7 @@ static bool RailVehicleChangeInfo(uint engine, int numinfo, int prop, byte **buf
|
||||||
FOR_EACH_OBJECT {
|
FOR_EACH_OBJECT {
|
||||||
uint16 power = grf_load_word(&buf);
|
uint16 power = grf_load_word(&buf);
|
||||||
|
|
||||||
if (rvi[i].flags & RVI_MULTIHEAD) power /= 2;
|
if (rvi[i].railveh_type == RAILVEH_MULTIHEAD) power /= 2;
|
||||||
|
|
||||||
rvi[i].power = power;
|
rvi[i].power = power;
|
||||||
dewagonize(power, engine + i);
|
dewagonize(power, engine + i);
|
||||||
|
@ -276,7 +276,7 @@ static bool RailVehicleChangeInfo(uint engine, int numinfo, int prop, byte **buf
|
||||||
FOR_EACH_OBJECT {
|
FOR_EACH_OBJECT {
|
||||||
uint8 runcostfact = grf_load_byte(&buf);
|
uint8 runcostfact = grf_load_byte(&buf);
|
||||||
|
|
||||||
if (rvi[i].flags & RVI_MULTIHEAD) runcostfact /= 2;
|
if (rvi[i].railveh_type == RAILVEH_MULTIHEAD) runcostfact /= 2;
|
||||||
|
|
||||||
rvi[i].running_cost_base = runcostfact;
|
rvi[i].running_cost_base = runcostfact;
|
||||||
}
|
}
|
||||||
|
@ -315,19 +315,19 @@ static bool RailVehicleChangeInfo(uint engine, int numinfo, int prop, byte **buf
|
||||||
uint8 dual = grf_load_byte(&buf);
|
uint8 dual = grf_load_byte(&buf);
|
||||||
|
|
||||||
if (dual != 0) {
|
if (dual != 0) {
|
||||||
if (!(rvi[i].flags & RVI_MULTIHEAD)) {
|
if (rvi[i].railveh_type != RAILVEH_MULTIHEAD) {
|
||||||
// adjust power and running cost if needed
|
// adjust power and running cost if needed
|
||||||
rvi[i].power /= 2;
|
rvi[i].power /= 2;
|
||||||
rvi[i].running_cost_base /= 2;
|
rvi[i].running_cost_base /= 2;
|
||||||
}
|
}
|
||||||
rvi[i].flags |= RVI_MULTIHEAD;
|
rvi[i].railveh_type = RAILVEH_MULTIHEAD;
|
||||||
} else {
|
} else {
|
||||||
if (rvi[i].flags & RVI_MULTIHEAD) {
|
if (rvi[i].railveh_type == RAILVEH_MULTIHEAD) {
|
||||||
// adjust power and running cost if needed
|
// adjust power and running cost if needed
|
||||||
rvi[i].power *= 2;
|
rvi[i].power *= 2;
|
||||||
rvi[i].running_cost_base *= 2;
|
rvi[i].running_cost_base *= 2;
|
||||||
}
|
}
|
||||||
rvi[i].flags &= ~RVI_MULTIHEAD;
|
rvi[i].railveh_type = RAILVEH_SINGLEHEAD;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -3588,7 +3588,7 @@ static void CalculateRefitMasks(void)
|
||||||
if (xor_mask == 0 && (
|
if (xor_mask == 0 && (
|
||||||
GetEngine(engine)->type != VEH_Train || (
|
GetEngine(engine)->type != VEH_Train || (
|
||||||
RailVehInfo(engine)->capacity != 0 &&
|
RailVehInfo(engine)->capacity != 0 &&
|
||||||
!(RailVehInfo(engine)->flags & RVI_WAGON)
|
RailVehInfo(engine)->railveh_type != RAILVEH_WAGON
|
||||||
)
|
)
|
||||||
)) {
|
)) {
|
||||||
xor_mask = _default_refitmasks[GetEngine(engine)->type - VEH_Train];
|
xor_mask = _default_refitmasks[GetEngine(engine)->type - VEH_Train];
|
||||||
|
@ -3801,3 +3801,4 @@ void LoadNewGRF(uint load_index, uint file_index)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -656,7 +656,7 @@ byte GetPlayerRailtypes(PlayerID p)
|
||||||
(HASBIT(e->player_avail, p) || _date >= e->intro_date + 365)) {
|
(HASBIT(e->player_avail, p) || _date >= e->intro_date + 365)) {
|
||||||
const RailVehicleInfo *rvi = RailVehInfo(i);
|
const RailVehicleInfo *rvi = RailVehInfo(i);
|
||||||
|
|
||||||
if (!(rvi->flags & RVI_WAGON)) {
|
if (rvi->railveh_type != RAILVEH_WAGON) {
|
||||||
assert(rvi->railtype < RAILTYPE_END);
|
assert(rvi->railtype < RAILTYPE_END);
|
||||||
SETBIT(rt, rvi->railtype);
|
SETBIT(rt, rvi->railtype);
|
||||||
}
|
}
|
||||||
|
|
|
@ -329,8 +329,9 @@ const EngineInfo orig_engine_info[] = {
|
||||||
* Tractive effort coefficient by default is the same as TTDPatch, 0.30*256=76
|
* Tractive effort coefficient by default is the same as TTDPatch, 0.30*256=76
|
||||||
*/
|
*/
|
||||||
#define RVI(a, b, c, d, e, f, g, h, i, j, k, l) { a, b, c, {l}, d, e, f, g, h, h, i, j, k, 0, 0, 0, 0, 76, 0 }
|
#define RVI(a, b, c, d, e, f, g, h, i, j, k, l) { a, b, c, {l}, d, e, f, g, h, h, i, j, k, 0, 0, 0, 0, 76, 0 }
|
||||||
#define M RVI_MULTIHEAD
|
#define M RAILVEH_MULTIHEAD
|
||||||
#define W RVI_WAGON
|
#define W RAILVEH_WAGON
|
||||||
|
#define G RAILVEH_SINGLEHEAD
|
||||||
#define S 0
|
#define S 0
|
||||||
#define D 1
|
#define D 1
|
||||||
#define E 2
|
#define E 2
|
||||||
|
@ -346,31 +347,31 @@ const RailVehicleInfo orig_rail_vehicle_info[NUM_TRAIN_ENGINES] = {
|
||||||
// | | base_cost | weight | | capacity
|
// | | base_cost | weight | | capacity
|
||||||
// | | | | | | | | | cargo_type
|
// | | | | | | | | | cargo_type
|
||||||
// | | | | | | | | | |
|
// | | | | | | | | | |
|
||||||
RVI( 2, 0, 7, 64, 300, 47, 50, S, 0, 0 , 1, R), // 0
|
RVI( 2, G, 7, 64, 300, 47, 50, S, 0, 0 , 1, R), // 0
|
||||||
RVI(19, 0, 8, 80, 600, 65, 65, D, 0, 0 , 4, R), // 1
|
RVI(19, G, 8, 80, 600, 65, 65, D, 0, 0 , 4, R), // 1
|
||||||
RVI( 2, 0, 10, 72, 400, 85, 90, S, 0, 0 , 7, R), // 2
|
RVI( 2, G, 10, 72, 400, 85, 90, S, 0, 0 , 7, R), // 2
|
||||||
RVI( 0, 0, 15, 96, 900, 130, 130, S, 0, 0 , 19, R), // 3
|
RVI( 0, G, 15, 96, 900, 130, 130, S, 0, 0 , 19, R), // 3
|
||||||
RVI( 1, 0, 19, 112, 1000, 140, 145, S, 0, 0 , 20, R), // 4
|
RVI( 1, G, 19, 112, 1000, 140, 145, S, 0, 0 , 20, R), // 4
|
||||||
RVI(12, 0, 16, 120, 1400, 95, 125, D, 0, 0 , 30, R), // 5
|
RVI(12, G, 16, 120, 1400, 95, 125, D, 0, 0 , 30, R), // 5
|
||||||
RVI(14, 0, 20, 152, 2000, 120, 135, D, 0, 0 , 31, R), // 6
|
RVI(14, G, 20, 152, 2000, 120, 135, D, 0, 0 , 31, R), // 6
|
||||||
RVI( 3, 0, 14, 88, 1100, 145, 130, S, 0, 0 , 19, R), // 7
|
RVI( 3, G, 14, 88, 1100, 145, 130, S, 0, 0 , 19, R), // 7
|
||||||
RVI( 0, 0, 13, 112, 1000, 131, 120, S, 0, 0 , 20, R), // 8
|
RVI( 0, G, 13, 112, 1000, 131, 120, S, 0, 0 , 20, R), // 8
|
||||||
RVI( 1, 0, 19, 128, 1200, 162, 140, S, 0, 0 , 21, R), // 9
|
RVI( 1, G, 19, 128, 1200, 162, 140, S, 0, 0 , 21, R), // 9
|
||||||
RVI( 0, 0, 22, 144, 1600, 170, 130, S, 0, 0 , 22, R), // 10
|
RVI( 0, G, 22, 144, 1600, 170, 130, S, 0, 0 , 22, R), // 10
|
||||||
RVI( 8, M, 11, 112, 600/2,32/2, 85/2, D, 38, CT_PASSENGERS , 10, R), // 11
|
RVI( 8, M, 11, 112, 600/2,32/2, 85/2, D, 38, CT_PASSENGERS , 10, R), // 11
|
||||||
RVI(10, M, 14, 120, 700/2,38/2, 70/2, D, 40, CT_PASSENGERS , 11, R), // 12
|
RVI(10, M, 14, 120, 700/2,38/2, 70/2, D, 40, CT_PASSENGERS , 11, R), // 12
|
||||||
RVI( 4, 0, 15, 128, 1250, 72, 95, D, 0, 0 , 30, R), // 13
|
RVI( 4, G, 15, 128, 1250, 72, 95, D, 0, 0 , 30, R), // 13
|
||||||
RVI( 5, 0, 17, 144, 1750, 101, 120, D, 0, 0 , 31, R), // 14
|
RVI( 5, G, 17, 144, 1750, 101, 120, D, 0, 0 , 31, R), // 14
|
||||||
RVI( 4, 0, 18, 160, 2580, 112, 140, D, 0, 0 , 32, R), // 15
|
RVI( 4, G, 18, 160, 2580, 112, 140, D, 0, 0 , 32, R), // 15
|
||||||
RVI(14, 0, 23, 96, 4000, 150, 135, D, 0, 0 , 33, R), // 16
|
RVI(14, G, 23, 96, 4000, 150, 135, D, 0, 0 , 33, R), // 16
|
||||||
RVI(12, 0, 16, 112, 2400, 120, 105, D, 0, 0 , 34, R), // 17
|
RVI(12, G, 16, 112, 2400, 120, 105, D, 0, 0 , 34, R), // 17
|
||||||
RVI(13, 0, 30, 112, 6600, 207, 155, D, 0, 0 , 35, R), // 18
|
RVI(13, G, 30, 112, 6600, 207, 155, D, 0, 0 , 35, R), // 18
|
||||||
RVI(15, 0, 18, 104, 1500, 110, 105, D, 0, 0 , 29, R), // 19
|
RVI(15, G, 18, 104, 1500, 110, 105, D, 0, 0 , 29, R), // 19
|
||||||
RVI(16, M, 35, 160, 3500/2,95/2, 205/2, D, 0, 0 , 45, R), // 20
|
RVI(16, M, 35, 160, 3500/2,95/2, 205/2, D, 0, 0 , 45, R), // 20
|
||||||
RVI(18, 0, 21, 104, 2200, 120, 145, D, 0, 0 , 32, R), // 21
|
RVI(18, G, 21, 104, 2200, 120, 145, D, 0, 0 , 32, R), // 21
|
||||||
RVI( 6, M, 20, 200, 4500/2,70/2, 190/2, D, 4, CT_MAIL , 50, R), // 22
|
RVI( 6, M, 20, 200, 4500/2,70/2, 190/2, D, 4, CT_MAIL , 50, R), // 22
|
||||||
RVI(20, 0, 26, 160, 3600, 84, 180, E, 0, 0 , 40, C), // 23
|
RVI(20, G, 26, 160, 3600, 84, 180, E, 0, 0 , 40, C), // 23
|
||||||
RVI(20, 0, 30, 176, 5000, 82, 205, E, 0, 0 , 41, C), // 24
|
RVI(20, G, 30, 176, 5000, 82, 205, E, 0, 0 , 41, C), // 24
|
||||||
RVI(21, M, 40, 240, 7000/2,90/2, 240/2, E, 0, 0 , 51, C), // 25
|
RVI(21, M, 40, 240, 7000/2,90/2, 240/2, E, 0, 0 , 51, C), // 25
|
||||||
RVI(23, M, 43, 264, 8000/2,95/2, 250/2, E, 0, 0 , 52, C), // 26
|
RVI(23, M, 43, 264, 8000/2,95/2, 250/2, E, 0, 0 , 52, C), // 26
|
||||||
RVI(33, W, 247, 0, 0, 25, 0, 0, 40, CT_PASSENGERS , 0, R), // 27
|
RVI(33, W, 247, 0, 0, 25, 0, 0, 40, CT_PASSENGERS , 0, R), // 27
|
||||||
|
@ -400,9 +401,9 @@ const RailVehicleInfo orig_rail_vehicle_info[NUM_TRAIN_ENGINES] = {
|
||||||
RVI(57, W, 196, 0, 0, 18, 0, 0, 22, CT_BATTERIES , 0, R), // 51
|
RVI(57, W, 196, 0, 0, 18, 0, 0, 22, CT_BATTERIES , 0, R), // 51
|
||||||
RVI(58, W, 193, 0, 0, 18, 0, 0, 25, CT_FIZZY_DRINKS, 0, R), // 52
|
RVI(58, W, 193, 0, 0, 18, 0, 0, 25, CT_FIZZY_DRINKS, 0, R), // 52
|
||||||
RVI(59, W, 191, 0, 0, 18, 0, 0, 30, CT_PLASTIC , 0, R), // 53
|
RVI(59, W, 191, 0, 0, 18, 0, 0, 30, CT_PLASTIC , 0, R), // 53
|
||||||
RVI(25, 0, 52, 304, 9000, 95, 230, E, 0, 0 , 60, O), // 54
|
RVI(25, G, 52, 304, 9000, 95, 230, E, 0, 0 , 60, O), // 54
|
||||||
RVI(26, M, 60, 336, 10000/2,85/2, 240/2, E, 25, CT_PASSENGERS , 62, O), // 55
|
RVI(26, M, 60, 336, 10000/2,85/2, 240/2, E, 25, CT_PASSENGERS , 62, O), // 55
|
||||||
RVI(26, 0, 53, 320, 5000, 95, 230, E, 0, 0 , 63, O), // 56
|
RVI(26, G, 53, 320, 5000, 95, 230, E, 0, 0 , 63, O), // 56
|
||||||
RVI(60, W, 247, 0, 0, 25, 0, 0, 45, CT_PASSENGERS , 0, O), // 57
|
RVI(60, W, 247, 0, 0, 25, 0, 0, 45, CT_PASSENGERS , 0, O), // 57
|
||||||
RVI(62, W, 228, 0, 0, 21, 0, 0, 35, CT_MAIL , 0, O), // 58
|
RVI(62, W, 228, 0, 0, 21, 0, 0, 35, CT_MAIL , 0, O), // 58
|
||||||
RVI(61, W, 176, 0, 0, 18, 0, 0, 35, CT_COAL , 0, O), // 59
|
RVI(61, W, 176, 0, 0, 18, 0, 0, 35, CT_COAL , 0, O), // 59
|
||||||
|
@ -430,11 +431,11 @@ const RailVehicleInfo orig_rail_vehicle_info[NUM_TRAIN_ENGINES] = {
|
||||||
RVI(57, W, 196, 0, 0, 18, 0, 0, 27, CT_BATTERIES , 0, O), // 81
|
RVI(57, W, 196, 0, 0, 18, 0, 0, 27, CT_BATTERIES , 0, O), // 81
|
||||||
RVI(58, W, 193, 0, 0, 18, 0, 0, 30, CT_FIZZY_DRINKS, 0, O), // 82
|
RVI(58, W, 193, 0, 0, 18, 0, 0, 30, CT_FIZZY_DRINKS, 0, O), // 82
|
||||||
RVI(59, W, 191, 0, 0, 18, 0, 0, 35, CT_PLASTIC , 0, O), // 83
|
RVI(59, W, 191, 0, 0, 18, 0, 0, 35, CT_PLASTIC , 0, O), // 83
|
||||||
RVI(28, 0, 70, 400, 10000, 105, 250, E, 0, 0 , 70, L), // 84
|
RVI(28, G, 70, 400, 10000, 105, 250, E, 0, 0 , 70, L), // 84
|
||||||
RVI(29, 0, 74, 448, 12000, 120, 253, E, 0, 0 , 71, L), // 85
|
RVI(29, G, 74, 448, 12000, 120, 253, E, 0, 0 , 71, L), // 85
|
||||||
RVI(30, 0, 82, 480, 15000, 130, 254, E, 0, 0 , 72, L), // 86
|
RVI(30, G, 82, 480, 15000, 130, 254, E, 0, 0 , 72, L), // 86
|
||||||
RVI(31, M, 95, 640, 20000/2,150/2,255/2, E, 0, 0 , 73, L), // 87
|
RVI(31, M, 95, 640, 20000/2,150/2,255/2, E, 0, 0 , 73, L), // 87
|
||||||
RVI(28, 0, 70, 480, 10000, 120, 250, E, 0, 0 , 74, L), // 88
|
RVI(28, G, 70, 480, 10000, 120, 250, E, 0, 0 , 74, L), // 88
|
||||||
RVI(60, W, 247, 0, 0, 25, 0, 0, 47, CT_PASSENGERS , 0, L), // 89
|
RVI(60, W, 247, 0, 0, 25, 0, 0, 47, CT_PASSENGERS , 0, L), // 89
|
||||||
RVI(62, W, 228, 0, 0, 21, 0, 0, 37, CT_MAIL , 0, L), // 90
|
RVI(62, W, 228, 0, 0, 21, 0, 0, 37, CT_MAIL , 0, L), // 90
|
||||||
RVI(61, W, 176, 0, 0, 18, 0, 0, 37, CT_COAL , 0, L), // 91
|
RVI(61, W, 176, 0, 0, 18, 0, 0, 37, CT_COAL , 0, L), // 91
|
||||||
|
@ -470,6 +471,7 @@ const RailVehicleInfo orig_rail_vehicle_info[NUM_TRAIN_ENGINES] = {
|
||||||
#undef E
|
#undef E
|
||||||
#undef D
|
#undef D
|
||||||
#undef S
|
#undef S
|
||||||
|
#undef G
|
||||||
#undef W
|
#undef W
|
||||||
#undef M
|
#undef M
|
||||||
#undef RVI
|
#undef RVI
|
||||||
|
|
|
@ -194,11 +194,10 @@ void TrainConsistChanged(Vehicle* v)
|
||||||
if (callback != CALLBACK_FAILED) u->u.rail.cached_vis_effect = callback;
|
if (callback != CALLBACK_FAILED) u->u.rail.cached_vis_effect = callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((rvi_v->pow_wag_power != 0) && (rvi_u->flags & RVI_WAGON) && UsesWagonOverride(u)) {
|
if (rvi_v->pow_wag_power != 0 && rvi_u->railveh_type == RAILVEH_WAGON &&
|
||||||
if (u->u.rail.cached_vis_effect < 0x40) {
|
UsesWagonOverride(u) && (u->u.rail.cached_vis_effect < 0x40)) {
|
||||||
/* wagon is powered */
|
/* wagon is powered */
|
||||||
SETBIT(u->u.rail.flags, VRF_POWEREDWAGON); // cache 'powered' status
|
SETBIT(u->u.rail.flags, VRF_POWEREDWAGON); // cache 'powered' status
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Do not count powered wagons for the compatible railtypes, as wagons always
|
/* Do not count powered wagons for the compatible railtypes, as wagons always
|
||||||
|
@ -215,9 +214,9 @@ void TrainConsistChanged(Vehicle* v)
|
||||||
}
|
}
|
||||||
|
|
||||||
// max speed is the minimum of the speed limits of all vehicles in the consist
|
// max speed is the minimum of the speed limits of all vehicles in the consist
|
||||||
if (!(rvi_u->flags & RVI_WAGON) || _patches.wagon_speed_limits)
|
if ((rvi_u->railveh_type != RAILVEH_WAGON || _patches.wagon_speed_limits) &&
|
||||||
if (rvi_u->max_speed != 0 && !UsesWagonOverride(u))
|
rvi_u->max_speed != 0 && !UsesWagonOverride(u))
|
||||||
max_speed = min(rvi_u->max_speed, max_speed);
|
max_speed = min(rvi_u->max_speed, max_speed);
|
||||||
}
|
}
|
||||||
|
|
||||||
// check the vehicle length (callback)
|
// check the vehicle length (callback)
|
||||||
|
@ -490,7 +489,7 @@ void DrawTrainEngine(int x, int y, EngineID engine, SpriteID pal)
|
||||||
image = (6 & _engine_sprite_and[img]) + _engine_sprite_base[img];
|
image = (6 & _engine_sprite_and[img]) + _engine_sprite_base[img];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rvi->flags & RVI_MULTIHEAD) {
|
if (rvi->railveh_type == RAILVEH_MULTIHEAD) {
|
||||||
DrawSprite(image, pal, x - 14, y);
|
DrawSprite(image, pal, x - 14, y);
|
||||||
x += 15;
|
x += 15;
|
||||||
image = 0;
|
image = 0;
|
||||||
|
@ -765,11 +764,11 @@ int32 CmdBuildRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
/* We need to see if the engine got power on the tile to avoid eletric engines in non-electric depots */
|
/* We need to see if the engine got power on the tile to avoid eletric engines in non-electric depots */
|
||||||
if (!HasPowerOnRail(rvi->railtype, GetRailType(tile))) return CMD_ERROR;
|
if (!HasPowerOnRail(rvi->railtype, GetRailType(tile))) return CMD_ERROR;
|
||||||
|
|
||||||
if (rvi->flags & RVI_WAGON) return CmdBuildRailWagon(p1, tile, flags);
|
if (rvi->railveh_type == RAILVEH_WAGON) return CmdBuildRailWagon(p1, tile, flags);
|
||||||
|
|
||||||
value = EstimateTrainCost(rvi);
|
value = EstimateTrainCost(rvi);
|
||||||
|
|
||||||
num_vehicles = (rvi->flags & RVI_MULTIHEAD) ? 2 : 1;
|
num_vehicles = (rvi->railveh_type == RAILVEH_MULTIHEAD) ? 2 : 1;
|
||||||
num_vehicles += CountArticulatedParts(p1);
|
num_vehicles += CountArticulatedParts(p1);
|
||||||
|
|
||||||
if (!(flags & DC_QUERY_COST)) {
|
if (!(flags & DC_QUERY_COST)) {
|
||||||
|
@ -834,7 +833,7 @@ int32 CmdBuildRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
|
|
||||||
VehiclePositionChanged(v);
|
VehiclePositionChanged(v);
|
||||||
|
|
||||||
if (rvi->flags & RVI_MULTIHEAD) {
|
if (rvi->railveh_type == RAILVEH_MULTIHEAD) {
|
||||||
SetMultiheaded(v);
|
SetMultiheaded(v);
|
||||||
AddRearEngineToMultiheadedTrain(vl[0], vl[1], true);
|
AddRearEngineToMultiheadedTrain(vl[0], vl[1], true);
|
||||||
/* Now we need to link the front and rear engines together
|
/* Now we need to link the front and rear engines together
|
||||||
|
@ -1357,7 +1356,7 @@ int32 CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
if (v == first && IsFrontEngine(first)) {
|
if (v == first && IsFrontEngine(first)) {
|
||||||
DeleteWindowById(WC_VEHICLE_VIEW, first->index);
|
DeleteWindowById(WC_VEHICLE_VIEW, first->index);
|
||||||
}
|
}
|
||||||
if (IsLocalPlayer() && (p1 == 1 || !(RailVehInfo(v->engine_type)->flags & RVI_WAGON))) {
|
if (IsLocalPlayer() && (p1 == 1 || RailVehInfo(v->engine_type)->railveh_type != RAILVEH_WAGON)) {
|
||||||
InvalidateWindow(WC_REPLACE_VEHICLE, VEH_Train);
|
InvalidateWindow(WC_REPLACE_VEHICLE, VEH_Train);
|
||||||
}
|
}
|
||||||
InvalidateWindow(WC_VEHICLE_DEPOT, first->tile);
|
InvalidateWindow(WC_VEHICLE_DEPOT, first->tile);
|
||||||
|
@ -2090,7 +2089,7 @@ static void HandleLocomotiveSmokeCloud(const Vehicle* v)
|
||||||
int x, y;
|
int x, y;
|
||||||
|
|
||||||
// no smoke?
|
// no smoke?
|
||||||
if ((rvi->flags & RVI_WAGON && effect_type == 0) ||
|
if ((rvi->railveh_type == RAILVEH_WAGON && effect_type == 0) ||
|
||||||
disable_effect ||
|
disable_effect ||
|
||||||
rvi->railtype > RAILTYPE_ELECTRIC ||
|
rvi->railtype > RAILTYPE_ELECTRIC ||
|
||||||
v->vehstatus & VS_HIDDEN) {
|
v->vehstatus & VS_HIDDEN) {
|
||||||
|
@ -3752,7 +3751,7 @@ void ConvertOldMultiheadToNew(void)
|
||||||
CLRBIT(u->subtype, 7);
|
CLRBIT(u->subtype, 7);
|
||||||
switch (u->subtype) {
|
switch (u->subtype) {
|
||||||
case 0: /* TS_Front_Engine */
|
case 0: /* TS_Front_Engine */
|
||||||
if (rvi->flags & RVI_MULTIHEAD) SetMultiheaded(u);
|
if (rvi->railveh_type == RAILVEH_MULTIHEAD) SetMultiheaded(u);
|
||||||
SetFrontEngine(u);
|
SetFrontEngine(u);
|
||||||
SetTrainEngine(u);
|
SetTrainEngine(u);
|
||||||
break;
|
break;
|
||||||
|
@ -3764,17 +3763,17 @@ void ConvertOldMultiheadToNew(void)
|
||||||
|
|
||||||
case 2: /* TS_Not_First */
|
case 2: /* TS_Not_First */
|
||||||
u->subtype = 0;
|
u->subtype = 0;
|
||||||
if (rvi->flags & RVI_WAGON) {
|
if (rvi->railveh_type == RAILVEH_WAGON) {
|
||||||
// normal wagon
|
// normal wagon
|
||||||
SetTrainWagon(u);
|
SetTrainWagon(u);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (rvi->flags & RVI_MULTIHEAD && rvi->image_index == u->spritenum - 1) {
|
if (rvi->railveh_type == RAILVEH_MULTIHEAD && rvi->image_index == u->spritenum - 1) {
|
||||||
// rear end of a multiheaded engine
|
// rear end of a multiheaded engine
|
||||||
SetMultiheaded(u);
|
SetMultiheaded(u);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (rvi->flags & RVI_MULTIHEAD) SetMultiheaded(u);
|
if (rvi->railveh_type == RAILVEH_MULTIHEAD) SetMultiheaded(u);
|
||||||
SetTrainEngine(u);
|
SetTrainEngine(u);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -158,7 +158,7 @@ static void TrainViewWndProc(Window *w, WindowEvent *e)
|
||||||
/* See if any vehicle can be refitted */
|
/* See if any vehicle can be refitted */
|
||||||
for (u = v; u != NULL; u = u->next) {
|
for (u = v; u != NULL; u = u->next) {
|
||||||
if (EngInfo(u->engine_type)->refit_mask != 0 ||
|
if (EngInfo(u->engine_type)->refit_mask != 0 ||
|
||||||
(!(RailVehInfo(v->engine_type)->flags & RVI_WAGON) && v->cargo_cap != 0)) {
|
(RailVehInfo(v->engine_type)->railveh_type != RAILVEH_WAGON && v->cargo_cap != 0)) {
|
||||||
EnableWindowWidget(w, 12);
|
EnableWindowWidget(w, 12);
|
||||||
/* We have a refittable carriage, bail out */
|
/* We have a refittable carriage, bail out */
|
||||||
break;
|
break;
|
||||||
|
@ -341,7 +341,7 @@ static void TrainDetailsCargoTab(const Vehicle *v, int x, int y)
|
||||||
|
|
||||||
static void TrainDetailsInfoTab(const Vehicle *v, int x, int y)
|
static void TrainDetailsInfoTab(const Vehicle *v, int x, int y)
|
||||||
{
|
{
|
||||||
if (RailVehInfo(v->engine_type)->flags & RVI_WAGON) {
|
if (RailVehInfo(v->engine_type)->railveh_type == RAILVEH_WAGON) {
|
||||||
SetDParam(0, GetCustomEngineName(v->engine_type));
|
SetDParam(0, GetCustomEngineName(v->engine_type));
|
||||||
SetDParam(1, v->value);
|
SetDParam(1, v->value);
|
||||||
DrawString(x, y, STR_882D_VALUE, 0x10);
|
DrawString(x, y, STR_882D_VALUE, 0x10);
|
||||||
|
|
|
@ -787,7 +787,7 @@ int32 GetRefitCost(EngineID engine_type)
|
||||||
case VEH_Road: base_cost = _price.roadveh_base; break;
|
case VEH_Road: base_cost = _price.roadveh_base; break;
|
||||||
case VEH_Aircraft: base_cost = _price.aircraft_base; break;
|
case VEH_Aircraft: base_cost = _price.aircraft_base; break;
|
||||||
case VEH_Train:
|
case VEH_Train:
|
||||||
base_cost = 2 * ((RailVehInfo(engine_type)->flags & RVI_WAGON) ?
|
base_cost = 2 * ((RailVehInfo(engine_type)->railveh_type == RAILVEH_WAGON) ?
|
||||||
_price.build_railwagon : _price.build_railvehicle);
|
_price.build_railwagon : _price.build_railvehicle);
|
||||||
break;
|
break;
|
||||||
default: NOT_REACHED(); break;
|
default: NOT_REACHED(); break;
|
||||||
|
@ -2243,7 +2243,7 @@ static int32 MaybeReplaceVehicle(Vehicle *v, bool check, bool display_costs)
|
||||||
|
|
||||||
while (v->u.rail.cached_total_length > old_total_length) {
|
while (v->u.rail.cached_total_length > old_total_length) {
|
||||||
// the train is too long. We will remove cars one by one from the start of the train until it's short enough
|
// the train is too long. We will remove cars one by one from the start of the train until it's short enough
|
||||||
while (w != NULL && !(RailVehInfo(w->engine_type)->flags&RVI_WAGON) ) {
|
while (w != NULL && RailVehInfo(w->engine_type)->railveh_type != RAILVEH_WAGON) {
|
||||||
w = GetNextVehicle(w);
|
w = GetNextVehicle(w);
|
||||||
}
|
}
|
||||||
if (w == NULL) {
|
if (w == NULL) {
|
||||||
|
@ -2850,7 +2850,7 @@ static SpriteID GetEngineColourMap(EngineID engine_type, PlayerID player, Engine
|
||||||
case RAILTYPE_ELECTRIC:
|
case RAILTYPE_ELECTRIC:
|
||||||
{
|
{
|
||||||
if (cargo_type == CT_INVALID) cargo_type = rvi->cargo_type;
|
if (cargo_type == CT_INVALID) cargo_type = rvi->cargo_type;
|
||||||
if (rvi->flags & RVI_WAGON) {
|
if (rvi->railveh_type == RAILVEH_WAGON) {
|
||||||
if (cargo_type == CT_PASSENGERS || cargo_type == CT_MAIL || cargo_type == CT_VALUABLES) {
|
if (cargo_type == CT_PASSENGERS || cargo_type == CT_MAIL || cargo_type == CT_VALUABLES) {
|
||||||
if (parent_engine_type == INVALID_ENGINE) {
|
if (parent_engine_type == INVALID_ENGINE) {
|
||||||
scheme = LS_PASSENGER_WAGON_STEAM;
|
scheme = LS_PASSENGER_WAGON_STEAM;
|
||||||
|
|
Loading…
Reference in New Issue