AC is a game changer as it is, just a robust and awesome framework.
Still, sometimes it does stonewall me, and I'm having trouble reconciliating it with some AI assets I'm using. (My C# is admittedly mediocre.)
Chris, how about setting up a Patreon so us AC fans could further fund the project on a monthly basis? That may or may not give some incentive to add new assets to the list of 3rd party integration over time.
Comments
If you have an issue with AC, please post a thread with details in the normal channels. However when it comes to AI, there's no end to the combinations - not just the assets involved, but also the ways in which they can be incorporated.
Therefore, AC's approach is to make the API as open as possible, with the scripting guide, custom events, tools to disable individual systems, and override character motion.
Improvements to aid integration scripts can be considered, and advice given on hooking into AC's codebase, but if you're looking to make a game with mechanics outside AC's scope (i.e. advanced AI) then some custom scripting will inevitably be necessary.
Absolutely agreed. That said, there are no more than two key, surviving AI frameworks in the current asset store (ICE and Emerald), and I've only tried to hook up AC with Emerald AI.
Unsurprisingly, they do not "see" one another. It's at its most spectacular during conversations, where AC and Emerald both do their own things on their own, so the NPC acts rather weird. It's a huge bite for my C# knowledge, but I'm trying.
The "best practice" way of dealing with such cases is to rely on custom events, which are a way of adding your own code snippets when AC performs common tasks. A tutorial can be found here, and more detail can be found in the Manual.
In the specific case of conversations, you may want to begin by looking at the OnEnterGameState, which is called whenever AC changes it's "Game State" to either Normal (regular gameplay), Cutscene, DialogOptions (conversation options are displayed) and Paused:
The following script, then, allows you to add in your own code when entering / leaving the DialogOptions state:
http://pasteall.org/873099/csharp
To relinquish an AC character's movement to another asset, you just need to set it's Motion control field to Manual. This can be done in script with:
myCharacter.motionControl = MotionControl.Manual;