here's my script port for a630(a640), maybe it works on a620 and a610, too.
i had to restart my camera several times because of "lens errors"

and ugly noises

but it looks safe now, before zooming, sets focus to infinite after zoom restores focus... the original firmware does something like this
for me it works without problems
tested with allbest's build 37
i suggest for other script writers to make these focusing operations when zooming
it's almost like the original one above, but:
/delete/ button is for focusing at cca 35 cm by default
/display/- 1X zoom - cca 2,6 meter focus by default
/menu/-4X zoom - infinite focus by default
zoom step by default is 4 by default so you can zoom in and out fully in two steps
/up/-/down/ is for manual focusing
/left/-/func/-/right/ modifies zoom stepping(2,4,8 by default)
rem Author kamil, adapted for A630(A640) by dzsemx, script ver. 2.1 or what
rem some help:
rem /delete/ button is for focusing at cca 35 cm by default
rem /display/- 1X zoom - cca 2,6 meter focus by default
rem /menu/-4X zoom - infinite focus by default
rem /up/-/down/ is for manual focusing
rem /left/-/func/-/right/ modifies zoom stepping(2,4,8 by default)
rem zoom step by default is 4 so you can zoom in or out fully in two steps
rem every parameter can be modified from the script menu to fit your needs
@title zoom and focus in video
@param a auto focus /erase/ 0=off
@default a 4
@param c step zoom /left/
@default c 2
@param d step zoom /set/ - at start
@default d 4
@param e step zoom /right/
@default e 8
@param f auto zoom /display/ -1=off
@default f 0
@param g auto focus /display/ 0=off
@default g 7
@param h auto zoom /menu/ -1=off
@default h 8
@param i auto focus /menu/ 0=off
@default i 11
get_prop 12 q
if q=0 then set_prop 12 1
z=d
rem used for safe zoom
x=11
rem zoom range, change this value if your zoom is different
k=8
get_focus u
o=0
do
o=o+1
p=o*o*(o+1)*(o+1)+90
until u<p
v=o
press "shoot_half"
sleep 800
click "shoot_full"
print "HALF SHOOT - stop record"
:loop
wait_click
if is_key "zoom_in" then goto "in"
if is_key "zoom_out" then goto "out"
if is_key "up" then goto "add_focus"
if is_key "down" then goto "min_focus"
if is_key "left" then let z=c
if is_key "set" then let z=d
if is_key "right" then let z=e
if is_key "erase" then goto "focus_1"
if is_key "display" then goto "zoom_focus_1"
if is_key "menu" then goto "zoom_focus_2"
if is_key "shoot_half" then goto "end"
goto "loop"
:in
if z<0 then let z=1
if z>k then let z=k
gosub "safe_focus"
set_zoom_rel z
get_zoom t
print "zoom", t; "/" k
gosub "focus_dance"
goto "loop"
:out
if z<0 then let z=1
if z>k then let z=k
gosub "safe_focus"
set_zoom_rel -z
get_zoom t
print "zoom", t; "/" k
gosub "focus_dance"
goto "loop"
:focus_1
v=a
gosub "focus_dance"
goto "loop"
:zoom_focus_1
if f>-1 then gosub "zoom_zoom_focus_1"
if g>0 then gosub "focus_zoom_focus_1"
goto "loop"
:focus_zoom_focus_1
v=g
gosub "focus_dance"
return
:zoom_zoom_focus_1
gosub "safe_focus"
set_zoom f
print "zoom", f; "/" k
return
:zoom_focus_2
if h>-1 then gosub "zoom_zoom_focus_2"
if g>0 then gosub "focus_zoom_focus_2"
goto "loop"
:focus_zoom_focus_2
v=i
gosub "focus_dance"
return
:zoom_zoom_focus_2
gosub "safe_focus"
set_zoom h
print "zoom", h; "/" k
return
:add_focus
v=v+1
gosub "focus_dance"
goto "loop"
:min_focus
v=v-1
gosub "focus_dance"
goto "loop"
:focus_dance
u=(v*v*v*v)+90
if v>=11 then u=65535
if v<1 then let v=1
if v>11 then let v=11
set_focus u
get_focus t
print "focus", v; "/11 ("t; " mm)"
return
:safe_focus
x=v
v=11
print "Safe focusing"
gosub "focus_dance"
v=x
sleep 10
return
:end
click "shoot_full"
end
end
if i wrote something wrong, excuse me, i'm a little bit sick and tired
