In my opinion it should work like this.
They should be family eventsheets and you should be able to create functions inside of them that can be call like this
family.myFunction( parameter1, 2, 3, ... )
or like this
sprite.myFunction( parameter1, 2, 3, ... )
text.myFunction( parameter1, 2, 3, ... )
It shouldn't be object eventsheets but family eventsheets because it avoids the problem of not having the same variable/behavior/object type/...
adding spriteX to mySpriteFamily will automatically attach the family eventsheet to it.
The scope of the functions would change and make it possible to have a function with the same name in each family eventsheet.
spriteX.doSomething( parameter1, 2, 3, ... )
spriteY.doSomething( parameter1, 2, 3, ... )
spriteX and spriteY are both in mySpriteFamily and inherited the family eventsheet with a function called doSomething. Every new sprite added to the family will get the doSomething function with the default code, but each sprite can overwrite it with their own code.
As an example let's create a simple family eventsheet to control 2 different type of enemies.
We have a sprite called zombie and a sprite called skeleton, they are both in a family called enemy, with a family eventsheet and the function "attack()" in it.
We have another sprite called player with a line of sight behavior.
We now want the enemies to attack the player in different situations and in different ways, the zombie attacks the player if he can reach him with a melee attack and the skeleton will shoot an arrow when he is at the right distance away from the player.
We can use the normal eventsheet to check if the conditions are met and then call the same function in both enemies family eventsheets, for the zombie we call zombie.attack() on collision with the player and for the skeleton we call skeleton.attack() if he has line of sight to the player. In the zombie attack() function we trigger an melee attack animation and a "hurtbox" that deals damage to the player ( player.takeDamage(1) ) and in the skeletons attack() function we trigger a bow shooting animation and shoot an arrow in the direction of the player.
Now after writing it all down, i think what i really want (♩ ♫ what i really really want ♪ ♬) is probably just object and family functions. But maybe I am missing something else that would only be possible or easier/cleaner to do with object/family eventsheets
[Edit]
There is actually already a similar idea posted for that here construct3.ideas.aha.io/ideas/C3-I-22
I think a way of implementing it in editor could be to add another type to the instance variable drop down (Boolean,Number,String and now added Function) that would be the way to name the instance function, and to create the code for it you would (in normal eventsheet) have something like
on spriteX myInstanceFunction -> do something
on spriteY myInstanceFunction -> do something
in the same way you right now have
on function myFunction -> do something
and you could define a default for an instance function with families
on mySpriteFamily myInstanceFunction -> do something
the code from this would only be executed for the sprites that have not overwritten "myInstanceFunction"