ORK Framework Logo - RPG Editor for Unity
  • ORK 4 BETA
  • Features
  • Guide
    • Documentation
    • Tutorials
    • API
  • ORK 2
    • Tutorials
    • Plugins
    • API
  • Support
  • Forum
  • Get ORK

ORK 3 Documentation

  • Getting Started
    • Introduction
    • First Steps
    • Game Starters
    • Components Overview
    • Player/Camera Controls
    • Game Over
    • Support: Sending Test Projects
  • Editor
    • Editor Overview
    • Base/Control Section
    • Game Section
    • UI Section
    • Templates Section
    • Status Section
    • Inventory Section
    • Combatants Section
    • Battles Section
  • Features
    • Animations
    • Areas & Teleports
    • Combatant Triggers
    • Control Maps
    • Difficulties
    • Factions
    • Formations
    • Formula Nodes
    • Logs
    • Loot
    • Move AI
    • Quests
    • Research Trees
    • Schematic Nodes
    • Shortcut Slots
  • Status System
    • Status Values
    • Status Effects
    • Attack/Defence Modifiers
    • Abilities
    • Combatants
    • Classes
    • Status Bonuses
    • Status Conditions
  • Inventory System
    • Inventory System Overview
    • Currencies
    • Items
    • Equipment
    • AI Behaviours/Rulesets
    • Crafting Recipes
    • Shops
  • Battle System
    • Battle Systems
    • Adding Battles to Scenes
    • Calculating Action Results
    • Battle Menus
    • Battle AI
    • Battle AI Nodes
    • Battle Ranges
    • Battle Camera
    • Target Selection
    • Battle Spots
    • Battle Texts
    • Battle End & Loot Dialogues
    • Action Combos
    • Damage Types
    • Cursor Prefab Components
    • Grid Battles
    • Adding Battle Grids to Scenes
    • Battle Grid Highlights
    • Battle Grid Formations
  • UI System
    • UI System Overview
    • Start Menu
    • Option Categories
    • Menu Screens
    • Notifications
    • Combatant Selections
    • Quantity Selections
    • Text Display Settings
    • Cursor Settings
    • Console (In-Game)
    • Menu Requirements
    • HUDs: Content Providers
    • HUDs: Conditions
    • HUDs: Click Actions
    • HUDs: Text Content
    • HUDs: Value Bar Content
    • HUDs: Status Values
    • HUDs: Status Effects
    • HUDs: Attack Modifiers
    • HUDs: Defence Modifiers
    • HUDs: Shortcuts
    • HUDs: Abilities
    • HUDs: Equipment
    • HUDs: Class Slots
    • HUDs: AI Behaviours
    • HUDs: AI Rulesets
    • HUDs: Quests
    • Timebar HUD
  • Scripting
    • Scripting Overview
    • Access Handler
    • Code Extensions
    • Custom Settings
    • Custom Targeting
    • Combatant Scripting
    • Custom Nodes
    • Custom Component Save Data

