|
@@ -1240,13 +1240,18 @@ static void HandleLocomotiveSmokeCloud(V
|
|
|
} while ( (v = v->next) != NULL );
|
|
|
|
|
|
}
|
|
|
|
|
|
static void TrainPlayLeaveStationSound(Vehicle *v)
|
|
|
{
|
|
|
static const byte sfx[3] = { 0x2, 0x8, 0x8 };
|
|
|
static const SoundFx sfx[] = {
|
|
|
SND_04_TRAIN,
|
|
|
SND_0A_TRAIN_HORN,
|
|
|
SND_0A_TRAIN_HORN
|
|
|
};
|
|
|
|
|
|
int engtype = v->engine_type;
|
|
|
|
|
|
switch (_engines[engtype].railtype) {
|
|
|
case 0:
|
|
|
SndPlayVehicleFx(sfx[RailVehInfo(engtype)->engclass], v);
|
|
|
break;
|
|
@@ -2004,13 +2009,13 @@ static void CheckTrainCollision(Vehicle
|
|
|
AddNewsItem(STR_8868_TRAIN_CRASH_DIE_IN_FIREBALL,
|
|
|
NEWS_FLAGS(NM_THIN, NF_VIEWPORT|NF_VEHICLE, NT_ACCIDENT, 0),
|
|
|
v->index,
|
|
|
0);
|
|
|
|
|
|
ModifyStationRatingAround(v->tile, v->owner, -160, 30);
|
|
|
SndPlayVehicleFx(17, v);
|
|
|
SndPlayVehicleFx(SND_13_BIG_CRASH, v);
|
|
|
}
|
|
|
|
|
|
static void *CheckVehicleAtSignal(Vehicle *v, void *data)
|
|
|
{
|
|
|
uint32 d = (uint32)data;
|
|
|
|
|
@@ -2317,13 +2322,14 @@ static void HandleBrokenTrain(Vehicle *v
|
|
|
if (v->breakdowns_since_last_service != 255)
|
|
|
v->breakdowns_since_last_service++;
|
|
|
|
|
|
InvalidateWindow(WC_VEHICLE_VIEW, v->index);
|
|
|
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
|
|
|
|
|
|
SndPlayVehicleFx((_opt.landscape != LT_CANDY) ? 0xE : 0x3A, v);
|
|
|
SndPlayVehicleFx((_opt.landscape != LT_CANDY) ?
|
|
|
SND_10_TRAIN_BREAKDOWN : SND_3A_COMEDY_BREAKDOWN_2, v);
|
|
|
|
|
|
if (!(v->vehstatus & VS_HIDDEN)) {
|
|
|
Vehicle *u = CreateEffectVehicleRel(v, 4, 4, 5, EV_BREAKDOWN_SMOKE);
|
|
|
if (u)
|
|
|
u->u.special.unk0 = v->breakdown_delay * 2;
|
|
|
}
|
|
@@ -2414,13 +2420,13 @@ static void TrainCheckIfLineEnds(Vehicle
|
|
|
if ( (uint16)ts != 0) {
|
|
|
if ((ts &= (ts >> 16)) == 0) {
|
|
|
// make a rail/road crossing red
|
|
|
if (IS_TILETYPE(tile, MP_STREET) && (_map5[tile] & 0xF0)==0x10) {
|
|
|
if (!(_map5[tile] & 4)) {
|
|
|
_map5[tile] |= 4;
|
|
|
SndPlayVehicleFx(12, v);
|
|
|
SndPlayVehicleFx(SND_0E_LEVEL_CROSSING, v);
|
|
|
MarkTileDirtyByTile(tile);
|
|
|
}
|
|
|
}
|
|
|
return;
|
|
|
}
|
|
|
} else if (x + 4 > 15) {
|