Page 1 of 5

Importing articy draft strips

Posted: Sun Feb 25, 2018 12:58 am
by diviocity
Hi there,

Are there any plans to enable converting strip properties from articy draft into Dialogue System? Our current data infrastructure heavily relies on their use in our project.

Thanks!

Re: Importing articy draft strips

Posted: Sun Feb 25, 2018 8:52 am
by Tony Li
Hi,

I can look into that. How are you using strip properties right now? If you can provide any screenshots to accompany text descriptions, that would be helpful, too.

Re: Importing articy draft strips

Posted: Mon Feb 26, 2018 4:51 pm
by diviocity
Hi Tony,

We have strips in several places and they are a vital part of our game’s data currently. Here is just one example to give you an idea.

Combat actions are attacks/skills in battle. Each action may apply or remove several different status effects such as “Poison”, “Mute”, etc. So, our Action feature has a strip of “status processing” entities, which are separate objects that contain 1) the status effect to apply/remove, 2) is this apply or remove? 3) percent chance that it will work. Each action must have the flexibility of referring to any # of these, hence a strip is the best logical choice. We had discussed making just 10 or so slots to work around it, like StatusProc1, StatusProc2, StatusProc3, … but this is VERY ugly and I’d really not like to code this way.

There are other strips we use but this one should show you our rationale for using them. Here are some screenshots to visualize this better:

Image
Image

If you have any workarounds or ideas to achieve getting this kind of data into Dialogue System somehow, I’m all ears. Thanks!

Re: Importing articy draft strips

Posted: Mon Feb 26, 2018 10:35 pm
by Tony Li
How would you like the strips to be represented in Unity? Elements in the dialogue database's Item table, perhaps? Or something else?

Re: Importing articy draft strips

Posted: Tue Feb 27, 2018 9:46 pm
by diviocity
Hi Tony,

How are you handling slots currently? (I haven’t actually looked extensively into that) I would think it should be as easy as making a nested lua table (a table within the table) to represent a “list” of slots, or whatever the slot items turn into in the table. As far as how to render this in Unity’s GUI when importing Articy data, I am not entirely sure but you are already rendering lists and sublists, so hopefully not too bad.

Re: Importing articy draft strips

Posted: Tue Feb 27, 2018 9:57 pm
by Tony Li
Hi,

Slots are converted as strings. You can specify whether the string is the slot content's DisplayName or internal articy ID.

Thanks for the info. I'll give some thought to this. Lua is only used at runtime. At design time, the data is in a dialogue database asset, which doesn't support arbitrarily-nested tables. (The format is borrowed from Chat Mapper, which is another product similar to articy.) I think the solution may be to store each strip as a string in the dialogue database that gets expanded to a nested table in Lua at runtime.

Re: Importing articy draft strips

Posted: Wed Feb 28, 2018 12:05 am
by diviocity
Thanks for the quick response!

That sounds like a great solution. Can we expect this feature to show up in a future version of the plugin?

Thanks again, really appreciate it! :D

Re: Importing articy draft strips

Posted: Wed Feb 28, 2018 10:25 am
by Tony Li
Yes. I'll try to get it into the next patch version so you can test it out and request any changes before the full release.

Re: Importing articy draft strips

Posted: Wed Feb 28, 2018 4:01 pm
by diviocity
That's terrific! Thank you for the quick intake - it's greatly appreciated.

I'll look forward to testing the next patch. This feature will greatly extend how we plan to utilize Dialogue System in our project and simplify how we import and use our data.

Re: Importing articy draft strips

Posted: Sun Mar 11, 2018 10:20 pm
by Tony Li
Hi,

The customer download page now has a beta version that converts articy strips. They're converted as text fields with the text "SUBTABLE__" added to the front of the field title. The content of the text field is a semicolon-separate list of Articy Ids, such as:

Code: Select all

0x0100000000000260;0x0100000000000264;0x0100000000000B6D
At runtime, you can convert all such fields into Lua subtables by calling the method below. The subtable field's title will not have the "SUBTABLE__" prefix.

Code: Select all

PixelCrushers.DialogueSystem.Articy.ArticyTools.InitializeLuaSubtables();
To get the values of the subtable, which will in turn be elements in the Actor[] or Item[] table, use DialogueLua.GetActorField or DialogueLua.GetItemField:

Code: Select all

var purifyingSnaresProcessing = DialogueLua.GetItemField("Purifying Snares", "StatusProcessing").AsTable;
Here's a test script that I used:

Code: Select all

using UnityEngine;
using PixelCrushers.DialogueSystem;
using PixelCrushers.DialogueSystem.Articy;

public class ArticySubtableTest : MonoBehaviour
{
    void Start()
    {
        // Turn items' subtable text fields into actual subtables:
        ArticyTools.InitializeLuaSubtables();

        // Text the StatusProcessing subtable:
        var statusProcessing = DialogueLua.GetItemField("Purifying Snares", "StatusProcessing").AsTable;
        foreach (var stripElement in statusProcessing.Values)
        {
            var effect = stripElement as LuaTableWrapper;
            Debug.Log(effect["Name"] + ": %chance=" + effect["PercentChance"] + " apply=" + effect["StatusEffectToApply"]);
        }
    }
}