Search Unity

Game Data Editor: The Visual Data Editor [Released]

Discussion in 'Assets and Asset Store' started by Celestipoo, Jun 6, 2014.

  1. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    Vector3 and Vector4 are already supported. I will add the others to the list. Thanks :)
     
    akhil96 likes this.
  2. mensch-mueller

    mensch-mueller

    Joined:
    Nov 25, 2014
    Posts:
    156
    Hi,
    Can you add gameObject to the list?

    Thanks
    Michael
     
  3. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    Hi Michael, yup!
     
  4. Fera_KM

    Fera_KM

    Joined:
    Nov 7, 2013
    Posts:
    307
    Did anything change to the way it reads local spreadsheets? I just updated and suddenly I can't get anything useful out of my spreadsheet.
     
  5. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    Yes, a slight spreadsheet format change to accommodate ignoring rows and columns. You'll need to add two tokens to tell GDE where your variable name and types are: http://gamedataeditor.com/docs/spreadsheet-format.html
     
  6. Fera_KM

    Fera_KM

    Joined:
    Nov 7, 2013
    Posts:
    307
    Ah, okay, I see, thanks.
    I now need to include both
    GDE_FIELD_NAMES
    GDE_FIELD_TYPES

    or else it will not read any row as either name nor type, where as before it would guess or pick the two first rows.
     
  7. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    Exactly. A little more flexible, since you don't have to start at the first two rows, but you need to tell GDE where to start reading :)
     
  8. MrAdventure

    MrAdventure

    Joined:
    Aug 22, 2012
    Posts:
    28
    Second and third for Sprite, GameObject, etc. Thanks!
     
    Celestipoo likes this.
  9. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    For those of you waiting for spreadsheet export, its coming :) I'm working on a new asset that will have spreadsheet import/export (a localization editor). When that feature is done and tested, I will roll it into GDE.
     
    Gekigengar likes this.
  10. TBruce

    TBruce

    Joined:
    Jan 18, 2015
    Posts:
    86
    Hi,
    Unity layout got messed up recently and would not load Unity without resetting the layout. Now the GDE right click context menu is missing. I have tried reinstalling GDE but the problem persists. Please help. Thank you!
     
  11. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    It's not there at all? You should at least see the menu item disabled if you haven't selected a valid target (TextAsset). Can you open up GameDataEditor/Editor/GDEMenu.cs and verify that the context menu methods are still there? They will be at the bottom of that class.
     
  12. TBruce

    TBruce

    Joined:
    Jan 18, 2015
    Posts:
    86
    Yes, it is there. I think the problem is because there is an error. I am getting the following error in Unity:
    Assets/GameDataEditor/Editor/CodeGen/GDECodeGenWindow.cs(7,66): error CS0117: `GDEManagerWindowBase' does not contain a definition for `rootMenuLocation'

    I did a search and could not find any definition for 'rootMenuLocation' anywhere in the code.
     
  13. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    Ok, it looks like you updated and some old classes are still sticking around. Try this:
    1. Back up your data files outside of the GameDataEditor folder.
    2. Delete the entire GameDataEditor folder.
    3. In the asset store, make sure GDE is updated to the latest version. There should be a "Download" or "Update" button, click it.
    4. Import GDE again.

    Let me know if you still see any issues.
     
  14. TBruce

    TBruce

    Joined:
    Jan 18, 2015
    Posts:
    86
    Ok, so apparently all my source file in the CustomExtensions forder were deleted. After resoring that folder from a backup my IGDEData class can not be found.
     
  15. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    Oh, you can regenerate those classes again. But IGDEData should be restored if you import again. Sorry for all the trouble.
     
  16. TBruce

    TBruce

    Joined:
    Jan 18, 2015
    Posts:
    86
    Ok, I have it fixed now. I have a define in my code for using GDE. I removed the define and everything GDE was added back to the context menu. Adding the define back and everything worked.
    BTW, what started all this was when I went to define data in the GDE. GDE data file was looking for the file in the default location, but I moved that in my preferences several weeks ago and my game has been working fine up until I whent to define data. It kept giving me an error and I could not close the window to fix the location issue, I had to close Unity. Upon reopening Unity I got the layout error and had to reset the layout.
     
  17. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    Ok, I will try to reproduce this and get it fixed. Thanks for the info. For now, you can right click on your data file within the project and go to Game Data Editor => Load in the right click menu before opening any of the GDE Editor windows.
     
    Last edited: Apr 15, 2015
  18. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    For those of you updating to v2.1 and see this error in the console:

    Screen Shot 2015-04-15 at 2.36.14 AM.png


    There are two files you need to delete:
    GameDataEditor/Editor/CodeGen/GDECodeGenWindow.cs
    GameDataEditor/Editor/GDELinks.cs

    Some code was moved around and those files we renamed and/or removed from GDE v2.1. Delete them and everything will be working again. Sorry about that.
     
  19. TBruce

    TBruce

    Joined:
    Jan 18, 2015
    Posts:
    86
    Thanks for the quick fix.
     
    Celestipoo likes this.
  20. Mr-L

    Mr-L

    Joined:
    Jun 23, 2014
    Posts:
    3
    How to create the data in the script?
    I have a Inventory, how to dynamically add items and equipment?
    Please excuse my bad English~~
     
  21. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    No worries @Mr.L, your english is fine :)

    You can do this by creating an instance of your data class and assigning a new unique key for that instance. For example if your schema was called "Equipment" then your data class would be generated as "GDEEquipmentData" you would create a new instance like this:
    Code (csharp):
    1. GDEEquipmentData newEquipment = new GDEEquipmentData("my_new_key");
    2.  
    3. // Set any values on this new item, this depends on your schema
    4. // I'm making up some fake properties for this example
    5. newEquipment.name = "Sword";
    6. newEquipment.damage = 15.5;
    7. newEquipment.cost = 200;
    Your new item will be saved automatically (unless you are modifying lists). The next time you want to access your item, load it like you would load any other item:
    Code (csharp):
    1. GDEEquipmentData sword;
    2. GDEDataManager.DataDictionary.TryGetCustom("my_new_key", out sword);
     
  22. Mr-L

    Mr-L

    Joined:
    Jun 23, 2014
    Posts:
    3
    Thank you very much,

    I have created a new weapon,

    But I can't see it in the Creat Data window?

    Where can I find it?

    This is my Creat Data window:

    This is my code:

    Code (CSharp):
    1. using UnityEngine;
    2. using System;
    3. using System.Collections;
    4. using System.Collections.Generic;
    5. using GameDataEditor;
    6.  
    7. public class TestDatas : MonoBehaviour {
    8.     GDEWeaponData sword;
    9.     public List<String> allKeys;
    10.  
    11.     // Use this for initialization
    12.     void Start () {
    13. //        GDEWeaponData CurrenWeapon = new GDEWeaponData ("New_Weapon");
    14. //        CurrenWeapon.IconName = "NewWeapon!";
    15.  
    16.         GDEDataManager.GetAllDataKeysBySchema ("Weapon",out allKeys);
    17.         List<GDEWeaponData> allweapons = new List<GDEWeaponData>();
    18.         allKeys.ForEach (key => {
    19.             GDEWeaponData current;
    20.             GDEDataManager.DataDictionary.TryGetCustom(key,out current);
    21.             Debug.Log("Name:" + current.IconName);
    22.         });
    23.         StartCoroutine (test());
    24.     }
    25.     IEnumerator test()
    26.     {
    27.         yield return new WaitForSeconds (1f);
    28.         GDEDataManager.DataDictionary.TryGetCustom ("New_Weapon", out sword);
    29.         Debug.Log ("WeaponIconName:" + sword.IconName);
    30.     }
    31. }
    32.  
     
  23. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    Ah, new items created during runtime are not saved to the gde data file. They are saved to player preferences. You can load the new item while in play mode but you won't be able to see it in the editor. Many users have asked to do this, so I will add this ability to the list of features to implement in a later update. Sorry for the inconvenience!
     
  24. Mr-L

    Mr-L

    Joined:
    Jun 23, 2014
    Posts:
    3
    Ok,thank you.
    Look forward to your new version.~ happy day~
     
  25. playa1337

    playa1337

    Joined:
    Jan 19, 2014
    Posts:
    13
    So let's say I load data from a spreadsheet then i used the data in the game then updated some of the data by playing the game (HP, high score etc.). Is the only way to view the updated data is through playerpref? Does GDE provide a easy way to view this "raw" data ?
     
  26. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    Not right now. I do plan to create a runtime window that will let you see and maybe modify those values. Sorry about that.
     
    playa1337 likes this.
  27. OneShotGG

    OneShotGG

    Joined:
    Nov 16, 2012
    Posts:
    225
    Will Game Data Editor work on PS4 and PSVita?
     
  28. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    I haven't explicitly tested, but it should work fine.
     
  29. Gekigengar

    Gekigengar

    Joined:
    Jan 20, 2013
    Posts:
    738
    I have been waiting for this since first release :D:D

    Alas!
     
    Celestipoo likes this.
  30. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    I know! Thanks for the loyalty! Sorry its taken so long :)
     
  31. OneShotGG

    OneShotGG

    Joined:
    Nov 16, 2012
    Posts:
    225
    Ok I bought the asset and read through all the documentation. I understand what is going on but I am kinda confused on how to implement the data into a game.
    Lets say my game has 4 characters the player can choose from and upgrade individually at any point in the game

    So I create a schema called Characters that has these floats:
    maxHealth
    agility
    strength
    endurance

    Then I create Items called Soldier, Engineer, Sniper, and Medic that each inherit the schema's base traits but can be customized.

    Now, here is where I am a bit stuck.

    Do I now create a script that brings the values in and uses them or am I off base?

    For example, let say I have a script called CharacterStats.cs
    Code (CSharp):
    1. public class CharacterStats : MonoBehavior
    2. {
    3.      public enum CharacterType
    4.      {
    5.              Soldier,
    6.              Engineer,
    7.              Sniper,
    8.              Medic
    9.       }
    10.       public float health {get; set; }
    11.       public float maxhealth { get; set; }
    12.       public float jumpheight { get; set; }
    13.       public float energy {get; set;}
    14.       public float energyRegen {get; set;}
    15.       public float maxEnergy {get; set;}
    16.  
    17.       void Start ()
    18.       {
    19.             if(CharacterType.Soldier)
    20.             {
    21.                 maxHealth = //maxHealth from GDE Soldier Item
    22.                 health = maxHealth;
    23.                 jumpheight = 12.0f + //agility from GDE Soldier item / some number
    24.                 maxEnergy = 10.0f + //endurance from GDE Soldier item
    25.                 energy = maxEnergy;
    26.                energyRegen = 1.0f * (//endurance from GED Soldier item / 1000.0f
    27.          
    28.  
    29.             }
    30.             else if (CharacterType.Engineer)
    31.             {
    32.                 //initiate engineer stuff
    33.             }
    34.  
    35.            //ect
    36.       }
    37.  
    38.  
    39. }

    Is that essentially how the data created with the schemas and items should be used. Basically as a repository for loading item data (whether that is weapons, level or whathaveyou) or modifying base stats that effect other stats at runtime ?

    If this is the case wouldn't I just need my upgrade trees to access the items and modify them to get the upgrades I want when the character is actually instantiated or an UpgradeStats() function is called?
     
  32. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    So, yes. You are almost there. Once you define your schemas, create items, and generate your data classes, then the last thing to do is use the data during runtime. Read here: http://gamedataeditor.com/docs/using-gde-data-classes.html

    To continue your example, You would read in your values like this. Note that I may have incorrectly guessed some of the schema names or items names, so cut/paste may generate some errors. The data class names and the item key names depend on what was generated (http://gamedataeditor.com/docs/generating-data-classes.html).

    Code (csharp):
    1. void Start ()
    2. {
    3.   if (!GDEDataManager.Init("gde_data"))
    4.     Debug.LogError("GDE didn't initialize!");
    5.  
    6.   if(CharacterType.Soldier)
    7.   {
    8.     GDECharactersData soldierData;
    9.     GDEDataManager.DataDictionary.TryGetCustom(GDEItemKeys.Characters_Soldier, out soldierData);
    10.  
    11.     maxHealth = soldierData.maxHealth;
    12.     health = maxHealth;
    13.     jumpheight = 12.0f + soldierData.jumpHeight;
    14.     maxEnergy = 10.0f + soldierData.maxEnergy;
    15.     energy = maxEnergy;
    16.     energyRegen = 1.0f * (soldierData.endurance / 100.0f);
    17.  
    18.     // etc
    19.   }
    20. }
     
  33. OneShotGG

    OneShotGG

    Joined:
    Nov 16, 2012
    Posts:
    225
    Awesome, thanks for the help, I think I am starting to understand. I notice you can save data at runtime, but can you modify it at runtime?

    Like in the above example can I permanently increase the soldiers maxHealth variable so from that point on the character loads with more health?

    edit: in your documentation you say basic fields are saved automatically does that mean if I have some upgrade script say:

    GDECharacterData soldierCharacter;
    GDEDataManager.DataDictionary.TryGetCustom(GDEItemKeys.Character_Soldier, out soldierCharacter);

    soldierCharacter.maxHealth = 1000.0f


    that it will automatically save the soldiers max health at 1000 permanently, until i change it again?
     
    Last edited: Apr 30, 2015
  34. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379

    Yes :)

    When I say you can save data, I mean you can modify any values and those modified values will load until you reset the field (which makes the field revert to the original value) or change it again.
     
  35. OneShotGG

    OneShotGG

    Joined:
    Nov 16, 2012
    Posts:
    225
    Cool, thanks so much for your help. I think I understand enough to do what I need to do!
     
    Celestipoo likes this.
  36. SoftwareGeezers

    SoftwareGeezers

    Joined:
    Jun 22, 2013
    Posts:
    902
    Just bought this and it's looking good, but I have an error with a very simple test. I've imported a moderately complex spreadsheet with nested custom types (Weapon > Skill > Mod). I imported it okay after a few errors like missing type declarations in the spreadsheet such that there aren't any reported errors, and created my custom classes.

    I have a simplest test script that in Start() loads an item and references some values. This works as a print statement reports the data successfully. However, before this print is executed I get two identical NullReferenceException errors:

    Image1.png

    Code (CSharp):
    1. using UnityEngine;
    2. using System.Collections;
    3. using GameDataEditor;
    4.  
    5. public enum DAMAGE_TYPE{
    6.     NONE,
    7.     SLASH,
    8.     BLUNT,
    9.     PIERCE,
    10.     ELEMENTAL
    11. }
    12.  
    13. public class GDE_test : MonoBehaviour {
    14.     // Perform a test of GDE data reading
    15.    
    16.     // Use this for initialization
    17.     void Start () {
    18.         GDEDataManager.Init ("gde_data");
    19.         GDEItemData weapon;
    20.         int damage_health;
    21.         int damage_type;
    22.        
    23.         if (!GDEDataManager.DataDictionary.TryGetCustom(GDEItemKeys.Item_wp_sword, out weapon)){
    24.             Debug.LogError("Error reading weapon data!");
    25.         }
    26.        
    27.         //Do something with tunic data
    28.         string name = weapon.Name;
    29.         damage_health = (int)weapon.Skill1.Mod.HealthAmnt;
    30.         damage_type = weapon.Skill1.Mod.DmgType;
    31.         print ("Equipped "+name+" damage "+damage_health+ "   damage type "+((DAMAGE_TYPE)damage_type) );
    32.     }
    33. }
     
  37. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    Hmm. Would you mind sending me the spreadsheet you are using? I can import it locally and see what is happening. Send it to celeste@stayathomedevs.com.
     
    Last edited: May 1, 2015
  38. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    @Shifty Geezer I found the issue. I will send you a patch as soon as I get back to my computer.

    The TryGetCustom method was assuming the value of the custom field will always exist. If you have a custom field that is set to Null, you will currently see an exception. However, it will not affect the loading of your items (as you've seen).
     
  39. SoftwareGeezers

    SoftwareGeezers

    Joined:
    Jun 22, 2013
    Posts:
    902
    Thanks. Great turnaround!
     
  40. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    I sent you a DM with a link to the patch. Let me know if you have any other issues.
     
  41. SoftwareGeezers

    SoftwareGeezers

    Joined:
    Jun 22, 2013
    Posts:
    902
    That's working fine. Really fabulous asset and service you're offering here, Celestipoo! I'll be sure to rate (something I rarely do!).
     
    Celestipoo likes this.
  42. lunstar

    lunstar

    Joined:
    Mar 4, 2015
    Posts:
    8
    I have question about GDEItemKeys class which was generated by the GDE.

    My google spread sheet is organized into a series of tabs. When I importing spreadsheet in unity editor, if there are same key in separate tabs, I cannot get whole of data.

    The key string in the GDEItemKeys class is generated "keyname" but the variable name is generated "tabname_keyname". In my humble opinion it seems to be the reason that i could not import whole data.

    And this is my question.
    If my expectation is correct, is there a way to get the key name like "tabname_keyname"?
     
  43. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    The GDEItemKeys class is a helper class that you can use to load your items. Its only purpose is to alleviate having to hard code key strings in your scripts.

    Each of your items must have a unique key. That means your keys must be unique across all tabs in your spreadsheet. Make sure your keys are unique, and your data should load correctly.
     
  44. Starya

    Starya

    Joined:
    Apr 7, 2014
    Posts:
    9
    Just hit this problem. I've got the temporary solution working, but would really like to see a more permanent fix. I actually think that option #2 in your list of potential solutions would be best. I know you are worried about having too many configuration options that users have to fiddle with, but I think that as long as you have reasonable defaults (such as just having it do what it's doing now, though it would be nice if you also implemented option #1 and had it create the directory if it doesn't exist rather than throwing errors) it is fine. With reasonable defaults, most users don't have to fiddle with the configuration preferences at all. But for the people who do want to do things differently, they would have the flexibility of specifying exactly where they want those files to go. For example, I actually want those files to be placed with my code in a folder outside of the GameDataEditor hierarchy, plus I moved the GameDataEditor folder into a folder that holds all of my 3rd-party code. So if you were to go with option #3, it still wouldn't be doing what I want (though at least it wouldn't throw errors anymore).

    Also, I wanted to mention that even though you do have a setting in preferences to specify where the data file goes, it still threw a ton of errors for me because I had moved the GameDataEditor folder right after I imported before I did anything else. I believe I tried going into preferences and changing the data file location, but it didn't let me because the file didn't exist yet. So I figured I had to get it to generate the file first, but when I went to start defining my data, just opening the window resulted in an onslaught of error messages because the path where it wanted to generate the data file didn't exist. Kind of a chicken and egg problem. It eventually created the directory and generated the file, and then I was able to move the file and update the location, but only after I had to close all those popup error windows. I am wondering if maybe you can just ship the product with an empty data file so that we can move it and update the location before we start doing anything and avoid all that pain and suffering.
     
  45. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    Yeah, sorry about that. My first take on the file creation was to make it as bullet proof and automated as possible. But of course that means less flexibility. The next update I will revisit this and fix these issues. That popup should only be shown once, but really I think it will move it to the console as a warning. I'll also add the extension output path to the preferences. Thanks for your feedback. If there's any other pain points you come across, let me know!
     
    Starya likes this.
  46. playa1337

    playa1337

    Joined:
    Jan 19, 2014
    Posts:
    13
    Is there an easy way to "serialize" the classes so it shows in the inspector?
     
  47. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    Not at the moment. The generated data classes use Properties, which are not picked up by the inspector. I'd have to generate a custom property drawer for each data class (which I have thought about doing) in addition to generating the data classes themselves. It hasn't been something anyone was asking for, so it wasn't very high on the feature list. But since you are asking, I'll take a look.

    The next update is taking way longer than I'd like because I'm developing a new asset. I'm nearly ready to submit and expect to get back to GDE soon.
     
    playa1337 likes this.
  48. Duffer123

    Duffer123

    Joined:
    May 24, 2015
    Posts:
    1,215
    @ Celestipoo,

    Coming to this a noob on Unity. Was toying with either SQLite Kit or SimpleSQL - but then stumbed across this on the Asset Store and it does seem to be far more flexible.

    Are you planning to support save at runtime, Texture2d, Vector3, Sounds, 3d objects, Objects? It would be great if the GDE UI could encompass this too ie. showing icon of the Texture2d, play sound and so forth...?

    Also, what is planned in the next release?

    Can you just clarify, what can you save out while developing and what can you save out at runtime at present?

    Have you thought about maybe creating your own custom datafile to save stuff (all of it) out and load it back in, in runtime, perhaps a separate file from the main gde text file?

    Also, what about implementation of SQLITE for this Asset?
     
    Last edited: May 29, 2015
  49. Celestipoo

    Celestipoo

    Joined:
    Jul 1, 2013
    Posts:
    379
    Hey there, GDE is very user friendly. I have a couple of new Unity users already and they love GDE. Also, I'm always around to answer questions so feel free to ask here or send me an email any time: celeste@stayathomedevs.com.

    During development you would make tweaks to your data set. You can either use the GDE custom editors to make modifications or you can use a spreadsheet and import your data from there. During runtime, it's possible to make changes to your original data. Those changes are saved as overrides in PlayerPrefs. You can always reset any and all data that was previously overridden. You can look here for the basic types supported http://gamedataeditor.com/docs/supported-types.html and here for an explanation of custom types http://gamedataeditor.com/docs/custom-data-types.html.

    The next release will have the ability to export your data set to a spreadsheet. Also, support for more basic types. Beyond that I'll need to look and decide what else I want to include.

    GDE does use a custom data file. It's actually json that's read in by the GDE data manager and loaded by your custom generated data classes. I have thought about moving away from PlayerPrefs and implementing a more secure serialization system, but it's not incredibly high on the feature list.

    I have also thought about implementing optional back ends for GDE. The way it's structured, it's certainly possible to switch out the json for something else. Again, users have not expressed a big interest in this so its not high on the feature list.

    You can browse GameDataEditor.com to see how it works.
     
  50. Duffer123

    Duffer123

    Joined:
    May 24, 2015
    Posts:
    1,215
    @ Celestipoo,

    Thanks for the quick and detailed reponse...!

    Naturally, I have bought this. In preference to the SQLITE stuff. Thinking about it, I can see why SQLITE would be a low priority... ;)

    Another thought I had is what about the possibility of having an optional Child or Parent attribute (or third option being stick to standard item) to items within the same Schema? Children inheriting all parents data fields unless the Child item field in question is not null? (see the Datablocks asset on the store - I bought that too - what can I say, I like playing around with data...). That probably wouldn't take much to implement but in terms of massively enhancing development speed... Just a thought... I suppose I could simply make the items within that Schema have a field Parent or Child or Sibling and another field referencing somehow the associated (Parent or Child) item?

    Another idea - when developing, it would be great to re-order, move up, move down, fields in the Schema and insert new fields between, before, after old fields - just to tidy up entry of fields in to the Schema? Also, perhaps a larger text edit area for strings when you're entering them? Also, can the schema in the expand/retract list be automatically put in alphabetical order?

    In any event, this looks v helpful for development of all my game ideas.

    Looking forward to implementation of export to spreadsheet - but how on Earth are you going to manage export of Lists, 2D lists and custom stuff... ??
     
    Last edited: May 29, 2015