This is meant as extension on: https://wiki.openttd.org/en/Development/Design%20Drafts/Scripts/Capability-based%20API
In addition to having capabilities, GS would benefit from being able to instantiate controllers for certain objects.
For example, take a town. Currently either a GS controls all towns or it doesn't. By adding capabilities, as written in the wiki, it can either share all towns with other GSes or keep them all for him self. I would propose a more fine-graned method: instances.
Every GS has a function like: HasInstanceFor(capability)
. As example: HasInstanceFor(TownGrowth)
.
The GS either returns 0 if it has nothing for this capability, or N with N > 0 for how many different forms it has for this instance.
Next, OpenTTD adds up all the Ns, picks a random number in range, and selects that GS + index to handle that town now forths. For example: GetInstanceFor(TownGrowth, 2)
.