ORK 3 Tutorials

  • 2D RPG Quickstart
    • START 2D RPG Quickstart
    • 01 Initial Setup
    • 02 Player Setup
    • 03 Music & Scenes
    • 04 UI System Setup
    • 05 UI Boxes
    • 06 Flying Texts
    • 07 Status Values
    • 08 Status Effects
    • 09 First Abilities
    • 10 Fighter Setup
    • 11 First Enemies & Battle AI
    • 12 Battle System Setup
    • 13 Animating Battle Start and End
    • 14 Random Battles
    • 15 Animating Actions
    • 16 Player Battle HUD
    • 17 Elemental Attacks
    • 18 Animating More Actions
    • 19 Inventory & Loot
    • 20 Equipment
    • 21 Loot, Start Equipment & Viewers
    • 22 Magic Abilities
    • 23 Caster Setup
    • 24 More Enemies
    • 25 Start Menu & Save Games
    • 26 Menu Screens
    • 27 Interactions
    • 28 Item Collectors
    • END 2D RPG Quickstart
  • 3D RPG Quickstart
    • START 3D RPG Quickstart
    • 01 Initial Setup
    • 02 Player Setup
    • 03 Music & Scenes
    • 04 UI System Setup
    • 05 UI Boxes
    • 06 Flying Texts
    • 07 Status Values
    • 08 Status Effects
    • 09 First Abilities
    • 10 Fighter Setup
    • 11 First Enemies & Battle AI
    • 12 Battle System Setup
    • 13 Animating Battle Start and End
    • 14 Random Battles
    • 15 Animating Actions
    • 16 Player Battle HUD
    • 17 Elemental Attacks
    • 18 Animating More Actions
    • 19 Inventory & Loot
    • 20 Equipment
    • 21 Loot, Start Equipment & Viewers
    • 22 Magic Abilities
    • 23 Caster Setup
    • 24 More Enemies
    • 25 Start Menu & Save Games
    • 26 Menu Screens
    • 27 Interactions
    • 28 Item Collectors
    • END 3D RPG Quickstart
  • Status System Setup
    • START Status System Setup
    • 01 Status Values
    • 02 Status Development
    • 03 Attack/Defence Modifiers
    • 04 Status Effects
    • 05 Formulas
    • 06 Ability & Item Types
    • 07 Abilities Part 1: Attacks
    • 08 Abilities Part 2: Support & Sabotage
    • 09 Abilities Part 3: Elemental Magic
    • 10 Items
    • 11 Equipment Part 1: Slots & Slot Set Templates
    • 12 Equipment Part 2: Weapons
    • 12.5 (Optional) Equipment Part 2.5: Weapons
    • 13 Equipment Part 3: Shields, Armor & Accessories
    • 13.5 (Optional) Equipment Part 3.5: Shields, Armor & Accessories
    • 14 Equipment Part 4: Available Equipment Templates
    • 15 Loot
    • 16 Battle AIs
    • 17 Combatants Part 1: General Settings
    • 18 Combatants Part 2: Players
    • 19 Combatants Part 3: Enemies
    • 20 Combatant Groups
    • END Status System Setup
  • 3D RPG Playground
    • START 3D RPG Playground
    • 01 Player Setup
    • 02 Start Menu
    • 03 First Interaction
    • 04 Music
    • 05 Areas
    • 06 Collecting Items
    • 07 Displaying Equipment
    • 08 Combatant Prefabs, Icons & Portraits
    • 09 Combatant Animations
    • 10 Camera Positions
    • ANIM 01 Battle Start/End Schematics
    • ANIM 02 Use, Cast & Camera
    • ANIM 03 Abilities & Items
    • ANIM 04 Physical Attacks
    • ANIM 05 Special Actions
    • BATTLE 01 Battle Menu
    • BATTLE 02 Prepare for Battle
    • TURN 01 Turn Based Setup
    • TURN 02 Turn Order HUD
    • ATB 01 Active Time Setup
    • ATB 02 Cast Times
    • ATB 03 Timebar HUD
    • BATTLE 03 The First Battle
    • BATTLE 04 Hunting Move AI
    • BATTLE 05 Spawning Combatants
    • 11 Save Games
    • MENU 01 UI Boxes
    • MENU 02 Template HUDs
    • MENU 03 Overview Menu
    • MENU 04 Menu Screens
    • 12 Shop
    • BATTLE 06 Random Battles
    • DUNGEON 01 Enter the Dungeon
    • DUNGEON 02 The Trapdoor
    • DUNGEON 03 Enemies on Level 1 & 2
    • DUNGEON 04 Traps on Level 3
    • DUNGEON 05 Going Deeper
    • 13 Bestiary (+MENU+ANIM)
    • QUEST 01 Hunting Quests (+MENU)
    • QUEST 02 Guard NPC
    • QUEST 03 Forest Ruin Cheese
    • QUEST 04 Witch NPC with Cheese
    • QUEST 05 Quest Mark HUDs
    • 14 Research Trees (+MENU)
    • CRAFT 01 Crafting Materials
    • CRAFT 02 Crafting Recipes
    • CRAFT 03 Crafting Menu
    • CRAFT 04 Crafting Proficiency & Critical Crafting
    • CRAFT 05 Materials Loot
    • 15 Changing Choice Dialogue
    • 16 Follow Me!
    • BATTLE 07 Sequence Loot Dialogue
  • 3D Action RPG
    • START 3D Action RPG
    • 01 Status System Setup
    • 02 Player Setup
    • 03 Player Weapon
    • 04 Player Attacks
    • 05 Enemy: Chomper
    • 06 Chomper Attack
    • 07 Hit & Death
    • 08 HUDs
    • 09 Rolling on the Floor
    • 10 Enemy: Spitter
    • 11 Spit Attack
    • 12 Potion
    • 13 Grenade
    • 14 Item HUD
    • 15 Enemy: Grenadier
    • 16 Grenadier Melee Attacks
    • 17 Grenadier Flamethrower
    • 18 Item Drops
    • END 3D Action RPG
  • 2D Grid Battle RPG
    • START 2D Grid Battle RPG
    • 01 Player Setup
    • 02 Prefab & Music Setup
    • 03 Randomizing Combatants
    • 04 UI Setup
    • 05 Battle Start, End & Phase Schematics
    • 06 Battle System Setup
    • 07 Battle Grid Setup
    • 08 Grid Move
    • 09 Forest Battle Grid
    • 10 Battle AI
    • 11 Ability Ranges
    • 12 Death & Use Schematics
    • 13 Attack Schematic
    • 14 Shoot Schematics
    • 15 Battle Selection Interaction
    • END 2D Grid Battle RPG
  • Schematics
    • Simple Start Schematic
    • Battle Start Schematic
    • Battle End Schematic
    • Moving to Target and Back
    • Animating a Base Attack
    • Animating a Magic Ability
    • Animating Target Selection
    • Grid Movement
    • Open and Close UI Animations
    • Flying Text Mover
  • UI Setups
    • Unity UI: Initial Setup
    • Unity UI: TextMesh Pro Setup
    • Unity UI: UI Box
    • Unity UI: Flying Text
    • Unity UI: Dragging Notification
    • Unity UI: Canvas with Screen Space Camera
    • Unity UI: Interaction HUD
    • Unity UI: Simple Player HUD
    • Unity UI: Quest HUD
    • Unity UI: Battle Actions HUD
    • Unity UI: Shortcuts HUD
    • Unity UI: Currency HUD
    • Unity UI: Tooltip HUD
    • Unity UI: Control HUD
    • Unity UI: Attack Modifiers
    • Unity UI: Defence Modifiers
  • Gameplay Bits
    • 2.5D Setup
    • Body Part Weakpoint
    • Click Attack
    • Combining Input Origins
    • Combining Status Value Flying Texts
    • Fun With Flying Text
    • HUD Effects With Conditional Schematics
    • Inventory Containers
    • Local Multiplayer
    • Multi Interaction Controllers
    • Target Selection Lines
    • World Space HUD
    • World Space Dialogue
