(svn r11433) -Fix: starting OpenTTD with DOS files made it look weird out of the box.

-Change: make extra sprites (the ones not in the TTD GRFs) replaceable using Action 5.
-Feature: make replacing contiguous subsets of sprites in for some types possible in Action 5.
Note to GRF authors: when you replaced OpenTTD sprites that are not from the TTD GRF files using Action A, your GRF will not have the intended result anymore as the sprite numbers have changed. You should replace the Action A with an Action 5 from now on.
This commit is contained in:
rubidium 2007-11-15 07:42:25 +00:00
parent f28723830f
commit f546de602b
29 changed files with 394 additions and 461 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
bin/data/chars.grf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
bin/data/openttdd.grf Normal file

Binary file not shown.

BIN
bin/data/openttdw.grf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -25,8 +25,11 @@ struct MD5File {
}; };
struct FileList { struct FileList {
MD5File basic[2]; ///< grf files that always have to be loaded MD5File basic[2]; ///< GRF files that always have to be loaded
MD5File landscape[3]; ///< landscape specific grf files MD5File landscape[3]; ///< Landscape specific grf files
MD5File sound; ///< Sound samples
MD5File chars; ///< GRF File with character replacements
MD5File openttd; ///< GRF File with OTTD specific graphics
}; };
#include "table/files.h" #include "table/files.h"
@ -38,21 +41,6 @@ static const SpriteID * const _landscape_spriteindexes[] = {
_landscape_spriteindexes_3, _landscape_spriteindexes_3,
}; };
static const SpriteID * const _slopes_spriteindexes[] = {
_slopes_spriteindexes_0,
_slopes_spriteindexes_1,
_slopes_spriteindexes_2,
_slopes_spriteindexes_3,
};
static const SpriteID * const _halftile_foundation_spriteindexes[] = {
_halftile_foundation_spriteindexes_0,
_halftile_foundation_spriteindexes_1,
_halftile_foundation_spriteindexes_2,
_halftile_foundation_spriteindexes_3,
};
static uint LoadGrfFile(const char *filename, uint load_index, int file_index) static uint LoadGrfFile(const char *filename, uint load_index, int file_index)
{ {
uint load_index_org = load_index; uint load_index_org = load_index;
@ -183,7 +171,7 @@ void CheckExternalFiles()
static const size_t ERROR_MESSAGE_LENGTH = 128; static const size_t ERROR_MESSAGE_LENGTH = 128;
const FileList *files = _use_dos_palette ? &files_dos : &files_win; const FileList *files = _use_dos_palette ? &files_dos : &files_win;
char error_msg[ERROR_MESSAGE_LENGTH * (lengthof(files->basic) + lengthof(files->landscape) + lengthof(files_openttd) + 1)]; char error_msg[ERROR_MESSAGE_LENGTH * (lengthof(files->basic) + lengthof(files->landscape) + 3)];
error_msg[0] = '\0'; error_msg[0] = '\0';
char *add_pos = error_msg; char *add_pos = error_msg;
@ -199,14 +187,16 @@ void CheckExternalFiles()
} }
} }
if (!FileMD5(sample_cat_win) && !FileMD5(sample_cat_dos)) { if (!FileMD5(files_win.sound) && !FileMD5(files_dos.sound)) {
add_pos += snprintf(add_pos, ERROR_MESSAGE_LENGTH, "Your 'sample.cat' file is corrupted or missing! You can find 'sample.cat' on your Transport Tycoon Deluxe CD-ROM.\n"); add_pos += snprintf(add_pos, ERROR_MESSAGE_LENGTH, "Your 'sample.cat' file is corrupted or missing! You can find 'sample.cat' on your Transport Tycoon Deluxe CD-ROM.\n");
} }
for (uint i = 0; i < lengthof(files_openttd); i++) { if (!FileMD5(files->chars)) {
if (!FileMD5(files_openttd[i])) { add_pos += snprintf(add_pos, ERROR_MESSAGE_LENGTH, "Your '%s' file is corrupted or missing! The file was part of your installation.\n", files->chars.filename);
add_pos += snprintf(add_pos, ERROR_MESSAGE_LENGTH, "Your '%s' file is corrupted or missing! The file was part of your installation.\n", files_openttd[i].filename); }
}
if (!FileMD5(files->openttd)) {
add_pos += snprintf(add_pos, ERROR_MESSAGE_LENGTH, "Your '%s' file is corrupted or missing! The file was part of your installation.\n", files->openttd.filename);
} }
if (add_pos != error_msg) ShowInfoF(error_msg); if (add_pos != error_msg) ShowInfoF(error_msg);
@ -293,22 +283,15 @@ static const SpriteID trg1idx[] = {
END END
}; };
/* NOTE: When adding a normal sprite, increase OPENTTD_SPRITES_COUNT with the /** Replace some letter sprites with some other letters */
* amount of sprites and add them to the end of the list, with the index of static const SpriteID _chars_grf_indexes[] = {
* the old sprite-count offset from SPR_OPENTTD_BASE. With this there is no 134, 134, ///< euro symbol medium size
* correspondence of any kind with the ID's in the grf file, but results in 582, 582, ///< euro symbol large size
* a maximum use of sprite slots. */ 358, 358, ///< euro symbol tiny
static const SpriteID _openttd_grf_indexes[] = {
SPR_IMG_AUTORAIL, SPR_CURSOR_WAYPOINT, // icons etc
134, 134, ///< euro symbol medium size
582, 582, ///< euro symbol large size
358, 358, ///< euro symbol tiny
SPR_CURSOR_CANAL, SPR_IMG_FASTFORWARD, // more icons
648, 648, ///< nordic char: æ 648, 648, ///< nordic char: æ
616, 616, ///< nordic char: Æ 616, 616, ///< nordic char: Æ
666, 666, ///< nordic char: ø 666, 666, ///< nordic char: ø
634, 634, ///< nordic char: Ø 634, 634, ///< nordic char: Ø
SPR_PIN_UP, SPR_CURSOR_CLONE_TRAIN, // more icons
382, 383, ///< Œ œ tiny 382, 383, ///< Œ œ tiny
158, 159, ///< Œ œ medium 158, 159, ///< Œ œ medium
606, 607, ///< Œ œ large 606, 607, ///< Œ œ large
@ -334,18 +317,15 @@ static const SpriteID _openttd_grf_indexes[] = {
317, 320, ///< { | } ~ tiny 317, 320, ///< { | } ~ tiny
93, 96, ///< { | } ~ medium 93, 96, ///< { | } ~ medium
541, 544, ///< { | } ~ large 541, 544, ///< { | } ~ large
SPR_HOUSE_ICON, SPR_HOUSE_ICON,
585, 585, ///< § large 585, 585, ///< § large
587, 587, ///< © large 587, 587, ///< © large
592, 592, ///< ® large 592, 592, ///< ® large
594, 597, ///< ° ± ² ³ large 594, 597, ///< ° ± ² ³ large
633, 633, ///< × large 633, 633, ///< × large
665, 665, ///< ÷ large 665, 665, ///< ÷ large
SPR_SELL_TRAIN, SPR_SHARED_ORDERS_ICON,
377, 377, ///< · small 377, 377, ///< · small
153, 153, ///< · medium 153, 153, ///< · medium
601, 601, ///< · large 601, 601, ///< · large
SPR_WARNING_SIGN, SPR_CURSOR_ELRAIL_DEPOT,
END END
}; };
@ -353,7 +333,6 @@ static const SpriteID _openttd_grf_indexes[] = {
static void LoadSpriteTables() static void LoadSpriteTables()
{ {
const FileList *files = _use_dos_palette ? &files_dos : &files_win; const FileList *files = _use_dos_palette ? &files_dos : &files_win;
uint load_index;
uint i = FIRST_GRF_SLOT; uint i = FIRST_GRF_SLOT;
LoadGrfIndexed(files->basic[0].filename, trg1idx, i++); LoadGrfIndexed(files->basic[0].filename, trg1idx, i++);
@ -382,59 +361,29 @@ static void LoadSpriteTables()
); );
} }
/* Start loading the extra, non-TTD, base GRFs for the given index. */ LoadGrfIndexed(files->chars.filename, _chars_grf_indexes, i++);
load_index = SPR_SIGNALS_BASE;
load_index += LoadGrfFile("nsignalsw.grf", load_index, i++);
assert(load_index == SPR_CANALS_BASE);
load_index += LoadGrfFile("canalsw.grf", load_index, i++);
assert(load_index == SPR_SLOPES_BASE);
LoadGrfIndexed("trkfoundw.grf", _slopes_spriteindexes[_opt.landscape], i++);
load_index = SPR_AUTORAIL_BASE;
load_index += LoadGrfFile("autorail.grf", load_index, i++);
assert(load_index == SPR_ELRAIL_BASE);
load_index += LoadGrfFile("elrailsw.grf", load_index, i++);
assert(load_index == SPR_2CCMAP_BASE);
load_index += LoadGrfFile("2ccmap.grf", load_index, i++);
assert(load_index == SPR_OPENTTD_BASE);
LoadGrfIndexed("openttd.grf", _openttd_grf_indexes, i++);
load_index = SPR_OPENTTD_BASE + OPENTTD_SPRITES_COUNT;
assert(load_index == SPR_AIRPORTX_BASE);
load_index += LoadGrfFile("airports.grf", load_index, i++);
assert(load_index == SPR_ROADSTOP_BASE);
load_index += LoadGrfFile("roadstops.grf", load_index, i++);
assert(load_index == SPR_GROUP_BASE);
load_index += LoadGrfFile("group.grf", load_index, i++);
assert(load_index == SPR_TRAMWAY_BASE);
load_index += LoadGrfFile("tramtrkw.grf", load_index, i++);
assert(load_index == SPR_ONEWAY_BASE);
load_index += LoadGrfFile("oneway.grf", load_index, i++);
load_index++; // SPR_EMPTY_BOUNDING_BOX
assert(load_index == SPR_HALFTILE_FOUNDATION_BASE);
LoadGrfIndexed("halffndw.grf", _halftile_foundation_spriteindexes[_opt.landscape], i++);
load_index = SPR_HALFTILE_SELECTION_BASE;
load_index += LoadGrfFile("halfselw.grf", load_index, i++);
assert(load_index == SPR_FLAGS_BASE);
load_index += LoadGrfFile("flags.grf", load_index, i++);
/* Initialize the unicode to sprite mapping table */ /* Initialize the unicode to sprite mapping table */
InitializeUnicodeGlyphMap(); InitializeUnicodeGlyphMap();
LoadNewGRF(load_index, i); /*
* Load the base NewGRF with OTTD required graphics as first NewGRF.
* However, we do not want it to show up in the list of used NewGRFs,
* so we have to manually add it, and then remove it later.
*/
GRFConfig *top = _grfconfig;
GRFConfig *master = CallocT<GRFConfig>(1);
master->filename = strdup(files->openttd.filename);
FillGRFDetails(master, false);
ClrBitT(master->flags, GCF_INIT_ONLY);
master->next = top;
_grfconfig = master;
LoadNewGRF(SPR_NEWGRFS_BASE, i);
/* Free and remove the top element. */
ClearGRFConfig(&master);
_grfconfig = top;
} }

View File

