I actually meant to literally copy and paste the part in [presets] that calculates indval into [pdx7channel]. If you are calculating something that only applies to a single voice, then it doesn't really make sense to put it in a global area. That's just going to confuse things further.
In fact, I think you might want to spend time re-working your patch before it gets too too crazy, because there are things like that all over the place, making it VERY difficult to debug. Taking a look at this problem as an example, in [pdx7channel] you have a that sends the velocity somewhere in the (global) parent patch to calculate values, such as indval. But then it also gets sent to another receive in [pdx7voice], and that is used to actually trigger sending indval. Why? All that stuff is just voice-specific. Anything that only matters for one particular voice at a time should be contained in the voice abstraction. You're only looking to calculate indval for one voice, so keep it there to make sure you don't lose track of where it's going.
It's also not helping that you have individual voices sending on global [send] and [receive]s. When one voice is activated, it sends its velocity over . BUT there is an [r velocity] in every voice! That's not good. You don't want one voice interfering with the others. You should really get in the habit of using $0 for that sort of thing. $0 is a variable that Pd assigns a value to for every patch and abstraction (not subpatches). It doesn't really matter what it is; it's just there to make sure there is no cross-talk between abstractions with the same and [r ] names, as well as