<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://silvematt.com/URPGCreationKitDocumentation/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Silvematt</id>
	<title>RPG Creation Kit - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://silvematt.com/URPGCreationKitDocumentation/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Silvematt"/>
	<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php/Special:Contributions/Silvematt"/>
	<updated>2026-07-26T05:37:39Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Main_Page&amp;diff=812</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Main_Page&amp;diff=812"/>
		<updated>2026-07-18T21:41:50Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Welcome to the RPG Creation Kit Documentation.&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Latest RPG Creation Kit Version: '''2.1.'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''If you're new to the RPG Creation Kit, see the:''' [[:Category:Getting Started|'''Getting Started''']] '''page.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Newest Tutorials'''&lt;br /&gt;
* [[Crafting &amp;amp; Enchanting]]&lt;br /&gt;
*[[Loot Tables]]&lt;br /&gt;
*[[What's new in the RPG Creation Kit 2|What's New in the RPG Creation Kit 2]]&lt;br /&gt;
*[[NPC Action Point|NPC Action Points]]&lt;br /&gt;
*[[Rck AI Editor]]&lt;br /&gt;
*[[Door|Doors]]&lt;br /&gt;
*[https://www.youtube.com/watch?v=llO1YsHaPtM &amp;lt;nowiki&amp;gt;[Video by OctoverseStudios] How to Add a New Race in RCK Using Synty Models&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
*[[Converting Materials to HDRP]]&lt;br /&gt;
*[[Creating a New Race]]&lt;br /&gt;
*[[Creating Your First Worldspace]]&lt;br /&gt;
*[[Changing the New Game Starting Location]]&lt;br /&gt;
*[[Creating a New Persistent Reference AI]]&lt;br /&gt;
*[[Creating a New Looting Point]]&lt;br /&gt;
*[[Adding New Animations to NPCs dialogues]]&lt;br /&gt;
*[[Creating a New Creature AI]]&lt;br /&gt;
*[[Creating a New Melee Weapon]]&lt;br /&gt;
*[[Creating a New Armor Item]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other''' '''Tutorials'''&lt;br /&gt;
&lt;br /&gt;
* [[Items Ownership, Metadata and Stealing]].&lt;br /&gt;
*[[Persistent References]]&lt;br /&gt;
*[[Mutable|Mutables]]&lt;br /&gt;
*[[Interactive Objects]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Special:AllPages|View All Documentation Pages]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Community Made Tutorials'''&lt;br /&gt;
&lt;br /&gt;
The page below contains all the links to videos and articles of tutorials made by the community for the community.&lt;br /&gt;
&lt;br /&gt;
* [[Community Made Tutorials]]&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Door&amp;diff=811</id>
		<title>Door</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Door&amp;diff=811"/>
		<updated>2026-07-18T21:41:44Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: /* Doors and the Save System */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Door !1.png|thumb|218x218px|A Door in the RPG Creation Kit. ]]&lt;br /&gt;
