diff --git a/src/newgrf_roadstop.cpp b/src/newgrf_roadstop.cpp index 9b1af78519..99866513bc 100644 --- a/src/newgrf_roadstop.cpp +++ b/src/newgrf_roadstop.cpp @@ -199,6 +199,17 @@ uint32_t RoadStopScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] u return 0xFFFE; } + /* 16 bit road stop ID of nearby tiles, without GRFID check */ + case 0x6C: { + TileIndex nearby_tile = GetNearbyTile(parameter, this->tile); + + if (!IsAnyRoadStopTile(nearby_tile)) return 0xFFFFFFFF; + if (!IsCustomRoadStopSpecIndex(nearby_tile)) return 0xFFFE; + + const auto &sm = BaseStation::GetByTile(nearby_tile)->roadstop_speclist[GetCustomRoadStopSpecIndex(nearby_tile)]; + return sm.localidx; + } + case 0xF0: return this->st == nullptr ? 0 : this->st->facilities; // facilities case 0xFA: return ClampTo((this->st == nullptr ? TimerGameCalendar::date : this->st->build_date) - CalendarTime::DAYS_TILL_ORIGINAL_BASE_YEAR); // build date diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp index af67fbf648..d7c6b77f0d 100644 --- a/src/newgrf_station.cpp +++ b/src/newgrf_station.cpp @@ -393,6 +393,16 @@ TownScopeResolver *StationResolverObject::GetTown() return 0xFFFE; } + case 0x6C: { // 16 bit Station ID of nearby tiles, without GRFID check + TileIndex nearby_tile = GetNearbyTile(parameter, this->tile); + + if (!HasStationTileRail(nearby_tile)) return 0xFFFFFFFF; + if (!IsCustomStationSpecIndex(nearby_tile)) return 0xFFFE; + + const auto &sm = BaseStation::GetByTile(nearby_tile)->speclist[GetCustomStationSpecIndex(nearby_tile)]; + return sm.localidx; + } + /* General station variables */ case 0x82: return 50; case 0x84: return this->st->string_id; diff --git a/src/table/newgrf_debug_data.h b/src/table/newgrf_debug_data.h index e134d182e2..74909f590b 100644 --- a/src/table/newgrf_debug_data.h +++ b/src/table/newgrf_debug_data.h @@ -132,6 +132,7 @@ static const NIVariable _niv_stations[] = { NIV(0x69, "information about cargo accepted in the past"), NIV(0x6A, "GRFID of nearby station tiles"), NIV(0x6B, "station ID of nearby tiles"), + NIV(0x6C, "station ID of nearby tiles even if not from the same GRF"), NIV_END() }; @@ -691,6 +692,7 @@ static const NIVariable _nif_roadstops[] = { NIV(0x69, "information about cargo accepted in the past"), NIV(0x6A, "GRFID of nearby road stop tiles"), NIV(0x6B, "road stop ID of nearby tiles"), + NIV(0x6C, "road stop ID of nearby tiles even if not from the same GRF"), NIV_END(), };