Construct 3 suggestions & ideas

Suggest and vote on ideas for Construct 3! Please note this is only one aspect of planning. We do not guarantee any features here will be implemented, even if they are top-voted ideas. The aim is just to collect feedback. Remember to search for existing submissions before adding an idea, describe your ideas as comprehensively as possible, and vote for plausible ideas that are well thought out. Please see our full guidelines on suggesting features.

Spreadsheet Data Tables and an easy way to call upon data

I know we have the array editor and we have JSON and XML.


However, for certain use cases there are two big shortcomings to both methods: either it requires a lot of code and probably inefficient ways to call upon data in an array without targeting a specific index (for each, compare at xy) OR it is just simply very convoluted to handle (JSON).


Let me explain with my perspective:

I am developing a dialogue heavy game with hundreds of lines of text. I do these already in two languages and have a potential publisher who wishes to add more. Now, when i use JSON it will be an absolute nightmare to extract and re-import all the files to bring them into a shape that a translator can work with and that has the least amount of error. Plus i am not just calling lines of text but also other functions like animations that play during a line or something similiar.

I also built a system with the visual array editor since the spreadsheet workflow makes it super easy to organize my data and i can even do that in Excel or Google Sheets and copy paste it to Construct. However, there's only an "IndexOf" function for the X-Axis but obviously, the way my data is structured is kinda like this:


dialogue_id

german

english

portrait_animation

start

hallo!

hello!

default

middle

wie geht's?

how are you?

smile

end

tschüss!

bye!

sad


This is a pretty simplified example but i hope it gets the point across and also why it's difficult to handle this with the Array add-on and even worse to build and keep track of with JSON (the game is pretty long).


There HAS been the perfect solution in the C2 days via a plugin by rex, that used CSV data to call upon cells directly (see attachement). This was so easy to use and convenient. Instead of Looping through arrays, which sometimes can cause delays as well if the array is pretty big, you simply had the advantage of a GetPath like function of the JSON system. The best of both worlds and, in the spirit of Construct, VERY user friendly, easy to understand and to use especially for non-programmers like me.


In this case, to call upon the first line of the english dialogue above all i had to enter was CSV.At("start","english"). Obviously, this made it very easy to call stuff by using variables and if you want to add a language, all you do is just add another column and another variable and you're done.

I don't know what the best implementation would be but of course it would be awesome, if the Visual Table Editor of Construct could just be made more useful by either adding functions like this to the Array Plugin or have a completely new plugin called "Tables" or something like that.


Here's a link to the original rex plugin for C2:

https://c2rexplugins.weebly.com/rex_csv.html


And here is a repository:

https://github.com/erenertugrul/construct-plugins/tree/master/ported_plugins/plugins/rex_csv


Why not just use this add-on? Well, first of all the developer is no longer active and since i'm working on a commercial project i cannot rely on add-ons on which i cannot count on being developed. Secondly, i think the visual array editor could already bring us half way there and all that's needed is a few additional functionalities.


I am convinced, a feature like that would solve so many headaches and make data handling easier for a lot of new developers and old ones alike. Thanks for your consideration!


-Joel

  • Guest
  • Apr 15 2021
  • No status
  • Attach files
  • Guest commented
    18 Apr 01:59pm

    Thanks to the help of a community member i was able to set it up with an array being parsed into a dictionary as you proposed. I still think my proposition would be a very nice quality of life feature, that could save many headaches and code but I have no idea how difficult it would be to implement and it's understandable, if it's not high on your priority list right now ;)


    Still, i think it would be an awesome addition for super easy data handling for non-programmers like me... perhaps one day :D

  • Guest commented
    17 Apr 01:22pm

    Or is that just in the dictionary editor? Sorry, i just saw a forum post recently but maybe i'm mixing something up.

  • Guest commented
    17 Apr 01:22pm

    Hmm that might be an idea however dictionaries have a limit of 1000 rows and i'm worried that i'll probably have more data than that in a very short amount of time :D

  • Admin
    Ashley Gullen commented
    17 Apr 10:47am

    Well, you've pointed out another good idea - you could just load the array on startup, loop every cell, and dump it in to a Dictionary object with keys like "row.column". Then you can use an expression like Dictionary.Get("start.english"). That gives you fast lookups (since dictionary lookups are efficient), you get to keep working with an array if that's what you prefer, and no new Construct features are necessary as it's all already still possible.

  • Guest commented
    16 Apr 11:35am

    Hi Ashley


    Thank you for your response. However, i have to respectfully disagree about both the human readability and the ease of use when it comes to handling these files. I agree that probably looping through an array all the time has more of a performance overhead than just pointing to a path in a JSON.


    I really don't insist on arrays or anything, for me and many others it's just mainly about the user experience and convenience of editing a spreadsheet vs. the trouble of editing JSON scripts which in large project i feel are much MUCH harder to do. Again, if it's simply a matter of adding a column it's super nice vs. duplicating a script file, going through everything and potentially having caused several syntax errors on the way.

    This, of course, comes from a purely non-coder perspective.

    I wonder though, if there's just simply a way of feeding a file from the Array editor into a JSON? That would probably solve the problem. Maybe we could use tags in the header description of the sheet to describe how it's nested and arrays etc.

    I feel this would really simplify a lot of things especially for non-coders which Construct is aimed at. I agree that JSON's are very cool to store and call upon all kinds of data but in the context of multi-language and lots of text it's just a nightmare to handle unfortunately.

  • Admin
    Ashley Gullen commented
    16 Apr 11:01am

    I would recommend using the JSON object with normal .json files for localization, with one file per language. Arrays are somewhat unweildly in comparison and have a higher performance overhead in large files. We use JSON files to localize Construct 3 itself and it works well. JSON lets you logically organise all your terms by keys and sub-keys. You can easily access translations with expressions like JSON.Get("title.main-menu.start-game"). These lookups are more efficient than array lookups, especially in a large array file. You also get a relatively human-readable file format that you can pass on to translators to edit in plaintext. So then you can just swap an en-US.json language file for say a de-DE.json language file and then everything appears in German. All these features are already supported. I don't think it's worth adding features to make translations with arrays easier, since they are slower, harder to edit, don't provide any kind of categorisation, and don't provide as clear a context for each term.

  • Guest commented
    15 Apr 09:07pm

    Maybe long story short:


    Implement Indexof for the Y axis as well so we can point to specific data cells inside an array from its content and not its index :D (see attached image how it was done in csv addon).

  • +1