Universal HyperCasual Framework - Pizza Version Documentation

GETTING STARTED & SETUP: STEP-BY-STEP INSTRUCTIONS

1. INSTALL AND ENABLE THE PLUGIN

2. DEFINE YOUR IN-GAME ITEMS Create Data Assets to represent your tycoon items (e.g., wheat, pizza, logs). Right-click in the Content Browser -> Miscellaneous -> Data Asset, and select "HCFItemDefinition" (UHCFItemDefinition) as the parent class. Give it a descriptive name like "DA_Wheat". Inside, configure the static meshes, offsets for carry stacks, display names, and economic sell values.

3. PREPARE THE PLAYER CHARACTER Open your Player Character Blueprint. Add the "HCF Inventory Component" (UHCFInventoryComponent) to enable item and money tracking. To enable physical carrying visuals, add the "HCF Carry Hand IK" component (UHCFCarryIKComponent). Ensure your character's Animation Blueprint reads the hand target transforms and alpha values from the UHCFCarryIKComponent to adjust the hands dynamically using a Control Rig or a Two Bone IK node in the AnimGraph.

4. BUILD A HARVESTABLE FARM (OPTIONAL) Place "HCF Crop Grow Actor" (AHCFCropGrowActor) blueprints in your level to act as crops. Configure their "Crop Mesh", growth durations, and harvest item. To make it harvestable, place an "HCF Farm Cutter Zone" (AHCFFarmCutterZone) overlapping the crop actors. When the player enters this zone, their inventory's rotating cutter mesh is automatically enabled, allowing them to cut crops on overlap.

5. SET UP PRODUCTION STATIONS Place "HCF Production Station" (AHCFProductionStation) actors in your level. Assign the "Produced Item Definition" (e.g., DA_Pizza). When unlocked, the station produces items over time and displays them in a stack. Players or helpers standing in the collection box will automatically gather these items into their stacks.

6. SETUP SERVICE COUNTERS (CASHIER/SELL POINTS) Place "HCF Service Counter" (AHCFServiceCounter) actors. Assign the "Accepted Item Definition" it will consume. Customers wait here in line, buy items, and leave money. Overlapping player inventories automatically retrieve the accumulated money from the counter.

7. AUTOMATE WITH SPAWNERS AND CUSTOMERS Place an "HCF Customer Spawner" (AHCFCustomerSpawner). Link it to a "Target Service Counter". Set the "Customer Class" to a blueprint child of "HCFBaseCustomerCharacter" (AHCFBaseCustomerCharacter). The spawner will automatically spawn customers who navigate to the counter's queue, receive service, pay, and either despawn or look for dining tables.

8. CREATE A DINING ROOM Place "HCF Dining Table" (AHCFDiningTable) actors. Link them to the Customer Spawner or check "Search All Tables If Dining Table List Empty". Configure seats, seat offsets, and trash chance. When served customers are routed to eat, they sit at seats, consume food, and optionally leave trash. Place "HCF Dining Trash Bin Actor" (AHCFDiningTrashBinActor) where players/helpers can dump collected trash to clear their inventory.

9. MANAGE PROGRESSION WITH UNLOCK ZONES Place "HCF Unlock Zone" (AHCFUnlockZone) actors in your level. Assign the "Cost Amount" and target actors in the "Unlock Targets" (e.g., stations, counters) and "Destroy Targets On Unlock" (e.g., visual blockades). Unlock zones can consume money or specific items to complete.

10. SETUP UPGRADE ROOMS Place "HCF Upgrade Zone" (AHCFUpgradeZone) actors. Assign an upgrade widget class derived from "HCFUpgradeWidget" (UHCFUpgradeWidget) to open a UI when the player enters. Link helper spawn points or item assets to create upgrade paths for helper capacity, movement speed, player stats, or item sell values.

11. CONFIGURE TUTORIALS AND SAVE SYSTEMS Place "HCF Guide Path Actor" (AHCFGuidePathActor) to render dotted paths leading players to current objectives. For persistence, use the "HCF Save Blueprint Library" (UHCFSaveBlueprintLibrary) functions. Add the "HCF Save Id Component" (UHCFSaveIdComponent) to actors that need to persist state (such as unlock zones, counters, and stations) and assign unique Save IDs.

================================================================================ CLASSES & ACTORS: AVAILABLE BLUEPRINT NODES (FUNCTIONS & DELEGATES) ================================================================================

-------------------------------------------------------------------------------- 1. UHCFItemDefinition (Data Asset) -------------------------------------------------------------------------------- * FName GetResolvedItemId() const - Returns the stable item ID. If ItemId is set to None, returns the Asset name. * UStaticMesh* GetWorldMesh() const - Returns the Static Mesh used when this item is in the world. * UStaticMesh* GetPaymentMesh() const - Returns the Static Mesh used during unlock zone flying payments. Falls back to the world mesh if no override is set.

-------------------------------------------------------------------------------- 2. UHCFInventoryComponent (Actor Component) -------------------------------------------------------------------------------- * Delegates (BlueprintAssignable): - OnInventoryChanged(int32 Money, int32 CarriedItems, int32 MaxCarriedItems) - OnMoneyChanged(int32 Money, int32 DeltaMoney) - OnCarriedItemsChanged(UHCFItemDefinition* ItemDef, int32 Count, int32 Delta, int32 MaxCount) - OnMaxCarriedItemsChanged(int32 MaxCount, int32 DeltaMaxCount) - OnCarriedItemTypeChanged(UHCFItemDefinition* NewItem, UHCFItemDefinition* PrevItem) - OnItemAccepted(UHCFItemDefinition* ItemDef, int32 Accepted, int32 Count, int32 MaxCount) - OnItemPickedUp(UHCFItemDefinition* ItemDef, int32 PickedUp, int32 Count, int32 MaxCount) - OnItemRejected(UHCFItemDefinition* ItemDef, int32 Requested, int32 Rejected, int32 Space) - OnInventoryFullChanged(bool bIsFull, int32 Count, int32 MaxCount) - OnCutterEnabledChanged(bool bCutterEnabled) - OnCarryVisualsRefreshed(int32 VisibleCarriedItems)

* Nodes (BlueprintCallable / Pure): - int32 AddMoney(int32 Amount) - Adds money. Returns the new total. - bool SpendMoney(int32 Amount) - Deducts money. Returns true if successful. - bool HasMoney(int32 Amount) const - Returns true if money is greater than or equal to Amount. - int32 AddCarriedItems(int32 Amount) - Adds items of the current carried type. Returns the amount successfully added. - int32 AddCarriedItemsOfType(int32 Amount, UHCFItemDefinition* ItemDefinition) - Adds items of a specific type. If empty or matching, proceeds. Returns amount added. - void GiveItemToInventoryFromWorld(UHCFItemDefinition* ItemDef, int32 Amount, FVector StartLocation, FRotator StartRotation, bool bAnimateToInventory, float FlyDuration, float FlyArcHeight, float TimeBetweenItems, int32& AcceptedAmount, int32& RejectedAmount) - Launches item visuals flying from a world location into the inventory. - int32 GetAvailableCarrySpace() const - Returns remaining item capacity. - int32 GetAvailableCarrySpaceForItem(UHCFItemDefinition* ItemDefinition) const - Returns space left for this specific item type. - int32 RemoveCarriedItems(int32 Amount) - Removes items from the stack. Returns number removed. - int32 RemoveCarriedItemsOfType(int32 Amount, UHCFItemDefinition* RequiredItemDefinition) - Removes items of a specific type. Returns number removed. - bool HasCarriedItems(int32 Amount) const - Returns true if inventory carries at least Amount of items. - bool HasCarriedItemsOfType(int32 Amount, UHCFItemDefinition* RequiredItemDef) const - Returns true if carrying at least Amount of the specified item type. - void SetMaxCarriedItems(int32 NewMaxCarriedItems) - Sets a new capacity limit and broadcasts updates. - void ClearCarriedItems() - Empties all carried items and destroys visuals. - void SetMoney(int32 NewMoney) - Sets money to a specific value. - USceneComponent* GetCarryStackAnchor() const - Returns the scene component anchor where visual items are attached. - FVector GetCarryStackWorldLocationForIndex(int32 ItemIndex) - Returns the world location for a specific index in the visual stack. - UStaticMesh* GetCurrentCarriedPaymentMesh() const - Returns the payment mesh for the item currently being carried. - FVector GetCurrentCarriedPaymentScale() const - Returns the payment scale for the item currently being carried. - FRotator GetCurrentCarriedPaymentRotation() const - Returns the payment rotation for the item currently being carried. - UHCFItemDefinition* GetCurrentCarriedItemDefinition() const - Returns the item asset currently carried. - void SetCutterMeshEnabled(bool bNewEnabled) - Enables or disables the rotating tool mesh. - bool IsCutterMeshEnabled() const - Returns true if the cutter mesh is currently active. - UStaticMeshComponent* GetCutterMeshComponent() const - Returns the static mesh component for the cutter. - bool IsCutterComponent(const UPrimitiveComponent* Component) const - Returns true if the primitive component matches the cutter mesh component. - void PlayTakeItemSound() const - Plays the inventory's take item audio. - void PlayDropItemSound() const - Plays the inventory's drop item audio. - void PlayCutterEnabledSound() - Starts the cutter loop/play audio. - void StopCutterEnabledSound() - Stops the loop audio for the cutter.

-------------------------------------------------------------------------------- 3. UHCFCarryIKComponent (Actor Component) -------------------------------------------------------------------------------- * Delegates: - OnCarryIKStateChanged(bool bCarryPoseActive, float TargetIKAlpha)

