I whipped up something... not sure how well it would fit into your code, but nyeh, here it is if it is of any help
I didn't incorporate the shrinking of the spheres, but you said you can do that anyway, so you can modify the code if you need that in. Would look better ^^
Written in DBpro... you never said what you used
Rem Project: Testings
Rem Created: 25/08/2004 17:57:17
Rem ***** Main Source File *****
DIM px#(20): DIM py#(20): DIM pz#(20):DIM pexist(20)
` make kirby
MAKE OBJECT SPHERE 1,50
COLOR OBJECT 1,RGB(250,150,150)
` creating the dust particles
particles=10
FOR c=0 TO particles
make object sphere c+2,10
color object c+2,RGB(50,50,50)
NEXT c
REPEAT
` display stats on the 5th particle (randomly decided by me) and the stats of where the 'kirby' is
c=5
text 0,0,"#"+STR$(c)
text 0,10,"X:"+STR$(px#(c))
text 0,20,"Y:"+STR$(py#(c))
text 0,30,"Z:"+STR$(pz#(c))
text 0,40,"E:"+STR$(pexist(c))
text 300,10,"KIRBYX:"+STR$(kirbyx#)
text 300,20,"KIRBYY:"+STR$(kirbyy#)
text 300,30,"KIRBYZ:"+STR$(kirbyz#)
text 300,40,"KIRBYA:"+STR$(kirbya#)
` position the camera. Cameraa# value can be modified to rotate around the sphere for whatever reason..
cameraa#=0
camx#=newxvalue(kirbyx#,cameraa#,100)
camy#=kirbyy#+100
camz#=newzvalue(kirbyz#,cameraa#,100)
position camera camx#,camy#,camz#
point camera kirbyx#,kirbyy#,kirbyz#
` so that the kirby can be rotated and moved
if leftkey()=1 then yrotate object 1,wrapvalue(kirbya#-5)
if rightkey()=1 then yrotate object 1,wrapvalue(kirbya#+5)
if upkey()=1 then move object 1,5
` need to update kirbyx#z#y# values
kirbyx#=object position x(1)
kirbyy#=object position y(1)
kirbyz#=object position z(1)
kirbya#=object angle y(1)
` and the main bit for particle running
FOR c=0 TO particles
` positioning the particles
` if pexist=0 then, the particle does not exist. If you are pressng inhale button, then it will now inhale...
` also, you can;t inhale while moving
if pexist(c)=0 and spacekey()=1 and upkey()=0
px#(c)=newxvalue(kirbyx#,kirbya#+RND(100)-50,RND(30)+70)
py#(c)=kirby#+RND(50)
pz#(c)=newzvalue(kirbyz#,kirbya#+RND(100)-50,RND(30)+70)
position object c+2,px#(c),py#(c),pz#(c)
pexist(c)=1
show object c+2
endif
` checks if the particle should be destroyed (ie has it reached the centre of kirby)
if px#(c)>kirbyx#-20 and px#(c)<kirbyx#+20 and py#(c)>kirbyy#-20 and py#(c)<kirbyy#+20 and pz#(c)>kirbyz#-20 and pz#(c)<kirbyz#+20 then hide object c+2: pexist(c)=0
` also need to check if the particles get too far away...
if px#(c)<kirbyx#-100 or px#(c)>kirbyx#+100 or py#(c)<kirbyy#-100 or py#(c)>kirbyy#+100 or pz#(c)<kirbyz#-100 or pz#(c)>kirbyz#+100 then hide object c+2: pexist(c)=0
` if the particle DOES exist, then point it towards kirbys centre and move it
if pexist(c)=1
point object c+2,kirbyx#,kirbyy#,kirbyz#
move object c+2,2
` don't forget to update the co-ords of all the particles
px#(c)=object position x(c+2)
py#(c)=object position y(c+2)
pz#(c)=object position z(c+2)
endif
NEXT c
if returnkey()=1 then endgame=1
UNTIL endgame=1
end