{
  "sample": "CodeForge RPG Starter Kit",
  "source": "CodeForge example project schema",
  "module": "CodeForge",
  "reproduction": [
    "Create RPG Starter Kit examples from the CodeForge editor toolbar.",
    "Generate C++ from the CodeForge assets.",
    "Build CodeForgeEditor Win64 Development with UnrealBuildTool.",
    "Run Unreal Automation with: Automation RunTests CodeForge.",
    "Run Tools/New-CodeForgeGeneratedSamples.ps1 to rebuild this sample bundle."
  ],
  "blueprints": [
    {
      "asset": "EItemRarity",
      "kind": "Enum",
      "className": "EItemRarity",
      "generatedFiles": [
        "EItemRarity.h"
      ],
      "enumEntries": [
        "Common",
        "Uncommon",
        "Rare",
        "Epic",
        "Legendary"
      ]
    },
    {
      "asset": "RPGItemData",
      "kind": "Struct",
      "className": "FRPGItemData",
      "generatedFiles": [
        "FRPGItemData.h"
      ],
      "properties": [
        {
          "name": "ItemName",
          "specifiers": [
            "EditAnywhere",
            "BlueprintReadWrite"
          ],
          "type": "FString"
        },
        {
          "name": "ItemDescription",
          "specifiers": [
            "EditAnywhere",
            "BlueprintReadWrite"
          ],
          "type": "FText"
        },
        {
          "name": "Rarity",
          "specifiers": [
            "EditAnywhere",
            "BlueprintReadWrite"
          ],
          "defaultValue": "EItemRarity::Common",
          "type": "EItemRarity"
        },
        {
          "name": "StackCount",
          "specifiers": [
            "EditAnywhere",
            "BlueprintReadWrite"
          ],
          "defaultValue": "1",
          "type": "int32"
        },
        {
          "name": "MaxStackSize",
          "specifiers": [
            "EditAnywhere",
            "BlueprintReadWrite"
          ],
          "defaultValue": "99",
          "type": "int32"
        },
        {
          "name": "bIsConsumable",
          "specifiers": [
            "EditAnywhere",
            "BlueprintReadWrite"
          ],
          "defaultValue": "false",
          "type": "bool"
        },
        {
          "name": "ItemWeight",
          "specifiers": [
            "EditAnywhere",
            "BlueprintReadWrite"
          ],
          "defaultValue": "1.0f",
          "type": "float"
        }
      ]
    },
    {
      "asset": "IDamageable",
      "kind": "Interface",
      "className": "Damageable",
      "generatedFiles": [
        "Damageable.h"
      ],
      "functions": [
        {
          "name": "ReceiveDamage",
          "specifiers": [
            "BlueprintNativeEvent"
          ],
          "returnType": "void",
          "params": [
            "float Amount"
          ]
        },
        {
          "name": "GetCurrentHealth",
          "const": true,
          "specifiers": [
            "BlueprintNativeEvent"
          ],
          "returnType": "float"
        },
        {
          "name": "GetIsAlive",
          "const": true,
          "specifiers": [
            "BlueprintNativeEvent"
          ],
          "returnType": "bool"
        }
      ]
    },
    {
      "asset": "RPGCharacter",
      "kind": "Class",
      "className": "ARPGCharacter",
      "classType": "Character",
      "generatedFiles": [
        "ARPGCharacter.h",
        "ARPGCharacter.cpp"
      ],
      "interfaces": [
        "Damageable"
      ],
      "properties": [
        {
          "replication": "ReplicatedUsing OnRep_Health",
          "name": "Health",
          "specifiers": [
            "EditAnywhere",
            "BlueprintReadWrite"
          ],
          "type": "float"
        },
        {
          "name": "MaxHealth",
          "specifiers": [
            "EditAnywhere",
            "BlueprintReadWrite"
          ],
          "type": "float"
        },
        {
          "name": "AttackPower",
          "specifiers": [
            "EditAnywhere",
            "BlueprintReadWrite"
          ],
          "type": "float"
        },
        {
          "name": "Level",
          "specifiers": [
            "EditAnywhere",
            "BlueprintReadWrite"
          ],
          "type": "int32"
        },
        {
          "name": "Experience",
          "specifiers": [
            "EditAnywhere",
            "BlueprintReadWrite"
          ],
          "type": "int32"
        },
        {
          "name": "InventoryComponent",
          "specifiers": [
            "VisibleAnywhere",
            "BlueprintReadOnly"
          ],
          "type": "URPGInventoryComponent*"
        }
      ],
      "delegates": [
        {
          "name": "OnHealthChanged",
          "params": [
            "float NewHealth",
            "float MaxHealth"
          ],
          "type": "DynamicMulticast"
        },
        {
          "name": "OnLevelUp",
          "params": [
            "int32 NewLevel"
          ],
          "type": "DynamicMulticast"
        },
        {
          "name": "OnDeath",
          "params": [],
          "type": "DynamicMulticast"
        }
      ],
      "functions": [
        "GainExperience",
        "GetHealthPercent",
        "IsAlive",
        "ReceiveDamage",
        "GetCurrentHealth",
        "GetIsAlive"
      ],
      "execFunctions": [
        "CheatAttack",
        "CheatGainXP",
        "CheatAddItem",
        "CheatHeal",
        "CheatNuke",
        "CheatGodMode"
      ],
      "rpcs": [
        {
          "name": "ServerRequestAttack",
          "mode": "Server",
          "reliable": true
        },
        {
          "name": "ClientReceiveDamage",
          "mode": "Client",
          "reliable": true
        },
        {
          "name": "NetMulticastPlayHitEffect",
          "mode": "NetMulticast",
          "reliable": false
        }
      ]
    },
    {
      "asset": "RPGInventoryComponent",
      "kind": "Class",
      "className": "URPGInventoryComponent",
      "classType": "ActorComponent",
      "generatedFiles": [
        "URPGInventoryComponent.h",
        "URPGInventoryComponent.cpp"
      ],
      "properties": [
        "Items",
        "MaxSlots",
        "CurrentWeight",
        "MaxWeight"
      ],
      "delegates": [
        {
          "name": "OnInventoryChanged",
          "params": [],
          "type": "DynamicMulticast"
        },
        {
          "name": "OnItemAdded",
          "params": [],
          "type": "DynamicMulticast"
        }
      ],
      "functions": [
        "AddItem",
        "RemoveItem",
        "GetItemCount"
      ]
    },
    {
      "asset": "RPGGameMode",
      "kind": "Class",
      "className": "ARPGGameMode",
      "classType": "GameModeBase",
      "generatedFiles": [
        "ARPGGameMode.h",
        "ARPGGameMode.cpp"
      ],
      "properties": [
        "RespawnDelay",
        "bAllowFriendlyFire",
        "ExperienceMultiplier"
      ],
      "delegates": [
        {
          "name": "OnPlayerDied",
          "params": [],
          "type": "DynamicMulticast"
        },
        {
          "name": "OnGameStarted",
          "params": [],
          "type": "DynamicMulticast"
        }
      ],
      "functions": [
        "HandlePlayerDeath",
        "RespawnPlayer"
      ]
    }
  ]
}