* Nodes (BlueprintCallable / Pure): - void SetCarryIKEnabled(bool bNewEnabled) - Master toggle for carrying hand IK functionality. - void SetManualCarryPoseActive(bool bNewActive) - Toggles carry pose manually if auto-activation is disabled. - void SetInventoryComponent(UHCFInventoryComponent* NewInventoryComponent) - Manually binds a specific inventory component. - void RefreshCarryIKTargets() - Updates position/rotation arrows for the hand effectors immediately. - bool IsCarryPoseActive() const - Returns true if the carry pose is currently active and blending. - bool IsCarryingItems() const - Returns true if the linked inventory has items. - float GetCarryIKAlpha() const - Returns the current blended IK alpha value (0.0 to 1.0). - float GetTwoBoneIKAlpha() const - Returns target TwoBoneIK alpha (0.0 if mode is Pose Animation Only). - FName GetLeftHandBoneName() const - Returns the skeletal name for the left hand. - FName GetRightHandBoneName() const - Returns the skeletal name for the right hand. - UArrowComponent* GetLeftHandCarryTargetComponent() const - Returns the Left Hand Target Arrow component. - UArrowComponent* GetRightHandCarryTargetComponent() const - Returns the Right Hand Target Arrow component. - FTransform GetLeftHandCarryTargetWorldTransform() const - Returns Left Hand Target world transform. - FTransform GetRightHandCarryTargetWorldTransform() const - Returns Right Hand Target world transform. - FVector GetLeftHandCarryTargetWorldLocation() const - Returns Left Hand Target world position. - FVector GetRightHandCarryTargetWorldLocation() const - Returns Right Hand Target world position. - FVector GetLeftHandCarryTargetComponentSpaceLocation(USkeletalMeshComponent* SkelMeshComp) const - Returns Left Hand target converted to Component Space of the skeletal mesh. - FVector GetRightHandCarryTargetComponentSpaceLocation(USkeletalMeshComponent* SkelMeshComp) const - Returns Right Hand target converted to Component Space of the skeletal mesh. - EHCFCarryPoseMode GetCarryPoseMode() const - Returns carry mode (IK Only, Animation Only, or IK + Animation). - bool ShouldUseTwoBoneIK() const - Returns true if current settings/state require TwoBoneIK. - bool ShouldUseCarryPoseAnimation() const - Returns true if current settings/state require custom Pose Animation. - UAnimSequenceBase* GetCarryPoseAnimation() const - Returns the assigned custom pose animation asset. - float GetCarryPoseAlpha() const - Returns target animation blend strength. - FName GetLeftCarryPoseRootBoneName() const - Returns skeletal branch root for left arm blending. - FName GetRightCarryPoseRootBoneName() const - Returns skeletal branch root for right arm blending. - int32 GetCarryPoseBlendDepth() const - Returns Layered Blend Per Bone depth.

-------------------------------------------------------------------------------- 4. AHCFBaseCustomerCharacter (Character) -------------------------------------------------------------------------------- * Delegates: - OnReachedQueueSlot(AHCFBaseCustomerCharacter* Customer) - OnReachedPostServiceTarget(AHCFBaseCustomerCharacter* Customer)

* Nodes (BlueprintCallable / Pure): - void MoveToQueueSlot(AHCFServiceCounter* ServiceCounter, int32 QueueIndex, float QueueSpacing) - Commands the customer to walk into a specific slot in a cashier queue. - void SetQueueTarget(FVector NewTargetLocation, FRotator NewWaitingRotation) - Updates wait positions for custom queue calculations. - void StopQueueMovement() - Aborts pathing and locks position. - void MoveToExitAndDestroy(FVector ExitLocation, FRotator ExitRotation) - Routes the customer to the exit point and destroys them. - void MoveToPostServiceTarget(FVector TargetLocation, FRotator TargetRotation, bool bDestroyOnReached, bool bBroadcastOnReached) - Routes customer to custom targets (like dining tables) after service. - void ReceiveServiceItemVisual(UStaticMesh* Mesh, FVector Scale, FRotator Rot, FVector StartLoc, float FlyDuration, float FlyArcHeight, bool bStackOnCustomer) - Animates a sold item flying from the counter onto the customer's head/hand. - void DestroyAfterServiceItemsComplete() - Triggers self-destruction after all active item animations finish landing. - bool IsMovingToQueue() const - Returns true if pathing toward a cashier queue slot. - int32 GetQueueIndex() const - Returns the assigned index in the line. - int32 GetStackedServiceItemCount() const - Returns the number of items currently stacked on this customer. - int32 GetActiveServiceItemVisualCount() const - Returns number of flying items that have not yet landed on the customer. - UStaticMeshComponent* PopTopStackedServiceItemVisual() - Removes and returns the top visual item mesh component from the stack. - void SetCustomerOverheadMessage(FText Message, EHCFOverheadMessageMood Mood) - Manually overrides dialog text and mood. - void ClearCustomerOverheadMessage() - Hides overhead dialogue. - FText GetCurrentOverheadMessage() const - Returns the current dialog text. - EHCFOverheadMessageMood GetCurrentOverheadMessageMood() const - Returns current mood (Neutral, Good, Impatient, Angry). - void ShowNoDiningTableOverheadMessage() - Triggers spawner wait dialogue when no dining tables exist. - void ShowNoFreeTableOverheadMessage() - Triggers spawner wait dialogue when tables are full. - void ShowTableBlockedByTrashOverheadMessage() - Triggers spawner wait dialogue when tables are blocked by trash.

-------------------------------------------------------------------------------- 5. AHCFCustomerSpawner (Actor) -------------------------------------------------------------------------------- * Nodes (BlueprintCallable / Pure): - AHCFBaseCustomerCharacter* SpawnCustomer() - Spawns a customer at the spawn arrow and starts queue routing. - void RefreshCustomerQueue() - Orders all queued line customers to advance. - void ClearSpawnedCustomers() - Despawns and deletes all currently active customers managed by this spawner. - int32 GetQueuedCustomerCount() const - Returns count of customers waiting in the linked service counter line. - void SetSpawnerUnlocked(bool bNewUnlocked) - Unlocks spawning activity. - bool IsUnlocked() const - Returns true if active/unlocked.

-------------------------------------------------------------------------------- 6. AHCFUnlockZone (Actor) -------------------------------------------------------------------------------- * Delegates: - OnUnlockProgressChanged(int32 PaidAmount, float Progress01) - OnUnlocked()

* Nodes (BlueprintCallable / Pure): - float GetProgress01() const - Returns current paid ratio (0.0 to 1.0). - int32 GetPaidAmount() const - Returns amount of currency already spent here. - bool IsUnlocked() const - Returns true if cost has been fully paid. - bool IsZoneAvailable() const - Returns true if this zone can currently be seen and paid. - void SetUnlocked(bool bNewUnlocked) - Manually forces unlocked state (triggers target unlocks). - void SetZoneAvailable(bool bNewAvailable) - Manually toggles visibility and overlap checks. - void SetPaidAmountForSave(int32 NewPaidAmount) - Quietly restores payment progress from a save slot without flying visuals. - void SetUnlockedForSave(bool bNewUnlocked) - Quietly restores completed state from a save slot.

-------------------------------------------------------------------------------- 7. AHCFDiningTable (Actor) -------------------------------------------------------------------------------- * Nodes (BlueprintCallable / Pure): - void SetDiningTableUnlocked(bool bNewUnlocked) - Unlocks or locks the table for customer use. - bool IsUnlocked() const - Returns true if table is active. - int32 GetSeatCount() const - Returns total configured seats on this table. - int32 GetAvailableSeatCount() const - Returns number of seats not reserved and not blocked by trash. - bool TryReserveSeat(AHCFBaseCustomerCharacter* Cust, int32& OutIndex, FVector& OutLoc, FRotator& OutRot) - Checks availability and claims a seat. Returns seat transform info. - void ReleaseSeat(int32 SeatIndex) - Clears reservations on a seat index. - void ReleaseSeatForCustomer(AHCFBaseCustomerCharacter* Customer) - Finds and clears reservations for a specific customer. - void FinishMealAndReleaseSeat(int32 SeatIndex) - Finishes dining flow, spawns trash if configured, and releases reservation. - void ClearSeatTrash(int32 SeatIndex) - Destroys trash actor assigned to a seat. - bool HasClearableTrash() const - Returns true if any seat currently contains trash. - int32 GetActiveTrashCount() const - Returns total number of trash piles on the table. - bool HasReachedMaxActiveTrash() const - Returns true if table-wide trash capacity limit is reached. - bool TryGetFirstTrashWorkLocation(FVector& OutLoc) const - Returns world location of the first available trash pile for helpers. - bool ClearFirstTrash() - Instantly deletes the first trash actor. - bool CanCollectFirstTrashIntoInventory(UHCFInventoryComponent* Inventory) const - Returns true if the inventory has space to receive the trash item. - bool CollectFirstTrashIntoInventory(UHCFInventoryComponent* Inventory) - Gathers first trash item into inventory. - int32 GetCollectableTrashCountForInventory(UHCFInventoryComponent* Inv) const - Returns count of trash piles matching the inventory capacity. - int32 CollectTrashIntoInventory(UHCFInventoryComponent* Inv, int32 MaxItems) - Gathers multiple trash piles into inventory. Returns amount collected. - float GetEatDurationSeconds() const - Returns how long customers sit eating at this table. - void NotifyCustomerArrivedAtSeat(AHCFBaseCustomerCharacter* Cust, int32 Index) const - Plays seat arrival animations. - bool StartEatingNextItem(AHCFBaseCustomerCharacter* Customer, int32 SeatIndex) - Pops food from customer stack and launches it onto the table. - void FinishCurrentDiningItem(AHCFBaseCustomerCharacter* Customer, int32 SeatIndex) - Destroys the visual item model currently on the table for this seat. - FVector GetSeatWorldLocation(int32 SeatIndex) const - Returns seat location. - FRotator GetSeatWorldRotation(int32 SeatIndex) const - Returns seat rotation. - FVector GetSeatItemStackWorldLocation(int32 SeatIndex) const - Returns table food stack location for a seat. - FRotator GetSeatItemStackWorldRotation(int32 SeatIndex) const - Returns table food stack rotation for a seat.