View Categories
  • Guide
  • ORK 3
  • ORK 3 Documentation
  • Scripting

Custom Settings

Add custom settings to various parts of ORK Framework with your own classes.

Custom settings are an easy way to add your own settings to the editor and functionality to the game. There are globally available settings (see global custom settings below) and as settings bound to separate instances of content (e.g. combatants or items, see custom settings below).

Global Custom Settings #

Global custom settings are available, as the name suggests, globally – i.e. from everywhere and at all times. They are set up in Base/Control > Global Custom Settings.

Each global custom setting will create it’s own in-game instance and will be saved with save games. When enabling Clear New Game, starting a new game will automatically create a new, clean instance when starting a new game (e.g. to remove any changes made to the instance by a previous game.

Using #

You can call custom functionality via the Use function of it’s implementation (see details in the scripting information below). The Use function can start different functionality based on the passed on parameters, e.g. via the info string parameter.

The function can be used without scripting by built-in functionality in schematics (Use Global Custom Settings node), menu screens (Use Global Custom Settings button type in Button List menu parts), abilities, items, status effects, battle menus, research items and body parts (Use Global Custom Settings status change type).

Beside using this, you can also implement custom nodes to call functionality (other than the Use function) of your global custom settings classes.

Scripting #

To add your own global custom settings, you need to write a custom class extending from BaseGlobalCustomSettingsType class.

The class has to implement the CreateInstance function, which returns in instance class implementing the IGlobalCustomSettingsInstance interface. Additionally, the class has to add the EditorSettingsInfo attribute to add editor information for the type selection dropdown of the global custom settings.

The instance class is used for keeping track of any in-game changes as well as saving and loading the data of the instance with save games.

Accessing #

Global custom settings can be accessed via ORK.GlobalCustomSettings, either getting a setting by it’s index in the editor or by using it’s GUID.

Via index:

int index = 0;
GlobalCustomSettings settings = ORK.GlobalCustomSettings.Get(index);

Via GUID:

string guid = "YOUR_GUID";
GlobalCustomSettings settings = ORK.GlobalCustomSettings.Get(guid);

You can access the in-game instance via the GlobalCustomSettings class by using the Instance property.

E.g. to cast it to a specific setting’s instance instead of the IGlobalCustomSettingsInstance interface:

DebugGlobalCustomSettingsType.Instance instance = ORK.GlobalCustomSettings.Get(index).Instance as DebugGlobalCustomSettingsType.Instance;
if(instance != null)
{
    // your code
}

Casting it to your specific class instance allows you to access other functionality beside the functions provided by the interface.

Initialization and Unloading #

Global custom settings instances don’t require a specific function for initializing it’s content – if you need to handle some custom setup, call this in the constructor of your instance class.

However, the instance requires the Unload function, which will be called when an old instance is replaced by a new instance (e.g. when loading a save game or starting a new game with creating a new instance). This function can be used to handle things to clean up an old instance, e.g. to remove event hooks.

Debug Class Example #

Below you can see the an example implementation of the Debug global custom settings type.

This class outputs a text to the console and increases a counter by 1 each time it’s used. The counter is saved with save games.

using UnityEngine;
using GamingIsLove.Makinom;
using System.Collections.Generic;

namespace GamingIsLove.ORKFramework
{
    [EditorSettingInfo("Debug", "Test implementation, outputs information on user and target to the console.\n" +
        "Each call to the 'Use' function will increase a counter, which can also be output to the console.")]
    public class DebugGlobalCustomSettingsType : BaseGlobalCustomSettingsType
    {
        [EditorHelp("Debug Type", "Select the debug type will be used:\n" +
            "- Log: Printed to 'Debug.Log'.\n" +
            "- Warning: Printed to 'Debug.LogWarning'.\n" +
            "- Error: Printed to 'Debug.LogError'.", "")]
        [EditorFoldout("Debug Settings", "")]
        public DebugType type = DebugType.Log;

        [EditorSeparator]
        public VariableOrigin<GameObjectSelection> variable = new VariableOrigin<GameObjectSelection>();

        [EditorHelp("Text", "The text that will be printed to the Unity console.", "")]
        [EditorEndFoldout]
        [EditorSeparator]
        [EditorTitleLabel("Console Output")]
        [EditorLabel("<user> = user information, <target> = target information\n" +
            "<count> = use counter, <info> = info text")]
        public TextContent text = new TextContent("<user>:<target>:<count>:<info>");

        public DebugGlobalCustomSettingsType()
        {

        }

        public override IGlobalCustomSettingsInstance CreateInstance()
        {
            return new Instance(this);
        }


        /*
        ============================================================================
        Instance class
        ============================================================================
        */
        public class Instance : IGlobalCustomSettingsInstance
        {
            protected DebugGlobalCustomSettingsType settings;

            protected int count = 0;

            public Instance(DebugGlobalCustomSettingsType settings)
            {
                this.settings = settings;
            }

            public virtual void Unload()
            {

            }

            public virtual void Use(object user, object target, string info, VariableHandler variables, SelectedDataHandler selectedData)
            {
                this.count++;

                UIText content = new UIText(this.settings.text, null, null,
                    this.settings.variable.GetFirstHandler(new DataCall(user, target, variables, selectedData)));
                content.Replace("<count>", ORK.TextDisplaySettings.numberFormatting.intNumberFormat.FormatInt(this.count));
                content.Replace("<user>", user is IContent ? ((IContent)user).GetName() : "" + user);
                content.Replace("<target>", target is IContent ? ((IContent)target).GetName() : "" + target);
                content.Replace("<info>", info);

                if(DebugType.Log == this.settings.type)
                {
                    Debug.Log(content.Text);
                }
                else if(DebugType.Warning == this.settings.type)
                {
                    Debug.LogWarning(content.Text);
                }
                else if(DebugType.Error == this.settings.type)
                {
                    Debug.LogError(content.Text);
                }
            }

            public virtual DataObject SaveGame()
            {
                DataObject data = new DataObject();
                data.Set("count", this.count);
                return data;
            }

            public virtual void LoadGame(DataObject data)
            {
                if(data != null)
                {
                    data.Get("count", ref this.count);
                }
            }
        }
    }
}

Custom Settings #

Custom settings can be added to combatants, classes, items, equipment, abilities and status effects.

Each instance of those contents will have their own instances of the added custom settings, e.g. each combatant has it’s own custom settings instances, each status effect added to a combatant has it’s own instances of it’s added custom settings.

The data of those instances are saved with the save data of the content they belong to, e.g. with a combatant, an item or equipment.

Using #

Using the correct custom settings of a content can depend on a settings key set up to identify it. Otherwise, the use is similar to global custom settings, i.e. you call the instance’s Use function.

The function can be used in schematics via the Use Custom Settings node and call it call it for content stored in selected data. Abilities, items and status effects can use the Use Custom Settings status change type to call their own instance’s Use function.

Beside using this, you can also implement custom nodes to call functionality (other than the Use function) of your custom settings classes.

Scripting #

To add your own custom settings, you need to write a custom class extending from BaseCustomSettingsType class.

The class has to implement the CreateInstance function, which returns in instance class implementing the ICustomSettingsInstance interface. Additionally, the class has to add the EditorSettingsInfo attribute to add editor information for the type selection dropdown of the custom settings.

The instance class is used for keeping track of any in-game changes as well as saving and loading the data of the instance with save games.

Accessing #

Since custom settings are bound to instances of content like combatants or items, they’re also accessed via those instances. Basically, everything implementing the ICustomSettings interface can give access to the instance of a custom setting added to it.

This is currently available in the following classes representing an instance of a content:

  • abilities via the AbilityShortcut class
  • classes via the ClassShortcut class
  • combatants via the Combatant class
  • equipment via the EquipShortcut class
  • items via the ItemShortcut class
  • status effects via the StatusEffect class

The ICustomSettings interface provides 2 functions to interact with the custom settings instance.

The UseCustomSettings function calls the Use function of the instance for a provided settings key, e.g. on an item (ItemShortcut class):

item.UseCustomSettings("key", user, target, "info", variables, selectedData);

The user and target parameters can be anything, e.g. a combatant, while the info string provides the context for the call. You can use it to call different functionality in your custom settings instance. Passing on variables or selected data is optional, e.g. pass on null if you don’t need them.

The GetCustomSettingsInstance function returns the instance of custom settings for a provided key, e.g. on a combatant (Combatant class):

DebugCustomSettingsType.Instance instance = combatant.GetCustomSettingsInstance("debug") as DebugCustomSettingsType.Instance;

The above example also casts the instance to a specific class implementation. If the returned instance doesn’t match the cast class type, the instance will be null.

Initialization #

Custom settings provide two initialization functions, the Init function for initialization of a new instance and the InitLoad function when initializing an instance before loading data from a save game. Both pass on the source they belong to, e.g. the instance of the combatant or item they’re bound to.

Debug Class Example #

Below you can see the an example implementation of the Debug custom settings type.

This class outputs a text to the console and increases a counter by 1 each time it’s used. The counter is saved with save games.

using UnityEngine;
using GamingIsLove.Makinom;
using System.Collections.Generic;

namespace GamingIsLove.ORKFramework
{
    [EditorSettingInfo("Debug", "Test implementation, outputs information on the instance, user and target to the console.\n" +
        "Each call to the 'Use' function will increase a counter, which can also be output to the console.")]
    public class DebugCustomSettingsType : BaseCustomSettingsType
    {
        [EditorHelp("Debug Type", "Select the debug type will be used:\n" +
            "- Log: Printed to 'Debug.Log'.\n" +
            "- Warning: Printed to 'Debug.LogWarning'.\n" +
            "- Error: Printed to 'Debug.LogError'.", "")]
        public DebugType type = DebugType.Log;

        [EditorSeparator]
        public VariableOrigin<GameObjectSelection> variable = new VariableOrigin<GameObjectSelection>();

        [EditorHelp("Text", "The text that will be printed to the Unity console.", "")]
        [EditorSeparator]
        [EditorTitleLabel("Console Output")]
        [EditorLabel("<count> = use counter, <content> = content information (e.g. item)\n" +
            "<user> = user information, <target> = target information\n" +
            "<info> = info text")]
        public TextContent text = new TextContent("<content>:<user>:<target>:<count>:<info>");

        public DebugCustomSettingsType()
        {

        }

        public override string ToString()
        {
            return "Debug";
        }

        public override ICustomSettingsInstance CreateInstance()
        {
            return new Instance(this);
        }


        /*
        ============================================================================
        Instance class
        ============================================================================
        */
        public class Instance : ICustomSettingsInstance
        {
            protected DebugCustomSettingsType settings;

            protected int count = 0;

            public Instance(DebugCustomSettingsType settings)
            {
                this.settings = settings;
            }

            public virtual void Init(object source)
            {

            }

            public virtual void InitLoad(object source)
            {

            }

            public virtual void Use(object source, object user, object target, string info, VariableHandler variables, SelectedDataHandler selectedData)
            {
                this.count++;

                UIText content = new UIText(this.settings.text, null, null, 
                    this.settings.variable.GetFirstHandler(new DataCall(user, target, variables, selectedData)));
                content.Replace("<count>", ORK.TextDisplaySettings.numberFormatting.intNumberFormat.FormatInt(this.count));
                content.Replace("<content>", source is IContent ? ((IContent)source).GetName() : "" + source);
                content.Replace("<user>", user is IContent ? ((IContent)user).GetName() : "" + user);
                content.Replace("<target>", target is IContent ? ((IContent)target).GetName() : "" + target);
                content.Replace("<info>", info);

                if(DebugType.Log == this.settings.type)
                {
                    Debug.Log(content.Text);
                }
                else if(DebugType.Warning == this.settings.type)
                {
                    Debug.LogWarning(content.Text);
                }
                else if(DebugType.Error == this.settings.type)
                {
                    Debug.LogError(content.Text);
                }
            }

            public virtual DataObject SaveGame()
            {
                DataObject data = new DataObject();
                data.Set("count", this.count);
                return data;
            }

            public virtual void LoadGame(DataObject data)
            {
                if(data != null)
                {
                    data.Get("count", ref this.count);
                }
            }
        }
    }
}

 

Scripting
Table of Contents
  • Global Custom Settings
    • Using
    • Scripting
      • Accessing
      • Initialization and Unloading
      • Debug Class Example
  • Custom Settings
    • Using
    • Scripting
      • Accessing
      • Initialization
      • Debug Class Example
Sitemap
  • ORK 4 BETA
  • Features
  • Showcase
  • Guide
    • Documentation
    • Tutorials
    • API
  • ORK 2 Hub
    • Tutorials
    • Plugins
    • API
  • Support
  • Forum
  • Get ORK
  • Contact
  • Blog
  • Makinom
  • gamingislove.com
Categories
  • News (73)
  • ORK 2 (137)
    • Tutorial (137)
      • Game tutorial (50)
      • Gameplay (32)
      • How-to (55)
  • Release (156)
Search

© 2015 Gaming is Love e.U.

Disclosure: This site may contain affiliate links, which means I may receive a commission if you click a link and purchase something that I have recommended. While clicking these links won’t cost you any money, they will help me fund my development projects while recommending great assets!