@ -61,7 +61,6 @@
static int _skip_sprites; // XXX static int _skip_sprites; // XXX
static uint _file_index; // XXX static uint _file_index; // XXX
SpriteID _signal_base;
SpriteID _coast_base; SpriteID _coast_base;
static GRFFile *_cur_grffile; static GRFFile *_cur_grffile;
@ -3241,6 +3240,34 @@ static void FeatureNewName(byte *buf, int len)
} }
} }
/**
* Sanitize incoming sprite offsets for Action 5 graphics replacements.
* @param num the number of sprites to load.
* @param offset offset from the base.
* @param max_sprites the maximum number of sprites that can be loaded in this action 5.
* @param name used for error warnings.
* @return the number of sprites that is going to be skipped
*/
static uint16 SanitizeSpriteOffset(uint16& num, uint16 offset, int max_sprites, const char *name)
{
if (offset >= max_sprites) {
grfmsg(1, "GraphicsNew: %s sprite offset must be less than %i, skipping", name, max_sprites);
uint orig_num = num;
num = 0;
return orig_num;
}
if (offset + num > max_sprites) {
grfmsg(4, "GraphicsNew: %s sprite overflow, truncating...", name);
uint orig_num = num;
num = max(max_sprites - offset, 0);
return orig_num - num;
}
return 0;
}
/* Action 0x05 */ /* Action 0x05 */
static void GraphicsNew(byte *buf, int len) static void GraphicsNew(byte *buf, int len)
{ {
@ -3252,50 +3279,52 @@ static void GraphicsNew(byte *buf, int len)
/* TODO */ /* TODO */
SpriteID replace = 0; SpriteID replace = 0;
const SpriteID *index_tbl = NULL;
if (!check_length(len, 2, "GraphicsNew")) return; if (!check_length(len, 2, "GraphicsNew")) return;
buf++; buf++;
uint8 type = grf_load_byte(&buf); uint8 type = grf_load_byte(&buf);
uint16 num = grf_load_extended(&buf); uint16 num = grf_load_extended(&buf);
uint16 skip_num = 0;
uint16 offset = HASBIT(type, 7) ? grf_load_extended(&buf) : 0;
CLRBIT(type, 7); // Clear the high bit as that only indicates whether there is an offset.
switch (type) { switch (type) {
case 0x04: // Signal graphics case 0x04: // Signal graphics
if (num != 112 && num != 240) { if (num != PRESIGNAL_SPRITE_COUNT && num != PRESIGNAL_AND_SEMAPHORE_SPRITE_COUNT && num != PRESIGNAL_SEMAPHORE_AND_PBS_SPRITE_COUNT) {
grfmsg(1, "GraphicsNew: Signal graphics sprite count must be 112 or 240, skipping"); grfmsg(1, "GraphicsNew: Signal graphics sprite count must be 48, 112 or 240, skipping");
return; return;
} }
_signal_base = _cur_spriteid; replace = SPR_SIGNALS_BASE;
break; break;
case 0x05: // Catenary graphics case 0x05: // Catenary graphics
if (num != 48) { if (num != ELRAIL_SPRITE_COUNT) {
grfmsg(1, "GraphicsNew: Catenary graphics sprite count must be 48, skipping"); grfmsg(1, "GraphicsNew: Catenary graphics sprite count must be 48, skipping");
return; return;
} }
replace = SPR_ELRAIL_BASE + 3; replace = SPR_ELRAIL_BASE;
break; break;
case 0x06: // Foundations case 0x06: // Foundations
switch (num) { if (num != NORMAL_FOUNDATION_SPRITE_COUNT && num != NORMAL_AND_HALFTILE_FOUNDATION_SPRITE_COUNT) {
case 74: replace = SPR_SLOPES_BASE; break; grfmsg(1, "GraphicsNew: Foundation graphics sprite count must be 74 or 90, skipping");
case 90: index_tbl = _slopes_action05_90; break; return;
default:
grfmsg(1, "GraphicsNew: Foundation graphics sprite count must be 74 or 90, skipping");
return;
} }
replace = SPR_SLOPES_BASE; break;
break; break;
/* case 0x07: // TTDP GUI sprites. Not used by OTTD. */
case 0x08: // Canal graphics case 0x08: // Canal graphics
if (num != 65) { if (num != CANALS_SPRITE_COUNT) {
grfmsg(1, "GraphicsNew: Canal graphics sprite count must be 65, skipping"); grfmsg(1, "GraphicsNew: Canal graphics sprite count must be 65, skipping");
return; return;
} }
replace = SPR_CANALS_BASE + 5; replace = SPR_CANALS_BASE;
break; break;
case 0x09: // One way graphics case 0x09: // One way graphics
if (num != 6) { if (num != ONEWAY_SPRITE_COUNT) {
grfmsg(1, "GraphicsNew: One way road graphics sprite count must be 6, skipping"); grfmsg(1, "GraphicsNew: One way road graphics sprite count must be 6, skipping");
return; return;
} }
@ -3303,7 +3332,7 @@ static void GraphicsNew(byte *buf, int len)
break; break;
case 0x0A: // 2CC colour maps case 0x0A: // 2CC colour maps
if (num != 256) { if (num != TWOCCMAP_SPRITE_COUNT) {
grfmsg(1, "GraphicsNew: 2CC colour maps sprite count must be 256, skipping"); grfmsg(1, "GraphicsNew: 2CC colour maps sprite count must be 256, skipping");
return; return;
} }
@ -3311,13 +3340,15 @@ static void GraphicsNew(byte *buf, int len)
break; break;
case 0x0B: // tramways case 0x0B: // tramways
if (num != 113) { if (num != TRAMWAY_SPRITE_COUNT) {
grfmsg(1, "GraphicsNew: Tramway graphics sprite count must be 113, skipping"); grfmsg(1, "GraphicsNew: Tramway graphics sprite count must be 113, skipping");
return; return;
} }
replace = SPR_TRAMWAY_BASE; replace = SPR_TRAMWAY_BASE;
break; break;
/* case 0x0C: // Snowy temperate trees. Not yet used by OTTD. */
case 0x0D: // Coast graphics case 0x0D: // Coast graphics
if (num != 16) { if (num != 16) {
grfmsg(1, "GraphicsNew: Coast graphics sprite count must be 16, skipping"); grfmsg(1, "GraphicsNew: Coast graphics sprite count must be 16, skipping");
@ -3327,8 +3358,12 @@ static void GraphicsNew(byte *buf, int len)
_loaded_newgrf_features.has_newwater = true; _loaded_newgrf_features.has_newwater = true;
break; break;
/* case 0x0E: // New Signals. Not yet used by OTTD. */
/* case 0x0F: // Tracks for marking sloped rail. Not yet used by OTTD. */
case 0x10: // New airport sprites case 0x10: // New airport sprites
if (num != 15) { if (num != AIRPORTX_SPRITE_COUNT) {
grfmsg(1, "GraphicsNew: Airport graphics sprite count must be 15, skipping"); grfmsg(1, "GraphicsNew: Airport graphics sprite count must be 15, skipping");
return; return;
} }
@ -3336,13 +3371,33 @@ static void GraphicsNew(byte *buf, int len)
break; break;
case 0x11: // Road stop sprites case 0x11: // Road stop sprites
if (num != 8) { if (num != ROADSTOP_SPRITE_COUNT) {
grfmsg(1, "GraphicsNew: Road stop graphics sprite count must be 8, skipping"); grfmsg(1, "GraphicsNew: Road stop graphics sprite count must be 8, skipping");
return; return;
} }
replace = SPR_ROADSTOP_BASE; replace = SPR_ROADSTOP_BASE;
break; break;
/* case 0x12: // Aqueduct sprites. Not yet used by OTTD. */
case 0x13: // Autorail sprites
if (num != AUTORAIL_SPRITE_COUNT) {
grfmsg(1, "GraphicsNew: Autorail graphics sprite count must be 55, skipping");
return;
}
replace = SPR_AUTORAIL_BASE;
break;
case 0x14: // Flag sprites
skip_num = SanitizeSpriteOffset(num, offset, FLAGS_SPRITE_COUNT, "Flag graphics");
replace = SPR_FLAGS_BASE + offset;
break;
case 0x15: // OpenTTD GUI sprites
skip_num = SanitizeSpriteOffset(num, offset, OPENTTD_SPRITE_COUNT, "OpenTTD graphics");
replace = SPR_OPENTTD_BASE + offset;
break;
default: default:
grfmsg(2, "GraphicsNew: Custom graphics (type 0x%02X) sprite block of length %u (unimplemented, ignoring)", grfmsg(2, "GraphicsNew: Custom graphics (type 0x%02X) sprite block of length %u (unimplemented, ignoring)",
type, num); type, num);
@ -3350,12 +3405,6 @@ static void GraphicsNew(byte *buf, int len)
return; return;
} }
if (index_tbl != NULL) {
grfmsg(2, "GraphicsNew: Loading %u sprites of type 0x%02X at indexed SpriteIDs", num, type);
LoadSpritesIndexed(_file_index, &_nfo_line, index_tbl);
return;
}
if (replace == 0) { if (replace == 0) {
grfmsg(2, "GraphicsNew: Loading %u sprites of type 0x%02X at SpriteID 0x%04X", num, type, _cur_spriteid); grfmsg(2, "GraphicsNew: Loading %u sprites of type 0x%02X at SpriteID 0x%04X", num, type, _cur_spriteid);
} else { } else {
@ -3366,6 +3415,8 @@ static void GraphicsNew(byte *buf, int len)
LoadNextSprite(replace == 0 ? _cur_spriteid++ : replace++, _file_index, _nfo_line); LoadNextSprite(replace == 0 ? _cur_spriteid++ : replace++, _file_index, _nfo_line);
_nfo_line++; _nfo_line++;
} }
_skip_sprites = skip_num;
} }
/* Action 0x05 (SKIP) */ /* Action 0x05 (SKIP) */
@ -5028,7 +5079,6 @@ static void ResetNewGRFData()
_loaded_newgrf_features.has_newhouses = false; _loaded_newgrf_features.has_newhouses = false;
_loaded_newgrf_features.has_newindustries = false; _loaded_newgrf_features.has_newindustries = false;
_loaded_newgrf_features.has_newwater = false; _loaded_newgrf_features.has_newwater = false;
_signal_base = 0;
_coast_base = 0; _coast_base = 0;
InitializeSoundPool(); InitializeSoundPool();

View File

@ -85,7 +85,6 @@ struct GRFFile {
extern GRFFile *_first_grffile; extern GRFFile *_first_grffile;
extern SpriteID _signal_base;
extern SpriteID _coast_base; extern SpriteID _coast_base;
struct GRFLoadedFeatures { struct GRFLoadedFeatures {

View File

@ -69,7 +69,7 @@ bool FillGRFDetails(GRFConfig *config, bool is_static)
LoadNewGRFFile(config, CONFIG_SLOT, GLS_FILESCAN); LoadNewGRFFile(config, CONFIG_SLOT, GLS_FILESCAN);
/* Skip if the grfid is 0 (not read) or 0xFFFFFFFF (ttdp system grf) */ /* Skip if the grfid is 0 (not read) or 0xFFFFFFFF (ttdp system grf) */
if (config->grfid == 0 || config->grfid == 0xFFFFFFFF) return false; if (config->grfid == 0 || config->grfid == 0xFFFFFFFF || config->IsOpenTTDBaseGRF()) return false;
if (is_static) { if (is_static) {
/* Perform a 'safety scan' for static GRFs */ /* Perform a 'safety scan' for static GRFs */
@ -522,6 +522,18 @@ char *GRFBuildParamList(char *dst, const GRFConfig *c, const char *last)
return dst; return dst;
} }
/** Base GRF ID for OpenTTD's base graphics GRFs. */
static const uint32 OPENTTD_GRAPHICS_BASE_GRF_ID = BSWAP32(0xFF4F5400);
/**
* Checks whether this GRF is a OpenTTD base graphic GRF.
* @return true if and only if it is a base GRF.
*/
bool GRFConfig::IsOpenTTDBaseGRF() const
{
return (this->grfid & 0x00FFFFFF) == OPENTTD_GRAPHICS_BASE_GRF_ID;
}
static const SaveLoad _grfconfig_desc[] = { static const SaveLoad _grfconfig_desc[] = {
SLE_STR(GRFConfig, filename, SLE_STR, 0x40), SLE_STR(GRFConfig, filename, SLE_STR, 0x40),

View File

@ -58,6 +58,8 @@ struct GRFConfig : public GRFIdentifier {
uint8 num_params; uint8 num_params;
struct GRFConfig *next; struct GRFConfig *next;
bool IsOpenTTDBaseGRF() const;
}; };
/* First item in list of all scanned NewGRFs */ /* First item in list of all scanned NewGRFs */

View File

@ -16,7 +16,6 @@
#include "strings.h" #include "strings.h"
#include "helpers.hpp" #include "helpers.hpp"
/** Parse an integerlist string and set each found value /** Parse an integerlist string and set each found value
* @param p the string to be parsed. Each element in the list is seperated by a * @param p the string to be parsed. Each element in the list is seperated by a
* comma or a space character * comma or a space character
@ -128,7 +127,7 @@ static void NewGRFAddDlgWndProc(Window *w, WindowEvent *e)
w->vscroll.cap = (w->widget[3].bottom - w->widget[3].top) / 10; w->vscroll.cap = (w->widget[3].bottom - w->widget[3].top) / 10;
SetVScrollCount(w, n); SetVScrollCount(w, n);
SetWindowWidgetDisabledState(w, 6, WP(w, newgrf_add_d).sel == NULL); SetWindowWidgetDisabledState(w, 6, WP(w, newgrf_add_d).sel == NULL || WP(w, newgrf_add_d).sel->IsOpenTTDBaseGRF());
DrawWindowWidgets(w); DrawWindowWidgets(w);
GfxFillRect(w->widget[3].left + 1, w->widget[3].top + 1, w->widget[3].right, w->widget[3].bottom, 0xD7); GfxFillRect(w->widget[3].left + 1, w->widget[3].top + 1, w->widget[3].right, w->widget[3].bottom, 0xD7);
@ -283,6 +282,7 @@ static void SetupNewGRFState(Window *w)
/* All widgets are now enabled, so disable widgets we can't use */ /* All widgets are now enabled, so disable widgets we can't use */
if (WP(w, newgrf_d).sel == *WP(w, newgrf_d).list) DisableWindowWidget(w, SNGRFS_MOVE_UP); if (WP(w, newgrf_d).sel == *WP(w, newgrf_d).list) DisableWindowWidget(w, SNGRFS_MOVE_UP);
if (WP(w, newgrf_d).sel->next == NULL) DisableWindowWidget(w, SNGRFS_MOVE_DOWN); if (WP(w, newgrf_d).sel->next == NULL) DisableWindowWidget(w, SNGRFS_MOVE_DOWN);
if (WP(w, newgrf_d).sel->IsOpenTTDBaseGRF()) DisableWindowWidget(w, SNGRFS_REMOVE);
} }
} }

View File

@ -1376,13 +1376,10 @@ static void DrawSingleSignal(TileIndex tile, Track track, byte condition, uint i
SpriteID sprite; SpriteID sprite;
/* _signal_base is set by our NewGRF Action 5 loader. If it is 0 then we if (GetSignalType(tile, track) == SIGTYPE_NORMAL && GetSignalVariant(tile, track) == SIG_ELECTRIC) {
* just draw the standard signals, else we get the offset from _signal_base
* and draw that sprite. All the signal sprites are loaded sequentially. */
if (_signal_base == 0 || (GetSignalType(tile, track) == SIGTYPE_NORMAL && GetSignalVariant(tile, track) == SIG_ELECTRIC)) {
sprite = SignalBase[side][GetSignalVariant(tile, track)][GetSignalType(tile, track)] + image + condition; sprite = SignalBase[side][GetSignalVariant(tile, track)][GetSignalType(tile, track)] + image + condition;
} else { } else {
sprite = _signal_base + (GetSignalType(tile, track) - 1) * 16 + GetSignalVariant(tile, track) * 64 + image + condition; sprite = SPR_SIGNALS_BASE + (GetSignalType(tile, track) - 1) * 16 + GetSignalVariant(tile, track) * 64 + image + condition;
} }
AddSortableSpriteToDraw(sprite, PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, GetSaveSlopeZ(x, y, track)); AddSortableSpriteToDraw(sprite, PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, GetSaveSlopeZ(x, y, track));

View File

@ -31,7 +31,10 @@ static FileList files_dos = {
{ "TRGC.GRF", {0xed, 0x44, 0x66, 0x37, 0xe0, 0x34, 0x10, 0x4c, 0x55, 0x59, 0xb3, 0x2c, 0x18, 0xaf, 0xe7, 0x8d} }, { "TRGC.GRF", {0xed, 0x44, 0x66, 0x37, 0xe0, 0x34, 0x10, 0x4c, 0x55, 0x59, 0xb3, 0x2c, 0x18, 0xaf, 0xe7, 0x8d} },
{ "TRGH.GRF", {0xee, 0x66, 0x16, 0xfb, 0x0e, 0x6e, 0xf6, 0xb2, 0x48, 0x92, 0xc5, 0x8c, 0x93, 0xd8, 0x6f, 0xc9} }, { "TRGH.GRF", {0xee, 0x66, 0x16, 0xfb, 0x0e, 0x6e, 0xf6, 0xb2, 0x48, 0x92, 0xc5, 0x8c, 0x93, 0xd8, 0x6f, 0xc9} },
{ "TRGT.GRF", {0xfc, 0xde, 0x1d, 0x7e, 0x8a, 0x74, 0x19, 0x7d, 0x72, 0xa6, 0x26, 0x95, 0x88, 0x4b, 0x90, 0x9e} } { "TRGT.GRF", {0xfc, 0xde, 0x1d, 0x7e, 0x8a, 0x74, 0x19, 0x7d, 0x72, 0xa6, 0x26, 0x95, 0x88, 0x4b, 0x90, 0x9e} }
} },
{ "SAMPLE.CAT", {0x42, 0x2e, 0xa3, 0xdd, 0x07, 0x4d, 0x28, 0x59, 0xbb, 0x51, 0x63, 0x9a, 0x6e, 0x0e, 0x85, 0xda} },
{ "CHARS.GRF", {0x5f, 0x2e, 0xbf, 0x05, 0xb6, 0x12, 0x65, 0x81, 0xd2, 0x10, 0xa9, 0x19, 0x62, 0x41, 0x70, 0x64} },
{ "OPENTTDD.GRF", {0x85, 0x5f, 0x38, 0xa6, 0xb2, 0xc9, 0xd7, 0x51, 0xaa, 0xca, 0x0d, 0xae, 0xd9, 0x8d, 0x71, 0x98} }
}; };
static FileList files_win = { static FileList files_win = {
@ -42,26 +45,8 @@ static FileList files_win = {
{ "TRGCR.GRF", {0x36, 0x68, 0xf4, 0x10, 0xc7, 0x61, 0xa0, 0x50, 0xb5, 0xe7, 0x09, 0x5a, 0x2b, 0x14, 0x87, 0x9b} }, { "TRGCR.GRF", {0x36, 0x68, 0xf4, 0x10, 0xc7, 0x61, 0xa0, 0x50, 0xb5, 0xe7, 0x09, 0x5a, 0x2b, 0x14, 0x87, 0x9b} },
{ "TRGHR.GRF", {0x06, 0xbf, 0x2b, 0x7a, 0x31, 0x76, 0x6f, 0x04, 0x8b, 0xaa, 0xc2, 0xeb, 0xe4, 0x34, 0x57, 0xb1} }, { "TRGHR.GRF", {0x06, 0xbf, 0x2b, 0x7a, 0x31, 0x76, 0x6f, 0x04, 0x8b, 0xaa, 0xc2, 0xeb, 0xe4, 0x34, 0x57, 0xb1} },
{ "TRGTR.GRF", {0xde, 0x53, 0x65, 0x05, 0x17, 0xfe, 0x66, 0x1c, 0xea, 0xa3, 0x13, 0x8c, 0x6e, 0xdb, 0x0e, 0xb8} } { "TRGTR.GRF", {0xde, 0x53, 0x65, 0x05, 0x17, 0xfe, 0x66, 0x1c, 0xea, 0xa3, 0x13, 0x8c, 0x6e, 0xdb, 0x0e, 0xb8} }
} },
}; { "SAMPLE.CAT", {0x92, 0x12, 0xe8, 0x1e, 0x72, 0xba, 0xdd, 0x4b, 0xbe, 0x1e, 0xae, 0xae, 0x66, 0x45, 0x8e, 0x10} },
{ "CHARS.GRF", {0x5f, 0x2e, 0xbf, 0x05, 0xb6, 0x12, 0x65, 0x81, 0xd2, 0x10, 0xa9, 0x19, 0x62, 0x41, 0x70, 0x64} },
static MD5File sample_cat_win = { "SAMPLE.CAT", {0x92, 0x12, 0xe8, 0x1e, 0x72, 0xba, 0xdd, 0x4b, 0xbe, 0x1e, 0xae, 0xae, 0x66, 0x45, 0x8e, 0x10} }; { "OPENTTDW.GRF", {0x3e, 0xff, 0xe8, 0x43, 0xc9, 0x31, 0xf6, 0x9d, 0x0b, 0x40, 0xb1, 0x64, 0xbf, 0x16, 0xde, 0x5a} }
static MD5File sample_cat_dos = { "SAMPLE.CAT", {0x42, 0x2e, 0xa3, 0xdd, 0x07, 0x4d, 0x28, 0x59, 0xbb, 0x51, 0x63, 0x9a, 0x6e, 0x0e, 0x85, 0xda} };
static MD5File files_openttd[] = {
{ "nsignalsw.grf", { 0x65, 0xb9, 0xd7, 0x30, 0x56, 0x06, 0xcc, 0x9e, 0x27, 0x57, 0xc8, 0xe4, 0x9b, 0xb3, 0x66, 0x81 } },
{ "2ccmap.grf", { 0x20, 0x03, 0x32, 0x1a, 0x43, 0x6c, 0xc1, 0x05, 0x80, 0xbd, 0x43, 0xeb, 0xe1, 0xfd, 0x0c, 0x62 } },
{ "airports.grf", { 0xfd, 0xa4, 0x38, 0xd6, 0x9c, 0x81, 0x74, 0xfe, 0xa0, 0x98, 0xa2, 0x14, 0x4b, 0x15, 0xb8, 0x4b } },
{ "autorail.grf", { 0xed, 0x44, 0x7f, 0xbb, 0x19, 0x44, 0x48, 0x4c, 0x07, 0x8a, 0xb1, 0xc1, 0x5c, 0x12, 0x3a, 0x60 } },
{ "canalsw.grf", { 0x13, 0x9c, 0x98, 0xcf, 0xb8, 0x7c, 0xd7, 0x1f, 0xca, 0x34, 0xa5, 0x6b, 0x65, 0x31, 0xec, 0x0f } },
{ "elrailsw.grf", { 0x4f, 0xf9, 0xac, 0x79, 0x50, 0x28, 0x9b, 0xe2, 0x15, 0x30, 0xa8, 0x1e, 0xd5, 0xfd, 0xe1, 0xda } },
{ "openttd.grf", { 0x16, 0x5c, 0x0f, 0xba, 0x63, 0x6a, 0x77, 0x30, 0x44, 0xb0, 0x32, 0xe6, 0x4a, 0xc7, 0x90, 0x58 } },
{ "trkfoundw.grf", { 0x12, 0x33, 0x3f, 0xa3, 0xd1, 0x86, 0x8b, 0x04, 0x53, 0x18, 0x9c, 0xee, 0xf9, 0x2d, 0xf5, 0x95 } },
{ "roadstops.grf", { 0xa1, 0x5b, 0xb3, 0x52, 0x60, 0x12, 0x3c, 0xb7, 0x7b, 0x73, 0x09, 0xc1, 0x1a, 0xb4, 0xd0, 0xb8 } },
{ "group.grf", { 0xe8, 0x52, 0x5f, 0x1c, 0x3e, 0xf9, 0x91, 0x9d, 0x0f, 0x70, 0x8c, 0x8a, 0x21, 0xa4, 0xc7, 0x02 } },
{ "tramtrkw.grf", { 0x83, 0x0a, 0xf4, 0x9f, 0x29, 0x10, 0x48, 0xfd, 0x76, 0xe9, 0xda, 0xac, 0x5d, 0xa2, 0x30, 0x45 } },
{ "oneway.grf", { 0xbb, 0xc6, 0xa3, 0xb2, 0xb3, 0xa0, 0xc9, 0x3c, 0xc9, 0xee, 0x24, 0x7c, 0xb6, 0x51, 0x74, 0x63 } },
{ "halffndw.grf", { 0xf2, 0x10, 0xe0, 0xc1, 0xa1, 0xdc, 0xb3, 0x6e, 0x3f, 0xce, 0xb8, 0x98, 0x1a, 0x08, 0xb0, 0x67 } },
{ "halfselw.grf", { 0xf2, 0x12, 0x2e, 0x88, 0x58, 0x08, 0xc4, 0xa5, 0xbd, 0x91, 0xb3, 0xc2, 0x5b, 0x5a, 0xb9, 0xf4 } },
{ "flags.grf", { 0xa1, 0xd7, 0x72, 0x75, 0x0e, 0x81, 0x86, 0x0e, 0xc9, 0xcd, 0xc2, 0x57, 0xb2, 0x19, 0xe1, 0x0c } },
}; };

