Mercurial > hg > openttd
changeset 18097:e4e1c72dc4c5 draft
(svn r22918) -Fix: [NewGRF] Properties for feature 0x05 were not zeroed for each NewGRF, thus waterfeatures could glitch when the properties were set by a previous NewGRF and the NewGRF assumed the properties to be unmodified
author | planetmaker <planetmaker@openttd.org> |
---|---|
date | Sun, 11 Sep 2011 09:31:57 +0000 |
parents | 059e50cd234e |
children | 2b072edcd664 |
files | src/newgrf.cpp src/newgrf.h src/newgrf_canal.h |
diffstat | 3 files changed, 40 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -1650,15 +1650,15 @@ } for (int i = 0; i < numinfo; i++) { - WaterFeature *wf = &_water_feature[id + i]; + CanalProperties *cp = &_cur.grffile->canal_local_properties[id + i]; switch (prop) { case 0x08: - wf->callback_mask = buf->ReadByte(); + cp->callback_mask = buf->ReadByte(); break; case 0x09: - wf->flags = buf->ReadByte(); + cp->flags = buf->ReadByte(); break; default: @@ -7656,6 +7656,17 @@ } } +/** Set to use the correct action0 properties for each canal feature */ +static void FinaliseCanals() +{ + for (uint i = 0; i < CF_END; i++) { + if (_water_feature[i].grffile != NULL) { + _water_feature[i].callback_mask = _water_feature[i].grffile->canal_local_properties[i].callback_mask; + _water_feature[i].flags = _water_feature[i].grffile->canal_local_properties[i].flags; + } + } +} + /** Check for invalid engines */ static void FinaliseEngineArray() { @@ -8348,6 +8359,9 @@ /* Polish engines */ FinaliseEngineArray(); + /* Set the actually used Canal properties */ + FinaliseCanals(); + /* Set the block size in the depot windows based on vehicle sprite sizes */ InitDepotWindowBlockSizes();
--- a/src/newgrf.h +++ b/src/newgrf.h @@ -16,6 +16,27 @@ #include "rail_type.h" #include "fileio_type.h" +/** + * List of different canal 'features'. + * Each feature gets an entry in the canal spritegroup table + */ +enum CanalFeature { + CF_WATERSLOPE, + CF_LOCKS, + CF_DIKES, + CF_ICON, + CF_DOCKS, + CF_RIVER_SLOPE, + CF_RIVER_EDGE, + CF_END, +}; + +/** Canal properties local to the NewGRF */ +struct CanalProperties { + uint8 callback_mask; ///< Bitmask of canal callbacks that have to be called. + uint8 flags; ///< Flags controlling display. +}; + enum GrfLoadingStage { GLS_FILESCAN, GLS_SAFETYSCAN, @@ -104,6 +125,8 @@ RailTypeLabel *railtype_list; RailType railtype_map[RAILTYPE_END]; + CanalProperties canal_local_properties[CF_END]; ///< Canal properties as set by this NewGRF + struct LanguageMap *language_map; ///< Mappings related to the languages. int traininfo_vehicle_pitch; ///< Vertical offset for draing train images in depot GUI and vehicle details
--- a/src/newgrf_canal.h +++ b/src/newgrf_canal.h @@ -16,21 +16,6 @@ #include "tile_type.h" #include "newgrf_generic.h" -/** - * List of different canal 'features'. - * Each feature gets an entry in the canal spritegroup table - */ -enum CanalFeature { - CF_WATERSLOPE, - CF_LOCKS, - CF_DIKES, - CF_ICON, - CF_DOCKS, - CF_RIVER_SLOPE, - CF_RIVER_EDGE, - CF_END, -}; - /** Flags controlling the display of canals. */ enum CanalFeatureFlag { CFF_HAS_FLAT_SPRITE = 0, ///< Additional flat ground sprite in the beginning.