Modding

This page is about Mod Development for Amazing Cultivation Simulator. For downloading and using existing mods, see Mods.
== Mod Development ==
In Amazing Cultivation Simulator, mods are implemented as a folder containing an info.json file, and the content related files.
* [Amazing Cultivation Simulator Install Directory]/Mods/Example contains an example mod, which can be used as an example of what can be done.
Further information can be found within [Amazing Cultivation Simulator Install Directory]/Mods/Readme_EN.txt as well as any of the other documents found within the same folder. More information about modding can be found at:
* Script API website at http://api.gsqstudio.com
* Discord channels dedicated to modding (#mods-general-chat, #mod-dev-room and #mod-bug-reports)
* External modding guide on Github by iguana
* Wiki Modding Tutorials
** Creating a Mod
If the previous doesn't provide an answer, look into Code Diving.
== Introduction to Mod Development ==
In general terms, the complexity of mod development goes something like:
*Realms Palace Content Editor usage (creating basic content with the ingame editor)
*MODModifier (runtime editing)
*XML Files (simple mods utilizing Definition changes, new Definitions and other text based content files)
*Existing Mods (editing an existing mod, no matter the tools used)
*Console (using the ingame console for debugging, runtime editing, and script testing or creation)
*API Website (more advanced script creation)
*C# dll disassembly (Code Diving and Harmony Patches)
in order of "approximate difficulty to approach, as a new modder". A good start though, is to read the <ACS Install Directory>/Mods/Readme_EN.txt
== Modding ==
Modding can be considered any way of modifying the game, in a way that it wouldn't normally behave. To make a new and good experience for everyone. (since ACS is not a multiplayer game per se, "hacking" which can ruin other people's enjoyment of the game is less of a consideration)
The smallest of these tend to be changing the display pictures of characters to out-of-game images. And can even be as simple as switching out the picture files.
The most "complicated" stuff can be to edit how the compiled ("hard coded" / C#) parts of the game work.
Then there's the stuff in between.
This page will hopefully become the centralized hub (wiki-side) to help with that.
If more help is needed, check out the Discord channels dedicated to modding (#mods-general-chat, and #mod-dev-room)
==Realms Palace Content Editor==
The Content Editor lets you create custom characters (called Reincarnators). But also items, and blueprints.
This can be seen as the first step to trying out something new.
It's already built in to the game, and has full UI. All you do is click stuff, and try it out :)
==MODModifier==
MODModifier (Mod) is a quick and (relatively) easy to use UI that lets you play with some parts of the game.
It's like a full admin system .
==XML Files==
The XML Files are human-readable files that contain a lot of the surface data of the game.
They are mentioned in <ACS Install Directory>/Mods/Readme_EN.txt , and refer to all the directories inside themselves, as branching off of the <ACS Install Directory>
ie: Talismans are in "Settings\Practice\Spell\", ie: <ACS Install Directory>/Settings/Practice/Spell/Spell.xml
Another place to look for these is <ACS Install Directory>/Settings/Language/OfficialEnglish (/Settings)
Where you can look up the in-game display names for things.
===Naming===
In-code names on other pages usually refer to these, and I think are accessed from the lua.
==Existing Mods==
===Preamble about translating ===
Existing mods can also be referenced for code.
Though it seems that people have done translations of mods previously without asking permission of the original mod creator, and upset them. 
The official developers then stepped in to be a bridge between the original modders, and translators.
This is also visible at the top of <ACS Install Directory>/Mods/Readme_EN.txt
=== Example Mod===
The game comes with an already created "Example" Mod in its Mods folder. You can use this to try out adding assets, or to look at the code.
===Other People's Mods===
====Mod Folders====
*<ACS Install Directory>/Mods/<Mod Name>
*steamapps/workshop/content/955900/<Mod Workshop Id>
The first one being the game's own one. And the second being steam specific. The reason it's that weird number, is that's Amazing Cultivation Simulator's game Id in the Steam Store.
In case you have multiple Steam game install directiories, this steamapps is the same one where the game is installed.
==Console ==
The in-game console uses Lua coding. 
It's what the mods for this game get access to.
You need either know, or be ready to learn Lua (a scripting language) to get this far.
==C# Website==
Mentioned in the top of <ACS Install Directory>/Mods/Readme_EN.txt
Script API：http://api.gsqstudio.com
This is (as far as I can tell) the interface between the Lua, and the C# code. This is useful for when working with the console, or making mods, to see what you have access to.
==C# DLLs==
If you want to go further in figuring out exactly how or why the game does something. 
Dynamic Link Libraries, which are machine bytecode can be "disassembled" in to more human readable forms. Given that Amazing Cultivation Simulator is a Unity game using "Mono" (as opposed to il2cpp), there are a lot of pre existing tools that let us do that.
Example tools
* dnspy 
* IDA, 
* Ghidra.
For injections, the community's preferred method is usually Harmony Patching, which can be handled by yourself like YaogUI, or by using ModLoaderLite (Mod) as a dependency, like Elysium (Mod), You can also use BepInEx, and RunTimeUnityEditor, orMelonLoader. 
Using UnityExplorer is a powerful and quick way to access parts of the game. Even hook in to functions, and mock up your own code that would modify them.
Category:Modding