From 64782cf005b3338f4ca7c3d6445f239f71773705 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 17 Apr 2023 00:03:39 +0100 Subject: [PATCH] Fix #10627: Houses subsitute specs should only be copied on first definition. Before #10627, substitue specs were always copied despite redefinition. --- src/newgrf.cpp | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 4df75d940e..62f41db169 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -2387,25 +2387,26 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt /* Allocate space for this house. */ if (housespec == nullptr) { + /* Only the first property 08 setting copies properties; if you later change it, properties will stay. */ _cur.grffile->housespec[hid + i] = std::make_unique(*HouseSpec::Get(subs_id)); housespec = _cur.grffile->housespec[hid + i].get(); - } - housespec->enabled = true; - housespec->grf_prop.local_id = hid + i; - housespec->grf_prop.subst_id = subs_id; - housespec->grf_prop.grffile = _cur.grffile; - housespec->random_colour[0] = 0x04; // those 4 random colours are the base colour - housespec->random_colour[1] = 0x08; // for all new houses - housespec->random_colour[2] = 0x0C; // they stand for red, blue, orange and green - housespec->random_colour[3] = 0x06; + housespec->enabled = true; + housespec->grf_prop.local_id = hid + i; + housespec->grf_prop.subst_id = subs_id; + housespec->grf_prop.grffile = _cur.grffile; + housespec->random_colour[0] = 0x04; // those 4 random colours are the base colour + housespec->random_colour[1] = 0x08; // for all new houses + housespec->random_colour[2] = 0x0C; // they stand for red, blue, orange and green + housespec->random_colour[3] = 0x06; - /* Make sure that the third cargo type is valid in this - * climate. This can cause problems when copying the properties - * of a house that accepts food, where the new house is valid - * in the temperate climate. */ - if (!CargoSpec::Get(housespec->accepts_cargo[2])->IsValid()) { - housespec->cargo_acceptance[2] = 0; + /* Make sure that the third cargo type is valid in this + * climate. This can cause problems when copying the properties + * of a house that accepts food, where the new house is valid + * in the temperate climate. */ + if (!CargoSpec::Get(housespec->accepts_cargo[2])->IsValid()) { + housespec->cargo_acceptance[2] = 0; + } } break; }