diff --git a/src/newgrf_object.cpp b/src/newgrf_object.cpp index f75f42c51c..df9f3e526d 100644 --- a/src/newgrf_object.cpp +++ b/src/newgrf_object.cpp @@ -340,7 +340,7 @@ static uint32_t GetCountAndDistanceOfClosestInstance(const ResolverObject &objec case 0x46: return DistanceSquare(this->tile, t->xy); /* Object colour */ - case 0x47: return this->obj->colour; + case 0x47: return this->obj->recolour_offset; /* Object view */ case 0x48: return this->obj->view; @@ -449,7 +449,7 @@ uint16_t GetObjectCallback(CallbackID callback, uint32_t param1, uint32_t param2 */ static void DrawTileLayout(const TileInfo *ti, const DrawTileSpriteSpan &dts, const ObjectSpec *spec) { - PaletteID palette = (spec->flags.Test(ObjectFlag::Uses2CC) ? SPR_2CCMAP_BASE : PALETTE_RECOLOUR_START) + Object::GetByTile(ti->tile)->colour; + PaletteID palette = (spec->flags.Test(ObjectFlag::Uses2CC) ? SPR_2CCMAP_BASE : PALETTE_RECOLOUR_START) + Object::GetByTile(ti->tile)->recolour_offset; SpriteID image = dts.ground.sprite; PaletteID pal = dts.ground.pal; diff --git a/src/object_base.h b/src/object_base.h index d2b5747df6..cfec87581a 100644 --- a/src/object_base.h +++ b/src/object_base.h @@ -25,7 +25,7 @@ struct Object : ObjectPool::PoolItem<&_object_pool> { Town *town = nullptr; ///< Town the object is built in TileArea location{INVALID_TILE, 0, 0}; ///< Location of the object TimerGameCalendar::Date build_date{}; ///< Date of construction - uint8_t colour = 0; ///< Colour of the object, for display purpose + uint8_t recolour_offset = 0; ///< Recolour offset of the object (basically the 2CC colour offset), for display purpose. uint8_t view = 0; ///< The view setting for this object Object(ObjectID index) : ObjectPool::PoolItem<&_object_pool>(index) {} diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp index 5e9e036038..619befdf8c 100644 --- a/src/object_cmd.cpp +++ b/src/object_cmd.cpp @@ -95,19 +95,19 @@ void BuildObject(ObjectType type, TileIndex tile, CompanyID owner, Town *town, u /* If nothing owns the object, the colour will be random. Otherwise * get the colour from the company's livery settings. */ if (owner == OWNER_NONE) { - o->colour = Random(); + o->recolour_offset = Random(); } else { - o->colour = Company::Get(owner)->GetCompanyRecolourOffset(LS_DEFAULT); + o->recolour_offset = Company::Get(owner)->GetCompanyRecolourOffset(LS_DEFAULT); } /* If the object wants only one colour, then give it that colour. */ - if (!spec->flags.Test(ObjectFlag::Uses2CC)) o->colour &= 0xF; + if (!spec->flags.Test(ObjectFlag::Uses2CC)) o->recolour_offset &= 0xF; if (spec->callback_mask.Test(ObjectCallbackMask::Colour)) { - uint16_t res = GetObjectCallback(CBID_OBJECT_COLOUR, o->colour, 0, spec, o, tile); + uint16_t res = GetObjectCallback(CBID_OBJECT_COLOUR, o->recolour_offset, 0, spec, o, tile); if (res != CALLBACK_FAILED) { if (res >= 0x100) ErrorUnknownCallbackResult(spec->grf_prop.grfid, CBID_OBJECT_COLOUR, res); - o->colour = GB(res, 0, 8); + o->recolour_offset = GB(res, 0, 8); } } @@ -192,7 +192,7 @@ void UpdateObjectColours(const Company *c) /* Using the object colour callback, so not using company colour. */ if (spec->callback_mask.Test(ObjectCallbackMask::Colour)) continue; - obj->colour = c->GetCompanyRecolourOffset(LS_DEFAULT, spec->flags.Test(ObjectFlag::Uses2CC)); + obj->recolour_offset = c->GetCompanyRecolourOffset(LS_DEFAULT, spec->flags.Test(ObjectFlag::Uses2CC)); } } diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index d155a58cae..68363441e1 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2596,7 +2596,7 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_148)) { for (Object *o : Object::Iterate()) { Owner owner = GetTileOwner(o->location.tile); - o->colour = (owner == OWNER_NONE) ? static_cast(GB(Random(), 0, 4)) : Company::Get(owner)->livery[0].colour1; + o->recolour_offset = (owner == OWNER_NONE) ? GB(Random(), 0, 4) : to_underlying(Company::Get(owner)->livery[0].colour1); } } diff --git a/src/saveload/object_sl.cpp b/src/saveload/object_sl.cpp index 750af1eda8..e5106cf589 100644 --- a/src/saveload/object_sl.cpp +++ b/src/saveload/object_sl.cpp @@ -24,7 +24,7 @@ static const SaveLoad _object_desc[] = { SLE_VAR(Object, location.h, SLE_FILE_U8 | SLE_VAR_U16), SLE_REF(Object, town, REF_TOWN), SLE_VAR(Object, build_date, SLE_UINT32), - SLE_CONDVAR(Object, colour, SLE_UINT8, SLV_148, SL_MAX_VERSION), + SLE_CONDVARNAME(Object, recolour_offset, "colour", SLE_UINT8, SLV_148, SL_MAX_VERSION), SLE_CONDVAR(Object, view, SLE_UINT8, SLV_155, SL_MAX_VERSION), SLE_CONDVAR(Object, type, SLE_UINT16, SLV_186, SL_MAX_VERSION), };