-------------------------------------------------------------------------------- 8. AHCFDiningTrashActor (Actor) -------------------------------------------------------------------------------- * Nodes (BlueprintCallable / Pure): - void InitializeTrash(AHCFDiningTable* OwnerTable, int32 SeatIndex, UHCFItemDefinition* TrashItemDef, int32 Amount, FVector RelLoc, FRotator RelRot, FVector RelScale, FVector BoxExtent, bool bAnimate, float Duration, float Height, float Delay) - Initializes trash settings when spawned by a dining table. - void ClearTrash() - Destroys this actor and clears the table seat block. - FVector GetTrashClearWorldLocation() const - Returns world center position of the overlap cleanup box. - bool CanPickupIntoInventory(UHCFInventoryComponent* Inventory) const - Returns true if inventory has capacity for this trash type. - bool TryPickupIntoInventory(UHCFInventoryComponent* Inventory) - Cleans trash into overlapping inventory.

-------------------------------------------------------------------------------- 9. AHCFDiningTrashBinActor (Actor) -------------------------------------------------------------------------------- * Delegates: - OnStoredTrashChanged(int32 StoredTrash)

* Nodes (BlueprintCallable / Pure): - bool IsUnlocked() const - Returns true if bin is active. - void SetTrashBinUnlocked(bool bNewUnlocked) - Toggles unlocked state. - int32 GetStoredTrash() const - Returns total count of trash items dumped. - void SetStoredTrashForSave(int32 NewStoredTrash) - Quietly restores dumped trash count from a save slot. - bool CanAcceptInventory(UHCFInventoryComponent* Inventory) const - Returns true if overlapping inventory holds the accepted trash item. - int32 DepositFromInventory(UHCFInventoryComponent* Inventory) - Pulls trash items from the inventory and deletes them. Returns amount. - FVector GetDropBoxWorldLocation() const - Returns drop box world position. - UHCFItemDefinition* GetAcceptedTrashItemDefinition() const - Returns item asset configured for trash.

-------------------------------------------------------------------------------- 10. AHCFServiceCounter (Actor) -------------------------------------------------------------------------------- * Delegates: - OnStoredItemsChanged(int32 StoredItems) - OnStoredMoneyChanged(int32 StoredMoney)

* Nodes (BlueprintCallable / Pure): - int32 GetStoredItems() const - Returns current stock count. - int32 GetStoredMoney() const - Returns current accumulated money count. - bool IsUnlocked() const - Returns true if active. - void SetCounterUnlocked(bool bNewUnlocked) - Toggles cashier counter active state. - void SetStoredItemsForSave(int32 NewStoredItems) - Restores stored stock from save slot. - void SetStoredMoneyForSave(int32 NewStoredMoney) - Restores accumulated cash from save slot. - int32 DepositFromInventory(UHCFInventoryComponent* Inventory) - Deposits items from player inventory. Returns amount accepted. - int32 DepositFromHelperInventory(UHCFInventoryComponent* Inventory) - Deposits items from helper inventory. Returns amount accepted. - bool SellOneStoredItem(UHCFInventoryComponent* MoneyReceiver) - Sells one item and adds money to receiver. Returns true if stock was available. - bool ServeOneStoredItemToCustomer(AHCFBaseCustomerCharacter* Customer) - Launches one item from counter stack to customer. Returns true if successful. - bool HasServingWorkerOverlap() const - Returns true if a player/helper stands at the cashier spot. - FVector GetCustomerQueueLocation(int32 QueueIndex, float QueueSpacing) const - Returns wait position for a specific index in the customer line. - FRotator GetCustomerQueueRotation() const - Returns wait direction for customers. - void RefreshServiceCounterWidgetNow() - Forces UI component text and icon refreshes.

-------------------------------------------------------------------------------- 11. AHCFProductionStation (Actor) -------------------------------------------------------------------------------- * Delegates: - OnStoredItemsChanged(int32 StoredItems, EHCFMachineState MachineState) - OnItemsCollected(UHCFInventoryComponent* Inventory, int32 CollectedItems)

* Nodes (BlueprintCallable / Pure): - int32 GetStoredItems() const - Returns current stock on the machine. - bool IsUnlocked() const - Returns true if unlocked. - void SetStationUnlocked(bool bNewUnlocked) - Toggles station machine active state. - void SetStoredItemsForSave(int32 NewStoredItems) - Restores stock count from save slot. - int32 CollectIntoInventory(UHCFInventoryComponent* Inventory) - Harvests stock into overlapping inventory. Returns count.

-------------------------------------------------------------------------------- 12. AHCFCropGrowActor (Actor) -------------------------------------------------------------------------------- * Nodes (BlueprintCallable / Pure): - void StartGrowing() - Resets scale and starts growth interpolation. - void ForceGrowComplete() - Instantly snaps crop scale to max size. - bool IsFullyGrown() const - Returns true if crop has finished growing. - bool IsCut() const - Returns true if crop has been cut and is simulating physics. - void SetCropUnlocked(bool bNewUnlocked) - Toggles active state. - bool IsUnlocked() const - Returns true if crop is active. - bool CanHarvestForInventory(UHCFInventoryComponent* Inv, UHCFItemDef* ReqItem) const - Returns true if crop is grown, matches ReqItem, and Inv has space. - int32 CollectIntoInventory(UHCFInventoryComponent* Inventory) - Instantly gathers crop into inventory (used by helpers). Returns amount. - FVector GetHelperWorkLocation() const - Returns world location helpers route to before harvesting.

-------------------------------------------------------------------------------- 13. AHCFFarmCutterZone (Actor) -------------------------------------------------------------------------------- * Nodes (BlueprintCallable / Pure): - void SetFarmAreaUnlocked(bool bNewUnlocked) - Toggles active state. - bool IsUnlocked() const - Returns true if active.

-------------------------------------------------------------------------------- 14. AHCFHelperCharacter (Character) -------------------------------------------------------------------------------- * Nodes (BlueprintCallable / Pure): - void SetHelperUnlocked(bool bNewUnlocked) - Toggles helper AI active state. - bool IsUnlocked() const - Returns true if active. - EHCFHelperWorkState GetHelperWorkState() const - Returns current behavior state (Idle, MovingToStation, Waiting, delivering). - UHCFInventoryComponent* GetHelperInventory() const - Returns helper's local inventory component.

-------------------------------------------------------------------------------- 15. AHCFHelperSpawnPoint (Actor) -------------------------------------------------------------------------------- * Events (BlueprintImplementable): - BP_OnSpawnPointStateChanged(EHCFHelperSpawnPointState NewState) - BP_OnHelperSpawned(AHCFHelperCharacter* Helper) - BP_OnHelperDespawned(AHCFHelperCharacter* Helper)

* Nodes (BlueprintCallable / Pure): - void SetSpawnPointUnlocked(bool bNewUnlocked) - Unlocks spawn point. Can auto-spawn a worker. - bool IsSpawnPointUnlocked() const - Returns true if spawn point is unlocked. - bool CanSpawnHelper() const - Returns true if unlocked and limit is not exceeded. - bool CanSpawnMoreHelpers() const - Returns true if spawned counts are below limit. - AHCFHelperCharacter* SpawnHelper() - Creates and configures the helper character. Returns the actor ref. - void DespawnHelper() - Destroys the first spawned helper character. - bool IsHelperSpawned() const - Returns true if at least one worker is alive. - AHCFHelperCharacter* GetSpawnedHelper() const - Returns reference to the first spawned worker. - TArray<AHCFHelperCharacter*> GetSpawnedHelpers() const - Returns list of all active helpers created by this point. - int32 GetSpawnedHelperCount() const - Returns active worker count. - void DespawnAllHelpers() - Destroys every worker created by this point.

-------------------------------------------------------------------------------- 16. AHCFUpgradeZone (Actor) -------------------------------------------------------------------------------- * Events: - BP_OnUpgradeWidgetOpened(UHCFUpgradeWidget* Widget, AActor* PlayerActor) - BP_OnUpgradeWidgetClosed() - BP_OnUpgradeZoneAvailabilityChanged(bool bIsAvailable)

* Nodes (BlueprintCallable / Pure): - UHCFUpgradeWidget* OpenUpgradeWidget(AActor* PlayerActor) - Spawns the upgrade user interface. Returns the widget pointer. - void CloseUpgradeWidget() - Destroys UI and restores player input modes. - bool IsUpgradeWidgetOpen() const - Returns true if UI is visible. - UHCFUpgradeWidget* GetActiveUpgradeWidget() const - Returns active widget pointer. - void SetUpgradeZoneAvailable(bool bNewAvailable) - Toggles trigger overlap availability. - bool IsUpgradeZoneAvailable() const - Returns availability. - TArray<AHCFHelperSpawnPoint*> GetHelperSpawnPoints() const - Returns list of helper spawn points linked to this room. - TArray<AHCFHelperCharacter*> GetUpgradeHelpers() const - Returns list of helpers linked directly to this room. - TArray<UHCFItemDefinition*> GetUpgradeItemDefinitions() const - Returns list of items linked to this room.

