Worth replacing my DataTable and Structs usage with DataAssets?

I’m struggling with deciding to do this as it’s a bit of work. Basically I’ve DataTables defining most things in my game. My ability system defines all ability properties in a DataTable, Monsters properties is a DataTable, Heroes attributes is a DataTable, etc..

The reason I’m considering this is Structs feel so incredibly unstable. If I add, remove, or change a variable in the Struct the editor has a 50/50 chance of crashing. I’ve read horror stories of in corrupting. I’ve backups and using git, but it still makes me uncomfortable.

Is it possible do define DataAssets entirely in BP? Seams like I can make PrimaryDataAssets, which appeared to build correctly, but I’d need to be able to do a lookup for these with a GameplayTag (my DataTables use GameplayTag for RowName). I also would prefer having to avoid Async/Blocking load these in. Do they not just exist in memory similar to DataTables?

Is there a way to make DataTables or Structs in general be less likely to just corrupt blueprints? Appreciate any and all feedback here!

for this reason i did the same, i only use DTs for very small structs, also i never use nested structs

yes, you can do it all in BP and you can iterate over them via the AssetRegistry, OR you can define DTs of DAs which seams redundant but its just a list, ie you can have a DT of all pistol DAs and another of all rifle DAs etc.

yes if you use c++ i havent had any problem with them although it will likely break all your current DTs.

I’m not using nested structs and so far I haven’t had any corruption, but I’ve certainly had some crashes that worry me.

I was able to get the DataAssets working fine and defined entirely in BP. I don’t really need to itinerate over them, but I do need to load them by a GameplayTag. Does anyone have anyone have any tutorials on doing that or is putting them in a DataTable the only option here?

So for example I’d have DA_Ability_Fireball and its tag is Player.Ability.Fireball. Seams like you interact with the AssetRegistry using IDs of some kind. Having a hard time wrapping my head around some of the BP functions available.

  1. you can just pass through the DA directly instead of using the Tag.
  2. If you want to keep it separated though basically you have the AssetRegistry scan a folder, like Game/Abilities and then loop over all Abiltiies, Cast to DA_Ability_Base, check has Tag
  3. Have an ability manager that gets all abilities and assigns it to a TMap<GameplayTag, DA_Ability>