diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 45208a3c9c..31963f5d27 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -2043,11 +2043,11 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte const uint8_t *layout = buf->ReadBytes(length * number); statspec->layouts[length - 1][number - 1].assign(layout, layout + length * number); - /* Validate tile values are only the permitted 00, 02, 04 and 06. */ + /* Ensure the first bit, axis, is zero. The rest of the value is validated during rendering, as we don't know the range yet. */ for (auto &tile : statspec->layouts[length - 1][number - 1]) { - if ((tile & 6) != tile) { + if ((tile & ~1U) != tile) { GrfMsg(1, "StationChangeInfo: Invalid tile {} in layout {}x{}", tile, length, number); - tile &= 6; + tile &= ~1U; } } } diff --git a/src/newgrf_callbacks.h b/src/newgrf_callbacks.h index fac50c46a3..017de166d3 100644 --- a/src/newgrf_callbacks.h +++ b/src/newgrf_callbacks.h @@ -38,7 +38,7 @@ enum CallbackID { /** Determine whether a newstation should be made available to build. */ CBID_STATION_AVAILABILITY = 0x13, // 8 bit callback - /** Choose a tile layout to draw, instead of the standard 0-7 range. */ + /** Choose a tile layout to draw, instead of the standard range. */ CBID_STATION_DRAW_TILE_LAYOUT = 0x14, /** diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 50e0bc955d..2e3e397be0 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -1463,7 +1463,7 @@ CommandCost CmdBuildRailStation(DoCommandFlag flags, TileIndex tile_org, RailTyp /* As the station is not yet completely finished, the station does not yet exist. */ uint16_t callback = GetStationCallback(CBID_STATION_BUILD_TILE_LAYOUT, platinfo, 0, statspec, nullptr, tile); if (callback != CALLBACK_FAILED) { - if (callback < 8) { + if (callback <= UINT8_MAX) { SetStationGfx(tile, (callback & ~1) + axis); } else { ErrorUnknownCallbackResult(statspec->grf_prop.grffile->grfid, CBID_STATION_BUILD_TILE_LAYOUT, callback);