diff options
Diffstat (limited to 'src/newgrf_station.cpp')
-rw-r--r-- | src/newgrf_station.cpp | 54 |
1 files changed, 46 insertions, 8 deletions
diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp index 01c3bd988..1f2e41787 100644 --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -7,6 +7,7 @@ #include "landscape.h" #include "debug.h" #include "station_base.h" +#include "waypoint.h" #include "roadstop_base.h" #include "newgrf_commons.h" #include "newgrf_station.h" @@ -466,7 +467,7 @@ static uint32 StationGetVariable(const ResolverObject *object, byte variable, by return res; } - /* General station properties */ + /* General station variables */ case 0x82: return 50; case 0x84: return st->string_id; case 0x86: return 0; @@ -530,12 +531,43 @@ uint32 Station::GetNewGRFVariable(const ResolverObject *object, byte variable, b } } - DEBUG(grf, 1, "Unhandled station property 0x%X", variable); + DEBUG(grf, 1, "Unhandled station variable 0x%X", variable); *available = false; return UINT_MAX; } +uint32 Waypoint::GetNewGRFVariable(const ResolverObject *object, byte variable, byte parameter, bool *available) const +{ + switch (variable) { + case 0x48: return 0; // Accepted cargo types + case 0x8A: return HVOT_TRAIN; + case 0xF1: return 0; // airport type + case 0xF2: return 0; // truck stop status + case 0xF3: return 0; // bus stop status + case 0xF6: return 0; // airport flags + case 0xF7: return 0; // airport flags cont. + } + + /* Handle cargo variables with parameter, 0x60 to 0x65 */ + if (variable >= 0x60 && variable <= 0x65) { + return 0; + } + + /* Handle cargo variables (deprecated) */ + if (variable >= 0x8C && variable <= 0xEC) { + switch (GB(variable - 0x8C, 0, 3)) { + case 3: return INITIAL_STATION_RATING; + case 4: return INVALID_STATION; + default: return 0; + } + } + + DEBUG(grf, 1, "Unhandled station variable 0x%X", variable); + + *available = false; + return UINT_MAX; +} static const SpriteGroup *StationResolveReal(const ResolverObject *object, const RealSpriteGroup *group) { @@ -865,14 +897,20 @@ bool DrawStationTile(int x, int y, RailType railtype, Axis axis, StationClassID const StationSpec *GetStationSpec(TileIndex t) { - const BaseStation *st; - uint specindex; + if (IsRailwayStationTile(t)) { + if (!IsCustomStationSpecIndex(t)) return NULL; - if (!IsCustomStationSpecIndex(t)) return NULL; + const BaseStation *st = BaseStation::GetByTile(t); + uint specindex = GetCustomStationSpecIndex(t); + return specindex < st->num_specs ? st->speclist[specindex].spec : NULL; + } - st = BaseStation::GetByTile(t); - specindex = GetCustomStationSpecIndex(t); - return specindex < st->num_specs ? st->speclist[specindex].spec : NULL; + if (IsRailWaypointTile(t)) { + const BaseStation *st = BaseStation::GetByTile(t); + return st->num_specs != 0 ? st->speclist[0].spec : NULL; + } + + return NULL; } |