# Agrarian Art, UX, Code, Blueprint, And Asset Standards ## Purpose Agrarian needs a consistent foundation before the project grows into many maps, tiles, systems, artists, designers, and code contributors. These standards keep the project readable, buildable, and aligned with the game's tone while still leaving room for prototype speed. This document covers: - art direction; - UX and HUD direction; - Unreal content folders; - asset naming; - C++ coding standards; - Blueprint standards; - data asset standards; - save/persistence standards. ## Art Direction Agrarian should feel grounded, tactile, and region-specific. The world begins hard and sparse, then becomes more ordered as players build shelter, storage, farms, settlements, roads, and infrastructure. Visual goals: - believable real-world terrain first; - natural materials and practical construction; - visible player labor and wear; - readable survival state without heavy fantasy language; - environmental storytelling through camps, paths, water access, stored goods, fences, tools, and damaged or repaired structures; - technology progression that visibly moves from hand-built to engineered. Avoid: - generic fantasy styling; - neon sci-fi treatment for survival-era systems; - overly clean buildings during early survival; - decorative UI or props that obscure resource state; - assets that ignore the represented real-world tile and biome. Ground Zero target: - coastal California terrain, scrub, grassland, rock, slope, wind, fog, and water access should guide early visual decisions; - placeholder assets are acceptable only when clearly organized as prototype content; - future production passes should replace generic starter shapes with region-appropriate materials, vegetation, rocks, shoreline treatment, and weathered survival props. ## Character Direction MVP character selection should support realistic male and female young-adult characters with average proportions. Characters should look practical and believable in a survival setting. Early rules: - no exaggerated heroic silhouettes for default characters; - clothing should read as practical, worn, and climate-aware; - future MetaHuman use is acceptable if performance, licensing, and build size remain manageable; - character customization should not block the first playable MVP. ## UX And HUD Direction The UX should be quiet, readable, and useful under survival pressure. The game should not feel like a spreadsheet, but players must understand why they are hungry, thirsty, cold, injured, overloaded, or unable to craft. HUD priorities: - health; - stamina; - hunger; - thirst; - body temperature/exposure; - injury; - interaction prompt; - carried weight or capacity when relevant; - current weather/time cues; - inventory/crafting/building feedback. UX rules: - show critical survival risk early and clearly; - avoid permanent clutter for non-critical details; - use diegetic cues where they help, but do not hide essential survival state; - make interaction prompts short and specific; - keep error messages actionable; - keep admin/debug HUD separate from player-facing HUD; - support keyboard/mouse and gamepad from the start where practical; - avoid UI that requires precise small clicks during urgent survival actions. Tone: - direct and plain; - no jokey system text for serious survival states; - no technical implementation language in player-facing copy; - no blockchain or wallet language in the survival HUD. ## Startup And Demo UX The current demo startup flow should preserve: - Agrarian Studio splash/startup identity; - Unreal/Epic attribution where required; - copyright and demo notice language; - motto: `What survives after you are gone?`; - version and beta/demo status where appropriate; - transition into character selection before gameplay. The startup sequence should be short enough for repeated testing. Long cinematic presentation can come later. ## Content Folder Standards All Agrarian-owned gameplay content belongs under: ```text Content/Agrarian/ ``` Current root folders: ```text Content/Agrarian/Blueprints/ Content/Agrarian/DataAssets/ Content/Agrarian/Maps/ ``` Standard target folders: ```text Content/Agrarian/Audio/ Content/Agrarian/Blueprints/ Content/Agrarian/Characters/ Content/Agrarian/DataAssets/ Content/Agrarian/Developer/ Content/Agrarian/Environment/ Content/Agrarian/Maps/ Content/Agrarian/Materials/ Content/Agrarian/Prototypes/ Content/Agrarian/UI/ ``` Blueprint subfolders: ```text Content/Agrarian/Blueprints/Characters/ Content/Agrarian/Blueprints/Resources/ Content/Agrarian/Blueprints/Structures/ Content/Agrarian/Blueprints/Systems/ Content/Agrarian/Blueprints/Wildlife/ Content/Agrarian/Blueprints/World/ ``` Data asset subfolders: ```text Content/Agrarian/DataAssets/Items/ Content/Agrarian/DataAssets/Recipes/ Content/Agrarian/DataAssets/Resources/ Content/Agrarian/DataAssets/Structures/ Content/Agrarian/DataAssets/Wildlife/ Content/Agrarian/DataAssets/Weather/ ``` Rules: - Do not place Agrarian production assets in template root folders. - Keep starter/template dependencies isolated until replaced. - Keep experimental content in `Prototypes` or `Developer`. - Do not commit Derived Data Cache, packaged builds, generated tile packages, or local editor output. - Before moving existing `.uasset` files, use the Unreal Editor or validated redirector fixup path, not raw file moves. ## Asset Naming Standards Use clear Unreal-style prefixes and descriptive names. Core prefixes: ```text BP_ Blueprint class WBP_ Widget Blueprint DA_ Data Asset DT_ Data Table E_ Enum asset S_ Static mesh SK_ Skeletal mesh SM_ Static mesh, acceptable when imported source already uses SM_ M_ Material MI_ Material instance T_ Texture NS_ Niagara system A_ Animation sequence ABP_ Animation Blueprint L_ Level/map IA_ Enhanced Input action IMC_ Enhanced Input mapping context SFX_ Sound effect MX_ Music ``` Name shape: ```text Prefix_Category_SpecificName_Variant ``` Examples: ```text BP_Resource_WoodNode BP_Structure_PrimitiveShelter DA_Item_Wood DA_Recipe_Campfire WBP_HUD_Survival L_GroundZeroTerrain_Test MI_WoodWeathered_01 T_GroundZero_ScrubAlbedo ``` Rules: - Use ASCII letters, numbers, and underscores. - Do not use spaces in asset names. - Do not use vague names like `NewBlueprint`, `Test2`, or `FinalFinal`. - Include `Prototype` or place in `Prototypes` for throwaway work. - Include `_Test` only for test maps/assets. - Preserve stable item and recipe IDs once used by saves. - Do not rename persisted data assets without a migration plan. ## Data Asset Standards Data assets describe content. C++ and server authority enforce rules. Required data asset behavior: - stable ID field such as `ItemId` or `RecipeId`; - human-readable display name; - short description where player-facing; - version or migration notes once the asset can affect saves; - conservative defaults that do not break multiplayer; - no secrets, credentials, local file paths, or machine-specific values. Rules: - Item IDs and recipe IDs use stable snake_case or FName-safe identifiers. - Display text can change; IDs should not change casually. - Data assets can expose tuning, but server code validates outcomes. - Save data stores IDs and quantities, not copied data asset contents. - Any asset referenced by a save, recipe, loot table, or trade record must have a compatibility note before removal. ## Save And Persistence Standards Persistent records are long-lived contracts. Rules: - Include record version fields. - Include game build/version where useful. - Include tile ID and tile package version when position or world state matters. - Store IDs and state, not full static definitions. - Keep terrain/tile metadata external and referenced by ID. - Log migrations. - Back up saves before destructive migrations. - Never store passwords, private keys, wallet secrets, API tokens, or admin credentials. Save-facing assets: - item data assets; - recipe data assets; - placed structure classes; - tile IDs/package versions; - future account/player IDs. Renames/removals of save-facing assets need a migration or compatibility alias. ## C++ Coding Standards Agrarian is a hybrid Unreal project: C++ owns core replicated gameplay and Blueprints assemble content and presentation. Style: - follow Unreal Engine C++ conventions; - use `A`, `U`, `F`, `E`, and `I` prefixes correctly; - prefer explicit, small classes over broad manager objects; - keep server authority clear in naming and implementation; - keep comments short and useful; - avoid storing gameplay truth only in Blueprint when C++ authority exists. Headers: - include `CoreMinimal.h` first unless a file has a specific Unreal reason not to; - forward declare where practical; - include generated header last; - keep public API small. Replication: - server validates gameplay requests; - replicated properties use `OnRep` when clients need presentation updates; - do not trust client inventory, survival, crafting, trade, or placement data; - RPCs should be narrow and action-specific. Categories: - use `Agrarian|SystemName` for public Blueprint-exposed properties/functions; - keep existing categories consistent when touching a class; - do not expose internal-only state to Blueprint unless a designer or test path needs it. Testing expectations: - compile after C++ changes; - add or update automation tests when changing shared gameplay contracts; - run relevant Unreal command-mode checks when touching maps, assets, or Blueprint-dependent flows. ## Blueprint Standards Blueprints are for content assembly, presentation, and designer-facing configuration. They should not hide authoritative logic that needs to be validated, replicated, tested, or migrated. Rules: - Use parent C++ classes for replicated gameplay actors when possible. - Keep event graphs small and readable. - Move repeated logic into functions, macros, components, or C++. - Name variables clearly and avoid ambiguous temporary names. - Do not store secrets or machine-specific paths in Blueprint defaults. - Do not create critical inventory, survival, trade, or persistence changes purely on the client. - Keep debug-only Blueprint behavior visibly labeled and out of production paths. Blueprint naming: - `BP_Resource_*` - `BP_Structure_*` - `BP_Wildlife_*` - `BP_World_*` - `BP_System_*` - `WBP_*` for widgets. Blueprint validation checklist: - Does it have the correct parent class? - Are replicated properties owned by the server? - Are exposed defaults intentional? - Does it live in the correct folder? - Does it reference prototype/template content knowingly? - Does it pass map load and relevant smoke automation? ## UI Asset Standards Use `WBP_` for Widget Blueprints and place them under: ```text Content/Agrarian/UI/ ``` or, while still organized by Blueprint type: ```text Content/Agrarian/Blueprints/UI/ ``` Player-facing widgets should be separated from: - debug HUDs; - admin tools; - automation/test widgets; - startup/demo notice widgets. HUD assets should keep stable names once referenced by game mode, player controller, or packaged demo startup paths. ## Prototype And Developer Content Prototype content is allowed, but it must be obvious. Use: ```text Content/Agrarian/Prototypes/ Content/Agrarian/Developer/ ``` Rules: - prototype assets can be fast and rough; - production systems should not depend on prototype assets without a roadmap note; - before packaging investor/demo builds, check visible prototype content and decide whether it is acceptable for that build; - delete unused prototype content when it is no longer referenced. ## Review Checklist Before committing content or code: - asset is under the correct folder; - asset name has the correct prefix; - save-facing IDs are stable; - Blueprint changes do not bypass server authority; - C++ changes compile; - data assets do not contain secrets or machine-local paths; - UI text is player-facing, clear, and not technical; - large assets pass storage-policy review; - roadmap and handoff updates are included when completing roadmap items.