View File

@ -137,70 +137,3 @@ static const SpriteID _landscape_spriteindexes_3[] = {
0x322, 0x322, 0x322, 0x322,
END END
}; };
/* Slope graphics indexes temperate climate
Skip first 3 sprites and only load the proper set */
static const SpriteID _slopes_spriteindexes_0[] = {
SKIP, 3,
SPR_SLOPES_VIRTUAL_BASE + 15, SPR_SLOPES_VIRTUAL_BASE + 4 * SPR_TRKFOUND_BLOCK_SIZE,
END
};
/* Slope graphics indexes arctic climate
Skip first 79 sprites and only load the proper set */
static const SpriteID _slopes_spriteindexes_1[] = {
SKIP, 79,
SPR_SLOPES_VIRTUAL_BASE + 15, SPR_SLOPES_VIRTUAL_BASE + 4 * SPR_TRKFOUND_BLOCK_SIZE,
END
};
/* Slope graphics indexes tropical climate
Skip first 155 sprites and only load the proper set */
static const SpriteID _slopes_spriteindexes_2[] = {
SKIP, 155,
SPR_SLOPES_VIRTUAL_BASE + 15, SPR_SLOPES_VIRTUAL_BASE + 4 * SPR_TRKFOUND_BLOCK_SIZE,
END
};
/* Slope graphics indexes toyland climate
Skip first 231 sprites and only load the proper set */
static const SpriteID _slopes_spriteindexes_3[] = {
SKIP, 231,
SPR_SLOPES_VIRTUAL_BASE + 15, SPR_SLOPES_VIRTUAL_BASE + 4 * SPR_TRKFOUND_BLOCK_SIZE,
END
};
/* Halftile foundation indexes for temperate climate */
static const SpriteID _halftile_foundation_spriteindexes_0[] = {
SPR_HALFTILE_FOUNDATION_BASE, SPR_HALFTILE_FOUNDATION_BASE + 4 * SPR_HALFTILE_BLOCK_SIZE - 1,
END
};
/* Halftile foundation indexes for arctic climate */
static const SpriteID _halftile_foundation_spriteindexes_1[] = {
SKIP, 16,
SPR_HALFTILE_FOUNDATION_BASE, SPR_HALFTILE_FOUNDATION_BASE + 4 * SPR_HALFTILE_BLOCK_SIZE - 1,
END
};
/* Halftile foundation indexes for tropic climate */
static const SpriteID _halftile_foundation_spriteindexes_2[] = {
SKIP, 32,
SPR_HALFTILE_FOUNDATION_BASE, SPR_HALFTILE_FOUNDATION_BASE + 4 * SPR_HALFTILE_BLOCK_SIZE - 1,
END
};
/* Halftile foundation indexes for toyland climate */
static const SpriteID _halftile_foundation_spriteindexes_3[] = {
SKIP, 48,
SPR_HALFTILE_FOUNDATION_BASE, SPR_HALFTILE_FOUNDATION_BASE + 4 * SPR_HALFTILE_BLOCK_SIZE - 1,
END
};
/* Slope graphics indexes for Action 05 type 06, 90 sprites */
static const SpriteID _slopes_action05_90[] = {
SPR_SLOPES_VIRTUAL_BASE + 15, SPR_SLOPES_VIRTUAL_BASE + 4 * SPR_TRKFOUND_BLOCK_SIZE,
SPR_HALFTILE_FOUNDATION_BASE, SPR_HALFTILE_FOUNDATION_BASE + 4 * SPR_HALFTILE_BLOCK_SIZE - 1,
END
};

