(svn r3597) Miscellaneous (I like that word) changes: Fix some indentation, add consts, reduce indentation level by short-circuit logic, convert if cascades to switch, whitespace, bracing, plus some minor stuff
This commit is contained in:
255
train_cmd.c
255
train_cmd.c
@@ -305,8 +305,7 @@ static int GetTrainAcceleration(Vehicle *v, bool mode)
|
||||
num++;
|
||||
drag_coeff += 3;
|
||||
|
||||
if (u->u.rail.track == 0x80)
|
||||
max_speed = min(61, max_speed);
|
||||
if (u->u.rail.track == 0x80) max_speed = min(max_speed, 61);
|
||||
|
||||
if (HASBIT(u->u.rail.flags, VRF_GOINGUP)) {
|
||||
incl += u->u.rail.cached_veh_weight * 60; //3% slope, quite a bit actually
|
||||
@@ -322,8 +321,9 @@ static int GetTrainAcceleration(Vehicle *v, bool mode)
|
||||
resistance += 60 * num;
|
||||
resistance += friction * mass * speed / 1000;
|
||||
resistance += (area * drag_coeff * speed * speed) / 10000;
|
||||
} else
|
||||
} else {
|
||||
resistance = (area * (drag_coeff / 2) * speed * speed) / 10000;
|
||||
}
|
||||
resistance += incl;
|
||||
resistance *= 4; //[N]
|
||||
|
||||
@@ -452,13 +452,11 @@ static void AddArticulatedParts(const RailVehicleInfo *rvi, Vehicle **vl)
|
||||
bool flip_image;
|
||||
uint i;
|
||||
|
||||
if (!HASBIT(rvi->callbackmask, CBM_ARTIC_ENGINE))
|
||||
return;
|
||||
if (!HASBIT(rvi->callbackmask, CBM_ARTIC_ENGINE)) return;
|
||||
|
||||
for (i = 1; i < 10; i++) {
|
||||
callback = GetCallBackResult(CBID_TRAIN_ARTIC_ENGINE + (i << 8), v->engine_type, NULL);
|
||||
if (callback == CALLBACK_FAILED || callback == 0xFF)
|
||||
return;
|
||||
if (callback == CALLBACK_FAILED || callback == 0xFF) return;
|
||||
|
||||
u->next = vl[i];
|
||||
u = u->next;
|
||||
@@ -632,7 +630,7 @@ static const byte _railveh_score[] = {
|
||||
|
||||
static int32 EstimateTrainCost(const RailVehicleInfo* rvi)
|
||||
{
|
||||
return (rvi->base_cost * (_price.build_railvehicle >> 3)) >> 5;
|
||||
return rvi->base_cost * (_price.build_railvehicle >> 3) >> 5;
|
||||
}
|
||||
|
||||
static void AddRearEngineToMultiheadedTrain(Vehicle* v, Vehicle* u, bool building)
|
||||
@@ -858,8 +856,7 @@ static Vehicle *FindGoodVehiclePos(const Vehicle *src)
|
||||
TileIndex tile = src->tile;
|
||||
|
||||
FOR_ALL_VEHICLES(dst) {
|
||||
if (dst->type == VEH_Train && IsFreeWagon(dst) &&
|
||||
dst->tile == tile) {
|
||||
if (dst->type == VEH_Train && IsFreeWagon(dst) && dst->tile == tile) {
|
||||
// check so all vehicles in the line have the same engine.
|
||||
Vehicle *v = dst;
|
||||
|
||||
@@ -908,7 +905,6 @@ static void NormaliseTrainConsist(Vehicle *v)
|
||||
|
||||
if (u == v->u.rail.other_multiheaded_part) continue;
|
||||
AddWagonToConsist(v->u.rail.other_multiheaded_part, u);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -988,9 +984,7 @@ int32 CmdMoveRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
|
||||
engine = NULL;
|
||||
}
|
||||
if (u == dst) {
|
||||
if (engine != NULL) {
|
||||
dst = engine->u.rail.other_multiheaded_part;
|
||||
}
|
||||
if (engine != NULL) dst = engine->u.rail.other_multiheaded_part;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1052,8 +1046,7 @@ int32 CmdMoveRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
|
||||
if (unit_num > _patches.max_trains)
|
||||
return_cmd_error(STR_00E1_TOO_MANY_VEHICLES_IN_GAME);
|
||||
|
||||
if (flags & DC_EXEC)
|
||||
src->unitnumber = unit_num;
|
||||
if (flags & DC_EXEC) src->unitnumber = unit_num;
|
||||
}
|
||||
|
||||
|
||||
@@ -1365,11 +1358,10 @@ int32 CmdSellRailWagon(int x, int y, uint32 flags, uint32 p1, uint32 p2)
|
||||
}
|
||||
|
||||
/* 3. If it is still a valid train after selling, update its acceleration and cached values */
|
||||
if ((flags & DC_EXEC) && first != NULL) {
|
||||
if (flags & DC_EXEC && first != NULL) {
|
||||
NormaliseTrainConsist(first);
|
||||
TrainConsistChanged(first);
|
||||
if (IsFrontEngine(first))
|
||||
UpdateTrainAcceleration(first);
|
||||
if (IsFrontEngine(first)) UpdateTrainAcceleration(first);
|
||||
InvalidateWindow(WC_VEHICLE_DETAILS, first->index);
|
||||
InvalidateWindow(WC_VEHICLE_REFIT, first->index);
|
||||
}
|
||||
@@ -1415,7 +1407,7 @@ static void SetLastSpeed(Vehicle* v, int spd)
|
||||
int old = v->u.rail.last_speed;
|
||||
if (spd != old) {
|
||||
v->u.rail.last_speed = spd;
|
||||
if (_patches.vehicle_speed || !old != !spd)
|
||||
if (_patches.vehicle_speed || (old == 0) != (spd == 0))
|
||||
InvalidateWindowWidget(WC_VEHICLE_VIEW, v->index, STATUS_BAR);
|
||||
}
|
||||
}
|
||||
@@ -1702,16 +1694,23 @@ int32 CmdRefitRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
|
||||
|
||||
if (amount == CALLBACK_FAILED) { // callback failed or not used, use default
|
||||
CargoID old_cid = rvi->cargo_type;
|
||||
/* normally, the capacity depends on the cargo type, a rail vehicle
|
||||
* can carry twice as much mail/goods as normal cargo,
|
||||
* and four times as much passengers */
|
||||
/* normally, the capacity depends on the cargo type, a rail vehicle can
|
||||
* carry twice as much mail/goods as normal cargo, and four times as
|
||||
* many passengers
|
||||
*/
|
||||
amount = rvi->capacity;
|
||||
(old_cid == CT_PASSENGERS) ||
|
||||
(amount <<= 1, old_cid == CT_MAIL || old_cid == CT_GOODS) ||
|
||||
(amount <<= 1, true);
|
||||
(new_cid == CT_PASSENGERS) ||
|
||||
(amount >>= 1, new_cid == CT_MAIL || new_cid == CT_GOODS) ||
|
||||
(amount >>= 1, true);
|
||||
switch (old_cid) {
|
||||
case CT_PASSENGERS: break;
|
||||
case CT_MAIL:
|
||||
case CT_GOODS: amount *= 2; break;
|
||||
default: amount *= 4; break;
|
||||
}
|
||||
switch (new_cid) {
|
||||
case CT_PASSENGERS: break;
|
||||
case CT_MAIL:
|
||||
case CT_GOODS: amount /= 2; break;
|
||||
default: amount /= 4; break;
|
||||
}
|
||||
};
|
||||
|
||||
if (amount != 0) {
|
||||
@@ -1726,7 +1725,7 @@ int32 CmdRefitRailVehicle(int x, int y, uint32 flags, uint32 p1, uint32 p2)
|
||||
}
|
||||
}
|
||||
}
|
||||
} while ( (v=v->next) != NULL );
|
||||
} while ((v = v->next) != NULL);
|
||||
|
||||
_returned_refit_capacity = num;
|
||||
|
||||
@@ -1747,7 +1746,7 @@ typedef struct TrainFindDepotData {
|
||||
static bool NtpCallbFindDepot(TileIndex tile, TrainFindDepotData *tfdd, int track, uint length)
|
||||
{
|
||||
if (IsTileType(tile, MP_RAILWAY) && IsTileOwner(tile, tfdd->owner)) {
|
||||
if ((_m[tile].m5 & ~0x3) == 0xC0) {
|
||||
if ((_m[tile].m5 & 0xFC) == 0xC0) {
|
||||
tfdd->best_length = length;
|
||||
tfdd->tile = tile;
|
||||
return true;
|
||||
@@ -1795,8 +1794,7 @@ static TrainFindDepotData FindClosestTrainDepot(Vehicle *v)
|
||||
* work for now :-) We can possibly change this when the old pathfinder
|
||||
* is removed. */
|
||||
tfdd.best_length = ftd.best_path_dist / NPF_TILE_LENGTH;
|
||||
if (NPFGetFlag(&ftd.node, NPF_FLAG_REVERSE))
|
||||
tfdd.reverse = true;
|
||||
if (NPFGetFlag(&ftd.node, NPF_FLAG_REVERSE)) tfdd.reverse = true;
|
||||
}
|
||||
} else {
|
||||
// search in the forward direction first.
|
||||
@@ -1954,13 +1952,8 @@ static void TrainPlayLeaveStationSound(const Vehicle* v)
|
||||
SndPlayVehicleFx(sfx[RailVehInfo(engtype)->engclass], v);
|
||||
break;
|
||||
|
||||
case RAILTYPE_MONO:
|
||||
SndPlayVehicleFx(SND_47_MAGLEV_2, v);
|
||||
break;
|
||||
|
||||
case RAILTYPE_MAGLEV:
|
||||
SndPlayVehicleFx(SND_41_MAGLEV, v);
|
||||
break;
|
||||
case RAILTYPE_MONO: SndPlayVehicleFx(SND_47_MAGLEV_2, v); break;
|
||||
case RAILTYPE_MAGLEV: SndPlayVehicleFx(SND_41_MAGLEV, v); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2113,11 +2106,10 @@ static byte ChooseTrainTrack(Vehicle *v, TileIndex tile, int enterdir, TrackdirB
|
||||
static float f;
|
||||
#endif
|
||||
|
||||
assert( (trackdirbits & ~0x3F) == 0);
|
||||
assert((trackdirbits & ~0x3F) == 0);
|
||||
|
||||
/* quick return in case only one possible track is available */
|
||||
if (KILL_FIRST_BIT(trackdirbits) == 0)
|
||||
return FIND_FIRST_BIT(trackdirbits);
|
||||
if (KILL_FIRST_BIT(trackdirbits) == 0) return FIND_FIRST_BIT(trackdirbits);
|
||||
|
||||
if (_patches.new_pathfinding_all) { /* Use a new pathfinding for everything */
|
||||
NPFFindStationOrTileData fstd;
|
||||
@@ -2214,10 +2206,11 @@ static bool CheckReverseTrain(Vehicle *v)
|
||||
/* We didn't find anything, just keep on going straight ahead */
|
||||
reverse_best = false;
|
||||
} else {
|
||||
if (NPFGetFlag(&ftd.node, NPF_FLAG_REVERSE))
|
||||
if (NPFGetFlag(&ftd.node, NPF_FLAG_REVERSE)) {
|
||||
reverse_best = true;
|
||||
else
|
||||
} else {
|
||||
reverse_best = false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (;;) {
|
||||
@@ -2260,8 +2253,7 @@ good:;
|
||||
best_track_dist = fd.best_track_dist;
|
||||
reverse_best = reverse;
|
||||
bad:;
|
||||
if (reverse != 0)
|
||||
break;
|
||||
if (reverse != 0) break;
|
||||
reverse = 2;
|
||||
}
|
||||
}
|
||||
@@ -2455,7 +2447,8 @@ static void TrainEnterStation(Vehicle *v, StationID station)
|
||||
STR_8801_CITIZENS_CELEBRATE_FIRST,
|
||||
flags,
|
||||
v->index,
|
||||
0);
|
||||
0
|
||||
);
|
||||
}
|
||||
|
||||
// Did we reach the final destination?
|
||||
@@ -2678,8 +2671,7 @@ static void SetVehicleCrashed(Vehicle *v)
|
||||
{
|
||||
Vehicle *u;
|
||||
|
||||
if (v->u.rail.crash_anim_pos != 0)
|
||||
return;
|
||||
if (v->u.rail.crash_anim_pos != 0) return;
|
||||
|
||||
v->u.rail.crash_anim_pos++;
|
||||
|
||||
@@ -2765,8 +2757,7 @@ static void *CheckVehicleAtSignal(Vehicle *v, void *data)
|
||||
v->tile == vasd->tile) {
|
||||
byte diff = (v->direction - vasd->direction + 2) & 7;
|
||||
|
||||
if (diff == 2 || (v->cur_speed <= 5 && diff <= 4))
|
||||
return v;
|
||||
if (diff == 2 || (v->cur_speed <= 5 && diff <= 4)) return v;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@@ -2796,8 +2787,7 @@ static void TrainController(Vehicle *v)
|
||||
} else {
|
||||
/* is not inside depot */
|
||||
|
||||
if (!TrainCheckIfLineEnds(v))
|
||||
return;
|
||||
if (!TrainCheckIfLineEnds(v)) return;
|
||||
|
||||
r = VehicleEnterTile(v, gp.new_tile, gp.x, gp.y);
|
||||
if (r & 0x8) {
|
||||
@@ -2831,14 +2821,15 @@ static void TrainController(Vehicle *v)
|
||||
/* Combine the from & to directions.
|
||||
* Now, the lower byte contains the track status, and the byte at bit 16 contains
|
||||
* the signal status. */
|
||||
tracks = ts|(ts >> 8);
|
||||
tracks = ts | (ts >> 8);
|
||||
bits = tracks & 0xFF;
|
||||
if (_patches.new_pathfinding_all && _patches.forbid_90_deg && prev == NULL)
|
||||
if (_patches.new_pathfinding_all && _patches.forbid_90_deg && prev == NULL) {
|
||||
/* We allow wagons to make 90 deg turns, because forbid_90_deg
|
||||
* can be switched on halfway a turn */
|
||||
bits &= ~TrackCrossesTracks(FIND_FIRST_BIT(v->u.rail.track));
|
||||
}
|
||||
|
||||
if ( bits == 0) {
|
||||
if (bits == 0) {
|
||||
//debug("%x == 0", bits);
|
||||
goto invalid_rail;
|
||||
}
|
||||
@@ -2878,7 +2869,7 @@ static void TrainController(Vehicle *v)
|
||||
|
||||
/* Call the landscape function and tell it that the vehicle entered the tile */
|
||||
r = VehicleEnterTile(v, gp.new_tile, gp.x, gp.y);
|
||||
if (r&0x8){
|
||||
if (r & 0x8) {
|
||||
//debug("%x & 0x8", r);
|
||||
goto invalid_rail;
|
||||
}
|
||||
@@ -2891,17 +2882,14 @@ static void TrainController(Vehicle *v)
|
||||
assert(v->u.rail.track);
|
||||
}
|
||||
|
||||
if (IsFrontEngine(v))
|
||||
TrainMovedChangeSignals(gp.new_tile, enterdir);
|
||||
if (IsFrontEngine(v)) TrainMovedChangeSignals(gp.new_tile, enterdir);
|
||||
|
||||
/* Signals can only change when the first
|
||||
* (above) or the last vehicle moves. */
|
||||
if (v->next == NULL)
|
||||
TrainMovedChangeSignals(gp.old_tile, (enterdir) ^ 2);
|
||||
|
||||
if (prev == NULL) {
|
||||
AffectSpeedByDirChange(v, chosen_dir);
|
||||
}
|
||||
if (prev == NULL) AffectSpeedByDirChange(v, chosen_dir);
|
||||
|
||||
v->direction = chosen_dir;
|
||||
}
|
||||
@@ -2951,9 +2939,8 @@ red_light: {
|
||||
if (!(_m[gp.new_tile].m3 & SignalAgainstTrackdir(i))) {
|
||||
v->cur_speed = 0;
|
||||
v->subspeed = 0;
|
||||
v->progress = 255-100;
|
||||
if (++v->load_unload_time_rem < _patches.wait_oneway_signal * 20)
|
||||
return;
|
||||
v->progress = 255 - 100;
|
||||
if (++v->load_unload_time_rem < _patches.wait_oneway_signal * 20) return;
|
||||
} else if (_m[gp.new_tile].m3 & SignalAlongTrackdir(i)){
|
||||
v->cur_speed = 0;
|
||||
v->subspeed = 0;
|
||||
@@ -2965,8 +2952,7 @@ red_light: {
|
||||
vasd.direction = dir ^ 4;
|
||||
|
||||
/* check if a train is waiting on the other side */
|
||||
if (VehicleFromPos(o_tile, &vasd, CheckVehicleAtSignal) == NULL)
|
||||
return;
|
||||
if (VehicleFromPos(o_tile, &vasd, CheckVehicleAtSignal) == NULL) return;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3016,8 +3002,7 @@ static void DeleteLastWagon(Vehicle *v)
|
||||
if (v->u.rail.track == 0x40) { // inside a tunnel
|
||||
TileIndex endtile = CheckTunnelBusy(v->tile, NULL);
|
||||
|
||||
if (endtile == INVALID_TILE) // tunnel is busy (error returned)
|
||||
return;
|
||||
if (endtile == INVALID_TILE) return; // tunnel is busy (error returned)
|
||||
|
||||
switch (v->direction) {
|
||||
case 1:
|
||||
@@ -3040,7 +3025,7 @@ static void DeleteLastWagon(Vehicle *v)
|
||||
|
||||
static void ChangeTrainDirRandomly(Vehicle *v)
|
||||
{
|
||||
static int8 _random_dir_change[4] = { -1, 0, 0, 1};
|
||||
static const int8 _random_dir_change[4] = { -1, 0, 0, 1 };
|
||||
|
||||
do {
|
||||
//I need to buffer the train direction
|
||||
@@ -3052,12 +3037,12 @@ static void ChangeTrainDirRandomly(Vehicle *v)
|
||||
v->cur_image = GetTrainImage(v, v->direction);
|
||||
AfterSetTrainPos(v, false);
|
||||
}
|
||||
} while ( (v=v->next) != NULL);
|
||||
} while ((v = v->next) != NULL);
|
||||
}
|
||||
|
||||
static void HandleCrashedTrain(Vehicle *v)
|
||||
{
|
||||
int state = ++v->u.rail.crash_anim_pos, index;
|
||||
int state = ++v->u.rail.crash_anim_pos;
|
||||
uint32 r;
|
||||
Vehicle *u;
|
||||
|
||||
@@ -3066,7 +3051,7 @@ static void HandleCrashedTrain(Vehicle *v)
|
||||
}
|
||||
|
||||
if (state <= 200 && CHANCE16R(1, 7, r)) {
|
||||
index = (r * 10 >> 16);
|
||||
int index = (r * 10 >> 16);
|
||||
|
||||
u = v;
|
||||
do {
|
||||
@@ -3080,12 +3065,10 @@ static void HandleCrashedTrain(Vehicle *v)
|
||||
EV_EXPLOSION_SMALL);
|
||||
break;
|
||||
}
|
||||
} while ( (u=u->next) != NULL);
|
||||
} while ((u = u->next) != NULL);
|
||||
}
|
||||
|
||||
if (state <= 240 && !(v->tick_counter&3)) {
|
||||
ChangeTrainDirRandomly(v);
|
||||
}
|
||||
if (state <= 240 && !(v->tick_counter & 3)) ChangeTrainDirRandomly(v);
|
||||
|
||||
if (state >= 4440 && !(v->tick_counter&0x1F)) {
|
||||
DeleteLastWagon(v);
|
||||
@@ -3174,27 +3157,13 @@ static bool TrainCheckIfLineEnds(Vehicle *v)
|
||||
y = v->y_pos & 0xF;
|
||||
|
||||
switch (v->direction) {
|
||||
case 0:
|
||||
x = (~x) + (~y) + 24;
|
||||
break;
|
||||
case 7:
|
||||
x = y;
|
||||
/* fall through */
|
||||
case 1:
|
||||
x = (~x) + 16;
|
||||
break;
|
||||
case 2:
|
||||
x = (~x) + y + 8;
|
||||
break;
|
||||
case 3:
|
||||
x = y;
|
||||
break;
|
||||
case 4:
|
||||
x = x + y - 8;
|
||||
break;
|
||||
case 6:
|
||||
x = (~y) + x + 8;
|
||||
break;
|
||||
case 0: x = ~x + ~y + 24; break;
|
||||
case 7: x = y; /* FALLTHROUGH */
|
||||
case 1: x = ~x + 16; break;
|
||||
case 2: x = ~x + y + 8; break;
|
||||
case 3: x = y; break;
|
||||
case 4: x = x + y - 8; break;
|
||||
case 6: x = ~y + x + 8; break;
|
||||
}
|
||||
|
||||
if (GB(ts, 0, 16) != 0) {
|
||||
@@ -3227,7 +3196,7 @@ static bool TrainCheckIfLineEnds(Vehicle *v)
|
||||
// slow down
|
||||
v->vehstatus |= VS_TRAIN_SLOWING;
|
||||
break_speed = _breakdown_speeds[x & 0xF];
|
||||
if (!(v->direction&1)) break_speed >>= 1;
|
||||
if (!(v->direction & 1)) break_speed >>= 1;
|
||||
if (break_speed < v->cur_speed) v->cur_speed = break_speed;
|
||||
|
||||
return true;
|
||||
@@ -3243,8 +3212,7 @@ static void TrainLocoHandler(Vehicle *v, bool mode)
|
||||
return;
|
||||
}
|
||||
|
||||
if (v->u.rail.force_proceed != 0)
|
||||
v->u.rail.force_proceed--;
|
||||
if (v->u.rail.force_proceed != 0) v->u.rail.force_proceed--;
|
||||
|
||||
/* train is broken down? */
|
||||
if (v->breakdown_ctr != 0) {
|
||||
@@ -3260,9 +3228,7 @@ static void TrainLocoHandler(Vehicle *v, bool mode)
|
||||
}
|
||||
|
||||
/* exit if train is stopped */
|
||||
if (v->vehstatus & VS_STOPPED && v->cur_speed == 0)
|
||||
return;
|
||||
|
||||
if (v->vehstatus & VS_STOPPED && v->cur_speed == 0) return;
|
||||
|
||||
if (ProcessTrainOrder(v)) {
|
||||
v->load_unload_time_rem = 0;
|
||||
@@ -3274,19 +3240,16 @@ static void TrainLocoHandler(Vehicle *v, bool mode)
|
||||
|
||||
HandleTrainLoading(v, mode);
|
||||
|
||||
if (v->current_order.type == OT_LOADING)
|
||||
return;
|
||||
if (v->current_order.type == OT_LOADING) return;
|
||||
|
||||
if (CheckTrainStayInDepot(v))
|
||||
return;
|
||||
if (CheckTrainStayInDepot(v)) return;
|
||||
|
||||
if (!mode) HandleLocomotiveSmokeCloud(v);
|
||||
|
||||
j = UpdateTrainSpeed(v);
|
||||
if (j == 0) {
|
||||
// if the vehicle has speed 0, update the last_speed field.
|
||||
if (v->cur_speed != 0)
|
||||
return;
|
||||
if (v->cur_speed != 0) return;
|
||||
} else {
|
||||
TrainCheckIfLineEnds(v);
|
||||
|
||||
@@ -3409,8 +3372,9 @@ static void CheckIfTrainNeedsService(Vehicle *v)
|
||||
|
||||
if (v->current_order.type == OT_GOTO_DEPOT &&
|
||||
v->current_order.station != depot->index &&
|
||||
!CHANCE16(3,16))
|
||||
!CHANCE16(3, 16)) {
|
||||
return;
|
||||
}
|
||||
|
||||
v->current_order.type = OT_GOTO_DEPOT;
|
||||
v->current_order.flags = OF_NON_STOP;
|
||||
@@ -3436,8 +3400,7 @@ void OnNewDay_Train(Vehicle *v)
|
||||
{
|
||||
TileIndex tile;
|
||||
|
||||
if ((++v->day_counter & 7) == 0)
|
||||
DecreaseVehicleValue(v);
|
||||
if ((++v->day_counter & 7) == 0) DecreaseVehicleValue(v);
|
||||
|
||||
if (IsFrontEngine(v)) {
|
||||
CheckVehicleBreakdown(v);
|
||||
@@ -3582,46 +3545,46 @@ void ConvertOldMultiheadToNew(void)
|
||||
if (HASBIT(v->subtype, 7) && ((v->subtype & ~0x80) == 0 || (v->subtype & ~0x80) == 4)) {
|
||||
Vehicle *u = v;
|
||||
|
||||
BEGIN_ENUM_WAGONS(u)
|
||||
BEGIN_ENUM_WAGONS(u) {
|
||||
const RailVehicleInfo *rvi = RailVehInfo(u->engine_type);
|
||||
CLRBIT(u->subtype, 7);
|
||||
switch (u->subtype) {
|
||||
case 0: /* TS_Front_Engine */
|
||||
if (rvi->flags & RVI_MULTIHEAD) {
|
||||
SetMultiheaded(u);
|
||||
}
|
||||
SetFrontEngine(u);
|
||||
SetTrainEngine(u);
|
||||
break;
|
||||
case 1: /* TS_Artic_Part */
|
||||
u->subtype = 0;
|
||||
SetArticulatedPart(u);
|
||||
break;
|
||||
case 2: /* TS_Not_First */
|
||||
u->subtype = 0;
|
||||
if (rvi->flags & RVI_WAGON) {
|
||||
// normal wagon
|
||||
SetTrainWagon(u);
|
||||
|
||||
CLRBIT(u->subtype, 7);
|
||||
switch (u->subtype) {
|
||||
case 0: /* TS_Front_Engine */
|
||||
if (rvi->flags & RVI_MULTIHEAD) SetMultiheaded(u);
|
||||
SetFrontEngine(u);
|
||||
SetTrainEngine(u);
|
||||
break;
|
||||
}
|
||||
|
||||
case 1: /* TS_Artic_Part */
|
||||
u->subtype = 0;
|
||||
SetArticulatedPart(u);
|
||||
break;
|
||||
|
||||
case 2: /* TS_Not_First */
|
||||
u->subtype = 0;
|
||||
if (rvi->flags & RVI_WAGON) {
|
||||
// normal wagon
|
||||
SetTrainWagon(u);
|
||||
break;
|
||||
}
|
||||
if (rvi->flags & RVI_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->flags & RVI_MULTIHEAD) SetMultiheaded(u);
|
||||
SetTrainEngine(u);
|
||||
break;
|
||||
case 4: /* TS_Free_Car */
|
||||
u->subtype = 0;
|
||||
SetTrainWagon(u);
|
||||
SetFreeWagon(u);
|
||||
break;
|
||||
default: NOT_REACHED(); break;
|
||||
}
|
||||
END_ENUM_WAGONS(u)
|
||||
break;
|
||||
|
||||
case 4: /* TS_Free_Car */
|
||||
u->subtype = 0;
|
||||
SetTrainWagon(u);
|
||||
SetFreeWagon(u);
|
||||
break;
|
||||
default: NOT_REACHED(); break;
|
||||
}
|
||||
} END_ENUM_WAGONS(u)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user