diff --git a/newgrf.c b/newgrf.c index 3ae0d2e4b2..fc0688ae3e 100644 --- a/newgrf.c +++ b/newgrf.c @@ -43,6 +43,7 @@ static int _skip_sprites; // XXX static uint _file_index; // XXX SpriteID _signal_base; +SpriteID _coast_base; static GRFFile *_cur_grffile; GRFFile *_first_grffile; @@ -2159,6 +2160,14 @@ static void GraphicsNew(byte *buf, int len) replace = SPR_CANALS_BASE + 5; break; + case 0x0D: /* Coast graphics */ + if (num != 16) { + grfmsg(GMS_WARN, "GraphicsNews: Coast graphics sprite count must be 16, skipping."); + return; + } + _coast_base = _cur_spriteid; + break; + default: grfmsg(GMS_NOTICE, "GraphicsNew: Custom graphics (type 0x%02X) sprite block of length %u (unimplemented, ignoring).\n", type, num); @@ -3326,6 +3335,7 @@ static void ResetNewGRFData(void) _traininfo_vehicle_width = 29; _have_2cc = false; _signal_base = 0; + _coast_base = 0; InitializeSoundPool(); InitializeSpriteGroupPool(); diff --git a/newgrf.h b/newgrf.h index b4eee1b9f0..385e5c7b67 100644 --- a/newgrf.h +++ b/newgrf.h @@ -61,6 +61,7 @@ typedef struct GRFConfig { extern GRFConfig *_first_grfconfig; extern SpriteID _signal_base; +extern SpriteID _coast_base; extern bool _have_2cc; void LoadNewGRF(uint load_index, uint file_index); diff --git a/water_cmd.c b/water_cmd.c index 5603d6787d..8af293b95c 100644 --- a/water_cmd.c +++ b/water_cmd.c @@ -19,6 +19,7 @@ #include "vehicle_gui.h" #include "train.h" #include "water_map.h" +#include "newgrf.h" const SpriteID _water_shore_sprites[15] = { 0, @@ -452,7 +453,11 @@ static void DrawTile_Water(TileInfo *ti) case WATER_COAST: assert(!IsSteepSlope(ti->tileh)); - DrawGroundSprite(_water_shore_sprites[ti->tileh]); + if (_coast_base != 0) { + DrawGroundSprite(_coast_base + ti->tileh); + } else { + DrawGroundSprite(_water_shore_sprites[ti->tileh]); + } break; case WATER_LOCK: {