Imagine you have a prefab with a predefined list - for example an AI Group prefab with a list of character prefabs:
```
m_aUnitPrefabSlots {
"oldPrefab0" "oldPrefab1" "oldPrefab2" "oldPrefab3" "oldPrefab4" "oldPrefab5"
}
```
You place it or inherit from it, but want to make a small change to it - let's say, changing only the second character prefab to something else.
This operation will however not just save this small change, it will make a complete, independent copy of said list:
```
m_aUnitPrefabSlots {
"oldPrefab0" "newPrefab1" "oldPrefab2" "oldPrefab3" "oldPrefab4" "oldPrefab5"
}
```
The issue is that we just overwrote a whole lot of data that we did not actually want to change: If we now made any change to the original list, it would not carry over to the new instance, adding a lot of manual work.
I consider this one of the more annoying issues with data modding.
Instead, list item overwrites should be saved in one of these ways:
**1. "Parent" / "remove" keyword**
```
m_aUnitPrefabSlots {
parent "newPrefab1"
}
```
Between the items that are actually modified, keywords are added that instruct the prefab to use the parents value. If nothing comes after, trailing keywords are not necessary. "Remove" keywords can be used to remove an item from the list.
This concept is not as good as the following idea, but more similar to the current format.
**2. Overwrite by index**
```
m_aUnitPrefabSlots {
1: "newPrefab1"
}
```
The items that should be overwritten are referenced directly using their indices, nothing else is saved. Ideally, there is also some way of removing items.
While I understand that changes to file structure are not something you make every day, I would be glad if you would seriously consider something like this.
I have personally encountered the described problem multiple times - when it happens, it's often a significant headache. So it would be great if an improvement could be made.