'''Doors''' are interactive Objects that the Player and NPCs can open, close and travel through. In the RPG Creation Kit there are two kinds of Doors:&lt;br /&gt;
&lt;br /&gt;
*'''Opening Doors:''' regular doors that simply open and close in place, playing an animation.&lt;br /&gt;
*'''Teleport Doors:''' doors that bring the Player and AI to another [[Cell]], such as the entrance of a house that leads to its Interior cell. These are what physically connects your world together.&lt;br /&gt;
&lt;br /&gt;
A Door is a GameObject with the '''&amp;quot;Door&amp;quot;''' component and the ''&amp;quot;RPG Creation Kit/Door&amp;quot;'' tag. You can find ready-to-use prefabs in ''Prefab Library/Doors/'' ('''WoodenDoor_Prefab''' and '''EmptyDoor''', which is useful as a starting point for your own new doors).&lt;br /&gt;
==The Door component==&lt;br /&gt;
[[File:Door 2.png|868x868px]]&lt;br /&gt;
*'''Obj Reference ID:''' the '''UNIQUE ID''' of this Door. It is used to register the Door in the Cell, to save its state, and to lock/unlock it from scripts. You can generate a new one by right-clicking on the component and selecting ''&amp;quot;Regenerate objReference&amp;quot;.''&lt;br /&gt;
*'''Persistent Reference / Persistent Reference ID:''' whether this Door is a [[Persistent References|Persistent Reference]], for the special cases where a Door has to be accessible at anytime (for example when an AI far away from it needs to use it).&lt;br /&gt;
*'''Animation:''' the Animation component of the door, it must contain an '''&amp;quot;Open&amp;quot;''' and a '''&amp;quot;Close&amp;quot;''' clip. Leave it blank for doors that don't physically open, like teleport doors.&lt;br /&gt;
*'''Ground Pivot:''' a point on the walkable surface in front of the door. It is the point an AI has to reach before being able to teleport to the linked cell. This can be blank, but if it is, the AI won't be able to use this door.&lt;br /&gt;
*'''Locked? / Lock Level / Key:''' see the Locked Doors section.&lt;br /&gt;
*'''Teleports? / To Cell / Teleport Marker:''' see the Teleport Doors section.&lt;br /&gt;
*'''Door Sounds:''' the AudioClips played when the door opens ('''Open'''), when it opens after being unlocked with the key ('''Unlocked Open'''), when the Player tries to open it while locked ('''Locked Open''') and when it closes ('''Close''').&lt;br /&gt;
*'''Linked Door:''' see the Teleport Doors section.&lt;br /&gt;
&lt;br /&gt;
==Opening Doors==&lt;br /&gt;
&lt;br /&gt;
An Opening Door is the simple case: the Player interacts with it and the &amp;quot;Open&amp;quot; or &amp;quot;Close&amp;quot; animation is played. All you have to set is the '''Animation''' reference and a unique '''Obj Reference ID'''. NPCs interact with these doors too: when an AI walking its path bumps into a closed Opening Door, it will play its open-door animation, force the door open and continue on its way.&lt;br /&gt;
&lt;br /&gt;
==Teleport Doors==&lt;br /&gt;
&lt;br /&gt;
A Teleport Door connects two Cells. When the Player uses it, the interaction text will show the destination (es, ''&amp;quot;E) Door to: Vera's Farmhouse&amp;quot;''), the destination Cell gets loaded and the Player appears next to the door on the other side. Setting one up goes like this:&lt;br /&gt;
&lt;br /&gt;
#Enable '''Teleports?''' and assign the destination Cell in '''To Cell'''.&lt;br /&gt;
#Once the To Cell is set, the '''Linked Door''' dropdown fills up with the Obj Reference IDs of all the Doors found in the destination Cell: pick the one this door is connected to. If the list looks outdated, press the refresh button next to it.&lt;br /&gt;
#Adjust the '''Teleport Marker''': it is where the Player will appear when arriving through the ''linked'' door, shown in the Scene View as a cube gizmo with a blue arrow pointing forward. Place it just in front of the door, on the ground, with the arrow facing away from it.&lt;br /&gt;
&lt;br /&gt;
Remember that the link goes both ways, so the door on the other side must be set up in the same manner, with its To Cell and Linked Door pointing back to this one (this is not strictly mandatory, but the only case I can think of not doing that would be some magical puzzle you'd want to make). &lt;br /&gt;
&lt;br /&gt;
The Teleport Marker child is created automatically when you add the Door component, so you only have to move it in place. The inspector also offers two extremely convenient buttons, '''View Linked Door''' and '''View Linked Teleport Marker''', which open the destination Cell and select the linked object for you, so you can check both sides of the connection without hunting for them manually.&lt;br /&gt;
&lt;br /&gt;
''Note: a Teleport Door doesn't need an Animation, the screen fades while the destination loads. You can leave the Animation field blank.''&lt;br /&gt;
&lt;br /&gt;
==Locked Doors and Keys==&lt;br /&gt;
&lt;br /&gt;
A Door can be '''Locked'''. When the Player tries to open a locked door:&lt;br /&gt;
&lt;br /&gt;
*If its inventory contains the '''Key''' (a [[Key Item]] assigned in the Key field), the door unlocks and opens, playing the '''Unlocked Open''' sound.&lt;br /&gt;
*If it doesn't, an [[Alert Message]] tells the Player he doesn't have the key, and the '''Locked Open''' sound is played.&lt;br /&gt;
&lt;br /&gt;
The '''Lock Level''' (from VeryEasy to Impossible) defines how hard the lock is. It is part of the door state and is stored in the SaveFile, but keep in mind that at the moment the Player can only get through a locked door with its Key. Maybe in a future update we'll have a lockpicking mechanic based on the Lock Level.&lt;br /&gt;
&lt;br /&gt;
Doors can also be locked and unlocked at runtime, without the Player being involved:&lt;br /&gt;
&lt;br /&gt;
*'''From a script:''' the [[RCKFunctions]] methods '''LockDoor(doorID, lockLevel)''' and '''UnlockDoor(doorID)''' work on any door, '''loaded or not''': if the door is not loaded, the SaveFile is edited directly, and the door will reflect the change the next time it loads. A good example is the ''CityInterior_LockShopsAtNight'' script of the Demo, which locks the doors of the shops during the night and unlocks them in the morning.&lt;br /&gt;
*'''From a Consequence:''' the [[Events And Consequences|Consequences System]] has the dedicated '''LockDoor''' and '''UnlockDoor''' Consequence types, so you can do the same from your quests without writing code.&lt;br /&gt;
&lt;br /&gt;
==Doors and the Save System==&lt;br /&gt;
&lt;br /&gt;
You don't have to do anything for doors to persist other than making sure every door has an '''UNIQUE Obj Reference ID.''' Every time a Door is opened, closed, locked or unlocked, its state ('''isOpened, isLocked, Lock Level''', even the current point of the animation) is saved in the SaveFile under its Obj Reference ID. When the Cell loads again, the door restores itself from that data, so a door left open stays open.&lt;br /&gt;
&lt;br /&gt;
Since the saved state of a Door is just a few variables, it is also the classic example of an object you can edit while it is '''not loaded.''' The LockDoor/UnlockDoor functions above create the save data on the fly if the Player has never interacted with that door. This is discussed more in depth in the [[Persistent References]] page.&lt;br /&gt;
&lt;br /&gt;
==Registering the Door in the Cell==&lt;br /&gt;
&lt;br /&gt;
Like the other objects with an ID, Doors are registered in the '''All Doors''' dictionary of the '''&amp;quot;Cell Information&amp;quot;''' component of their Cell. After placing your Doors, run [[Update the Cells|Update the Cell]] and they will be registered automatically by their Obj Reference ID. This registration is what allows the rest of the kit (RCKFunctions, Consequences, AI) to find a door by its ID, so don't forget it!&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Door&amp;diff=810</id>
		<title>Door</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Door&amp;diff=810"/>
		<updated>2026-07-18T21:40:33Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: Created page with &amp;quot;A Door in the RPG Creation Kit.  '''Doors''' are interactive Objects that the Player and NPCs can open, close and travel through. In the RPG Creation Kit there are two kinds of Doors:  *'''Opening Doors:''' regular doors that simply open and close in place, playing an animation. *'''Teleport Doors:''' doors that bring the Player and AI to another Cell, such as the entrance of a house that leads to its Interior cell. These are what...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Door !1.png|thumb|218x218px|A Door in the RPG Creation Kit. ]]&lt;br /&gt;
'''Doors''' are interactive Objects that the Player and NPCs can open, close and travel through. In the RPG Creation Kit there are two kinds of Doors:&lt;br /&gt;
&lt;br /&gt;
*'''Opening Doors:''' regular doors that simply open and close in place, playing an animation.&lt;br /&gt;
*'''Teleport Doors:''' doors that bring the Player and AI to another [[Cell]], such as the entrance of a house that leads to its Interior cell. These are what physically connects your world together.&lt;br /&gt;
&lt;br /&gt;
A Door is a GameObject with the '''&amp;quot;Door&amp;quot;''' component and the ''&amp;quot;RPG Creation Kit/Door&amp;quot;'' tag. You can find ready-to-use prefabs in ''Prefab Library/Doors/'' ('''WoodenDoor_Prefab''' and '''EmptyDoor''', which is useful as a starting point for your own new doors).&lt;br /&gt;
==The Door component==&lt;br /&gt;
[[File:Door 2.png|868x868px]]&lt;br /&gt;
*'''Obj Reference ID:''' the '''UNIQUE ID''' of this Door. It is used to register the Door in the Cell, to save its state, and to lock/unlock it from scripts. You can generate a new one by right-clicking on the component and selecting ''&amp;quot;Regenerate objReference&amp;quot;.''&lt;br /&gt;
*'''Persistent Reference / Persistent Reference ID:''' whether this Door is a [[Persistent References|Persistent Reference]], for the special cases where a Door has to be accessible at anytime (for example when an AI far away from it needs to use it).&lt;br /&gt;
*'''Animation:''' the Animation component of the door, it must contain an '''&amp;quot;Open&amp;quot;''' and a '''&amp;quot;Close&amp;quot;''' clip. Leave it blank for doors that don't physically open, like teleport doors.&lt;br /&gt;
*'''Ground Pivot:''' a point on the walkable surface in front of the door. It is the point an AI has to reach before being able to teleport to the linked cell. This can be blank, but if it is, the AI won't be able to use this door.&lt;br /&gt;
*'''Locked? / Lock Level / Key:''' see the Locked Doors section.&lt;br /&gt;
*'''Teleports? / To Cell / Teleport Marker:''' see the Teleport Doors section.&lt;br /&gt;
*'''Door Sounds:''' the AudioClips played when the door opens ('''Open'''), when it opens after being unlocked with the key ('''Unlocked Open'''), when the Player tries to open it while locked ('''Locked Open''') and when it closes ('''Close''').&lt;br /&gt;
*'''Linked Door:''' see the Teleport Doors section.&lt;br /&gt;
&lt;br /&gt;
==Opening Doors==&lt;br /&gt;
&lt;br /&gt;
An Opening Door is the simple case: the Player interacts with it and the &amp;quot;Open&amp;quot; or &amp;quot;Close&amp;quot; animation is played. All you have to set is the '''Animation''' reference and a unique '''Obj Reference ID'''. NPCs interact with these doors too: when an AI walking its path bumps into a closed Opening Door, it will play its open-door animation, force the door open and continue on its way.&lt;br /&gt;
&lt;br /&gt;
==Teleport Doors==&lt;br /&gt;
&lt;br /&gt;
A Teleport Door connects two Cells. When the Player uses it, the interaction text will show the destination (es, ''&amp;quot;E) Door to: Vera's Farmhouse&amp;quot;''), the destination Cell gets loaded and the Player appears next to the door on the other side. Setting one up goes like this:&lt;br /&gt;
&lt;br /&gt;
#Enable '''Teleports?''' and assign the destination Cell in '''To Cell'''.&lt;br /&gt;
#Once the To Cell is set, the '''Linked Door''' dropdown fills up with the Obj Reference IDs of all the Doors found in the destination Cell: pick the one this door is connected to. If the list looks outdated, press the refresh button next to it.&lt;br /&gt;
#Adjust the '''Teleport Marker''': it is where the Player will appear when arriving through the ''linked'' door, shown in the Scene View as a cube gizmo with a blue arrow pointing forward. Place it just in front of the door, on the ground, with the arrow facing away from it.&lt;br /&gt;
&lt;br /&gt;
Remember that the link goes both ways, so the door on the other side must be set up in the same manner, with its To Cell and Linked Door pointing back to this one (this is not strictly mandatory, but the only case I can think of not doing that would be some magical puzzle you'd want to make). &lt;br /&gt;
&lt;br /&gt;
The Teleport Marker child is created automatically when you add the Door component, so you only have to move it in place. The inspector also offers two extremely convenient buttons, '''View Linked Door''' and '''View Linked Teleport Marker''', which open the destination Cell and select the linked object for you, so you can check both sides of the connection without hunting for them manually.&lt;br /&gt;
&lt;br /&gt;
''Note: a Teleport Door doesn't need an Animation, the screen fades while the destination loads. You can leave the Animation field blank.''&lt;br /&gt;
&lt;br /&gt;
==Locked Doors and Keys==&lt;br /&gt;
&lt;br /&gt;
A Door can be '''Locked'''. When the Player tries to open a locked door:&lt;br /&gt;
&lt;br /&gt;
*If its inventory contains the '''Key''' (a [[Key Item]] assigned in the Key field), the door unlocks and opens, playing the '''Unlocked Open''' sound.&lt;br /&gt;
*If it doesn't, an [[Alert Message]] tells the Player he doesn't have the key, and the '''Locked Open''' sound is played.&lt;br /&gt;
&lt;br /&gt;
The '''Lock Level''' (from VeryEasy to Impossible) defines how hard the lock is. It is part of the door state and is stored in the SaveFile, but keep in mind that at the moment the Player can only get through a locked door with its Key. Maybe in a future update we'll have a lockpicking mechanic based on the Lock Level.&lt;br /&gt;
&lt;br /&gt;
Doors can also be locked and unlocked at runtime, without the Player being involved:&lt;br /&gt;
&lt;br /&gt;
*'''From a script:''' the [[RCKFunctions]] methods '''LockDoor(doorID, lockLevel)''' and '''UnlockDoor(doorID)''' work on any door, '''loaded or not''': if the door is not loaded, the SaveFile is edited directly, and the door will reflect the change the next time it loads. A good example is the ''CityInterior_LockShopsAtNight'' script of the Demo, which locks the doors of the shops during the night and unlocks them in the morning.&lt;br /&gt;
*'''From a Consequence:''' the [[Events And Consequences|Consequences System]] has the dedicated '''LockDoor''' and '''UnlockDoor''' Consequence types, so you can do the same from your quests without writing code.&lt;br /&gt;
&lt;br /&gt;
==Doors and the Save System==&lt;br /&gt;
&lt;br /&gt;
You don't have to do anything for doors to persist. Every time a Door is opened, closed, locked or unlocked, its state ('''isOpened, isLocked, Lock Level''', even the current point of the animation) is saved in the SaveFile under its Obj Reference ID. When the Cell loads again, the door restores itself from that data, so a door left open stays open.&lt;br /&gt;
&lt;br /&gt;
Since the saved state of a Door is just a few variables, it is also the classic example of an object you can edit while it is '''not loaded.''' The LockDoor/UnlockDoor functions above create the save data on the fly if the Player has never interacted with that door. This is discussed more in depth in the [[Persistent References]] page.&lt;br /&gt;
&lt;br /&gt;
==Registering the Door in the Cell==&lt;br /&gt;
&lt;br /&gt;
Like the other objects with an ID, Doors are registered in the '''All Doors''' dictionary of the '''&amp;quot;Cell Information&amp;quot;''' component of their Cell. After placing your Doors, run [[Update the Cells|Update the Cell]] and they will be registered automatically by their Obj Reference ID. This registration is what allows the rest of the kit (RCKFunctions, Consequences, AI) to find a door by its ID, so don't forget it!&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Door_2.png&amp;diff=809</id>
		<title>File:Door 2.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Door_2.png&amp;diff=809"/>
		<updated>2026-07-18T21:34:01Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;door_2&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Door_!1.png&amp;diff=808</id>
		<title>File:Door !1.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Door_!1.png&amp;diff=808"/>
		<updated>2026-07-18T21:32:54Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;door_!1&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Rck_AI_Editor&amp;diff=807</id>
		<title>Rck AI Editor</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Rck_AI_Editor&amp;diff=807"/>
		<updated>2026-07-18T12:51:40Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''Rck AI Editor''' is the tool used to create and edit the NPCs of your game. You can open it from the toolbar, under '''RPG Creation Kit &amp;gt; RckAI Editor'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Rckaieditor 1.png|583x583px]]&lt;br /&gt;
&lt;br /&gt;
In the RPG Creation Kit, NPCs exist as '''prefabs''' stored in ''Assets/RPG Creation Kit/Prefab Library/AI/''. The Rck AI Editor works directly on those prefabs: everything you change and save from this window is applied to the prefab itself, so every instance of that NPC placed in your [[Cell|Cells]] will reflect the changes.&lt;br /&gt;
&lt;br /&gt;
For a complete walkthrough on how to create an NPC and add it to the game, refer to the [[NPCs Creation]] tutorial. This page instead describes the editor itself and everything you can do with it.&lt;br /&gt;
&lt;br /&gt;
''Note: Creatures and Mounts have their own versions of this tool, the '''CreatureAI Editor''' and the '''MountAI Editor''', which you can find under the same menu. They work pretty much in the same way.''&lt;br /&gt;
&lt;br /&gt;
==The AI List==&lt;br /&gt;
&lt;br /&gt;
On the left side of the window you can find the list of all the RckAI prefabs of the project, ordered by their Entity ID. From here you can:&lt;br /&gt;
&lt;br /&gt;
*'''Search''' for a specific NPC by its Entity ID using the search bar (the bar turns yellow while a filter is active).&lt;br /&gt;
*'''Show/Hide the Demo Files''' with the &amp;quot;Show Demo Files?&amp;quot; toggle, so the NPCs of the Demo don't get in the way while you work on your own game.&lt;br /&gt;
*'''Refresh''' the list with the refresh button, in case you've added or removed prefabs outside of the editor.&lt;br /&gt;
&lt;br /&gt;
Clicking on an NPC selects it and loads it in the right side of the window, where you can edit it through the tabs. The '''Select Prefab''' button selects the prefab of the current NPC in the Project Window, in case you need to access it directly.&lt;br /&gt;
&lt;br /&gt;
By '''right-clicking''' on the list you can:&lt;br /&gt;
&lt;br /&gt;
*'''New:''' creates a new RckAI prefab with default settings, named ''[RckAI] NewRckAI''.&lt;br /&gt;
*'''Duplicate Selected:''' creates a copy of the selected NPC, appending &amp;quot;Copy&amp;quot; to its Entity ID.&lt;br /&gt;
*'''Delete Selected:''' deletes the selected NPC after a confirmation dialog. If the NPC was a [[Persistent References|Persistent Reference]], it is also unregistered automatically.&lt;br /&gt;
&lt;br /&gt;
==The RckAI Tab==&lt;br /&gt;
&lt;br /&gt;
This is the main tab, it defines who the NPC is:&lt;br /&gt;
&lt;br /&gt;
[[File:Rckaieditor 2.png|632x632px]]&lt;br /&gt;
&lt;br /&gt;
*'''Entity ID:''' the '''UNIQUE ID''' of this NPC. It is used to look it up in the AI Database, it names the prefab, and if the NPC is a Persistent Reference it is used as its Ref ID as well.&lt;br /&gt;
*'''Entity Name:''' the name of the NPC, it's what will be displayed in game.&lt;br /&gt;
*'''Race:''' the [[Creating a New Race|Race]] of this NPC.&lt;br /&gt;
*'''Is Male?:''' whether the NPC is male or female, it determines which model of the Race is used.&lt;br /&gt;
*'''Is Essential?:''' if enabled, this NPC can never die: when its health reaches 0 it will heal back to 100% of his health.&lt;br /&gt;
*'''Use Ragdoll?:''' whether the NPC uses a ragdoll when it dies or an animation.&lt;br /&gt;
*'''Persistent Reference?:''' whether this NPC is a [[Persistent References|Persistent Reference]]. You just have to tick this, the registration is handled automatically when you save.&lt;br /&gt;
*'''Animation Controller:''' the Animator Controller the NPC will use.&lt;br /&gt;
*'''Look At Enabled?:''' whether the NPC turns its head to look at things (the Player, other NPCs...).&lt;br /&gt;
*'''Looting Corpse?:''' whether the Player can loot the corpse of this NPC once it is dead. If enabled, '''Looting Equipment?''' also lets the Player take what the NPC had equipped.&lt;br /&gt;
*'''Helps members of same faction?:''' if enabled, the NPC will join the fight when a member of one of its [[Faction|Factions]] is attacked nearby.&lt;br /&gt;
&lt;br /&gt;
Below, the '''STATS''' section contains the Attributes and the Derived Attributes of the NPC. When you edit an Attribute (Strength, Constitution, Willpower...), the derived values such as Max Health, Max Mana, Max Stamina, Max Encumbrance and the Level of the NPC are '''recalculated automatically''' using the formulas defined in ''RCKSettings''. You can also see a preview of the '''Xp OnKill''', the amount of XP the Player will be awarded for killing this NPC, which you can adjust with the '''Xp Mult''' multiplier.&lt;br /&gt;
&lt;br /&gt;
==The Face Tab==&lt;br /&gt;
&lt;br /&gt;
This tab lets you customize the appearance of the NPC, it requires a Race to be assigned first.&lt;br /&gt;
&lt;br /&gt;
[[File:Rckaieditor 3.png]]&lt;br /&gt;
&lt;br /&gt;
On the left you can find the list of all the '''Face Blendshapes''' of the head model: select one and adjust it with the slider (from -100 to 100) while watching the result in the preview. The '''Random Face''' button generates a random combination of all the blendshapes, which is a nice starting point, while '''Reset Face''' sets everything back to zero.&lt;br /&gt;
&lt;br /&gt;
At the bottom you can pick the '''Hair''' and the '''Eyes''' of the NPC, chosen among the types defined in its Race.&lt;br /&gt;
&lt;br /&gt;
==The Inventory Tab==&lt;br /&gt;
&lt;br /&gt;
Here you define what the NPC owns and what it has equipped:&lt;br /&gt;
&lt;br /&gt;
[[File:Rckaeditori 5.png]]&lt;br /&gt;
&lt;br /&gt;
*'''Can be pick-pocketed?:''' whether the Player can attempt to pickpocket this NPC.&lt;br /&gt;
*'''Items:''' the content of the NPC's inventory.&lt;br /&gt;
*'''Set Ownership / Clear Ownership:''' these buttons set (or clear) the ownership metadata of every item in the inventory, marking them as owned by this NPC. See [[Items Ownership, Metadata and Stealing]] for what this implies.&lt;br /&gt;
*'''Equipped Items:''' the items the NPC has equipped. You can equip an item of the inventory by clicking the '''arrow button''' next to it, or remove one from the equipment with the '''X''' button.&lt;br /&gt;
&lt;br /&gt;
'''''Note: only equip Armors and Weapons, and have only one weapon and one armor piece equipped at a time.'''''&lt;br /&gt;
&lt;br /&gt;
==The Spells Tab==&lt;br /&gt;
&lt;br /&gt;
Here you can set the '''Spell In Use''' (the spell the NPC will cast in combat) and the list of the '''Spells''' this NPC knows.&lt;br /&gt;
&lt;br /&gt;
[[File:Rckeditorai 6.png]]&lt;br /&gt;
&lt;br /&gt;
==The Behaviour Tab==&lt;br /&gt;
&lt;br /&gt;
This tab defines how the NPC behaves in the world:&lt;br /&gt;
&lt;br /&gt;
[[File:Rckeditorai 7.png]]&lt;br /&gt;
&lt;br /&gt;
*'''Use BT?:''' whether this NPC uses [[Behaviour|Behaviour Trees]].&lt;br /&gt;
*'''Tick Rate:''' how often the Behaviour Tree is ticked (every frame, every X frames, or every X seconds in realtime or game time). NPCs that don't need to react quickly can use a slower tick rate to save performances.&lt;br /&gt;
*'''Purpose Behaviour:''' the Behaviour Tree the NPC runs while it is not in combat.&lt;br /&gt;
*'''Combat Behaviour:''' the Behaviour Tree the NPC runs while it is in combat.&lt;br /&gt;
&lt;br /&gt;
The '''Player Damage Tolerance''' settings define how forgiving the NPC is when the Player hits it:&lt;br /&gt;
&lt;br /&gt;
*'''PDT Hits:''' the amount of hits the NPC will tolerate from the Player before turning hostile.&lt;br /&gt;
*'''PDT Timeslice:''' the time window (in seconds) in which the hits are counted. If this time passes without reaching the amount of hits, the count is forgiven and starts over.&lt;br /&gt;
&lt;br /&gt;
Below, the '''DIALOGUE''' section:&lt;br /&gt;
&lt;br /&gt;
*'''Use Dialogue System?:''' whether this NPC can talk to others or be talked to.&lt;br /&gt;
*'''Current Dialogue:''' the [[Dialogues|Dialogue Graph]] the NPC is currently using.&lt;br /&gt;
*'''Default Dialogue:''' the Dialogue Graph the NPC will fall back to.&lt;br /&gt;
*'''Rotate towards?:''' whether the NPC rotates towards its interlocutor during a conversation.&lt;br /&gt;
*'''Follows outside of Cell?:''' whether the NPC can follow its target even outside of its Cell. It's generally used to chase the player between cells if he gets in a fight with an NPC.&lt;br /&gt;
&lt;br /&gt;
==The Factions Tab==&lt;br /&gt;
&lt;br /&gt;
Here you can set the list of [[Faction|Factions]] this NPC belongs to. Factions determine how the NPC reacts to the Player and to other NPCs, and who it will help in a fight.&lt;br /&gt;
&lt;br /&gt;
==Saving==&lt;br /&gt;
&lt;br /&gt;
At the bottom of the window there are three buttons: '''SAVE''', '''SAVE &amp;amp; CLOSE''' and '''CANCEL'''.&lt;br /&gt;
&lt;br /&gt;
It is important to understand that the editor works on a copy of the prefab loaded in memory, so '''nothing is applied until you press SAVE''' (or SAVE &amp;amp; CLOSE). Pressing CANCEL closes the window and discards everything you've changed since the last save.&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Alert_Message&amp;diff=806</id>
		<title>Alert Message</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Alert_Message&amp;diff=806"/>
		<updated>2026-07-18T11:35:30Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''Alert Message''' is the pop-up text used to notify the Player that something happened in the game. It's what appears on screen when you gain XP (&amp;quot;+100 XP&amp;quot;), when you receive items (&amp;quot;Iron Bow added!&amp;quot;), when you learn a new spell (&amp;quot;You learn: Fireball&amp;quot;) and in many other situations.&lt;br /&gt;
&lt;br /&gt;
[[File:Alertmsg 1.png]]&lt;br /&gt;
&lt;br /&gt;
The Alert Message is part of the Player's UI, you can find it inside the ''RckPlayer'' prefab, and it is exposed as a singleton ('''AlertMessage.instance'''), so it is accessible at anytime from anywhere in your code.&lt;br /&gt;
&lt;br /&gt;
==Showing an Alert Message from a script==&lt;br /&gt;
&lt;br /&gt;
To show an Alert Message, all you have to do is call '''InitAlertMessage()''' on the instance:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AlertMessage.instance.InitAlertMessage(&amp;quot;Here goes your message.&amp;quot;, AlertMessage.DEFAULT_MESSAGE_DURATION_MEDIUM);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The method takes the following parameters:&lt;br /&gt;
&lt;br /&gt;
*'''Text:''' the message to display.&lt;br /&gt;
*'''Duration:''' how long (in seconds) the message stays on screen. You can pass any value you want, but for consistency you may want to use one of the default durations defined in the AlertMessage class: '''DEFAULT_MESSAGE_DURATION_SHORT''' (1.5s), '''DEFAULT_MESSAGE_DURATION_MEDIUM''' (3s) and '''DEFAULT_MESSAGE_DURATION_LONG''' (5s).&lt;br /&gt;
*'''Allow Duplication (optional):''' see the section below.&lt;br /&gt;
&lt;br /&gt;
You can call it from any of your gameplay code: [[Item Script|Item Scripts]], [[Quest Script|Quest Scripts]], [[Result Scripts]] and so on. Since the duration runs on '''unscaled time''', the message will behave correctly even while the game is paused, for example when the Player has the inventory open.&lt;br /&gt;
&lt;br /&gt;
==The Alerts Queue==&lt;br /&gt;
&lt;br /&gt;
Only one Alert Message can be displayed at a time. If you init a message while another one is already on screen, the new one is not lost: it is added to a '''queue''', and it will be displayed as soon as the current one (and the ones queued before it) expires.&lt;br /&gt;
&lt;br /&gt;
There is one exception: if the message you are initing has the '''same text''' of the one currently displayed, it is discarded. This avoids stacking a wall of identical pop-ups when the Player repeats the same action quickly (buying five items in a row would queue five &amp;quot;Transaction Completed!&amp;quot; otherwise). If for some reason you do want the same message to be queued multiple times, pass '''true''' to the '''allowDuplication''' parameter.&lt;br /&gt;
&lt;br /&gt;
==Showing an Alert Message from a Consequence==&lt;br /&gt;
&lt;br /&gt;
You don't necessarily need a script to show an Alert Message: the [[Events And Consequences|Consequences System]] has a dedicated Consequence type for it, called '''AlertMessage'''.&lt;br /&gt;
&lt;br /&gt;
Just add a new Consequence, set its type to AlertMessage and fill the '''Alert Message''' text and the '''duration'''. When the Consequence fires, the pop-up will be displayed. See [[Creating A New Consequence]] if you don't know how Consequences work.&lt;br /&gt;
&lt;br /&gt;
Usually Alert Messages are mostly used with consequences inside the Dialogues:&lt;br /&gt;
&lt;br /&gt;
[[File:Alertmsg 2.png]]&lt;br /&gt;
&lt;br /&gt;
==Customizing the look==&lt;br /&gt;
&lt;br /&gt;
The pop-up itself is a UI element with an '''AlertMessageUIElement''' component, which simply holds a reference to the TextMeshPro text that gets filled with the message. To change how the Alert Message looks (font, size, position, background...), edit that UI element inside the ''RckPlayer'' prefab.&lt;br /&gt;
&lt;br /&gt;
==Alert Message vs Tutorial Alert Message==&lt;br /&gt;
&lt;br /&gt;
Don't confuse the Alert Message with the '''Tutorial Alert Message''': they are two different things.&lt;br /&gt;
&lt;br /&gt;
The Alert Message is a passive notification, it appears, stays on screen for its duration and disappears by itself, without ever interrupting the Player.&lt;br /&gt;
&lt;br /&gt;
The Tutorial Alert Message ('''TutorialAlertMessage.instance''') is the message box used for the tutorials of the Demo: calling '''OpenMessage()''' pauses the game, unlocks the cursor and displays a window that the Player has to close with a button before continuing. There is also an '''OpenMessageAfterDialogueEnds()''' version that waits for the current conversation to end before popping up. Use it when the Player really has to read what you are saying, and use the regular Alert Message for everything else.&lt;br /&gt;
&lt;br /&gt;
Here is an example of the Tutorial Alert Message in use:&lt;br /&gt;
&lt;br /&gt;
[[File:Tutorialalertmessage.png]]&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Alert_Message&amp;diff=805</id>
		<title>Alert Message</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Alert_Message&amp;diff=805"/>
		<updated>2026-07-18T11:35:22Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: Created page with &amp;quot;The '''Alert Message''' is the pop-up text used to notify the Player that something happened in the game. It's what appears on screen when you gain XP (&amp;quot;+100 XP&amp;quot;), when you receive items (&amp;quot;Iron Bow added!&amp;quot;), when you learn a new spell (&amp;quot;You learn: Fireball&amp;quot;) and in many other situations.  File:Alertmsg 1.pngThe Alert Message is part of the Player's UI, you can find it inside the ''RckPlayer'' prefab, and it is exposed as a singleton ('''AlertMessage.instance'''), so...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''Alert Message''' is the pop-up text used to notify the Player that something happened in the game. It's what appears on screen when you gain XP (&amp;quot;+100 XP&amp;quot;), when you receive items (&amp;quot;Iron Bow added!&amp;quot;), when you learn a new spell (&amp;quot;You learn: Fireball&amp;quot;) and in many other situations.&lt;br /&gt;
&lt;br /&gt;
[[File:Alertmsg 1.png]]The Alert Message is part of the Player's UI, you can find it inside the ''RckPlayer'' prefab, and it is exposed as a singleton ('''AlertMessage.instance'''), so it is accessible at anytime from anywhere in your code.&lt;br /&gt;
&lt;br /&gt;
==Showing an Alert Message from a script==&lt;br /&gt;
&lt;br /&gt;
To show an Alert Message, all you have to do is call '''InitAlertMessage()''' on the instance:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AlertMessage.instance.InitAlertMessage(&amp;quot;Here goes your message.&amp;quot;, AlertMessage.DEFAULT_MESSAGE_DURATION_MEDIUM);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The method takes the following parameters:&lt;br /&gt;
&lt;br /&gt;
*'''Text:''' the message to display.&lt;br /&gt;
*'''Duration:''' how long (in seconds) the message stays on screen. You can pass any value you want, but for consistency you may want to use one of the default durations defined in the AlertMessage class: '''DEFAULT_MESSAGE_DURATION_SHORT''' (1.5s), '''DEFAULT_MESSAGE_DURATION_MEDIUM''' (3s) and '''DEFAULT_MESSAGE_DURATION_LONG''' (5s).&lt;br /&gt;
*'''Allow Duplication (optional):''' see the section below.&lt;br /&gt;
&lt;br /&gt;
You can call it from any of your gameplay code: [[Item Script|Item Scripts]], [[Quest Script|Quest Scripts]], [[Result Scripts]] and so on. Since the duration runs on '''unscaled time''', the message will behave correctly even while the game is paused, for example when the Player has the inventory open.&lt;br /&gt;
&lt;br /&gt;
==The Alerts Queue==&lt;br /&gt;
&lt;br /&gt;
Only one Alert Message can be displayed at a time. If you init a message while another one is already on screen, the new one is not lost: it is added to a '''queue''', and it will be displayed as soon as the current one (and the ones queued before it) expires.&lt;br /&gt;
&lt;br /&gt;
There is one exception: if the message you are initing has the '''same text''' of the one currently displayed, it is discarded. This avoids stacking a wall of identical pop-ups when the Player repeats the same action quickly (buying five items in a row would queue five &amp;quot;Transaction Completed!&amp;quot; otherwise). If for some reason you do want the same message to be queued multiple times, pass '''true''' to the '''allowDuplication''' parameter.&lt;br /&gt;
&lt;br /&gt;
==Showing an Alert Message from a Consequence==&lt;br /&gt;
&lt;br /&gt;
You don't necessarily need a script to show an Alert Message: the [[Events And Consequences|Consequences System]] has a dedicated Consequence type for it, called '''AlertMessage'''.&lt;br /&gt;
&lt;br /&gt;
Just add a new Consequence, set its type to AlertMessage and fill the '''Alert Message''' text and the '''duration'''. When the Consequence fires, the pop-up will be displayed. See [[Creating A New Consequence]] if you don't know how Consequences work.&lt;br /&gt;
&lt;br /&gt;
Usually Alert Messages are mostly used with consequences inside the Dialogues:&lt;br /&gt;
&lt;br /&gt;
[[File:Alertmsg 2.png]]&lt;br /&gt;
&lt;br /&gt;
==Customizing the look==&lt;br /&gt;
&lt;br /&gt;
The pop-up itself is a UI element with an '''AlertMessageUIElement''' component, which simply holds a reference to the TextMeshPro text that gets filled with the message. To change how the Alert Message looks (font, size, position, background...), edit that UI element inside the ''RckPlayer'' prefab.&lt;br /&gt;
&lt;br /&gt;
==Alert Message vs Tutorial Alert Message==&lt;br /&gt;
&lt;br /&gt;
Don't confuse the Alert Message with the '''Tutorial Alert Message''': they are two different things.&lt;br /&gt;
&lt;br /&gt;
The Alert Message is a passive notification, it appears, stays on screen for its duration and disappears by itself, without ever interrupting the Player.&lt;br /&gt;
&lt;br /&gt;
The Tutorial Alert Message ('''TutorialAlertMessage.instance''') is the message box used for the tutorials of the Demo: calling '''OpenMessage()''' pauses the game, unlocks the cursor and displays a window that the Player has to close with a button before continuing. There is also an '''OpenMessageAfterDialogueEnds()''' version that waits for the current conversation to end before popping up. Use it when the Player really has to read what you are saying, and use the regular Alert Message for everything else.&lt;br /&gt;
&lt;br /&gt;
Here is an example of the Tutorial Alert Message in use:&lt;br /&gt;
&lt;br /&gt;
[[File:Tutorialalertmessage.png]]&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Tutorialalertmessage.png&amp;diff=804</id>
		<title>File:Tutorialalertmessage.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Tutorialalertmessage.png&amp;diff=804"/>
		<updated>2026-07-18T11:34:24Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;tutorialalertmessage&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Alertmsg_2.png&amp;diff=803</id>
		<title>File:Alertmsg 2.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Alertmsg_2.png&amp;diff=803"/>
		<updated>2026-07-18T11:32:32Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;alertmsg_2&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Alertmsg_1.png&amp;diff=802</id>
		<title>File:Alertmsg 1.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Alertmsg_1.png&amp;diff=802"/>
		<updated>2026-07-18T11:29:29Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;alertmsg_1&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Main_Page&amp;diff=801</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Main_Page&amp;diff=801"/>
		<updated>2026-07-18T11:24:53Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Welcome to the RPG Creation Kit Documentation.&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Latest RPG Creation Kit Version: '''2.1.'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''If you're new to the RPG Creation Kit, see the:''' [[:Category:Getting Started|'''Getting Started''']] '''page.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Newest Tutorials'''&lt;br /&gt;
* [[Crafting &amp;amp; Enchanting]]&lt;br /&gt;
*[[Loot Tables]]&lt;br /&gt;
*[[What's new in the RPG Creation Kit 2|What's New in the RPG Creation Kit 2]]&lt;br /&gt;
*[[NPC Action Point|NPC Action Points]]&lt;br /&gt;
*[[Rck AI Editor]]&lt;br /&gt;
*[https://www.youtube.com/watch?v=llO1YsHaPtM &amp;lt;nowiki&amp;gt;[Video by OctoverseStudios] How to Add a New Race in RCK Using Synty Models&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
*[[Converting Materials to HDRP]]&lt;br /&gt;
*[[Creating a New Race]]&lt;br /&gt;
*[[Creating Your First Worldspace]]&lt;br /&gt;
*[[Changing the New Game Starting Location]]&lt;br /&gt;
*[[Creating a New Persistent Reference AI]]&lt;br /&gt;
*[[Creating a New Looting Point]]&lt;br /&gt;
*[[Adding New Animations to NPCs dialogues]]&lt;br /&gt;
*[[Creating a New Creature AI]]&lt;br /&gt;
*[[Creating a New Melee Weapon]]&lt;br /&gt;
*[[Creating a New Armor Item]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other''' '''Tutorials'''&lt;br /&gt;
&lt;br /&gt;
* [[Items Ownership, Metadata and Stealing]].&lt;br /&gt;
*[[Persistent References]]&lt;br /&gt;
*[[Mutable|Mutables]]&lt;br /&gt;
*[[Interactive Objects]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Special:AllPages|View All Documentation Pages]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Community Made Tutorials'''&lt;br /&gt;
&lt;br /&gt;
The page below contains all the links to videos and articles of tutorials made by the community for the community.&lt;br /&gt;
&lt;br /&gt;
* [[Community Made Tutorials]]&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Rck_AI_Editor&amp;diff=800</id>
		<title>Rck AI Editor</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Rck_AI_Editor&amp;diff=800"/>
		<updated>2026-07-18T11:24:36Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: Created page with &amp;quot;The '''Rck AI Editor''' is the tool used to create and edit the NPCs of your game. You can open it from the toolbar, under '''RPG Creation Kit &amp;gt; RckAI Editor'''.  583x583px  In the RPG Creation Kit, NPCs exist as '''prefabs''' stored in ''Assets/RPG Creation Kit/Prefab Library/AI/''. The Rck AI Editor works directly on those prefabs: everything you change and save from this window is applied to the prefab itself, so every instance of that NPC p...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''Rck AI Editor''' is the tool used to create and edit the NPCs of your game. You can open it from the toolbar, under '''RPG Creation Kit &amp;gt; RckAI Editor'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Rckaieditor 1.png|583x583px]]&lt;br /&gt;
&lt;br /&gt;
In the RPG Creation Kit, NPCs exist as '''prefabs''' stored in ''Assets/RPG Creation Kit/Prefab Library/AI/''. The Rck AI Editor works directly on those prefabs: everything you change and save from this window is applied to the prefab itself, so every instance of that NPC placed in your [[Cell|Cells]] will reflect the changes.&lt;br /&gt;
&lt;br /&gt;
For a complete walkthrough on how to create an NPC and add it to the game, refer to the [[NPCs Creation]] tutorial. This page instead describes the editor itself and everything you can do with it.&lt;br /&gt;
&lt;br /&gt;
''Note: Creatures and Mounts have their own versions of this tool, the '''CreatureAI Editor''' and the '''MountAI Editor''', which you can find under the same menu. They work pretty much in the same way.''&lt;br /&gt;
&lt;br /&gt;
==The AI List==&lt;br /&gt;
&lt;br /&gt;
On the left side of the window you can find the list of all the RckAI prefabs of the project, ordered by their Entity ID. From here you can:&lt;br /&gt;
&lt;br /&gt;
*'''Search''' for a specific NPC by its Entity ID using the search bar (the bar turns yellow while a filter is active).&lt;br /&gt;
*'''Show/Hide the Demo Files''' with the &amp;quot;Show Demo Files?&amp;quot; toggle, so the NPCs of the Demo don't get in the way while you work on your own game.&lt;br /&gt;
*'''Refresh''' the list with the refresh button, in case you've added or removed prefabs outside of the editor.&lt;br /&gt;
&lt;br /&gt;
Clicking on an NPC selects it and loads it in the right side of the window, where you can edit it through the tabs. The '''Select Prefab''' button selects the prefab of the current NPC in the Project Window, in case you need to access it directly.&lt;br /&gt;
&lt;br /&gt;
By '''right-clicking''' on the list you can:&lt;br /&gt;
&lt;br /&gt;
*'''New:''' creates a new RckAI prefab with default settings, named ''[RckAI] NewRckAI''.&lt;br /&gt;
*'''Duplicate Selected:''' creates a copy of the selected NPC, appending &amp;quot;Copy&amp;quot; to its Entity ID.&lt;br /&gt;
*'''Delete Selected:''' deletes the selected NPC after a confirmation dialog. If the NPC was a [[Persistent References|Persistent Reference]], it is also unregistered automatically.&lt;br /&gt;
&lt;br /&gt;
==The RckAI Tab==&lt;br /&gt;
&lt;br /&gt;
This is the main tab, it defines who the NPC is:&lt;br /&gt;
&lt;br /&gt;
[[File:Rckaieditor 2.png|632x632px]]&lt;br /&gt;
&lt;br /&gt;
*'''Entity ID:''' the '''UNIQUE ID''' of this NPC. It is used to look it up in the AI Database, it names the prefab, and if the NPC is a Persistent Reference it is used as its Ref ID as well.&lt;br /&gt;
*'''Entity Name:''' the name of the NPC, it's what will be displayed in game.&lt;br /&gt;
*'''Race:''' the [[Creating a New Race|Race]] of this NPC.&lt;br /&gt;
*'''Is Male?:''' whether the NPC is male or female, it determines which model of the Race is used.&lt;br /&gt;
*'''Is Essential?:''' if enabled, this NPC can never die: when its health reaches 0 it will heal back to 100% of his health.&lt;br /&gt;
*'''Use Ragdoll?:''' whether the NPC uses a ragdoll when it dies or an animation.&lt;br /&gt;
*'''Persistent Reference?:''' whether this NPC is a [[Persistent References|Persistent Reference]]. You just have to tick this, the registration is handled automatically when you save.&lt;br /&gt;
*'''Animation Controller:''' the Animator Controller the NPC will use.&lt;br /&gt;
*'''Look At Enabled?:''' whether the NPC turns its head to look at things (the Player, other NPCs...).&lt;br /&gt;
*'''Looting Corpse?:''' whether the Player can loot the corpse of this NPC once it is dead. If enabled, '''Looting Equipment?''' also lets the Player take what the NPC had equipped.&lt;br /&gt;
*'''Helps members of same faction?:''' if enabled, the NPC will join the fight when a member of one of its [[Faction|Factions]] is attacked nearby.&lt;br /&gt;
&lt;br /&gt;
Below, the '''STATS''' section contains the Attributes and the Derived Attributes of the NPC. When you edit an Attribute (Strength, Constitution, Willpower...), the derived values such as Max Health, Max Mana, Max Stamina, Max Encumbrance and the Level of the NPC are '''recalculated automatically''' using the formulas defined in ''RCKSettings''. You can also see a preview of the '''Xp OnKill''', the amount of XP the Player will be awarded for killing this NPC, which you can adjust with the '''Xp Mult''' multiplier.&lt;br /&gt;
&lt;br /&gt;
==The Face Tab==&lt;br /&gt;
&lt;br /&gt;
This tab lets you customize the appearance of the NPC, it requires a Race to be assigned first.&lt;br /&gt;
&lt;br /&gt;
[[File:Rckaieditor 3.png]]On the left you can find the list of all the '''Face Blendshapes''' of the head model: select one and adjust it with the slider (from -100 to 100) while watching the result in the preview. The '''Random Face''' button generates a random combination of all the blendshapes, which is a nice starting point, while '''Reset Face''' sets everything back to zero.&lt;br /&gt;
&lt;br /&gt;
At the bottom you can pick the '''Hair''' and the '''Eyes''' of the NPC, chosen among the types defined in its Race.&lt;br /&gt;
&lt;br /&gt;
==The Inventory Tab==&lt;br /&gt;
&lt;br /&gt;
Here you define what the NPC owns and what it has equipped:&lt;br /&gt;
&lt;br /&gt;
[[File:Rckaeditori 5.png]]&lt;br /&gt;
&lt;br /&gt;
*'''Can be pick-pocketed?:''' whether the Player can attempt to pickpocket this NPC.&lt;br /&gt;
*'''Items:''' the content of the NPC's inventory.&lt;br /&gt;
*'''Set Ownership / Clear Ownership:''' these buttons set (or clear) the ownership metadata of every item in the inventory, marking them as owned by this NPC. See [[Items Ownership, Metadata and Stealing]] for what this implies.&lt;br /&gt;
*'''Equipped Items:''' the items the NPC has equipped. You can equip an item of the inventory by clicking the '''arrow button''' next to it, or remove one from the equipment with the '''X''' button.&lt;br /&gt;
&lt;br /&gt;
'''''Note: only equip Armors and Weapons, and have only one weapon and one armor piece equipped at a time.'''''&lt;br /&gt;
&lt;br /&gt;
==The Spells Tab==&lt;br /&gt;
&lt;br /&gt;
Here you can set the '''Spell In Use''' (the spell the NPC will cast in combat) and the list of the '''Spells''' this NPC knows.&lt;br /&gt;
&lt;br /&gt;
[[File:Rckeditorai 6.png]]&lt;br /&gt;
&lt;br /&gt;
==The Behaviour Tab==&lt;br /&gt;
&lt;br /&gt;
This tab defines how the NPC behaves in the world:&lt;br /&gt;
&lt;br /&gt;
[[File:Rckeditorai 7.png]]&lt;br /&gt;
&lt;br /&gt;
*'''Use BT?:''' whether this NPC uses [[Behaviour|Behaviour Trees]].&lt;br /&gt;
*'''Tick Rate:''' how often the Behaviour Tree is ticked (every frame, every X frames, or every X seconds in realtime or game time). NPCs that don't need to react quickly can use a slower tick rate to save performances.&lt;br /&gt;
*'''Purpose Behaviour:''' the Behaviour Tree the NPC runs while it is not in combat.&lt;br /&gt;
*'''Combat Behaviour:''' the Behaviour Tree the NPC runs while it is in combat.&lt;br /&gt;
&lt;br /&gt;
The '''Player Damage Tolerance''' settings define how forgiving the NPC is when the Player hits it:&lt;br /&gt;
&lt;br /&gt;
*'''PDT Hits:''' the amount of hits the NPC will tolerate from the Player before turning hostile.&lt;br /&gt;
*'''PDT Timeslice:''' the time window (in seconds) in which the hits are counted. If this time passes without reaching the amount of hits, the count is forgiven and starts over.&lt;br /&gt;
&lt;br /&gt;
Below, the '''DIALOGUE''' section:&lt;br /&gt;
&lt;br /&gt;
*'''Use Dialogue System?:''' whether this NPC can talk to others or be talked to.&lt;br /&gt;
*'''Current Dialogue:''' the [[Dialogues|Dialogue Graph]] the NPC is currently using.&lt;br /&gt;
*'''Default Dialogue:''' the Dialogue Graph the NPC will fall back to.&lt;br /&gt;
*'''Rotate towards?:''' whether the NPC rotates towards its interlocutor during a conversation.&lt;br /&gt;
*'''Follows outside of Cell?:''' whether the NPC can follow its target even outside of its Cell. It's generally used to chase the player between cells if he gets in a fight with an NPC.&lt;br /&gt;
&lt;br /&gt;
==The Factions Tab==&lt;br /&gt;
&lt;br /&gt;
Here you can set the list of [[Faction|Factions]] this NPC belongs to. Factions determine how the NPC reacts to the Player and to other NPCs, and who it will help in a fight.&lt;br /&gt;
&lt;br /&gt;
==Saving==&lt;br /&gt;
&lt;br /&gt;
At the bottom of the window there are three buttons: '''SAVE''', '''SAVE &amp;amp; CLOSE''' and '''CANCEL'''.&lt;br /&gt;
&lt;br /&gt;
It is important to understand that the editor works on a copy of the prefab loaded in memory, so '''nothing is applied until you press SAVE''' (or SAVE &amp;amp; CLOSE). Pressing CANCEL closes the window and discards everything you've changed since the last save.&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Rckeditorai_7.png&amp;diff=799</id>
		<title>File:Rckeditorai 7.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Rckeditorai_7.png&amp;diff=799"/>
		<updated>2026-07-18T11:21:53Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;rckeditorai_7&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Rckeditorai_6.png&amp;diff=798</id>
		<title>File:Rckeditorai 6.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Rckeditorai_6.png&amp;diff=798"/>
		<updated>2026-07-18T11:21:22Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;rckeditorai_6&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Rckaeditori_5.png&amp;diff=797</id>
		<title>File:Rckaeditori 5.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Rckaeditori_5.png&amp;diff=797"/>
		<updated>2026-07-18T11:19:42Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;rckaeditori_5&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Rckaieditor_3.png&amp;diff=796</id>
		<title>File:Rckaieditor 3.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Rckaieditor_3.png&amp;diff=796"/>
		<updated>2026-07-18T11:18:54Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;rckaieditor_3&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Rckaieditor_2.png&amp;diff=795</id>
		<title>File:Rckaieditor 2.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Rckaieditor_2.png&amp;diff=795"/>
		<updated>2026-07-18T11:15:00Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;rckaieditor_2&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Rckaieditor_1.png&amp;diff=794</id>
		<title>File:Rckaieditor 1.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Rckaieditor_1.png&amp;diff=794"/>
		<updated>2026-07-18T11:02:42Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;rckaieditor_1&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Main_Page&amp;diff=793</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Main_Page&amp;diff=793"/>
		<updated>2026-07-18T10:55:26Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Welcome to the RPG Creation Kit Documentation.&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Latest RPG Creation Kit Version: '''2.1.'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''If you're new to the RPG Creation Kit, see the:''' [[:Category:Getting Started|'''Getting Started''']] '''page.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Newest Tutorials'''&lt;br /&gt;
* [[Crafting &amp;amp; Enchanting]]&lt;br /&gt;
*[[Loot Tables]]&lt;br /&gt;
*[[What's new in the RPG Creation Kit 2|What's New in the RPG Creation Kit 2]]&lt;br /&gt;
*[[NPC Action Point|NPC Action Points]]&lt;br /&gt;
*[https://www.youtube.com/watch?v=llO1YsHaPtM &amp;lt;nowiki&amp;gt;[Video by OctoverseStudios] How to Add a New Race in RCK Using Synty Models&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
*[[Converting Materials to HDRP]]&lt;br /&gt;
*[[Creating a New Race]]&lt;br /&gt;
*[[Creating Your First Worldspace]]&lt;br /&gt;
*[[Changing the New Game Starting Location]]&lt;br /&gt;
*[[Creating a New Persistent Reference AI]]&lt;br /&gt;
*[[Creating a New Looting Point]]&lt;br /&gt;
*[[Adding New Animations to NPCs dialogues]]&lt;br /&gt;
*[[Creating a New Creature AI]]&lt;br /&gt;
*[[Creating a New Melee Weapon]]&lt;br /&gt;
*[[Creating a New Armor Item]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other''' '''Tutorials'''&lt;br /&gt;
&lt;br /&gt;
* [[Items Ownership, Metadata and Stealing]].&lt;br /&gt;
*[[Persistent References]]&lt;br /&gt;
*[[Mutable|Mutables]]&lt;br /&gt;
*[[Interactive Objects]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Special:AllPages|View All Documentation Pages]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Community Made Tutorials'''&lt;br /&gt;
&lt;br /&gt;
The page below contains all the links to videos and articles of tutorials made by the community for the community.&lt;br /&gt;
&lt;br /&gt;
* [[Community Made Tutorials]]&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=NPC_Action_Point&amp;diff=792</id>
		<title>NPC Action Point</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=NPC_Action_Point&amp;diff=792"/>
		<updated>2026-07-18T10:54:55Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: Created page with &amp;quot;An NPC Action Point placed in the first dungeon that allows the NPC to rest on a chair. '''NPC Action Points''' are special Objects placed in the world that NPCs can use to '''perform actions''', such as sitting on a chair, leaning on a wall or a counter, working on a farm or sleeping in a bed.  They are what makes NPCs feel alive while they are not doing anything else, instead of standing still or wandering around, an NPC can reach...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Actionp 1.png|thumb|260x260px|An NPC Action Point placed in the first dungeon that allows the NPC to rest on a chair.]]&lt;br /&gt;
'''NPC Action Points''' are special Objects placed in the world that NPCs can use to '''perform actions''', such as sitting on a chair, leaning on a wall or a counter, working on a farm or sleeping in a bed.&lt;br /&gt;
&lt;br /&gt;
They are what makes NPCs feel alive while they are not doing anything else, instead of standing still or wandering around, an NPC can reach an Action Point, play an animation on it and stay there until its [[Behaviour]] tells it to do something else.&lt;br /&gt;
&lt;br /&gt;
You can find some ready-to-use Action Points in the '''Prefab Library''', such as ''NPCActionPoint_Farm001'', ''NPCActionPoint_LeanOnCounter'', ''NPCActionPoint_LeanOnWallFromFront'' and ''Chair04_ActionPoint,'' and you can obviously create your own with your custom animations.&lt;br /&gt;
&lt;br /&gt;
==How Action Points work==&lt;br /&gt;
&lt;br /&gt;
An Action Point is a GameObject with the '''&amp;quot;NPC Action Point&amp;quot;''' component attached to it. When an NPC is told to use an Action Point (usually from its Behaviour Tree), the following happens:&lt;br /&gt;
&lt;br /&gt;
#The NPC walks to the '''Pivot Point''' of the Action Point using the NavMesh.&lt;br /&gt;
#Once it is close enough, the NPC gets fixed in place, its position and rotation are adjusted to match exactly the Pivot Point.&lt;br /&gt;
#The NPC plays the '''Npc Action''' animation (for example, the sitting down animation).&lt;br /&gt;
#In the AI's Animator, the Npc Action will finish playing and go straight to a single (or multiple) idle loop animations.&lt;br /&gt;
#When the NPC has to leave the point, it plays the '''Npc Action Return''' animation (for example, getting up from the chair) and returns to its normal behaviour.&lt;br /&gt;
&lt;br /&gt;
While an NPC is using or reaching an Action Point, the point is flagged as '''occupied''', so no other NPC will pick it. If the NPC enters in combat while reaching or using the point, he will stop using the Action Point and go into the combat behavior.&lt;br /&gt;
&lt;br /&gt;
==The NPC Action Point component==&lt;br /&gt;
&lt;br /&gt;
[[File:Actionp 2.png|861x861px]]&lt;br /&gt;
*'''Action Point ID:''' the '''UNIQUE ID''' of this Action Point, it is used to register the point in the [[Cell]] and to reference it from Behaviour Trees. You can generate a new one by right-clicking on the component and selecting '''&amp;quot;Regenerate ID&amp;quot;'''.&lt;br /&gt;
*'''Action Type:''' the type of action this point represents ('''Rest, Eat, Sleep, Mount'''). It acts as a tag, so it is possible to search for points of a given type (for example, an NPC that wants to find a place to Eat).&lt;br /&gt;
*'''Show Dummies:''' if enabled, the Dummies will be shown in the Scene View while the Action Point is selected (see the section below).&lt;br /&gt;
*'''Dummy First Keyframe / Dummy Last Keyframe:''' references to the two Dummies used to preview the animation in the Editor.&lt;br /&gt;
*'''Is Occupied:''' runtime flag that states whether an NPC is currently using (or reaching) this point.&lt;br /&gt;
*'''Pivot Point:''' the transform the NPC will be placed on before playing the animation. '''The placement of the Pivot Point is what makes the animation look right''', if your NPC sits in the air or inside the chair, this is what you have to adjust.&lt;br /&gt;
*'''Npc Action:''' the animation the NPC plays when it starts using the point (sitting down, leaning on the wall...).&lt;br /&gt;
*'''Npc Action Return:''' the animation the NPC plays when it stops using the point (getting up, detaching from the wall...).&lt;br /&gt;
*'''Entity Using This Point:''' runtime reference to the Entity that is currently using this point.&lt;br /&gt;
*'''Spawn Dynamic Object:''' if enabled, a Dynamic Object will be spawned in one of the NPC's hands while it is performing the action (see the Dynamic Objects section).&lt;br /&gt;
As you may have noticed, the &amp;quot;loop&amp;quot; animation that plays after the Npc Action is nowhere to be seen here. That (or those) are set in the TPSBase Animator itself:&lt;br /&gt;
&lt;br /&gt;
[[File:Npcaction 3.png|960x960px]]&lt;br /&gt;
&lt;br /&gt;
==Placing an Action Point with the Dummies==&lt;br /&gt;
&lt;br /&gt;
Placing an Action Point by trial and error would be pretty tedious, you would have to enter Play Mode every time just to check if the NPC sits correctly. This is what the '''Dummies''' are for.&lt;br /&gt;
&lt;br /&gt;
An Action Point has two Dummies as children: one is sampled at the '''first keyframe''' of the Npc Action animation, the other one at the '''last keyframe'''. With '''Show Dummies''' enabled, selecting the Action Point in the Scene View will show you exactly where the NPC will stand when it starts the action and where it will end up once the animation is over.&lt;br /&gt;
&lt;br /&gt;
[[File:Actionp 1.png|260x260px]]&lt;br /&gt;
&lt;br /&gt;
So, to place an Action Point on a chair for example, all you have to do is drag one of the prefabs near the chair, select it, and move it until the last keyframe Dummy sits correctly on the chair. The Dummies are automatically disabled when the game starts, so you don't have to worry about them being visible in game.&lt;br /&gt;
&lt;br /&gt;
==Registering the Action Point in the Cell==&lt;br /&gt;
&lt;br /&gt;
Action Points live inside [[Cell|Cells]], and every Cell holds a dictionary of all the Action Points it contains (you can see it in the '''&amp;quot;Cell Information&amp;quot;''' component, in the '''All Action Points''' dictionary). NPCs will search this dictionary when they are looking for a point to use.&lt;br /&gt;
&lt;br /&gt;
You do not have to fill this dictionary by hand, after placing your Action Points in the Cell, simply run [[Update the Cells|Update the Cell]] and they will be registered automatically by their Action Point ID.&lt;br /&gt;
&lt;br /&gt;
''Note: Make sure every point has a unique ID, you can use the &amp;quot;Regenerate ID&amp;quot; context menu for that.''&lt;br /&gt;
&lt;br /&gt;
==Making an NPC use an Action Point==&lt;br /&gt;
&lt;br /&gt;
NPCs use Action Points through their [[Behaviour|Behaviour Trees]].&lt;br /&gt;
&lt;br /&gt;
You'll probably only want to switch their Behavior Tree to one of these Behaviors:&lt;br /&gt;
&lt;br /&gt;
* '''SBTP_UseCurrentActionPoint:''' The NPC will go and use the Action Point that he has assigned in his RckAI component.&lt;br /&gt;
* '''SBTP_UseCurrentActionPointNoLookAt:''' Same thing as above, but the LookAt will be disabled for the AI using the action point (used for example on the blacksmith, to avoid him move his body if someone gets closer and mess the animation).&lt;br /&gt;
* Something like '''SBPT_FarmersLeftVirrhiael01''': where you can assign an array of actions points and the NPCs will randomly pick some.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Behaviors will be calling one of the following methods with an '''Invoke Method''' node:&lt;br /&gt;
&lt;br /&gt;
*'''GetAndUseActionPoint:''' the NPC asks its current Cell for a '''random unoccupied''' Action Point and uses it. If every point of the Cell is occupied, the flag '''failedGettingActionPoint''' is set to true, so you can handle this case in the Behaviour Tree.&lt;br /&gt;
*'''UseCurrentActionPoint:''' the NPC uses the Action Point that is currently assigned in the '''Action Point''' field of its AI Movements. This is useful when you want a specific NPC to always use a specific point, like the farmers of the Demo.&lt;br /&gt;
*'''UseArrayActionPoint:''' takes an array of Action Point IDs as parameter, the NPC will pick a random unoccupied point among them. Useful when an NPC should choose between a set of points you've defined (for example, only the chairs of the tavern and not the leaning on the counter action).&lt;br /&gt;
*'''StopUsingNPCActionPoint:''' the NPC leaves the point, playing the Npc Action Return animation. If the ''immediate'' parameter is set to true, the NPC will skip the return animation and go back to its locomotion instantly.&lt;br /&gt;
*'''StopUsingNPCActionPointImmediate:''' same as above with immediate always true, in case you cannot pass a parameter.&lt;br /&gt;
&lt;br /&gt;
You can also check flags such as '''isReachingActionPoint''', '''isUsingActionPoint''', '''leavingActionPoint''' and '''failedGettingActionPoint''' in your Behaviour Trees conditions to know at which state of the process the NPC is.&lt;br /&gt;
&lt;br /&gt;
==Dynamic Objects==&lt;br /&gt;
&lt;br /&gt;
Some actions look much better with a prop in the NPC's hands, think of the farmers of the Demo working the fields with their farming tool or the blacksmith working on his weapons with his hammer. That tool does not exist in the NPC's inventory, it is a '''Dynamic Object''' spawned by the Action Point itself.&lt;br /&gt;
&lt;br /&gt;
[[File:Crafting.png|595x595px]]&lt;br /&gt;
&lt;br /&gt;
To set it up, enable '''Spawn Dynamic Object''' and set:&lt;br /&gt;
&lt;br /&gt;
*'''Dynamic Object:''' the prefab to spawn (the tool, like DoSmithingHammerPrefab). Its Prefab position should be set such that it will be correctly placed to the choosen Dynamic Object Bone.&lt;br /&gt;
*'''Dynamic Object Bone:''' the hand where the object will be attached ('''Rhand''' or '''Lhand''').&lt;br /&gt;
*'''Dynamic Object Sound:''' an optional AudioClip to play during the action (requires the Dynamic Object to have an AudioSource).&lt;br /&gt;
*'''Dynamic Object Particles:''' optional particles to play during the action.&lt;br /&gt;
&lt;br /&gt;
The spawning is driven by '''Animation Events''' placed on the Npc Action animation clip, so that the object appears and plays sounds and particles in sync with the animation. The events you can call are: ''DynamicObjectStartAnimationEvent'', ''DynamicObjectEndAnimationEvent'', ''DynamicObjectPlaySoundAnimationEvent'' and ''DynamicObjectPlayParticlesEvent''. You can see how they are placed by looking at the animation used by the Blacksmith:&lt;br /&gt;
&lt;br /&gt;
* '''DoSmithingEnter:''' will have ''DynamicObjectStartAnimationEvent'' that will allow us to spawn the Dynamic Object.&lt;br /&gt;
* '''DoSmithingLoop:''' will have ''DynamicObjectPlaySoundAnimationEvent'' to play a sound at a certain frame, and  ''DynamicObjectPlayParticlesEvent'' to fire the particles at a certain frame.&lt;br /&gt;
* '''DoSmithingRelease:''' will have ''DynamicObjectEndAnimationEvent'' to destroy the Dynamic Object.&lt;br /&gt;
&lt;br /&gt;
==Scripting custom Action Points==&lt;br /&gt;
&lt;br /&gt;
The NPC Action Point component exposes a few virtual methods you can override to create your own kind of Action Point for more complex scenarios:&lt;br /&gt;
&lt;br /&gt;
*'''OnUserAssigned:''' called as soon as an NPC picks this point, so when it starts reaching it (it does not mean it is using it yet).&lt;br /&gt;
*'''OnUserUses:''' called when the NPC starts playing the enter animation on the point.&lt;br /&gt;
*'''OnUserIsLeaving:''' called when the NPC starts playing the return animation.&lt;br /&gt;
*'''OnUserHasLeft:''' called when the NPC has completely been released from the point.&lt;br /&gt;
*'''OnUserForceLeaves:''' called when the NPC gets reset and should no longer reach or use the point (for example, when it enters in combat).&lt;br /&gt;
&lt;br /&gt;
A good example of this inside the kit is the '''Mountup Point''', which is a special Action Point placed on Mounts that NPCs use to get on the saddle. Note that Mountup Points are excluded from the Cell's Action Points dictionary, they are handled by the Mounts system.&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Crafting.png&amp;diff=791</id>
		<title>File:Crafting.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Crafting.png&amp;diff=791"/>
		<updated>2026-07-18T10:50:27Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Crafting&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Npcaction_3.png&amp;diff=790</id>
		<title>File:Npcaction 3.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Npcaction_3.png&amp;diff=790"/>
		<updated>2026-07-18T10:43:31Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;npcaction_3&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Actionp_2.png&amp;diff=789</id>
		<title>File:Actionp 2.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Actionp_2.png&amp;diff=789"/>
		<updated>2026-07-18T10:36:06Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;actionp_2&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Actionp_1.png&amp;diff=788</id>
		<title>File:Actionp 1.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Actionp_1.png&amp;diff=788"/>
		<updated>2026-07-18T10:31:42Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;actionp_1&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Crafting_%26_Enchanting&amp;diff=787</id>
		<title>Crafting &amp; Enchanting</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Crafting_%26_Enchanting&amp;diff=787"/>
		<updated>2026-07-18T00:46:57Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: Created page with &amp;quot;In this tutorial we are going to take a look at the new '''Crafting''' and '''Enchanting''' systems, features that came with '''Update 2.1'''.   Crafting allows the Player to turn ingredients into new items at a Crafting Station, Enchanting allows the Player to apply magical effects to weapons and armors at an Enchanting Station. Both systems are recipe based, so all you have to do is create the recipe assets and place a station in the world.  ==How...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial we are going to take a look at the new '''Crafting''' and '''Enchanting''' systems, features that came with '''Update 2.1'''. &lt;br /&gt;
&lt;br /&gt;
Crafting allows the Player to turn ingredients into new items at a Crafting Station, Enchanting allows the Player to apply [[Effect On Entity|magical effects]] to weapons and armors at an Enchanting Station. Both systems are recipe based, so all you have to do is create the recipe assets and place a station in the world.&lt;br /&gt;
&lt;br /&gt;
==How Crafting Works==&lt;br /&gt;
&lt;br /&gt;
A Crafting Recipe is an asset that describes an output item and the ingredients needed to create it. The Player interacts with a Crafting Station in the world, selects one of the recipes available on that station, chooses how many times to craft it and presses the craft button. The ingredients are removed from his Inventory and the output item is added to it.&lt;br /&gt;
&lt;br /&gt;
The ingredients can also be stolen items, in that case the stolen ones are consumed first, and the crafted item is always &amp;quot;clean&amp;quot; (see [[Items Ownership, Metadata and Stealing]]).&lt;br /&gt;
&lt;br /&gt;
==Creating a Crafting Recipe==&lt;br /&gt;
&lt;br /&gt;
Right click in the Project Window and select '''Create &amp;gt; RPG Creation Kit &amp;gt; Crafting &amp;gt; New Crafting Recipe'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Craft 1.png|816x816px]]&lt;br /&gt;
&lt;br /&gt;
For each recipe you can set:&lt;br /&gt;
&lt;br /&gt;
*'''Recipe ID''': the unique ID of the recipe.&lt;br /&gt;
*'''Recipe Name''': the name shown in the crafting UI.&lt;br /&gt;
*'''Recipe Icon''': the icon shown in the crafting UI.&lt;br /&gt;
*'''Output Item''': the item the Player will receive.&lt;br /&gt;
*'''Output Amount''': how many of the output item are given per craft.&lt;br /&gt;
*'''Ingredients''': the list of the required items, for each one you can set the item and the amount.&lt;br /&gt;
'''Important''': after creating a Crafting Recipe, you have to [[Databases|update the database]].&lt;br /&gt;
&lt;br /&gt;
==Creating a Crafting Station==&lt;br /&gt;
&lt;br /&gt;
Now we need a station in the world where the Player can use our recipes. Take any 3D Model, such as a forge or a cooking pot, and:&lt;br /&gt;
&lt;br /&gt;
1) Set its Tag to &amp;quot;RPG Creation Kit/Crafting Station&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
2) Add a Physical Collider (non-trigger) to it.&lt;br /&gt;
&lt;br /&gt;
3) Add a &amp;quot;Crafting Station&amp;quot; component to it.&lt;br /&gt;
&lt;br /&gt;
The component has the following fields:&lt;br /&gt;
&lt;br /&gt;
[[File:Craft 2.png|807x807px]]&lt;br /&gt;
&lt;br /&gt;
*'''Station ID''': the unique ID of the station.&lt;br /&gt;
*'''Station Name''': the name shown at the top of the crafting panel.&lt;br /&gt;
*'''On Use Sound''': the sound played when the Player opens the station.&lt;br /&gt;
*'''Available Recipes''': the list of the Crafting Recipes this station offers.&lt;br /&gt;
&lt;br /&gt;
Different stations can offer different recipes, so you can have a forge that crafts weapons and a cooking pot that crafts food, just by referencing different recipes in this list. You can also have different stations with different recipes, and exploit the use of [[Mutable|Mutables]] to mutate stations into more powerful ones, for example as the player progresses in the game.&lt;br /&gt;
&lt;br /&gt;
At this point, it is a good idea to make this object a Prefab, so when you want to add a new station you will only have to set its unique ID.&lt;br /&gt;
&lt;br /&gt;
Looking at the station in game will show the interact prompt, pressing it opens the crafting panel. The panel shows all the recipes of the station, you can search them by name, and for each ingredient you will see how many you have and how many you need (in green if you have enough, in red if you don't). &lt;br /&gt;
&lt;br /&gt;
With the + and - buttons you can craft the same recipe multiple times at once.&lt;br /&gt;
&lt;br /&gt;
[[File:Craft 3.png|932x932px]]&lt;br /&gt;
&lt;br /&gt;
==How Enchanting Works==&lt;br /&gt;
&lt;br /&gt;
Enchanting applies an '''Enchanting Recipe''' to a weapon or an armor of the Player. An enchanted item:&lt;br /&gt;
&lt;br /&gt;
*Gets a suffix appended to its name, for example &amp;quot;Iron Helmet&amp;quot; becomes &amp;quot;Iron Helmet of the Magi&amp;quot;.&lt;br /&gt;
*Grants its effects to the Player as long as the item is equipped.&lt;br /&gt;
*Gets its value increased, both in the inventory and in the merchant prices.&lt;br /&gt;
*Shows an enchanted icon in the inventory, and it will not stack with non-enchanted copies of the same item.&lt;br /&gt;
&lt;br /&gt;
An item can only have one enchantment. The enchantment is stored on the item itself, so it survives saving and loading, dropping the item in the world, selling it to a merchant and buying it back.&lt;br /&gt;
&lt;br /&gt;
==Creating an Enchanting Recipe==&lt;br /&gt;
&lt;br /&gt;
Right click in the Project Window and select '''Create &amp;gt; RPG Creation Kit &amp;gt; Enchanting &amp;gt; New Enchanting Recipe'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Craft 5.png|844x844px]]&lt;br /&gt;
&lt;br /&gt;
For each recipe you can set:&lt;br /&gt;
&lt;br /&gt;
*'''Recipe ID''': the unique ID of the recipe.&lt;br /&gt;
*'''Recipe Name''': the name shown in the enchanting UI.&lt;br /&gt;
*'''Recipe Icon''': the icon shown in the enchanting UI.&lt;br /&gt;
*'''Enchantment Suffix''': the text appended to the name of the enchanted item.&lt;br /&gt;
*'''Added Value''': golds added to the base value of the item while it is enchanted.&lt;br /&gt;
*'''Applies To''': if the recipe can be applied to Weapons, Armors or Both.&lt;br /&gt;
*'''Ingredients''': the materials consumed from the Inventory when enchanting.&lt;br /&gt;
*'''Effects''': the constant effects granted while the enchanted item is equipped. Only the Fortify and Damage types are allowed (Attribute, Health, Stamina and Mana), the duration is ignored since the effect is constant.&lt;br /&gt;
*'''Items Granted On Disenchant''': the items that may be given back to the Player when the item is disenchanted, each entry has its own probability (0-100%).&lt;br /&gt;
&lt;br /&gt;
'''Important''': after creating an Enchanting Recipe, you have to [[Databases|update the database]].&lt;br /&gt;
&lt;br /&gt;
==Creating an Enchanting Station==&lt;br /&gt;
&lt;br /&gt;
The Enchanting Station works exactly like the Crafting Station:&lt;br /&gt;
&lt;br /&gt;
1) Set the Tag of your 3D Model to &amp;quot;RPG Creation Kit/Enchanting Station&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
2) Add a Physical Collider (non-trigger) to it.&lt;br /&gt;
&lt;br /&gt;
3) Add an &amp;quot;Enchanting Station&amp;quot; component to it.&lt;br /&gt;
&lt;br /&gt;
[[File:Craft 6.png|915x915px]]&lt;br /&gt;
&lt;br /&gt;
The component has the following fields:&lt;br /&gt;
&lt;br /&gt;
*'''Station ID''': the unique ID of the station.&lt;br /&gt;
*'''Station Name''': the name shown at the top of the enchanting panel.&lt;br /&gt;
*'''On Use Sound''': the sound played when the Player opens the station.&lt;br /&gt;
*'''On Enchanted Sound''': the sound played when an item is enchanted.&lt;br /&gt;
*'''On Disenchanted Sound''': the sound played when an item is disenchanted.&lt;br /&gt;
*'''Available Recipes''': the list of the Enchanting Recipes this station offers.&lt;br /&gt;
&lt;br /&gt;
==Enchanting and Disenchanting In Game==&lt;br /&gt;
&lt;br /&gt;
The enchanting panel has two tabs.&lt;br /&gt;
&lt;br /&gt;
[[File:Craft 4.png|959x959px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the '''Enchant''' tab the left list shows all the weapons and armors of the Player that can be enchanted, the right list shows the recipes of the station that are compatible with the selected item. For each ingredient you will see how many you have and how many you need, and the recipes you can afford are shown first.&lt;br /&gt;
&lt;br /&gt;
In the '''Disenchant''' tab you can select an enchanted item and destroy it to get back some of the materials, based on the &amp;quot;Items Granted On Disenchant&amp;quot; of its recipe. '''Equipped items are not shown in this list''', you have to unequip them first. Disenchanting destroys the item.&lt;br /&gt;
&lt;br /&gt;
If you want to prevent a specific item from being enchanted (such as a quest item or the torch), just disable the '''Is Enchantable''' checkbox on the item asset.&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Craft_6.png&amp;diff=786</id>
		<title>File:Craft 6.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Craft_6.png&amp;diff=786"/>
		<updated>2026-07-18T00:44:53Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;craft_6&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Craft_5.png&amp;diff=785</id>
		<title>File:Craft 5.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Craft_5.png&amp;diff=785"/>
		<updated>2026-07-18T00:42:35Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;craft_5&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Craft_4.png&amp;diff=784</id>
		<title>File:Craft 4.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Craft_4.png&amp;diff=784"/>
		<updated>2026-07-18T00:38:35Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;craft_4&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Craft_3.png&amp;diff=783</id>
		<title>File:Craft 3.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Craft_3.png&amp;diff=783"/>
		<updated>2026-07-18T00:34:38Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;craft_3&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Craft_2.png&amp;diff=782</id>
		<title>File:Craft 2.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Craft_2.png&amp;diff=782"/>
		<updated>2026-07-18T00:31:15Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;craft_2&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Craft_1.png&amp;diff=781</id>
		<title>File:Craft 1.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Craft_1.png&amp;diff=781"/>
		<updated>2026-07-18T00:30:12Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;craft_1&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Effect_On_Entity&amp;diff=780</id>
		<title>Effect On Entity</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Effect_On_Entity&amp;diff=780"/>
		<updated>2026-07-18T00:16:17Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: Created page with &amp;quot;In this page we are going to take a look at &amp;lt;nowiki&amp;gt;''Effects On Entity''&amp;lt;/nowiki&amp;gt;, the system the RPG Creation Kit uses to alter the Health, Stamina, Mana and Attributes of an entity. If you ever made a Health Potion, a poison or an enchanted sword, you already used them. Effects are a building block used all over the kit, so it is a good idea to understand how they work.  ==Where Effects Are Used==  You will find an &amp;quot;Effects&amp;quot; list in three places mainly:  *'''Consumabl...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this page we are going to take a look at &amp;lt;nowiki&amp;gt;''Effects On Entity''&amp;lt;/nowiki&amp;gt;, the system the RPG Creation Kit uses to alter the Health, Stamina, Mana and Attributes of an entity. If you ever made a Health Potion, a poison or an enchanted sword, you already used them. Effects are a building block used all over the kit, so it is a good idea to understand how they work.&lt;br /&gt;
&lt;br /&gt;
==Where Effects Are Used==&lt;br /&gt;
&lt;br /&gt;
You will find an &amp;quot;Effects&amp;quot; list in three places mainly:&lt;br /&gt;
&lt;br /&gt;
*'''Consumable Items''': the effects are executed on the entity that uses the item, this is how potions and food work.&lt;br /&gt;
*'''Spells''': a spell has two lists, &amp;quot;On Caster Effects&amp;quot; executed on who casts the spell, and &amp;quot;On Target Effects&amp;quot; executed on who is hit by it.&lt;br /&gt;
*'''Enchanting Recipes''': the effects are constant and stay active as long as the enchanted item is equipped (see [[Crafting &amp;amp; Enchanting]]).&lt;br /&gt;
&lt;br /&gt;
Effects work on any entity that has an &amp;quot;Entity Attributes&amp;quot; component, so they apply to the Player but also to NPCs and creatures.&lt;br /&gt;
&lt;br /&gt;
==The Fields==&lt;br /&gt;
&lt;br /&gt;
[[File:Eoe 1.png|773x773px]]&lt;br /&gt;
&lt;br /&gt;
For each effect you can set:&lt;br /&gt;
&lt;br /&gt;
*'''Effect Type''': what the effect does, see the list below.&lt;br /&gt;
*'''On Attribute''': only used by the Attribute types, it is the attribute to alter (Strength, Dexterity, Agility, Constitution, Speed, Endurance, Charisma...).&lt;br /&gt;
*'''Duration''': the duration of the effect in seconds, see below since the meaning changes a bit depending on the type.&lt;br /&gt;
*'''Magnitude''': the strength of the effect, how many points are added, removed or recovered.&lt;br /&gt;
*'''Icon''': the icon shown in the effects UI.&lt;br /&gt;
*'''Show In Effects UI''': if the effect should appear in the effects UI of the Player.&lt;br /&gt;
&lt;br /&gt;
==Effect Types==&lt;br /&gt;
&lt;br /&gt;
The types are divided in three families, each one available for Health, Stamina, Mana and Attributes.&lt;br /&gt;
&lt;br /&gt;
===Restore===&lt;br /&gt;
&lt;br /&gt;
Restore recovers the current value, it is the classic potion effect. With a Duration of 0 the whole Magnitude is recovered instantly, with a Duration greater than 0 the Magnitude is spread over the seconds of the duration, so a &amp;quot;Restore Health&amp;quot; with Magnitude 50 and Duration 5 heals 10 points per second for 5 seconds. Restore used on an attribute is not really used or useful as of now.&lt;br /&gt;
&lt;br /&gt;
===Fortify===&lt;br /&gt;
&lt;br /&gt;
Fortify temporarily raises a value: the Max Health, Max Stamina, Max Mana or an Attribute is increased by the Magnitude as soon as the effect starts, and Duration expires. A &amp;quot;Fortify Strength&amp;quot; with Magnitude 5 and Duration 60 gives +5 Strength for one minute.&lt;br /&gt;
&lt;br /&gt;
If you set the Duration to 0, the bonus is applied instantly and never removed, so you can use it to create permanent rewards, such as an elixir that gives +1 Str, or an Ogre Root (if you get this reference, you're a real one!).&lt;br /&gt;
&lt;br /&gt;
===Damage===&lt;br /&gt;
&lt;br /&gt;
Damage is the opposite:&lt;br /&gt;
*'''Damage Health / Stamina / Mana''' lower Magnitude spread over the Duration exactly like Restore. This is how you make a poison that deals its damage over several seconds. With a Duration of 0 the whole damage is applied instantly.&lt;br /&gt;
*'''Damage Attribute''' lowers an Attribute by the Magnitude for the Duration, then gives it back, like a curse that weakens the target for a while.&lt;br /&gt;
&lt;br /&gt;
==The Effects UI==&lt;br /&gt;
&lt;br /&gt;
[[File:Eoe 2.png]]&lt;br /&gt;
&lt;br /&gt;
When an effect with a duration is running, it can show on screen in the effects UI and the active effects are also listed in the &amp;quot;Active Effects&amp;quot; section of the Character tab of the inventory. The icon is not referenced directly, but by its ID in the Icons Database. &lt;br /&gt;
&lt;br /&gt;
So if you want  a new icon for your effect, remember add it first to the &amp;quot;Icons Database File&amp;quot; asset otherwise the icon will not be found in the dropdown list:&lt;br /&gt;
&lt;br /&gt;
[[File:Eoe 3.png|911x911px]]&lt;br /&gt;
&lt;br /&gt;
Two things to keep in mind:&lt;br /&gt;
*Effects are paused while the game is pause out a poison by sitting in the inventory or any other menu.&lt;br /&gt;
*Active effects are written on the Save File, so an effect that is halfway through its duration will resume from that point when the game is loaded.&lt;br /&gt;
&lt;br /&gt;
==A Note About Enchantments==&lt;br /&gt;
Enchanting Recipes only accept the Fortify and Damage types, because the effect of an enchantment is constant: it is applied when the item is equipped and removed when it is unequipped, and the Duration is ignored. &amp;quot;Restore&amp;quot; types cannot be used.&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Eoe_3.png&amp;diff=779</id>
		<title>File:Eoe 3.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Eoe_3.png&amp;diff=779"/>
		<updated>2026-07-18T00:09:21Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;eoe_3&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Eoe_2.png&amp;diff=778</id>
		<title>File:Eoe 2.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Eoe_2.png&amp;diff=778"/>
		<updated>2026-07-18T00:06:47Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;eoe_2&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Eoe_1.png&amp;diff=777</id>
		<title>File:Eoe 1.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Eoe_1.png&amp;diff=777"/>
		<updated>2026-07-18T00:00:42Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;eoe_1&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Loot_Tables&amp;diff=776</id>
		<title>Loot Tables</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Loot_Tables&amp;diff=776"/>
		<updated>2026-07-17T23:52:33Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: Created page with &amp;quot;In this tutorial we are going to take a look at the new '''Loot Tables''', which allow you to fill your Looting Points (chests, corpses, containers) with randomly generated items instead of placing every item by hand. You can also make the loot scale with the level of the Player.  ==How Loot Tables Work==  A Loot Table is an asset that describes what a container ''may'' contain. When the Player opens a Looting Point for the first time, th...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial we are going to take a look at the new '''Loot Tables''', which allow you to fill your [[Creating a New Looting Point|Looting Points]] (chests, corpses, containers) with randomly generated items instead of placing every item by hand. You can also make the loot scale with the level of the Player.&lt;br /&gt;
&lt;br /&gt;
==How Loot Tables Work==&lt;br /&gt;
&lt;br /&gt;
A Loot Table is an asset that describes what a container ''may'' contain. When the Player opens a Looting Point for the first time, the table is rolled and the result is placed inside its Inventory. The roll happens only once: the result is written on the Save File, so if the Player closes and reopens the container he will always find the same items.&lt;br /&gt;
&lt;br /&gt;
There are two types of assets:&lt;br /&gt;
&lt;br /&gt;
*'''Loot Table''': a list of guaranteed items plus a pool of random picks based on weights.&lt;br /&gt;
*'''Leveled Loot Table''': a set of Loot Tables divided in level brackets (for example levels 1-10 use one table, 11-20 another one). When it is rolled, it will use the table of the bracket that matches the current level of the Player.&lt;br /&gt;
&lt;br /&gt;
A Loot Table can also contain other Loot Tables: an entry of the pool can point to another table instead of an item. This is very useful to create for example a generic &amp;quot;Random Potion&amp;quot; table and reuse it in many different chest tables.&lt;br /&gt;
&lt;br /&gt;
==Creating a Loot Table==&lt;br /&gt;
&lt;br /&gt;
Right click in the Project Window and select '''Create &amp;gt; RPG Creation Kit &amp;gt; Loot &amp;gt; New Loot Table'''.&lt;br /&gt;
&lt;br /&gt;
The inspector has two sections:&lt;br /&gt;
&lt;br /&gt;
[[File:Loottable 1.png|805x805px]]&lt;br /&gt;
&lt;br /&gt;
===Always Granted===&lt;br /&gt;
&lt;br /&gt;
The items you put in the &amp;quot;Guaranteed Items&amp;quot; list are added every time the table is rolled. For each entry you can set:&lt;br /&gt;
&lt;br /&gt;
*'''Item''': the item to grant.&lt;br /&gt;
*'''Min Amount / Max Amount''': the amount is picked randomly between these two values. If you set Min Amount to 0, sometimes the entry will grant nothing.&lt;br /&gt;
&lt;br /&gt;
===Weighted Rolls===&lt;br /&gt;
&lt;br /&gt;
This is the random part of the table:&lt;br /&gt;
&lt;br /&gt;
*'''Rolls Min / Rolls Max''': how many times the pool is rolled. Each roll picks one entry from the pool.&lt;br /&gt;
*'''Pool''': the list of the possible picks. For each entry you can set:&lt;br /&gt;
**'''Item''': the item granted if this entry is picked. Set this OR Nested Table, not both.&lt;br /&gt;
**'''Nested Table''': another Loot Table to roll instead of granting an item. If you set this, the nested table is rolled with its own settings, and the Min/Max Amount of this entry are ignored.&lt;br /&gt;
**'''Weight''': how likely this entry is compared to the others. Weights are relative, they are not percentages: if you have two entries with weight 3 and weight 1, the first one is picked 75% of the times. An entry with weight 0 is never picked.&lt;br /&gt;
**'''Min Amount / Max Amount''': the amount granted when this entry is picked.&lt;br /&gt;
&lt;br /&gt;
Be aware about circular dependency (table A contains table B which contains table A), the Editor will warn you in the Console and the roll will stop at 8 levels of depth instead of freezing the game.&lt;br /&gt;
&lt;br /&gt;
==Testing a Table==&lt;br /&gt;
&lt;br /&gt;
You don't need to enter Play Mode to test your table: right click on the Loot Table component in the inspector and select &amp;quot;Test Roll&amp;quot;. The rolled items and amounts will be printed in the Console. Roll it a few times to get an idea of what the table produces.&lt;br /&gt;
&lt;br /&gt;
[[File:Loottable 2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Loottable 3.png]]&lt;br /&gt;
&lt;br /&gt;
==Creating a Leveled Loot Table==&lt;br /&gt;
&lt;br /&gt;
Right click in the Project Window and select '''Create &amp;gt; RPG Creation Kit &amp;gt; Loot &amp;gt; New Leveled Loot Table'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Loottable 4.png|916x916px]]&lt;br /&gt;
&lt;br /&gt;
A Leveled Loot Table is just a list of &amp;quot;Brackets&amp;quot;, for each one you can set:&lt;br /&gt;
&lt;br /&gt;
*'''Min Level / Max Level''': the range of Player levels of this bracket.&lt;br /&gt;
*'''Table''': the Loot Table used for that range.&lt;br /&gt;
&lt;br /&gt;
When the container is opened, the bracket that contains the current level of the Player is used. If the level of the Player is outside every bracket, the nearest one is used (so a level 50 Player will still get the loot of your 21-30 bracket if that is the highest one you made). If two brackets overlap, the first one wins and the Editor will warn you in the Console.&lt;br /&gt;
&lt;br /&gt;
To test it, set the &amp;quot;Test Roll Level&amp;quot; field in the inspector, then right click on the component and select &amp;quot;Test Roll At Test Level&amp;quot;: the Console will show you which table that level resolves to, followed by a test roll of it.&lt;br /&gt;
&lt;br /&gt;
==Using a Loot Table on a Looting Point==&lt;br /&gt;
&lt;br /&gt;
A Loot Table does nothing by itself, you have to attach it to a Looting Point with the &amp;quot;LootFromTable&amp;quot; component.&lt;br /&gt;
&lt;br /&gt;
1) Select a GameObject that already has a &amp;quot;Looting Point&amp;quot; component (see [[Creating a New Looting Point]] if you don't have one).&lt;br /&gt;
&lt;br /&gt;
2) Add a &amp;quot;LootFromTable&amp;quot; component to it.&lt;br /&gt;
&lt;br /&gt;
3) Reference your Loot Table or Leveled Loot Table in the '''Loot Table''' field.&lt;br /&gt;
&lt;br /&gt;
[[File:Loottable 5.png|918x918px]]&lt;br /&gt;
&lt;br /&gt;
The component has two options:&lt;br /&gt;
&lt;br /&gt;
*'''Additive''': if true, the rolled items are added on top of the items you placed by hand in the Inventory of the Looting Point. If false, the Inventory is cleared before the roll, so the container will only have what the table generates.&lt;br /&gt;
*'''Apply Ownership''': if true, the rolled items get the ownership metadata of the Looting Point, so taking them from an owned container counts as stealing, exactly like the items placed by hand (see [[Items Ownership, Metadata and Stealing]]).&lt;br /&gt;
&lt;br /&gt;
The roll happens right before the looting panel opens the first time the Player interacts with the container, using the level of the Player at that moment, and it is then saved on the Save File.&lt;br /&gt;
&lt;br /&gt;
Important: the Looting Point must have '''Has To Load And Save''' enabled. If it is disabled nothing is written on the Save File and the loot will re-roll every time the Player opens the container, the Editor will warn you about this in the Console.&lt;br /&gt;
&lt;br /&gt;
==Result==&lt;br /&gt;
&lt;br /&gt;
Opening the chest in game will now show randomly generated items appropriate to the level of the Player, and the chest will keep its rolled content across saves. Combined with nested tables you can build the entire loot economy of your game from a few reusable assets: one &amp;quot;Gems&amp;quot; table, one &amp;quot;Potions&amp;quot; table, one &amp;quot;Low Level Weapons&amp;quot; table, and every dungeon chest just references them with different weights.&lt;br /&gt;
&lt;br /&gt;
In the Demo's starting cave you will find a crate on a corner as an example on how everything is setup.&lt;br /&gt;
&lt;br /&gt;
[[File:Loottable 6.png|959x959px]]&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Loottable_6.png&amp;diff=775</id>
		<title>File:Loottable 6.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Loottable_6.png&amp;diff=775"/>
		<updated>2026-07-17T23:41:41Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;loottable_6&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Loottable_5.png&amp;diff=774</id>
		<title>File:Loottable 5.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Loottable_5.png&amp;diff=774"/>
		<updated>2026-07-17T23:39:17Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;loottable_5&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Loottable_4.png&amp;diff=773</id>
		<title>File:Loottable 4.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Loottable_4.png&amp;diff=773"/>
		<updated>2026-07-17T23:37:40Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;loottable_4&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Loottable_3.png&amp;diff=772</id>
		<title>File:Loottable 3.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Loottable_3.png&amp;diff=772"/>
		<updated>2026-07-17T23:36:59Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;loottable_3&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Loottable_2.png&amp;diff=771</id>
		<title>File:Loottable 2.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Loottable_2.png&amp;diff=771"/>
		<updated>2026-07-17T23:35:32Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;loottable_2&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Loottable_1.png&amp;diff=770</id>
		<title>File:Loottable 1.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Loottable_1.png&amp;diff=770"/>
		<updated>2026-07-17T23:32:54Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;loottable_1&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Main_Page&amp;diff=769</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Main_Page&amp;diff=769"/>
		<updated>2026-07-17T23:12:00Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Welcome to the RPG Creation Kit Documentation.&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Latest RPG Creation Kit Version: '''2.1.'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''If you're new to the RPG Creation Kit, see the:''' [[:Category:Getting Started|'''Getting Started''']] '''page.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Newest Tutorials'''&lt;br /&gt;
* [[Crafting &amp;amp; Enchanting]]&lt;br /&gt;
*[[Loot Tables]]&lt;br /&gt;
*[[What's new in the RPG Creation Kit 2|What's New in the RPG Creation Kit 2]]&lt;br /&gt;
*[https://www.youtube.com/watch?v=llO1YsHaPtM &amp;lt;nowiki&amp;gt;[Video by OctoverseStudios] How to Add a New Race in RCK Using Synty Models&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
*[[Converting Materials to HDRP]]&lt;br /&gt;
*[[Creating a New Race]]&lt;br /&gt;
*[[Creating Your First Worldspace]]&lt;br /&gt;
*[[Changing the New Game Starting Location]]&lt;br /&gt;
*[[Creating a New Persistent Reference AI]]&lt;br /&gt;
*[[Creating a New Looting Point]]&lt;br /&gt;
*[[Adding New Animations to NPCs dialogues]]&lt;br /&gt;
*[[Creating a New Creature AI]]&lt;br /&gt;
*[[Creating a New Melee Weapon]]&lt;br /&gt;
*[[Creating a New Armor Item]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other''' '''Tutorials'''&lt;br /&gt;
&lt;br /&gt;
* [[Items Ownership, Metadata and Stealing]].&lt;br /&gt;
*[[Persistent References]]&lt;br /&gt;
*[[Mutable|Mutables]]&lt;br /&gt;
*[[Interactive Objects]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Special:AllPages|View All Documentation Pages]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Community Made Tutorials'''&lt;br /&gt;
&lt;br /&gt;
The page below contains all the links to videos and articles of tutorials made by the community for the community.&lt;br /&gt;
&lt;br /&gt;
* [[Community Made Tutorials]]&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Main_Page&amp;diff=768</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=Main_Page&amp;diff=768"/>
		<updated>2026-02-05T19:14:43Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Welcome to the RPG Creation Kit Documentation.&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Latest RPG Creation Kit Version: '''2.0.'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''If you're new to the RPG Creation Kit, see the:''' [[:Category:Getting Started|'''Getting Started''']] '''page.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Newest Tutorials'''&lt;br /&gt;
* [[What's new in the RPG Creation Kit 2|What's New in the RPG Creation Kit 2]]&lt;br /&gt;
*[https://www.youtube.com/watch?v=llO1YsHaPtM &amp;lt;nowiki&amp;gt;[Video by OctoverseStudios] How to Add a New Race in RCK Using Synty Models&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
*[[Converting Materials to HDRP]]&lt;br /&gt;
*[[Creating a New Race]]&lt;br /&gt;
*[[Creating Your First Worldspace]]&lt;br /&gt;
*[[Changing the New Game Starting Location]]&lt;br /&gt;
*[[Creating a New Persistent Reference AI]]&lt;br /&gt;
*[[Creating a New Looting Point]]&lt;br /&gt;
*[[Adding New Animations to NPCs dialogues]]&lt;br /&gt;
*[[Creating a New Creature AI]]&lt;br /&gt;
*[[Creating a New Melee Weapon]]&lt;br /&gt;
*[[Creating a New Armor Item]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other''' '''Tutorials'''&lt;br /&gt;
&lt;br /&gt;
* [[Items Ownership, Metadata and Stealing]].&lt;br /&gt;
*[[Persistent References]]&lt;br /&gt;
*[[Mutable|Mutables]]&lt;br /&gt;
*[[Interactive Objects]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Special:AllPages|View All Documentation Pages]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Community Made Tutorials'''&lt;br /&gt;
&lt;br /&gt;
The page below contains all the links to videos and articles of tutorials made by the community for the community.&lt;br /&gt;
&lt;br /&gt;
* [[Community Made Tutorials]]&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=What%27s_new_in_the_RPG_Creation_Kit_2&amp;diff=767</id>
		<title>What's new in the RPG Creation Kit 2</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=What%27s_new_in_the_RPG_Creation_Kit_2&amp;diff=767"/>
		<updated>2026-02-05T19:13:19Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: /* Other */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this page you'll find an explanation of the new systems and changes that arrived with the release of the '''RPG Creation Kit 2.0'''.&lt;br /&gt;
&lt;br /&gt;
== Show/Hide Demo Files ==&lt;br /&gt;
[[File:RCK2 1.png|423x423px]]&lt;br /&gt;
&lt;br /&gt;
The first change to the Editor Tools is the addition of a toggle named '''&amp;quot;Show Demo Files?&amp;quot;'''. When toggled on, the respective Editor (such as &amp;quot;Rck Object Viewer&amp;quot;, &amp;quot;Cell View&amp;quot;, &amp;quot;Quests&amp;quot;, &amp;quot;Rck AI Editor&amp;quot;, etc.) will show files related to the Rck Demo. As you can imagine, toggling it off will hide from the lists content related to the demo.&lt;br /&gt;
&lt;br /&gt;
This will be pretty useful when you'll be deep into creating your own content and the Rck items will get in your way as you're trying to find or search for things.&lt;br /&gt;
&lt;br /&gt;
Each asset that can be hidden has now a flag &amp;quot;IS_DEMO_FILE&amp;quot;, that will act as the flag that hides/show results:&lt;br /&gt;
&lt;br /&gt;
[[File:Rck 2.png|400x400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So as you'll make new content it will be enough to disable this flag for your own items.&lt;br /&gt;
&lt;br /&gt;
'''You can also set the default value''' for the '''&amp;quot;Show Demo Files?&amp;quot;''' toggle to be on/off whenever you open your project by going in &amp;quot;''Edit-&amp;gt;Project Settings-RPG Creation Kit''&amp;quot; and setting the value of the toggle there. Setting it off will make sure that whenever you open a window like the &amp;quot;''Rck AI Editor''&amp;quot; the demo files will be set to be hidden by default.&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 3.png|400x400px]]&lt;br /&gt;
&lt;br /&gt;
== Toolbar Functions ==&lt;br /&gt;
[[File:Rck2 5.png|578x578px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main toolbar, located in the upper part of the Editor, will now have three more buttons related to the RPG Creation Kit:&lt;br /&gt;
&lt;br /&gt;
* '''Load Last Save:''' allows you to Start playing in the Editor and automatically loads the latest savegame (or autosave) you have. It's an incredibly helpful tool that allows you to quickly jump in game to view your edits.&lt;br /&gt;
* '''Load Last Cell''': does the opposite. It loads the last cell that you've loaded via the Cell View or Cell Map View. It's best used along with the Load Last Save button t.&lt;br /&gt;
* '''Adjust Time Of Day (ToD) Preview:''' is a slider that sets the Time of Day for your selected &amp;quot;Time of Day Sky Material&amp;quot; (set in the Project Settings). It sets the &amp;quot;currentTime&amp;quot; value in the Sky's material and it updates the scene lighting in base of this value. It's useful to preview a Cell (or many cells) in the Editor at any given time of the day.&lt;br /&gt;
&lt;br /&gt;
== Time of Day ==&lt;br /&gt;
The Time of Day feature adds the concept of time inside of the RCK.&lt;br /&gt;
&lt;br /&gt;
Days consist of 24hrs and there's currently no convention for Days/Months/Years, which is something that can be extended from this system.&lt;br /&gt;
&lt;br /&gt;
A GameObject named '''&amp;quot;TimeOfDayManager'''&amp;quot; has been added to the _WorldLoader_ scene, and it has a component with the same name as the Object that is, in fact, the manager of the time system.  &lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 6.png|560x560px]]&lt;br /&gt;
&lt;br /&gt;
* '''Current Time''' [0-24]: explicit the current time of the day. This can be set when the game starts, when a save game loads, and it can be arbitrarily set from other scripts. For example, the script &amp;quot;JustAnotherDeliveryStage10&amp;quot;.&lt;br /&gt;
* '''Hours''' and '''Minutes''': are derived from the Current Time, and they're useful for you to read in order to create dynamic scenarios based on the current time (see next section &amp;quot;''Dynamic Responses to Current Time''&amp;quot;) or to display the current time on the UI.&lt;br /&gt;
* '''Current Time Scale''': dictates ''how quickly'' time passes. The formula that runs on Update is is:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
SetTime(currentTime + (currentTimeScale * Time.deltaTime));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;A Time Scale of 1 means that one hour passes every second, so for the default value of 0.05, a full day (24hrs) 480 seconds or 8 minutes. You can also set this at runtime whenever you want, although runtime changes are not saved on the save-file (the value you set in the inspector will be loaded when a savegame is loaded).&lt;br /&gt;
*'''Skybox Material''': is a reference to the material that you're using in your world. If you want a different Skybox material you'll have to change this reference (to update it in game) and the reference in Project Settings (to allow the ToD slider to correctly preview the skybox in the editor). In the RCK default configuration there is only one Skybox Material that contains 3 Cubemaps that represent Day, Dusk, Night, that are blended in base of the Current Time Value. You can swap the Skybox Material reference if you want, even during runtime, but you'll also have to do so in the [https://docs.unity3d.com/ScriptReference/RenderSettings-skybox.html RenderSettings].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The next values &amp;quot;Sun &amp;amp; Moon&amp;quot; allows you to fine-control the lighting of your scenes as time passes.&lt;br /&gt;
&lt;br /&gt;
* '''Sun Light:''' is a reference to your main Directional Light (sun) that is also in the _WorldLoader_ scene.&lt;br /&gt;
* '''Sun Color:''' is the sun's color.&lt;br /&gt;
* '''Sun Intensity:''' allows you to set a curve that controls the intensity of the Sun's light as time goes by. So the value at the beginning of the curve would be the sun's intensity at hour 0:00, while the last value is at the very last minute of the day 23:59.&lt;br /&gt;
* '''Ambient Color/Intensity:''' allows you to define gradients that controls the [https://docs.unity3d.com/speedtree-modeler/manual/light-object-reference.html ambience] of your scene at runtime. The gradient is also distributed over the currentTime, so you can have dark ambient settings at night and more light ones during the day.&lt;br /&gt;
* '''Fog Color/Density:''' allows you to do the same but to the fog setting of your scene.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The values set in here are to be thought as the &amp;quot;default&amp;quot; values.&lt;br /&gt;
&lt;br /&gt;
'''However,''' you probably want control over ambience/fog for '''each [[worldspace]]''' and even for '''each [[cell]]'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 7.png|475x475px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Worldspace data has also been given these properties, to allow you to customize your worldspaces as you wish.&lt;br /&gt;
&lt;br /&gt;
* '''Global_TOD_ENABLE_SKYBOX_AND_LIGHTING_EDITS:''' if set to true it will mean that the default 'Time of Day Manager' values we've set previously for Ambient/Fog will be '''overridden''' by the Worldspace when the player will be in that worldspace.&lt;br /&gt;
* The rest of the values are the same as explained previously, with some additional tweaks such as fog start/end and modes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The same concept applies for individual Cells:&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 9.png|581x581px]]&lt;br /&gt;
&lt;br /&gt;
* '''Local_Override_ToD_Setting:''' determines whether to inherit the &amp;lt;code&amp;gt;TOD_ENABLE_SKYBOX_AND_LIGHTING_EDITS&amp;lt;/code&amp;gt; setting from the parent Worldspace or use the local boolean &amp;lt;code&amp;gt;Local_TOD_ENABLE_SKYBOX_AND_LIGHTING_EDITS&amp;lt;/code&amp;gt;  defined on this Cell. If Local_Override is false, &amp;lt;code&amp;gt;Local_TOD_ENABLE_SKYBOX_AND_LIGHTING_EDITS has obviously no effect.&amp;lt;/code&amp;gt;&lt;br /&gt;
* The rest of the values are the same as explained previously.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So the idea is that you would have ambient/fog responsive to the Time of Day (set at a worldspace level) for exterior worlds, and you can decide to override it for interiors (such as always-dark dungeons). But, you can also make interiors (such as houses with windows) whose Ambient lighting responds to time of day.&lt;br /&gt;
&lt;br /&gt;
== Dynamic Responses to Current Time ==&lt;br /&gt;
This whole Time System goes well together with the [[Scripting|Scripting System]] of the RPG Creation Kit and in general with the component-based architecture of Unity.&lt;br /&gt;
&lt;br /&gt;
We can query at anytime the Current Time of day, also as (Hour::Minute) and dynamically make things happen, or prevent things from happening. This allows you to create content that depends on time of day, such as dungeons that are only accessible at night, events that can only happen at a certain time of the day, and this also allows for Dynamic NPCs routines.&lt;br /&gt;
&lt;br /&gt;
In the RCK demo we have 5 examples:&lt;br /&gt;
&lt;br /&gt;
* '''NPCs equip torches at night.''' [RckAI_EquipTorchAtNight.cs]&lt;br /&gt;
* '''Shops in the city close at night.''' [CityInterior_LockShopsAtNight.cs]&lt;br /&gt;
* '''The &amp;quot;Killing Monsters&amp;quot; quest can be only completed during the night (22:00 - 05:00), because the door entrance will be locked during the day''' [Virrihael_LockUnlockVampiresDungeon.cs].&lt;br /&gt;
* '''Merchants in the City simulate stop working at night and simulate going in their houses''' [CityInterior_StallOwnersGoToSleep.cs].&lt;br /&gt;
* '''The windows of the houses in the city will be lit at night''' [CityInterior_TurnHouseLightsOn.cs].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let's see the NPCs equip torches at night example.&lt;br /&gt;
&lt;br /&gt;
You can attach the '''RckAI_EquipTorchAtNight''' component to any NPC prefab you have. Such as &amp;quot;CityGuard004&amp;quot; shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 10.png|537x537px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This component acts as a &amp;quot;manager&amp;quot; or &amp;quot;controller&amp;quot; for the NPC actions that have to depend on time. &lt;br /&gt;
&lt;br /&gt;
The logic for this example is very simple, if the CurrentTime is greater or equal of what we consider the start of the day (dayStartHour), and the CurrentTime is lesser than what we consider the start of the night (nightStartHour), we should not have a torch equipped.&lt;br /&gt;
&lt;br /&gt;
Otherwise, we should equip a torch. This simple logic is present in the script &amp;quot;RckAI_EquipTorchAtNight&amp;quot;, that subscribes to listen to '''OnHourChanges''' event. &lt;br /&gt;
&lt;br /&gt;
So everytime there's an hour change we can run the check to equip/unequip the torch.&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
public void HandleOnHourChange(int curHour)&lt;br /&gt;
{&lt;br /&gt;
    if (ai == null || ai.equipment == null || ai.isInOfflineMode || !ai.isAlive) &lt;br /&gt;
        return;&lt;br /&gt;
&lt;br /&gt;
    bool isTorchEquipped = ai.equipment.currentTorchInHand != null;&lt;br /&gt;
&lt;br /&gt;
    // Equip torch logic&lt;br /&gt;
    if (curHour &amp;gt;= dayStartHour &amp;amp;&amp;amp; curHour &amp;lt; nightStartHour)&lt;br /&gt;
    {&lt;br /&gt;
        if (isTorchEquipped)&lt;br /&gt;
            ai.equipment.Unequip(EquipmentSlots.LHand);&lt;br /&gt;
    }&lt;br /&gt;
    else if (!isTorchEquipped)&lt;br /&gt;
    {&lt;br /&gt;
        var torch = ai.inventory.GetItem(&amp;quot;ITorch001&amp;quot;);&lt;br /&gt;
        if (torch != null)&lt;br /&gt;
            ai.equipment.Equip(torch);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You can also subscribe functions to the '''onMinuteChanges''' or '''onTimeChanges''' to have more granular control.&lt;br /&gt;
&lt;br /&gt;
The Scripts are placed on the most suitable GameObject you can think of:&lt;br /&gt;
&lt;br /&gt;
* For RckAI Equip Torch, we place it on the NPC itself.&lt;br /&gt;
* For the Door that has to be locked at night, we could place it on the door itself. In my case I prefer to have a &amp;quot;TIME_DEPENDENT_SCRIPTS&amp;quot; GameObject in each Cell, so it will be attached to that game object.&lt;br /&gt;
* Same thing for both the houses window's light logic and merchants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This idea is the whole foundation to build proper '''NPCs Schedules''', that I wish to create and formalize formalized in dedicated assets in a future update.&lt;br /&gt;
&lt;br /&gt;
== XP, Leveling &amp;amp; New Attributes System ==&lt;br /&gt;
The Attributes System has been reworked to actually influence in-game actions, for both the player, NPCs and Creatures. &lt;br /&gt;
&lt;br /&gt;
In addition to that, XP and Levels are now a thing. The player can earn XP by killing monsters, completing quests or via [[Scripting]], and also [[Events And Consequences|Events &amp;amp; Consequences]]. As you could expect, the player levels up and he's granted attributes points to improve his attributes. RckAI (and derived) also have a level now, that is defined by their attributes (the more the sum of the attributes values, the greater the level) and the level of the AI is used to compute the XP reward on kill.&lt;br /&gt;
&lt;br /&gt;
Let's see how this is managed:&lt;br /&gt;
&lt;br /&gt;
=== Default Values ===&lt;br /&gt;
The first thing that you should know are '''default values.'''&lt;br /&gt;
&lt;br /&gt;
'''For the Player''', these are set in the RckSettings.cs file, under the name of '''&amp;lt;code&amp;gt;PLAYER_ATTRIBUTES_DEFAULT_X&amp;lt;/code&amp;gt;'''where &amp;quot;X&amp;quot; is the attribute short name. By default all values are set to 25. &lt;br /&gt;
&lt;br /&gt;
'''For the AI''' (when created via the RckAI Editor) they will have the values of the attributes of the '''RckAI_Prefab''' (located in your project).&lt;br /&gt;
&lt;br /&gt;
=== Player XP and Level Up ===&lt;br /&gt;
The XP &amp;quot;curve&amp;quot; to level up is defined as a function the '''RckSettings''' file, under the name of &amp;quot;'''GetNextLevelXPValue(uint level)'''&amp;quot;''',''' and stands as the following:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
// Calculates the XP needed to reach the given level&lt;br /&gt;
public static ulong GetNextLevelXPValue(uint level)&lt;br /&gt;
{&lt;br /&gt;
    ulong xp = level * level * XP_NEXT_LEVEL_SCALING;&lt;br /&gt;
    return xp;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;So the value returned by this function is the '''amount of XP needed for a level up'''. This amount depends on the player's level.&lt;br /&gt;
&lt;br /&gt;
You can of course change and tweak this function as much as you want.&lt;br /&gt;
&lt;br /&gt;
=== Player Attributes Point per level ===&lt;br /&gt;
Regarding the player's level up, the RckSettings also defines these constants you may want to tweak:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public static float LEVELLING_UP_ALERT_MESSAGE_DURATION = 5;&lt;br /&gt;
public static uint LEVELLING_POINTS_PER_LEVEL = 5; // 5 attributes points per level&lt;br /&gt;
public static bool LEVELLING_LEVEL_2_SKILL_TUTORIAL_ENABLED = true;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AI Level and XP Awarded On Kill ===&lt;br /&gt;
The AI level is automatically set while you tweak the AI's Attributes in the &amp;quot;RckAI Editor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The level is calculated in base of a constant set in the RckSettings:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public static uint LEVELLING_AI_ATTRIBUTES_POINTS_PER_LEVEL = 5;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Every '''LEVELLING_AI_ATTRIBUTES_POINTS_PER_LEVEL''' (value) gave to the AI increases the AI level by 1.&lt;br /&gt;
&lt;br /&gt;
AI Level is then used to calculate XP Reward:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public static ulong CalculateXPGainedOnAIKill(uint aiLevel)&lt;br /&gt;
{&lt;br /&gt;
    ulong xp = aiLevel * XP_GAINED_ON_AI_KILL_BASE;&lt;br /&gt;
    return xp;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You can edit &amp;quot;XP_GAINED_ON_KILL_BASE&amp;quot; default value as you wish.&lt;br /&gt;
&lt;br /&gt;
The value returned by this function is also multiplied by the '''XpMultiplier''' that you can set for each AI:&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 12.png|634x634px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thanks to the '''Xp Mult''' I was able to tweak the value for all the AI the player would meet in the first tutorial dungeon and make sure that killing everything would gain him exactly 1 level.&lt;br /&gt;
&lt;br /&gt;
=== Derived Attributes ===&lt;br /&gt;
Derived attributes (such as maxHealth, maxMana, etc.) are now effectively derived from the base attributes. For example, Constitution directly affects the max amount of HPs and Willpower affects the max value of Mana.&lt;br /&gt;
&lt;br /&gt;
The formulas are explicited as static functions inside the RckSettings.cs file.&lt;br /&gt;
&lt;br /&gt;
For example, max health is calculated as the following:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public static float GetMaxHealthCalculation(int attConstitution, int attStrength)&lt;br /&gt;
{&lt;br /&gt;
    float constitutionModifier = 5.25f;&lt;br /&gt;
    float strengthModifier = 0.5f;&lt;br /&gt;
&lt;br /&gt;
    float maxHealth = ATTRIBUTES_DEF_HEALTH + (attConstitution * constitutionModifier) + (attStrength * strengthModifier);&lt;br /&gt;
    return maxHealth;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''ATTRIBUTES_DEF_HEALTH''' is by default '''1.0f'''.&lt;br /&gt;
&lt;br /&gt;
There are now a lot of derived attributes, whose definitions are all in the RckSettings file. You can obviously add your own as well.&lt;br /&gt;
&lt;br /&gt;
== Sprint Attacks / Skills ==&lt;br /&gt;
Sprint Attacks were added as an addition to the Combat System.&lt;br /&gt;
&lt;br /&gt;
They are performed while the player sprints and holds the attack button. For the Demo you can perform sprint attacks while being unarmed or while using a one-handed weapon like a sword or a dagger.&lt;br /&gt;
&lt;br /&gt;
Sprint Attacks are defined in the '''Weapon Charged Attacks''' list, inside the WeaponItem:&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 13.png|558x558px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
They should '''always''' stay at Index 1 as the combat system triggers &amp;quot;Attack Type Index 1&amp;quot; on the combination of keys that correspond to &amp;quot;Sprint + Charged Attack&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
'''Is Full Body''': is an addition in the 2.0 version that allows you to setup attacks that override the whole character body, as opposed as only the upperbody.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the same way, you can add new attacks/skills, such as &amp;quot;RIGHT_MOVEMENT + CHARGED_ATTACK&amp;quot; = triggers a specific attack animation.&lt;br /&gt;
&lt;br /&gt;
You can see how the Sprint Attack is triggered in the '''PlayerCombat''' script, under the '''MeleeChargedAttack''' function. In there, by the very same logic, you can create new attacks/skills with different input combinations.&lt;br /&gt;
&lt;br /&gt;
'''Attacks can now have movements properties''', i.e., take over movement. The sprint attack for example locks the player from moving and pushes him forward in conjuction with the animation. This logic is managed by Animation Events put on the FPS version of the animations, you can check the &amp;quot;FPSArms_OneHandedPowerAttackForward&amp;quot; animation to see how it works.&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
'''AI Aggro Lines:''' AI can now say voice lines when entering in combat. You can set those in the '''AISounds''' component (located on the AI prefab, es. [AI]BandintInFirstDungeon001-&amp;gt;GFX).&lt;br /&gt;
&lt;br /&gt;
'''Sneak attacks''': when an NPC is not in combat and he doesn't see the player, dealing physical damage (melee, ranged weapons) will result in critical damage. The modifier is calculated in the RckSettings (''GetSneakDamageMultiplier'').&lt;br /&gt;
&lt;br /&gt;
'''Every UI state can be set to pause the game''' '''or not''' (RckSettings flags).&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=What%27s_new_in_the_RPG_Creation_Kit_2&amp;diff=766</id>
		<title>What's new in the RPG Creation Kit 2</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=What%27s_new_in_the_RPG_Creation_Kit_2&amp;diff=766"/>
		<updated>2026-02-05T19:08:23Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: /* Sprint Attacks / Skills */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this page you'll find an explanation of the new systems and changes that arrived with the release of the '''RPG Creation Kit 2.0'''.&lt;br /&gt;
&lt;br /&gt;
== Show/Hide Demo Files ==&lt;br /&gt;
[[File:RCK2 1.png|423x423px]]&lt;br /&gt;
&lt;br /&gt;
The first change to the Editor Tools is the addition of a toggle named '''&amp;quot;Show Demo Files?&amp;quot;'''. When toggled on, the respective Editor (such as &amp;quot;Rck Object Viewer&amp;quot;, &amp;quot;Cell View&amp;quot;, &amp;quot;Quests&amp;quot;, &amp;quot;Rck AI Editor&amp;quot;, etc.) will show files related to the Rck Demo. As you can imagine, toggling it off will hide from the lists content related to the demo.&lt;br /&gt;
&lt;br /&gt;
This will be pretty useful when you'll be deep into creating your own content and the Rck items will get in your way as you're trying to find or search for things.&lt;br /&gt;
&lt;br /&gt;
Each asset that can be hidden has now a flag &amp;quot;IS_DEMO_FILE&amp;quot;, that will act as the flag that hides/show results:&lt;br /&gt;
&lt;br /&gt;
[[File:Rck 2.png|400x400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So as you'll make new content it will be enough to disable this flag for your own items.&lt;br /&gt;
&lt;br /&gt;
'''You can also set the default value''' for the '''&amp;quot;Show Demo Files?&amp;quot;''' toggle to be on/off whenever you open your project by going in &amp;quot;''Edit-&amp;gt;Project Settings-RPG Creation Kit''&amp;quot; and setting the value of the toggle there. Setting it off will make sure that whenever you open a window like the &amp;quot;''Rck AI Editor''&amp;quot; the demo files will be set to be hidden by default.&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 3.png|400x400px]]&lt;br /&gt;
&lt;br /&gt;
== Toolbar Functions ==&lt;br /&gt;
[[File:Rck2 5.png|578x578px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main toolbar, located in the upper part of the Editor, will now have three more buttons related to the RPG Creation Kit:&lt;br /&gt;
&lt;br /&gt;
* '''Load Last Save:''' allows you to Start playing in the Editor and automatically loads the latest savegame (or autosave) you have. It's an incredibly helpful tool that allows you to quickly jump in game to view your edits.&lt;br /&gt;
* '''Load Last Cell''': does the opposite. It loads the last cell that you've loaded via the Cell View or Cell Map View. It's best used along with the Load Last Save button t.&lt;br /&gt;
* '''Adjust Time Of Day (ToD) Preview:''' is a slider that sets the Time of Day for your selected &amp;quot;Time of Day Sky Material&amp;quot; (set in the Project Settings). It sets the &amp;quot;currentTime&amp;quot; value in the Sky's material and it updates the scene lighting in base of this value. It's useful to preview a Cell (or many cells) in the Editor at any given time of the day.&lt;br /&gt;
&lt;br /&gt;
== Time of Day ==&lt;br /&gt;
The Time of Day feature adds the concept of time inside of the RCK.&lt;br /&gt;
&lt;br /&gt;
Days consist of 24hrs and there's currently no convention for Days/Months/Years, which is something that can be extended from this system.&lt;br /&gt;
&lt;br /&gt;
A GameObject named '''&amp;quot;TimeOfDayManager'''&amp;quot; has been added to the _WorldLoader_ scene, and it has a component with the same name as the Object that is, in fact, the manager of the time system.  &lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 6.png|560x560px]]&lt;br /&gt;
&lt;br /&gt;
* '''Current Time''' [0-24]: explicit the current time of the day. This can be set when the game starts, when a save game loads, and it can be arbitrarily set from other scripts. For example, the script &amp;quot;JustAnotherDeliveryStage10&amp;quot;.&lt;br /&gt;
* '''Hours''' and '''Minutes''': are derived from the Current Time, and they're useful for you to read in order to create dynamic scenarios based on the current time (see next section &amp;quot;''Dynamic Responses to Current Time''&amp;quot;) or to display the current time on the UI.&lt;br /&gt;
* '''Current Time Scale''': dictates ''how quickly'' time passes. The formula that runs on Update is is:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
SetTime(currentTime + (currentTimeScale * Time.deltaTime));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;A Time Scale of 1 means that one hour passes every second, so for the default value of 0.05, a full day (24hrs) 480 seconds or 8 minutes. You can also set this at runtime whenever you want, although runtime changes are not saved on the save-file (the value you set in the inspector will be loaded when a savegame is loaded).&lt;br /&gt;
*'''Skybox Material''': is a reference to the material that you're using in your world. If you want a different Skybox material you'll have to change this reference (to update it in game) and the reference in Project Settings (to allow the ToD slider to correctly preview the skybox in the editor). In the RCK default configuration there is only one Skybox Material that contains 3 Cubemaps that represent Day, Dusk, Night, that are blended in base of the Current Time Value. You can swap the Skybox Material reference if you want, even during runtime, but you'll also have to do so in the [https://docs.unity3d.com/ScriptReference/RenderSettings-skybox.html RenderSettings].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The next values &amp;quot;Sun &amp;amp; Moon&amp;quot; allows you to fine-control the lighting of your scenes as time passes.&lt;br /&gt;
&lt;br /&gt;
* '''Sun Light:''' is a reference to your main Directional Light (sun) that is also in the _WorldLoader_ scene.&lt;br /&gt;
* '''Sun Color:''' is the sun's color.&lt;br /&gt;
* '''Sun Intensity:''' allows you to set a curve that controls the intensity of the Sun's light as time goes by. So the value at the beginning of the curve would be the sun's intensity at hour 0:00, while the last value is at the very last minute of the day 23:59.&lt;br /&gt;
* '''Ambient Color/Intensity:''' allows you to define gradients that controls the [https://docs.unity3d.com/speedtree-modeler/manual/light-object-reference.html ambience] of your scene at runtime. The gradient is also distributed over the currentTime, so you can have dark ambient settings at night and more light ones during the day.&lt;br /&gt;
* '''Fog Color/Density:''' allows you to do the same but to the fog setting of your scene.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The values set in here are to be thought as the &amp;quot;default&amp;quot; values.&lt;br /&gt;
&lt;br /&gt;
'''However,''' you probably want control over ambience/fog for '''each [[worldspace]]''' and even for '''each [[cell]]'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 7.png|475x475px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Worldspace data has also been given these properties, to allow you to customize your worldspaces as you wish.&lt;br /&gt;
&lt;br /&gt;
* '''Global_TOD_ENABLE_SKYBOX_AND_LIGHTING_EDITS:''' if set to true it will mean that the default 'Time of Day Manager' values we've set previously for Ambient/Fog will be '''overridden''' by the Worldspace when the player will be in that worldspace.&lt;br /&gt;
* The rest of the values are the same as explained previously, with some additional tweaks such as fog start/end and modes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The same concept applies for individual Cells:&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 9.png|581x581px]]&lt;br /&gt;
&lt;br /&gt;
* '''Local_Override_ToD_Setting:''' determines whether to inherit the &amp;lt;code&amp;gt;TOD_ENABLE_SKYBOX_AND_LIGHTING_EDITS&amp;lt;/code&amp;gt; setting from the parent Worldspace or use the local boolean &amp;lt;code&amp;gt;Local_TOD_ENABLE_SKYBOX_AND_LIGHTING_EDITS&amp;lt;/code&amp;gt;  defined on this Cell. If Local_Override is false, &amp;lt;code&amp;gt;Local_TOD_ENABLE_SKYBOX_AND_LIGHTING_EDITS has obviously no effect.&amp;lt;/code&amp;gt;&lt;br /&gt;
* The rest of the values are the same as explained previously.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So the idea is that you would have ambient/fog responsive to the Time of Day (set at a worldspace level) for exterior worlds, and you can decide to override it for interiors (such as always-dark dungeons). But, you can also make interiors (such as houses with windows) whose Ambient lighting responds to time of day.&lt;br /&gt;
&lt;br /&gt;
== Dynamic Responses to Current Time ==&lt;br /&gt;
This whole Time System goes well together with the [[Scripting|Scripting System]] of the RPG Creation Kit and in general with the component-based architecture of Unity.&lt;br /&gt;
&lt;br /&gt;
We can query at anytime the Current Time of day, also as (Hour::Minute) and dynamically make things happen, or prevent things from happening. This allows you to create content that depends on time of day, such as dungeons that are only accessible at night, events that can only happen at a certain time of the day, and this also allows for Dynamic NPCs routines.&lt;br /&gt;
&lt;br /&gt;
In the RCK demo we have 5 examples:&lt;br /&gt;
&lt;br /&gt;
* '''NPCs equip torches at night.''' [RckAI_EquipTorchAtNight.cs]&lt;br /&gt;
* '''Shops in the city close at night.''' [CityInterior_LockShopsAtNight.cs]&lt;br /&gt;
* '''The &amp;quot;Killing Monsters&amp;quot; quest can be only completed during the night (22:00 - 05:00), because the door entrance will be locked during the day''' [Virrihael_LockUnlockVampiresDungeon.cs].&lt;br /&gt;
* '''Merchants in the City simulate stop working at night and simulate going in their houses''' [CityInterior_StallOwnersGoToSleep.cs].&lt;br /&gt;
* '''The windows of the houses in the city will be lit at night''' [CityInterior_TurnHouseLightsOn.cs].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let's see the NPCs equip torches at night example.&lt;br /&gt;
&lt;br /&gt;
You can attach the '''RckAI_EquipTorchAtNight''' component to any NPC prefab you have. Such as &amp;quot;CityGuard004&amp;quot; shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 10.png|537x537px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This component acts as a &amp;quot;manager&amp;quot; or &amp;quot;controller&amp;quot; for the NPC actions that have to depend on time. &lt;br /&gt;
&lt;br /&gt;
The logic for this example is very simple, if the CurrentTime is greater or equal of what we consider the start of the day (dayStartHour), and the CurrentTime is lesser than what we consider the start of the night (nightStartHour), we should not have a torch equipped.&lt;br /&gt;
&lt;br /&gt;
Otherwise, we should equip a torch. This simple logic is present in the script &amp;quot;RckAI_EquipTorchAtNight&amp;quot;, that subscribes to listen to '''OnHourChanges''' event. &lt;br /&gt;
&lt;br /&gt;
So everytime there's an hour change we can run the check to equip/unequip the torch.&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
public void HandleOnHourChange(int curHour)&lt;br /&gt;
{&lt;br /&gt;
    if (ai == null || ai.equipment == null || ai.isInOfflineMode || !ai.isAlive) &lt;br /&gt;
        return;&lt;br /&gt;
&lt;br /&gt;
    bool isTorchEquipped = ai.equipment.currentTorchInHand != null;&lt;br /&gt;
&lt;br /&gt;
    // Equip torch logic&lt;br /&gt;
    if (curHour &amp;gt;= dayStartHour &amp;amp;&amp;amp; curHour &amp;lt; nightStartHour)&lt;br /&gt;
    {&lt;br /&gt;
        if (isTorchEquipped)&lt;br /&gt;
            ai.equipment.Unequip(EquipmentSlots.LHand);&lt;br /&gt;
    }&lt;br /&gt;
    else if (!isTorchEquipped)&lt;br /&gt;
    {&lt;br /&gt;
        var torch = ai.inventory.GetItem(&amp;quot;ITorch001&amp;quot;);&lt;br /&gt;
        if (torch != null)&lt;br /&gt;
            ai.equipment.Equip(torch);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You can also subscribe functions to the '''onMinuteChanges''' or '''onTimeChanges''' to have more granular control.&lt;br /&gt;
&lt;br /&gt;
The Scripts are placed on the most suitable GameObject you can think of:&lt;br /&gt;
&lt;br /&gt;
* For RckAI Equip Torch, we place it on the NPC itself.&lt;br /&gt;
* For the Door that has to be locked at night, we could place it on the door itself. In my case I prefer to have a &amp;quot;TIME_DEPENDENT_SCRIPTS&amp;quot; GameObject in each Cell, so it will be attached to that game object.&lt;br /&gt;
* Same thing for both the houses window's light logic and merchants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This idea is the whole foundation to build proper '''NPCs Schedules''', that I wish to create and formalize formalized in dedicated assets in a future update.&lt;br /&gt;
&lt;br /&gt;
== XP, Leveling &amp;amp; New Attributes System ==&lt;br /&gt;
The Attributes System has been reworked to actually influence in-game actions, for both the player, NPCs and Creatures. &lt;br /&gt;
&lt;br /&gt;
In addition to that, XP and Levels are now a thing. The player can earn XP by killing monsters, completing quests or via [[Scripting]], and also [[Events And Consequences|Events &amp;amp; Consequences]]. As you could expect, the player levels up and he's granted attributes points to improve his attributes. RckAI (and derived) also have a level now, that is defined by their attributes (the more the sum of the attributes values, the greater the level) and the level of the AI is used to compute the XP reward on kill.&lt;br /&gt;
&lt;br /&gt;
Let's see how this is managed:&lt;br /&gt;
&lt;br /&gt;
=== Default Values ===&lt;br /&gt;
The first thing that you should know are '''default values.'''&lt;br /&gt;
&lt;br /&gt;
'''For the Player''', these are set in the RckSettings.cs file, under the name of '''&amp;lt;code&amp;gt;PLAYER_ATTRIBUTES_DEFAULT_X&amp;lt;/code&amp;gt;'''where &amp;quot;X&amp;quot; is the attribute short name. By default all values are set to 25. &lt;br /&gt;
&lt;br /&gt;
'''For the AI''' (when created via the RckAI Editor) they will have the values of the attributes of the '''RckAI_Prefab''' (located in your project).&lt;br /&gt;
&lt;br /&gt;
=== Player XP and Level Up ===&lt;br /&gt;
The XP &amp;quot;curve&amp;quot; to level up is defined as a function the '''RckSettings''' file, under the name of &amp;quot;'''GetNextLevelXPValue(uint level)'''&amp;quot;''',''' and stands as the following:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
// Calculates the XP needed to reach the given level&lt;br /&gt;
public static ulong GetNextLevelXPValue(uint level)&lt;br /&gt;
{&lt;br /&gt;
    ulong xp = level * level * XP_NEXT_LEVEL_SCALING;&lt;br /&gt;
    return xp;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;So the value returned by this function is the '''amount of XP needed for a level up'''. This amount depends on the player's level.&lt;br /&gt;
&lt;br /&gt;
You can of course change and tweak this function as much as you want.&lt;br /&gt;
&lt;br /&gt;
=== Player Attributes Point per level ===&lt;br /&gt;
Regarding the player's level up, the RckSettings also defines these constants you may want to tweak:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public static float LEVELLING_UP_ALERT_MESSAGE_DURATION = 5;&lt;br /&gt;
public static uint LEVELLING_POINTS_PER_LEVEL = 5; // 5 attributes points per level&lt;br /&gt;
public static bool LEVELLING_LEVEL_2_SKILL_TUTORIAL_ENABLED = true;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AI Level and XP Awarded On Kill ===&lt;br /&gt;
The AI level is automatically set while you tweak the AI's Attributes in the &amp;quot;RckAI Editor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The level is calculated in base of a constant set in the RckSettings:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public static uint LEVELLING_AI_ATTRIBUTES_POINTS_PER_LEVEL = 5;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Every '''LEVELLING_AI_ATTRIBUTES_POINTS_PER_LEVEL''' (value) gave to the AI increases the AI level by 1.&lt;br /&gt;
&lt;br /&gt;
AI Level is then used to calculate XP Reward:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public static ulong CalculateXPGainedOnAIKill(uint aiLevel)&lt;br /&gt;
{&lt;br /&gt;
    ulong xp = aiLevel * XP_GAINED_ON_AI_KILL_BASE;&lt;br /&gt;
    return xp;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You can edit &amp;quot;XP_GAINED_ON_KILL_BASE&amp;quot; default value as you wish.&lt;br /&gt;
&lt;br /&gt;
The value returned by this function is also multiplied by the '''XpMultiplier''' that you can set for each AI:&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 12.png|634x634px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thanks to the '''Xp Mult''' I was able to tweak the value for all the AI the player would meet in the first tutorial dungeon and make sure that killing everything would gain him exactly 1 level.&lt;br /&gt;
&lt;br /&gt;
=== Derived Attributes ===&lt;br /&gt;
Derived attributes (such as maxHealth, maxMana, etc.) are now effectively derived from the base attributes. For example, Constitution directly affects the max amount of HPs and Willpower affects the max value of Mana.&lt;br /&gt;
&lt;br /&gt;
The formulas are explicited as static functions inside the RckSettings.cs file.&lt;br /&gt;
&lt;br /&gt;
For example, max health is calculated as the following:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public static float GetMaxHealthCalculation(int attConstitution, int attStrength)&lt;br /&gt;
{&lt;br /&gt;
    float constitutionModifier = 5.25f;&lt;br /&gt;
    float strengthModifier = 0.5f;&lt;br /&gt;
&lt;br /&gt;
    float maxHealth = ATTRIBUTES_DEF_HEALTH + (attConstitution * constitutionModifier) + (attStrength * strengthModifier);&lt;br /&gt;
    return maxHealth;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''ATTRIBUTES_DEF_HEALTH''' is by default '''1.0f'''.&lt;br /&gt;
&lt;br /&gt;
There are now a lot of derived attributes, whose definitions are all in the RckSettings file. You can obviously add your own as well.&lt;br /&gt;
&lt;br /&gt;
== Sprint Attacks / Skills ==&lt;br /&gt;
Sprint Attacks were added as an addition to the Combat System.&lt;br /&gt;
&lt;br /&gt;
They are performed while the player sprints and holds the attack button. For the Demo you can perform sprint attacks while being unarmed or while using a one-handed weapon like a sword or a dagger.&lt;br /&gt;
&lt;br /&gt;
Sprint Attacks are defined in the '''Weapon Charged Attacks''' list, inside the WeaponItem:&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 13.png|558x558px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
They should '''always''' stay at Index 1 as the combat system triggers &amp;quot;Attack Type Index 1&amp;quot; on the combination of keys that correspond to &amp;quot;Sprint + Charged Attack&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
'''Is Full Body''': is an addition in the 2.0 version that allows you to setup attacks that override the whole character body, as opposed as only the upperbody.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the same way, you can add new attacks/skills, such as &amp;quot;RIGHT_MOVEMENT + CHARGED_ATTACK&amp;quot; = triggers a specific attack animation.&lt;br /&gt;
&lt;br /&gt;
You can see how the Sprint Attack is triggered in the '''PlayerCombat''' script, under the '''MeleeChargedAttack''' function. In there, by the very same logic, you can create new attacks/skills with different input combinations.&lt;br /&gt;
&lt;br /&gt;
'''Attacks can now have movements properties''', i.e., take over movement. The sprint attack for example locks the player from moving and pushes him forward in conjuction with the animation. This logic is managed by Animation Events put on the FPS version of the animations, you can check the &amp;quot;FPSArms_OneHandedPowerAttackForward&amp;quot; animation to see how it works.&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
AI Aggro Lines&lt;br /&gt;
&lt;br /&gt;
AI Perception Improvements&lt;br /&gt;
&lt;br /&gt;
Sneak attacks&lt;br /&gt;
&lt;br /&gt;
Every UI state can pause the game or not&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Rck2_13.png&amp;diff=765</id>
		<title>File:Rck2 13.png</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=File:Rck2_13.png&amp;diff=765"/>
		<updated>2026-02-05T19:00:13Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;rck2_13&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=What%27s_new_in_the_RPG_Creation_Kit_2&amp;diff=764</id>
		<title>What's new in the RPG Creation Kit 2</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=What%27s_new_in_the_RPG_Creation_Kit_2&amp;diff=764"/>
		<updated>2026-02-05T18:57:57Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: /* Derived Attributes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this page you'll find an explanation of the new systems and changes that arrived with the release of the '''RPG Creation Kit 2.0'''.&lt;br /&gt;
&lt;br /&gt;
== Show/Hide Demo Files ==&lt;br /&gt;
[[File:RCK2 1.png|423x423px]]&lt;br /&gt;
&lt;br /&gt;
The first change to the Editor Tools is the addition of a toggle named '''&amp;quot;Show Demo Files?&amp;quot;'''. When toggled on, the respective Editor (such as &amp;quot;Rck Object Viewer&amp;quot;, &amp;quot;Cell View&amp;quot;, &amp;quot;Quests&amp;quot;, &amp;quot;Rck AI Editor&amp;quot;, etc.) will show files related to the Rck Demo. As you can imagine, toggling it off will hide from the lists content related to the demo.&lt;br /&gt;
&lt;br /&gt;
This will be pretty useful when you'll be deep into creating your own content and the Rck items will get in your way as you're trying to find or search for things.&lt;br /&gt;
&lt;br /&gt;
Each asset that can be hidden has now a flag &amp;quot;IS_DEMO_FILE&amp;quot;, that will act as the flag that hides/show results:&lt;br /&gt;
&lt;br /&gt;
[[File:Rck 2.png|400x400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So as you'll make new content it will be enough to disable this flag for your own items.&lt;br /&gt;
&lt;br /&gt;
'''You can also set the default value''' for the '''&amp;quot;Show Demo Files?&amp;quot;''' toggle to be on/off whenever you open your project by going in &amp;quot;''Edit-&amp;gt;Project Settings-RPG Creation Kit''&amp;quot; and setting the value of the toggle there. Setting it off will make sure that whenever you open a window like the &amp;quot;''Rck AI Editor''&amp;quot; the demo files will be set to be hidden by default.&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 3.png|400x400px]]&lt;br /&gt;
&lt;br /&gt;
== Toolbar Functions ==&lt;br /&gt;
[[File:Rck2 5.png|578x578px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main toolbar, located in the upper part of the Editor, will now have three more buttons related to the RPG Creation Kit:&lt;br /&gt;
&lt;br /&gt;
* '''Load Last Save:''' allows you to Start playing in the Editor and automatically loads the latest savegame (or autosave) you have. It's an incredibly helpful tool that allows you to quickly jump in game to view your edits.&lt;br /&gt;
* '''Load Last Cell''': does the opposite. It loads the last cell that you've loaded via the Cell View or Cell Map View. It's best used along with the Load Last Save button t.&lt;br /&gt;
* '''Adjust Time Of Day (ToD) Preview:''' is a slider that sets the Time of Day for your selected &amp;quot;Time of Day Sky Material&amp;quot; (set in the Project Settings). It sets the &amp;quot;currentTime&amp;quot; value in the Sky's material and it updates the scene lighting in base of this value. It's useful to preview a Cell (or many cells) in the Editor at any given time of the day.&lt;br /&gt;
&lt;br /&gt;
== Time of Day ==&lt;br /&gt;
The Time of Day feature adds the concept of time inside of the RCK.&lt;br /&gt;
&lt;br /&gt;
Days consist of 24hrs and there's currently no convention for Days/Months/Years, which is something that can be extended from this system.&lt;br /&gt;
&lt;br /&gt;
A GameObject named '''&amp;quot;TimeOfDayManager'''&amp;quot; has been added to the _WorldLoader_ scene, and it has a component with the same name as the Object that is, in fact, the manager of the time system.  &lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 6.png|560x560px]]&lt;br /&gt;
&lt;br /&gt;
* '''Current Time''' [0-24]: explicit the current time of the day. This can be set when the game starts, when a save game loads, and it can be arbitrarily set from other scripts. For example, the script &amp;quot;JustAnotherDeliveryStage10&amp;quot;.&lt;br /&gt;
* '''Hours''' and '''Minutes''': are derived from the Current Time, and they're useful for you to read in order to create dynamic scenarios based on the current time (see next section &amp;quot;''Dynamic Responses to Current Time''&amp;quot;) or to display the current time on the UI.&lt;br /&gt;
* '''Current Time Scale''': dictates ''how quickly'' time passes. The formula that runs on Update is is:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
SetTime(currentTime + (currentTimeScale * Time.deltaTime));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;A Time Scale of 1 means that one hour passes every second, so for the default value of 0.05, a full day (24hrs) 480 seconds or 8 minutes. You can also set this at runtime whenever you want, although runtime changes are not saved on the save-file (the value you set in the inspector will be loaded when a savegame is loaded).&lt;br /&gt;
*'''Skybox Material''': is a reference to the material that you're using in your world. If you want a different Skybox material you'll have to change this reference (to update it in game) and the reference in Project Settings (to allow the ToD slider to correctly preview the skybox in the editor). In the RCK default configuration there is only one Skybox Material that contains 3 Cubemaps that represent Day, Dusk, Night, that are blended in base of the Current Time Value. You can swap the Skybox Material reference if you want, even during runtime, but you'll also have to do so in the [https://docs.unity3d.com/ScriptReference/RenderSettings-skybox.html RenderSettings].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The next values &amp;quot;Sun &amp;amp; Moon&amp;quot; allows you to fine-control the lighting of your scenes as time passes.&lt;br /&gt;
&lt;br /&gt;
* '''Sun Light:''' is a reference to your main Directional Light (sun) that is also in the _WorldLoader_ scene.&lt;br /&gt;
* '''Sun Color:''' is the sun's color.&lt;br /&gt;
* '''Sun Intensity:''' allows you to set a curve that controls the intensity of the Sun's light as time goes by. So the value at the beginning of the curve would be the sun's intensity at hour 0:00, while the last value is at the very last minute of the day 23:59.&lt;br /&gt;
* '''Ambient Color/Intensity:''' allows you to define gradients that controls the [https://docs.unity3d.com/speedtree-modeler/manual/light-object-reference.html ambience] of your scene at runtime. The gradient is also distributed over the currentTime, so you can have dark ambient settings at night and more light ones during the day.&lt;br /&gt;
* '''Fog Color/Density:''' allows you to do the same but to the fog setting of your scene.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The values set in here are to be thought as the &amp;quot;default&amp;quot; values.&lt;br /&gt;
&lt;br /&gt;
'''However,''' you probably want control over ambience/fog for '''each [[worldspace]]''' and even for '''each [[cell]]'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 7.png|475x475px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Worldspace data has also been given these properties, to allow you to customize your worldspaces as you wish.&lt;br /&gt;
&lt;br /&gt;
* '''Global_TOD_ENABLE_SKYBOX_AND_LIGHTING_EDITS:''' if set to true it will mean that the default 'Time of Day Manager' values we've set previously for Ambient/Fog will be '''overridden''' by the Worldspace when the player will be in that worldspace.&lt;br /&gt;
* The rest of the values are the same as explained previously, with some additional tweaks such as fog start/end and modes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The same concept applies for individual Cells:&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 9.png|581x581px]]&lt;br /&gt;
&lt;br /&gt;
* '''Local_Override_ToD_Setting:''' determines whether to inherit the &amp;lt;code&amp;gt;TOD_ENABLE_SKYBOX_AND_LIGHTING_EDITS&amp;lt;/code&amp;gt; setting from the parent Worldspace or use the local boolean &amp;lt;code&amp;gt;Local_TOD_ENABLE_SKYBOX_AND_LIGHTING_EDITS&amp;lt;/code&amp;gt;  defined on this Cell. If Local_Override is false, &amp;lt;code&amp;gt;Local_TOD_ENABLE_SKYBOX_AND_LIGHTING_EDITS has obviously no effect.&amp;lt;/code&amp;gt;&lt;br /&gt;
* The rest of the values are the same as explained previously.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So the idea is that you would have ambient/fog responsive to the Time of Day (set at a worldspace level) for exterior worlds, and you can decide to override it for interiors (such as always-dark dungeons). But, you can also make interiors (such as houses with windows) whose Ambient lighting responds to time of day.&lt;br /&gt;
&lt;br /&gt;
== Dynamic Responses to Current Time ==&lt;br /&gt;
This whole Time System goes well together with the [[Scripting|Scripting System]] of the RPG Creation Kit and in general with the component-based architecture of Unity.&lt;br /&gt;
&lt;br /&gt;
We can query at anytime the Current Time of day, also as (Hour::Minute) and dynamically make things happen, or prevent things from happening. This allows you to create content that depends on time of day, such as dungeons that are only accessible at night, events that can only happen at a certain time of the day, and this also allows for Dynamic NPCs routines.&lt;br /&gt;
&lt;br /&gt;
In the RCK demo we have 5 examples:&lt;br /&gt;
&lt;br /&gt;
* '''NPCs equip torches at night.''' [RckAI_EquipTorchAtNight.cs]&lt;br /&gt;
* '''Shops in the city close at night.''' [CityInterior_LockShopsAtNight.cs]&lt;br /&gt;
* '''The &amp;quot;Killing Monsters&amp;quot; quest can be only completed during the night (22:00 - 05:00), because the door entrance will be locked during the day''' [Virrihael_LockUnlockVampiresDungeon.cs].&lt;br /&gt;
* '''Merchants in the City simulate stop working at night and simulate going in their houses''' [CityInterior_StallOwnersGoToSleep.cs].&lt;br /&gt;
* '''The windows of the houses in the city will be lit at night''' [CityInterior_TurnHouseLightsOn.cs].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let's see the NPCs equip torches at night example.&lt;br /&gt;
&lt;br /&gt;
You can attach the '''RckAI_EquipTorchAtNight''' component to any NPC prefab you have. Such as &amp;quot;CityGuard004&amp;quot; shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 10.png|537x537px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This component acts as a &amp;quot;manager&amp;quot; or &amp;quot;controller&amp;quot; for the NPC actions that have to depend on time. &lt;br /&gt;
&lt;br /&gt;
The logic for this example is very simple, if the CurrentTime is greater or equal of what we consider the start of the day (dayStartHour), and the CurrentTime is lesser than what we consider the start of the night (nightStartHour), we should not have a torch equipped.&lt;br /&gt;
&lt;br /&gt;
Otherwise, we should equip a torch. This simple logic is present in the script &amp;quot;RckAI_EquipTorchAtNight&amp;quot;, that subscribes to listen to '''OnHourChanges''' event. &lt;br /&gt;
&lt;br /&gt;
So everytime there's an hour change we can run the check to equip/unequip the torch.&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
public void HandleOnHourChange(int curHour)&lt;br /&gt;
{&lt;br /&gt;
    if (ai == null || ai.equipment == null || ai.isInOfflineMode || !ai.isAlive) &lt;br /&gt;
        return;&lt;br /&gt;
&lt;br /&gt;
    bool isTorchEquipped = ai.equipment.currentTorchInHand != null;&lt;br /&gt;
&lt;br /&gt;
    // Equip torch logic&lt;br /&gt;
    if (curHour &amp;gt;= dayStartHour &amp;amp;&amp;amp; curHour &amp;lt; nightStartHour)&lt;br /&gt;
    {&lt;br /&gt;
        if (isTorchEquipped)&lt;br /&gt;
            ai.equipment.Unequip(EquipmentSlots.LHand);&lt;br /&gt;
    }&lt;br /&gt;
    else if (!isTorchEquipped)&lt;br /&gt;
    {&lt;br /&gt;
        var torch = ai.inventory.GetItem(&amp;quot;ITorch001&amp;quot;);&lt;br /&gt;
        if (torch != null)&lt;br /&gt;
            ai.equipment.Equip(torch);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You can also subscribe functions to the '''onMinuteChanges''' or '''onTimeChanges''' to have more granular control.&lt;br /&gt;
&lt;br /&gt;
The Scripts are placed on the most suitable GameObject you can think of:&lt;br /&gt;
&lt;br /&gt;
* For RckAI Equip Torch, we place it on the NPC itself.&lt;br /&gt;
* For the Door that has to be locked at night, we could place it on the door itself. In my case I prefer to have a &amp;quot;TIME_DEPENDENT_SCRIPTS&amp;quot; GameObject in each Cell, so it will be attached to that game object.&lt;br /&gt;
* Same thing for both the houses window's light logic and merchants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This idea is the whole foundation to build proper '''NPCs Schedules''', that I wish to create and formalize formalized in dedicated assets in a future update.&lt;br /&gt;
&lt;br /&gt;
== XP, Leveling &amp;amp; New Attributes System ==&lt;br /&gt;
The Attributes System has been reworked to actually influence in-game actions, for both the player, NPCs and Creatures. &lt;br /&gt;
&lt;br /&gt;
In addition to that, XP and Levels are now a thing. The player can earn XP by killing monsters, completing quests or via [[Scripting]], and also [[Events And Consequences|Events &amp;amp; Consequences]]. As you could expect, the player levels up and he's granted attributes points to improve his attributes. RckAI (and derived) also have a level now, that is defined by their attributes (the more the sum of the attributes values, the greater the level) and the level of the AI is used to compute the XP reward on kill.&lt;br /&gt;
&lt;br /&gt;
Let's see how this is managed:&lt;br /&gt;
&lt;br /&gt;
=== Default Values ===&lt;br /&gt;
The first thing that you should know are '''default values.'''&lt;br /&gt;
&lt;br /&gt;
'''For the Player''', these are set in the RckSettings.cs file, under the name of '''&amp;lt;code&amp;gt;PLAYER_ATTRIBUTES_DEFAULT_X&amp;lt;/code&amp;gt;'''where &amp;quot;X&amp;quot; is the attribute short name. By default all values are set to 25. &lt;br /&gt;
&lt;br /&gt;
'''For the AI''' (when created via the RckAI Editor) they will have the values of the attributes of the '''RckAI_Prefab''' (located in your project).&lt;br /&gt;
&lt;br /&gt;
=== Player XP and Level Up ===&lt;br /&gt;
The XP &amp;quot;curve&amp;quot; to level up is defined as a function the '''RckSettings''' file, under the name of &amp;quot;'''GetNextLevelXPValue(uint level)'''&amp;quot;''',''' and stands as the following:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
// Calculates the XP needed to reach the given level&lt;br /&gt;
public static ulong GetNextLevelXPValue(uint level)&lt;br /&gt;
{&lt;br /&gt;
    ulong xp = level * level * XP_NEXT_LEVEL_SCALING;&lt;br /&gt;
    return xp;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;So the value returned by this function is the '''amount of XP needed for a level up'''. This amount depends on the player's level.&lt;br /&gt;
&lt;br /&gt;
You can of course change and tweak this function as much as you want.&lt;br /&gt;
&lt;br /&gt;
=== Player Attributes Point per level ===&lt;br /&gt;
Regarding the player's level up, the RckSettings also defines these constants you may want to tweak:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public static float LEVELLING_UP_ALERT_MESSAGE_DURATION = 5;&lt;br /&gt;
public static uint LEVELLING_POINTS_PER_LEVEL = 5; // 5 attributes points per level&lt;br /&gt;
public static bool LEVELLING_LEVEL_2_SKILL_TUTORIAL_ENABLED = true;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AI Level and XP Awarded On Kill ===&lt;br /&gt;
The AI level is automatically set while you tweak the AI's Attributes in the &amp;quot;RckAI Editor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The level is calculated in base of a constant set in the RckSettings:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public static uint LEVELLING_AI_ATTRIBUTES_POINTS_PER_LEVEL = 5;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Every '''LEVELLING_AI_ATTRIBUTES_POINTS_PER_LEVEL''' (value) gave to the AI increases the AI level by 1.&lt;br /&gt;
&lt;br /&gt;
AI Level is then used to calculate XP Reward:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public static ulong CalculateXPGainedOnAIKill(uint aiLevel)&lt;br /&gt;
{&lt;br /&gt;
    ulong xp = aiLevel * XP_GAINED_ON_AI_KILL_BASE;&lt;br /&gt;
    return xp;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You can edit &amp;quot;XP_GAINED_ON_KILL_BASE&amp;quot; default value as you wish.&lt;br /&gt;
&lt;br /&gt;
The value returned by this function is also multiplied by the '''XpMultiplier''' that you can set for each AI:&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 12.png|634x634px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thanks to the '''Xp Mult''' I was able to tweak the value for all the AI the player would meet in the first tutorial dungeon and make sure that killing everything would gain him exactly 1 level.&lt;br /&gt;
&lt;br /&gt;
=== Derived Attributes ===&lt;br /&gt;
Derived attributes (such as maxHealth, maxMana, etc.) are now effectively derived from the base attributes. For example, Constitution directly affects the max amount of HPs and Willpower affects the max value of Mana.&lt;br /&gt;
&lt;br /&gt;
The formulas are explicited as static functions inside the RckSettings.cs file.&lt;br /&gt;
&lt;br /&gt;
For example, max health is calculated as the following:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public static float GetMaxHealthCalculation(int attConstitution, int attStrength)&lt;br /&gt;
{&lt;br /&gt;
    float constitutionModifier = 5.25f;&lt;br /&gt;
    float strengthModifier = 0.5f;&lt;br /&gt;
&lt;br /&gt;
    float maxHealth = ATTRIBUTES_DEF_HEALTH + (attConstitution * constitutionModifier) + (attStrength * strengthModifier);&lt;br /&gt;
    return maxHealth;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
'''ATTRIBUTES_DEF_HEALTH''' is by default '''1.0f'''.&lt;br /&gt;
&lt;br /&gt;
There are now a lot of derived attributes, whose definitions are all in the RckSettings file. You can obviously add your own as well.&lt;br /&gt;
&lt;br /&gt;
== Sprint Attacks / Skills ==&lt;br /&gt;
&lt;br /&gt;
== Class Selection ==&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
AI Aggro Lines&lt;br /&gt;
&lt;br /&gt;
AI Perception Improvements&lt;br /&gt;
&lt;br /&gt;
Sneak attacks&lt;br /&gt;
&lt;br /&gt;
Every UI state can pause the game or not&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
	<entry>
		<id>https://silvematt.com/URPGCreationKitDocumentation/index.php?title=What%27s_new_in_the_RPG_Creation_Kit_2&amp;diff=763</id>
		<title>What's new in the RPG Creation Kit 2</title>
		<link rel="alternate" type="text/html" href="https://silvematt.com/URPGCreationKitDocumentation/index.php?title=What%27s_new_in_the_RPG_Creation_Kit_2&amp;diff=763"/>
		<updated>2026-02-05T18:54:02Z</updated>

		<summary type="html">&lt;p&gt;Silvematt: /* Other */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this page you'll find an explanation of the new systems and changes that arrived with the release of the '''RPG Creation Kit 2.0'''.&lt;br /&gt;
&lt;br /&gt;
== Show/Hide Demo Files ==&lt;br /&gt;
[[File:RCK2 1.png|423x423px]]&lt;br /&gt;
&lt;br /&gt;
The first change to the Editor Tools is the addition of a toggle named '''&amp;quot;Show Demo Files?&amp;quot;'''. When toggled on, the respective Editor (such as &amp;quot;Rck Object Viewer&amp;quot;, &amp;quot;Cell View&amp;quot;, &amp;quot;Quests&amp;quot;, &amp;quot;Rck AI Editor&amp;quot;, etc.) will show files related to the Rck Demo. As you can imagine, toggling it off will hide from the lists content related to the demo.&lt;br /&gt;
&lt;br /&gt;
This will be pretty useful when you'll be deep into creating your own content and the Rck items will get in your way as you're trying to find or search for things.&lt;br /&gt;
&lt;br /&gt;
Each asset that can be hidden has now a flag &amp;quot;IS_DEMO_FILE&amp;quot;, that will act as the flag that hides/show results:&lt;br /&gt;
&lt;br /&gt;
[[File:Rck 2.png|400x400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So as you'll make new content it will be enough to disable this flag for your own items.&lt;br /&gt;
&lt;br /&gt;
'''You can also set the default value''' for the '''&amp;quot;Show Demo Files?&amp;quot;''' toggle to be on/off whenever you open your project by going in &amp;quot;''Edit-&amp;gt;Project Settings-RPG Creation Kit''&amp;quot; and setting the value of the toggle there. Setting it off will make sure that whenever you open a window like the &amp;quot;''Rck AI Editor''&amp;quot; the demo files will be set to be hidden by default.&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 3.png|400x400px]]&lt;br /&gt;
&lt;br /&gt;
== Toolbar Functions ==&lt;br /&gt;
[[File:Rck2 5.png|578x578px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main toolbar, located in the upper part of the Editor, will now have three more buttons related to the RPG Creation Kit:&lt;br /&gt;
&lt;br /&gt;
* '''Load Last Save:''' allows you to Start playing in the Editor and automatically loads the latest savegame (or autosave) you have. It's an incredibly helpful tool that allows you to quickly jump in game to view your edits.&lt;br /&gt;
* '''Load Last Cell''': does the opposite. It loads the last cell that you've loaded via the Cell View or Cell Map View. It's best used along with the Load Last Save button t.&lt;br /&gt;
* '''Adjust Time Of Day (ToD) Preview:''' is a slider that sets the Time of Day for your selected &amp;quot;Time of Day Sky Material&amp;quot; (set in the Project Settings). It sets the &amp;quot;currentTime&amp;quot; value in the Sky's material and it updates the scene lighting in base of this value. It's useful to preview a Cell (or many cells) in the Editor at any given time of the day.&lt;br /&gt;
&lt;br /&gt;
== Time of Day ==&lt;br /&gt;
The Time of Day feature adds the concept of time inside of the RCK.&lt;br /&gt;
&lt;br /&gt;
Days consist of 24hrs and there's currently no convention for Days/Months/Years, which is something that can be extended from this system.&lt;br /&gt;
&lt;br /&gt;
A GameObject named '''&amp;quot;TimeOfDayManager'''&amp;quot; has been added to the _WorldLoader_ scene, and it has a component with the same name as the Object that is, in fact, the manager of the time system.  &lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 6.png|560x560px]]&lt;br /&gt;
&lt;br /&gt;
* '''Current Time''' [0-24]: explicit the current time of the day. This can be set when the game starts, when a save game loads, and it can be arbitrarily set from other scripts. For example, the script &amp;quot;JustAnotherDeliveryStage10&amp;quot;.&lt;br /&gt;
* '''Hours''' and '''Minutes''': are derived from the Current Time, and they're useful for you to read in order to create dynamic scenarios based on the current time (see next section &amp;quot;''Dynamic Responses to Current Time''&amp;quot;) or to display the current time on the UI.&lt;br /&gt;
* '''Current Time Scale''': dictates ''how quickly'' time passes. The formula that runs on Update is is:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
SetTime(currentTime + (currentTimeScale * Time.deltaTime));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;A Time Scale of 1 means that one hour passes every second, so for the default value of 0.05, a full day (24hrs) 480 seconds or 8 minutes. You can also set this at runtime whenever you want, although runtime changes are not saved on the save-file (the value you set in the inspector will be loaded when a savegame is loaded).&lt;br /&gt;
*'''Skybox Material''': is a reference to the material that you're using in your world. If you want a different Skybox material you'll have to change this reference (to update it in game) and the reference in Project Settings (to allow the ToD slider to correctly preview the skybox in the editor). In the RCK default configuration there is only one Skybox Material that contains 3 Cubemaps that represent Day, Dusk, Night, that are blended in base of the Current Time Value. You can swap the Skybox Material reference if you want, even during runtime, but you'll also have to do so in the [https://docs.unity3d.com/ScriptReference/RenderSettings-skybox.html RenderSettings].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The next values &amp;quot;Sun &amp;amp; Moon&amp;quot; allows you to fine-control the lighting of your scenes as time passes.&lt;br /&gt;
&lt;br /&gt;
* '''Sun Light:''' is a reference to your main Directional Light (sun) that is also in the _WorldLoader_ scene.&lt;br /&gt;
* '''Sun Color:''' is the sun's color.&lt;br /&gt;
* '''Sun Intensity:''' allows you to set a curve that controls the intensity of the Sun's light as time goes by. So the value at the beginning of the curve would be the sun's intensity at hour 0:00, while the last value is at the very last minute of the day 23:59.&lt;br /&gt;
* '''Ambient Color/Intensity:''' allows you to define gradients that controls the [https://docs.unity3d.com/speedtree-modeler/manual/light-object-reference.html ambience] of your scene at runtime. The gradient is also distributed over the currentTime, so you can have dark ambient settings at night and more light ones during the day.&lt;br /&gt;
* '''Fog Color/Density:''' allows you to do the same but to the fog setting of your scene.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The values set in here are to be thought as the &amp;quot;default&amp;quot; values.&lt;br /&gt;
&lt;br /&gt;
'''However,''' you probably want control over ambience/fog for '''each [[worldspace]]''' and even for '''each [[cell]]'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 7.png|475x475px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Worldspace data has also been given these properties, to allow you to customize your worldspaces as you wish.&lt;br /&gt;
&lt;br /&gt;
* '''Global_TOD_ENABLE_SKYBOX_AND_LIGHTING_EDITS:''' if set to true it will mean that the default 'Time of Day Manager' values we've set previously for Ambient/Fog will be '''overridden''' by the Worldspace when the player will be in that worldspace.&lt;br /&gt;
* The rest of the values are the same as explained previously, with some additional tweaks such as fog start/end and modes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The same concept applies for individual Cells:&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 9.png|581x581px]]&lt;br /&gt;
&lt;br /&gt;
* '''Local_Override_ToD_Setting:''' determines whether to inherit the &amp;lt;code&amp;gt;TOD_ENABLE_SKYBOX_AND_LIGHTING_EDITS&amp;lt;/code&amp;gt; setting from the parent Worldspace or use the local boolean &amp;lt;code&amp;gt;Local_TOD_ENABLE_SKYBOX_AND_LIGHTING_EDITS&amp;lt;/code&amp;gt;  defined on this Cell. If Local_Override is false, &amp;lt;code&amp;gt;Local_TOD_ENABLE_SKYBOX_AND_LIGHTING_EDITS has obviously no effect.&amp;lt;/code&amp;gt;&lt;br /&gt;
* The rest of the values are the same as explained previously.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So the idea is that you would have ambient/fog responsive to the Time of Day (set at a worldspace level) for exterior worlds, and you can decide to override it for interiors (such as always-dark dungeons). But, you can also make interiors (such as houses with windows) whose Ambient lighting responds to time of day.&lt;br /&gt;
&lt;br /&gt;
== Dynamic Responses to Current Time ==&lt;br /&gt;
This whole Time System goes well together with the [[Scripting|Scripting System]] of the RPG Creation Kit and in general with the component-based architecture of Unity.&lt;br /&gt;
&lt;br /&gt;
We can query at anytime the Current Time of day, also as (Hour::Minute) and dynamically make things happen, or prevent things from happening. This allows you to create content that depends on time of day, such as dungeons that are only accessible at night, events that can only happen at a certain time of the day, and this also allows for Dynamic NPCs routines.&lt;br /&gt;
&lt;br /&gt;
In the RCK demo we have 5 examples:&lt;br /&gt;
&lt;br /&gt;
* '''NPCs equip torches at night.''' [RckAI_EquipTorchAtNight.cs]&lt;br /&gt;
* '''Shops in the city close at night.''' [CityInterior_LockShopsAtNight.cs]&lt;br /&gt;
* '''The &amp;quot;Killing Monsters&amp;quot; quest can be only completed during the night (22:00 - 05:00), because the door entrance will be locked during the day''' [Virrihael_LockUnlockVampiresDungeon.cs].&lt;br /&gt;
* '''Merchants in the City simulate stop working at night and simulate going in their houses''' [CityInterior_StallOwnersGoToSleep.cs].&lt;br /&gt;
* '''The windows of the houses in the city will be lit at night''' [CityInterior_TurnHouseLightsOn.cs].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let's see the NPCs equip torches at night example.&lt;br /&gt;
&lt;br /&gt;
You can attach the '''RckAI_EquipTorchAtNight''' component to any NPC prefab you have. Such as &amp;quot;CityGuard004&amp;quot; shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 10.png|537x537px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This component acts as a &amp;quot;manager&amp;quot; or &amp;quot;controller&amp;quot; for the NPC actions that have to depend on time. &lt;br /&gt;
&lt;br /&gt;
The logic for this example is very simple, if the CurrentTime is greater or equal of what we consider the start of the day (dayStartHour), and the CurrentTime is lesser than what we consider the start of the night (nightStartHour), we should not have a torch equipped.&lt;br /&gt;
&lt;br /&gt;
Otherwise, we should equip a torch. This simple logic is present in the script &amp;quot;RckAI_EquipTorchAtNight&amp;quot;, that subscribes to listen to '''OnHourChanges''' event. &lt;br /&gt;
&lt;br /&gt;
So everytime there's an hour change we can run the check to equip/unequip the torch.&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
public void HandleOnHourChange(int curHour)&lt;br /&gt;
{&lt;br /&gt;
    if (ai == null || ai.equipment == null || ai.isInOfflineMode || !ai.isAlive) &lt;br /&gt;
        return;&lt;br /&gt;
&lt;br /&gt;
    bool isTorchEquipped = ai.equipment.currentTorchInHand != null;&lt;br /&gt;
&lt;br /&gt;
    // Equip torch logic&lt;br /&gt;
    if (curHour &amp;gt;= dayStartHour &amp;amp;&amp;amp; curHour &amp;lt; nightStartHour)&lt;br /&gt;
    {&lt;br /&gt;
        if (isTorchEquipped)&lt;br /&gt;
            ai.equipment.Unequip(EquipmentSlots.LHand);&lt;br /&gt;
    }&lt;br /&gt;
    else if (!isTorchEquipped)&lt;br /&gt;
    {&lt;br /&gt;
        var torch = ai.inventory.GetItem(&amp;quot;ITorch001&amp;quot;);&lt;br /&gt;
        if (torch != null)&lt;br /&gt;
            ai.equipment.Equip(torch);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You can also subscribe functions to the '''onMinuteChanges''' or '''onTimeChanges''' to have more granular control.&lt;br /&gt;
&lt;br /&gt;
The Scripts are placed on the most suitable GameObject you can think of:&lt;br /&gt;
&lt;br /&gt;
* For RckAI Equip Torch, we place it on the NPC itself.&lt;br /&gt;
* For the Door that has to be locked at night, we could place it on the door itself. In my case I prefer to have a &amp;quot;TIME_DEPENDENT_SCRIPTS&amp;quot; GameObject in each Cell, so it will be attached to that game object.&lt;br /&gt;
* Same thing for both the houses window's light logic and merchants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This idea is the whole foundation to build proper '''NPCs Schedules''', that I wish to create and formalize formalized in dedicated assets in a future update.&lt;br /&gt;
&lt;br /&gt;
== XP, Leveling &amp;amp; New Attributes System ==&lt;br /&gt;
The Attributes System has been reworked to actually influence in-game actions, for both the player, NPCs and Creatures. &lt;br /&gt;
&lt;br /&gt;
In addition to that, XP and Levels are now a thing. The player can earn XP by killing monsters, completing quests or via [[Scripting]], and also [[Events And Consequences|Events &amp;amp; Consequences]]. As you could expect, the player levels up and he's granted attributes points to improve his attributes. RckAI (and derived) also have a level now, that is defined by their attributes (the more the sum of the attributes values, the greater the level) and the level of the AI is used to compute the XP reward on kill.&lt;br /&gt;
&lt;br /&gt;
Let's see how this is managed:&lt;br /&gt;
&lt;br /&gt;
=== Default Values ===&lt;br /&gt;
The first thing that you should know are '''default values.'''&lt;br /&gt;
&lt;br /&gt;
'''For the Player''', these are set in the RckSettings.cs file, under the name of '''&amp;lt;code&amp;gt;PLAYER_ATTRIBUTES_DEFAULT_X&amp;lt;/code&amp;gt;'''where &amp;quot;X&amp;quot; is the attribute short name. By default all values are set to 25. &lt;br /&gt;
&lt;br /&gt;
'''For the AI''' (when created via the RckAI Editor) they will have the values of the attributes of the '''RckAI_Prefab''' (located in your project).&lt;br /&gt;
&lt;br /&gt;
=== Player XP and Level Up ===&lt;br /&gt;
The XP &amp;quot;curve&amp;quot; to level up is defined as a function the '''RckSettings''' file, under the name of &amp;quot;'''GetNextLevelXPValue(uint level)'''&amp;quot;''',''' and stands as the following:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
// Calculates the XP needed to reach the given level&lt;br /&gt;
public static ulong GetNextLevelXPValue(uint level)&lt;br /&gt;
{&lt;br /&gt;
    ulong xp = level * level * XP_NEXT_LEVEL_SCALING;&lt;br /&gt;
    return xp;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;So the value returned by this function is the '''amount of XP needed for a level up'''. This amount depends on the player's level.&lt;br /&gt;
&lt;br /&gt;
You can of course change and tweak this function as much as you want.&lt;br /&gt;
&lt;br /&gt;
=== Player Attributes Point per level ===&lt;br /&gt;
Regarding the player's level up, the RckSettings also defines these constants you may want to tweak:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public static float LEVELLING_UP_ALERT_MESSAGE_DURATION = 5;&lt;br /&gt;
public static uint LEVELLING_POINTS_PER_LEVEL = 5; // 5 attributes points per level&lt;br /&gt;
public static bool LEVELLING_LEVEL_2_SKILL_TUTORIAL_ENABLED = true;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== AI Level and XP Awarded On Kill ===&lt;br /&gt;
The AI level is automatically set while you tweak the AI's Attributes in the &amp;quot;RckAI Editor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The level is calculated in base of a constant set in the RckSettings:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public static uint LEVELLING_AI_ATTRIBUTES_POINTS_PER_LEVEL = 5;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Every '''LEVELLING_AI_ATTRIBUTES_POINTS_PER_LEVEL''' (value) gave to the AI increases the AI level by 1.&lt;br /&gt;
&lt;br /&gt;
AI Level is then used to calculate XP Reward:&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public static ulong CalculateXPGainedOnAIKill(uint aiLevel)&lt;br /&gt;
{&lt;br /&gt;
    ulong xp = aiLevel * XP_GAINED_ON_AI_KILL_BASE;&lt;br /&gt;
    return xp;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;You can edit &amp;quot;XP_GAINED_ON_KILL_BASE&amp;quot; default value as you wish.&lt;br /&gt;
&lt;br /&gt;
The value returned by this function is also multiplied by the '''XpMultiplier''' that you can set for each AI:&lt;br /&gt;
&lt;br /&gt;
[[File:Rck2 12.png|634x634px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thanks to the '''Xp Mult''' I was able to tweak the value for all the AI the player would meet in the first tutorial dungeon and make sure that killing everything would gain him exactly 1 level.&lt;br /&gt;
&lt;br /&gt;
=== Derived Attributes ===&lt;br /&gt;
Derived attributes (such as maxHealth, maxMana, etc.) are now effectively derived from the base attributes. For example, Constitution directly affects the max amount of HPs and Willpower affects the max value of Mana.&lt;br /&gt;
&lt;br /&gt;
You can look at the '''EntityAttributes.CalculateFromAttributes''' function inside the EntityAttributes.cs script to see how these are applied.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sprint Attacks / Skills ==&lt;br /&gt;
&lt;br /&gt;
== Class Selection ==&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
AI Aggro Lines&lt;br /&gt;
&lt;br /&gt;
AI Perception Improvements&lt;br /&gt;
&lt;br /&gt;
Sneak attacks&lt;br /&gt;
&lt;br /&gt;
Every UI state can pause the game or not&lt;/div&gt;</summary>
		<author><name>Silvematt</name></author>
	</entry>
</feed>