diff --git a/src/newgrf.cpp b/src/newgrf.cpp --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -1650,15 +1650,15 @@ static ChangeInfoResult CanalChangeInfo( } 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 @@ static void CalculateRefitMasks() } } +/** 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 @@ static void AfterLoadGRFs() /* Polish engines */ FinaliseEngineArray(); + /* Set the actually used Canal properties */ + FinaliseCanals(); + /* Set the block size in the depot windows based on vehicle sprite sizes */ InitDepotWindowBlockSizes();