View File

@ -10,9 +10,6 @@
* *
* @NOTE: * @NOTE:
* ALL SPRITE NUMBERS BELOW 5126 are in the main files * ALL SPRITE NUMBERS BELOW 5126 are in the main files
* SPR_CANALS_BASE is in canalsw.grf
* SPR_SLOPES_BASE is in trkfoundw.grf
* SPR_OPENTTD_BASE is in openttd.grf
* *
* All elements which consist of two elements should * All elements which consist of two elements should
* have the same name and then suffixes * have the same name and then suffixes
@ -46,118 +43,133 @@ enum Sprites {
SPR_ASCII_SPACE_SMALL = 226, SPR_ASCII_SPACE_SMALL = 226,
SPR_ASCII_SPACE_BIG = 450, SPR_ASCII_SPACE_BIG = 450,
/* Extra graphic spritenumbers */
OPENTTD_SPRITES_COUNT = 122, // number of gfx-sprites in openttd.grf
SPR_SIGNALS_BASE = 4896,
SPR_CANALS_BASE = SPR_SIGNALS_BASE + 486,
SPR_SLOPES_BASE = SPR_CANALS_BASE + 70,
SPR_SLOPES_INCLINED_OFFSET = 15,
SPR_SLOPES_VIRTUAL_BASE = SPR_SLOPES_BASE - SPR_SLOPES_INCLINED_OFFSET, // The original foundations (see SPR_FOUNDATION_BASE below) are mapped before the additional foundations.
SPR_TRKFOUND_BLOCK_SIZE = 22, // The sprites in trkfoundw.grf are organized in blocks of 22.
/* between slopes and autorail are 4 unused sprites */
SPR_AUTORAIL_BASE = SPR_SLOPES_BASE + 78,
SPR_ELRAIL_BASE = SPR_AUTORAIL_BASE + 55,
SPR_2CCMAP_BASE = SPR_ELRAIL_BASE + 53,
SPR_OPENTTD_BASE = SPR_2CCMAP_BASE + 256,
SPR_BLOT = SPR_OPENTTD_BASE + 29, // colored circle (mainly used as vehicle profit marker and for sever compatibility)
SPR_PIN_UP = SPR_OPENTTD_BASE + 55, // pin icon
SPR_PIN_DOWN = SPR_OPENTTD_BASE + 56,
SPR_BOX_EMPTY = SPR_OPENTTD_BASE + 59,
SPR_BOX_CHECKED = SPR_OPENTTD_BASE + 60,
SPR_WINDOW_RESIZE = SPR_OPENTTD_BASE + 82, // resize icon
SPR_HOUSE_ICON = SPR_OPENTTD_BASE + 89,
// arrow icons pointing in all 4 directions
SPR_ARROW_DOWN = SPR_OPENTTD_BASE + 83,
SPR_ARROW_UP = SPR_OPENTTD_BASE + 84,
SPR_ARROW_LEFT = SPR_OPENTTD_BASE + 85,
SPR_ARROW_RIGHT = SPR_OPENTTD_BASE + 86,
SPR_LARGE_SMALL_WINDOW = 682, SPR_LARGE_SMALL_WINDOW = 682,
/* Extra graphic spritenumbers */
SPR_OPENTTD_BASE = 4896,
OPENTTD_SPRITE_COUNT = 134,
/* Halftile-selection sprites */
SPR_HALFTILE_SELECTION_FLAT = SPR_OPENTTD_BASE,
SPR_HALFTILE_SELECTION_DOWN = SPR_OPENTTD_BASE + 4,
SPR_HALFTILE_SELECTION_UP = SPR_OPENTTD_BASE + 8,
SPR_SQUARE = SPR_OPENTTD_BASE + 38, // colored square (used for newgrf compatibility)
SPR_BLOT = SPR_OPENTTD_BASE + 39, // colored circle (mainly used as vehicle profit marker and for server compatibility)
SPR_LOCK = SPR_OPENTTD_BASE + 40, // lock icon (for password protected servers)
SPR_BOX_EMPTY = SPR_OPENTTD_BASE + 41,
SPR_BOX_CHECKED = SPR_OPENTTD_BASE + 42,
SPR_WARNING_SIGN = SPR_OPENTTD_BASE + 43, // warning sign (shown if there are any newgrf errors)
SPR_WINDOW_RESIZE = SPR_OPENTTD_BASE + 44, // resize icon
/* Arrow icons pointing in all 4 directions */
SPR_ARROW_DOWN = SPR_OPENTTD_BASE + 45,
SPR_ARROW_UP = SPR_OPENTTD_BASE + 46,
SPR_ARROW_LEFT = SPR_OPENTTD_BASE + 47,
SPR_ARROW_RIGHT = SPR_OPENTTD_BASE + 48,
SPR_HOUSE_ICON = SPR_OPENTTD_BASE + 49,
SPR_SHARED_ORDERS_ICON = SPR_OPENTTD_BASE + 50,
SPR_PIN_UP = SPR_OPENTTD_BASE + 51, // pin icon
SPR_PIN_DOWN = SPR_OPENTTD_BASE + 52,
/* Clone vehicles stuff */ /* Clone vehicles stuff */
SPR_CLONE_TRAIN = SPR_OPENTTD_BASE + 87, SPR_CLONE_TRAIN = SPR_OPENTTD_BASE + 106,
SPR_CLONE_ROADVEH = SPR_OPENTTD_BASE + 104, SPR_CLONE_ROADVEH = SPR_OPENTTD_BASE + 107,
SPR_CLONE_SHIP = SPR_OPENTTD_BASE + 106, SPR_CLONE_SHIP = SPR_OPENTTD_BASE + 108,
SPR_CLONE_AIRCRAFT = SPR_OPENTTD_BASE + 108, SPR_CLONE_AIRCRAFT = SPR_OPENTTD_BASE + 109,
SPR_SELL_TRAIN = SPR_OPENTTD_BASE + 91, SPR_SELL_TRAIN = SPR_OPENTTD_BASE + 93,
SPR_SELL_ROADVEH = SPR_OPENTTD_BASE + 92, SPR_SELL_ROADVEH = SPR_OPENTTD_BASE + 94,
SPR_SELL_SHIP = SPR_OPENTTD_BASE + 93, SPR_SELL_SHIP = SPR_OPENTTD_BASE + 95,
SPR_SELL_AIRCRAFT = SPR_OPENTTD_BASE + 94, SPR_SELL_AIRCRAFT = SPR_OPENTTD_BASE + 96,
SPR_SELL_ALL_TRAIN = SPR_OPENTTD_BASE + 95, SPR_SELL_ALL_TRAIN = SPR_OPENTTD_BASE + 97,
SPR_SELL_ALL_ROADVEH = SPR_OPENTTD_BASE + 96, SPR_SELL_ALL_ROADVEH = SPR_OPENTTD_BASE + 98,
SPR_SELL_ALL_SHIP = SPR_OPENTTD_BASE + 97, SPR_SELL_ALL_SHIP = SPR_OPENTTD_BASE + 99,
SPR_SELL_ALL_AIRCRAFT = SPR_OPENTTD_BASE + 98, SPR_SELL_ALL_AIRCRAFT = SPR_OPENTTD_BASE + 100,
SPR_REPLACE_TRAIN = SPR_OPENTTD_BASE + 99, SPR_REPLACE_TRAIN = SPR_OPENTTD_BASE + 101,
SPR_REPLACE_ROADVEH = SPR_OPENTTD_BASE + 100, SPR_REPLACE_ROADVEH = SPR_OPENTTD_BASE + 102,
SPR_REPLACE_SHIP = SPR_OPENTTD_BASE + 101, SPR_REPLACE_SHIP = SPR_OPENTTD_BASE + 103,
SPR_REPLACE_AIRCRAFT = SPR_OPENTTD_BASE + 102, SPR_REPLACE_AIRCRAFT = SPR_OPENTTD_BASE + 104,
SPR_SELL_CHAIN_TRAIN = SPR_OPENTTD_BASE + 103, SPR_SELL_CHAIN_TRAIN = SPR_OPENTTD_BASE + 105,
SPR_SHARED_ORDERS_ICON = SPR_OPENTTD_BASE + 110, SPR_GROUP_CREATE_TRAIN = SPR_OPENTTD_BASE + 114,
SPR_GROUP_CREATE_ROADVEH = SPR_OPENTTD_BASE + 115,
SPR_GROUP_CREATE_SHIP = SPR_OPENTTD_BASE + 116,
SPR_GROUP_CREATE_AIRCRAFT = SPR_OPENTTD_BASE + 117,
SPR_GROUP_DELETE_TRAIN = SPR_OPENTTD_BASE + 118,
SPR_GROUP_DELETE_ROADVEH = SPR_OPENTTD_BASE + 119,
SPR_GROUP_DELETE_SHIP = SPR_OPENTTD_BASE + 120,
SPR_GROUP_DELETE_AIRCRAFT = SPR_OPENTTD_BASE + 121,
SPR_GROUP_RENAME_TRAIN = SPR_OPENTTD_BASE + 122,
SPR_GROUP_RENAME_ROADVEH = SPR_OPENTTD_BASE + 123,
SPR_GROUP_RENAME_SHIP = SPR_OPENTTD_BASE + 124,
SPR_GROUP_RENAME_AIRCRAFT = SPR_OPENTTD_BASE + 125,
SPR_GROUP_REPLACE_ON_TRAIN = SPR_OPENTTD_BASE + 126,
SPR_GROUP_REPLACE_ON_ROADVEH = SPR_OPENTTD_BASE + 127,
SPR_GROUP_REPLACE_ON_SHIP = SPR_OPENTTD_BASE + 128,
SPR_GROUP_REPLACE_ON_AIRCRAFT = SPR_OPENTTD_BASE + 129,
SPR_GROUP_REPLACE_OFF_TRAIN = SPR_OPENTTD_BASE + 130,
SPR_GROUP_REPLACE_OFF_ROADVEH = SPR_OPENTTD_BASE + 131,
SPR_GROUP_REPLACE_OFF_SHIP = SPR_OPENTTD_BASE + 132,
SPR_GROUP_REPLACE_OFF_AIRCRAFT = SPR_OPENTTD_BASE + 133,
SPR_WARNING_SIGN = SPR_OPENTTD_BASE + 111, // warning sign (shown if there are any newgrf errors) SPR_SIGNALS_BASE = SPR_OPENTTD_BASE + OPENTTD_SPRITE_COUNT,
PRESIGNAL_SPRITE_COUNT = 48,
PRESIGNAL_AND_SEMAPHORE_SPRITE_COUNT = 112,
PRESIGNAL_SEMAPHORE_AND_PBS_SPRITE_COUNT = 240,
/* Network GUI sprites */ SPR_CANALS_BASE = SPR_SIGNALS_BASE + PRESIGNAL_SEMAPHORE_AND_PBS_SPRITE_COUNT,
SPR_SQUARE = SPR_OPENTTD_BASE + 20, // colored square (used for newgrf compatibility) CANALS_SPRITE_COUNT = 65,
SPR_LOCK = SPR_OPENTTD_BASE + 19, // lock icon (for password protected servers)
SPR_AIRPORTX_BASE = SPR_OPENTTD_BASE + OPENTTD_SPRITES_COUNT, // The sprites used for other airport angles SPR_SLOPES_BASE = SPR_CANALS_BASE + CANALS_SPRITE_COUNT,
SPR_SLOPES_INCLINED_OFFSET = 15,
SPR_SLOPES_VIRTUAL_BASE = SPR_SLOPES_BASE - SPR_SLOPES_INCLINED_OFFSET, // The original foundations (see SPR_FOUNDATION_BASE below) are mapped before the additional foundations.
SPR_TRKFOUND_BLOCK_SIZE = 22, // The normal track foundation sprites are organized in blocks of 22.
NORMAL_FOUNDATION_SPRITE_COUNT = 74,
/* Halftile foundations */
SPR_HALFTILE_FOUNDATION_BASE = SPR_SLOPES_BASE + NORMAL_FOUNDATION_SPRITE_COUNT,
SPR_HALFTILE_BLOCK_SIZE = 4, // The half tile foundation sprites are organized in blocks of 4.
NORMAL_AND_HALFTILE_FOUNDATION_SPRITE_COUNT = 90,
SPR_AUTORAIL_BASE = SPR_HALFTILE_FOUNDATION_BASE + NORMAL_AND_HALFTILE_FOUNDATION_SPRITE_COUNT,
AUTORAIL_SPRITE_COUNT = 55,
SPR_ELRAIL_BASE = SPR_AUTORAIL_BASE + AUTORAIL_SPRITE_COUNT,
ELRAIL_SPRITE_COUNT = 48,
SPR_2CCMAP_BASE = SPR_ELRAIL_BASE + ELRAIL_SPRITE_COUNT,
TWOCCMAP_SPRITE_COUNT = 256,
SPR_AIRPORTX_BASE = SPR_2CCMAP_BASE + TWOCCMAP_SPRITE_COUNT, // The sprites used for other airport angles
SPR_NEWAIRPORT_TARMAC = SPR_AIRPORTX_BASE, SPR_NEWAIRPORT_TARMAC = SPR_AIRPORTX_BASE,
SPR_NSRUNWAY1 = SPR_AIRPORTX_BASE + 1, SPR_NSRUNWAY1 = SPR_AIRPORTX_BASE + 1,
SPR_NSRUNWAY2 = SPR_AIRPORTX_BASE + 2, SPR_NSRUNWAY2 = SPR_AIRPORTX_BASE + 2,
SPR_NSRUNWAY3 = SPR_AIRPORTX_BASE + 3, SPR_NSRUNWAY3 = SPR_AIRPORTX_BASE + 3,
SPR_NSRUNWAY4 = SPR_AIRPORTX_BASE + 4, SPR_NSRUNWAY4 = SPR_AIRPORTX_BASE + 4,
SPR_NSRUNWAY_END = SPR_AIRPORTX_BASE + 5, SPR_NSRUNWAY_END = SPR_AIRPORTX_BASE + 5,
SPR_NEWHANGAR_S = SPR_AIRPORTX_BASE + 6, SPR_NEWHANGAR_S = SPR_AIRPORTX_BASE + 6,
SPR_NEWHANGAR_S_WALL = SPR_AIRPORTX_BASE + 7, SPR_NEWHANGAR_S_WALL = SPR_AIRPORTX_BASE + 7,
SPR_NEWHANGAR_W = SPR_AIRPORTX_BASE + 8, SPR_NEWHANGAR_W = SPR_AIRPORTX_BASE + 8,
SPR_NEWHANGAR_W_WALL = SPR_AIRPORTX_BASE + 9, SPR_NEWHANGAR_W_WALL = SPR_AIRPORTX_BASE + 9,
SPR_NEWHANGAR_N = SPR_AIRPORTX_BASE + 10, SPR_NEWHANGAR_N = SPR_AIRPORTX_BASE + 10,
SPR_NEWHANGAR_E = SPR_AIRPORTX_BASE + 11, SPR_NEWHANGAR_E = SPR_AIRPORTX_BASE + 11,
SPR_NEWHELIPAD = SPR_AIRPORTX_BASE + 12, SPR_NEWHELIPAD = SPR_AIRPORTX_BASE + 12,
SPR_GRASS_RIGHT = SPR_AIRPORTX_BASE + 13, SPR_GRASS_RIGHT = SPR_AIRPORTX_BASE + 13,
SPR_GRASS_LEFT = SPR_AIRPORTX_BASE + 14, SPR_GRASS_LEFT = SPR_AIRPORTX_BASE + 14,
AIRPORTX_SPRITE_COUNT = 15,
SPR_ROADSTOP_BASE = SPR_AIRPORTX_BASE + 15, // The sprites used for drive-through road stops SPR_ROADSTOP_BASE = SPR_AIRPORTX_BASE + AIRPORTX_SPRITE_COUNT, // The sprites used for drive-through road stops
SPR_BUS_STOP_DT_Y_W = SPR_ROADSTOP_BASE, SPR_BUS_STOP_DT_Y_W = SPR_ROADSTOP_BASE,
SPR_BUS_STOP_DT_Y_E = SPR_ROADSTOP_BASE + 1, SPR_BUS_STOP_DT_Y_E = SPR_ROADSTOP_BASE + 1,
SPR_BUS_STOP_DT_X_W = SPR_ROADSTOP_BASE + 2, SPR_BUS_STOP_DT_X_W = SPR_ROADSTOP_BASE + 2,
SPR_BUS_STOP_DT_X_E = SPR_ROADSTOP_BASE + 3, SPR_BUS_STOP_DT_X_E = SPR_ROADSTOP_BASE + 3,
SPR_TRUCK_STOP_DT_Y_W = SPR_ROADSTOP_BASE + 4, SPR_TRUCK_STOP_DT_Y_W = SPR_ROADSTOP_BASE + 4,
SPR_TRUCK_STOP_DT_Y_E = SPR_ROADSTOP_BASE + 5, SPR_TRUCK_STOP_DT_Y_E = SPR_ROADSTOP_BASE + 5,
SPR_TRUCK_STOP_DT_X_W = SPR_ROADSTOP_BASE + 6, SPR_TRUCK_STOP_DT_X_W = SPR_ROADSTOP_BASE + 6,
SPR_TRUCK_STOP_DT_X_E = SPR_ROADSTOP_BASE + 7, SPR_TRUCK_STOP_DT_X_E = SPR_ROADSTOP_BASE + 7,
ROADSTOP_SPRITE_COUNT = 8,
SPR_GROUP_BASE = SPR_ROADSTOP_BASE + 8, // The sprites used for the group interface
SPR_GROUP_CREATE_TRAIN = SPR_GROUP_BASE,
SPR_GROUP_CREATE_ROADVEH = SPR_GROUP_BASE + 1,
SPR_GROUP_CREATE_SHIP = SPR_GROUP_BASE + 2,
SPR_GROUP_CREATE_AIRCRAFT = SPR_GROUP_BASE + 3,
SPR_GROUP_DELETE_TRAIN = SPR_GROUP_BASE + 4,
SPR_GROUP_DELETE_ROADVEH = SPR_GROUP_BASE + 5,
SPR_GROUP_DELETE_SHIP = SPR_GROUP_BASE + 6,
SPR_GROUP_DELETE_AIRCRAFT = SPR_GROUP_BASE + 7,
SPR_GROUP_RENAME_TRAIN = SPR_GROUP_BASE + 8,
SPR_GROUP_RENAME_ROADVEH = SPR_GROUP_BASE + 9,
SPR_GROUP_RENAME_SHIP = SPR_GROUP_BASE + 10,
SPR_GROUP_RENAME_AIRCRAFT = SPR_GROUP_BASE + 11,
SPR_GROUP_REPLACE_ON_TRAIN = SPR_GROUP_BASE + 12,
SPR_GROUP_REPLACE_ON_ROADVEH = SPR_GROUP_BASE + 13,
SPR_GROUP_REPLACE_ON_SHIP = SPR_GROUP_BASE + 14,
SPR_GROUP_REPLACE_ON_AIRCRAFT = SPR_GROUP_BASE + 15,
SPR_GROUP_REPLACE_OFF_TRAIN = SPR_GROUP_BASE + 16,
SPR_GROUP_REPLACE_OFF_ROADVEH = SPR_GROUP_BASE + 17,
SPR_GROUP_REPLACE_OFF_SHIP = SPR_GROUP_BASE + 18,
SPR_GROUP_REPLACE_OFF_AIRCRAFT = SPR_GROUP_BASE + 19,
/* Tramway sprites */ /* Tramway sprites */
SPR_TRAMWAY_BASE = SPR_GROUP_BASE + 20, SPR_TRAMWAY_BASE = SPR_ROADSTOP_BASE + ROADSTOP_SPRITE_COUNT,
SPR_TRAMWAY_OVERLAY = SPR_TRAMWAY_BASE + 4, SPR_TRAMWAY_OVERLAY = SPR_TRAMWAY_BASE + 4,
SPR_TRAMWAY_TRAM = SPR_TRAMWAY_BASE + 27, SPR_TRAMWAY_TRAM = SPR_TRAMWAY_BASE + 27,
SPR_TRAMWAY_SLOPED_OFFSET = 11, SPR_TRAMWAY_SLOPED_OFFSET = 11,
@ -173,25 +185,22 @@ enum Sprites {
SPR_TRAMWAY_FRONT_WIRES_SLOPED = SPR_TRAMWAY_BASE + 68, SPR_TRAMWAY_FRONT_WIRES_SLOPED = SPR_TRAMWAY_BASE + 68,
SPR_TRAMWAY_TUNNEL_WIRES = SPR_TRAMWAY_BASE + 80, SPR_TRAMWAY_TUNNEL_WIRES = SPR_TRAMWAY_BASE + 80,
SPR_TRAMWAY_BRIDGE = SPR_TRAMWAY_BASE + 107, SPR_TRAMWAY_BRIDGE = SPR_TRAMWAY_BASE + 107,
TRAMWAY_SPRITE_COUNT = 113,
/* One way road sprites */ /* One way road sprites */
SPR_ONEWAY_BASE = SPR_TRAMWAY_BASE + 113, SPR_ONEWAY_BASE = SPR_TRAMWAY_BASE + TRAMWAY_SPRITE_COUNT,
ONEWAY_SPRITE_COUNT = 6,
/* Not really a sprite, but an empty bounding box. Used to construct bounding boxes, that help sorting the sprites, but do not have a sprite associated. */
SPR_EMPTY_BOUNDING_BOX = SPR_ONEWAY_BASE + 6,
/* Halftile foundations */
SPR_HALFTILE_FOUNDATION_BASE = SPR_EMPTY_BOUNDING_BOX + 1,
SPR_HALFTILE_BLOCK_SIZE = 4, // The sprites in halffndw.grf are organized in blocks of 4.
/* Halftile-selection sprites */
SPR_HALFTILE_SELECTION_BASE = SPR_HALFTILE_FOUNDATION_BASE + 4 * SPR_HALFTILE_BLOCK_SIZE,
SPR_HALFTILE_SELECTION_FLAT = SPR_HALFTILE_SELECTION_BASE,
SPR_HALFTILE_SELECTION_DOWN = SPR_HALFTILE_SELECTION_BASE + 4,
SPR_HALFTILE_SELECTION_UP = SPR_HALFTILE_SELECTION_BASE + 8,
/* Flags sprites (in same order as enum NetworkLanguage) */ /* Flags sprites (in same order as enum NetworkLanguage) */
SPR_FLAGS_BASE = SPR_HALFTILE_SELECTION_BASE + 12, SPR_FLAGS_BASE = SPR_ONEWAY_BASE + ONEWAY_SPRITE_COUNT,
FLAGS_SPRITE_COUNT = 29,
/* Not really a sprite, but an empty bounding box. Used to construct bounding boxes, that help sorting the sprites, but do not have a sprite associated. */
SPR_EMPTY_BOUNDING_BOX = SPR_FLAGS_BASE + FLAGS_SPRITE_COUNT,
EMPTY_BOUNDING_BOX_SPRITE_COUNT = 1,
/* From where can we start putting NewGRFs? */
SPR_NEWGRFS_BASE = SPR_EMPTY_BOUNDING_BOX + EMPTY_BOUNDING_BOX_SPRITE_COUNT,
/* Manager face sprites */ /* Manager face sprites */
SPR_GRADIENT = 874, // background gradient behind manager face SPR_GRADIENT = 874, // background gradient behind manager face
@ -205,11 +214,6 @@ enum Sprites {
/* Shadow cell */ /* Shadow cell */
SPR_SHADOW_CELL = 1004, SPR_SHADOW_CELL = 1004,
/* Sliced view shadow cells */
/* Maybe we have different ones in the future */
SPR_MAX_SLICE = SPR_OPENTTD_BASE + 64,
SPR_MIN_SLICE = SPR_OPENTTD_BASE + 64,
/* Unmovables spritenumbers */ /* Unmovables spritenumbers */
SPR_UNMOVABLE_TRANSMITTER = 2601, SPR_UNMOVABLE_TRANSMITTER = 2601,
SPR_UNMOVABLE_LIGHTHOUSE = 2602, SPR_UNMOVABLE_LIGHTHOUSE = 2602,
@ -305,10 +309,10 @@ enum Sprites {
SPR_MGLV_TRACK_Y = 1175, SPR_MGLV_TRACK_Y = 1175,
SPR_MGLV_TRACK_BASE = 1182, SPR_MGLV_TRACK_BASE = 1182,
SPR_MGLV_TRACK_N_S = 1199, SPR_MGLV_TRACK_N_S = 1199,
SPR_WAYPOINT_X_1 = SPR_OPENTTD_BASE + 15, SPR_WAYPOINT_X_1 = SPR_OPENTTD_BASE + 78,
SPR_WAYPOINT_X_2 = SPR_OPENTTD_BASE + 16, SPR_WAYPOINT_X_2 = SPR_OPENTTD_BASE + 79,
SPR_WAYPOINT_Y_1 = SPR_OPENTTD_BASE + 17, SPR_WAYPOINT_Y_1 = SPR_OPENTTD_BASE + 80,
SPR_WAYPOINT_Y_2 = SPR_OPENTTD_BASE + 18, SPR_WAYPOINT_Y_2 = SPR_OPENTTD_BASE + 81,
OFFSET_TILEH_IMPOSSIBLE = 0, OFFSET_TILEH_IMPOSSIBLE = 0,
OFFSET_TILEH_1 = 14, OFFSET_TILEH_1 = 14,
OFFSET_TILEH_2 = 15, OFFSET_TILEH_2 = 15,
@ -337,55 +341,55 @@ enum Sprites {
/* Wires. First identifier is the direction of the track, second is the required placement of the pylon. /* Wires. First identifier is the direction of the track, second is the required placement of the pylon.
* "short" denotes a wire that requires a pylon on each end. Third identifier is the direction of the slope * "short" denotes a wire that requires a pylon on each end. Third identifier is the direction of the slope
* (in positive coordinate direction) */ * (in positive coordinate direction) */
SPR_WIRE_X_SHORT = SPR_ELRAIL_BASE + 3, SPR_WIRE_X_SHORT = SPR_ELRAIL_BASE + 0,
SPR_WIRE_Y_SHORT = SPR_ELRAIL_BASE + 4, SPR_WIRE_Y_SHORT = SPR_ELRAIL_BASE + 1,
SPR_WIRE_EW_SHORT = SPR_ELRAIL_BASE + 5, SPR_WIRE_EW_SHORT = SPR_ELRAIL_BASE + 2,
SPR_WIRE_NS_SHORT = SPR_ELRAIL_BASE + 6, SPR_WIRE_NS_SHORT = SPR_ELRAIL_BASE + 3,
SPR_WIRE_X_SHORT_DOWN = SPR_ELRAIL_BASE + 7, SPR_WIRE_X_SHORT_DOWN = SPR_ELRAIL_BASE + 4,
SPR_WIRE_Y_SHORT_UP = SPR_ELRAIL_BASE + 8, SPR_WIRE_Y_SHORT_UP = SPR_ELRAIL_BASE + 5,
SPR_WIRE_X_SHORT_UP = SPR_ELRAIL_BASE + 9, SPR_WIRE_X_SHORT_UP = SPR_ELRAIL_BASE + 6,
SPR_WIRE_Y_SHORT_DOWN = SPR_ELRAIL_BASE + 10, SPR_WIRE_Y_SHORT_DOWN = SPR_ELRAIL_BASE + 7,
SPR_WIRE_X_SW = SPR_ELRAIL_BASE + 11, SPR_WIRE_X_SW = SPR_ELRAIL_BASE + 8,
SPR_WIRE_Y_SE = SPR_ELRAIL_BASE + 12, SPR_WIRE_Y_SE = SPR_ELRAIL_BASE + 9,
SPR_WIRE_EW_E = SPR_ELRAIL_BASE + 13, SPR_WIRE_EW_E = SPR_ELRAIL_BASE + 10,
SPR_WIRE_NS_S = SPR_ELRAIL_BASE + 14, SPR_WIRE_NS_S = SPR_ELRAIL_BASE + 11,
SPR_WIRE_X_SW_DOWN = SPR_ELRAIL_BASE + 15, SPR_WIRE_X_SW_DOWN = SPR_ELRAIL_BASE + 12,
SPR_WIRE_Y_SE_UP = SPR_ELRAIL_BASE + 16, SPR_WIRE_Y_SE_UP = SPR_ELRAIL_BASE + 13,
SPR_WIRE_X_SW_UP = SPR_ELRAIL_BASE + 17, SPR_WIRE_X_SW_UP = SPR_ELRAIL_BASE + 14,
SPR_WIRE_Y_SE_DOWN = SPR_ELRAIL_BASE + 18, SPR_WIRE_Y_SE_DOWN = SPR_ELRAIL_BASE + 15,
SPR_WIRE_X_NE = SPR_ELRAIL_BASE + 19, SPR_WIRE_X_NE = SPR_ELRAIL_BASE + 16,
SPR_WIRE_Y_NW = SPR_ELRAIL_BASE + 20, SPR_WIRE_Y_NW = SPR_ELRAIL_BASE + 17,
SPR_WIRE_EW_W = SPR_ELRAIL_BASE + 21, SPR_WIRE_EW_W = SPR_ELRAIL_BASE + 18,
SPR_WIRE_NS_N = SPR_ELRAIL_BASE + 22, SPR_WIRE_NS_N = SPR_ELRAIL_BASE + 19,
SPR_WIRE_X_NE_DOWN = SPR_ELRAIL_BASE + 23, SPR_WIRE_X_NE_DOWN = SPR_ELRAIL_BASE + 20,
SPR_WIRE_Y_NW_UP = SPR_ELRAIL_BASE + 24, SPR_WIRE_Y_NW_UP = SPR_ELRAIL_BASE + 21,
SPR_WIRE_X_NE_UP = SPR_ELRAIL_BASE + 25, SPR_WIRE_X_NE_UP = SPR_ELRAIL_BASE + 22,
SPR_WIRE_Y_NW_DOWN = SPR_ELRAIL_BASE + 26, SPR_WIRE_Y_NW_DOWN = SPR_ELRAIL_BASE + 23,
/* Tunnel entries */ /* Tunnel entries */
SPR_WIRE_TUNNEL_NE = SPR_ELRAIL_BASE + 27, SPR_WIRE_TUNNEL_NE = SPR_ELRAIL_BASE + 24,
SPR_WIRE_TUNNEL_SE = SPR_ELRAIL_BASE + 28, SPR_WIRE_TUNNEL_SE = SPR_ELRAIL_BASE + 25,
SPR_WIRE_TUNNEL_SW = SPR_ELRAIL_BASE + 29, SPR_WIRE_TUNNEL_SW = SPR_ELRAIL_BASE + 26,
SPR_WIRE_TUNNEL_NW = SPR_ELRAIL_BASE + 30, SPR_WIRE_TUNNEL_NW = SPR_ELRAIL_BASE + 27,
/* Depot entries */ /* Depot entries */
SPR_WIRE_DEPOT_SW = SPR_ELRAIL_BASE + 27, SPR_WIRE_DEPOT_SW = SPR_ELRAIL_BASE + 24,
SPR_WIRE_DEPOT_NW = SPR_ELRAIL_BASE + 28, SPR_WIRE_DEPOT_NW = SPR_ELRAIL_BASE + 25,
SPR_WIRE_DEPOT_NE = SPR_ELRAIL_BASE + 29, SPR_WIRE_DEPOT_NE = SPR_ELRAIL_BASE + 26,
SPR_WIRE_DEPOT_SE = SPR_ELRAIL_BASE + 30, SPR_WIRE_DEPOT_SE = SPR_ELRAIL_BASE + 27,
/* Pylons, first identifier is the direction of the track, second the placement relative to the track */ /* Pylons, first identifier is the direction of the track, second the placement relative to the track */
SPR_PYLON_Y_NE = SPR_ELRAIL_BASE + 31, SPR_PYLON_Y_NE = SPR_ELRAIL_BASE + 28,
SPR_PYLON_Y_SW = SPR_ELRAIL_BASE + 32, SPR_PYLON_Y_SW = SPR_ELRAIL_BASE + 29,
SPR_PYLON_X_NW = SPR_ELRAIL_BASE + 33, SPR_PYLON_X_NW = SPR_ELRAIL_BASE + 30,
SPR_PYLON_X_SE = SPR_ELRAIL_BASE + 34, SPR_PYLON_X_SE = SPR_ELRAIL_BASE + 31,
SPR_PYLON_EW_N = SPR_ELRAIL_BASE + 35, SPR_PYLON_EW_N = SPR_ELRAIL_BASE + 32,
SPR_PYLON_EW_S = SPR_ELRAIL_BASE + 36, SPR_PYLON_EW_S = SPR_ELRAIL_BASE + 33,
SPR_PYLON_NS_W = SPR_ELRAIL_BASE + 37, SPR_PYLON_NS_W = SPR_ELRAIL_BASE + 34,
SPR_PYLON_NS_E = SPR_ELRAIL_BASE + 38, SPR_PYLON_NS_E = SPR_ELRAIL_BASE + 35,
/* sprites for roads */ /* sprites for roads */
SPR_ROAD_PAVED_STRAIGHT_Y = 1313, SPR_ROAD_PAVED_STRAIGHT_Y = 1313,
@ -452,7 +456,7 @@ enum Sprites {
SPR_AIRPORT_RADAR_A = 2689, SPR_AIRPORT_RADAR_A = 2689,
SPR_AIRPORT_RADAR_B = 2690, SPR_AIRPORT_RADAR_B = 2690,
SPR_AIRPORT_RADAR_C = 2691, SPR_AIRPORT_RADAR_C = 2691,
SPR_AIRPORT_HELIPAD = SPR_OPENTTD_BASE + 28, SPR_AIRPORT_HELIPAD = SPR_OPENTTD_BASE + 82,
SPR_AIRPORT_HELIDEPOT_OFFICE = 2095, SPR_AIRPORT_HELIDEPOT_OFFICE = 2095,
/* Road Stops */ /* Road Stops */
@ -566,40 +570,42 @@ enum Sprites {
SPR_SHIP_DEPOT_SE_REAR = 4074, SPR_SHIP_DEPOT_SE_REAR = 4074,
SPR_SHIP_DEPOT_SW_REAR = 4075, SPR_SHIP_DEPOT_SW_REAR = 4075,
//here come sloped water sprites //here come sloped water sprites
SPR_WATER_SLOPE_Y_UP = SPR_CANALS_BASE + 5, //Water flowing negative Y direction SPR_WATER_SLOPE_Y_UP = SPR_CANALS_BASE + 0, //Water flowing negative Y direction
SPR_WATER_SLOPE_X_DOWN = SPR_CANALS_BASE + 6, //positive X SPR_WATER_SLOPE_X_DOWN = SPR_CANALS_BASE + 1, //positive X
SPR_WATER_SLOPE_X_UP = SPR_CANALS_BASE + 7, //negative X SPR_WATER_SLOPE_X_UP = SPR_CANALS_BASE + 2, //negative X
SPR_WATER_SLOPE_Y_DOWN = SPR_CANALS_BASE + 8, //positive Y SPR_WATER_SLOPE_Y_DOWN = SPR_CANALS_BASE + 3, //positive Y
//sprites for the shiplifts //sprites for the shiplifts
//there are 4 kinds of shiplifts, each of them is 3 tiles long. //there are 4 kinds of shiplifts, each of them is 3 tiles long.
//the four kinds are running in the X and Y direction and //the four kinds are running in the X and Y direction and
//are "lowering" either in the "+" or the "-" direction. //are "lowering" either in the "+" or the "-" direction.
//the three tiles are the center tile (where the slope is) //the three tiles are the center tile (where the slope is)
//and a bottom and a top tile //and a bottom and a top tile
SPR_SHIPLIFT_Y_UP_CENTER_REAR = SPR_CANALS_BASE + 9, SPR_SHIPLIFT_BASE = SPR_CANALS_BASE + 4,
SPR_SHIPLIFT_X_DOWN_CENTER_REAR = SPR_CANALS_BASE + 10, SPR_SHIPLIFT_Y_UP_CENTER_REAR = SPR_CANALS_BASE + 4,
SPR_SHIPLIFT_X_UP_CENTER_REAR = SPR_CANALS_BASE + 11, SPR_SHIPLIFT_X_DOWN_CENTER_REAR = SPR_CANALS_BASE + 5,
SPR_SHIPLIFT_Y_DOWN_CENTER_REAR = SPR_CANALS_BASE + 12, SPR_SHIPLIFT_X_UP_CENTER_REAR = SPR_CANALS_BASE + 6,
SPR_SHIPLIFT_Y_UP_CENTER_FRONT = SPR_CANALS_BASE + 13, SPR_SHIPLIFT_Y_DOWN_CENTER_REAR = SPR_CANALS_BASE + 7,
SPR_SHIPLIFT_X_DOWN_CENTER_FRONT = SPR_CANALS_BASE + 14, SPR_SHIPLIFT_Y_UP_CENTER_FRONT = SPR_CANALS_BASE + 8,
SPR_SHIPLIFT_X_UP_CENTER_FRONT = SPR_CANALS_BASE + 15, SPR_SHIPLIFT_X_DOWN_CENTER_FRONT = SPR_CANALS_BASE + 9,
SPR_SHIPLIFT_Y_DOWN_CENTER_FRONT = SPR_CANALS_BASE + 16, SPR_SHIPLIFT_X_UP_CENTER_FRONT = SPR_CANALS_BASE + 10,
SPR_SHIPLIFT_Y_UP_BOTTOM_REAR = SPR_CANALS_BASE + 17, SPR_SHIPLIFT_Y_DOWN_CENTER_FRONT = SPR_CANALS_BASE + 11,
SPR_SHIPLIFT_X_DOWN_BOTTOM_REAR = SPR_CANALS_BASE + 18, SPR_SHIPLIFT_Y_UP_BOTTOM_REAR = SPR_CANALS_BASE + 12,
SPR_SHIPLIFT_X_UP_BOTTOM_REAR = SPR_CANALS_BASE + 19, SPR_SHIPLIFT_X_DOWN_BOTTOM_REAR = SPR_CANALS_BASE + 13,
SPR_SHIPLIFT_Y_DOWN_BOTTOM_REAR = SPR_CANALS_BASE + 20, SPR_SHIPLIFT_X_UP_BOTTOM_REAR = SPR_CANALS_BASE + 14,
SPR_SHIPLIFT_Y_UP_BOTTOM_FRONT = SPR_CANALS_BASE + 21, SPR_SHIPLIFT_Y_DOWN_BOTTOM_REAR = SPR_CANALS_BASE + 15,
SPR_SHIPLIFT_X_DOWN_BOTTOM_FRONT = SPR_CANALS_BASE + 22, SPR_SHIPLIFT_Y_UP_BOTTOM_FRONT = SPR_CANALS_BASE + 16,
SPR_SHIPLIFT_X_UP_BOTTOM_FRONT = SPR_CANALS_BASE + 23, SPR_SHIPLIFT_X_DOWN_BOTTOM_FRONT = SPR_CANALS_BASE + 17,
SPR_SHIPLIFT_Y_DOWN_BOTTOM_FRONT = SPR_CANALS_BASE + 24, SPR_SHIPLIFT_X_UP_BOTTOM_FRONT = SPR_CANALS_BASE + 18,
SPR_SHIPLIFT_Y_UP_TOP_REAR = SPR_CANALS_BASE + 25, SPR_SHIPLIFT_Y_DOWN_BOTTOM_FRONT = SPR_CANALS_BASE + 19,
SPR_SHIPLIFT_X_DOWN_TOP_REAR = SPR_CANALS_BASE + 26, SPR_SHIPLIFT_Y_UP_TOP_REAR = SPR_CANALS_BASE + 20,
SPR_SHIPLIFT_X_UP_TOP_REAR = SPR_CANALS_BASE + 27, SPR_SHIPLIFT_X_DOWN_TOP_REAR = SPR_CANALS_BASE + 21,
SPR_SHIPLIFT_Y_DOWN_TOP_REAR = SPR_CANALS_BASE + 28, SPR_SHIPLIFT_X_UP_TOP_REAR = SPR_CANALS_BASE + 22,
SPR_SHIPLIFT_Y_UP_TOP_FRONT = SPR_CANALS_BASE + 29, SPR_SHIPLIFT_Y_DOWN_TOP_REAR = SPR_CANALS_BASE + 23,
SPR_SHIPLIFT_X_DOWN_TOP_FRONT = SPR_CANALS_BASE + 30, SPR_SHIPLIFT_Y_UP_TOP_FRONT = SPR_CANALS_BASE + 24,
SPR_SHIPLIFT_X_UP_TOP_FRONT = SPR_CANALS_BASE + 31, SPR_SHIPLIFT_X_DOWN_TOP_FRONT = SPR_CANALS_BASE + 25,
SPR_SHIPLIFT_Y_DOWN_TOP_FRONT = SPR_CANALS_BASE + 32, SPR_SHIPLIFT_X_UP_TOP_FRONT = SPR_CANALS_BASE + 26,
SPR_SHIPLIFT_Y_DOWN_TOP_FRONT = SPR_CANALS_BASE + 27,
SPR_CANAL_DIKES_BASE = SPR_CANALS_BASE + 52,
/* Sprites for tunnels and bridges */ /* Sprites for tunnels and bridges */
SPR_TUNNEL_ENTRY_REAR_RAIL = 2365, SPR_TUNNEL_ENTRY_REAR_RAIL = 2365,
@ -613,7 +619,7 @@ enum Sprites {
SPR_CROSSING_OFF_X_MAGLEV = 1394, SPR_CROSSING_OFF_X_MAGLEV = 1394,
/* bridge type sprites */ /* bridge type sprites */
SPR_PILLARS_BASE = SPR_OPENTTD_BASE + 30, SPR_PILLARS_BASE = SPR_OPENTTD_BASE + 14,
/* Wooden bridge (type 0) */ /* Wooden bridge (type 0) */
SPR_BTWDN_RAIL_Y_REAR = 2545, SPR_BTWDN_RAIL_Y_REAR = 2545,
@ -1012,11 +1018,11 @@ enum Sprites {
SPR_IMG_ROCKS = 4084, SPR_IMG_ROCKS = 4084,
SPR_IMG_LIGHTHOUSE_DESERT = 4085, // XXX - is Desert image on the desert-climate SPR_IMG_LIGHTHOUSE_DESERT = 4085, // XXX - is Desert image on the desert-climate
SPR_IMG_TRANSMITTER = 4086, SPR_IMG_TRANSMITTER = 4086,
SPR_IMG_LEVEL_LAND = SPR_OPENTTD_BASE + 61, SPR_IMG_LEVEL_LAND = SPR_OPENTTD_BASE + 91,
SPR_IMG_BUILD_CANAL = SPR_OPENTTD_BASE + 58, SPR_IMG_BUILD_CANAL = SPR_OPENTTD_BASE + 88,
SPR_IMG_BUILD_LOCK = SPR_CANALS_BASE + 69, SPR_IMG_BUILD_LOCK = SPR_CANALS_BASE + 64,
SPR_IMG_PAUSE = 726, SPR_IMG_PAUSE = 726,
SPR_IMG_FASTFORWARD = SPR_OPENTTD_BASE + 54, SPR_IMG_FASTFORWARD = SPR_OPENTTD_BASE + 90,
SPR_IMG_SETTINGS = 751, SPR_IMG_SETTINGS = 751,
SPR_IMG_SAVE = 724, SPR_IMG_SAVE = 724,
SPR_IMG_SMALLMAP = 708, SPR_IMG_SMALLMAP = 708,
@ -1052,8 +1058,8 @@ enum Sprites {
/* OPEN TRANSPORT TYCOON in gamescreen */ /* OPEN TRANSPORT TYCOON in gamescreen */
SPR_OTTD_O = 4842, SPR_OTTD_O = 4842,
SPR_OTTD_P = 4841, SPR_OTTD_P = 4841,
SPR_OTTD_E = SPR_OPENTTD_BASE + 13, SPR_OTTD_E = SPR_OPENTTD_BASE + 12,
SPR_OTTD_D = SPR_OPENTTD_BASE + 14, SPR_OTTD_D = SPR_OPENTTD_BASE + 13,
SPR_OTTD_N = 4839, SPR_OTTD_N = 4839,
SPR_OTTD_T = 4836, SPR_OTTD_T = 4836,
SPR_OTTD_R = 4837, SPR_OTTD_R = 4837,
@ -1202,11 +1208,11 @@ enum Sprites {
SPR_BUBBLE_ABSORB_4 = 4762, SPR_BUBBLE_ABSORB_4 = 4762,
/* Electrified rail build menu */ /* Electrified rail build menu */
SPR_BUILD_NS_ELRAIL = SPR_ELRAIL_BASE + 39, SPR_BUILD_NS_ELRAIL = SPR_ELRAIL_BASE + 36,
SPR_BUILD_X_ELRAIL = SPR_ELRAIL_BASE + 40, SPR_BUILD_X_ELRAIL = SPR_ELRAIL_BASE + 37,
SPR_BUILD_EW_ELRAIL = SPR_ELRAIL_BASE + 41, SPR_BUILD_EW_ELRAIL = SPR_ELRAIL_BASE + 38,
SPR_BUILD_Y_ELRAIL = SPR_ELRAIL_BASE + 42, SPR_BUILD_Y_ELRAIL = SPR_ELRAIL_BASE + 39,
SPR_BUILD_TUNNEL_ELRAIL = SPR_ELRAIL_BASE + 47, SPR_BUILD_TUNNEL_ELRAIL = SPR_ELRAIL_BASE + 44,
/* airport_gui.c */ /* airport_gui.c */
SPR_IMG_AIRPORT = 744, SPR_IMG_AIRPORT = 744,
@ -1225,7 +1231,7 @@ enum Sprites {
/* road_gui.c */ /* road_gui.c */
SPR_IMG_ROAD_NW = 1309, SPR_IMG_ROAD_NW = 1309,
SPR_IMG_ROAD_NE = 1310, SPR_IMG_ROAD_NE = 1310,
SPR_IMG_AUTOROAD = SPR_OPENTTD_BASE + 112, SPR_IMG_AUTOROAD = SPR_OPENTTD_BASE + 82,
SPR_IMG_ROAD_DEPOT = 1295, SPR_IMG_ROAD_DEPOT = 1295,
SPR_IMG_BUS_STATION = 749, SPR_IMG_BUS_STATION = 749,
SPR_IMG_TRUCK_BAY = 750, SPR_IMG_TRUCK_BAY = 750,
@ -1234,24 +1240,24 @@ enum Sprites {
SPR_IMG_REMOVE = 714, SPR_IMG_REMOVE = 714,
SPR_IMG_TRAMWAY_NW = SPR_TRAMWAY_BASE + 0, SPR_IMG_TRAMWAY_NW = SPR_TRAMWAY_BASE + 0,
SPR_IMG_TRAMWAY_NE = SPR_TRAMWAY_BASE + 1, SPR_IMG_TRAMWAY_NE = SPR_TRAMWAY_BASE + 1,
SPR_IMG_AUTOTRAM = SPR_OPENTTD_BASE + 114, SPR_IMG_AUTOTRAM = SPR_OPENTTD_BASE + 84,
/* rail_gui.c */ /* rail_gui.c */
SPR_IMG_RAIL_NS = 1251, SPR_IMG_RAIL_NS = 1251,
SPR_IMG_RAIL_NE = 1252, SPR_IMG_RAIL_NE = 1252,
SPR_IMG_RAIL_EW = 1253, SPR_IMG_RAIL_EW = 1253,
SPR_IMG_RAIL_NW = 1254, SPR_IMG_RAIL_NW = 1254,
SPR_IMG_AUTORAIL = SPR_OPENTTD_BASE + 0, SPR_IMG_AUTORAIL = SPR_OPENTTD_BASE + 53,
SPR_IMG_AUTOELRAIL = SPR_OPENTTD_BASE + 116, SPR_IMG_AUTOELRAIL = SPR_OPENTTD_BASE + 57,
SPR_IMG_AUTOMONO = SPR_OPENTTD_BASE + 1, SPR_IMG_AUTOMONO = SPR_OPENTTD_BASE + 63,
SPR_IMG_AUTOMAGLEV = SPR_OPENTTD_BASE + 2, SPR_IMG_AUTOMAGLEV = SPR_OPENTTD_BASE + 69,
SPR_IMG_WAYPOINT = SPR_OPENTTD_BASE + 3, SPR_IMG_WAYPOINT = SPR_OPENTTD_BASE + 76,
SPR_IMG_DEPOT_RAIL = 1294, SPR_IMG_DEPOT_RAIL = 1294,
SPR_IMG_DEPOT_ELRAIL = SPR_OPENTTD_BASE + 120, SPR_IMG_DEPOT_ELRAIL = SPR_OPENTTD_BASE + 61,
SPR_IMG_DEPOT_MONO = SPR_OPENTTD_BASE + 9, SPR_IMG_DEPOT_MONO = SPR_OPENTTD_BASE + 67,
SPR_IMG_DEPOT_MAGLEV = SPR_OPENTTD_BASE + 10, SPR_IMG_DEPOT_MAGLEV = SPR_OPENTTD_BASE + 73,
SPR_IMG_RAIL_STATION = 1298, SPR_IMG_RAIL_STATION = 1298,
SPR_IMG_RAIL_SIGNALS = 1291, SPR_IMG_RAIL_SIGNALS = 1291,
@ -1260,10 +1266,10 @@ enum Sprites {
SPR_IMG_TUNNEL_MONO = 2431, SPR_IMG_TUNNEL_MONO = 2431,
SPR_IMG_TUNNEL_MAGLEV = 2432, SPR_IMG_TUNNEL_MAGLEV = 2432,
SPR_IMG_CONVERT_RAIL = SPR_OPENTTD_BASE + 22, SPR_IMG_CONVERT_RAIL = SPR_OPENTTD_BASE + 55,
SPR_IMG_CONVERT_ELRAIL = SPR_OPENTTD_BASE + 118, SPR_IMG_CONVERT_ELRAIL = SPR_OPENTTD_BASE + 59,
SPR_IMG_CONVERT_MONO = SPR_OPENTTD_BASE + 24, SPR_IMG_CONVERT_MONO = SPR_OPENTTD_BASE + 65,
SPR_IMG_CONVERT_MAGLEV = SPR_OPENTTD_BASE + 26, SPR_IMG_CONVERT_MAGLEV = SPR_OPENTTD_BASE + 71,
/* intro_gui.c, genworld_gui.c */ /* intro_gui.c, genworld_gui.c */
SPR_SELECT_TEMPERATE = 4882, SPR_SELECT_TEMPERATE = 4882,
@ -1290,7 +1296,7 @@ enum CursorSprite {
SPR_CURSOR_TREE = 2010, SPR_CURSOR_TREE = 2010,
SPR_CURSOR_BUY_LAND = 4792, SPR_CURSOR_BUY_LAND = 4792,
SPR_CURSOR_LEVEL_LAND = SPR_OPENTTD_BASE + 62, SPR_CURSOR_LEVEL_LAND = SPR_OPENTTD_BASE + 92,
SPR_CURSOR_TOWN = 4080, SPR_CURSOR_TOWN = 4080,
SPR_CURSOR_INDUSTRY = 4081, SPR_CURSOR_INDUSTRY = 4081,
@ -1303,8 +1309,8 @@ enum CursorSprite {
/* dock cursors */ /* dock cursors */
SPR_CURSOR_DOCK = 3668, SPR_CURSOR_DOCK = 3668,
SPR_CURSOR_CANAL = SPR_OPENTTD_BASE + 8, SPR_CURSOR_CANAL = SPR_OPENTTD_BASE + 89,
SPR_CURSOR_LOCK = SPR_OPENTTD_BASE + 57, SPR_CURSOR_LOCK = SPR_OPENTTD_BASE + 87,
/* shared road & rail cursors */ /* shared road & rail cursors */
SPR_CURSOR_BRIDGE = 2593, SPR_CURSOR_BRIDGE = 2593,
@ -1325,52 +1331,52 @@ enum CursorSprite {
SPR_CURSOR_EW_MAGLEV = 1273, SPR_CURSOR_EW_MAGLEV = 1273,
SPR_CURSOR_NWSE_MAGLEV = 1274, SPR_CURSOR_NWSE_MAGLEV = 1274,
SPR_CURSOR_NS_ELRAIL = SPR_ELRAIL_BASE + 43, SPR_CURSOR_NS_ELRAIL = SPR_ELRAIL_BASE + 40,
SPR_CURSOR_SWNE_ELRAIL = SPR_ELRAIL_BASE + 44, SPR_CURSOR_SWNE_ELRAIL = SPR_ELRAIL_BASE + 41,
SPR_CURSOR_EW_ELRAIL = SPR_ELRAIL_BASE + 45, SPR_CURSOR_EW_ELRAIL = SPR_ELRAIL_BASE + 42,
SPR_CURSOR_NWSE_ELRAIL = SPR_ELRAIL_BASE + 46, SPR_CURSOR_NWSE_ELRAIL = SPR_ELRAIL_BASE + 43,
SPR_CURSOR_RAIL_STATION = 1300, SPR_CURSOR_RAIL_STATION = 1300,
SPR_CURSOR_TUNNEL_RAIL = 2434, SPR_CURSOR_TUNNEL_RAIL = 2434,
SPR_CURSOR_TUNNEL_ELRAIL = SPR_ELRAIL_BASE + 48, SPR_CURSOR_TUNNEL_ELRAIL = SPR_ELRAIL_BASE + 45,
SPR_CURSOR_TUNNEL_MONO = 2435, SPR_CURSOR_TUNNEL_MONO = 2435,
SPR_CURSOR_TUNNEL_MAGLEV = 2436, SPR_CURSOR_TUNNEL_MAGLEV = 2436,
SPR_CURSOR_AUTORAIL = SPR_OPENTTD_BASE + 4, SPR_CURSOR_AUTORAIL = SPR_OPENTTD_BASE + 54,
SPR_CURSOR_AUTOELRAIL = SPR_OPENTTD_BASE + 117, SPR_CURSOR_AUTOELRAIL = SPR_OPENTTD_BASE + 58,
SPR_CURSOR_AUTOMONO = SPR_OPENTTD_BASE + 5, SPR_CURSOR_AUTOMONO = SPR_OPENTTD_BASE + 64,
SPR_CURSOR_AUTOMAGLEV = SPR_OPENTTD_BASE + 6, SPR_CURSOR_AUTOMAGLEV = SPR_OPENTTD_BASE + 70,
SPR_CURSOR_WAYPOINT = SPR_OPENTTD_BASE + 7, SPR_CURSOR_WAYPOINT = SPR_OPENTTD_BASE + 77,
SPR_CURSOR_RAIL_DEPOT = 1296, SPR_CURSOR_RAIL_DEPOT = 1296,
SPR_CURSOR_ELRAIL_DEPOT = SPR_OPENTTD_BASE + 121, SPR_CURSOR_ELRAIL_DEPOT = SPR_OPENTTD_BASE + 62,
SPR_CURSOR_MONO_DEPOT = SPR_OPENTTD_BASE + 11, SPR_CURSOR_MONO_DEPOT = SPR_OPENTTD_BASE + 68,
SPR_CURSOR_MAGLEV_DEPOT = SPR_OPENTTD_BASE + 12, SPR_CURSOR_MAGLEV_DEPOT = SPR_OPENTTD_BASE + 74,
SPR_CURSOR_CONVERT_RAIL = SPR_OPENTTD_BASE + 23, SPR_CURSOR_CONVERT_RAIL = SPR_OPENTTD_BASE + 56,
SPR_CURSOR_CONVERT_ELRAIL = SPR_OPENTTD_BASE + 119, SPR_CURSOR_CONVERT_ELRAIL = SPR_OPENTTD_BASE + 60,
SPR_CURSOR_CONVERT_MONO = SPR_OPENTTD_BASE + 25, SPR_CURSOR_CONVERT_MONO = SPR_OPENTTD_BASE + 66,
SPR_CURSOR_CONVERT_MAGLEV = SPR_OPENTTD_BASE + 27, SPR_CURSOR_CONVERT_MAGLEV = SPR_OPENTTD_BASE + 72,
/* road cursors */ /* road cursors */
SPR_CURSOR_ROAD_NESW = 1311, SPR_CURSOR_ROAD_NESW = 1311,
SPR_CURSOR_ROAD_NWSE = 1312, SPR_CURSOR_ROAD_NWSE = 1312,
SPR_CURSOR_AUTOROAD = SPR_OPENTTD_BASE + 113, SPR_CURSOR_AUTOROAD = SPR_OPENTTD_BASE + 83,
SPR_CURSOR_TRAMWAY_NESW = SPR_TRAMWAY_BASE + 2, SPR_CURSOR_TRAMWAY_NESW = SPR_TRAMWAY_BASE + 2,
SPR_CURSOR_TRAMWAY_NWSE = SPR_TRAMWAY_BASE + 3, SPR_CURSOR_TRAMWAY_NWSE = SPR_TRAMWAY_BASE + 3,
SPR_CURSOR_AUTOTRAM = SPR_OPENTTD_BASE + 115, SPR_CURSOR_AUTOTRAM = SPR_OPENTTD_BASE + 85,
SPR_CURSOR_ROAD_DEPOT = 1297, SPR_CURSOR_ROAD_DEPOT = 1297,
SPR_CURSOR_BUS_STATION = 2725, SPR_CURSOR_BUS_STATION = 2725,
SPR_CURSOR_TRUCK_STATION = 2726, SPR_CURSOR_TRUCK_STATION = 2726,
SPR_CURSOR_ROAD_TUNNEL = 2433, SPR_CURSOR_ROAD_TUNNEL = 2433,
SPR_CURSOR_CLONE_TRAIN = SPR_OPENTTD_BASE + 88, SPR_CURSOR_CLONE_TRAIN = SPR_OPENTTD_BASE + 110,
SPR_CURSOR_CLONE_ROADVEH = SPR_OPENTTD_BASE + 105, SPR_CURSOR_CLONE_ROADVEH = SPR_OPENTTD_BASE + 111,
SPR_CURSOR_CLONE_SHIP = SPR_OPENTTD_BASE + 107, SPR_CURSOR_CLONE_SHIP = SPR_OPENTTD_BASE + 112,
SPR_CURSOR_CLONE_AIRPLANE = SPR_OPENTTD_BASE + 109 SPR_CURSOR_CLONE_AIRPLANE = SPR_OPENTTD_BASE + 113,
}; };
/// Animation macro in table/animcursors.h (_animcursors[]) /// Animation macro in table/animcursors.h (_animcursors[])

View File

@ -378,7 +378,7 @@ void DrawCanalWater(TileIndex tile)
/* Test for custom graphics, else use the default */ /* Test for custom graphics, else use the default */
SpriteID dikes_base = GetCanalSprite(CF_DIKES, tile); SpriteID dikes_base = GetCanalSprite(CF_DIKES, tile);
if (dikes_base == 0) dikes_base = SPR_CANALS_BASE + 57; if (dikes_base == 0) dikes_base = SPR_CANAL_DIKES_BASE;
/* determine the edges around with water. */ /* determine the edges around with water. */
wa = IsWateredTile(TILE_ADDXY(tile, -1, 0)) << 0; wa = IsWateredTile(TILE_ADDXY(tile, -1, 0)) << 0;
@ -433,9 +433,9 @@ static void DrawWaterStuff(const TileInfo *ti, const WaterDrawTileStruct *wdts,
SpriteID locks_base = GetCanalSprite(CF_LOCKS, ti->tile); SpriteID locks_base = GetCanalSprite(CF_LOCKS, ti->tile);
/* If no custom graphics, use defaults */ /* If no custom graphics, use defaults */
if (water_base == 0) water_base = SPR_CANALS_BASE + 5; if (water_base == 0) water_base = SPR_CANALS_BASE;
if (locks_base == 0) { if (locks_base == 0) {
locks_base = SPR_CANALS_BASE + 9; locks_base = SPR_SHIPLIFT_BASE;
} else { } else {
/* If using custom graphics, ignore the variation on height */ /* If using custom graphics, ignore the variation on height */
base = 0; base = 0;