that looks great! some notes:
in script 1 if you’re using Z to pass a value to script 2 from the loop you should set it before calling the script:
L 1 6: Z I; SCRIPT 2
if you’re using the latest grid beta you can also take advantage of G.BTN.X and G.BTN.Y ops, so the first 2 lines of script 2 could be slightly more readable:
Y - 7 G.BTN.Y PN 0 Z
X N + * Y 5 G.BTN.X PN 0 Z
for voice stealing you want it to grab the first available, starting from 1? or something else?