Skip to content

Add a new building type

Add a new placeable building by duplicating an existing in-game child of BP_CBT_BaseResidential or BP_CBT_BaseCommercial, then registering it in the building picker UI.

flowchart TB
  Base[BP_CBT_BaseBuilding]
  Res[BP_CBT_BaseResidential]
  Com[BP_CBT_BaseCommercial]
  House[BP_CBT_House]
  Apt[BP_CBT_Apartment]
  Shop[BP_CBT_Shop]
  Office[BP_CBT_OfficeBuilding]
  New[BP_CBT_YourBuilding]
  Base --> Res
  Base --> Com
  Res --> House
  Res --> Apt
  Com --> Shop
  Com --> Office
  Res --> New

Example — add a park (residential-flavoured)

Section titled “Example — add a park (residential-flavoured)”

Goal: a cheap decorative residential building that adds a small population bump without commercial income.

  1. In Content Browser, navigate to Blueprints/Buildings/InGameBuildings/Residential/.
  2. Duplicate BP_CBT_House → rename BP_CBT_Park.
  3. Open BP_CBT_Park and confirm parent class is BP_CBT_BaseResidential.
PropertyExample valueNotes
BuildingNameParkShown in UI
BuildingDescriptionShort flavour textAlso add to ST_CityBuilderTemplate for localization
BuildingIconYour texture asset256×256 recommended
BuildingMeshesSingle static meshOr array for variants
BuildingCost_CurrencyLower than HouseRead house default, then reduce
ConstructionTime515 secondsFast placement
UnlockLevel1Available immediately
bSpawnAmbientLightsfalseOptional for parks

Assign mesh SM_ asset under Meshes/Buildings/ (import or reuse).

BP_CBT_BaseResidential uses Inhabitant Add Delay and Inhabitant Max Limit (shipped House defaults: delay 2 s, max 4) with TimerHandle_AddInhabitant to call AddPopulation after construction.

  • Open the Event Graph on BP_CBT_Park only if you need custom population timing.
  • Otherwise set Inhabitant Add Delay / Inhabitant Max Limit on class defaults and inherit parent timer behaviour.

BP_CBT_PlayerController → Class Defaults lists spawnable buildings in two arrays (verified in v1.7):

ArrayShipped entries
Residential BuildingsBP_CBT_House, BP_CBT_Apartment
Commercial BuildingsBP_CBT_Shop, BP_CBT_OfficeBuilding
  1. Open BP_CBT_PlayerControllerClass Defaults.
  2. Add BP_CBT_Park to Residential Buildings (or the commercial array for a shop-style building).
  3. Open WBP_BuildingSelect and mirror the new entry in the UI list (typically ST_BuildingSelect rows tied to the same classes).

BP_CBT_SaveGame → AddBaseResidentialSaveValues must recognize the new class.

  • If you only changed defaults on a BP_CBT_BaseResidential child, existing save functions usually work.
  • If you added custom variables, extend ST_BaseResidentialSave and OnBuildingSave on your Blueprint.
flowchart LR
  Pick[WBP_BuildingSelect] --> Preview[GetPreviewBuilding]
  Preview --> Place[Internal_StartConstruction]
  Place --> Save[OnBuildingSave]
  Save --> Load[Internal_LoadGame]
  1. Play DemoMap.
  2. Select Park, place on a road-adjacent cell.
  3. Confirm construction, population, save, and reload.

Duplicate BP_CBT_Shop instead:

PropertyCafé tweak
Revenue Per WorkerBetween shop (268) and office (1240) values
Profit DelayBetween shop (60 s) and office (120 s)
Worker Max LimitMatch or exceed shop (10)
bAutoCollectIncomefalse for manual collect gameplay
Currency Collect XPSlightly higher than shop (3)
UnlockLevel2 (same as shipped shop)

Update ST_CityBuilderTemplate with ShopDescription-style entry for localized name.

ConcernResidentialCommercial
Parent classBP_CBT_BaseResidentialBP_CBT_BaseCommercial
Primary rewardAddPopulation (via Inhabitant Max Limit)CollectIncome (Revenue Per Worker × workers)
Save structST_BaseResidentialSaveST_BaseCommercialSave
UI tabResidential on WBP_BuildingFrameCommercial tab
WidgetOptional CurrencyWidgetButton