-------------------------------------------------------------------------------- 17. UHCFUpgradeWidget (Widget UI) -------------------------------------------------------------------------------- * Events: - BP_OnUpgradeZoneOpened(AActor* PlayerActor, AHCFUpgradeZone* Zone) - BP_OnHelperPurchaseResult(AHCFHelperSpawnPoint* SpawnPoint, AHCFHelperCharacter* SpawnedHelper, EHCFUpgradePurchaseResult Result)

* Nodes (BlueprintCallable / Pure): - void InitializeUpgradeWidget(AActor* PlayerActor, AHCFUpgradeZone* Zone) - Binds widget context. - AHCFUpgradeZone* GetUpgradeZone() const - Returns linked zone actor. - TArray<AHCFHelperSpawnPoint*> GetUpgradeZoneHelperSpawnPoints() const - Returns spawn points. - AHCFHelperSpawnPoint* GetUpgradeZoneHelperSpawnPointByTag(FName SpawnPointTag) const - Finds spawn point by actor tag. - AHCFHelperSpawnPoint* GetFirstUpgradeZoneHelperSpawnPoint() const - Returns first spawn point. - AHCFHelperSpawnPoint* GetUpgradeZoneHelperSpawnPointAtIndex(int32 Index) const - Returns spawn point by index. - AHCFHelperSpawnPoint* GetUpgradeZoneHelperSpawnPointBySpawnedHelperTag(FName SpawnedHelperActorTag) const - Finds spawn point by target helper tag. - TArray<AHCFHelperCharacter*> GetUpgradeZoneHelpers() const - Returns directly linked helpers. - TArray<AHCFHelperCharacter*> GetUpgradeZoneSpawnedHelpers() const - Returns helpers created by linked spawn points. - TArray<AHCFHelperCharacter*> GetUpgradeZoneAllHelpers() const - Returns combined list of direct and spawned helpers. - AHCFHelperCharacter* GetUpgradeZoneHelperByTag(FName HelperTag) const - Finds direct helper by tag. - TArray<UHCFItemDefinition*> GetUpgradeZoneItemDefinitions() const - Returns linked items. - bool TryBuyHelperFromSpawnPoint(AHCFHelperSpawnPoint* SpawnPoint, int32 Cost, AHCFHelperCharacter*& SpawnedHelper) - Buys helper. Returns true on success. - bool TryBuyHelperFromSpawnPointWithResult(AHCFHelperSpawnPoint* SpawnPoint, int32 Cost, AHCFHelperCharacter*& SpawnedHelper, EHCFUpgradePurchaseResult& Result) - Buys helper and outputs detailed results. - bool TryUpgradeSpawnedHelperMaxCarriedItems(AHCFHelperSpawnPoint* SpawnPoint, int32 Cost, int32 DeltaMaxCarriedItems) - Upgrades capacity of worker spawned by spawn point. - bool TryUpgradeHelpersMaxCarriedItems(TArray<AHCFHelperCharacter*> Helpers, int32 Cost, int32 DeltaMaxCarriedItems, EHCFUpgradeCostMode CostMode, int32& UpgradedCount) - Upgrades capacity of multiple helpers. - bool TryUpgradeAllSpawnedHelpersMaxCarriedItems(AHCFHelperSpawnPoint* SpawnPoint, int32 Cost, int32 DeltaMaxCarriedItems, EHCFUpgradeCostMode CostMode, int32& UpgradedCount) - Upgrades capacity of all active workers created by a spawn point. - bool TryUpgradeUpgradeZoneHelpersMaxCarriedItems(int32 Cost, int32 DeltaMaxCarriedItems, EHCFUpgradeCostMode CostMode, int32& UpgradedCount) - Upgrades capacity of all helpers linked to this zone. - bool TryUpgradeHelpersByTagMaxCarriedItems(FName HelperTag, bool bOnlyUnlocked, int32 Cost, int32 DeltaMaxCarriedItems, EHCFUpgradeCostMode CostMode, int32& UpgradedCount) - Upgrades capacity of global workers matching a tag.

-------------------------------------------------------------------------------- 18. UHCFInGameMenuWidget (Widget UI) -------------------------------------------------------------------------------- * Events: - BP_OnPlayerInfoUpdated(AActor* PlayerActor, int32 Money, UTexture2D* MoneyIcon, int32 CarriedItems, int32 MaxCarriedItems, float Speed, float MaxSpeed)

* Nodes (BlueprintCallable / Pure): - void SetObservedPlayer(AActor* NewObservedPlayer) - Binds player character to UI updates. - void RefreshPlayerInfo() - Manually triggers info broadcast. - AActor* GetObservedPlayer() const - Returns observed character actor. - UHCFInventoryComponent* GetObservedPlayerInventory() const - Returns player's inventory component. - int32 GetObservedPlayerMoney() const - Returns player's current money. - UTexture2D* GetObservedPlayerMoneyIconTexture() const - Returns current money icon texture asset. - bool HasObservedPlayerMoney(int32 Amount) const - Returns true if player can afford Amount. - bool SpendObservedPlayerMoney(int32 Amount) - Deducts player money. Returns true if successful. - int32 AddObservedPlayerMoney(int32 Amount) - Adds money to player. Returns new total. - bool SetObservedPlayerMaxWalkSpeed(float NewMaxWalkSpeed) - Sets character max walk speed. - bool AddObservedPlayerMaxWalkSpeed(float DeltaMaxWalkSpeed) - Increments character max walk speed. - float GetObservedPlayerMaxWalkSpeed() const - Returns player walk speed. - bool SetObservedPlayerMaxCarriedItems(int32 NewMaxCarriedItems) - Sets player inventory capacity. - bool AddObservedPlayerMaxCarriedItems(int32 DeltaMaxCarriedItems) - Increments player inventory capacity. - int32 GetObservedPlayerMaxCarriedItems() const - Returns player capacity. - bool TryUpgradeObservedPlayerMaxWalkSpeed(int32 Cost, float DeltaMaxWalkSpeed) - Spends money and increases player speed. - bool TryUpgradeObservedPlayerMaxCarriedItems(int32 Cost, int32 DeltaMaxCarriedItems) - Spends money and increases player capacity. - bool SetHelperMaxCarriedItems(AHCFHelperCharacter* Helper, int32 NewMaxCarriedItems) - Sets worker capacity. - bool AddHelperMaxCarriedItems(AHCFHelperCharacter* Helper, int32 DeltaMaxCarriedItems) - Increments worker capacity. - int32 GetHelperMaxCarriedItems(AHCFHelperCharacter* Helper) const - Returns worker capacity. - TArray<AHCFHelperCharacter*> GetAllHelpers(bool bOnlyUnlocked = false) const - Returns all helpers in the level. - AHCFHelperCharacter* GetFirstHelper(bool bOnlyUnlocked = false) const - Returns first helper in the level. - AHCFHelperCharacter* GetHelperByActorTag(FName HelperTag, bool bOnlyUnlocked = false) const - Finds helper by tag. - bool TryUpgradeHelperMaxCarriedItems(AHCFHelperCharacter* Helper, int32 Cost, int32 DeltaMaxCarriedItems) - Spends money and upgrades helper capacity. - bool SetItemDefinitionSellValue(UHCFItemDefinition* ItemDef, int32 NewSellValue) - Updates item sell value. - bool AddItemDefinitionSellValue(UHCFItemDefinition* ItemDef, int32 DeltaSellValue) - Increments item sell value. - int32 GetItemDefinitionSellValue(UHCFItemDefinition* ItemDef) const - Returns item sell value. - bool TryUpgradeItemDefinitionSellValue(UHCFItemDefinition* ItemDef, int32 Cost, int32 DeltaSellValue) - Spends money and increases item sell value.

-------------------------------------------------------------------------------- 19. AHCFGuidePathActor (Actor) -------------------------------------------------------------------------------- * Nodes (BlueprintCallable / Pure): - void ActivateGuide() - Shows guide path. - void DeactivateGuide() - Hides guide path. - void SetGuideEnabled(bool bNewEnabled) - Enables or disables the guide path logic. - bool IsGuideActive() const - Returns true if path is visible. - bool IsGuideEnabled() const - Returns true if logic is enabled. - FVector GetGuideTargetLocation() const - Returns target destination. - int32 GetCollectedItemsFromTarget() const - Returns progress count for harvest tasks. - int32 GetActiveGuideStepIndex() const - Returns current index of active tutorial step. - bool IsUsingGuideSteps() const - Returns true if multiple steps are configured. - void ResetGuideSequence() - Restarts step sequence from index 0. - void SetGuideSaveState(bool bNewGuideEnabled, bool bNewGuideActive, int32 NewActiveGuideStepIndex, int32 NewCollectedItemsFromTarget) - Restores path state from save game slot.

-------------------------------------------------------------------------------- 20. UHCFSaveBlueprintLibrary (Kismet Library) -------------------------------------------------------------------------------- * Nodes (BlueprintCallable / Pure): - static bool SaveHCFGame(UObject* WorldContext, const FString& SlotName, int32 UserIndex, bool bIncludeTransforms) - Captures, compiles, and writes the save game file. - static bool LoadHCFGame(UObject* WorldContext, const FString& SlotName, int32 UserIndex, bool bRestoreTransforms) - Reads, applies, and updates actors from the save game file. - static UHCFSaveGame* CaptureHCFSaveGame(UObject* WorldContext, bool bIncludeTransforms) - Captures game variables and returns a SaveGame object. - static bool ApplyHCFSaveGame(UObject* WorldContext, UHCFSaveGame* SaveGame, bool bRestoreTransforms) - Restores variables in matching actors from a SaveGame object. - static bool WriteHCFSaveGame(UHCFSaveGame* SaveGame, const FString& SlotName, int32 UserIndex) - Writes SaveGame object to disk. - static UHCFSaveGame* ReadHCFSaveGame(const FString& SlotName, int32 UserIndex) - Reads SaveGame object from disk. - static bool DoesHCFSaveExist(const FString& SlotName, int32 UserIndex) - Returns true if save slot exists on disk. - static bool DeleteHCFSave(const FString& SlotName, int32 UserIndex) - Deletes save slot from disk.

