<?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-08-18T07:23:09Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Game_Debugger&amp;diff=68</id>
		<title>Game Debugger</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Game_Debugger&amp;diff=68"/>
		<updated>2026-08-17T20:31:30Z</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 Window ==&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 Window =&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 Window =&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 Window ==&lt;br /&gt;
The Mod Debugger allows you to reload mods while playing (very useful), as well as view information about mods.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Reload Mods&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Used to reload all activated mods. You still need to go to the main menu to activate/deactivate mods for now.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Graph Viewer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mods that override IGraphView can register their created graphs to be viewable here. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lookup Table&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Search and find lookup table objects here.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Positions&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Good to debug positions&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Look Points&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Same thing but with your current look position&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Debug Mods&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mods that are set up to hook into the debugger appear here. More info [[Mod Scripting#Debugging Mods|here]].&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=67</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=67"/>
		<updated>2026-08-17T20:30:38Z</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 mod_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;
|ScriptableObject&lt;br /&gt;
|Creates a new item based on properties.&lt;br /&gt;
|scriptable_object&lt;br /&gt;
|path: the path to the scriptable object definition 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;
{| class=&amp;quot;wikitable&amp;quot;&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;br /&gt;
&lt;br /&gt;
=== Custom Importers ===&lt;br /&gt;
You can also create your own importers for yourself / others to utilize. &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=Mod_Scripting&amp;diff=66</id>
		<title>Mod Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Mod_Scripting&amp;diff=66"/>
		<updated>2026-08-17T20:23:37Z</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(): 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;
You can add your own mod debuggers that hooks into the [[Game Debugger]].&lt;br /&gt;
&lt;br /&gt;
It uses [https://github.com/ocornut/imgui Dear IMGUI] with the unity wrapper [https://github.com/psydack/uimgui UImgui].&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;
public class ExampleDebugMod : ModRoot, IDebugMod&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;
     &lt;br /&gt;
   public override void Uninitialize()&lt;br /&gt;
   {&lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
   void IDebugMod.RenderDebug()&lt;br /&gt;
   {&lt;br /&gt;
      ImGui.Text($&amp;quot;Some Text”);&lt;br /&gt;
&lt;br /&gt;
      if (ImGui.Button(&amp;quot;Do Something&amp;quot;))&lt;br /&gt;
      {      &lt;br /&gt;
            //Do cool stuff&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;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=Modding_Support_Status&amp;diff=65</id>
		<title>Modding Support Status</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Modding_Support_Status&amp;diff=65"/>
		<updated>2026-07-30T23:22:22Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Since the game isn&#039;t even out, naturally modding is in a VERY early state. Practically everything could change, so please don&#039;t get too attached to your mods at this stage.&lt;br /&gt;
&lt;br /&gt;
Modding support will be broken into a few stages. The first stage, Pre-EA, is focused on just getting the bare minimum fully working and with high ease of use ASSUMING you know how to code.&lt;br /&gt;
&lt;br /&gt;
After EA we will continue to flesh out modding features, with a focus on adding visual tools to make creating mods easier and faster, with less digging through code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is a overview of features and their statuses. This is by no means a comprehensive list, and anything &#039;Under Consideration&#039; is just that: not guaranteed to be added.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Feature&lt;br /&gt;
!Description&lt;br /&gt;
!Status&lt;br /&gt;
|-&lt;br /&gt;
|Core Mod Loading&lt;br /&gt;
|Mod manifest, enabling, disabling&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Mod Saving: Custom Data&lt;br /&gt;
|Serialized and deserialize strings to a save file&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Scriptable Lookup Table Modification&lt;br /&gt;
|Add and modify assets in the lookup table&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Mod Generator&lt;br /&gt;
|Simple tool to get started with a new mod&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Core Mod Asset Importer&lt;br /&gt;
|Core asset importer feature to be used across many importers&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Static Model Importing&lt;br /&gt;
|Importing of static GLTF models&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Texture, Audio Importing&lt;br /&gt;
|Importing of textures and audio files&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Misc Item Importing&lt;br /&gt;
|Importing of simple misc item&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Child Item Importing&lt;br /&gt;
|Importing of child items&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Melee Item Importing&lt;br /&gt;
|Importing of melee items&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Code-Based Quest Support&lt;br /&gt;
|Very clunky quest creation via code&lt;br /&gt;
|COMPLETE, Not documented&lt;br /&gt;
|-&lt;br /&gt;
|Code-Based Dialog Support for Quests&lt;br /&gt;
|Very clunky dialog creation via code.&lt;br /&gt;
|COMPLETE, Not documented&lt;br /&gt;
|-&lt;br /&gt;
|Very basic graph viewer&lt;br /&gt;
|A very basic (and ugly) viewer for your dialog / quest graphs. Is not an editor, as it can only view.&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Item Importer 2.0&lt;br /&gt;
|Currently all items are importing with a very simple importer, with each entry hand picked. This is not ideal. Seems like a much better way to go about it would be to have each item be its own JSON file, and then create a generic scriptable object importer that can overwrite values.&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Blender Rig&lt;br /&gt;
|Ship the blender rig to make it easy to create new armors and clothing.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Armor Item Importing&lt;br /&gt;
|Importing of armor. Will require some way to create ClothingAssets as well, potentially another importer? (This would mean we need a multi pass importer system, *shiver*)&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Simple Modding UI&lt;br /&gt;
|Currently the main way for mods to display UI is through dialog or the Alert system. Both are quite limited.&lt;br /&gt;
The Moddable UI System would allow for new simple UI’s to be introduced, with the ability to create more complex interfaces, such as buttons, data lists, scrollbars, etc. They could support being opened via keybind, through interacting with an object, or some other way.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Lookup Table Tooling&lt;br /&gt;
|&lt;br /&gt;
# Need a way to invalidate lookup table values, whenever a mod refreshes. This can be done via a cache index.&lt;br /&gt;
# Need better tooling to find IDs of assets&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Warn if mods aren&#039;t loaded correctly&lt;br /&gt;
|When loading a save, and the save has a mod enabled that is no longer enabled, it should show a warning.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Tool: Position Debugger&lt;br /&gt;
|Little tool that tells you where a position is in the world. Useful to figure out where you want to spawn items.&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Mod Settings: JSON&lt;br /&gt;
|Add support for mods to have a json file for settings, to allow the mod users to tweak the mod.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Remove enum for item slot&lt;br /&gt;
|Currently item slots for characters is an enum. This is not mod friendly.&lt;br /&gt;
It should be ported to a scriptable object.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Mod Dependencies&lt;br /&gt;
|Ensure mods can rely on others.&lt;br /&gt;
Mod dependencies can declare whether they must be loaded before, or any time.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|On Quest Start / Stop Hooks&lt;br /&gt;
|Obviously any logic in a modded quest doesn’t need to be (and really shouldn’t) be part of the graph, but instead be in your code.&lt;br /&gt;
Add hooks to on quest start / stop.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Code-Based Dialog Support without Quests&lt;br /&gt;
|Support injecting dialog into characters without involving a Quest&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Prefab Creator&lt;br /&gt;
|Make a way to create prefabs from within the game tooling. Could potentially support simple VFX creation? This is a rabbit hole, however.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Asset Bundle Importer&lt;br /&gt;
|Add official support to import asset bundles, and to easily be able to reference assets. This is particularly important for VFX + potential complex prefab support.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Unity Tooling&lt;br /&gt;
|Right now I&#039;ve entirely focused on having tooling being within our own pipeline. We could however ship a simple asset bundle exporter, along with some helper scripts.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: Item Editor&lt;br /&gt;
|A visual editor to edit / create items.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: Item List Editor&lt;br /&gt;
|A visual editor to edit / create item lists.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: Full Node Editor&lt;br /&gt;
|A true editor for graphs.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: SpellData / Spell Creation&lt;br /&gt;
|Currently spells can be created via code. (Not documented).&lt;br /&gt;
This tool would allow for spells to be created visually.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: NPC Editor&lt;br /&gt;
|Currently you can edit NPC’s via code.&lt;br /&gt;
This tool would allow you to edit/view NPC data visually.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Patch Mods&lt;br /&gt;
|Mods are designed to be added “on top” of ardenfall’s codebase. This allows for hot reloading, easy disable/enable, and less issues when updates occur. Patch Mods would be a separate type of mod, that would actually overwrite the actual source code of Ardenfall, similar to Harmony. (In fact, we&#039;d use Harmony to do this). This would take more effort to get working, and could break whenever a game update happens, but would allow for &amp;quot;Skyrim Script Extender&amp;quot; sort of modding platforms that the community could build if they desired.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Simple Dialog API&lt;br /&gt;
|Create a way to make a dialog graph SUPER simply, without all the fancy connected stuff.&lt;br /&gt;
Example:&lt;br /&gt;
 &amp;lt;code&amp;gt;CreateTopic(“What’s up?”).AddSpeak(“Nothing Much!”).Run(myMethod).CloseDialog();&amp;lt;/code&amp;gt;&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Mod Settings: Main Menu UI&lt;br /&gt;
|Make mod settings modifiable in the main menu, not just through a json file.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Custom Hair, Beard, Brow support&lt;br /&gt;
|Make it easy to set up new hair, beard, brows in the creation menu.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Custom Skills / Attributes / Traits Support&lt;br /&gt;
|Make it easy to set up new skills, attributes, and traits in the creation menu.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Custom Race Support&lt;br /&gt;
|Make it easy to set up a new character race in the creation menu.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Modding_Support_Status&amp;diff=64</id>
		<title>Modding Support Status</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Modding_Support_Status&amp;diff=64"/>
		<updated>2026-07-30T22:04:41Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Since the game isn&#039;t even out, naturally modding is in a VERY early state. Practically everything could change, so please don&#039;t get too attached to your mods at this stage.&lt;br /&gt;
&lt;br /&gt;
Modding support will be broken into a few stages. The first stage, Pre-EA, is focused on just getting the bare minimum fully working and with high ease of use ASSUMING you know how to code.&lt;br /&gt;
&lt;br /&gt;
After EA we will continue to flesh out modding features, with a focus on adding visual tools to make creating mods easier and faster, with less digging through code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is a overview of features and their statuses. This is by no means a comprehensive list, and anything &#039;Under Consideration&#039; is just that: not guaranteed to be added.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Feature&lt;br /&gt;
!Description&lt;br /&gt;
!Status&lt;br /&gt;
|-&lt;br /&gt;
|Core Mod Loading&lt;br /&gt;
|Mod manifest, enabling, disabling&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Mod Saving: Custom Data&lt;br /&gt;
|Serialized and deserialize strings to a save file&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Scriptable Lookup Table Modification&lt;br /&gt;
|Add and modify assets in the lookup table&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Mod Generator&lt;br /&gt;
|Simple tool to get started with a new mod&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Core Mod Asset Importer&lt;br /&gt;
|Core asset importer feature to be used across many importers&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Static Model Importing&lt;br /&gt;
|Importing of static GLTF models&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Texture, Audio Importing&lt;br /&gt;
|Importing of textures and audio files&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Misc Item Importing&lt;br /&gt;
|Importing of simple misc item&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Child Item Importing&lt;br /&gt;
|Importing of child items&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Melee Item Importing&lt;br /&gt;
|Importing of melee items&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Code-Based Quest Support&lt;br /&gt;
|Very clunky quest creation via code&lt;br /&gt;
|COMPLETE, Not documented&lt;br /&gt;
|-&lt;br /&gt;
|Code-Based Dialog Support for Quests&lt;br /&gt;
|Very clunky dialog creation via code.&lt;br /&gt;
|COMPLETE, Not documented&lt;br /&gt;
|-&lt;br /&gt;
|Very basic graph viewer&lt;br /&gt;
|A very basic (and ugly) viewer for your dialog / quest graphs. Is not an editor, as it can only view.&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Item Importer 2.0&lt;br /&gt;
|Currently all items are importing with a very simple importer, with each entry hand picked. This is not ideal. Seems like a much better way to go about it would be to have each item be its own JSON file, and then create a generic scriptable object importer that can overwrite values.&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Blender Rig&lt;br /&gt;
|Ship the blender rig to make it easy to create new armors and clothing.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Armor Item Importing&lt;br /&gt;
|Importing of armor. Will require some way to create ClothingAssets as well, potentially another importer? (This would mean we need a multi pass importer system, *shiver*)&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Simple Modding UI&lt;br /&gt;
|Currently the main way for mods to display UI is through dialog or the Alert system. Both are quite limited.&lt;br /&gt;
The Moddable UI System would allow for new simple UI’s to be introduced, with the ability to create more complex interfaces, such as buttons, data lists, scrollbars, etc. They could support being opened via keybind, through interacting with an object, or some other way.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Lookup Table Tooling&lt;br /&gt;
|&lt;br /&gt;
# Need a way to invalidate lookup table values, whenever a mod refreshes. This can be done via a cache index.&lt;br /&gt;
# Need better tooling to find IDs of assets&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Warn if mods aren&#039;t loaded correctly&lt;br /&gt;
|When loading a save, and the save has a mod enabled that is no longer enabled, it should show a warning.&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Tool: Position Debugger&lt;br /&gt;
|Little tool that tells you where a position is in the world. Useful to figure out where you want to spawn items.&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Mod Settings: JSON&lt;br /&gt;
|Add support for mods to have a json file for settings, to allow the mod users to tweak the mod.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Remove enum for item slot&lt;br /&gt;
|Currently item slots for characters is an enum. This is not mod friendly.&lt;br /&gt;
It should be ported to a scriptable object.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Mod Dependencies&lt;br /&gt;
|Ensure mods can rely on others.&lt;br /&gt;
Mod dependencies can declare whether they must be loaded before, or any time.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|On Quest Start / Stop Hooks&lt;br /&gt;
|Obviously any logic in a modded quest doesn’t need to be (and really shouldn’t) be part of the graph, but instead be in your code.&lt;br /&gt;
Add hooks to on quest start / stop.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Code-Based Dialog Support without Quests&lt;br /&gt;
|Support injecting dialog into characters without involving a Quest&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Prefab Creator&lt;br /&gt;
|Make a way to create prefabs from within the game tooling. Could potentially support simple VFX creation? This is a rabbit hole, however.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Asset Bundle Importer&lt;br /&gt;
|Add official support to import asset bundles, and to easily be able to reference assets. This is particularly important for VFX + potential complex prefab support.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Unity Tooling&lt;br /&gt;
|Right now I&#039;ve entirely focused on having tooling being within our own pipeline. We could however ship a simple asset bundle exporter, along with some helper scripts.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: Item Editor&lt;br /&gt;
|A visual editor to edit / create items.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: Item List Editor&lt;br /&gt;
|A visual editor to edit / create item lists.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: Full Node Editor&lt;br /&gt;
|A true editor for graphs.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: SpellData / Spell Creation&lt;br /&gt;
|Currently spells can be created via code. (Not documented).&lt;br /&gt;
This tool would allow for spells to be created visually.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: NPC Editor&lt;br /&gt;
|Currently you can edit NPC’s via code.&lt;br /&gt;
This tool would allow you to edit/view NPC data visually.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Patch Mods&lt;br /&gt;
|Mods are designed to be added “on top” of ardenfall’s codebase. This allows for hot reloading, easy disable/enable, and less issues when updates occur. Patch Mods would be a separate type of mod, that would actually overwrite the actual source code of Ardenfall, similar to Harmony. (In fact, we&#039;d use Harmony to do this). This would take more effort to get working, and could break whenever a game update happens, but would allow for &amp;quot;Skyrim Script Extender&amp;quot; sort of modding platforms that the community could build if they desired.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Simple Dialog API&lt;br /&gt;
|Create a way to make a dialog graph SUPER simply, without all the fancy connected stuff.&lt;br /&gt;
Example:&lt;br /&gt;
 &amp;lt;code&amp;gt;CreateTopic(“What’s up?”).AddSpeak(“Nothing Much!”).Run(myMethod).CloseDialog();&amp;lt;/code&amp;gt;&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Mod Settings: Main Menu UI&lt;br /&gt;
|Make mod settings modifiable in the main menu, not just through a json file.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Custom Hair, Beard, Brow support&lt;br /&gt;
|Make it easy to set up new hair, beard, brows in the creation menu.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Custom Skills / Attributes / Traits Support&lt;br /&gt;
|Make it easy to set up new skills, attributes, and traits in the creation menu.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Custom Race Support&lt;br /&gt;
|Make it easy to set up a new character race in the creation menu.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=63</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=63"/>
		<updated>2026-07-30T01:36:02Z</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;
This wiki is VERY early in development, and thus API&#039;s will absolutely change. &lt;br /&gt;
&lt;br /&gt;
If you are interested in contributing, join the discord and ask! &lt;br /&gt;
&lt;br /&gt;
See [[Modding Support Status]] to check on what&#039;s supported currently. &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 UI]]&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=Creating_UI&amp;diff=62</id>
		<title>Creating UI</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Creating_UI&amp;diff=62"/>
		<updated>2026-07-30T01:35:40Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: Created page with &amp;quot;Creating new UI elements is for now, quite simple. More complex UI features will be coming later.  == Event Message == Event Message is text that appears on the top left of the screen. Can appear at any time in gameplay and in most menus. Messages will stack, and only a handful will appear at a time.  === ShowMessage === Displays the message&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;//Shows a simple text message. Will play a sound, and will stack. EventMessageInfoUI.ShowMessage(string m...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Creating new UI elements is for now, quite simple. More complex UI features will be coming later.&lt;br /&gt;
&lt;br /&gt;
== Event Message ==&lt;br /&gt;
Event Message is text that appears on the top left of the screen. Can appear at any time in gameplay and in most menus. Messages will stack, and only a handful will appear at a time.&lt;br /&gt;
&lt;br /&gt;
=== ShowMessage ===&lt;br /&gt;
Displays the message&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;//Shows a simple text message. Will play a sound, and will stack.&lt;br /&gt;
EventMessageInfoUI.ShowMessage(string message);&lt;br /&gt;
&lt;br /&gt;
//Shows a message with the more complex EventMessageUIMessageItem &lt;br /&gt;
EventMessageInfoUI.ShowMessage(EventMessageUIMessageItem message);&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Event Message UI Message Item ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;&lt;br /&gt;
EventMessageUIMessageItem:&lt;br /&gt;
    string text               // The text message &lt;br /&gt;
    bool allowStacking = true // Whether duplicate messages will stack &lt;br /&gt;
    bool playSound = true     // Whether the message will display a sound when it appears&lt;br /&gt;
    bool skipIfVisible        // Whether to not display the message entirely if a duplicate one is visible&lt;br /&gt;
    int stackCount = 1        // How many &#039;stacks&#039; this message counts as (This is uncommonly used)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Alert Message UI ==&lt;br /&gt;
An alert message is a popup that pauses the game, and can appear at any time in gameplay or in any menu.&lt;br /&gt;
&lt;br /&gt;
=== &#039;Ok&#039; Alert ===&lt;br /&gt;
Displays an alert with a title (optional), text, and an ok button. You can hook into the button event. Supports AlertMessageSettings.&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;&lt;br /&gt;
AlertMessageUI.OpenAlertMessage(string title, string message, Action onOk = null, string customOkLabel = null, AlertMessageSettings settings = new AlertMessageSettings())&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cancelable Alert ===&lt;br /&gt;
Displays an alert with a title (optional), text, and a ok + cancel button. You can hook into both button events. Supports AlertMessageSettings.&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;&lt;br /&gt;
AlertMessageUI.OpenCancelableAlertMessage(string title, string message, Action onOk, Action onCancel = null, string customOkLabel = null, string customCancelLabel = null, AlertMessageSettings settings = new AlertMessageSettings())&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== No Buttons Alert ===&lt;br /&gt;
An alert with a title (optional), and text. No buttons. Supports AlertMessageSettings. Meant to be paired with Alert objects.&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;&lt;br /&gt;
AlertMessageUI.OpenNoButtonsAlertMessage(string title, string message, AlertMessageSettings settings = new AlertMessageSettings())&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alert Message Settings ===&lt;br /&gt;
A few settings to modify an alert. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;onTopOfFader:&amp;lt;/u&amp;gt; Makes the alert message appear on top of the fading screen. Useful to display narration popups.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;objects:&amp;lt;/u&amp;gt; Allows you to register Alert Objects&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;&lt;br /&gt;
AlertMessageSettings:&lt;br /&gt;
     bool onTopOfFader&lt;br /&gt;
     List&amp;lt;AlertMessageObject&amp;gt; objects&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Other Methods ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;&lt;br /&gt;
//Closes the current alert if there is one&lt;br /&gt;
void AlertMessageUI.CloseCurrentAlert();&lt;br /&gt;
&lt;br /&gt;
//Returns whether an alert message is open&lt;br /&gt;
bool AlertMessageUI.IsOpen();&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alert Objects ===&lt;br /&gt;
Add additional buttons, toggles, sliders, text input, dropdowns, and more.&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;&lt;br /&gt;
AlertMessageSliderObject:&lt;br /&gt;
        string title&lt;br /&gt;
        float min&lt;br /&gt;
        float max&lt;br /&gt;
        float value&lt;br /&gt;
        bool isInt&lt;br /&gt;
&lt;br /&gt;
AlertMessageToggleObject&lt;br /&gt;
        string title&lt;br /&gt;
        bool value&lt;br /&gt;
&lt;br /&gt;
AlertMessageTextInputObject&lt;br /&gt;
        string title&lt;br /&gt;
        string value&lt;br /&gt;
        int characterLimit&lt;br /&gt;
        Func&amp;lt;string, bool&amp;gt; Validate&lt;br /&gt;
&lt;br /&gt;
AlertMessageDropdownObject&lt;br /&gt;
        string title&lt;br /&gt;
        int value&lt;br /&gt;
        List&amp;lt;TMP_Dropdown.OptionData&amp;gt; options&lt;br /&gt;
&lt;br /&gt;
AlertMessageButtonObject&lt;br /&gt;
        string title&lt;br /&gt;
        string label&lt;br /&gt;
        Action onClick&lt;br /&gt;
&lt;br /&gt;
AlertMessageImageObject&lt;br /&gt;
        string title&lt;br /&gt;
        Sprite texture&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Modding_Support_Status&amp;diff=61</id>
		<title>Modding Support Status</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Modding_Support_Status&amp;diff=61"/>
		<updated>2026-07-21T21:03:19Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Since the game isn&#039;t even out, naturally modding is in a VERY early state. Practically everything could change, so please don&#039;t get too attached to your mods at this stage.&lt;br /&gt;
&lt;br /&gt;
Modding support will be broken into a few stages. The first stage, Pre-EA, is focused on just getting the bare minimum fully working and with high ease of use ASSUMING you know how to code.&lt;br /&gt;
&lt;br /&gt;
After EA we will continue to flesh out modding features, with a focus on adding visual tools to make creating mods easier and faster, with less digging through code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is a overview of features and their statuses. This is by no means a comprehensive list, and anything &#039;Under Consideration&#039; is just that: not guaranteed to be added.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Feature&lt;br /&gt;
!Description&lt;br /&gt;
!Status&lt;br /&gt;
|-&lt;br /&gt;
|Core Mod Loading&lt;br /&gt;
|Mod manifest, enabling, disabling&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Mod Saving: Custom Data&lt;br /&gt;
|Serialized and deserialize strings to a save file&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Scriptable Lookup Table Modification&lt;br /&gt;
|Add and modify assets in the lookup table&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Mod Generator&lt;br /&gt;
|Simple tool to get started with a new mod&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Core Mod Asset Importer&lt;br /&gt;
|Core asset importer feature to be used across many importers&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Static Model Importing&lt;br /&gt;
|Importing of static GLTF models&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Texture, Audio Importing&lt;br /&gt;
|Importing of textures and audio files&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Misc Item Importing&lt;br /&gt;
|Importing of simple misc item&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Child Item Importing&lt;br /&gt;
|Importing of child items&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Melee Item Importing&lt;br /&gt;
|Importing of melee items&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Code-Based Quest Support&lt;br /&gt;
|Very clunky quest creation via code&lt;br /&gt;
|COMPLETE, Not documented&lt;br /&gt;
|-&lt;br /&gt;
|Code-Based Dialog Support for Quests&lt;br /&gt;
|Very clunky dialog creation via code.&lt;br /&gt;
|COMPLETE, Not documented&lt;br /&gt;
|-&lt;br /&gt;
|Very basic graph viewer&lt;br /&gt;
|A very basic (and ugly) viewer for your dialog / quest graphs. Is not an editor, as it can only view.&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Item Importer 2.0&lt;br /&gt;
|Currently all items are importing with a very simple importer, with each entry hand picked. This is not ideal. Seems like a much better way to go about it would be to have each item be its own JSON file, and then create a generic scriptable object importer that can overwrite values.&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Blender Rig&lt;br /&gt;
|Ship the blender rig to make it easy to create new armors and clothing.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Armor Item Importing&lt;br /&gt;
|Importing of armor. Will require some way to create ClothingAssets as well, potentially another importer? (This would mean we need a multi pass importer system, *shiver*)&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Simple Modding UI&lt;br /&gt;
|Currently the main way for mods to display UI is through dialog or the Alert system. Both are quite limited.&lt;br /&gt;
The Moddable UI System would allow for new simple UI’s to be introduced, with the ability to create more complex interfaces, such as buttons, data lists, scrollbars, etc. They could support being opened via keybind, through interacting with an object, or some other way.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Lookup Table Tooling&lt;br /&gt;
|&lt;br /&gt;
# Need a way to invalidate lookup table values, whenever a mod refreshes. This can be done via a cache index.&lt;br /&gt;
# Need better tooling to find IDs of assets&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Warn if mods aren&#039;t loaded correctly&lt;br /&gt;
|When loading a save, and the save has a mod enabled that is no longer enabled, it should show a warning.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Mod Settings: JSON&lt;br /&gt;
|Add support for mods to have a json file for settings, to allow the mod users to tweak the mod.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Tool: Position Debugger&lt;br /&gt;
|Little tool that tells you where a position is in the world. Useful to figure out where you want to spawn items.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Remove enum for item slot&lt;br /&gt;
|Currently item slots for characters is an enum. This is not mod friendly.&lt;br /&gt;
It should be ported to a scriptable object.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Mod Dependencies&lt;br /&gt;
|Ensure mods can rely on others.&lt;br /&gt;
Mod dependencies can declare whether they must be loaded before, or any time.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|On Quest Start / Stop Hooks&lt;br /&gt;
|Obviously any logic in a modded quest doesn’t need to be (and really shouldn’t) be part of the graph, but instead be in your code.&lt;br /&gt;
Add hooks to on quest start / stop.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Code-Based Dialog Support without Quests&lt;br /&gt;
|Support injecting dialog into characters without involving a Quest&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Prefab Creator&lt;br /&gt;
|Make a way to create prefabs from within the game tooling. Could potentially support simple VFX creation? This is a rabbit hole, however.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Asset Bundle Importer&lt;br /&gt;
|Add official support to import asset bundles, and to easily be able to reference assets. This is particularly important for VFX + potential complex prefab support.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Unity Tooling&lt;br /&gt;
|Right now I&#039;ve entirely focused on having tooling being within our own pipeline. We could however ship a simple asset bundle exporter, along with some helper scripts.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: Item Editor&lt;br /&gt;
|A visual editor to edit / create items.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: Item List Editor&lt;br /&gt;
|A visual editor to edit / create item lists.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: Full Node Editor&lt;br /&gt;
|A true editor for graphs.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: SpellData / Spell Creation&lt;br /&gt;
|Currently spells can be created via code. (Not documented).&lt;br /&gt;
This tool would allow for spells to be created visually.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: NPC Editor&lt;br /&gt;
|Currently you can edit NPC’s via code.&lt;br /&gt;
This tool would allow you to edit/view NPC data visually.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Patch Mods&lt;br /&gt;
|Mods are designed to be added “on top” of ardenfall’s codebase. This allows for hot reloading, easy disable/enable, and less issues when updates occur. Patch Mods would be a separate type of mod, that would actually overwrite the actual source code of Ardenfall, similar to Harmony. (In fact, we&#039;d use Harmony to do this). This would take more effort to get working, and could break whenever a game update happens, but would allow for &amp;quot;Skyrim Script Extender&amp;quot; sort of modding platforms that the community could build if they desired.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Simple Dialog API&lt;br /&gt;
|Create a way to make a dialog graph SUPER simply, without all the fancy connected stuff.&lt;br /&gt;
Example:&lt;br /&gt;
 &amp;lt;code&amp;gt;CreateTopic(“What’s up?”).AddSpeak(“Nothing Much!”).Run(myMethod).CloseDialog();&amp;lt;/code&amp;gt;&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Mod Settings: Main Menu UI&lt;br /&gt;
|Make mod settings modifiable in the main menu, not just through a json file.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Custom Hair, Beard, Brow support&lt;br /&gt;
|Make it easy to set up new hair, beard, brows in the creation menu.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Custom Skills / Attributes / Traits Support&lt;br /&gt;
|Make it easy to set up new skills, attributes, and traits in the creation menu.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Custom Race Support&lt;br /&gt;
|Make it easy to set up a new character race in the creation menu.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|}&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=60</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=60"/>
		<updated>2026-07-20T04:40: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;
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;
|ScriptableObject&lt;br /&gt;
|Creates a new item based on properties.&lt;br /&gt;
|scriptable_object&lt;br /&gt;
|path: the path to the scriptable object definition 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;
{| class=&amp;quot;wikitable&amp;quot;&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;br /&gt;
&lt;br /&gt;
=== Custom Importers ===&lt;br /&gt;
You can also create your own importers for yourself / others to utilize. &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=Creating_Custom_Items&amp;diff=59</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=59"/>
		<updated>2026-07-20T04:22:40Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &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;
This is how to create a &#039;misc&#039; item, which is an item that can be picked up, sold, etc, but not equipped or anything fancy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Import Model&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First set up a GLTF model that you want to import into your asset manifest.&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
        &amp;quot;assetId&amp;quot;: &amp;quot;AssetExampleMod.KawamokuModel&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;gltf_scene&amp;quot;,&lt;br /&gt;
        &amp;quot;properties&amp;quot; :&lt;br /&gt;
        [&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/kawamoku.gltf&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;u&amp;gt;Item Data&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then create your item data file. You can define whatever values you want, but here lets just override a few.&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;parent&amp;quot;: &amp;quot;misc&amp;quot;,&lt;br /&gt;
    &amp;quot;parameters&amp;quot;: {&lt;br /&gt;
        &amp;quot;itemName&amp;quot;: &amp;quot;Kawamoku Plush&amp;quot;,&lt;br /&gt;
        &amp;quot;pickupVisual&amp;quot;: &amp;quot;AssetExampleMod.KawamokuModel&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Note the &#039;parent&#039; being set to &#039;misc&#039;. You can instead override whatever value you want. You can find an item in the lookup table, copy the guid, and then use that instead, if you want.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Import Item&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next simply import the item in the asset manifest.&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
        &amp;quot;assetId&amp;quot;: &amp;quot;AssetExampleMod.KawamokuItem&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;scriptable_object&amp;quot;,&lt;br /&gt;
        &amp;quot;properties&amp;quot; :&lt;br /&gt;
        [&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;Data/kawamoku_item.json&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        ]&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;u&amp;gt;Test Item&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now use the item debugger to spawn the item! Huzzah!&lt;br /&gt;
&lt;br /&gt;
=== Melee Weapon Example ===&lt;br /&gt;
&amp;lt;u&amp;gt;Import Model&amp;lt;/u&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
        &amp;quot;assetId&amp;quot;: &amp;quot;AssetExampleMod.WeaponExample&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;gltf_scene&amp;quot;,&lt;br /&gt;
        &amp;quot;properties&amp;quot; :&lt;br /&gt;
        [&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/mod_weapon_example.glb&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        ]&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;TODO: Update this example with using the correct shader!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Item Data&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then create your item data file. You can define whatever values you want, but here lets just override a few.&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;parent&amp;quot;: &amp;quot;katana&amp;quot;,&lt;br /&gt;
    &amp;quot;parameters&amp;quot;: {&lt;br /&gt;
        &amp;quot;itemName&amp;quot;: &amp;quot;Modded Katana&amp;quot;,&lt;br /&gt;
        &amp;quot;damage&amp;quot;: 300&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;melee_prefab&amp;quot;: {&lt;br /&gt;
        &amp;quot;model&amp;quot;: &amp;quot;AssetExampleMod.WeaponExample&amp;quot;,&lt;br /&gt;
        &amp;quot;trail_start&amp;quot;: [0, 0, 0],&lt;br /&gt;
        &amp;quot;trail_end&amp;quot;: [0, 2, 0]&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Note the melee_prefab entry defining a trail start and end. This is the vector position of where the &amp;quot;whoosh&amp;quot; trail appears on the weapon.&lt;br /&gt;
&lt;br /&gt;
The parent can be &#039;katana&#039;, &#039;dagger&#039;, &#039;greatsword&#039;, &#039;greataxe&#039;. OR you can reference an existing weapon to create an item based on that.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Import Item&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next simply import the item in the asset manifest.&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
        &amp;quot;assetId&amp;quot;: &amp;quot;AssetExampleMod.WeaponItem&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;scriptable_object&amp;quot;,&lt;br /&gt;
        &amp;quot;properties&amp;quot; :&lt;br /&gt;
        [&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;Data/katana_item.json&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        ]&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;u&amp;gt;Test Item&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now use the item debugger to spawn the item! Huzzah!&lt;br /&gt;
&lt;br /&gt;
Note that when you reload a mod with a weapon, it&#039;ll re-equip the weapon. This is intended.&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=Modding_Support_Status&amp;diff=58</id>
		<title>Modding Support Status</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Modding_Support_Status&amp;diff=58"/>
		<updated>2026-07-20T03:41:25Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Since the game isn&#039;t even out, naturally modding is in a VERY early state. Practically everything could change, so please don&#039;t get too attached to your mods at this stage.&lt;br /&gt;
&lt;br /&gt;
Modding support will be broken into a few stages. The first stage, Pre-EA, is focused on just getting the bare minimum fully working and with high ease of use ASSUMING you know how to code.&lt;br /&gt;
&lt;br /&gt;
After EA we will continue to flesh out modding features, with a focus on adding visual tools to make creating mods easier and faster, with less digging through code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is a overview of features and their statuses. This is by no means a comprehensive list, and anything &#039;Under Consideration&#039; is just that: not guaranteed to be added.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Feature&lt;br /&gt;
!Description&lt;br /&gt;
!Status&lt;br /&gt;
|-&lt;br /&gt;
|Core Mod Loading&lt;br /&gt;
|Mod manifest, enabling, disabling&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Mod Saving: Custom Data&lt;br /&gt;
|Serialized and deserialize strings to a save file&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Scriptable Lookup Table Modification&lt;br /&gt;
|Add and modify assets in the lookup table&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Mod Generator&lt;br /&gt;
|Simple tool to get started with a new mod&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Core Mod Asset Importer&lt;br /&gt;
|Core asset importer feature to be used across many importers&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Static Model Importing&lt;br /&gt;
|Importing of static GLTF models&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Texture, Audio Importing&lt;br /&gt;
|Importing of textures and audio files&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Misc Item Importing&lt;br /&gt;
|Importing of simple misc item&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Child Item Importing&lt;br /&gt;
|Importing of child items&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Melee Item Importing&lt;br /&gt;
|Importing of melee items&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Code-Based Quest Support&lt;br /&gt;
|Very clunky quest creation via code&lt;br /&gt;
|COMPLETE, Not documented&lt;br /&gt;
|-&lt;br /&gt;
|Code-Based Dialog Support for Quests&lt;br /&gt;
|Very clunky dialog creation via code.&lt;br /&gt;
|COMPLETE, Not documented&lt;br /&gt;
|-&lt;br /&gt;
|Very basic graph viewer&lt;br /&gt;
|A very basic (and ugly) viewer for your dialog / quest graphs. Is not an editor, as it can only view.&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Item Importer 2.0&lt;br /&gt;
|Currently all items are importing with a very simple importer, with each entry hand picked. This is not ideal. Seems like a much better way to go about it would be to have each item be its own JSON file, and then create a generic scriptable object importer that can overwrite values.&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Blender Rig&lt;br /&gt;
|Ship the blender rig to make it easy to create new armors and clothing.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Armor Item Importing&lt;br /&gt;
|Importing of armor. Will require some way to create ClothingAssets as well, potentially another importer? (This would mean we need a multi pass importer system, *shiver*)&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Simple Modding UI&lt;br /&gt;
|Currently the main way for mods to display UI is through dialog or the Alert system. Both are quite limited.&lt;br /&gt;
The Moddable UI System would allow for new simple UI’s to be introduced, with the ability to create more complex interfaces, such as buttons, data lists, scrollbars, etc. They could support being opened via keybind, through interacting with an object, or some other way.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Lookup Table Tooling&lt;br /&gt;
|&lt;br /&gt;
# Need a way to invalidate lookup table values, whenever a mod refreshes. This can be done via a cache index.&lt;br /&gt;
# Need better tooling to find IDs of assets&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Warn if mods aren&#039;t loaded correctly&lt;br /&gt;
|When loading a save, and the save has a mod enabled that is no longer enabled, it should show a warning.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Mod Settings: JSON&lt;br /&gt;
|Add support for mods to have a json file for settings, to allow the mod users to tweak the mod.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Tool: Position Debugger&lt;br /&gt;
|Little tool that tells you where a position is in the world. Useful to figure out where you want to spawn items.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Remove enum for item slot&lt;br /&gt;
|Currently item slots for characters is an enum. This is not mod friendly.&lt;br /&gt;
It should be ported to a scriptable object.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Mod Dependencies&lt;br /&gt;
|Ensure mods can rely on others.&lt;br /&gt;
Mod dependencies can declare whether they must be loaded before, or any time.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|On Quest Start / Stop Hooks&lt;br /&gt;
|Obviously any logic in a modded quest doesn’t need to be (and really shouldn’t) be part of the graph, but instead be in your code.&lt;br /&gt;
Add hooks to on quest start / stop.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Code-Based Dialog Support without Quests&lt;br /&gt;
|Support injecting dialog into characters without involving a Quest&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Tool: Item Editor&lt;br /&gt;
|A visual editor to edit / create items.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: Item List Editor&lt;br /&gt;
|A visual editor to edit / create item lists.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: Full Node Editor&lt;br /&gt;
|A true editor for graphs.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: SpellData / Spell Creation&lt;br /&gt;
|Currently spells can be created via code. (Not documented).&lt;br /&gt;
This tool would allow for spells to be created visually.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: NPC Editor&lt;br /&gt;
|Currently you can edit NPC’s via code.&lt;br /&gt;
This tool would allow you to edit/view NPC data visually.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Patch Mods&lt;br /&gt;
|Mods are designed to be added “on top” of ardenfall’s codebase. This allows for hot reloading, easy disable/enable, and less issues when updates occur. Patch Mods would be a separate type of mod, that would actually overwrite the actual source code of Ardenfall, similar to Harmony. (In fact, we&#039;d use Harmony to do this). This would take more effort to get working, and could break whenever a game update happens, but would allow for &amp;quot;Skyrim Script Extender&amp;quot; sort of modding platforms that the community could build if they desired.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Simple Dialog API&lt;br /&gt;
|Create a way to make a dialog graph SUPER simply, without all the fancy connected stuff.&lt;br /&gt;
Example:&lt;br /&gt;
 &amp;lt;code&amp;gt;CreateTopic(“What’s up?”).AddSpeak(“Nothing Much!”).Run(myMethod).CloseDialog();&amp;lt;/code&amp;gt;&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Mod Settings: Main Menu UI&lt;br /&gt;
|Make mod settings modifiable in the main menu, not just through a json file.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Custom Hair, Beard, Brow support&lt;br /&gt;
|Make it easy to set up new hair, beard, brows in the creation menu.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Custom Skills / Attributes / Traits Support&lt;br /&gt;
|Make it easy to set up new skills, attributes, and traits in the creation menu.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Custom Race Support&lt;br /&gt;
|Make it easy to set up a new character race in the creation menu.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Joshcamas</name></author>
	</entry>
	<entry>
		<id>https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=57</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=57"/>
		<updated>2026-07-20T01:13:10Z</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;
This wiki is VERY early in development, and thus API&#039;s will absolutely change. &lt;br /&gt;
&lt;br /&gt;
If you are interested in contributing, join the discord and ask! &lt;br /&gt;
&lt;br /&gt;
See [[Modding Support Status]] to check on what&#039;s supported currently. &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=Modding_Support_Status&amp;diff=56</id>
		<title>Modding Support Status</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Modding_Support_Status&amp;diff=56"/>
		<updated>2026-07-20T01:12:30Z</updated>

		<summary type="html">&lt;p&gt;Joshcamas: Created page with &amp;quot;Since the game isn&amp;#039;t even out, naturally modding is in a VERY early state. Practically everything could change, so please don&amp;#039;t get too attached to your mods at this stage.  Modding support will be broken into a few stages. The first stage, Pre-EA, is focused on just getting the bare minimum fully working and with high ease of use ASSUMING you know how to code.  After EA we will continue to flesh out modding features, with a focus on adding visual tools to make creating...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Since the game isn&#039;t even out, naturally modding is in a VERY early state. Practically everything could change, so please don&#039;t get too attached to your mods at this stage.&lt;br /&gt;
&lt;br /&gt;
Modding support will be broken into a few stages. The first stage, Pre-EA, is focused on just getting the bare minimum fully working and with high ease of use ASSUMING you know how to code.&lt;br /&gt;
&lt;br /&gt;
After EA we will continue to flesh out modding features, with a focus on adding visual tools to make creating mods easier and faster, with less digging through code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is a overview of features and their statuses. This is by no means a comprehensive list, and anything &#039;Under Consideration&#039; is just that: not guaranteed to be added.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Feature&lt;br /&gt;
!Description&lt;br /&gt;
!Status&lt;br /&gt;
|-&lt;br /&gt;
|Core Mod Loading&lt;br /&gt;
|Mod manifest, enabling, disabling&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Mod Saving: Custom Data&lt;br /&gt;
|Serialized and deserialize strings to a save file&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Scriptable Lookup Table Modification&lt;br /&gt;
|Add and modify assets in the lookup table&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Mod Generator&lt;br /&gt;
|Simple tool to get started with a new mod&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Core Mod Asset Importer&lt;br /&gt;
|Core asset importer feature to be used across many importers&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Static Model Importing&lt;br /&gt;
|Importing of static GLTF models&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Texture, Audio Importing&lt;br /&gt;
|Importing of textures and audio files&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Misc Item Importing&lt;br /&gt;
|Importing of simple misc item&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Child Item Importing&lt;br /&gt;
|Importing of child items&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Melee Item Importing&lt;br /&gt;
|Importing of melee items&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Code-Based Quest Support&lt;br /&gt;
|Very clunky quest creation via code&lt;br /&gt;
|COMPLETE, Not documented&lt;br /&gt;
|-&lt;br /&gt;
|Code-Based Dialog Support for Quests&lt;br /&gt;
|Very clunky dialog creation via code.&lt;br /&gt;
|COMPLETE, Not documented&lt;br /&gt;
|-&lt;br /&gt;
|Very basic graph viewer&lt;br /&gt;
|A very basic (and ugly) viewer for your dialog / quest graphs. Is not an editor, as it can only view.&lt;br /&gt;
|COMPLETE&lt;br /&gt;
|-&lt;br /&gt;
|Blender Rig&lt;br /&gt;
|Ship the blender rig to make it easy to create new armors and clothing.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Armor Item Importing&lt;br /&gt;
|Importing of armor. Will require some way to create ClothingAssets as well, potentially another importer? (This would mean we need a multi pass importer system, *shiver*)&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Item Importer 2.0&lt;br /&gt;
|Currently all items are importing with a very simple importer, with each entry hand picked. This is not ideal. Seems like a much better way to go about it would be to have each item be its own JSON file, and then create a generic scriptable object importer that can overwrite values.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Simple Modding UI&lt;br /&gt;
|Currently the main way for mods to display UI is through dialog or the Alert system. Both are quite limited.&lt;br /&gt;
The Moddable UI System would allow for new simple UI’s to be introduced, with the ability to create more complex interfaces, such as buttons, data lists, scrollbars, etc. They could support being opened via keybind, through interacting with an object, or some other way.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Lookup Table Tooling&lt;br /&gt;
|&lt;br /&gt;
# Need a way to invalidate lookup table values, whenever a mod refreshes. This can be done via a cache index.&lt;br /&gt;
# Need better tooling to find IDs of assets&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Warn if mods aren&#039;t loaded correctly&lt;br /&gt;
|When loading a save, and the save has a mod enabled that is no longer enabled, it should show a warning.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Mod Settings: JSON&lt;br /&gt;
|Add support for mods to have a json file for settings, to allow the mod users to tweak the mod.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Tool: Position Debugger&lt;br /&gt;
|Little tool that tells you where a position is in the world. Useful to figure out where you want to spawn items.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Remove enum for item slot&lt;br /&gt;
|Currently item slots for characters is an enum. This is not mod friendly.&lt;br /&gt;
It should be ported to a scriptable object.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Mod Dependencies&lt;br /&gt;
|Ensure mods can rely on others.&lt;br /&gt;
Mod dependencies can declare whether they must be loaded before, or any time.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|On Quest Start / Stop Hooks&lt;br /&gt;
|Obviously any logic in a modded quest doesn’t need to be (and really shouldn’t) be part of the graph, but instead be in your code.&lt;br /&gt;
Add hooks to on quest start / stop.&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Code-Based Dialog Support without Quests&lt;br /&gt;
|Support injecting dialog into characters without involving a Quest&lt;br /&gt;
|PLANNED&lt;br /&gt;
|-&lt;br /&gt;
|Tool: Item Editor&lt;br /&gt;
|A visual editor to edit / create items.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: Item List Editor&lt;br /&gt;
|A visual editor to edit / create item lists.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: Full Node Editor&lt;br /&gt;
|A true editor for graphs.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: SpellData / Spell Creation&lt;br /&gt;
|Currently spells can be created via code. (Not documented).&lt;br /&gt;
This tool would allow for spells to be created visually.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Tool: NPC Editor&lt;br /&gt;
|Currently you can edit NPC’s via code.&lt;br /&gt;
This tool would allow you to edit/view NPC data visually.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Patch Mods&lt;br /&gt;
|Mods are designed to be added “on top” of ardenfall’s codebase. This allows for hot reloading, easy disable/enable, and less issues when updates occur. Patch Mods would be a separate type of mod, that would actually overwrite the actual source code of Ardenfall, similar to Harmony. (In fact, we&#039;d use Harmony to do this). This would take more effort to get working, and could break whenever a game update happens, but would allow for &amp;quot;Skyrim Script Extender&amp;quot; sort of modding platforms that the community could build if they desired.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Simple Dialog API&lt;br /&gt;
|Create a way to make a dialog graph SUPER simply, without all the fancy connected stuff.&lt;br /&gt;
Example:&lt;br /&gt;
 &amp;lt;code&amp;gt;CreateTopic(“What’s up?”).AddSpeak(“Nothing Much!”).Run(myMethod).CloseDialog();&amp;lt;/code&amp;gt;&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Mod Settings: Main Menu UI&lt;br /&gt;
|Make mod settings modifiable in the main menu, not just through a json file.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Custom Hair, Beard, Brow support&lt;br /&gt;
|Make it easy to set up new hair, beard, brows in the creation menu.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Custom Skills / Attributes / Traits Support&lt;br /&gt;
|Make it easy to set up new skills, attributes, and traits in the creation menu.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|-&lt;br /&gt;
|Custom Race Support&lt;br /&gt;
|Make it easy to set up a new character race in the creation menu.&lt;br /&gt;
|UNDER CONSIDERATION&lt;br /&gt;
|}&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=55</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=55"/>
		<updated>2026-07-20T00:50:00Z</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;
|Item&lt;br /&gt;
|Creates a new item based on properties.&lt;br /&gt;
|item&lt;br /&gt;
|(See documentation)&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;
&#039;&#039;&#039;Item&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Creates a new item in a few different ways.&amp;lt;u&amp;gt;Properties (Common)&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;
|item_type&lt;br /&gt;
|NO&lt;br /&gt;
| &amp;quot;child&amp;quot;&lt;br /&gt;
|The item importer type. Supports:&lt;br /&gt;
&amp;quot;child&amp;quot;, &amp;quot;misc&amp;quot;, &amp;quot;melee&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|name&lt;br /&gt;
|YES&lt;br /&gt;
| -&lt;br /&gt;
|The visual name of the item. Will also determine the internal name used for searching via the item search tool.&lt;br /&gt;
|-&lt;br /&gt;
|model&lt;br /&gt;
|YES&lt;br /&gt;
| -&lt;br /&gt;
|The mod asset id for the model.&lt;br /&gt;
|-&lt;br /&gt;
|value&lt;br /&gt;
|NO&lt;br /&gt;
|0&lt;br /&gt;
|The gold value of the item&lt;br /&gt;
|-&lt;br /&gt;
|weight&lt;br /&gt;
|NO&lt;br /&gt;
|0&lt;br /&gt;
|The weight of the item&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;u&amp;gt;Properties (Child Item Type)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The child item type simply means it will create an item based off an existing item ID in the lookup table. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Property&lt;br /&gt;
!Required&lt;br /&gt;
!Default&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|parent&lt;br /&gt;
|YES&lt;br /&gt;
| -&lt;br /&gt;
|The item id in the lookup table to base this item off of. Example: the misc item&#039;s lookup ID is &amp;quot;f7e839cb08435be4d96f3766500416e3.11400000&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;u&amp;gt;Properties (Misc Item Type)&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The misc item type is a fast way to create a miscellaneous item. These items have no ability to equip, but do have a value, weight, etc.  There are no unique properties for the misc item type.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Property&lt;br /&gt;
!Required&lt;br /&gt;
!Default&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|}&amp;lt;u&amp;gt;Properties (Melee Item Type)&amp;lt;/u&amp;gt;The melee item type is the most complex item to import, due to having several special values to determine damage and &#039;whoosh&#039; visual points.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Property&lt;br /&gt;
!Required&lt;br /&gt;
!Default&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|weapon_type&lt;br /&gt;
|YES&lt;br /&gt;
| -&lt;br /&gt;
|The type of weapon to create. Can be katana, greatsword, greataxe, and dagger.&lt;br /&gt;
|-&lt;br /&gt;
|trail_start&lt;br /&gt;
|YES&lt;br /&gt;
| -&lt;br /&gt;
|The local vector of where the trail starts on the weapon. In the format of (x,y,z).&lt;br /&gt;
|-&lt;br /&gt;
|trail_end&lt;br /&gt;
|YES&lt;br /&gt;
| -&lt;br /&gt;
|The local vector of where the trail ends on the weapon. In the format of (x,y,z).&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;br /&gt;
&lt;br /&gt;
=== Custom Importers ===&lt;br /&gt;
You can also create your own importers for yourself / others to utilize. &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=Custom_Asset_Importing&amp;diff=54</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=54"/>
		<updated>2026-07-15T23:49:30Z</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;br /&gt;
&lt;br /&gt;
=== Custom Importers ===&lt;br /&gt;
You can also create your own importers for yourself / others to utilize. &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=Mod_Scripting&amp;diff=53</id>
		<title>Mod Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Mod_Scripting&amp;diff=53"/>
		<updated>2026-06-18T02:38:54Z</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;
You can add your own mod debuggers that hooks into the [[Game Debugger]].&lt;br /&gt;
&lt;br /&gt;
It uses [https://github.com/ocornut/imgui Dear IMGUI] with the unity wrapper [https://github.com/psydack/uimgui UImgui].&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;
public class ExampleDebugMod : ModRoot, IDebugMod&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;
     &lt;br /&gt;
   public override void Uninitialize()&lt;br /&gt;
   {&lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
   void IDebugMod.RenderDebug()&lt;br /&gt;
   {&lt;br /&gt;
      ImGui.Text($&amp;quot;Some Text”);&lt;br /&gt;
&lt;br /&gt;
      if (ImGui.Button(&amp;quot;Do Something&amp;quot;))&lt;br /&gt;
      {      &lt;br /&gt;
            //Do cool stuff&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;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=52</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.ardenfall.com:443/index.php?title=Main_Page&amp;diff=52"/>
		<updated>2026-06-17T18:31: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;
This wiki is VERY early in development, and thus API&#039;s will absolutely change. &lt;br /&gt;
&lt;br /&gt;
If you are interested in contributing, join the discord and ask! &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=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>
</feed>