diff --git a/src/openrct2/object/Object.h b/src/openrct2/object/Object.h index da2c60df47..df5e5e5fac 100644 --- a/src/openrct2/object/Object.h +++ b/src/openrct2/object/Object.h @@ -108,6 +108,12 @@ struct rct_object_entry return static_cast(flags & 0x0F); } + void SetType(ObjectType newType) + { + flags &= ~0x0F; + flags |= (static_cast(newType) & 0x0F); + } + std::optional GetSceneryType() const; ObjectSourceGame GetSourceGame() const diff --git a/src/openrct2/object/ObjectFactory.cpp b/src/openrct2/object/ObjectFactory.cpp index 8777e1b0fa..665421f8c8 100644 --- a/src/openrct2/object/ObjectFactory.cpp +++ b/src/openrct2/object/ObjectFactory.cpp @@ -450,6 +450,8 @@ namespace ObjectFactory originalName = originalId.substr(9, 8); entry.checksum = std::stoul(originalId.substr(18, 8), nullptr, 16); } + // Always set, since originalId might be missing or incorrect. + entry.SetType(objectType); auto minLength = std::min(8, originalName.length()); std::memcpy(entry.name, originalName.c_str(), minLength);