================================================================================ ACTOR / COMPONENT SETTINGS & PROPERTIES (DETAILS) ================================================================================

-------------------------------------------------------------------------------- 1. UHCFItemDefinition (Data Asset Properties) -------------------------------------------------------------------------------- * ItemId (FName) - Stable item identity. If set to None, asset name is used. * DisplayName (FText) - Friendly name shown in editor widgets or game UI. * ItemMesh (UStaticMesh*) - Mesh component used when the item exists in the world. * ItemScale (FVector, Default: 1.0) - Scaling applied to the world item mesh. * ItemRotation (FRotator) - Rotation applied to the world item mesh. * CarryStackOffset (FVector, Default: Z=10.0) - Height offset added for each stacked item in a character's inventory. * CarryItemScale (FVector, Default: 1.0) - Scale of the mesh when carried on characters. * CarryItemRotation (FRotator) - Rotation of the mesh when carried on characters. * MaxVisibleCarriedItemsOverride (int32) - Stack size override for character stacks. 0 means use inventory settings. * PaymentMeshOverride (UStaticMesh*) - Mesh used when flying into unlock zones. If empty, world mesh is used. * PaymentScale / PaymentRotation (FVector / FRotator) - Scale and rotation adjustments when item is used as flying payments. * IconTexture (UTexture2D*) - UI texture icon used in inventory, progress widgets, and store overlays. * Description (FText) - Organization details. * SellValue (int32, Default: 1) - Money generated when sold at service counters.

-------------------------------------------------------------------------------- 2. UHCFInventoryComponent (Properties) -------------------------------------------------------------------------------- * Money (int32, Default: 0) - Starting money value. * CarriedItems (int32, Default: 0) - Starting item stack size. * MaxCarriedItems (int32, Default: 10) - Maximum capacity of items. * bCanPickupServiceCounterMoney (bool, Default: true) - If true, standing at cashiers collects cash. Disable for helpers. * bCreateCarryStackAnchor (bool, Default: true) - If true, creates an Arrow component at registration to attach stack meshes. * CarryStackRelativeLocation (FVector, Default: Y=-45.0, Z=75.0) - Positioning of the item stack anchor. * CarryStackRelativeRotation (FRotator) - Rotation of the item stack anchor. * CarryItemStackOffset (FVector, Default: Z=10.0) - Default height spacing between items in the stack. * CarryItemScale (FVector, Default: 1.0) - Default item scale in stack. * CarryItemRotation (FRotator) - Default item rotation in stack. * MaxVisibleCarriedItems (int32, Default: 30) - Cap on physical mesh components spawned to represent the stack. * MoneyPaymentMesh (UStaticMesh*) - Mesh used for flying money bills. * MoneyPaymentScale / MoneyPaymentRotation (FVector / FRotator) - Transform adjustments for flying money. * MoneyIconTexture (UTexture2D*) - Icon used by progress bars during money unlocks. * bEnableCutterMesh (bool, Default: false) - Toggles visibility and collision of the tool cutter. * CutterMesh (UStaticMesh*) - Static mesh used for the tool cutter. * CutterRelativeLocation (FVector, Default: Z=45.0) - Location offset of the cutter on the character. * CutterRelativeRotation (FRotator) - Rotation offset of the cutter on the character. * CutterRelativeScale (FVector, Default: 1.0) - Scale offset of the cutter on the character. * CutterRotationSpeedDegreesPerSecond (float, Default: 720.0f) - Yaw rotation speed of the active cutter. * CutterCollisionEnabled (ECollisionEnabled, Default: QueryOnly) - Collision type for cutter overlaps. * CutterCollisionProfileName (FName, Default: OverlapAllDynamic) - Collision Profile name for cutter overlaps. * TakeItemSound / TakeItemSoundVolume (USoundBase* / float) - Audio asset played when receiving items from production. * DropItemSound / DropItemSoundVolume (USoundBase* / float) - Audio asset played when paying items to zones. * CutterEnabledSound / CutterEnabledSoundVolume (USoundBase* / float) - Audio asset played/looped when cutter turns on. * bLoopCutterEnabledSoundWhileCutterIsEnabled (bool, Default: false) - If true, loop sound plays attached and stops when disabled.

-------------------------------------------------------------------------------- 3. UHCFCarryIKComponent (Properties) -------------------------------------------------------------------------------- * bCarryIKEnabled (bool, Default: true) - Enable/disable IK calculations. * bAutoBindInventory (bool, Default: true) - Auto-scans owner actor to find a UHCFInventoryComponent. * InventoryComponent (UHCFInventoryComponent*) - Manually linked inventory component. * bAutoActivateWhenCarrying (bool, Default: true) - If true, IK activates automatically when carrying > 0 items. * bManualCarryPoseActive (bool, Default: false) - Manual toggle when auto-activation is off. * BlendSpeed (float, Default: 10.0f) - Speed at which IK alpha blends on/off. * bFollowTopCarriedItem (bool, Default: true) - If true, hands follow the height of the top item mesh in the stack. * CarryReferenceComponent (USceneComponent*) - Reference component for hand targets. Falls back to stack anchor. * LeftHandBoneName / RightHandBoneName (FName, Default: hand_l / hand_r) - Skeleton hand bones driven by the IK. * LeftHandTargetOffset / RightHandTargetOffset (FVector) - Relative target offset of hands from the stack center. * LeftHandTargetRotationOffset / RightHandTargetRotationOffset (FRotator) - Rotation offsets for hand positioning. * CarryPoseMode (EHCFCarryPoseMode, Default: TwoBoneIKOnly) - Sets output strategy: IK targets, Animation Blend, or both. * CarryPoseAnimation (UAnimSequenceBase*) - Pose animation used for wrist/palm/finger shapes. * CarryPoseAlphaMultiplier (float, Default: 1.0f) - Scaler for pose animation blend alpha. * LeftCarryPoseRootBoneName / RightCarryPoseRootBoneName (FName, Default: clavicle_l / clavicle_r) - Arm root bones used in Layered Blend Per Bone setups. * CarryPoseBlendDepth (int32, Default: 4) - Skeleton blend depth.

-------------------------------------------------------------------------------- 4. AHCFBaseCustomerCharacter (Properties) -------------------------------------------------------------------------------- * QueueMoveSpeed (float, Default: 260.0f) - Customer movement speed while walking inside queue slots. * QueueAcceptanceRadius (float, Default: 12.0f) - Margin of arrival error at slot locations. * bRotateTowardMovement (bool, Default: true) - Toggles character yaw rotation toward movement velocity. * bUseQueueRotationWhenWaiting (bool, Default: true) - Snaps customer rotation to face the cashier when waiting. * bUseNavigationWhenAvailable (bool, Default: true) - Pathfinds using NavMesh when a path is found. Falls back to straight lines. * bIgnorePawnCollision (bool, Default: true) - Bypasses Pawn collision channel to prevent blockages in queues. * CustomerItemStackRelativeLocation (FVector, Default: Y=-35.0, Z=80.0) - Location of customer item carry anchor. * CustomerItemStackRelativeRotation (FRotator) - Rotation of customer item carry anchor. * CustomerItemStackOffset (FVector, Default: Z=10.0) - Visual height spacing for items stacked on the customer. * bShowCustomerOverheadWidget (bool, Default: false) - Toggles widget rendering above head. * CustomerOverheadWidgetClass (TSubclassOf<UHCFBaseCustomerOverheadWidget>) - Widget blueprint class to spawn. * CustomerOverheadWidgetSpace (EWidgetSpace, Default: Screen) - Sets 2D HUD or 3D world space rendering. * CustomerOverheadWidgetDrawSize (FVector2D, Default: X=280.0, Y=110.0) - Resolution of overhead widget canvas. * CustomerOverheadWidgetRelativeLocation (FVector, Default: Z=150.0) - Offset above customer head. * CustomerOverheadWidgetRelativeScale (FVector, Default: 0.35) - Widget scale. * bEnableAutomaticOverheadMessages (bool, Default: true) - Toggles automatic dialogue balloon rotations based on status. * NeutralOverheadMessages (TArray<FText>) - Dialogue pools used when customer is waiting normally. * GoodOverheadMessages (TArray<FText>) - Dialogue pools used after customer receives service. * ImpatientOverheadMessages (TArray<FText>) - Dialogue pools used when customer waits past Impatient timer. * AngryOverheadMessages (TArray<FText>) - Dialogue pools used when customer waits past Angry timer. * NoDiningTableOverheadMessages (TArray<FText>) - Dialogue pools used when spawner has no dining tables configured. * NoFreeTableOverheadMessages (TArray<FText>) - Dialogue pools used when dining tables are full. * TableBlockedByTrashOverheadMessages (TArray<FText>) - Dialogue pools used when seats are blocked by trash. * ImpatientAfterSeconds (float, Default: 6.0f) - Seconds at counter before switching to Impatient state. * AngryAfterSeconds (float, Default: 12.0f) - Seconds at counter before switching to Angry state. * OverheadMessageChangeInterval (float, Default: 3.0f) - Interval for cycling messages within same mood. * bUseOverheadMessageTalkChance (bool, Default: true) - Toggles random checks for dialogue messages. * FrontQueueTalkChancePercent (float, Default: 85.0f) - Talk probability for customer at front of queue. * MiddleQueueTalkChancePercent (float, Default: 35.0f) - Talk probability for middle-line customers. * BackQueueTalkChancePercent (float, Default: 12.0f) - Talk probability for back-line customers. * BackQueueStartIndex (int32, Default: 3) - Queue index where Back Queue Talk Chance begins. * MovingTalkChancePercent (float, Default: 8.0f) - Talk probability while customer is walking. * ServedTalkChancePercent (float, Default: 90.0f) - Talk probability after receiving cashier items.

