Hi,
Feels good to see nicely laid out Fsm. Nice and very "feng shui", just to be picky you could swap "Do Fire" and "Do Jump" to avoid transitions to cross
I think you have actually a perfect example of how sub fsm can help. I don't see anything wrong with your approach. Duplication of variables isn't really there is you use sub fsm.
When I have high level variables like your left and right properties, I rely on fsm variable getter and setter, I don't see this as a problem. I simply go get the variable where I know it is up to date. I call them fsm "Meta" they only host variables, no logic at all, simply a repository of variables, that I only give access to certain fsm ( by convention). Now in your case you could also fire some global events "is Left" and "is Right" or something and then all your different fsm in need to such information can catch it without even accessing vars. and that's actually a very good technic in scripting. it completly separate your logic. A given fsm that only need to know if the user is left or right simply listen to the propery events, no hard binding and that's a good thing.
so "inheriting" is really a matter of you to enforce who has the right to inherit. It's been discussed many time to allow for fsm to declare variable as "visible" to its childs and stuff like that, but it's perfectly doable right now. it means having a local variable acting as a buffer if you need to do some computation with it.
1: get the variable from the "Meta" fsm, and store it locally
2: do some work with it
3: anytime you need to do some work again, get it first from the "meta" to make sure its value is up to date
It may seem like an overhead but internally it's not really different to access a local variable then a different fsm, it's just a different pointer, so don't worry about performances here. the obvious improvement is using events if the value is a bool or changes only few times ( like this left and right), for example in a the case of a player position, since it changes always, this becomes more of a problem and direct access it preffered of course.
Bye,
Jean