Here is a graphic adsr control I have created to control the adsr in 3.audio-examples/D02.adsr.pd.
It works as you would expect, except the span between the sustain node and the release node multiplies the 4 adsr values.

Node-1 anchored at 0, 0
Node-2 y = peak velocity
Node-2 x = attack
Node-3 x = decay
Node-3 y = sustain %
Node-4 x = multiplier
Node-4 y is locked to node-3 y
Node-5 x = release
Node-5 y is anchored at 0

There are 3 inlets and 4 outlets

inlet-1 = MIDI velocity in
inlet-2 = allows the addition of a small number to the the attack to stop a click I was getting
inlet-3 = settings list in (coodinate pairs) sets the nodes and adsr
outlet-1 = adsr out from an internal copy of the adsr.pd object
outlet-2 = adsr values that can be sent to an adsr in a poly voice
outlet-3 = settings list out (coodinate pairs) for saving the node positions
outlet-4 = a packed version of the settings

Open adsmr-help.pd for more information