<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.ardenfall.com:443/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Joshcamas</id>
	<title>Ardenfall Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ardenfall.com:443/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Joshcamas"/>
	<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php/Special:Contributions/Joshcamas"/>
	<updated>2026-06-05T23:35:13Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Creating_a_Quest&amp;diff=51</id>
		<title>Creating a Quest</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Creating_a_Quest&amp;diff=51"/>
		<updated>2026-06-03T19:14:53Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quest System Overview ==&lt;br /&gt;
The Quest System is useful for creating quests for the player to complete, unmarked interactions, and even gameplay systems.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quest Data&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Quest Data is the core asset that holds all the static information related to a quest - objects, phases, etc.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quest State&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A quest may be in one of these states: Unstarted, Started, Completed, or Failed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quest Phase&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A quest is broken up into phases. A quest may only have one phase active at once. Each phase can have multiple objectives.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quest Objective&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A quest objective is a goal for the player. It can be hidden or displayed at any time if the phase is active. It can have its state changed at any time regardless of the owning phase&#039;s state. &lt;br /&gt;
&lt;br /&gt;
== Quest Data ==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Quest Phases ==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Quest Objectives ==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Quest Objects ==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
&#039;&#039;&#039;Storing State&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Objectives and Phases are a great way to store state. If you have an objective &#039;pick up the apple&#039;, then there&#039;s no need to have a bool variable &#039;applePickedUp&#039;. This reduces the potential for bugs and desyncing.&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Creating_Dialog&amp;diff=50</id>
		<title>Creating Dialog</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Creating_Dialog&amp;diff=50"/>
		<updated>2026-05-29T20:32:00Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Dialog Graph Builder ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Registering Dialog to NPC ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Quest Dialog ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Graph View Tool ===&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Creating_Dialog&amp;diff=49</id>
		<title>Creating Dialog</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Creating_Dialog&amp;diff=49"/>
		<updated>2026-05-24T01:48:27Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Dialog Graph Builder ===&lt;br /&gt;
The Dialog Graph Builder is a way to build dialog with C#.&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;&lt;br /&gt;
var b= new DialogGraphBuilder(graph);&lt;br /&gt;
var greet = b.Greeting(&amp;quot;Hello!&amp;quot;);&lt;br /&gt;
var speak = b.Speak(&amp;quot;How can I help?&amp;quot;);&lt;br /&gt;
var mc = b.MultipleChoice();&lt;br /&gt;
var c0 = mc.AddChoice(&amp;quot;Tell me more&amp;quot;);&lt;br /&gt;
var c1 = mc.AddChoice(&amp;quot;Goodbye&amp;quot;);&lt;br /&gt;
b.Connect(greet, speak);&lt;br /&gt;
b.Connect(speak, mc);&lt;br /&gt;
var topic = b.Topic(&amp;quot;Tell me more&amp;quot;);&lt;br /&gt;
var close = b.Finish(closeDialog: true);&lt;br /&gt;
b.Connect(c0, topic); b.Connect(c1, close);&lt;br /&gt;
b.Connect(topic, fin);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Registering Dialog to NPC ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Quest Dialog ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Graph View Tool ===&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=48</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=48"/>
		<updated>2026-05-24T01:47:55Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to Ardenfall&#039;s &#039;&#039;&#039;Modding Wiki.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The goal for this wiki is to document modding tools, ardenfall&#039;s API, and also data mined components from the game itself. &lt;br /&gt;
