diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 7879af4e7f..798503f2c2 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -997,21 +997,8 @@ bool AfterLoadGame() FOR_ALL_WAYPOINTS(wp) { if (wp->delete_ctr == 0) { - const StationSpec *statspec = NULL; - if (HasBit(_m[wp->xy].m3, 4)) { - statspec = GetCustomStationSpec(STAT_CLASS_WAYP, _m[wp->xy].m4 + 1); - } - - if (statspec != NULL) { - wp->spec.spec = statspec; - wp->spec.grfid = statspec->grffile->grfid; - wp->spec.localidx = statspec->localidx; - } else { - /* No custom graphics set, so set to default. */ - wp->spec.spec = NULL; - wp->spec.grfid = 0; - wp->spec.localidx = 0; + wp->AssignStationSpec(_m[wp->xy].m4 + 1); } /* Move ground type bits from m2 to m4. */ diff --git a/src/waypoint.cpp b/src/waypoint.cpp index e245627e57..015ca8941e 100644 --- a/src/waypoint.cpp +++ b/src/waypoint.cpp @@ -91,6 +91,25 @@ Waypoint::~Waypoint() this->sign.MarkDirty(); } +/** + * Assign a station spec to this waypoint. + * @param index the index of the spec from the waypoint specs + */ +void Waypoint::AssignStationSpec(uint index) +{ + const StationSpec *statspec = GetCustomStationSpec(STAT_CLASS_WAYP, index); + + if (statspec != NULL) { + this->spec.spec = statspec; + this->spec.grfid = statspec->grffile->grfid; + this->spec.localidx = statspec->localidx; + } else { + this->spec.spec = NULL; + this->spec.grfid = 0; + this->spec.localidx = 0; + } +} + void InitializeWaypoints() { _waypoint_pool.CleanPool(); diff --git a/src/waypoint.h b/src/waypoint.h index 18fc2a33ca..6e3e241053 100644 --- a/src/waypoint.h +++ b/src/waypoint.h @@ -36,6 +36,8 @@ struct Waypoint : WaypointPool::PoolItem<&_waypoint_pool> { ~Waypoint(); void UpdateVirtCoord(); + + void AssignStationSpec(uint index); }; #define FOR_ALL_WAYPOINTS_FROM(var, start) FOR_ALL_ITEMS_FROM(Waypoint, waypoint_index, var, start) diff --git a/src/waypoint_cmd.cpp b/src/waypoint_cmd.cpp index cddd4a7acf..1e8094162d 100644 --- a/src/waypoint_cmd.cpp +++ b/src/waypoint_cmd.cpp @@ -190,18 +190,7 @@ CommandCost CmdBuildTrainWaypoint(TileIndex tile, DoCommandFlag flags, uint32 p1 SetDepotWaypointReservation(tile, reserved); MarkTileDirtyByTile(tile); - const StationSpec *statspec = GetCustomStationSpec(STAT_CLASS_WAYP, p1); - - if (statspec != NULL) { - wp->spec.spec = statspec; - wp->spec.grfid = statspec->grffile->grfid; - wp->spec.localidx = statspec->localidx; - } else { - /* Specified custom graphics do not exist, so use default. */ - wp->spec.spec = NULL; - wp->spec.grfid = 0; - wp->spec.localidx = 0; - } + wp->AssignStationSpec(p1); wp->delete_ctr = 0; wp->build_date = _date;