-------------------------------------------------------------------------------- 5. AHCFCustomerSpawner (Properties) -------------------------------------------------------------------------------- * CustomerClass (TSubclassOf<AHCFBaseCustomerCharacter>) - Class of customer spawned. * TargetServiceCounter (AHCFServiceCounter*) - Counter where spawned customers are routed. * bUnlockedByDefault (bool, Default: true) - Toggles starting active state. * MaxQueuedCustomers (int32, Default: 6) - Max capacity of the cashier queue line before spawning stops. * InitialCustomers (int32, Default: 0) - Starting customer count spawned on BeginPlay. * bAutoSpawn (bool, Default: true) - Periodically spawns new customers when queue slots open. * SpawnIntervalSeconds (float, Default: 2.0f) - Time between automatic spawns. * QueueSpacing (float, Default: 95.0f) - Distance between waiting slots in queue line. * CustomerMoveSpeed (float, Default: 260.0f) - Speed applied to customers. * AfterGettingItemAction (EHCFPostServiceCustomerAction, Default: ReturnToSpawn) - Decides routing after service (Despawn, Return to Spawn, Exit Point, Dining Table). * DiningTables (TArray<AHCFDiningTable*>) - Dining tables linked for dining routing. * bSearchAllTablesIfDiningTableListEmpty (bool, Default: true) - If true, scans level for any unlocked table when DiningTables list is empty. * DiningTableSearchRadius (float, Default: 0.0) - Search distance constraint (0 means unlimited). * DiningTableRetrySeconds (float, Default: 0.35s) - Retry frequency when tables are full or blocked.

-------------------------------------------------------------------------------- 6. AHCFUnlockZone (Properties) -------------------------------------------------------------------------------- * UnlockWidgetClass (TSubclassOf<UHCFUnlockZoneWidget>) - Widget blueprint class used. * UnlockWidgetSpace (EWidgetSpace, Default: Screen) - Widget 2D/3D space layout. * UnlockWidgetDrawSize (FVector2D, Default: X=260, Y=120) - Resolution of widget texture. * UnlockWidgetRelativeLocation (FVector, Default: Z=1.0) - Offset position of widget. * UnlockWidgetRelativeRotation (FRotator, Default: Pitch=90.0) - Spawns rotated flat on the ground. * UnlockWidgetRelativeScale (FVector, Default: 1.0) - Widget scale. * bShowUnlockWidgetOnlyWhenOverlapping (bool, Default: false) - Widget only renders when player stands inside box trigger. * bEnableTargetPreviewMesh (bool, Default: false) - Shows rotating ghost mesh representing target. * bShowTargetPreviewOnlyWhenOverlapping (bool, Default: false) - Ghost mesh only renders when player stands inside box trigger. * TargetPreviewStaticMesh (UStaticMesh*) - Static mesh used for target preview. * TargetPreviewRelativeLocation / TargetPreviewRelativeRotation / TargetPreviewRelativeScale - Transform adjustments for target preview mesh. * bAutoRotateTargetPreview (bool, Default: true) - Enables rotation of preview mesh. * TargetPreviewRotationSpeed (FRotator, Default: Yaw=90.0) - Spin speed of preview mesh. * bPulseTargetPreviewOnPayment (bool, Default: true) - Adds temporary scale expansion when money lands. * TargetPreviewPaymentPulseSeconds (float, Default: 0.14s) - Duration of payment pulse. * TargetPreviewPaymentPulseScale (float, Default: 1.12) - Maximum scale multiplier of payment pulse. * bAnimatePayments (bool, Default: true) - Toggles flying items from player inventory to the payment target. * TargetMoneyPaymentVisuals (int32, Default: 40) - Approximate total money bills launched during high-cost unlocks. * SingleMoneyVisualCostThreshold (int32, Default: 10) - Unlocks costing below this launch exactly 1 bill per unit. * MoneyMiddleProgressBoost (float, Default: 1.35) - Multiplies bill values during middle payment phase. * PaymentFlyDurationSeconds (float, Default: 0.28s) - Flight time for payment bills/items. * PaymentFlyArcHeight (float, Default: 70.0f) - Spacing height offset of the flight curve. * PaymentTargetRelativeLocation (FVector, Default: Z=35.0) - Target destination relative location. * DisplayName (FText) - Screen name. * CostAmount (int32, Default: 10) - Total cost required to complete. * Currency (EHCFPaymentCurrency, Default: Money) - Payment method (Money or Item). * RequiredItemDefinition (UHCFItemDefinition*) - Required item asset when Currency is set to Item. * UnitsPerPaymentPulse (int32, Default: 1) - Amount consumed per tick. * PaymentPulseSeconds (float, Default: 0.08s) - Delay between ticks. * bUnlockedByDefault (bool, Default: false) - Available to player on level startup. * bDestroyZoneOnUnlock (bool, Default: false) - Destroys or disables the zone actor after completion. * UnlockTargets (TArray<AActor*>) - Actors activated when unlock completes. * DestroyTargetsOnUnlock (TArray<AActor*>) - Actors destroyed when unlock completes (e.g. blockers). * TargetActionStepDelaySeconds (float, Default: 0.3s) - Staggered timing interval between unlocking targets.

-------------------------------------------------------------------------------- 7. AHCFDiningTable (Properties) -------------------------------------------------------------------------------- * bUnlockedByDefault (bool, Default: true) - Available on level startup. * EatDurationSeconds (float, Default: 4.0f) - Duration customer spends dining. * EatDurationRandomnessSeconds (float, Default: 0.0f) - Random variance added to dining time. * SeatArrivalAnimation (UAnimSequenceBase*) - Optional animation montage played on customer arrival. * MaxActiveTrashItems (int32, Default: 0) - Limit of trash on table. 0 means unlimited. * ItemToTableFlyDurationSeconds (float, Default: 0.22s) - Fly duration from customer stack to table. * ItemToTableFlyArcHeight (float, Default: 35.0f) - Flight curve height. * bAnimateTrashPickupToInventory (bool, Default: true) - Flying pickup animation for trash. * TrashPickupFlyDurationSeconds (float, Default: 0.28s) - Flight time for trash pickup. * TrashPickupFlyArcHeight (float, Default: 65.0f) - Height of trash flight. * TimeBetweenTrashPickupItems (float, Default: 0.04s) - Time spacing between trash pickups. * TableStaticMesh (UStaticMesh*) - Static mesh used for table. * TableMeshRelativeLocation / TableMeshRelativeRotation / TableMeshRelativeScale - Transform adjustments for table mesh. * Seats (TArray<FHCFDiningTableSeat>) - Struct list defining seat location, rotation, item stack locations, and trash settings. - SeatRelativeLocation (FVector) - SeatRelativeRotation (FRotator) - ItemStackRelativeLocation (FVector, Default: Z=90.0) - ItemStackRelativeRotation (FRotator) - bLeaveTrashAfterMeal (bool) - TrashChancePercent (float, Default: 100.0) - TrashItemDefinition (UHCFItemDefinition*) - TrashItemAmount (int32, Default: 1) - TrashRelativeLocation (FVector, Default: Z=95.0) - TrashRelativeRotation (FRotator) - TrashRelativeScale (FVector, Default: 1.0) - TrashClearBoxExtent (FVector, Default: 55, 55, 60) * TableMeshCollisionEnabled / TableMeshCollisionProfileName (Collision settings) - Collision modes applied to table.

-------------------------------------------------------------------------------- 8. AHCFDiningTrashActor (Properties) -------------------------------------------------------------------------------- * TrashItemDefinition (UHCFItemDefinition*) - Configures item representation. * TrashItemAmount (int32, Default: 1) - Item count generated. * bAnimateTrashPickupToInventory (bool, Default: true) - Toggle flying pickup. * TrashPickupFlyDurationSeconds / TrashPickupFlyArcHeight / TimeBetweenTrashPickupItems - Flight curves. * PickupRetrySeconds (float, Default: 0.12s) - Refresh delay when player remains in trigger with full inventory. * TrashRelativeLocation / TrashRelativeRotation / TrashRelativeScale - Local transform adjustments. * ClearBoxExtent (FVector, Default: 55, 55, 60) - Box dimensions.

-------------------------------------------------------------------------------- 9. AHCFDiningTrashBinActor (Properties) -------------------------------------------------------------------------------- * bUnlockedByDefault (bool, Default: true) - Active on start. * AcceptedTrashItemDefinition (UHCFItemDefinition*) - Trash item asset to accept. * bKeepDisposedTrashVisible (bool, Default: false) - Renders visual stacks of dumped trash in the bin. * bAnimateTrashDropOff (bool, Default: true) - Toggle flying drop-off animation. * DepositPulseSeconds (float, Default: 0.04s) - Time spacing between launched trash items. * DepositFlyDurationSeconds (float, Default: 0.22s) - Flight duration. * DepositFlyArcHeight (float, Default: 50.0f) - Spacing height offset of flight curve. * BinStaticMesh (UStaticMesh*) - Static mesh used for trash bin. * BinMeshRelativeLocation / BinMeshRelativeRotation / BinMeshRelativeScale - Transform adjustments for bin. * DropBoxRelativeLocation / DropBoxExtent (FVector) - Overlap trigger setup. * BinMeshCollisionEnabled / BinMeshCollisionProfileName (Collision settings) - Collision modes applied to bin.

