Add Ground Zero terrain pipeline and playable assets

This commit is contained in:
2026-05-14 00:09:40 -07:00
parent 46d0e080b5
commit 6d25ff690d
77 changed files with 5770 additions and 84 deletions
+164
View File
@@ -0,0 +1,164 @@
import unreal
ITEM_FOLDER = "/Game/Agrarian/DataAssets/Items"
ITEMS = [
{
"asset": "DA_Item_Wood",
"item_id": "wood",
"display_name": "Wood",
"description": "Usable branches, logs, and rough-cut timber for fires, tools, and early structures.",
"item_type": unreal.AgrarianItemType.RESOURCE,
"unit_weight": 1.0,
"max_stack_size": 99,
},
{
"asset": "DA_Item_Stone",
"item_id": "stone",
"display_name": "Stone",
"description": "Field stone suitable for crude tools, fire rings, and primitive construction.",
"item_type": unreal.AgrarianItemType.RESOURCE,
"unit_weight": 1.5,
"max_stack_size": 99,
},
{
"asset": "DA_Item_Fiber",
"item_id": "fiber",
"display_name": "Fiber",
"description": "Plant fiber that can be twisted, woven, or bound into survival gear and simple structures.",
"item_type": unreal.AgrarianItemType.RESOURCE,
"unit_weight": 0.1,
"max_stack_size": 99,
},
{
"asset": "DA_Item_Food",
"item_id": "food",
"display_name": "Food",
"description": "Foraged edible food that can stave off hunger in the earliest survival loop.",
"item_type": unreal.AgrarianItemType.FOOD,
"unit_weight": 0.3,
"max_stack_size": 50,
},
{
"asset": "DA_Item_Meat",
"item_id": "meat",
"display_name": "Meat",
"description": "Raw harvested meat that should be cooked or preserved before long-term use.",
"item_type": unreal.AgrarianItemType.FOOD,
"unit_weight": 0.5,
"max_stack_size": 50,
},
{
"asset": "DA_Item_Hide",
"item_id": "hide",
"display_name": "Hide",
"description": "Animal hide used for shelter, clothing, containers, and other early craft work.",
"item_type": unreal.AgrarianItemType.RESOURCE,
"unit_weight": 0.7,
"max_stack_size": 50,
},
{
"asset": "DA_Item_PrimitiveFrame",
"item_id": "primitive_frame",
"display_name": "Primitive Frame",
"description": "A lashed support frame used as the backbone for early shelters and simple buildables.",
"item_type": unreal.AgrarianItemType.STRUCTURE,
"unit_weight": 3.0,
"max_stack_size": 20,
},
{
"asset": "DA_Item_PrimitiveWallPanel",
"item_id": "primitive_wall_panel",
"display_name": "Primitive Wall Panel",
"description": "A crude wall panel built from wood and fiber for early shelter construction.",
"item_type": unreal.AgrarianItemType.STRUCTURE,
"unit_weight": 4.0,
"max_stack_size": 20,
},
{
"asset": "DA_Item_PrimitiveRoofPanel",
"item_id": "primitive_roof_panel",
"display_name": "Primitive Roof Panel",
"description": "A simple roof panel made from lashed branches, fiber, and cover material.",
"item_type": unreal.AgrarianItemType.STRUCTURE,
"unit_weight": 4.0,
"max_stack_size": 20,
},
{
"asset": "DA_Item_Campfire",
"item_id": "campfire",
"display_name": "Campfire",
"description": "A placeable fire ring for warmth, light, and early cooking.",
"item_type": unreal.AgrarianItemType.STRUCTURE,
"unit_weight": 12.0,
"max_stack_size": 5,
},
{
"asset": "DA_Item_PrimitiveShelter",
"item_id": "primitive_shelter",
"display_name": "Primitive Shelter",
"description": "A compact early shelter that provides basic weather protection.",
"item_type": unreal.AgrarianItemType.STRUCTURE,
"unit_weight": 25.0,
"max_stack_size": 1,
},
{
"asset": "DA_Item_BasicTool",
"item_id": "basic_tool",
"display_name": "Basic Tool",
"description": "A crude stone-and-wood tool for the first gather and build loops.",
"item_type": unreal.AgrarianItemType.TOOL,
"unit_weight": 1.2,
"max_stack_size": 10,
},
{
"asset": "DA_Item_Bandage",
"item_id": "bandage",
"display_name": "Bandage",
"description": "A simple treatment item made from hide and fiber.",
"item_type": unreal.AgrarianItemType.MEDICINE,
"unit_weight": 0.1,
"max_stack_size": 20,
},
]
def create_or_load_item_asset(asset_name):
path = f"{ITEM_FOLDER}/{asset_name}"
existing = unreal.EditorAssetLibrary.load_asset(path)
if existing:
return existing
factory = unreal.DataAssetFactory()
factory.set_editor_property("data_asset_class", unreal.AgrarianItemDefinitionAsset)
asset_tools = unreal.AssetToolsHelpers.get_asset_tools()
asset = asset_tools.create_asset(asset_name, ITEM_FOLDER, unreal.AgrarianItemDefinitionAsset, factory)
if not asset:
raise RuntimeError(f"Could not create {path}")
return asset
def apply_definition(asset, item):
definition = unreal.AgrarianItemDefinition()
definition.set_editor_property("item_id", item["item_id"])
definition.set_editor_property("display_name", item["display_name"])
definition.set_editor_property("description", item["description"])
definition.set_editor_property("item_type", item["item_type"])
definition.set_editor_property("unit_weight", item["unit_weight"])
definition.set_editor_property("max_stack_size", item["max_stack_size"])
asset.set_editor_property("definition", definition)
unreal.EditorAssetLibrary.save_loaded_asset(asset)
def main():
unreal.EditorAssetLibrary.make_directory(ITEM_FOLDER)
for item in ITEMS:
asset = create_or_load_item_asset(item["asset"])
apply_definition(asset, item)
unreal.log(f"Configured item definition: {item['item_id']} -> {ITEM_FOLDER}/{item['asset']}")
unreal.log("Agrarian item definition setup complete.")
main()