Mercurial > hg > openttd
changeset 8169:7962907a27a1 draft
(svn r11732) -Fix (r4150): elrail merge gave elrail, monorail & maglev unintended speed bonuses for curves, as the bonus was based on the railtype index. The bonus is now specified by a property of the railtype.
author | peter1138 <peter1138@openttd.org> |
---|---|
date | Tue, 01 Jan 2008 14:00:31 +0000 |
parents | e321f51fe381 |
children | a8be61a5213c |
files | src/rail.h src/railtypes.h src/train_cmd.cpp |
diffstat | 3 files changed, 25 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/rail.h +++ b/src/rail.h @@ -89,6 +89,11 @@ * Offset to add to ground sprite when drawing custom waypoints / stations */ byte custom_ground_offset; + + /** + * Multiplier for curve maximum speed advantage + */ + byte curve_speed; };
--- a/src/railtypes.h +++ b/src/railtypes.h @@ -57,6 +57,9 @@ /* custom ground offset */ 0, + + /* curve speed advantage (multiplier) */ + 0, }, /** Electrified railway */ @@ -110,6 +113,9 @@ /* custom ground offset */ 0, + + /* curve speed advantage (multiplier) */ + 0, }, /** Monorail */ @@ -159,6 +165,9 @@ /* custom ground offset */ 1, + + /* curve speed advantage (multiplier) */ + 1, }, /** Maglev */ @@ -208,6 +217,9 @@ /* custom ground offset */ 2, + + /* curve speed advantage (multiplier) */ + 2, }, };
--- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -311,7 +311,8 @@ /** new acceleration*/ static int GetTrainAcceleration(Vehicle *v, bool mode) { - int max_speed = 2000; + static const int absolute_max_speed = 2000; + int max_speed = absolute_max_speed; int speed = v->cur_speed * 10 / 16; // km-ish/h -> mp/h int curvecount[2] = {0, 0}; @@ -352,13 +353,17 @@ int total = curvecount[0] + curvecount[1]; if (curvecount[0] == 1 && curvecount[1] == 1) { - max_speed = 0xFFFF; + max_speed = absolute_max_speed; } else if (total > 1) { max_speed = 232 - (13 - Clamp(sum, 1, 12)) * (13 - Clamp(sum, 1, 12)); } } - max_speed += (max_speed / 2) * v->u.rail.railtype; + if (max_speed != absolute_max_speed) { + /* Apply the engine's rail type curve speed advantage, if it slowed by curves */ + const RailtypeInfo *rti = GetRailTypeInfo(v->u.rail.railtype); + max_speed += (max_speed / 2) * rti->curve_speed; + } if (IsTileType(v->tile, MP_STATION) && IsFrontEngine(v)) { if (TrainShouldStop(v, v->tile)) {