-------------------------------------------------------------------------------- 10. AHCFServiceCounter (Properties) -------------------------------------------------------------------------------- * bUnlockedByDefault (bool, Default: true) - Active on start. * bAllowPlayerDropOff (bool, Default: true) - Allows players to deposit items. * MaxStoredItems (int32, Default: 1000) - Stock storage capacity. * MoneyRewardPerItem (int32, Default: 5) - Money generated per item when bUseAcceptedItemSellValue is false. * AcceptedItemDefinition (UHCFItemDefinition*) - Accepted item type. * bUseAcceptedItemSellValue (bool, Default: true) - Uses the item asset's SellValue setting for customer pricing. * MaxVisibleStoredItems (int32, Default: 30) - Limit on visual items stacked on the counter. * StoredItemStackOffset (FVector, Default: Z=10.0) - Spacing offset. * MaxVisibleStoredMoney (int32, Default: 30) - Limit on cash piles shown. * StoredMoneyStackOffset (FVector, Default: Z=8.0) - Height offset for cash piles. * FallbackMoneyMesh / FallbackMoneyScale / FallbackMoneyRotation - Mesh and transforms for cash stacks. * bAnimatePlayerDropOff (bool, Default: true) - Flying items on player deposit. * DepositPulseSeconds (float, Default: 0.04s) - Spacing delay between item launches. * DepositFlyDurationSeconds / DepositFlyArcHeight (Flight curves) - Spacing adjustments. * bAllowPlayerMoneyPickup (bool, Default: true) - Allows players to collect cashier cash. * bAnimateMoneyPickup (bool, Default: true) - Flying money bills to player. * MoneyPickupPulseSeconds (float, Default: 0.04s) - Spacing delay between money launches. * MoneyPickupFlyDurationSeconds / MoneyPickupFlyArcHeight (Flight curves) - Spacing adjustments. * MoneyAmountPerPickupVisual (int32, Default: 1) - Face value of cash mesh when bScaleMoneyPickupVisualValue is false. * bScaleMoneyPickupVisualValue (bool, Default: true) - Scales bills to match large counts. * TargetMoneyPickupVisuals (int32, Default: 40) - Approximate bills launched for large cashier cash collection. * SingleMoneyPickupVisualThreshold (int32, Default: 20) - Cash amounts below this launch exactly 1 bill per unit. * bStackSoldItemsOnCustomer (bool, Default: true) - Sold items stack on customer head/hand. * bRequireWorkerOverlapToServeCustomers (bool, Default: false) - Customer sales pause unless a player/helper stands at cashier box. * CustomerServeFlyDurationSeconds / CustomerServeFlyArcHeight (Flight curves) - Spacing adjustments. * CounterStaticMesh (UStaticMesh*) - Static mesh used for counter. * CounterMeshRelativeLocation / CounterMeshRelativeRotation / CounterMeshRelativeScale - Transform adjustments for counter. * CounterMeshCollisionEnabled / CounterMeshCollisionProfileName (Collision settings) - Collision modes applied. * bAnimateUnlockReveal (bool, Default: true) - Popup scale animation on unlock. * UnlockRevealDurationSeconds (float, Default: 0.35s) - Popup duration. * UnlockRevealOvershootScale (float, Default: 1.3) - Peak scale multiplier. * UnlockSound / UnlockSoundVolume (USoundBase* / float) - Audio asset played on unlock. * bShowServiceCounterWidget / ServiceCounterWidgetClass / ServiceCounterWidgetSpace / ServiceCounterWidgetDrawSize / ServiceCounterWidgetRelativeLocation / ServiceCounterWidgetRelativeRotation / ServiceCounterWidgetRelativeScale / bHideServiceCounterWidgetWhenLocked - Context widget properties.

-------------------------------------------------------------------------------- 11. AHCFProductionStation (Properties) -------------------------------------------------------------------------------- * bUnlockedByDefault (bool, Default: true) - Active on start. * ProductionIntervalSeconds (float, Default: 5.0f) - Delay between item creation cycles. * ItemsPerCycle (int32, Default: 1) - Amount of items generated per cycle. * MaxStoredItems (int32, Default: 20) - Max storage stock before pause. * bProduceImmediatelyOnUnlock (bool, Default: true) - Creates first item instantly when station is unlocked. * ProductionMachineMesh (UStaticMesh*) - Mesh used for station. * ProducedItemDefinition (UHCFItemDefinition*) - Item type created. * StoredItemStackOffset (FVector, Default: Z=12.0) - Stack spacing. * MaxVisibleStoredItems (int32, Default: 30) - Visual model cap. * bAnimateCollectionToInventory (bool, Default: true) - Flying items on collection. * CollectionFlyDurationSeconds / CollectionFlyArcHeight (Flight curves) - Curves. * CollectionItemLaunchIntervalSeconds (float, Default: 0.04s) - Spacing delay between item collections. * MaxCollectionAnimationsPerPickup (int32, Default: 25) - Max animated meshes generated per gather. * ItemsPerCollectionPulse (int32, Default: 1) - Max items gathered per check pulse. * CollectionPulseSeconds (float, Default: 0.1s) - Wait time between check pulses. * StationMeshRelativeLocation / StationMeshRelativeRotation / StationMeshRelativeScale - Transform adjustments. * StationMeshCollisionEnabled / StationMeshCollisionProfileName (Collision settings) - Collision modes applied. * CollectBoxRelativeLocation / CollectBoxExtent (FVector) - Trigger box layout. * bAnimateUnlockReveal / UnlockRevealDurationSeconds / UnlockRevealOvershootScale - Popup reveal settings. * UnlockSound / UnlockSoundVolume (USoundBase* / float) - Unlock audio.

-------------------------------------------------------------------------------- 12. AHCFCropGrowActor (Properties) -------------------------------------------------------------------------------- * CropMesh (UStaticMesh*) - Visual mesh of crop. * CropMeshRelativeLocation / CropMeshRelativeRotation - Transform offsets. * MaxGrowScale (FVector, Default: 1.0) - Scale when fully grown. * GrowDurationSeconds (float, Default: 5.0f) - Seconds needed to grow. * bStartGrowingOnBeginPlay (bool, Default: true) - Starts growth cycle on launch. * bUnlockedByDefault (bool, Default: true) - Active on start. * bRegrowAfterHarvest (bool, Default: true) - Restarts growth cycle after harvest. * RegrowDelaySeconds (float, Default: 1.0f) - Idle delay before regrowth starts. * HarvestItemDefinition (UHCFItemDefinition*) - Item asset granted on harvest. * HarvestItemAmount (int32, Default: 1) - Amount of items granted. * PhysicsBeforePickupSeconds (float, Default: 0.35s) - Simulates physical gravity before flying to inventory. * CutImpulse (FVector, Default: Z=180.0) - Impulse applied when cut. * bAnimateHarvestToInventory (bool, Default: true) - Flying items on collection. * HarvestFlyDurationSeconds / HarvestFlyArcHeight / TimeBetweenHarvestItems - Flight curves. * WaitingHarvestPickupRadius (float, Default: 400.0f) - Radius checks to attract waiting cut items on floor. * GrowingCollisionProfileName (FName, Default: OverlapAllDynamic) - Collision settings during growth. * CutPhysicsCollisionProfileName (FName, Default: PhysicsActor) - Collision settings during physics drop. * CutSound / CutSoundVolume (USoundBase* / float) - Sound played when cut.

-------------------------------------------------------------------------------- 13. AHCFFarmCutterZone (Properties) -------------------------------------------------------------------------------- * ZoneRelativeLocation / ZoneBoxExtent (FVector) - Dimensions of cutting trigger space. * bUnlockedByDefault (bool, Default: true) - Active on start. * bEnableCutterOnEnter (bool, Default: true) - Automatically enables character cutter when overlapping. * bDisableCutterOnExit (bool, Default: true) - Automatically disables character cutter when exiting. * bRestorePreviousCutterStateOnExit (bool, Default: false) - Restores player's cutter state from before they entered. * UnlockedSound / UnlockedSoundVolume (USoundBase* / float) - Audio played on unlock.

-------------------------------------------------------------------------------- 14. AHCFHelperCharacter (Properties) -------------------------------------------------------------------------------- * bUnlockedByDefault (bool, Default: true) - AI runs on start. * TargetServiceCounter (AHCFServiceCounter*) - cashier destination. * TargetTrashBin (AHCFDiningTrashBinActor*) - Trash bin destination. * WorkSources (TArray<AActor*>) - Allowed work source actors (stations, crops, tables). * HelperMoveSpeed (float, Default: 360.0f) - Movement speed. * ArrivalRadius (float, Default: 35.0f) - Distance checks to count as arrived. * bRotateTowardMovement (bool, Default: true) - Rotates toward move velocity direction. * CollectionSettleSeconds (float, Default: 0.35s) - Wait duration after picking up items. * DeliveryPulseSeconds (float, Default: 0.04s) - Deposit interval at counter. * bShowCutterWhileHarvestingCrops (bool, Default: true) - Activates cutter mesh when harvesting crops. * CropHarvestCutterVisibleSeconds (float, Default: 0.45s) - Duration cutter mesh stays visible after crop harvest. * bIgnoreOtherHelpers (bool, Default: true) - Disables collision between helpers to prevent line blockages. * bShowHelperOverheadWidget / HelperOverheadWidgetClass / HelperOverheadWidgetSpace / HelperOverheadWidgetDrawSize / HelperOverheadWidgetRelativeLocation / HelperOverheadWidgetRelativeScale - Context widget properties. * UnlockSound / UnlockSoundVolume (USoundBase* / float) - Unlock audio.

