mirror of https://github.com/OpenTTD/OpenTTD
(svn r11726) -Feature[newGRF]: Extend the Action 5, feature 0D usage. Patch by BigBB
parent
31e2ed8b4c
commit
8ee1faca6c
Binary file not shown.
Binary file not shown.
|
@ -59,7 +59,6 @@
|
||||||
|
|
||||||
static int _skip_sprites; // XXX
|
static int _skip_sprites; // XXX
|
||||||
static uint _file_index; // XXX
|
static uint _file_index; // XXX
|
||||||
SpriteID _coast_base;
|
|
||||||
|
|
||||||
static GRFFile *_cur_grffile;
|
static GRFFile *_cur_grffile;
|
||||||
GRFFile *_first_grffile;
|
GRFFile *_first_grffile;
|
||||||
|
@ -3355,12 +3354,47 @@ static void GraphicsNew(byte *buf, int len)
|
||||||
/* case 0x0C: // Snowy temperate trees. Not yet used by OTTD. */
|
/* case 0x0C: // Snowy temperate trees. Not yet used by OTTD. */
|
||||||
|
|
||||||
case 0x0D: // Coast graphics
|
case 0x0D: // Coast graphics
|
||||||
if (num != 16) {
|
switch (num) {
|
||||||
grfmsg(1, "GraphicsNew: Coast graphics sprite count must be 16, skipping");
|
case 10:
|
||||||
return;
|
if (!_cur_grffile->is_ottdfile) {
|
||||||
|
grfmsg(2, "GraphicsNew: feature is reserved only for OpenTTD, skipping");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* openttd(d/w).grf missing shore sprites and initialisation of SPR_SHORE_BASE */
|
||||||
|
LoadNextSprite( SPR_SHORE_BASE + 0, _file_index, _nfo_line++); // SLOPE_STEEP_S
|
||||||
|
DupSprite( 4063, SPR_SHORE_BASE + 1 ); // SLOPE_W
|
||||||
|
DupSprite( 4064, SPR_SHORE_BASE + 2 ); // SLOPE_S
|
||||||
|
DupSprite( 4068, SPR_SHORE_BASE + 3 ); // SLOPE_SW
|
||||||
|
DupSprite( 4062, SPR_SHORE_BASE + 4 ); // SLOPE_E
|
||||||
|
LoadNextSprite( SPR_SHORE_BASE + 5, _file_index, _nfo_line++); // SLOPE_STEEP_W
|
||||||
|
DupSprite( 4066, SPR_SHORE_BASE + 6 ); // SLOPE_SE
|
||||||
|
LoadNextSprite( SPR_SHORE_BASE + 7, _file_index, _nfo_line++); // SLOPE_WSE
|
||||||
|
DupSprite( 4065, SPR_SHORE_BASE + 8 ); // SLOPE_N
|
||||||
|
DupSprite( 4069, SPR_SHORE_BASE + 9 ); // SLOPE_NW
|
||||||
|
LoadNextSprite( SPR_SHORE_BASE + 10, _file_index, _nfo_line++); // SLOPE_STEEP_N
|
||||||
|
LoadNextSprite( SPR_SHORE_BASE + 11, _file_index, _nfo_line++); // SLOPE_NWS
|
||||||
|
DupSprite( 4067, SPR_SHORE_BASE + 12 ); // SLOPE_NE
|
||||||
|
LoadNextSprite( SPR_SHORE_BASE + 13, _file_index, _nfo_line++); // SLOPE_ENW
|
||||||
|
LoadNextSprite( SPR_SHORE_BASE + 14, _file_index, _nfo_line++); // SLOPE_SEN
|
||||||
|
LoadNextSprite( SPR_SHORE_BASE + 15, _file_index, _nfo_line++); // SLOPE_STEEP_E
|
||||||
|
LoadNextSprite( SPR_SHORE_BASE + 16, _file_index, _nfo_line++); // SLOPE_EW
|
||||||
|
LoadNextSprite( SPR_SHORE_BASE + 17, _file_index, _nfo_line++); // SLOPE_NS
|
||||||
|
|
||||||
|
grfmsg(2, "GraphicsNew: Loading all standard shore sprites");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 16:
|
||||||
|
case 18:
|
||||||
|
/* 'normal' newWater newGRF */
|
||||||
|
replace = SPR_SHORE_BASE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
/* no valid shore sprite count */
|
||||||
|
grfmsg(1, "GraphicsNew: Shore graphics sprite count must be 10, 16 or 18, skipping");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
_coast_base = _cur_spriteid;
|
|
||||||
_loaded_newgrf_features.has_newwater = true;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* case 0x0E: // New Signals. Not yet used by OTTD. */
|
/* case 0x0E: // New Signals. Not yet used by OTTD. */
|
||||||
|
@ -5083,8 +5117,6 @@ static void ResetNewGRFData()
|
||||||
_loaded_newgrf_features.has_2CC = false;
|
_loaded_newgrf_features.has_2CC = false;
|
||||||
_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;
|
|
||||||
_coast_base = 0;
|
|
||||||
|
|
||||||
InitializeSoundPool();
|
InitializeSoundPool();
|
||||||
InitializeSpriteGroupPool();
|
InitializeSpriteGroupPool();
|
||||||
|
@ -5473,7 +5505,7 @@ static void DecodeSpecialSprite(uint num, GrfLoadingStage stage)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage)
|
void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage, bool ottd_grf)
|
||||||
{
|
{
|
||||||
const char *filename = config->filename;
|
const char *filename = config->filename;
|
||||||
uint16 num;
|
uint16 num;
|
||||||
|
@ -5492,6 +5524,7 @@ void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage)
|
||||||
if (_cur_grffile == NULL) error("File '%s' lost in cache.\n", filename);
|
if (_cur_grffile == NULL) error("File '%s' lost in cache.\n", filename);
|
||||||
if (stage == GLS_RESERVE && config->status != GCS_INITIALISED) return;
|
if (stage == GLS_RESERVE && config->status != GCS_INITIALISED) return;
|
||||||
if (stage == GLS_ACTIVATION && !HasBit(config->flags, GCF_RESERVED)) return;
|
if (stage == GLS_ACTIVATION && !HasBit(config->flags, GCF_RESERVED)) return;
|
||||||
|
_cur_grffile->is_ottdfile = ottd_grf;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (file_index > LAST_GRF_SLOT) {
|
if (file_index > LAST_GRF_SLOT) {
|
||||||
|
@ -5634,7 +5667,7 @@ void LoadNewGRF(uint load_index, uint file_index)
|
||||||
if (!FioCheckFileExists(c->filename)) error("NewGRF file is missing '%s'", c->filename);
|
if (!FioCheckFileExists(c->filename)) error("NewGRF file is missing '%s'", c->filename);
|
||||||
|
|
||||||
if (stage == GLS_LABELSCAN) InitNewGRFFile(c, _cur_spriteid);
|
if (stage == GLS_LABELSCAN) InitNewGRFFile(c, _cur_spriteid);
|
||||||
LoadNewGRFFile(c, slot++, stage);
|
LoadNewGRFFile(c, slot++, stage, true);
|
||||||
if (stage == GLS_RESERVE) {
|
if (stage == GLS_RESERVE) {
|
||||||
SetBit(c->flags, GCF_RESERVED);
|
SetBit(c->flags, GCF_RESERVED);
|
||||||
} else if (stage == GLS_ACTIVATION) {
|
} else if (stage == GLS_ACTIVATION) {
|
||||||
|
|
|
@ -41,6 +41,7 @@ struct GRFLabel {
|
||||||
|
|
||||||
struct GRFFile {
|
struct GRFFile {
|
||||||
char *filename;
|
char *filename;
|
||||||
|
bool is_ottdfile;
|
||||||
uint32 grfid;
|
uint32 grfid;
|
||||||
uint16 sprite_offset;
|
uint16 sprite_offset;
|
||||||
byte grf_version;
|
byte grf_version;
|
||||||
|
@ -84,19 +85,16 @@ struct GRFFile {
|
||||||
|
|
||||||
extern GRFFile *_first_grffile;
|
extern GRFFile *_first_grffile;
|
||||||
|
|
||||||
extern SpriteID _coast_base;
|
|
||||||
|
|
||||||
struct GRFLoadedFeatures {
|
struct GRFLoadedFeatures {
|
||||||
bool has_2CC; ///< Set if any vehicle is loaded which uses 2cc (two company colours).
|
bool has_2CC; ///< Set if any vehicle is loaded which uses 2cc (two company colours).
|
||||||
bool has_newhouses; ///< Set if there are any newhouses loaded.
|
bool has_newhouses; ///< Set if there are any newhouses loaded.
|
||||||
bool has_newindustries; ///< Set if there are any newindustries loaded.
|
bool has_newindustries; ///< Set if there are any newindustries loaded.
|
||||||
bool has_newwater; ///< Set it there are any newwater grf loaded
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Indicates which are the newgrf features currently loaded ingame */
|
/* Indicates which are the newgrf features currently loaded ingame */
|
||||||
extern GRFLoadedFeatures _loaded_newgrf_features;
|
extern GRFLoadedFeatures _loaded_newgrf_features;
|
||||||
|
|
||||||
void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage);
|
void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage, bool ottd_grf = false);
|
||||||
void LoadNewGRF(uint load_index, uint file_index);
|
void LoadNewGRF(uint load_index, uint file_index);
|
||||||
void ReloadNewGRFData(); // in openttd.cpp
|
void ReloadNewGRFData(); // in openttd.cpp
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ static FileList files_dos = {
|
||||||
},
|
},
|
||||||
{ "SAMPLE.CAT", {0x42, 0x2e, 0xa3, 0xdd, 0x07, 0x4d, 0x28, 0x59, 0xbb, 0x51, 0x63, 0x9a, 0x6e, 0x0e, 0x85, 0xda} },
|
{ "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} },
|
{ "CHARS.GRF", {0x5f, 0x2e, 0xbf, 0x05, 0xb6, 0x12, 0x65, 0x81, 0xd2, 0x10, 0xa9, 0x19, 0x62, 0x41, 0x70, 0x64} },
|
||||||
{ "OPENTTDD.GRF", {0x60, 0xfe, 0xc1, 0xc7, 0x66, 0xe7, 0x59, 0xff, 0x1b, 0x6c, 0xc4, 0x5f, 0xe6, 0x6b, 0x8c, 0x91} }
|
{ "OPENTTDD.GRF", {0x9a, 0x26, 0xc9, 0xd1, 0xa2, 0x39, 0xb8, 0xaa, 0x57, 0xac, 0x0f, 0xf0, 0xe4, 0x4b, 0x37, 0xb2} }
|
||||||
};
|
};
|
||||||
|
|
||||||
static FileList files_win = {
|
static FileList files_win = {
|
||||||
|
@ -48,5 +48,5 @@ static FileList files_win = {
|
||||||
},
|
},
|
||||||
{ "SAMPLE.CAT", {0x92, 0x12, 0xe8, 0x1e, 0x72, 0xba, 0xdd, 0x4b, 0xbe, 0x1e, 0xae, 0xae, 0x66, 0x45, 0x8e, 0x10} },
|
{ "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} },
|
{ "CHARS.GRF", {0x5f, 0x2e, 0xbf, 0x05, 0xb6, 0x12, 0x65, 0x81, 0xd2, 0x10, 0xa9, 0x19, 0x62, 0x41, 0x70, 0x64} },
|
||||||
{ "OPENTTDW.GRF", {0x85, 0xb7, 0xd0, 0xa6, 0xc3, 0x86, 0x44, 0x03, 0xa1, 0x25, 0xa5, 0xbb, 0x50, 0x75, 0xa0, 0xa1} }
|
{ "OPENTTDW.GRF", {0xa1, 0x9c, 0xaa, 0xfc, 0x6b, 0xd2, 0x09, 0xc3, 0xd4, 0x84, 0x33, 0x43, 0x3f, 0xd1, 0xbd, 0xd5} }
|
||||||
};
|
};
|
||||||
|
|
|
@ -141,7 +141,11 @@ enum Sprites {
|
||||||
SPR_2CCMAP_BASE = SPR_ELRAIL_BASE + ELRAIL_SPRITE_COUNT,
|
SPR_2CCMAP_BASE = SPR_ELRAIL_BASE + ELRAIL_SPRITE_COUNT,
|
||||||
TWOCCMAP_SPRITE_COUNT = 256,
|
TWOCCMAP_SPRITE_COUNT = 256,
|
||||||
|
|
||||||
SPR_AIRPORTX_BASE = SPR_2CCMAP_BASE + TWOCCMAP_SPRITE_COUNT, // The sprites used for other airport angles
|
/* shore tiles - action 05-0D */
|
||||||
|
SPR_SHORE_BASE = SPR_2CCMAP_BASE + TWOCCMAP_SPRITE_COUNT,
|
||||||
|
SPR_SHORE_SPRITE_COUNT = 18,
|
||||||
|
|
||||||
|
SPR_AIRPORTX_BASE = SPR_SHORE_BASE + SPR_SHORE_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,
|
||||||
|
@ -553,17 +557,6 @@ enum Sprites {
|
||||||
SPR_FARMLAND_STATE_7 = 4259,
|
SPR_FARMLAND_STATE_7 = 4259,
|
||||||
SPR_FARMLAND_HAYPACKS = 4278,
|
SPR_FARMLAND_HAYPACKS = 4278,
|
||||||
|
|
||||||
/* Shores */
|
|
||||||
SPR_NO_SHORE = 0, //used for tileh which have no shore
|
|
||||||
SPR_SHORE_TILEH_4 = 4062, // SLOPE_E
|
|
||||||
SPR_SHORE_TILEH_1 = 4063, // SLOPE_W
|
|
||||||
SPR_SHORE_TILEH_2 = 4064, // SLOPE_S
|
|
||||||
SPR_SHORE_TILEH_8 = 4065, // SLOPE_N
|
|
||||||
SPR_SHORE_TILEH_6 = 4066, // SLOPE_SE
|
|
||||||
SPR_SHORE_TILEH_12 = 4067, // SLOPE_NE
|
|
||||||
SPR_SHORE_TILEH_3 = 4068, // SLOPE_SW
|
|
||||||
SPR_SHORE_TILEH_9 = 4069, // SLOPE_NW
|
|
||||||
|
|
||||||
/* Water-related sprites */
|
/* Water-related sprites */
|
||||||
SPR_SHIP_DEPOT_SE_FRONT = 4070,
|
SPR_SHIP_DEPOT_SE_FRONT = 4070,
|
||||||
SPR_SHIP_DEPOT_SW_FRONT = 4071,
|
SPR_SHIP_DEPOT_SW_FRONT = 4071,
|
||||||
|
|
|
@ -1168,10 +1168,10 @@ static const DrawTileSprites _station_display_datas_oilrig[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static const DrawTileSprites _station_display_datas_dock[] = {
|
static const DrawTileSprites _station_display_datas_dock[] = {
|
||||||
{ SPR_SHORE_TILEH_3, PAL_NONE, _station_display_datas_76 },
|
{ SPR_SHORE_BASE + SLOPE_SW, PAL_NONE, _station_display_datas_76 },
|
||||||
{ SPR_SHORE_TILEH_9, PAL_NONE, _station_display_datas_77 },
|
{ SPR_SHORE_BASE + SLOPE_NW, PAL_NONE, _station_display_datas_77 },
|
||||||
{ SPR_SHORE_TILEH_12, PAL_NONE, _station_display_datas_78 },
|
{ SPR_SHORE_BASE + SLOPE_NE, PAL_NONE, _station_display_datas_78 },
|
||||||
{ SPR_SHORE_TILEH_6, PAL_NONE, _station_display_datas_79 },
|
{ SPR_SHORE_BASE + SLOPE_SE, PAL_NONE, _station_display_datas_79 },
|
||||||
{ SPR_FLAT_WATER_TILE, PAL_NONE, _station_display_datas_80 },
|
{ SPR_FLAT_WATER_TILE, PAL_NONE, _station_display_datas_80 },
|
||||||
{ SPR_FLAT_WATER_TILE, PAL_NONE, _station_display_datas_81 },
|
{ SPR_FLAT_WATER_TILE, PAL_NONE, _station_display_datas_81 },
|
||||||
};
|
};
|
||||||
|
|
|
@ -33,25 +33,6 @@
|
||||||
#include "vehicle_func.h"
|
#include "vehicle_func.h"
|
||||||
#include "sound_func.h"
|
#include "sound_func.h"
|
||||||
|
|
||||||
/** Array for the shore sprites */
|
|
||||||
static const SpriteID _water_shore_sprites[] = {
|
|
||||||
0,
|
|
||||||
SPR_SHORE_TILEH_1, // SLOPE_W
|
|
||||||
SPR_SHORE_TILEH_2, // SLOPE_S
|
|
||||||
SPR_SHORE_TILEH_3, // SLOPE_SW
|
|
||||||
SPR_SHORE_TILEH_4, // SLOPE_E
|
|
||||||
0,
|
|
||||||
SPR_SHORE_TILEH_6, // SLOPE_SE
|
|
||||||
0,
|
|
||||||
SPR_SHORE_TILEH_8, // SLOPE_N
|
|
||||||
SPR_SHORE_TILEH_9, // SLOPE_NW
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
SPR_SHORE_TILEH_12, // SLOPE_NE
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static Vehicle *FindFloodableVehicleOnTile(TileIndex tile);
|
static Vehicle *FindFloodableVehicleOnTile(TileIndex tile);
|
||||||
static void FloodVehicle(Vehicle *v);
|
static void FloodVehicle(Vehicle *v);
|
||||||
|
@ -513,15 +494,18 @@ static void DrawTile_Water(TileInfo *ti)
|
||||||
DrawBridgeMiddle(ti);
|
DrawBridgeMiddle(ti);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WATER_TILE_COAST:
|
case WATER_TILE_COAST: {
|
||||||
|
/* Converts the enum Slope into an offset based on SPR_SHORE_BASE.
|
||||||
|
* This allows to calculate the proper sprite to display for this Slope */
|
||||||
|
static const byte tileh_to_shoresprite[32] = {
|
||||||
|
0, 1, 2, 3, 4, 16, 6, 7, 8, 9, 17, 11, 12, 13, 14, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 10, 15, 0,
|
||||||
|
};
|
||||||
|
|
||||||
assert(!IsSteepSlope(ti->tileh));
|
assert(!IsSteepSlope(ti->tileh));
|
||||||
if (_loaded_newgrf_features.has_newwater) {
|
DrawGroundSprite(SPR_SHORE_BASE + tileh_to_shoresprite[ti->tileh], PAL_NONE);
|
||||||
DrawGroundSprite(_coast_base + ti->tileh, PAL_NONE);
|
|
||||||
} else {
|
|
||||||
DrawGroundSprite(_water_shore_sprites[ti->tileh], PAL_NONE);
|
|
||||||
}
|
|
||||||
DrawBridgeMiddle(ti);
|
DrawBridgeMiddle(ti);
|
||||||
break;
|
} break;
|
||||||
|
|
||||||
case WATER_TILE_LOCK: {
|
case WATER_TILE_LOCK: {
|
||||||
const WaterDrawTileStruct *t = _shiplift_display_seq[GetSection(ti->tile)];
|
const WaterDrawTileStruct *t = _shiplift_display_seq[GetSection(ti->tile)];
|
||||||
|
|
Loading…
Reference in New Issue