(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.
This commit is contained in:
belugas 2007-01-30 11:53:35 +00:00
parent e3b63e6d83
commit 0c45071bb0
12 changed files with 89 additions and 86 deletions

View File

@ -143,8 +143,8 @@ static EngineID AiChooseTrainToBuild(RailType railtype, int32 money, byte flag,
const Engine* e = GetEngine(i);
if (!IsCompatibleRail(rvi->railtype, railtype) ||
rvi->flags & RVI_WAGON ||
(rvi->flags & RVI_MULTIHEAD && flag & 1) ||
rvi->railveh_type == RAILVEH_WAGON ||
(rvi->railveh_type == RAILVEH_MULTIHEAD && flag & 1) ||
!HASBIT(e->player_avail, _current_player) ||
e->reliability < 0x8A3D) {
continue;
@ -2366,7 +2366,7 @@ static EngineID AiFindBestWagon(CargoID cargo, RailType railtype)
const Engine* e = GetEngine(i);
if (!IsCompatibleRail(rvi->railtype, railtype) ||
!(rvi->flags & RVI_WAGON) ||
rvi->railveh_type != RAILVEH_WAGON ||
!HASBIT(e->player_avail, _current_player)) {
continue;
}

View File

@ -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 ((!IsCompatibleRail(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))
continue;
#if 0

View File

@ -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_b = RailVehInfo(*(const EngineID*)b);
int va = rvi_a->power << (rvi_a->flags & RVI_MULTIHEAD ? 1 : 0);
int vb = rvi_b->power << (rvi_b->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->railveh_type == RAILVEH_MULTIHEAD ? 1 : 0);
int r = va - vb;
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_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 vb = rvi_b->running_cost_base * _price.running_rail[rvi_b->running_cost_class] * (rvi_b->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->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
int r = va - vb;
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 vb = *(const EngineID*)b;
int val_a = ((RailVehInfo(va)->flags & RVI_WAGON) != 0) ? 1 : 0;
int val_b = ((RailVehInfo(vb)->flags & RVI_WAGON) != 0) ? 1 : 0;
int val_a = (RailVehInfo(va)->railveh_type != RAILVEH_WAGON ? 1 : 0);
int val_b = (RailVehInfo(vb)->railveh_type != RAILVEH_WAGON ? 1 : 0);
int r = val_a - val_b;
/* 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 */
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 */
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);
if (rvi->flags & RVI_WAGON) {
if (rvi->railveh_type == RAILVEH_WAGON) {
y = DrawRailWagonPurchaseInfo(x, y, engine_number, rvi);
} else {
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(2, STR_EMPTY);
} else {
int multihead = (rvi->flags & RVI_MULTIHEAD ? 1 : 0);
int multihead = (rvi->railveh_type == RAILVEH_MULTIHEAD ? 1 : 0);
SetDParam(0, rvi->cargo_type);
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 */
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 */
SetDParam(0, ymd.year);
SetDParam(1, e->lifelength);
@ -607,7 +607,7 @@ static void GenerateBuildTrainList(Window *w)
if (!IsEngineBuildable(eid, VEH_Train, _local_player)) continue;
EngList_Add(&bv->eng_list, eid);
if ((rvi->flags & RVI_WAGON) == 0) {
if (rvi->railveh_type != RAILVEH_WAGON) {
num_engines++;
} else {
num_wagons++;
@ -826,7 +826,7 @@ static void BuildVehicleClickEvent(Window *w, WindowEvent *e)
if (sel_eng != INVALID_ENGINE) {
switch (bv->vehicle_type) {
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));
break;
case VEH_Road:

View File

@ -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)
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)

View File

@ -9,9 +9,15 @@
#include "rail.h"
#include "sound.h"
enum RailVehicleTypes {
RAILVEH_SINGLEHEAD,
RAILVEH_MULTIHEAD,
RAILVEH_WAGON,
};
typedef struct RailVehicleInfo {
byte image_index;
byte flags; /* 1=multihead engine, 2=wagon */
RailVehicleTypes railveh_type;
byte base_cost;
RailTypeByte railtype;
uint16 max_speed;
@ -117,11 +123,6 @@ enum {
EF_RAIL_IS_MU = 2, ///< Rail vehicle is a multiple-unit (DMU/EMU)
};
enum {
RVI_MULTIHEAD = 1,
RVI_WAGON = 2,
};
enum {
NUM_VEHICLE_TYPES = 6
};

View File

@ -122,7 +122,7 @@ void ShowEnginePreviewWindow(EngineID engine)
static void DrawTrainEngineInfo(EngineID engine, int x, int y, int maxw)
{
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(2, rvi->max_speed);

View File

@ -215,10 +215,10 @@ static void dewagonize(int condition, int engine)
if (condition != 0) {
ei->unk2 &= ~0x80;
rvi->flags &= ~2;
rvi->railveh_type = RAILVEH_SINGLEHEAD;
} else {
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 {
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;
dewagonize(power, engine + i);
@ -276,7 +276,7 @@ static bool RailVehicleChangeInfo(uint engine, int numinfo, int prop, byte **buf
FOR_EACH_OBJECT {
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;
}
@ -315,19 +315,19 @@ static bool RailVehicleChangeInfo(uint engine, int numinfo, int prop, byte **buf
uint8 dual = grf_load_byte(&buf);
if (dual != 0) {
if (!(rvi[i].flags & RVI_MULTIHEAD)) {
if (rvi[i].railveh_type != RAILVEH_MULTIHEAD) {
// adjust power and running cost if needed
rvi[i].power /= 2;
rvi[i].running_cost_base /= 2;
}
rvi[i].flags |= RVI_MULTIHEAD;
rvi[i].railveh_type = RAILVEH_MULTIHEAD;
} else {
if (rvi[i].flags & RVI_MULTIHEAD) {
if (rvi[i].railveh_type == RAILVEH_MULTIHEAD) {
// adjust power and running cost if needed
rvi[i].power *= 2;
rvi[i].running_cost_base *= 2;
}
rvi[i].flags &= ~RVI_MULTIHEAD;
rvi[i].railveh_type = RAILVEH_SINGLEHEAD;
}
}
break;
@ -3588,7 +3588,7 @@ static void CalculateRefitMasks(void)
if (xor_mask == 0 && (
GetEngine(engine)->type != VEH_Train || (
RailVehInfo(engine)->capacity != 0 &&
!(RailVehInfo(engine)->flags & RVI_WAGON)
RailVehInfo(engine)->railveh_type != RAILVEH_WAGON
)
)) {
xor_mask = _default_refitmasks[GetEngine(engine)->type - VEH_Train];
@ -3801,3 +3801,4 @@ void LoadNewGRF(uint load_index, uint file_index)

View File

@ -656,7 +656,7 @@ byte GetPlayerRailtypes(PlayerID p)
(HASBIT(e->player_avail, p) || _date >= e->intro_date + 365)) {
const RailVehicleInfo *rvi = RailVehInfo(i);
if (!(rvi->flags & RVI_WAGON)) {
if (rvi->railveh_type != RAILVEH_WAGON) {
assert(rvi->railtype < RAILTYPE_END);
SETBIT(rt, rvi->railtype);
}

View File

@ -329,8 +329,9 @@ const EngineInfo orig_engine_info[] = {
* 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 M RVI_MULTIHEAD
#define W RVI_WAGON
#define M RAILVEH_MULTIHEAD
#define W RAILVEH_WAGON
#define G RAILVEH_SINGLEHEAD
#define S 0
#define D 1
#define E 2
@ -346,31 +347,31 @@ const RailVehicleInfo orig_rail_vehicle_info[NUM_TRAIN_ENGINES] = {
// | | base_cost | weight | | capacity
// | | | | | | | | | cargo_type
// | | | | | | | | | |
RVI( 2, 0, 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( 2, 0, 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( 1, 0, 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(14, 0, 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( 0, 0, 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( 0, 0, 22, 144, 1600, 170, 130, S, 0, 0 , 22, R), // 10
RVI( 2, G, 7, 64, 300, 47, 50, S, 0, 0 , 1, R), // 0
RVI(19, G, 8, 80, 600, 65, 65, D, 0, 0 , 4, R), // 1
RVI( 2, G, 10, 72, 400, 85, 90, S, 0, 0 , 7, R), // 2
RVI( 0, G, 15, 96, 900, 130, 130, S, 0, 0 , 19, R), // 3
RVI( 1, G, 19, 112, 1000, 140, 145, S, 0, 0 , 20, R), // 4
RVI(12, G, 16, 120, 1400, 95, 125, D, 0, 0 , 30, R), // 5
RVI(14, G, 20, 152, 2000, 120, 135, D, 0, 0 , 31, R), // 6
RVI( 3, G, 14, 88, 1100, 145, 130, S, 0, 0 , 19, R), // 7
RVI( 0, G, 13, 112, 1000, 131, 120, S, 0, 0 , 20, R), // 8
RVI( 1, G, 19, 128, 1200, 162, 140, S, 0, 0 , 21, R), // 9
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(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( 5, 0, 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(14, 0, 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(13, 0, 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( 4, G, 15, 128, 1250, 72, 95, D, 0, 0 , 30, R), // 13
RVI( 5, G, 17, 144, 1750, 101, 120, D, 0, 0 , 31, R), // 14
RVI( 4, G, 18, 160, 2580, 112, 140, D, 0, 0 , 32, R), // 15
RVI(14, G, 23, 96, 4000, 150, 135, D, 0, 0 , 33, R), // 16
RVI(12, G, 16, 112, 2400, 120, 105, D, 0, 0 , 34, R), // 17
RVI(13, G, 30, 112, 6600, 207, 155, D, 0, 0 , 35, R), // 18
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(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(20, 0, 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, 26, 160, 3600, 84, 180, E, 0, 0 , 40, C), // 23
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(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
@ -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(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(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, 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(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
@ -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(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(28, 0, 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(30, 0, 82, 480, 15000, 130, 254, E, 0, 0 , 72, L), // 86
RVI(28, G, 70, 400, 10000, 105, 250, E, 0, 0 , 70, L), // 84
RVI(29, G, 74, 448, 12000, 120, 253, E, 0, 0 , 71, L), // 85
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(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(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
@ -470,6 +471,7 @@ const RailVehicleInfo orig_rail_vehicle_info[NUM_TRAIN_ENGINES] = {
#undef E
#undef D
#undef S
#undef G
#undef W
#undef M
#undef RVI

View File

@ -194,11 +194,10 @@ void TrainConsistChanged(Vehicle* v)
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 (u->u.rail.cached_vis_effect < 0x40) {
/* wagon is powered */
SETBIT(u->u.rail.flags, VRF_POWEREDWAGON); // cache 'powered' status
}
if (rvi_v->pow_wag_power != 0 && rvi_u->railveh_type == RAILVEH_WAGON &&
UsesWagonOverride(u) && (u->u.rail.cached_vis_effect < 0x40)) {
/* wagon is powered */
SETBIT(u->u.rail.flags, VRF_POWEREDWAGON); // cache 'powered' status
}
/* 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
if (!(rvi_u->flags & RVI_WAGON) || _patches.wagon_speed_limits)
if (rvi_u->max_speed != 0 && !UsesWagonOverride(u))
max_speed = min(rvi_u->max_speed, max_speed);
if ((rvi_u->railveh_type != RAILVEH_WAGON || _patches.wagon_speed_limits) &&
rvi_u->max_speed != 0 && !UsesWagonOverride(u))
max_speed = min(rvi_u->max_speed, max_speed);
}
// 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];
}
if (rvi->flags & RVI_MULTIHEAD) {
if (rvi->railveh_type == RAILVEH_MULTIHEAD) {
DrawSprite(image, pal, x - 14, y);
x += 15;
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 */
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);
num_vehicles = (rvi->flags & RVI_MULTIHEAD) ? 2 : 1;
num_vehicles = (rvi->railveh_type == RAILVEH_MULTIHEAD) ? 2 : 1;
num_vehicles += CountArticulatedParts(p1);
if (!(flags & DC_QUERY_COST)) {
@ -834,7 +833,7 @@ int32 CmdBuildRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
VehiclePositionChanged(v);
if (rvi->flags & RVI_MULTIHEAD) {
if (rvi->railveh_type == RAILVEH_MULTIHEAD) {
SetMultiheaded(v);
AddRearEngineToMultiheadedTrain(vl[0], vl[1], true);
/* 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)) {
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_VEHICLE_DEPOT, first->tile);
@ -2090,7 +2089,7 @@ static void HandleLocomotiveSmokeCloud(const Vehicle* v)
int x, y;
// no smoke?
if ((rvi->flags & RVI_WAGON && effect_type == 0) ||
if ((rvi->railveh_type == RAILVEH_WAGON && effect_type == 0) ||
disable_effect ||
rvi->railtype > RAILTYPE_ELECTRIC ||
v->vehstatus & VS_HIDDEN) {
@ -3752,7 +3751,7 @@ void ConvertOldMultiheadToNew(void)
CLRBIT(u->subtype, 7);
switch (u->subtype) {
case 0: /* TS_Front_Engine */
if (rvi->flags & RVI_MULTIHEAD) SetMultiheaded(u);
if (rvi->railveh_type == RAILVEH_MULTIHEAD) SetMultiheaded(u);
SetFrontEngine(u);
SetTrainEngine(u);
break;
@ -3764,17 +3763,17 @@ void ConvertOldMultiheadToNew(void)
case 2: /* TS_Not_First */
u->subtype = 0;
if (rvi->flags & RVI_WAGON) {
if (rvi->railveh_type == RAILVEH_WAGON) {
// normal wagon
SetTrainWagon(u);
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
SetMultiheaded(u);
break;
}
if (rvi->flags & RVI_MULTIHEAD) SetMultiheaded(u);
if (rvi->railveh_type == RAILVEH_MULTIHEAD) SetMultiheaded(u);
SetTrainEngine(u);
break;

View File

@ -158,7 +158,7 @@ static void TrainViewWndProc(Window *w, WindowEvent *e)
/* See if any vehicle can be refitted */
for (u = v; u != NULL; u = u->next) {
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);
/* We have a refittable carriage, bail out */
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)
{
if (RailVehInfo(v->engine_type)->flags & RVI_WAGON) {
if (RailVehInfo(v->engine_type)->railveh_type == RAILVEH_WAGON) {
SetDParam(0, GetCustomEngineName(v->engine_type));
SetDParam(1, v->value);
DrawString(x, y, STR_882D_VALUE, 0x10);

View File

@ -787,7 +787,7 @@ int32 GetRefitCost(EngineID engine_type)
case VEH_Road: base_cost = _price.roadveh_base; break;
case VEH_Aircraft: base_cost = _price.aircraft_base; break;
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);
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) {
// 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);
}
if (w == NULL) {
@ -2850,7 +2850,7 @@ static SpriteID GetEngineColourMap(EngineID engine_type, PlayerID player, Engine
case RAILTYPE_ELECTRIC:
{
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 (parent_engine_type == INVALID_ENGINE) {
scheme = LS_PASSENGER_WAGON_STEAM;