-------------------------------------------------------------------------------- 15. AHCFHelperSpawnPoint (Properties) -------------------------------------------------------------------------------- * bStartSpawnPointUnlocked (bool, Default: false) - Active on start. * HelperClass (TSubclassOf<AHCFHelperCharacter>) - Character class spawned. * bSpawnHelperWhenUnlocked (bool, Default: true) - Creates character instantly when spawn point unlocks. * bSpawnOnlyOnce (bool, Default: true) - Reuses first spawned character instead of duplicating. * MaxSpawnedHelpers (int32, Default: 0) - Limit of active workers (0 is unlimited). * bProjectSpawnToGround (bool, Default: true) - Projects character to floor on spawn. * SpawnGroundTraceHeight / SpawnGroundTraceDepth / SpawnGroundOffset / SpawnGroundTraceChannel - Trace configurations. * TargetServiceCounter (AHCFServiceCounter*) - cashier destination. * TargetTrashBin (AHCFDiningTrashBinActor*) - Trash bin destination. * WorkSources (TArray<AActor*>) - Assigned work sources. * bOverrideHelperMaxCarriedItems / InitialHelperMaxCarriedItems - Overrides worker inventory capacity on spawn. * bOverrideHelperMoveSpeed / InitialHelperMoveSpeed - Overrides worker speed on spawn. * SpawnedHelperActorTag (FName) - Tags spawned characters so upgrade rooms can find them. * SpawnSound / SpawnSoundVolume (USoundBase* / float) - Spawning audio.

-------------------------------------------------------------------------------- 16. AHCFUpgradeZone (Properties) -------------------------------------------------------------------------------- * UpgradeWidgetClass (TSubclassOf<UHCFUpgradeWidget>) - Widget UI class to open. * bStartUpgradeZoneAvailable (bool, Default: true) - Active on start. * bOpenOnPlayerOverlap (bool, Default: true) - Automatically opens UI when player enters trigger. * bCloseOnPlayerExit (bool, Default: true) - Automatically closes UI when player leaves trigger. * bShowMouseCursorWhileOpen (bool, Default: true) - Shows cursor when UI is open. * InputModeWhileOpen (EHCFUpgradeZoneInputMode, Default: GameAndUI) - Sets input state (GameAndUI, UIOnly, or NoInputChange). * HelperSpawnPoints (TArray<AHCFHelperSpawnPoint*>) - Linked helper spawner points. * UpgradeHelpers (TArray<AHCFHelperCharacter*>) - Linked direct helpers. * UpgradeItemDefinitions (TArray<UHCFItemDefinition*>) - Linked item definitions.

-------------------------------------------------------------------------------- 17. AHCFGuidePathActor (Properties) -------------------------------------------------------------------------------- * TargetActor (AActor*) - Final objective actor. * TargetOffset (FVector) - Local transform target offset. * bAutoFindPlayer (bool, Default: true) - Automatically binds Player 0. * PlayerActor (AActor*) - Binds specific character actor. * PlayerIndex (int32, Default: 0) - Index used for auto-bind. * bStartGuideEnabled (bool, Default: true) - Enabled on start. * GuideSteps (TArray<FHCFGuidePathStep>) - Step structures defining complex tutorial routes: - StepName (FName) - TargetActor (AActor*) - TargetOffset (FVector) - bStopWhenTargetUnlocks (bool) - bStopWhenPlayerReachesTarget (bool) - bStopAfterCollectedItemsFromTarget (bool) - RequiredCollectedItemsFromTarget (int32) - CompletionRadius (float) * ArrowMesh (UStaticMesh*) - Mesh used for ground arrows. * ArrowMaterial (UMaterialInterface*) - Material applied. * ArrowScale (FVector, Default: 1.0) - Scale of arrow meshes. * ArrowSpacing (float, Default: 160.0f) - Distance spacing between arrows in trail. * StartDistanceFromPlayer / EndDistanceFromTarget (float) - Margins for drawing. * GroundZOffset (float, Default: 6.0f) - Draw height offset. * bProjectArrowsToGround (bool, Default: true) - Traces arrow nodes down to terrain. * GroundTraceHeight / GroundTraceDepth / GroundTraceChannel - Trace configurations. * MaxArrowCount (int32, Default: 24) - Maximum arrows drawn. * MaxGuideDistance (float, Default: 3000.0f) - Maximum distance checked. * bHideWhenPlayerIsClose (bool, Default: true) - Hides trail when player is near target. * bStopWhenTargetUnlocks / bStopWhenPlayerReachesTarget / bStopAfterCollectedItemsFromTarget / RequiredCollectedItemsFromTarget / CompletionRadius - Fallback completion triggers when GuideSteps list is empty. * bDestroyOnComplete (bool, Default: false) - Self-destructs actor on completion.

================================================================================ QUESTIONS & ANSWERS: HOW TO ================================================================================

Q: How do I set up a player to carry items and have their hands automatically hold the stack? A: 1. Add a UHCFInventoryComponent and a UHCFCarryIKComponent to your player character class. 2. The UHCFCarryIKComponent will automatically bind to the player inventory on BeginPlay. Ensure that bFollowTopCarriedItem is checked so that the hand targets slide upward as the stack grows. 3. Open your character's Animation Blueprint (AnimBP). In the AnimGraph, read the values from your character's UHCFCarryIKComponent: - Call GetLeftHandCarryTargetComponentSpaceLocation and GetRightHandCarryTargetComponentSpaceLocation. Pass in your SkeletalMesh component. - Call GetTwoBoneIKAlpha to get the current blended IK Alpha. 4. Route these locations as the effectors for two "Two Bone IK" nodes in your AnimGraph (one for left hand, one for right hand). Use the IK Alpha value to drive the Node Alpha of both Two Bone IK nodes. This will dynamically place the player's hands on the sides of the carry stack.

Q: How do I create a crop field where players can cut grass/crops and collect them? A: 1. Place several AHCFCropGrowActor actors in your level to act as crops. Configure their static mesh and set HarvestItemDefinition to the item asset they will yield. 2. Set bStartGrowingOnBeginPlay and bRegrowAfterHarvest to true. 3. Place an AHCFFarmCutterZone actor enclosing the crops. 4. When the player walks into the cutter zone, the zone automatically calls SetCutterMeshEnabled(true) on the player's UHCFInventoryComponent. This displays their visual cutter mesh tool and spins it. 5. While moving, overlapping crop actors will detect the player's cutter mesh. Fully grown crops will play a cut sound, apply CutImpulse to simulate physics dropping on the ground, and then fly into the player's inventory as collected items after a short delay.

Q: How do I set up a helper character to automatically gather items from a production station and deliver them to a cashier? A: 1. Place an AHCFHelperSpawnPoint actor in your level. Set HelperClass to your helper character blueprint. 2. In the spawn point's properties under "Helper Assignment", set TargetServiceCounter to the cashier where they should sell items. 3. Add your AHCFProductionStation actors to the spawn point's WorkSources array. 4. Set bStartSpawnPointUnlocked to true, or leave it false and target this spawn point from an AHCFUnlockZone to buy the helper later. 5. On spawn, the helper AI will automatically loop through this state machine: - Check if the cashier needs stock and if the production stations have stored items. - Walk to the best production station, wait for items to fly into their inventory, then walk to the cashier counter and deposit them.

Q: How do I handle dining mechanics (customers eating and leaving trash that blocks seats)? A: 1. Place an AHCFDiningTable actor in your level. Add entries to its Seats array. For each seat, check bLeaveTrashAfterMeal, specify TrashChancePercent, and assign TrashItemDefinition (e.g. DA_Trash). 2. Configure your AHCFCustomerSpawner's AfterGettingItemAction to "Search For Table". 3. When customers buy food at the cashier, they route to an available seat at the table. 4. Upon arrival, their carried food flies onto the table. They sit, eat, and after EatDurationSeconds, they exit. 5. Depending on your trash chance, a trash actor (AHCFDiningTrashActor) will spawn on the seat, blocking it. 6. The player or a helper with "WorkSources" containing the dining table must walk to the trash to collect it. 7. Set TargetTrashBin on your helper or spawn point to an AHCFDiningTrashBinActor so helpers automatically carry trash to the bin instead of the cashier.

Q: How do I save and load the player's progress, unlocked zones, and inventory? A: 1. Add a UHCFSaveIdComponent to every AHCFUnlockZone, AHCFProductionStation, AHCFServiceCounter, AHCFGuidePathActor, and player/helper character in your level. Assign a unique name to the SaveId property of each. 2. To save the game, call SaveHCFGame from the UHCFSaveBlueprintLibrary. Specify a slot name (default is "HCF_Save"). The system will scan the world, locate all HCF components, capture their state (money, unlocked status, progress, stock, etc.), and write them to disk. 3. To load the game, call LoadHCFGame. The system will load the file, match the stored properties back to the actors using their unique Save IDs, and update their states silently without replay animations.

Q: How do I configure an upgrade zone where players can purchase speed and capacity upgrades? A: 1. Place an AHCFUpgradeZone actor in the level. Set UpgradeWidgetClass to a UI widget blueprint derived from UHCFUpgradeWidget. 2. Link the helper spawn points or helpers you want to upgrade in the HelperSpawnPoints and UpgradeHelpers arrays. 3. Set bOpenOnPlayerOverlap to true. When the player walks into the upgrade room, the UI opens and the mouse cursor is enabled. 4. In your widget blueprint, bind buttons to call: - TryUpgradeObservedPlayerMaxWalkSpeed to increase player speed. - TryUpgradeObservedPlayerMaxCarriedItems to increase player carry capacity. - TryUpgradeAllSpawnedHelpersMaxCarriedItems to increase the capacity of helpers spawned by a specific point. - TryUpgradeItemDefinitionSellValue to increase the economy sell value of specific items. 5. The widget automatically spends the observed player's money and applies the stat increments.