Farm Prototype
My Role(s)
Solo developer, Technical Design, UI/ UX Design
Tools
Unreal Engine 5, Figma, Miro, Github
Time
4 weeks
Team size
Solo
A prototype exploring farming & resource management systems.
I got to tackle a lot of UI and interacting systems.
Made for a System Design course at Futuregames.
Prototype Features
Inventory system
Level progression system
Fortune wheel
Farming system
Build system
Automation with AI helpers
Upgrade system for the AI
DETAILS
Tile types
I used inheritance for the tiles and created a base tile blueprint class that implements a Interact interface.
-
Crop Tile: Grows a crop overtime, requiring water.
Interact to water or harvest.
-
Well Tile: Contains unlimited water.
Interact provides water.
-
Storage Tile: Can store items.
Interact toggles showing the storages inventory menu.
-
Market Tile: Sell items.
Interact toggles the market menu.
-
Factory Tile: Turns crops into processed items.
Interact to harvest or toggles the inventory menu to submit crop.
-
AI Spawn Tile: Spawns an AI helper.
Interact toggles the upgrade menu.
Inventory System
Used an actor component for the Inventory so easy to reuse. The UI has drag and drop functionality to move and combind item stacks.

Build System

Leveling System
I recreated the leveling system from a childhood game I played a lot, Nordgame. You put crops into a fortune wheel that gave exp on win.
Key design points:
6 item slots requesting specific items
X2 slot that gives double exp when landed on, if all item slots have been filled.
Wheel can be played with 1 item minimum.
All added items get used up after spinning.

I scale the number of item slots required with level.
To gradually slow down the wheel I used a float curve as alpha to lerp the rotation speed multiplier until it reached 0.
To make the slot it landed on unpredictable I used;
Multiple curves, picking a random one
Randomized the spin duration within a range
Randomized the starting speed multiplier within a range
Wheel content
I can use the items the wheel requires to incentivize the player to get new crops and tiles. I went through a couple iterations for deciding the item slots content.
Full control: Creating each wheel’s item slots manually. Gives complete control over the progression and difficulty but time consuming.
No control: Fill the item slots with random items from an item poo. When new items get unlocked, they get added to the pool. Quick but inconsistent and impossible to balance.
I kept the item pool but wanted more control over it. I made a data table that specifies what items are in the potential pool at any given level. This allowed increasing the likelyhood of an item appearing by entering more copies of it.
Level Progression
I use a data table to determine what tiles and crops get unlocked at certain levels. Row name corresponds to level. Instead of using a name or text variable type I use a data table row handler to minimize user error of typing an ID wrong.

AI helpers
A fun part of farming and resource management games is automating tasks so production can scale up. I decided on some AI helpers that automate different parts of the game.
Waterer AI: Waters crop tiles
Harvester AI: Harvests crop tiles
Processor AI: Supplier Factory tiles with items to processes
I use a simple state machine for the AI. As they share the same overarching states, I utilize inheritance and made a base AI class with the core loop.
Base AI
The AI have a primary and a secondary objective. If neither can be run, the AI moves home.
Primary Objective:
Performed when the AI's specified criteria is fulfilled.
When setting target; the AI marks the target tile as taken so other AIs ignore it.
Secondary Objective:
Performed to fulfill the criteria.


Early progress
I made the Watering and Harvesting AI first.
To simplify debugging I added text to display the AI's current target and resource count. The tiles also got text to display their state.
Adjustments
Nerfed movement speed.
A diegetic indicator on the mesh to display resource count.


Test
Larger testing scenario, more AI. The AI behaves as it should.
Problem: lack of visual clarity and an overwhelming amount of information.
Solution: hide the AI's text, the diegetic resource indicator communicates enough.
Processing AI
Delivers crop items from storage tiles to factory tiles.

TAKE AWAYS
A fun little project with a mechanic (fortune wheel) I've wanted to recreate for a long time. I also adore my little AI helpers, they turned out great. I got to do a lot of UI and technical implementation.
Technical designer
Utilized actor components for the games system, made referencing them in UI easy.
Learned to make a solid inventory system.
Implementing a simple debug menu.
Learned how to implement Drag and drop.
AI state machine.