mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-06 06:15:04 +00:00
(svn r11726) -Feature[newGRF]: Extend the Action 5, feature 0D usage. Patch by BigBB
This commit is contained in:
parent
31e2ed8b4c
commit
8ee1faca6c
Binary file not shown.
Binary file not shown.
@ -59,7 +59,6 @@
|
||||
|
||||
static int _skip_sprites; // XXX
|
||||
static uint _file_index; // XXX
|
||||
SpriteID _coast_base;
|
||||
|
||||
static GRFFile *_cur_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 0x0D: // Coast graphics
|
||||
if (num != 16) {
|
||||
grfmsg(1, "GraphicsNew: Coast graphics sprite count must be 16, skipping");
|
||||
return;
|
||||
switch (num) {
|
||||
case 10:
|
||||
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;
|
||||
|
||||
/* 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_newhouses = false;
|
||||
_loaded_newgrf_features.has_newindustries = false;
|
||||
_loaded_newgrf_features.has_newwater = false;
|
||||
_coast_base = 0;
|
||||
|
||||
InitializeSoundPool();
|
||||
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;
|
||||
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 (stage == GLS_RESERVE && config->status != GCS_INITIALISED) return;
|
||||
if (stage == GLS_ACTIVATION && !HasBit(config->flags, GCF_RESERVED)) return;
|
||||
_cur_grffile->is_ottdfile = ottd_grf;
|
||||
}
|
||||
|
||||
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 (stage == GLS_LABELSCAN) InitNewGRFFile(c, _cur_spriteid);
|
||||
LoadNewGRFFile(c, slot++, stage);
|
||||
LoadNewGRFFile(c, slot++, stage, true);
|
||||
if (stage == GLS_RESERVE) {
|
||||
SetBit(c->flags, GCF_RESERVED);
|
||||
} else if (stage == GLS_ACTIVATION) {
|
||||
|
@ -41,6 +41,7 @@ struct GRFLabel {
|
||||
|
||||
struct GRFFile {
|
||||
char *filename;
|
||||
bool is_ottdfile;
|
||||
uint32 grfid;
|
||||
uint16 sprite_offset;
|
||||
byte grf_version;
|
||||
@ -84,19 +85,16 @@ struct GRFFile {
|
||||
|
||||
extern GRFFile *_first_grffile;
|
||||
|
||||
extern SpriteID _coast_base;
|
||||
|
||||
struct GRFLoadedFeatures {
|
||||
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_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 */
|
||||
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 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} },
|
||||
{ "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 = {
|
||||
@ -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} },
|
||||
{ "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,
|
||||
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_NSRUNWAY1 = SPR_AIRPORTX_BASE + 1,
|
||||
SPR_NSRUNWAY2 = SPR_AIRPORTX_BASE + 2,
|
||||
@ -553,17 +557,6 @@ enum Sprites {
|
||||
SPR_FARMLAND_STATE_7 = 4259,
|
||||
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 */
|
||||
SPR_SHIP_DEPOT_SE_FRONT = 4070,
|
||||
SPR_SHIP_DEPOT_SW_FRONT = 4071,
|
||||
|
@ -1168,10 +1168,10 @@ static const DrawTileSprites _station_display_datas_oilrig[] = {
|
||||
};
|
||||
|
||||
static const DrawTileSprites _station_display_datas_dock[] = {
|
||||
{ SPR_SHORE_TILEH_3, PAL_NONE, _station_display_datas_76 },
|
||||
{ SPR_SHORE_TILEH_9, PAL_NONE, _station_display_datas_77 },
|
||||
{ SPR_SHORE_TILEH_12, PAL_NONE, _station_display_datas_78 },
|
||||
{ SPR_SHORE_TILEH_6, PAL_NONE, _station_display_datas_79 },
|
||||
{ SPR_SHORE_BASE + SLOPE_SW, PAL_NONE, _station_display_datas_76 },
|
||||
{ SPR_SHORE_BASE + SLOPE_NW, PAL_NONE, _station_display_datas_77 },
|
||||
{ SPR_SHORE_BASE + SLOPE_NE, PAL_NONE, _station_display_datas_78 },
|
||||
{ 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_81 },
|
||||
};
|
||||
|
@ -33,25 +33,6 @@
|
||||
#include "vehicle_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 void FloodVehicle(Vehicle *v);
|
||||
@ -513,15 +494,18 @@ static void DrawTile_Water(TileInfo *ti)
|
||||
DrawBridgeMiddle(ti);
|
||||
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));
|
||||
if (_loaded_newgrf_features.has_newwater) {
|
||||
DrawGroundSprite(_coast_base + ti->tileh, PAL_NONE);
|
||||
} else {
|
||||
DrawGroundSprite(_water_shore_sprites[ti->tileh], PAL_NONE);
|
||||
}
|
||||
DrawGroundSprite(SPR_SHORE_BASE + tileh_to_shoresprite[ti->tileh], PAL_NONE);
|
||||
DrawBridgeMiddle(ti);
|
||||
break;
|
||||
} break;
|
||||
|
||||
case WATER_TILE_LOCK: {
|
||||
const WaterDrawTileStruct *t = _shiplift_display_seq[GetSection(ti->tile)];
|
||||
|
Loading…
Reference in New Issue
Block a user