&lt;br /&gt;
It is officially maintained by Spellcast Studios, but is also opened to the public for editing, so there is no promise of complete correctness. (Although we&#039;ll do our best to ensure high quality pages!) &lt;br /&gt;
&lt;br /&gt;
It &#039;&#039;can&#039;&#039; be treated as a standard game wiki (documenting quests and existing content), but the focus will still primarily centered on modding.&lt;br /&gt;
&lt;br /&gt;
=== Modding Overview ===&lt;br /&gt;
[[Getting Started]]&lt;br /&gt;
&lt;br /&gt;
[[Mod Scripting]]&lt;br /&gt;
&lt;br /&gt;
[[Custom Asset Importing|Asset Importing]]&lt;br /&gt;
&lt;br /&gt;
=== Official Tools ===&lt;br /&gt;
[[Game Debugger]]&lt;br /&gt;
&lt;br /&gt;
=== Userbase Tools ===&lt;br /&gt;
- Your tool here&lt;br /&gt;
&lt;br /&gt;
=== Scripting API ===&lt;br /&gt;
[[Codebase Overview]]&lt;br /&gt;
&lt;br /&gt;
[[Messaging System]]&lt;br /&gt;
&lt;br /&gt;
[[Asset Lookup Table]]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials ===&lt;br /&gt;
[[Creating Custom Items]]&lt;br /&gt;
&lt;br /&gt;
[[Creating a Quest]]&lt;br /&gt;
&lt;br /&gt;
[[Creating Dialog]]&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=46</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=46"/>
		<updated>2026-05-24T00:39:53Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to Ardenfall&#039;s &#039;&#039;&#039;Modding Wiki.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The goal for this wiki is to document modding tools, ardenfall&#039;s API, and also data mined components from the game itself. &lt;br /&gt;
&lt;br /&gt;
It is officially maintained by Spellcast Studios, but is also opened to the public for editing, so there is no promise of complete correctness. (Although we&#039;ll do our best to ensure high quality pages!) &lt;br /&gt;
&lt;br /&gt;
It &#039;&#039;can&#039;&#039; be treated as a standard game wiki (documenting quests and existing content), but the focus will still primarily centered on modding.&lt;br /&gt;
&lt;br /&gt;
=== Modding Overview ===&lt;br /&gt;
[[Getting Started]]&lt;br /&gt;
&lt;br /&gt;
[[Mod Scripting]]&lt;br /&gt;
&lt;br /&gt;
[[Custom Asset Importing|Asset Importing]]&lt;br /&gt;
&lt;br /&gt;
=== Official Tools ===&lt;br /&gt;
[[Game Debugger]]&lt;br /&gt;
&lt;br /&gt;
=== Userbase Tools ===&lt;br /&gt;
- Your tool here&lt;br /&gt;
&lt;br /&gt;
=== Scripting API ===&lt;br /&gt;
[[Codebase Overview]]&lt;br /&gt;
&lt;br /&gt;
[[Messaging System]]&lt;br /&gt;
&lt;br /&gt;
[[Asset Lookup Table]]&lt;br /&gt;
&lt;br /&gt;
[[Creating Custom Items]]&lt;br /&gt;
&lt;br /&gt;
[[Creating a Quest]]&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Creating_a_Quest&amp;diff=45</id>
		<title>Creating a Quest</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Creating_a_Quest&amp;diff=45"/>
		<updated>2026-05-24T00:39:29Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: Created page with &amp;quot;== Quest Data == TODO  == Quest Phases == TODO  == Quest Objectives == TODO  == Quest Objects == TODO&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Quest Data ==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Quest Phases ==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Quest Objectives ==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== Quest Objects ==&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=44</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=44"/>
		<updated>2026-05-24T00:27:32Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to Ardenfall&#039;s &#039;&#039;&#039;Modding Wiki.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The goal for this wiki is to document modding tools, ardenfall&#039;s API, and also data mined components from the game itself. &lt;br /&gt;
&lt;br /&gt;
It is officially maintained by Spellcast Studios, but is also opened to the public for editing, so there is no promise of complete correctness. (Although we&#039;ll do our best to ensure high quality pages!) &lt;br /&gt;
&lt;br /&gt;
It &#039;&#039;can&#039;&#039; be treated as a standard game wiki (documenting quests and existing content), but the focus will still primarily centered on modding.&lt;br /&gt;
&lt;br /&gt;
=== Modding Overview ===&lt;br /&gt;
[[Getting Started]]&lt;br /&gt;
&lt;br /&gt;
[[Mod Scripting]]&lt;br /&gt;
&lt;br /&gt;
[[Custom Asset Importing|Asset Importing]]&lt;br /&gt;
&lt;br /&gt;
=== Official Tools ===&lt;br /&gt;
[[Game Debugger]]&lt;br /&gt;
&lt;br /&gt;
=== Userbase Tools ===&lt;br /&gt;
- Your tool here&lt;br /&gt;
&lt;br /&gt;
=== Scripting API ===&lt;br /&gt;
[[Codebase Overview]]&lt;br /&gt;
&lt;br /&gt;
[[Messaging System]]&lt;br /&gt;
&lt;br /&gt;
[[Asset Lookup Table]]&lt;br /&gt;
&lt;br /&gt;
[[Creating Custom Items]]&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Asset_Lookup_Table&amp;diff=43</id>
		<title>Asset Lookup Table</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Asset_Lookup_Table&amp;diff=43"/>
		<updated>2026-05-24T00:26:56Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: Created page with &amp;quot;The Asset Lookup Table is a key value store that holds many common pieces of data (Scriptable Objects) for the game to access at any time.  This includes all items, all character data assets, all dialog/quest datas, and more.  Note that NOT all data can be found in the lookup table. If you ever want some data to be included, ask us in the Discord. If it&amp;#039;s reasonable, it may be able to be added in a future update.  Internally it is used for any dataset that is referenced...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Asset Lookup Table is a key value store that holds many common pieces of data (Scriptable Objects) for the game to access at any time.&lt;br /&gt;
&lt;br /&gt;
This includes all items, all character data assets, all dialog/quest datas, and more.&lt;br /&gt;
&lt;br /&gt;
Note that NOT all data can be found in the lookup table. If you ever want some data to be included, ask us in the Discord. If it&#039;s reasonable, it may be able to be added in a future update.&lt;br /&gt;
&lt;br /&gt;
Internally it is used for any dataset that is referenced in a save file, but for you, it&#039;s a treasure trove of data to dig through.&lt;br /&gt;
&lt;br /&gt;
=== Asset IDs ===&lt;br /&gt;
For any built in asset, the IDs are in a format tied to unity&#039;s asset system. &lt;br /&gt;
&lt;br /&gt;
You can use the &#039;&#039;LookupTable Searcher&#039;&#039; tool to find an item&#039;s ID, or you can use the LookupTable Dump button to dump all ids into a file you can read.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For custom assets, you can technically use any ID you want - however, I advise having it in the format of yourmod.itemid. For example: CoolCustomWeaponMod.GoldenSwordOfDoom. This ensures another mod that happens to also have a golden sword of doom doesn&#039;t clash with yours&lt;br /&gt;
&lt;br /&gt;
=== API ===&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Creating_Custom_Items&amp;diff=42</id>
		<title>Creating Custom Items</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Creating_Custom_Items&amp;diff=42"/>
		<updated>2026-05-24T00:24:13Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: Created page with &amp;quot;The easiest way to create a custom item is to copy an existing ItemData in the Asset Lookup Table, then register your new ItemData back  into the Asset Lookup Table.  This will allow this item to be spawned, picked up, sold, and stolen.  === Simple Item Example === TODO  === Weapon Example === TODO  === Armor Example === TODO&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The easiest way to create a custom item is to copy an existing ItemData in the Asset Lookup Table, then register your new ItemData back  into the Asset Lookup Table.&lt;br /&gt;
&lt;br /&gt;
This will allow this item to be spawned, picked up, sold, and stolen.&lt;br /&gt;
&lt;br /&gt;
=== Simple Item Example ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Weapon Example ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Armor Example ===&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Custom_Asset_Importing&amp;diff=41</id>
		<title>Custom Asset Importing</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Custom_Asset_Importing&amp;diff=41"/>
		<updated>2026-05-23T17:38:37Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;At some point you may want to import a new model, texture, sound, etc.&lt;br /&gt;
&lt;br /&gt;
This can be done one of two ways - manually via scripting, or by using the built in mod asset importer feature. I suggest the latter, unless you want to do something funky.&lt;br /&gt;
&lt;br /&gt;
=== Asset Manifest ===&lt;br /&gt;
Every mod can have an asset manifest file defined. This lists out all assets you want to import.&lt;br /&gt;
&lt;br /&gt;
Create a file called manifest.txt in your mod directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example Asset Manifest&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;assets&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;assetId&amp;quot;: &amp;quot;testmod.dog&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;texture&amp;quot;,&lt;br /&gt;
      &amp;quot;properties&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;name&amp;quot;: &amp;quot;path&amp;quot;,&lt;br /&gt;
          &amp;quot;value&amp;quot;: &amp;quot;Assets/dog.png&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Built in Importers ===&lt;br /&gt;
There are several built in importers to load up your assets. Most of them are pretty self explanatory!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
!ID&lt;br /&gt;
!Properties&lt;br /&gt;
|-&lt;br /&gt;
|GLTFScene&lt;br /&gt;
|Imports a GLTF file as a GameObject. Ideal for weapons, items, simple objects. &lt;br /&gt;
You can define a built in material to use, and it will automatically apply said material + hook up included textures.&lt;br /&gt;
|gltf_scene&lt;br /&gt;
|path: the path to the gltf file&lt;br /&gt;
shader: (optional) the shader id to import.&lt;br /&gt;
|-&lt;br /&gt;
|Texture&lt;br /&gt;
|Imports a .png or .jpeg as a Texture2D&lt;br /&gt;
|texture&lt;br /&gt;
|path: the path to the image file&lt;br /&gt;
|-&lt;br /&gt;
|AudioClip&lt;br /&gt;
|Imports a .mp3, .wav, or .ogg as an ArdenAudioClip&lt;br /&gt;
|audio_clip&lt;br /&gt;
|path: the path to the audio file&lt;br /&gt;
|-&lt;br /&gt;
|AssetBundle&lt;br /&gt;
|Imports a unity asset bundle.&lt;br /&gt;
|asset_bundle&lt;br /&gt;
|path: the path to the asset bundle file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== GLTFScene ====&lt;br /&gt;
A GLTF scene / model importer. Will import the GLTF object as a gameobject.&lt;br /&gt;
&lt;br /&gt;
Supports material applying using ModMaterialResolver.&lt;br /&gt;
&lt;br /&gt;
Built on the [https://docs.unity3d.com/Packages/com.unity.cloud.gltfast@6.0/manual/index.html GLTFFast] library.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Properties&amp;lt;/u&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Property&lt;br /&gt;
!Required&lt;br /&gt;
!Default&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|path&lt;br /&gt;
|YES&lt;br /&gt;
| -&lt;br /&gt;
|The path to the gltf / glb file&lt;br /&gt;
|-&lt;br /&gt;
|shader&lt;br /&gt;
|NO&lt;br /&gt;
|&amp;quot;Ardenfall/SimpleDiffuse&amp;quot;&lt;br /&gt;
|Defines the shader to be imported. &lt;br /&gt;
Only a single shader per scene is supported at the moment. &lt;br /&gt;
&lt;br /&gt;
See Common Shaders for a list of shaders to try out.&lt;br /&gt;
&lt;br /&gt;
If you leave it blank, will not import any materials.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Common Shaders ===&lt;br /&gt;
&lt;br /&gt;
==== SimpleDiffuse ====&lt;br /&gt;
&#039;&#039;&amp;quot;Ardenfall/Simple Diffuse&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The most common shader used in Ardenfall. An opaque shader that supports:&lt;br /&gt;
&lt;br /&gt;
- Texture, Color, Cullmode, Cutoff&lt;br /&gt;
&lt;br /&gt;
- Specularity, Fake Specularity&lt;br /&gt;
&lt;br /&gt;
- Emission Texture, Emission Color, Emission Fading, Time of Day Emission&lt;br /&gt;
&lt;br /&gt;
- Pivot Rotation Animation&lt;br /&gt;
&lt;br /&gt;
- Vertex Wind Animation&lt;br /&gt;
&lt;br /&gt;
- Fresnel&lt;br /&gt;
&lt;br /&gt;
- Triplaner Texture&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SimpleDiffuse Transparent&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Ardenfall/Simple Diffuse Transparent&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A version of the Simple Diffuse shader that is transparent. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnchantableItem&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Ardenfall/Enchantable Item Diffuse&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The shader used for items that have enchanted glows. (Weapons)&lt;br /&gt;
&lt;br /&gt;
==== CharacterSkin ====&lt;br /&gt;
&#039;&#039;&amp;quot;Ardenfall/Avatar/Character Skin&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The shader used for characters (humanoid skin, monsters bodies).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CharacterClothing&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Ardenfall/Avatar/Character Clothing&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The shader used for character clothing/armor.&lt;br /&gt;
&lt;br /&gt;
=== Example: A Custom Weapon ===&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Custom_Asset_Importing&amp;diff=40</id>
		<title>Custom Asset Importing</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Custom_Asset_Importing&amp;diff=40"/>
		<updated>2026-05-23T17:36:11Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;At some point you may want to import a new model, texture, sound, etc.&lt;br /&gt;
&lt;br /&gt;
This can be done one of two ways - manually via scripting, or by using the built in mod asset importer feature. I suggest the latter, unless you want to do something funky.&lt;br /&gt;
&lt;br /&gt;
=== Asset Manifest ===&lt;br /&gt;
Every mod can have an asset manifest file defined. This lists out all assets you want to import.&lt;br /&gt;
&lt;br /&gt;
Create a file called manifest.txt in your mod directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example Asset Manifest&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;assets&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;assetId&amp;quot;: &amp;quot;testmod.dog&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;texture&amp;quot;,&lt;br /&gt;
      &amp;quot;properties&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;name&amp;quot;: &amp;quot;path&amp;quot;,&lt;br /&gt;
          &amp;quot;value&amp;quot;: &amp;quot;Assets/dog.png&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Built in Importers ===&lt;br /&gt;
There are several built in importers to load up your assets. Most of them are pretty self explanatory!&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
!ID&lt;br /&gt;
!Properties&lt;br /&gt;
|-&lt;br /&gt;
|GLTFScene&lt;br /&gt;
|Imports a GLTF file as a GameObject. Ideal for weapons, items, simple objects. &lt;br /&gt;
You can define a built in material to use, and it will automatically apply said material + hook up included textures.&lt;br /&gt;
|gltf_scene&lt;br /&gt;
|path: the path to the gltf file&lt;br /&gt;
|-&lt;br /&gt;
|Texture&lt;br /&gt;
|Imports a .png or .jpeg as a Texture2D&lt;br /&gt;
|texture&lt;br /&gt;
|path: the path to the image file&lt;br /&gt;
|-&lt;br /&gt;
|AudioClip&lt;br /&gt;
|Imports a .mp3, .wav, or .ogg as an ArdenAudioClip&lt;br /&gt;
|audio_clip&lt;br /&gt;
|path: the path to the audio file&lt;br /&gt;
|-&lt;br /&gt;
|AssetBundle&lt;br /&gt;
|Imports a unity asset bundle.&lt;br /&gt;
|asset_bundle&lt;br /&gt;
|path: the path to the asset bundle file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== GLTFScene ====&lt;br /&gt;
A GLTF scene / model importer. Will import the GLTF object as a gameobject.&lt;br /&gt;
&lt;br /&gt;
Supports material applying using ModMaterialResolver.&lt;br /&gt;
&lt;br /&gt;
Built on the [https://docs.unity3d.com/Packages/com.unity.cloud.gltfast@6.0/manual/index.html GLTFFast] library.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Properties&amp;lt;/u&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Property&lt;br /&gt;
!Required&lt;br /&gt;
!Default&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|path&lt;br /&gt;
|YES&lt;br /&gt;
| -&lt;br /&gt;
|The path to the gltf / glb file&lt;br /&gt;
|-&lt;br /&gt;
|material&lt;br /&gt;
|NO&lt;br /&gt;
|&amp;quot;Ardenfall/SimpleDiffuse&amp;quot;&lt;br /&gt;
|Defines the shader to be imported. &lt;br /&gt;
Only a single shader per scene is supported at the moment. &lt;br /&gt;
See Common Shaders for a list of shaders to try out.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Common Shaders ===&lt;br /&gt;
&lt;br /&gt;
==== SimpleDiffuse ====&lt;br /&gt;
&#039;&#039;&amp;quot;Ardenfall/Simple Diffuse&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The most common shader used in Ardenfall. An opaque shader that supports:&lt;br /&gt;
&lt;br /&gt;
- Texture, Color, Cullmode, Cutoff&lt;br /&gt;
&lt;br /&gt;
- Specularity, Fake Specularity&lt;br /&gt;
&lt;br /&gt;
- Emission Texture, Emission Color, Emission Fading, Time of Day Emission&lt;br /&gt;
&lt;br /&gt;
- Pivot Rotation Animation&lt;br /&gt;
&lt;br /&gt;
- Vertex Wind Animation&lt;br /&gt;
&lt;br /&gt;
- Fresnel&lt;br /&gt;
&lt;br /&gt;
- Triplaner Texture&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;SimpleDiffuse Transparent&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Ardenfall/Simple Diffuse Transparent&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A version of the Simple Diffuse shader that is transparent. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnchantableItem&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Ardenfall/Enchantable Item Diffuse&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The shader used for items that have enchanted glows. (Weapons)&lt;br /&gt;
&lt;br /&gt;
==== CharacterSkin ====&lt;br /&gt;
&#039;&#039;&amp;quot;Ardenfall/Avatar/Character Skin&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The shader used for characters (humanoid skin, monsters bodies).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CharacterClothing&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Ardenfall/Avatar/Character Clothing&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The shader used for character clothing/armor.&lt;br /&gt;
&lt;br /&gt;
=== Example: A Custom Weapon ===&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Category:Pages_with_syntax_highlighting_errors&amp;diff=39</id>
		<title>Category:Pages with syntax highlighting errors</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Category:Pages_with_syntax_highlighting_errors&amp;diff=39"/>
		<updated>2026-05-22T18:14:32Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: Created blank page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=MediaWiki:Hidden-category-category&amp;diff=38</id>
		<title>MediaWiki:Hidden-category-category</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=MediaWiki:Hidden-category-category&amp;diff=38"/>
		<updated>2026-05-22T18:13:30Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hidden categories&lt;br /&gt;
&lt;br /&gt;
Category:Pages with syntax highlighting errors&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=MediaWiki:Hidden-category-category&amp;diff=37</id>
		<title>MediaWiki:Hidden-category-category</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=MediaWiki:Hidden-category-category&amp;diff=37"/>
		<updated>2026-05-22T18:13:14Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: Created page with &amp;quot;Hidden categories Category:Pages with syntax highlighting errors&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hidden categories&lt;br /&gt;
Category:Pages with syntax highlighting errors&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Custom_Asset_Importing&amp;diff=36</id>
		<title>Custom Asset Importing</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Custom_Asset_Importing&amp;diff=36"/>
		<updated>2026-05-22T18:09:07Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;At some point you may want to import a new model, texture, sound, etc.&lt;br /&gt;
&lt;br /&gt;
This can be done one of two ways - manually via scripting, or by using the built in mod asset importer feature. I suggest the latter, unless you want to do something funky.&lt;br /&gt;
&lt;br /&gt;
=== Asset Manifest ===&lt;br /&gt;
Every mod can have an asset manifest file defined. This lists out all assets you want to import.&lt;br /&gt;
&lt;br /&gt;
Create a file called manifest.txt in your mod directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example Asset Manifest&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;assets&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;assetId&amp;quot;: &amp;quot;testmod.dog&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;texture&amp;quot;,&lt;br /&gt;
      &amp;quot;properties&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;name&amp;quot;: &amp;quot;path&amp;quot;,&lt;br /&gt;
          &amp;quot;value&amp;quot;: &amp;quot;Assets/dog.png&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Built in Importers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
!ID&lt;br /&gt;
!Properties&lt;br /&gt;
|-&lt;br /&gt;
|SimpleModel&lt;br /&gt;
|Imports a GLTF file as a GameObject. Ideal for weapons, items, simple objects. &lt;br /&gt;
You can define a built in material to use, and it will automatically apply said material + hook up included textures.&lt;br /&gt;
|simple_model&lt;br /&gt;
|path: the path to the gltf file&lt;br /&gt;
|-&lt;br /&gt;
|Texture&lt;br /&gt;
|Imports a .png or .jpeg as a Texture2D&lt;br /&gt;
|texture&lt;br /&gt;
|path: the path to the image file&lt;br /&gt;
|-&lt;br /&gt;
|AudioClip&lt;br /&gt;
|Imports a .mp3, .wav, or .ogg as an ArdenAudioClip&lt;br /&gt;
|audio_clip&lt;br /&gt;
|path: the path to the audio file&lt;br /&gt;
|-&lt;br /&gt;
|AssetBundle&lt;br /&gt;
|Imports a unity asset bundle.&lt;br /&gt;
|asset_bundle&lt;br /&gt;
|path: the path to the asset bundle file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Custom Importers ===&lt;br /&gt;
Mods can define their own importers. Perhaps you built a tool that can easily create item data assets from a json file. You can register your own importer to read this file, and then you can easily import them as assets! Other mods can also rely on other&#039;s importers.&lt;br /&gt;
&lt;br /&gt;
Note an Importer doesn&#039;t need to only import a single path (this is why &#039;path&#039; is a property). Perhaps a single importer takes in a model_path and a data_path, for example.&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Example: A Custom Weapon ===&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Game_Debugger&amp;diff=35</id>
		<title>Game Debugger</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Game_Debugger&amp;diff=35"/>
		<updated>2026-05-22T04:38:21Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The game debugger is a UI available in the game. &lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
To enable debug tools, edit the buildsettings.txt file alongside your installation. Set &amp;quot;enableDebugTools&amp;quot;:true.&lt;br /&gt;
&lt;br /&gt;
To open the debugger, load up a game (the debugger is not available in the main menu), and press F1.&lt;br /&gt;
&lt;br /&gt;
== Utilities Tab ==&lt;br /&gt;
This tab is for lots of miscellaneous debug features.&lt;br /&gt;
&lt;br /&gt;
=== Dead Body Revival ===&lt;br /&gt;
If you look at a dead body, a special menu will appear at the top of the utility debugger. This will let you revive&lt;br /&gt;
&lt;br /&gt;
=== Player Editor ===&lt;br /&gt;
Enable/Disable God Mode: Make the player unable to die. (You will lose health, but not die)&lt;br /&gt;
&lt;br /&gt;
Heal Player: Fully heal yourself&lt;br /&gt;
&lt;br /&gt;
Enable/Disable Fly: Fly into the heavens. You can also press F to toggle this&lt;br /&gt;
&lt;br /&gt;
Enable/Disable Speed Boost: Move very quickly&lt;br /&gt;
&lt;br /&gt;
Add all Traits to Player: Give yourself all traits. Used to test dialog!&lt;br /&gt;
&lt;br /&gt;
=== Time Editor ===&lt;br /&gt;
Morning/Day/Evening/Night: Set the time to a preset&lt;br /&gt;
&lt;br /&gt;
Freeze Time: Makes time stop moving forward&lt;br /&gt;
Hour, Minute: Add hours and minutes to the current time.&lt;br /&gt;
&lt;br /&gt;
=== Weather Editor ===&lt;br /&gt;
Random (Instant): Will randomly change the weather instantly&lt;br /&gt;
Random (Transition): Will randomly change the weather, but will slowly transition. Pressing this while already transitioning can cause bugs&lt;br /&gt;
Enable Region Weathers: Select a specific weather to switch to&lt;br /&gt;
&lt;br /&gt;
=== Spawn NPC ===&lt;br /&gt;
Spawn a specific npc where the mouse is pointing&lt;br /&gt;
&lt;br /&gt;
=== Spawn Item ===&lt;br /&gt;
Spawns a specific item. Pressing Spawn Pickup will spawn the item on the ground, and Add to Inventory will add it to your inventory with a specific count. &lt;br /&gt;
&#039;&#039;&#039;Tip:&#039;&#039;&#039; If you are looking at an NPC, there is an option to add it to their inventory.&lt;br /&gt;
&lt;br /&gt;
=== Player Preset ===&lt;br /&gt;
Switch to a handful of player presets. Switch To will only switch the race / gender, and Switch To + Inventory will also give the player the preset inventory and equipment&lt;br /&gt;
&lt;br /&gt;
=== Teleport To Location ===&lt;br /&gt;
Teleport to a map location or a certain cell.&lt;br /&gt;
&lt;br /&gt;
=== NPC Cheats ===&lt;br /&gt;
Kill X Characters: Kill all of the loaded NPC’s&lt;br /&gt;
&lt;br /&gt;
Destroy X Characters: Destroy (leave no bodies) all of the loaded NPC’s&lt;br /&gt;
&lt;br /&gt;
Destroy X Enemies: Destroy (leave no bodies) all of the loaded Enemy NPC’s&lt;br /&gt;
&lt;br /&gt;
Random Spawning: Will toggle random monster spawning&lt;br /&gt;
&lt;br /&gt;
=== AI Cheats ===&lt;br /&gt;
AI: Toggles npc AI&lt;br /&gt;
&lt;br /&gt;
AI Navigation: Toggles npcs being able to move around&lt;br /&gt;
&lt;br /&gt;
Force Stealth UI Display: Toggles making the Stealth UI to always enabled, regardless of sneak&lt;br /&gt;
&lt;br /&gt;
AI Logging: Toggles verbose logging of NPC AI&lt;br /&gt;
&lt;br /&gt;
NPC Viz: Toggles showing NPC info Gizmos at a distance&lt;br /&gt;
&lt;br /&gt;
NPC State Viz: Toggles showing NPC AI state Gizmos&lt;br /&gt;
&lt;br /&gt;
Viz Brightness: Toggles showing the brightness calculation Gizmos for the AI&lt;br /&gt;
&lt;br /&gt;
Viz Random Spawning NPCs: Toggles showing the position Gizmos of all of the random spawners&lt;br /&gt;
&lt;br /&gt;
=== Steam Cheats ===&lt;br /&gt;
Add 1 to Stat [test]: tests a specific steam stat&lt;br /&gt;
&lt;br /&gt;
Trigger [ESCAPED_STARTING_DUNGEON] achievement  tests a specific steam achievement&lt;br /&gt;
&lt;br /&gt;
Wipe Achievements: Erases the achievements of the player&lt;br /&gt;
&lt;br /&gt;
=== Item Cheats ===&lt;br /&gt;
Add a lot of items to your inventory&lt;br /&gt;
&lt;br /&gt;
=== Misc Cheats ===&lt;br /&gt;
Refresh Avatars: Forces all avatars to regenerate their meshes&lt;br /&gt;
&lt;br /&gt;
Audio Gizmos: Toggles gizmos for audio sources&lt;br /&gt;
&lt;br /&gt;
Player Collisions: Doesn’t work&lt;br /&gt;
&lt;br /&gt;
Recalculate ALL Character’s Items: Recalculate all spawned characters item stats&lt;br /&gt;
&lt;br /&gt;
Recalculate ALL Character’s Stats: Recalculate all spawned characters stats&lt;br /&gt;
&lt;br /&gt;
Disable Dialog Conditions: Will force dialog topics and multiple choices to always be enabled&lt;br /&gt;
&lt;br /&gt;
Freeze Timescale: Freezes game time. Stops animations, movement, and so on.&lt;br /&gt;
&lt;br /&gt;
Cinematic Mode: Makes shooting arrows and fireballs shoot from the hands, not the camera &lt;br /&gt;
&lt;br /&gt;
Ambient Lighting: Toggles ambient lighting&lt;br /&gt;
&lt;br /&gt;
Player Creation Menu: Toggles the player creation menu from opening&lt;br /&gt;
&lt;br /&gt;
Clear Tutorial Messages: Clear what tutorial messages have been seen by the player&lt;br /&gt;
&lt;br /&gt;
Level Up: Force the player to level up&lt;br /&gt;
&lt;br /&gt;
Log Lookup Table: Only usable in build. Will log the entire lookup table&lt;br /&gt;
&lt;br /&gt;
Mockup Overlays: Lets you mockup HUD elements&lt;br /&gt;
&lt;br /&gt;
World Streaming Toggle world loading. This can be used to stop world loading freezing in editor in particular.&lt;br /&gt;
&lt;br /&gt;
Dialog Debug Text: Don’t know&lt;br /&gt;
&lt;br /&gt;
Test Popup: tests popup UI&lt;br /&gt;
&lt;br /&gt;
= Quest Debugger =&lt;br /&gt;
Lets you debug quests. There are two sections: Enabled and Disabled quests.&lt;br /&gt;
&lt;br /&gt;
Current State: The current state&lt;br /&gt;
&lt;br /&gt;
Current Phase: The current phase&lt;br /&gt;
&lt;br /&gt;
Phases: The list of phases. You can also see the objectives and their state.&lt;br /&gt;
&lt;br /&gt;
Objects: The list of objects. If it is a character object, you can teleport to that character.&lt;br /&gt;
&lt;br /&gt;
Variables: The list of variables, and their value&lt;br /&gt;
&lt;br /&gt;
Entry Points: A list of entry points. More info here.&lt;br /&gt;
&lt;br /&gt;
= Character Debugger =&lt;br /&gt;
The Character Debugger lets you debug and modify a certain character.&lt;br /&gt;
&lt;br /&gt;
Dropdown: Select a spawned character by name&lt;br /&gt;
&lt;br /&gt;
Select Targeted: Select the character you are looking at&lt;br /&gt;
&lt;br /&gt;
Select Player: Select the player&lt;br /&gt;
&lt;br /&gt;
Select Nearest: Select the nearest NPC&lt;br /&gt;
&lt;br /&gt;
Enable Gizmos: Will force Gizmos to be enabled even when this window is closed&lt;br /&gt;
&lt;br /&gt;
Heal: Fully heals this character&lt;br /&gt;
&lt;br /&gt;
=== Stats ===&lt;br /&gt;
Lists all of the characters stats. Attributes, Skills, and other stats.&lt;br /&gt;
&lt;br /&gt;
=== Stat Editor ===&lt;br /&gt;
Modify Level: Lets you set the level of the character&lt;br /&gt;
&lt;br /&gt;
Update Range Stats: Force the ranged stats (health, mana, etc) to be recalculated&lt;br /&gt;
&lt;br /&gt;
Modify Attributes: Set all attributes to a certain value&lt;br /&gt;
&lt;br /&gt;
Modify Skills: Set all skills to a certain value&lt;br /&gt;
&lt;br /&gt;
Full Editor: Here you can edit the attributes and skills. Press “Load From Character” to update the editor with the current character’s stats, then you can edit and then press “Save to Character”&lt;br /&gt;
&lt;br /&gt;
=== Factions ===&lt;br /&gt;
Displays the factions the character is in.&lt;br /&gt;
&lt;br /&gt;
=== Inventory ===&lt;br /&gt;
Displays all of the items the character has in their inventory&lt;br /&gt;
&lt;br /&gt;
=== Avatar Meshes ===&lt;br /&gt;
Displays info on the visible and invisible avatar meshes&lt;br /&gt;
&lt;br /&gt;
=== Hand State Handler ===&lt;br /&gt;
Displays state of the current hand state handler&lt;br /&gt;
&lt;br /&gt;
=== Visibility ===&lt;br /&gt;
Displays state of what characters are attacking them, and what characters the npc can see&lt;br /&gt;
&lt;br /&gt;
=== Blackboard ===&lt;br /&gt;
The list of saved blackboard variables to this character&lt;br /&gt;
&lt;br /&gt;
=== AI ===&lt;br /&gt;
Player Visibility (Aware): What visibility the player would be at if the character was aware&lt;br /&gt;
&lt;br /&gt;
Player Visibility: What visibility the player is at right now&lt;br /&gt;
&lt;br /&gt;
Player Light Visibility: The light visibility of the player&lt;br /&gt;
&lt;br /&gt;
Player Sound Strength: The strength of the last sound the player made&lt;br /&gt;
&lt;br /&gt;
Player Last Sound: How long ago the last sound the player made&lt;br /&gt;
&lt;br /&gt;
Blackboard: The AI blackboard values&lt;br /&gt;
&lt;br /&gt;
Targeter: Information related to the AI’s targeting system&lt;br /&gt;
&lt;br /&gt;
Awareness: Values related to detection of player&lt;br /&gt;
&lt;br /&gt;
Current State: The current AI state&lt;br /&gt;
&lt;br /&gt;
Package List: The list of packages for the current state, and which current package.&lt;br /&gt;
&lt;br /&gt;
=== Navigator ===&lt;br /&gt;
Show info related to the navigator&lt;br /&gt;
&lt;br /&gt;
=== Test Path to Player ===&lt;br /&gt;
Debug whether the character could path to the player&lt;br /&gt;
&lt;br /&gt;
=== Dialog Graphs ===&lt;br /&gt;
Displays the list of dialog graphs attached to this character&lt;br /&gt;
&lt;br /&gt;
=== Utilities ===&lt;br /&gt;
Add .25 Reputation: Adds a bit of rep towards the player&lt;br /&gt;
&lt;br /&gt;
Remove .25 Reputation: Removes a bit of rep towards the player&lt;br /&gt;
&lt;br /&gt;
Teleport Player to Character: Teleport yourself to the character’s position&lt;br /&gt;
&lt;br /&gt;
Teleport Character to Player: Teleport the character to your own position&lt;br /&gt;
&lt;br /&gt;
Teleport Camera to Character: Teleport the free camera to the character’s position&lt;br /&gt;
&lt;br /&gt;
Teleport Character to Camera: Teleport the character to the free camera’s position&lt;br /&gt;
&lt;br /&gt;
Disable AI: Disable AI for this character&lt;br /&gt;
&lt;br /&gt;
Enable AI: Enable AI for this character&lt;br /&gt;
&lt;br /&gt;
Kill: Kill the character&lt;br /&gt;
&lt;br /&gt;
Clear ‘Has Interacted With’: Clear the value that stops dialog from appearing multiple times&lt;br /&gt;
&lt;br /&gt;
Force NPC to path to Player: Doesn’t work&lt;br /&gt;
&lt;br /&gt;
Fill Health: Heal character&lt;br /&gt;
&lt;br /&gt;
Clear Health: Set health to 1&lt;br /&gt;
&lt;br /&gt;
Select Character: Select character in editor&lt;br /&gt;
&lt;br /&gt;
Select Avatar: Select avatar in editor&lt;br /&gt;
&lt;br /&gt;
== Mod Debugger ==&lt;br /&gt;
The Mod Debugger allows you to reload mods while playing (very useful), as well as view information about mods.&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=34</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=34"/>
		<updated>2026-05-22T04:33:14Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to Ardenfall&#039;s &#039;&#039;&#039;Modding Wiki.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The goal for this wiki is to document modding tools, ardenfall&#039;s API, and also data mined components from the game itself. &lt;br /&gt;
&lt;br /&gt;
It is officially maintained by Spellcast Studios, but is also opened to the public for editing, so there is no promise of complete correctness. (Although we&#039;ll do our best to ensure high quality pages!) &lt;br /&gt;
&lt;br /&gt;
It &#039;&#039;can&#039;&#039; be treated as a standard game wiki (documenting quests and existing content), but the focus will still primarily centered on modding.&lt;br /&gt;
&lt;br /&gt;
=== Modding Overview ===&lt;br /&gt;
[[Getting Started]]&lt;br /&gt;
&lt;br /&gt;
[[Mod Scripting]]&lt;br /&gt;
&lt;br /&gt;
[[Custom Asset Importing|Asset Importing]]&lt;br /&gt;
&lt;br /&gt;
=== Official Tools ===&lt;br /&gt;
[[Game Debugger]]&lt;br /&gt;
&lt;br /&gt;
=== Userbase Tools ===&lt;br /&gt;
- Your tool here&lt;br /&gt;
&lt;br /&gt;
=== Scripting API ===&lt;br /&gt;
[[Codebase Overview]]&lt;br /&gt;
&lt;br /&gt;
[[Messaging System]]&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Game_Debugger&amp;diff=33</id>
		<title>Game Debugger</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Game_Debugger&amp;diff=33"/>
		<updated>2026-05-22T04:32:43Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: Created page with &amp;quot;The game debugger is a UI available in the game.   == Getting Started == To enable debug tools, edit the buildsettings.txt file alongside your installation. Set &amp;quot;enableDebugTools&amp;quot;:true.  To open the debugger, load up a game (the debugger is not available in the main menu), and press F1.  == Utilities Tab == This tab is for lots of miscellaneous debug features.  === Dead Body Revival === If you look at a dead body, a special menu will appear at the top of the utility debu...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The game debugger is a UI available in the game. &lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
To enable debug tools, edit the buildsettings.txt file alongside your installation. Set &amp;quot;enableDebugTools&amp;quot;:true.&lt;br /&gt;
&lt;br /&gt;
To open the debugger, load up a game (the debugger is not available in the main menu), and press F1.&lt;br /&gt;
&lt;br /&gt;
== Utilities Tab ==&lt;br /&gt;
This tab is for lots of miscellaneous debug features.&lt;br /&gt;
&lt;br /&gt;
=== Dead Body Revival ===&lt;br /&gt;
If you look at a dead body, a special menu will appear at the top of the utility debugger. This will let you revive&lt;br /&gt;
&lt;br /&gt;
=== Player Editor ===&lt;br /&gt;
Enable/Disable God Mode: Make the player unable to die. (You will lose health, but not die)&lt;br /&gt;
&lt;br /&gt;
Heal Player: Fully heal yourself&lt;br /&gt;
&lt;br /&gt;
Enable/Disable Fly: Fly into the heavens. You can also press F to toggle this&lt;br /&gt;
&lt;br /&gt;
Enable/Disable Speed Boost: Move very quickly&lt;br /&gt;
&lt;br /&gt;
Add all Traits to Player: Give yourself all traits. Used to test dialog!&lt;br /&gt;
&lt;br /&gt;
=== Time Editor ===&lt;br /&gt;
Morning/Day/Evening/Night: Set the time to a preset&lt;br /&gt;
&lt;br /&gt;
Freeze Time: Makes time stop moving forward&lt;br /&gt;
Hour, Minute: Add hours and minutes to the current time.&lt;br /&gt;
&lt;br /&gt;
=== Weather Editor ===&lt;br /&gt;
Random (Instant): Will randomly change the weather instantly&lt;br /&gt;
Random (Transition): Will randomly change the weather, but will slowly transition. Pressing this while already transitioning can cause bugs&lt;br /&gt;
Enable Region Weathers: Select a specific weather to switch to&lt;br /&gt;
&lt;br /&gt;
=== Spawn NPC ===&lt;br /&gt;
Spawn a specific npc where the mouse is pointing&lt;br /&gt;
&lt;br /&gt;
=== Spawn Item ===&lt;br /&gt;
Spawns a specific item. Pressing Spawn Pickup will spawn the item on the ground, and Add to Inventory will add it to your inventory with a specific count. &lt;br /&gt;
&#039;&#039;&#039;Tip:&#039;&#039;&#039; If you are looking at an NPC, there is an option to add it to their inventory.&lt;br /&gt;
&lt;br /&gt;
=== Player Preset ===&lt;br /&gt;
Switch to a handful of player presets. Switch To will only switch the race / gender, and Switch To + Inventory will also give the player the preset inventory and equipment&lt;br /&gt;
&lt;br /&gt;
=== Teleport To Location ===&lt;br /&gt;
Teleport to a map location or a certain cell.&lt;br /&gt;
&lt;br /&gt;
=== NPC Cheats ===&lt;br /&gt;
Kill X Characters: Kill all of the loaded NPC’s&lt;br /&gt;
&lt;br /&gt;
Destroy X Characters: Destroy (leave no bodies) all of the loaded NPC’s&lt;br /&gt;
&lt;br /&gt;
Destroy X Enemies: Destroy (leave no bodies) all of the loaded Enemy NPC’s&lt;br /&gt;
&lt;br /&gt;
Random Spawning: Will toggle random monster spawning&lt;br /&gt;
&lt;br /&gt;
=== AI Cheats ===&lt;br /&gt;
AI: Toggles npc AI&lt;br /&gt;
&lt;br /&gt;
AI Navigation: Toggles npcs being able to move around&lt;br /&gt;
&lt;br /&gt;
Force Stealth UI Display: Toggles making the Stealth UI to always enabled, regardless of sneak&lt;br /&gt;
&lt;br /&gt;
AI Logging: Toggles verbose logging of NPC AI&lt;br /&gt;
&lt;br /&gt;
NPC Viz: Toggles showing NPC info Gizmos at a distance&lt;br /&gt;
&lt;br /&gt;
NPC State Viz: Toggles showing NPC AI state Gizmos&lt;br /&gt;
&lt;br /&gt;
Viz Brightness: Toggles showing the brightness calculation Gizmos for the AI&lt;br /&gt;
&lt;br /&gt;
Viz Random Spawning NPCs: Toggles showing the position Gizmos of all of the random spawners&lt;br /&gt;
&lt;br /&gt;
=== Steam Cheats ===&lt;br /&gt;
Add 1 to Stat [test]: tests a specific steam stat&lt;br /&gt;
&lt;br /&gt;
Trigger [ESCAPED_STARTING_DUNGEON] achievement  tests a specific steam achievement&lt;br /&gt;
&lt;br /&gt;
Wipe Achievements: Erases the achievements of the player&lt;br /&gt;
&lt;br /&gt;
=== Item Cheats ===&lt;br /&gt;
Add a lot of items to your inventory&lt;br /&gt;
&lt;br /&gt;
=== Misc Cheats ===&lt;br /&gt;
Refresh Avatars: Forces all avatars to regenerate their meshes&lt;br /&gt;
&lt;br /&gt;
Audio Gizmos: Toggles gizmos for audio sources&lt;br /&gt;
&lt;br /&gt;
Player Collisions: Doesn’t work&lt;br /&gt;
&lt;br /&gt;
Recalculate ALL Character’s Items: Recalculate all spawned characters item stats&lt;br /&gt;
&lt;br /&gt;
Recalculate ALL Character’s Stats: Recalculate all spawned characters stats&lt;br /&gt;
&lt;br /&gt;
Disable Dialog Conditions: Will force dialog topics and multiple choices to always be enabled&lt;br /&gt;
&lt;br /&gt;
Freeze Timescale: Freezes game time. Stops animations, movement, and so on.&lt;br /&gt;
&lt;br /&gt;
Cinematic Mode: Makes shooting arrows and fireballs shoot from the hands, not the camera &lt;br /&gt;
&lt;br /&gt;
Ambient Lighting: Toggles ambient lighting&lt;br /&gt;
&lt;br /&gt;
Player Creation Menu: Toggles the player creation menu from opening&lt;br /&gt;
&lt;br /&gt;
Clear Tutorial Messages: Clear what tutorial messages have been seen by the player&lt;br /&gt;
&lt;br /&gt;
Level Up: Force the player to level up&lt;br /&gt;
&lt;br /&gt;
Log Lookup Table: Only usable in build. Will log the entire lookup table&lt;br /&gt;
&lt;br /&gt;
Mockup Overlays: Lets you mockup HUD elements&lt;br /&gt;
&lt;br /&gt;
World Streaming Toggle world loading. This can be used to stop world loading freezing in editor in particular.&lt;br /&gt;
&lt;br /&gt;
Dialog Debug Text: Don’t know&lt;br /&gt;
&lt;br /&gt;
Test Popup: tests popup UI&lt;br /&gt;
&lt;br /&gt;
= Quest Debugger =&lt;br /&gt;
Lets you debug quests. There are two sections: Enabled and Disabled quests.&lt;br /&gt;
&lt;br /&gt;
Current State: The current state&lt;br /&gt;
&lt;br /&gt;
Current Phase: The current phase&lt;br /&gt;
&lt;br /&gt;
Phases: The list of phases. You can also see the objectives and their state.&lt;br /&gt;
&lt;br /&gt;
Objects: The list of objects. If it is a character object, you can teleport to that character.&lt;br /&gt;
&lt;br /&gt;
Variables: The list of variables, and their value&lt;br /&gt;
&lt;br /&gt;
Entry Points: A list of entry points. More info here.&lt;br /&gt;
&lt;br /&gt;
= Character Debugger =&lt;br /&gt;
The Character Debugger lets you debug and modify a certain character.&lt;br /&gt;
&lt;br /&gt;
Dropdown: Select a spawned character by name&lt;br /&gt;
&lt;br /&gt;
Select Targeted: Select the character you are looking at&lt;br /&gt;
&lt;br /&gt;
Select Player: Select the player&lt;br /&gt;
&lt;br /&gt;
Select Nearest: Select the nearest NPC&lt;br /&gt;
&lt;br /&gt;
Enable Gizmos: Will force Gizmos to be enabled even when this window is closed&lt;br /&gt;
&lt;br /&gt;
Heal: Fully heals this character&lt;br /&gt;
&lt;br /&gt;
=== Stats ===&lt;br /&gt;
Lists all of the characters stats. Attributes, Skills, and other stats.&lt;br /&gt;
&lt;br /&gt;
=== Stat Editor ===&lt;br /&gt;
Modify Level: Lets you set the level of the character&lt;br /&gt;
&lt;br /&gt;
Update Range Stats: Force the ranged stats (health, mana, etc) to be recalculated&lt;br /&gt;
&lt;br /&gt;
Modify Attributes: Set all attributes to a certain value&lt;br /&gt;
&lt;br /&gt;
Modify Skills: Set all skills to a certain value&lt;br /&gt;
&lt;br /&gt;
Full Editor: Here you can edit the attributes and skills. Press “Load From Character” to update the editor with the current character’s stats, then you can edit and then press “Save to Character”&lt;br /&gt;
&lt;br /&gt;
=== Factions ===&lt;br /&gt;
Displays the factions the character is in.&lt;br /&gt;
&lt;br /&gt;
=== Inventory ===&lt;br /&gt;
Displays all of the items the character has in their inventory&lt;br /&gt;
&lt;br /&gt;
=== Avatar Meshes ===&lt;br /&gt;
Displays info on the visible and invisible avatar meshes&lt;br /&gt;
&lt;br /&gt;
=== Hand State Handler ===&lt;br /&gt;
Displays state of the current hand state handler&lt;br /&gt;
&lt;br /&gt;
=== Visibility ===&lt;br /&gt;
Displays state of what characters are attacking them, and what characters the npc can see&lt;br /&gt;
&lt;br /&gt;
=== Blackboard ===&lt;br /&gt;
The list of saved blackboard variables to this character&lt;br /&gt;
&lt;br /&gt;
=== AI ===&lt;br /&gt;
Player Visibility (Aware): What visibility the player would be at if the character was aware&lt;br /&gt;
&lt;br /&gt;
Player Visibility: What visibility the player is at right now&lt;br /&gt;
&lt;br /&gt;
Player Light Visibility: The light visibility of the player&lt;br /&gt;
&lt;br /&gt;
Player Sound Strength: The strength of the last sound the player made&lt;br /&gt;
&lt;br /&gt;
Player Last Sound: How long ago the last sound the player made&lt;br /&gt;
&lt;br /&gt;
Blackboard: The AI blackboard values&lt;br /&gt;
&lt;br /&gt;
Targeter: Information related to the AI’s targeting system&lt;br /&gt;
&lt;br /&gt;
Awareness: Values related to detection of player&lt;br /&gt;
&lt;br /&gt;
Current State: The current AI state&lt;br /&gt;
&lt;br /&gt;
Package List: The list of packages for the current state, and which current package.&lt;br /&gt;
&lt;br /&gt;
=== Navigator ===&lt;br /&gt;
Show info related to the navigator&lt;br /&gt;
&lt;br /&gt;
=== Test Path to Player ===&lt;br /&gt;
Debug whether the character could path to the player&lt;br /&gt;
&lt;br /&gt;
=== Dialog Graphs ===&lt;br /&gt;
Displays the list of dialog graphs attached to this character&lt;br /&gt;
&lt;br /&gt;
=== Utilities ===&lt;br /&gt;
Add .25 Reputation: Adds a bit of rep towards the player&lt;br /&gt;
&lt;br /&gt;
Remove .25 Reputation: Removes a bit of rep towards the player&lt;br /&gt;
&lt;br /&gt;
Teleport Player to Character: Teleport yourself to the character’s position&lt;br /&gt;
&lt;br /&gt;
Teleport Character to Player: Teleport the character to your own position&lt;br /&gt;
&lt;br /&gt;
Teleport Camera to Character: Teleport the free camera to the character’s position&lt;br /&gt;
&lt;br /&gt;
Teleport Character to Camera: Teleport the character to the free camera’s position&lt;br /&gt;
&lt;br /&gt;
Disable AI: Disable AI for this character&lt;br /&gt;
&lt;br /&gt;
Enable AI: Enable AI for this character&lt;br /&gt;
&lt;br /&gt;
Kill: Kill the character&lt;br /&gt;
&lt;br /&gt;
Clear ‘Has Interacted With’: Clear the value that stops dialog from appearing multiple times&lt;br /&gt;
&lt;br /&gt;
Force NPC to path to Player: Doesn’t work&lt;br /&gt;
&lt;br /&gt;
Fill Health: Heal character&lt;br /&gt;
&lt;br /&gt;
Clear Health: Set health to 1&lt;br /&gt;
&lt;br /&gt;
Select Character: Select character in editor&lt;br /&gt;
&lt;br /&gt;
Select Avatar: Select avatar in editor&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=32</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=32"/>
		<updated>2026-05-22T04:06:55Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to Ardenfall&#039;s &#039;&#039;&#039;Modding Wiki.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The goal for this wiki is to document modding tools, ardenfall&#039;s API, and also data mined components from the game itself. &lt;br /&gt;
&lt;br /&gt;
It is officially maintained by Spellcast Studios, but is also opened to the public for editing, so there is no promise of complete correctness. (Although we&#039;ll do our best to ensure high quality pages!) &lt;br /&gt;
&lt;br /&gt;
It &#039;&#039;can&#039;&#039; be treated as a standard game wiki (documenting quests and existing content), but the focus will still primarily centered on modding.&lt;br /&gt;
&lt;br /&gt;
=== Modding Overview ===&lt;br /&gt;
[[Getting Started]]&lt;br /&gt;
&lt;br /&gt;
[[Mod Scripting]]&lt;br /&gt;
&lt;br /&gt;
[[Custom Asset Importing|Asset Importing]]&lt;br /&gt;
&lt;br /&gt;
=== Official Tools ===&lt;br /&gt;
[[Debug Tools]]&lt;br /&gt;
&lt;br /&gt;
=== Userbase Tools ===&lt;br /&gt;
- Your tool here&lt;br /&gt;
&lt;br /&gt;
=== Scripting API ===&lt;br /&gt;
[[Codebase Overview]]&lt;br /&gt;
&lt;br /&gt;
[[Messaging System]]&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=31</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=31"/>
		<updated>2026-05-22T02:43:23Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to Ardenfall&#039;s &#039;&#039;&#039;Modding Wiki.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The goal for this wiki is to document modding tools, ardenfall&#039;s API, and also data mined components from the game itself. &lt;br /&gt;
&lt;br /&gt;
It is officially maintained by Spellcast Studios, but is also opened to the public for editing, so there is no promise of complete correctness. (Although we&#039;ll do our best to ensure high quality pages!) &lt;br /&gt;
&lt;br /&gt;
It &#039;&#039;can&#039;&#039; be treated as a standard game wiki (documenting quests and existing content), but the focus will still primarily centered on modding.&lt;br /&gt;
&lt;br /&gt;
=== Modding Overview ===&lt;br /&gt;
[[Getting Started]]&lt;br /&gt;
&lt;br /&gt;
[[Mod Scripting]]&lt;br /&gt;
&lt;br /&gt;
[[Custom Asset Importing|Asset Importing]]&lt;br /&gt;
&lt;br /&gt;
=== Tools ===&lt;br /&gt;
[[Debug Tools]]&lt;br /&gt;
&lt;br /&gt;
=== Scripting API ===&lt;br /&gt;
[[Codebase Overview]]&lt;br /&gt;
&lt;br /&gt;
[[Messaging System]]&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Codebase_Overview&amp;diff=30</id>
		<title>Codebase Overview</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Codebase_Overview&amp;diff=30"/>
		<updated>2026-05-22T02:42:55Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: Created page with &amp;quot;=== Core Systems === TODO  === World Systems === TODO  === Items === TODO  === Characters === TODO  === Combat === TODO  === NPC AI === TODO frameless&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Core Systems ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== World Systems ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Items ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Characters ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Combat ===&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== NPC AI ===&lt;br /&gt;
TODO&lt;br /&gt;
[[File:Ardenfall AI Overview.png|left|frameless]]&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=File:Ardenfall_AI_Overview.png&amp;diff=29</id>
		<title>File:Ardenfall AI Overview.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=File:Ardenfall_AI_Overview.png&amp;diff=29"/>
		<updated>2026-05-22T02:39:39Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A graph explaining the AI system&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Messaging_System&amp;diff=28</id>
		<title>Messaging System</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Messaging_System&amp;diff=28"/>
		<updated>2026-05-22T01:58:28Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;One of the most useful ways to hook into the game is by use of the MessagingSystem.&lt;br /&gt;
&lt;br /&gt;
Ardenfall has a host of messages that are sent when stuff happens. &amp;quot;CharacterDeathMessage&amp;quot;, &amp;quot;CharacterKillMessage&amp;quot;, &amp;quot;EffectAddMessage&amp;quot;... there are over 100 messages that you can subscribe (or send).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also define your own messages, for yourself or other mods.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example of a mod that begins listening to &amp;lt;u&amp;gt;CharacterDeathMessage&amp;lt;/u&amp;gt; on initialize, and stops listening on uninitialize.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Be sure to clean up your listeners!&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;&lt;br /&gt;
using Ardenfall;&lt;br /&gt;
using UnityEngine;&lt;br /&gt;
using System;&lt;br /&gt;
&lt;br /&gt;
namespace ExampleMod &lt;br /&gt;
{	&lt;br /&gt;
	public class ExampleMod : ModRoot&lt;br /&gt;
	{&lt;br /&gt;
		public override void Initialize(string id)&lt;br /&gt;
		{&lt;br /&gt;
			base.Initialize(id);&lt;br /&gt;
&lt;br /&gt;
			//Begin listening to death messages&lt;br /&gt;
			MessagingSystem.AddListener(typeof(CharacterDeathMessage), (Action&amp;lt;CharacterBase, DamageContext&amp;gt;)OnDeath);&lt;br /&gt;
		}&lt;br /&gt;
        &lt;br /&gt;
		public override void Uninitialize()&lt;br /&gt;
		{&lt;br /&gt;
			base.Uninitialize();&lt;br /&gt;
&lt;br /&gt;
			//Stoplistening to death messages&lt;br /&gt;
			MessagingSystem.RemoveListener(typeof(CharacterDeathMessage), (Action&amp;lt;CharacterBase, DamageContext&amp;gt;)OnDeath);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//Triggered when any character dies&lt;br /&gt;
		private void OnDeath(CharacterBase character, DamageContext context) &lt;br /&gt;
		{&lt;br /&gt;
			if(character is PlayerCharacter)&lt;br /&gt;
				Debug.Log($&amp;quot;Player has died!&amp;quot;); &lt;br /&gt;
			else&lt;br /&gt;
				Debug.Log($&amp;quot;Character {character.GetVisualName()} has died!&amp;quot;); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Useful Messages ===&lt;br /&gt;
&amp;lt;u&amp;gt;CharacterDeathMessage(CharacterBase target, DamageContext context)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered when a character dies.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;CharacterDamageMessage(CharacterBase target, DamageContext context)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered when character is damaged.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;CharacterKillMessage(CharacterBase killer, DamageContext context)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered when a character kills another. You can access context.victim to read who died.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;EffectAddMessage(StatusEffectInstance effect)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered whenever an Effect is added to an IEffectable. Can access effect.Target to read who the target is.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;EffectRemoveMessage(StatusEffectInstance effect)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered whenever an Effect is removed from an IEffectable. Can access effect.Target to read who the target is.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;InventoryChangeMessage(Inventory inventory, ItemData item, int count, bool isAdded)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered whenever an item stack in an Inventory is modified (items added or removed). Can access inventory.OwnerChar (can be null) to see what character owns it, if any. Inventories are also used with containers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;EquipChangeMessage(CharacterBase character, BaseItem item, bool isEquipped)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered whenever a character unequips or equips an item&lt;br /&gt;
&lt;br /&gt;
=== Tooling ===&lt;br /&gt;
Planned: Add tool to easily view all messages available&lt;br /&gt;
&lt;br /&gt;
Under Consideration: Add tool to detect + display messages being triggered&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=27</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=27"/>
		<updated>2026-05-22T01:58:06Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to Ardenfall&#039;s &#039;&#039;&#039;Modding Wiki.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The goal for this wiki is to document modding tools, ardenfall&#039;s API, and also data mined components from the game itself. &lt;br /&gt;
&lt;br /&gt;
It is officially maintained by Spellcast Studios, but is also opened to the public for editing, so there is no promise of complete correctness. (Although we&#039;ll do our best to ensure high quality pages!) &lt;br /&gt;
&lt;br /&gt;
It &#039;&#039;can&#039;&#039; be treated as a standard game wiki (documenting quests and existing content), but the focus will still primarily centered on modding.&lt;br /&gt;
&lt;br /&gt;
=== Modding Overview ===&lt;br /&gt;
[[Getting Started]]&lt;br /&gt;
&lt;br /&gt;
[[Mod Scripting]]&lt;br /&gt;
&lt;br /&gt;
[[Custom Asset Importing|Asset Importing]]&lt;br /&gt;
&lt;br /&gt;
=== Tools ===&lt;br /&gt;
[[Debug Tools]]&lt;br /&gt;
&lt;br /&gt;
=== Scripting API ===&lt;br /&gt;
[[Messaging System]]&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Messaging_System&amp;diff=26</id>
		<title>Messaging System</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Messaging_System&amp;diff=26"/>
		<updated>2026-05-22T01:57:13Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;One of the most useful ways to hook into the game is by use of the MessagingSystem.&lt;br /&gt;
&lt;br /&gt;
Ardenfall has a host of messages that are sent when stuff happens. &amp;quot;CharacterDeathMessage&amp;quot;, &amp;quot;CharacterKillMessage&amp;quot;, &amp;quot;EffectAddMessage&amp;quot;... there are over 100 messages that you can subscribe (or send).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also define your own messages, for yourself or other mods.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example of a mod that begins listening to &amp;lt;u&amp;gt;CharacterDeathMessage&amp;lt;/u&amp;gt; on initialize, and stops listening on uninitialize.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Be sure to clean up your listeners!&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;&lt;br /&gt;
using Ardenfall;&lt;br /&gt;
using UnityEngine;&lt;br /&gt;
using System;&lt;br /&gt;
using ImGuiNET;&lt;br /&gt;
&lt;br /&gt;
namespace ExampleMod &lt;br /&gt;
{	&lt;br /&gt;
	public class ExampleMod : ModRoot&lt;br /&gt;
	{&lt;br /&gt;
		public override void Initialize(string id)&lt;br /&gt;
		{&lt;br /&gt;
			base.Initialize(id);&lt;br /&gt;
&lt;br /&gt;
			//Begin listening to death messages&lt;br /&gt;
			MessagingSystem.AddListener(typeof(CharacterDeathMessage), (Action&amp;lt;CharacterBase, DamageContext&amp;gt;)OnDeath);&lt;br /&gt;
		}&lt;br /&gt;
        &lt;br /&gt;
		public override void Uninitialize()&lt;br /&gt;
		{&lt;br /&gt;
			base.Uninitialize();&lt;br /&gt;
&lt;br /&gt;
			//Stoplistening to death messages&lt;br /&gt;
			MessagingSystem.RemoveListener(typeof(CharacterDeathMessage), (Action&amp;lt;CharacterBase, DamageContext&amp;gt;)OnDeath);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//Triggered when any character dies&lt;br /&gt;
		private void OnDeath(CharacterBase character, DamageContext context) &lt;br /&gt;
		{&lt;br /&gt;
			if(character is PlayerCharacter)&lt;br /&gt;
				Debug.Log($&amp;quot;Player has died!&amp;quot;); &lt;br /&gt;
			else&lt;br /&gt;
				Debug.Log($&amp;quot;Character {character.GetVisualName()} has died!&amp;quot;); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Useful Messages ===&lt;br /&gt;
&amp;lt;u&amp;gt;CharacterDeathMessage(CharacterBase target, DamageContext context)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered when a character dies.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;CharacterDamageMessage(CharacterBase target, DamageContext context)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered when character is damaged.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;CharacterKillMessage(CharacterBase killer, DamageContext context)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered when a character kills another. You can access context.victim to read who died.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;EffectAddMessage(StatusEffectInstance effect)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered whenever an Effect is added to an IEffectable. Can access effect.Target to read who the target is.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;EffectRemoveMessage(StatusEffectInstance effect)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered whenever an Effect is removed from an IEffectable. Can access effect.Target to read who the target is.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;InventoryChangeMessage(Inventory inventory, ItemData item, int count, bool isAdded)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered whenever an item stack in an Inventory is modified (items added or removed). Can access inventory.OwnerChar (can be null) to see what character owns it, if any. Inventories are also used with containers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;EquipChangeMessage(CharacterBase character, BaseItem item, bool isEquipped)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered whenever a character unequips or equips an item&lt;br /&gt;
&lt;br /&gt;
=== Tooling ===&lt;br /&gt;
Planned: Add tool to easily view all messages available&lt;br /&gt;
&lt;br /&gt;
Under Consideration: Add tool to detect + display messages being triggered&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Messaging_System&amp;diff=25</id>
		<title>Messaging System</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Messaging_System&amp;diff=25"/>
		<updated>2026-05-22T01:57:00Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;One of the most useful ways to hook into the game is by use of the MessagingSystem.&lt;br /&gt;
&lt;br /&gt;
Ardenfall has a host of messages that are sent when stuff happens. &amp;quot;CharacterDeathMessage&amp;quot;, &amp;quot;CharacterKillMessage&amp;quot;, &amp;quot;EffectAddMessage&amp;quot;... there are over 100 messages that you can subscribe (or send).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also define your own messages, for yourself or other mods.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example of a mod that begins listening to &#039;&#039;&#039;CharacterDeathMessage&#039;&#039;&#039; on initialize, and stops listening on uninitialize.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important:&#039;&#039;&#039; Be sure to clean up your listeners!&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;&lt;br /&gt;
using Ardenfall;&lt;br /&gt;
using UnityEngine;&lt;br /&gt;
using System;&lt;br /&gt;
using ImGuiNET;&lt;br /&gt;
&lt;br /&gt;
namespace ExampleMod &lt;br /&gt;
{	&lt;br /&gt;
	public class ExampleMod : ModRoot&lt;br /&gt;
	{&lt;br /&gt;
		public override void Initialize(string id)&lt;br /&gt;
		{&lt;br /&gt;
			base.Initialize(id);&lt;br /&gt;
&lt;br /&gt;
			//Begin listening to death messages&lt;br /&gt;
			MessagingSystem.AddListener(typeof(CharacterDeathMessage), (Action&amp;lt;CharacterBase, DamageContext&amp;gt;)OnDeath);&lt;br /&gt;
		}&lt;br /&gt;
        &lt;br /&gt;
		public override void Uninitialize()&lt;br /&gt;
		{&lt;br /&gt;
			base.Uninitialize();&lt;br /&gt;
&lt;br /&gt;
			//Stoplistening to death messages&lt;br /&gt;
			MessagingSystem.RemoveListener(typeof(CharacterDeathMessage), (Action&amp;lt;CharacterBase, DamageContext&amp;gt;)OnDeath);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//Triggered when any character dies&lt;br /&gt;
		private void OnDeath(CharacterBase character, DamageContext context) &lt;br /&gt;
		{&lt;br /&gt;
			if(character is PlayerCharacter)&lt;br /&gt;
				Debug.Log($&amp;quot;Player has died!&amp;quot;); &lt;br /&gt;
			else&lt;br /&gt;
				Debug.Log($&amp;quot;Character {character.GetVisualName()} has died!&amp;quot;); &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Useful Messages ===&lt;br /&gt;
&amp;lt;u&amp;gt;CharacterDeathMessage(CharacterBase target, DamageContext context)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered when a character dies.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;CharacterDamageMessage(CharacterBase target, DamageContext context)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered when character is damaged.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;CharacterKillMessage(CharacterBase killer, DamageContext context)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered when a character kills another. You can access context.victim to read who died.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;EffectAddMessage(StatusEffectInstance effect)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered whenever an Effect is added to an IEffectable. Can access effect.Target to read who the target is.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;EffectRemoveMessage(StatusEffectInstance effect)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered whenever an Effect is removed from an IEffectable. Can access effect.Target to read who the target is.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;InventoryChangeMessage(Inventory inventory, ItemData item, int count, bool isAdded)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered whenever an item stack in an Inventory is modified (items added or removed). Can access inventory.OwnerChar (can be null) to see what character owns it, if any. Inventories are also used with containers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;EquipChangeMessage(CharacterBase character, BaseItem item, bool isEquipped)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggered whenever a character unequips or equips an item&lt;br /&gt;
&lt;br /&gt;
=== Tooling ===&lt;br /&gt;
Planned: Add tool to easily view all messages available&lt;br /&gt;
&lt;br /&gt;
Under Consideration: Add tool to detect + display messages being triggered&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Custom_Asset_Importing&amp;diff=24</id>
		<title>Custom Asset Importing</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Custom_Asset_Importing&amp;diff=24"/>
		<updated>2026-05-22T01:12:26Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;At some point you may want to import a new model, texture, sound, etc.&lt;br /&gt;
&lt;br /&gt;
This can be done one of two ways - manually via scripting, or by using the built in mod asset importer feature. I suggest the latter, unless you want to do something funky.&lt;br /&gt;
&lt;br /&gt;
=== Asset Manifest ===&lt;br /&gt;
Every mod can have an asset manifest file defined. This lists out all assets you want to import.&lt;br /&gt;
&lt;br /&gt;
Create a file called manifest.txt in your mod directory.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example Asset Manifest&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;assets&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;assetId&amp;quot;: &amp;quot;testmod.dog&amp;quot;,&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;texture&amp;quot;,&lt;br /&gt;
      &amp;quot;properties&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;name&amp;quot;: &amp;quot;path&amp;quot;,&lt;br /&gt;
          &amp;quot;value&amp;quot;: &amp;quot;Assets/dog.png&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Supported Importers ===&lt;br /&gt;
&lt;br /&gt;
==== SimpleModel ====&lt;br /&gt;
Imports a GLTF file as a GameObject. Ideal for weapons, items, simple objects. You can define a built in material to use, and it will automatically apply said material + hook up included textures.&lt;br /&gt;
&lt;br /&gt;
==== Texture ====&lt;br /&gt;
Imports a .png or .jpeg as a Texture2D&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;u&amp;gt;AudioClip&amp;lt;/u&amp;gt; ====&lt;br /&gt;
Imports a .mp3, .wav, or .ogg as an ArdenAudioClip&lt;br /&gt;
&lt;br /&gt;
=== Custom Importers ===&lt;br /&gt;
Mods can define their own importers. Perhaps you built a tool that can easily create item data assets from a json file. You can register your own importer to read this file, and then you can easily import them as assets! Other mods can also rely on other&#039;s importers.&lt;br /&gt;
&lt;br /&gt;
Note an Importer doesn&#039;t need to only import a single path (this is why &#039;path&#039; is a property). Perhaps a single importer takes in a model_path and a data_path, for example.&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Example: A Custom Weapon ===&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Getting_Started&amp;diff=23</id>
		<title>Getting Started</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Getting_Started&amp;diff=23"/>
		<updated>2026-05-22T01:10:59Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[IN PROGRESS]&lt;br /&gt;
&lt;br /&gt;
=== Mod Structure ===&lt;br /&gt;
Here is the suggested structure for your Mod. Technically the only requirement is the mod_metadata.txt file being in the root directory of your mod.&lt;br /&gt;
 Ardenfall_Data  &lt;br /&gt;
    StreamingAssets&lt;br /&gt;
      Mods&lt;br /&gt;
         YourModDirectory&lt;br /&gt;
            mod_metadata.txt&lt;br /&gt;
            mod_manifest.txt&lt;br /&gt;
            Assets&lt;br /&gt;
               Textures&lt;br /&gt;
                  yourtexture.png&lt;br /&gt;
            Scripts&lt;br /&gt;
               yourscript.cs&lt;br /&gt;
&lt;br /&gt;
=== Mod Metadata ===&lt;br /&gt;
The mod metadata file defines some top level values for your mod.&lt;br /&gt;
&lt;br /&gt;
modName: The name displayed to the user&lt;br /&gt;
&lt;br /&gt;
modAuthor: The author displayed to the user. Can be empty or multiple names, whatever.&lt;br /&gt;
&lt;br /&gt;
modId: The ID used by the modding system. Make sure this is unique - if two mods have the same id, they can&#039;t both be activated. You can use a GUID like the example below, or just write an id you think no one would use. The Mod Template Builder also auto generates this id.&lt;br /&gt;
&lt;br /&gt;
modDescription: The description displayed to the user. Can be empty.&lt;br /&gt;
&lt;br /&gt;
modVersion: A version string (must be in a format supported by [https://learn.microsoft.com/en-us/dotnet/api/system.version?view=netframework-4.8.1 C#&#039;s Version], such as &amp;quot;1&amp;quot;, &amp;quot;1.0&amp;quot;, or &amp;quot;3.2.7&amp;quot;.&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;modName&amp;quot;: &amp;quot;Example Mod&amp;quot;,&lt;br /&gt;
    &amp;quot;modAuthor&amp;quot;: &amp;quot;joshcamas&amp;quot;,&lt;br /&gt;
    &amp;quot;modId&amp;quot;: &amp;quot;f5c4ccca-87ab-40ed-8731-1e19aa17ab66&amp;quot;,&lt;br /&gt;
    &amp;quot;modDescription&amp;quot;: &amp;quot;A simple mod that showcases a very simple scripting setup.&amp;quot;,&lt;br /&gt;
    &amp;quot;modVersion&amp;quot;: &amp;quot;0.0.1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mod Asset Manifest ===&lt;br /&gt;
You can define assets to import via the mod_manifest.txt file within your mod directory.&lt;br /&gt;
&lt;br /&gt;
See [[Custom Asset Importing|Custom Asset Importing.]]&lt;br /&gt;
&lt;br /&gt;
=== Mod Scripts ===&lt;br /&gt;
You can define C# scripts to be run within the Scripts directory, within your mod directory.&lt;br /&gt;
&lt;br /&gt;
See [[Mod Scripting|Mod Scripting.]]&lt;br /&gt;
&lt;br /&gt;
=== Mod Template Builder ===&lt;br /&gt;
The Mod Template Builder tool allows you to create a mod starting point easily. It also includes the generation of a .csproj file, which will let you create scripts while referencing the actual codebase of ardenfall that mods have access to.&lt;br /&gt;
&lt;br /&gt;
Run the application ModTemplateBuilder.exe within your ardenfall&#039;s installation directory, and follow the prompts.&lt;br /&gt;
&lt;br /&gt;
The mod will be created in Ardenfall_Data/StreamingAssets/Mods.&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Mod_Scripting&amp;diff=22</id>
		<title>Mod Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Mod_Scripting&amp;diff=22"/>
		<updated>2026-05-22T01:08:02Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Mod Root ===&lt;br /&gt;
Essentially every mod needs a Mod Root class definition. This is your hook into the mod activation and deactivation events, as well as additional hooks.&lt;br /&gt;
&lt;br /&gt;
Your mod root class can be anywhere in the mod&#039;s Scripts folder within a .cs file.&lt;br /&gt;
&lt;br /&gt;
There are two main methods you probably want to override:&lt;br /&gt;
&lt;br /&gt;
Initialize(string id): Called when the mod is initialized. This happens on boot (if the mod is active), or whenever the mod is activated.&lt;br /&gt;
&lt;br /&gt;
Uninitialize(string id): Called when the mod is uninitialized. This happens whenever the mod is deactivated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Barebones Example:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
using Ardenfall;&lt;br /&gt;
using UnityEngine;&lt;br /&gt;
using System;&lt;br /&gt;
&lt;br /&gt;
namespace ExampleMod &lt;br /&gt;
{	&lt;br /&gt;
	public class ExampleMod : ModRoot&lt;br /&gt;
	{&lt;br /&gt;
		public override void Initialize(string id)&lt;br /&gt;
		{&lt;br /&gt;
			base.Initialize(id);&lt;br /&gt;
			Debug.Log(&amp;quot;Loaded Example Mod! WOW!&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
        &lt;br /&gt;
		public override void Uninitialize()&lt;br /&gt;
		{&lt;br /&gt;
			base.Uninitialize();&lt;br /&gt;
			Debug.Log(&amp;quot;Unloaded Example Mod! WOW!&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mod Saving ===&lt;br /&gt;
By default, mods do not save custom data. But you can do it! &lt;br /&gt;
&lt;br /&gt;
Override the following methods:&lt;br /&gt;
&lt;br /&gt;
void CreateState(): Run when a new game is made, or when the mod is loaded for a save for the first time. Use this to initialize a default state.&lt;br /&gt;
&lt;br /&gt;
void LoadState(string state): Load your state from previously saved data.&lt;br /&gt;
&lt;br /&gt;
string SaveState(): Save your state to a string.&lt;br /&gt;
&lt;br /&gt;
If you want to serialize data, you can use JsonUtility, or whatever other serializer you get your hands on, as long as its a string.&lt;br /&gt;
&lt;br /&gt;
Example of a mod that saves state.&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;using Ardenfall;&lt;br /&gt;
using UnityEngine;&lt;br /&gt;
using System;&lt;br /&gt;
&lt;br /&gt;
namespace ExampleSaveMod &lt;br /&gt;
{	&lt;br /&gt;
	public class ExampleSaveMod : ModRoot&lt;br /&gt;
	{&lt;br /&gt;
		private float randomNumber;&lt;br /&gt;
			&lt;br /&gt;
		public override void Initialize(string id)&lt;br /&gt;
		{&lt;br /&gt;
			base.Initialize(id);&lt;br /&gt;
			Debug.Log(&amp;quot;Loaded Example Mod! WOW!&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
        &lt;br /&gt;
		public override void Uninitialize()&lt;br /&gt;
		{&lt;br /&gt;
			base.Uninitialize();&lt;br /&gt;
			Debug.Log(&amp;quot;Unloaded Example Mod! WOW!&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		public override void CreateState()&lt;br /&gt;
		{&lt;br /&gt;
			randomNumber = UnityEngine.Random.value;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
        //Save state. You can save it as json or any format, it just needs to be a string.&lt;br /&gt;
		public override string SaveState()&lt;br /&gt;
		{&lt;br /&gt;
			var state = new ExampleModSaveState() &lt;br /&gt;
			{&lt;br /&gt;
				randomNumber = randomNumber&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			return JsonUtility.ToJson(state);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
        //Load the state as a string.&lt;br /&gt;
		public override void LoadState(string jsonState) &lt;br /&gt;
		{&lt;br /&gt;
			var state = JsonUtility.FromJson&amp;lt;ExampleModSaveState&amp;gt;(jsonState);&lt;br /&gt;
			randomNumber = state.randomNumber;&lt;br /&gt;
			Debug.Log(randomNumber);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	[System.Serializable]&lt;br /&gt;
	public class ExampleModSaveState &lt;br /&gt;
	{&lt;br /&gt;
		public float randomNumber;&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Debugging Mods ===&lt;br /&gt;
TODO (IMGUI Debugging)&lt;br /&gt;
&lt;br /&gt;
TODO (Graph Debugging)&lt;br /&gt;
&lt;br /&gt;
=== Lookup Table Registration ===&lt;br /&gt;
To register or modify assets, you can hook into the lookup table initialization step.&lt;br /&gt;
&lt;br /&gt;
The Lookup Table is a big list of assets that is commonly used in the engine, tied to an id. Beyond modding, it&#039;s used by the save system - any asset that is referenced in the save file (such as an item in the inventory) must be registered to the lookup table. The lookup table does not contain EVERY asset, however. &lt;br /&gt;
&lt;br /&gt;
If you ever run into needing a certain asset in the lookup table, throw me (joshcamas) a message on discord.&lt;br /&gt;
&lt;br /&gt;
Non scripting methods to create/modify assets is planned in the future.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of creating a new asset and registering it to the lookup table&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Lookup Table Tools&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Records Registration ===&lt;br /&gt;
You may also want to create Records with your mods. Records are objects in the world that can be accessed / manipulated at any time. The most common Record is the CharacterRecord, but there are others.&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If a mod spawns or modifies a record, and then the user disables the mod, this record will still exist in old save files. No immediate solutions for this, since players should expect odd things to happen when disabling mods and then loading an old save. &lt;br /&gt;
&lt;br /&gt;
=== Mod Version Patching ===&lt;br /&gt;
TODO: Add built in Mod Version Patching Support&lt;br /&gt;
&lt;br /&gt;
=== Mod Settings ===&lt;br /&gt;
TODO: Add Mod settings support.&lt;br /&gt;
&lt;br /&gt;
=== A note on Hot Reloading / Refreshing ===&lt;br /&gt;
Ardenfall&#039;s modding systems supports hot reloading. That is to say, reloading the mod without restarting the game. &lt;br /&gt;
&lt;br /&gt;
The mod user can always turn your mod on and off in the main menu, and you should ensure your mods correctly clean up during this state, otherwise it will cause problems for your users. However, users should expect weird things to occur on old save files that used to have the mod, of course.&lt;br /&gt;
&lt;br /&gt;
As a mod developer, you can also turn your mod on and off / refresh it while actually playing the game. You don&#039;t officially need support for this (no one will know) but making your mod work in this circumstance as much as possible is great from a developmental standpoint - you can super quickly work on your mods without needing to restart the application, or even maybe not reloading the save file sometimes.&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Mod_Scripting&amp;diff=21</id>
		<title>Mod Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Mod_Scripting&amp;diff=21"/>
		<updated>2026-05-21T19:52:58Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Mod Root ===&lt;br /&gt;
Essentially every mod needs a Mod Root class definition. This is your hook into the mod activation and deactivation events, as well as additional hooks.&lt;br /&gt;
&lt;br /&gt;
Your mod root class can be anywhere in the mod folder within a .cs file, but I&#039;d suggest putting it in YourModDirectory/Scripts/mod.cs.&lt;br /&gt;
&lt;br /&gt;
There are two main methods you probably want to override:&lt;br /&gt;
&lt;br /&gt;
Initialize(string id): Called when the mod is initialized. This happens on boot (if the mod is active), or whenever the mod is activated.&lt;br /&gt;
&lt;br /&gt;
Uninitialize(string id): Called when the mod is uninitialized. This happens whenever the mod is deactivated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Barebones Example:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
using Ardenfall;&lt;br /&gt;
using UnityEngine;&lt;br /&gt;
using System;&lt;br /&gt;
&lt;br /&gt;
namespace ExampleMod &lt;br /&gt;
{	&lt;br /&gt;
	public class ExampleMod : ModRoot&lt;br /&gt;
	{&lt;br /&gt;
		public override void Initialize(string id)&lt;br /&gt;
		{&lt;br /&gt;
			base.Initialize(id);&lt;br /&gt;
			Debug.Log(&amp;quot;Loaded Example Mod! WOW!&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
        &lt;br /&gt;
		public override void Uninitialize()&lt;br /&gt;
		{&lt;br /&gt;
			base.Uninitialize();&lt;br /&gt;
			Debug.Log(&amp;quot;Unloaded Example Mod! WOW!&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mod Saving ===&lt;br /&gt;
By default, mods do not save custom data. But you can do it! &lt;br /&gt;
&lt;br /&gt;
Override the following methods:&lt;br /&gt;
&lt;br /&gt;
void CreateState(): Run when a new game is made, or when the mod is loaded for a save for the first time. Use this to initialize a default state.&lt;br /&gt;
&lt;br /&gt;
void LoadState(string state): Load your state from previously saved data.&lt;br /&gt;
&lt;br /&gt;
string SaveState(): Save your state to a string.&lt;br /&gt;
&lt;br /&gt;
If you want to serialize data, you can use JsonUtility, or whatever other serializer you get your hands on, as long as its a string.&lt;br /&gt;
&lt;br /&gt;
Example of a mod that saves state.&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;using Ardenfall;&lt;br /&gt;
using UnityEngine;&lt;br /&gt;
using System;&lt;br /&gt;
&lt;br /&gt;
namespace ExampleSaveMod &lt;br /&gt;
{	&lt;br /&gt;
	public class ExampleSaveMod : ModRoot&lt;br /&gt;
	{&lt;br /&gt;
		private float randomNumber;&lt;br /&gt;
			&lt;br /&gt;
		public override void Initialize(string id)&lt;br /&gt;
		{&lt;br /&gt;
			base.Initialize(id);&lt;br /&gt;
			Debug.Log(&amp;quot;Loaded Example Mod! WOW!&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
        &lt;br /&gt;
		public override void Uninitialize()&lt;br /&gt;
		{&lt;br /&gt;
			base.Uninitialize();&lt;br /&gt;
			Debug.Log(&amp;quot;Unloaded Example Mod! WOW!&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		public override void CreateState()&lt;br /&gt;
		{&lt;br /&gt;
			randomNumber = UnityEngine.Random.value;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
        //Save state. You can save it as json or any format, it just needs to be a string.&lt;br /&gt;
		public override string SaveState()&lt;br /&gt;
		{&lt;br /&gt;
			var state = new ExampleModSaveState() &lt;br /&gt;
			{&lt;br /&gt;
				randomNumber = randomNumber&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			return JsonUtility.ToJson(state);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
        //Load the state as a string.&lt;br /&gt;
		public override void LoadState(string jsonState) &lt;br /&gt;
		{&lt;br /&gt;
			var state = JsonUtility.FromJson&amp;lt;ExampleModSaveState&amp;gt;(jsonState);&lt;br /&gt;
			randomNumber = state.randomNumber;&lt;br /&gt;
			Debug.Log(randomNumber);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	[System.Serializable]&lt;br /&gt;
	public class ExampleModSaveState &lt;br /&gt;
	{&lt;br /&gt;
		public float randomNumber;&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Debugging Mods ===&lt;br /&gt;
TODO (IMGUI Debugging)&lt;br /&gt;
&lt;br /&gt;
TODO (Graph Debugging)&lt;br /&gt;
&lt;br /&gt;
=== Lookup Table Registration ===&lt;br /&gt;
To register or modify assets, you can hook into the lookup table initialization step.&lt;br /&gt;
&lt;br /&gt;
The Lookup Table is a big list of assets that is commonly used in the engine, tied to an id. Beyond modding, it&#039;s used by the save system - any asset that is referenced in the save file (such as an item in the inventory) must be registered to the lookup table. The lookup table does not contain EVERY asset, however. &lt;br /&gt;
&lt;br /&gt;
If you ever run into needing a certain asset in the lookup table, throw me (joshcamas) a message on discord.&lt;br /&gt;
&lt;br /&gt;
Non scripting methods to create/modify assets is planned in the future.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Example of creating a new asset and registering it to the lookup table&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Lookup Table Tools&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Records Registration ===&lt;br /&gt;
You may also want to create Records with your mods. Records are objects in the world that can be accessed / manipulated at any time. The most common Record is the CharacterRecord, but there are others.&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If a mod spawns or modifies a record, and then the user disables the mod, this record will still exist in old save files. No immediate solutions for this, since players should expect odd things to happen when disabling mods and then loading an old save. &lt;br /&gt;
&lt;br /&gt;
=== Mod Version Patching ===&lt;br /&gt;
TODO: Add built in Mod Version Patching Support&lt;br /&gt;
&lt;br /&gt;
=== Mod Settings ===&lt;br /&gt;
TODO: Add Mod settings support.&lt;br /&gt;
&lt;br /&gt;
=== A note on Hot Reloading / Refreshing ===&lt;br /&gt;
Ardenfall&#039;s modding systems supports hot reloading. That is to say, reloading the mod without restarting the game. &lt;br /&gt;
&lt;br /&gt;
The mod user can always turn your mod on and off in the main menu, and you should ensure your mods correctly clean up during this state, otherwise it will cause problems for your users. However, users should expect weird things to occur on old save files that used to have the mod, of course.&lt;br /&gt;
&lt;br /&gt;
As a mod developer, you can also turn your mod on and off / refresh it while actually playing the game. You don&#039;t officially need support for this (no one will know) but making your mod work in this circumstance as much as possible is great from a developmental standpoint - you can super quickly work on your mods without needing to restart the application, or even maybe not reloading the save file sometimes.&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=20</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=20"/>
		<updated>2026-05-20T20:38:15Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to Ardenfall&#039;s &#039;&#039;&#039;Modding Wiki.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The goal for this wiki is to document modding tools, ardenfall&#039;s API, and also data mined components from the game itself. &lt;br /&gt;
&lt;br /&gt;
It is officially maintained by Spellcast Studios, but is also opened to the public for editing, so there is no promise of complete correctness. (Although we&#039;ll do our best to ensure high quality pages!) &lt;br /&gt;
&lt;br /&gt;
It &#039;&#039;can&#039;&#039; be treated as a standard game wiki (documenting quests and existing content), but the focus will still primarily centered on modding.&lt;br /&gt;
&lt;br /&gt;
=== Modding ===&lt;br /&gt;
[[Getting Started]]&lt;br /&gt;
&lt;br /&gt;
[[Mod Scripting]]&lt;br /&gt;
&lt;br /&gt;
[[Messaging System]]&lt;br /&gt;
&lt;br /&gt;
[[Custom Asset Importing]]&lt;br /&gt;
&lt;br /&gt;
[[Debug Tools]]&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Messaging_System&amp;diff=19</id>
		<title>Messaging System</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Messaging_System&amp;diff=19"/>
		<updated>2026-05-20T20:37:49Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: Created page with &amp;quot;One of the most useful ways to hook into the game is by use of the MessagingSystem.  Ardenfall has a host of messages that are sent when stuff happens. &amp;quot;CharacterDeathMessage&amp;quot;, &amp;quot;CharacterKillMessage&amp;quot;, &amp;quot;EffectAddMessage&amp;quot;... there are over 100 messages that you can subscribe (or send).  You can also define your own messages, for yourself or other mods.  TODO: Examples  TODO: Common Messages  TODO: Add tool to easily view messages&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;One of the most useful ways to hook into the game is by use of the MessagingSystem.&lt;br /&gt;
&lt;br /&gt;
Ardenfall has a host of messages that are sent when stuff happens. &amp;quot;CharacterDeathMessage&amp;quot;, &amp;quot;CharacterKillMessage&amp;quot;, &amp;quot;EffectAddMessage&amp;quot;... there are over 100 messages that you can subscribe (or send).&lt;br /&gt;
&lt;br /&gt;
You can also define your own messages, for yourself or other mods.&lt;br /&gt;
&lt;br /&gt;
TODO: Examples&lt;br /&gt;
&lt;br /&gt;
TODO: Common Messages&lt;br /&gt;
&lt;br /&gt;
TODO: Add tool to easily view messages&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=18</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=18"/>
		<updated>2026-05-20T20:28:44Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to Ardenfall&#039;s &#039;&#039;&#039;Modding Wiki.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The goal for this wiki is to document modding tools, ardenfall&#039;s API, and also data mined components from the game itself. &lt;br /&gt;
&lt;br /&gt;
It is officially maintained by Spellcast Studios, but is also opened to the public for editing, so there is no promise of complete correctness. (Although we&#039;ll do our best to ensure high quality pages!) &lt;br /&gt;
&lt;br /&gt;
It &#039;&#039;can&#039;&#039; be treated as a standard game wiki (documenting quests and existing content), but the focus will still primarily centered on modding.&lt;br /&gt;
&lt;br /&gt;
=== Modding ===&lt;br /&gt;
[[Getting Started]]&lt;br /&gt;
&lt;br /&gt;
[[Mod Scripting]]&lt;br /&gt;
&lt;br /&gt;
[[Custom Asset Importing]]&lt;br /&gt;
&lt;br /&gt;
[[Debug Tools]]&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Debug_Tools&amp;diff=17</id>
		<title>Debug Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Debug_Tools&amp;diff=17"/>
		<updated>2026-05-20T20:28:30Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: Created page with &amp;quot;=== F1 Debugger === The main debug tool available is the F1 debugger.  TODO&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== F1 Debugger ===&lt;br /&gt;
The main debug tool available is the F1 debugger.&lt;br /&gt;
&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=16</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=16"/>
		<updated>2026-05-20T20:27:56Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to Ardenfall&#039;s &#039;&#039;&#039;Modding Wiki.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The goal for this wiki is to document modding tools, ardenfall&#039;s API, and also data mined components from the game itself. &lt;br /&gt;
&lt;br /&gt;
It is officially maintained by Spellcast Studios, but is also opened to the public for editing, so there is no promise of complete correctness. (Although we&#039;ll do our best to ensure high quality pages!) &lt;br /&gt;
&lt;br /&gt;
It &#039;&#039;can&#039;&#039; be treated as a standard game wiki (documenting quests and existing content), but the focus will still primarily centered on modding.&lt;br /&gt;
&lt;br /&gt;
=== Modding ===&lt;br /&gt;
[[Getting Started]]&lt;br /&gt;
&lt;br /&gt;
[[Mod Scripting]]&lt;br /&gt;
&lt;br /&gt;
[[Custom Asset Importing]]&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Custom_Asset_Importing&amp;diff=15</id>
		<title>Custom Asset Importing</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Custom_Asset_Importing&amp;diff=15"/>
		<updated>2026-05-20T20:27:40Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: Created page with &amp;quot;At some point you may want to import a new model, texture, sound, etc.  This can be done one of two ways - manually via scripting, or by using the built in mod asset importer feature. I suggest the latter, unless you want to do something funky.  === Asset Manifest === Every mod can have an asset manifest file defined. This lists out all assets you want to import.  TODO  === Supported Importers === &amp;lt;u&amp;gt;SimpleModel:&amp;lt;/u&amp;gt; Imports a GLTF file as a gameobject. You can define a...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;At some point you may want to import a new model, texture, sound, etc.&lt;br /&gt;
&lt;br /&gt;
This can be done one of two ways - manually via scripting, or by using the built in mod asset importer feature. I suggest the latter, unless you want to do something funky.&lt;br /&gt;
&lt;br /&gt;
=== Asset Manifest ===&lt;br /&gt;
Every mod can have an asset manifest file defined. This lists out all assets you want to import.&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Supported Importers ===&lt;br /&gt;
&amp;lt;u&amp;gt;SimpleModel:&amp;lt;/u&amp;gt; Imports a GLTF file as a gameobject. You can define a built in material to use, and it will automatically apply said material + hook up included textures.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Texture:&amp;lt;/u&amp;gt; Imports a .png or .jpeg as a Texture2D&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;AudioClip:&amp;lt;/u&amp;gt; Imports a .mp3, .wav, or .ogg as an ArdenAudioClip&lt;br /&gt;
&lt;br /&gt;
=== Custom Importers ===&lt;br /&gt;
Mods can define their own importers. Perhaps you built a tool that can easily create item data assets from a json file. You can register your own importer to read this file, and then you can easily import them as assets! Other mods can also rely on other&#039;s importers.&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Example: A Custom Weapon ===&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=14</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=14"/>
		<updated>2026-05-20T20:22:45Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to Ardenfall&#039;s &#039;&#039;&#039;Modding Wiki.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The goal for this wiki is to document modding tools, ardenfall&#039;s API, and also data mined components from the game itself. &lt;br /&gt;
&lt;br /&gt;
It is officially maintained by Spellcast Studios, but is also opened to the public for editing, so there is no promise of complete correctness. (Although we&#039;ll do our best to ensure high quality pages!) &lt;br /&gt;
&lt;br /&gt;
It &#039;&#039;can&#039;&#039; be treated as a standard game wiki (documenting quests and existing content), but the focus will still primarily centered on modding.&lt;br /&gt;
&lt;br /&gt;
=== Modding ===&lt;br /&gt;
[[Getting Started]]&lt;br /&gt;
&lt;br /&gt;
[[Mod Scripting]]&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Mod_Scripting&amp;diff=13</id>
		<title>Mod Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Mod_Scripting&amp;diff=13"/>
		<updated>2026-05-20T20:22:28Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Mod Root ===&lt;br /&gt;
Essentially every mod needs a Mod Root class definition. This is your hook into the mod activation and deactivation events, as well as additional hooks.&lt;br /&gt;
&lt;br /&gt;
Your mod root class can be anywhere in the mod folder within a .cs file, but I&#039;d suggest putting it in YourModDirectory/Scripts/mod.cs.&lt;br /&gt;
&lt;br /&gt;
There are two main methods you probably want to override:&lt;br /&gt;
&lt;br /&gt;
Initialize(string id): Called when the mod is initialized. This happens on boot (if the mod is active), or whenever the mod is activated.&lt;br /&gt;
&lt;br /&gt;
Uninitialize(string id): Called when the mod is uninitialized. This happens whenever the mod is deactivated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Barebones Example:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
using Ardenfall;&lt;br /&gt;
using UnityEngine;&lt;br /&gt;
using System;&lt;br /&gt;
&lt;br /&gt;
namespace ExampleMod &lt;br /&gt;
{	&lt;br /&gt;
	public class ExampleMod : ModRoot&lt;br /&gt;
	{&lt;br /&gt;
		public override void Initialize(string id)&lt;br /&gt;
		{&lt;br /&gt;
			base.Initialize(id);&lt;br /&gt;
			Debug.Log(&amp;quot;Loaded Example Mod! WOW!&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
        &lt;br /&gt;
		public override void Uninitialize()&lt;br /&gt;
		{&lt;br /&gt;
			base.Uninitialize();&lt;br /&gt;
			Debug.Log(&amp;quot;Unloaded Example Mod! WOW!&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mod Saving ===&lt;br /&gt;
By default, mods do not save custom data. But you can do it! &lt;br /&gt;
&lt;br /&gt;
Use the interface ISaveMod on your ModRoot script, and implement the following methods:&lt;br /&gt;
&lt;br /&gt;
void CreateState(): Run when a new game is made, or when the mod is loaded for a save for the first time. Use this to initialize a default state.&lt;br /&gt;
&lt;br /&gt;
void LoadState(string state): Load your state from previously saved data.&lt;br /&gt;
&lt;br /&gt;
string SaveState(): Save your state to a string.&lt;br /&gt;
&lt;br /&gt;
If you want to serialize data, you can use JsonUtility, or whatever other serializer you get your hands on, as long as its a string.&lt;br /&gt;
&lt;br /&gt;
Example of a mod that saves state.&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;using Ardenfall;&lt;br /&gt;
using UnityEngine;&lt;br /&gt;
using System;&lt;br /&gt;
&lt;br /&gt;
namespace ExampleSaveMod &lt;br /&gt;
{	&lt;br /&gt;
	public class ExampleSaveMod : ModRoot, ISaveMod,&lt;br /&gt;
	{&lt;br /&gt;
		private float randomNumber;&lt;br /&gt;
			&lt;br /&gt;
		public override void Initialize(string id)&lt;br /&gt;
		{&lt;br /&gt;
			base.Initialize(id);&lt;br /&gt;
			Debug.Log(&amp;quot;Loaded Example Mod! WOW!&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
        &lt;br /&gt;
		public override void Uninitialize()&lt;br /&gt;
		{&lt;br /&gt;
			base.Uninitialize();&lt;br /&gt;
			Debug.Log(&amp;quot;Unloaded Example Mod! WOW!&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
        void ISaveMod.CreateState()&lt;br /&gt;
		{&lt;br /&gt;
			randomNumber = UnityEngine.Random.value;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
        //Save state. You can save it as json or any format, it just needs to be a string.&lt;br /&gt;
        string ISaveMod.SaveState()&lt;br /&gt;
		{&lt;br /&gt;
			var state = new ExampleModSaveState() &lt;br /&gt;
			{&lt;br /&gt;
				randomNumber = randomNumber&lt;br /&gt;
			};&lt;br /&gt;
&lt;br /&gt;
			return JsonUtility.ToJson(state);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
        //Load the state as a string.&lt;br /&gt;
        void ISaveMod.LoadState(string jsonState) &lt;br /&gt;
		{&lt;br /&gt;
			var state = JsonUtility.FromJson&amp;lt;ExampleModSaveState&amp;gt;(jsonState);&lt;br /&gt;
			randomNumber = state.randomNumber;&lt;br /&gt;
			Debug.Log(randomNumber);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	[System.Serializable]&lt;br /&gt;
	public class ExampleModSaveState &lt;br /&gt;
	{&lt;br /&gt;
		public float randomNumber;&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Debugging Mods ===&lt;br /&gt;
TODO (IMGUI Debugging)&lt;br /&gt;
&lt;br /&gt;
TODO (Graph Debugging)&lt;br /&gt;
&lt;br /&gt;
=== Lookup Table Registration ===&lt;br /&gt;
To register or modify assets, you can hook into the lookup table initialization step.&lt;br /&gt;
&lt;br /&gt;
The Lookup Table is a big list of assets that is commonly used in the engine, tied to an id. Beyond modding, it&#039;s used by the save system - any asset that is referenced in the save file (such as an item in the inventory) must be registered to the lookup table. The lookup table does not contain EVERY asset, however. &lt;br /&gt;
&lt;br /&gt;
If you ever run into needing a certain asset in the lookup table, throw me (joshcamas) a message on discord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful when modifying assets in particular - users expect to be able to disable mods easily, and if you wreck an asset and disabling mods doesn&#039;t undo it, players may be unhappy.&lt;br /&gt;
&lt;br /&gt;
Non scripting methods to create/modify assets is planned in the future.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;Example of creating a new asset and registering it to the lookup table&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Lookup Table Tools&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Records Registration ===&lt;br /&gt;
You may also want to create Records with your mods. Records are objects in the world that can be accessed / manipulated at any time. The most common Record is the CharacterRecord, but there are others.&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== A note on Hot Reloading / Refreshing ===&lt;br /&gt;
Ardenfall&#039;s modding systems supports hot reloading. That is to say, reloading the mod without restarting the game. &lt;br /&gt;
&lt;br /&gt;
The mod user can always turn your mod on and off in the main menu, and you should ensure your mods correctly clean up during this state, otherwise it will cause problems for your users.&lt;br /&gt;
&lt;br /&gt;
As a mod developer, you can also turn your mod on and off / refresh it while actually playing the game. You don&#039;t officially need support for this (no one will know) but making your mod work in this circumstance as much as possible is great from a developmental standpoint - you can super quickly work on your mods without worries.&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Mod_Scripting&amp;diff=12</id>
		<title>Mod Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Mod_Scripting&amp;diff=12"/>
		<updated>2026-05-20T19:38:31Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: Created page with &amp;quot;TODO&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Creating_Dialog&amp;diff=11</id>
		<title>Creating Dialog</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Creating_Dialog&amp;diff=11"/>
		<updated>2026-05-20T19:38:10Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: Created page with &amp;quot;TODO&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Creating_Quests&amp;diff=10</id>
		<title>Creating Quests</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Creating_Quests&amp;diff=10"/>
		<updated>2026-05-20T19:37:55Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: Created page with &amp;quot;TODO&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=9</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=9"/>
		<updated>2026-05-20T19:34:34Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to Ardenfall&#039;s &#039;&#039;&#039;Modding Wiki.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The goal for this wiki is to document modding tools, ardenfall&#039;s API, and also data mined components from the game itself. &lt;br /&gt;
&lt;br /&gt;
It is officially maintained by Spellcast Studios, but is also opened to the public for editing, so there is no promise of complete correctness. (Although we&#039;ll do our best to ensure high quality pages!) &lt;br /&gt;
&lt;br /&gt;
It &#039;&#039;can&#039;&#039; be treated as a standard game wiki (documenting quests and existing content), but the focus will still primarily centered on modding.&lt;br /&gt;
&lt;br /&gt;
=== Modding ===&lt;br /&gt;
[[Getting Started]]&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=8</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=8"/>
		<updated>2026-05-20T19:33:40Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to Ardenfall&#039;s &#039;&#039;&#039;Modding Wiki.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The goal for this wiki is to document modding tools, ardenfall&#039;s API, and also data mined components from the game itself. &lt;br /&gt;
&lt;br /&gt;
It &#039;&#039;can&#039;&#039; be treated as a standard game wiki (documenting quests and existing content), but the focus will still primarily centered on modding.&lt;br /&gt;
&lt;br /&gt;
=== Modding ===&lt;br /&gt;
[[Getting Started]]&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Getting_Started&amp;diff=7</id>
		<title>Getting Started</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Getting_Started&amp;diff=7"/>
		<updated>2026-05-20T17:52:01Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[IN PROGRESS]&lt;br /&gt;
&lt;br /&gt;
=== Mod Structure ===&lt;br /&gt;
Here is the suggested structure for your Mod. Technically the only requirement is the mod_metadata.txt file being in the root directory of your mod.&lt;br /&gt;
 Ardenfall_Data  &lt;br /&gt;
    StreamingAssets&lt;br /&gt;
      Mods&lt;br /&gt;
         YourModDirectory&lt;br /&gt;
            mod_metadata.txt&lt;br /&gt;
            Assets&lt;br /&gt;
               yourtexture.png&lt;br /&gt;
            Scripts&lt;br /&gt;
               yourscript.cs&lt;br /&gt;
&lt;br /&gt;
=== Mod Metadata ===&lt;br /&gt;
The mod metadata file defines some top level values for your mod.&lt;br /&gt;
&lt;br /&gt;
modName: The name displayed to the user&lt;br /&gt;
&lt;br /&gt;
modAuthor: The author displayed to the user. Can be empty or multiple names, whatever.&lt;br /&gt;
&lt;br /&gt;
modId: The ID used by the modding system. Make sure this is unique - if two mods have the same id, they can&#039;t both be activated. You can use a GUID like the example below, or just write an id you think no one would use. The Mod Template Builder also auto generates this id.&lt;br /&gt;
&lt;br /&gt;
modDescription: The description displayed to the user. Can be empty.&lt;br /&gt;
&lt;br /&gt;
modVersion: A version string (must be in a format supported by [https://learn.microsoft.com/en-us/dotnet/api/system.version?view=netframework-4.8.1 C#&#039;s Version], such as &amp;quot;1&amp;quot;, &amp;quot;1.0&amp;quot;, or &amp;quot;3.2.7&amp;quot;.&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;modName&amp;quot;: &amp;quot;Example Mod&amp;quot;,&lt;br /&gt;
    &amp;quot;modAuthor&amp;quot;: &amp;quot;joshcamas&amp;quot;,&lt;br /&gt;
    &amp;quot;modId&amp;quot;: &amp;quot;f5c4ccca-87ab-40ed-8731-1e19aa17ab66&amp;quot;,&lt;br /&gt;
    &amp;quot;modDescription&amp;quot;: &amp;quot;A simple mod that showcases a very simple scripting setup.&amp;quot;,&lt;br /&gt;
    &amp;quot;modVersion&amp;quot;: &amp;quot;0.0.1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mod Template Builder ===&lt;br /&gt;
The Mod Template Builder tool allows you to create a mod starting point easily. It also includes the generation of a .csproj file, which will let you create scripts while referencing the actual codebase of ardenfall that mods have access to.&lt;br /&gt;
&lt;br /&gt;
Run the application ModTemplateBuilder.exe within your ardenfall&#039;s installation directory, and follow the prompts.&lt;br /&gt;
&lt;br /&gt;
The mod will be created in Ardenfall_Data/StreamingAssets/Mods.&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=6</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=6"/>
		<updated>2026-05-20T17:51:51Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ardenfall&#039;s main page.&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Getting_Started&amp;diff=5</id>
		<title>Getting Started</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Getting_Started&amp;diff=5"/>
		<updated>2026-05-20T17:50:21Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[IN PROGRESS]&lt;br /&gt;
&lt;br /&gt;
=== Mod Structure ===&lt;br /&gt;
Here is the suggested structure for your Mod. Technically the only requirement is the mod_metadata.txt file being in the root directory of your mod.&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Ardenfall_Data&lt;br /&gt;
   StreamingAssets&lt;br /&gt;
      Mods&lt;br /&gt;
         YourModDirectory&lt;br /&gt;
            mod_metadata.txt&lt;br /&gt;
            Assets&lt;br /&gt;
               yourtexture.png&lt;br /&gt;
            Scripts&lt;br /&gt;
               yourscript.cs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mod Metadata ===&lt;br /&gt;
The mod metadata file defines some top level values for your mod.&lt;br /&gt;
&lt;br /&gt;
modName: The name displayed to the user&lt;br /&gt;
&lt;br /&gt;
modAuthor: The author displayed to the user. Can be empty or multiple names, whatever.&lt;br /&gt;
&lt;br /&gt;
modId: The ID used by the modding system. Make sure this is unique - if two mods have the same id, they can&#039;t both be activated. You can use a GUID like the example below, or just write an id you think no one would use. The Mod Template Builder also auto generates this id.&lt;br /&gt;
&lt;br /&gt;
modDescription: The description displayed to the user. Can be empty.&lt;br /&gt;
&lt;br /&gt;
modVersion: A version string (must be in a format supported by [https://learn.microsoft.com/en-us/dotnet/api/system.version?view=netframework-4.8.1 C#&#039;s Version], such as &amp;quot;1&amp;quot;, &amp;quot;1.0&amp;quot;, or &amp;quot;3.2.7&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example:&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;modName&amp;quot;: &amp;quot;Example Mod&amp;quot;,&lt;br /&gt;
   &amp;quot;modAuthor&amp;quot;: &amp;quot;joshcamas&amp;quot;,&lt;br /&gt;
   &amp;quot;modId&amp;quot;: &amp;quot;f5c4ccca-87ab-40ed-8731-1e19aa17ab66&amp;quot;,&lt;br /&gt;
   &amp;quot;modDescription&amp;quot;: &amp;quot;A simple mod that showcases a very simple scripting setup.&amp;quot;,&lt;br /&gt;
   &amp;quot;modVersion&amp;quot;: &amp;quot;0.0.1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mod Template Builder ===&lt;br /&gt;
The Mod Template Builder tool allows you to create a mod starting point easily. It also includes the generation of a .csproj file, which will let you create scripts while referencing the actual codebase of ardenfall that mods have access to.&lt;br /&gt;
&lt;br /&gt;
Run the application ModTemplateBuilder.exe within your ardenfall&#039;s installation directory, and follow the prompts.&lt;br /&gt;
&lt;br /&gt;
The mod will be created in Ardenfall_Data/StreamingAssets/Mods.&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=4</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=4"/>
		<updated>2026-05-20T17:50:15Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ardenfall&#039;s main page&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Getting_Started&amp;diff=3</id>
		<title>Getting Started</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Getting_Started&amp;diff=3"/>
		<updated>2026-05-20T06:08:17Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: Created page with &amp;quot;TODO&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TODO&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
</feed>