How to make data easy to deal with for designers and artists?

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By Gyrosupernova

This is broad but I’m not quite sure how to narrow this down. So I’m making an RPG in Godot but I’m not super familiar with coding databases that contain all sorts of information related to all the aspects of the combat in game. Hand coding each enemy and item doesn’t really scale well when you need dozens and dozens of enemies and items.

Quick Class Resource I Made
This is a quick resource I made that mimics how scriptable objects work in Unity. I know how to use resources and that’s actually pretty nice for quickly hashing out characters that I can plug into my systems to use, but they’re not all that I want.

RPG Maker Database System

Something like RPG Maker’s database system is something akin to what I’d like. It’s easy for a designer to add items and characters, but also to compare them and manage them in bulk. It’s real hard to manage individual resources and compare like strength growth between characters or how enemy’s difficulty is working on like a graph.

I’m not asking for how to make this in its entirety, but rather I need a path to look down for this, a place to start. An example of this working in Godot that I can pick through to see how it works would be great. The demos and stuff I’ve found for RPG systems are lacking on the data side and more of showing off how the combat system works, which is also the same for guides and tutorials I’ve found and it’s real frustrating.

:bust_in_silhouette: Reply From: Blockmaster27

No matter how the internet puts it, the real information you find will not be in videos/guides/tutorials. Mega corps like Google or Microsoft do not want you to make an indy game and will try anything they can to stop you – even suggesting videos that are objectively pointless, misleading, and full of people showing off how smart they can code rather than actually teaching. They do this to widdle down the competition so that the industry’s flow of revenue is isolated to only a few corporations.

Go down your own road. You will eventually hook on something that organizes your project into what you are looking for if you just keep taking whacks at it. A goal to shoot for would be having data structures that are practically ‘plug-and-play’ when you need to add new features, without spending hours fiddling around with how things are inherited and whether or not the new features will break old ones.

This can be easy to some over-organized dork, but for everybody else with not the right autism, it seems that coding is an extremely erratic and disorganized venture that becomes even more disorganized the more you add to your project.

One solution I can grant is that every week or so you should take some time to clean & organize. Instead of adding new features, purely focus on the flow of data and how to make things easier, simpler to understand, and with inheritance structures that work FOR YOU rather than against you. Everything can be simplified, compartmentalized, and structured in a way that operates better if you just take the time to focus purely on the overall direction of the game. But no one can tell you exactly how to do this unless they were physically or remotely working with you, and had full interest in the project as you do.

This answer has nothing to do with the question, it looks like more of a vent at big corp.
This is not needed here.

zhyrin | 2023-02-15 18:25

:bust_in_silhouette: Reply From: zhyrin

Ah yes, a tricky question indeed.
I think it doesn’t get shown all that often, because what you are trying to do is not at all glamorous.

The first thing to nail down is what is the data structure you are going to use. This means thinking about how it stores its data on the disk, how it stores its data logically, and how it interacts with your game.
For example, a json file might seem like a good option, because it’s human readable, easy to edit, you can define whatever structure you want. But this can get out of hand, and it doesn’t really interact with the engine. You need to parse it and it’ll be a Dictionary that has no defined structure or type safety or integration.
Using custom resources seem like the best godot offers and it’s not exactly a new idea: it’s the equivalent of scriptable objects in unity or data assets in unreal. The only “downside” is that they are offered as-is, no tools to handle them. Which leads me to the next point.

The other side of the coin is how will non-technical members of the team see and edit this data? They might be used to working with excel tables where they see everything, maybe json or God forbid xml. So these might be convinient in the sense that they might have familiarity with them. But I think the drawbacks waaaay outweight the benefits. First, you need to parse this data, second there is no type safety. What’s stopping a designer from entering a string in a column they should have put a number?

So the direction I would point you in, is defining a data structure that is based on godot types (probably resource) and build a custom tool in which the values can be viewed and edited as per the desires of the team. I’m sure it doesn’t sound like an exciting prospect, but as I said, this part of development is not glamorous.

I’ve been using unreal recently and I found the power and usability of data assets very inspiring, it totally changed how I think about managing data of my upcoming projects.
Personally, I would store the authoritative data as resources and develop the most conveinient interface to edit it. What I mean is that one of the first steps that would come to mind is building a table view of all the same type of resources, right? But depending of what kind of data we are talking about, a different representation might be more suited to edit it (e.g.: a dialogue system would be better with a tree editor).

This might be a bit misleading, but you might want to look at the model view controller system, it outlines how to separate the underlying data, modifying it and displaying it