"for t=1 to NumberOfGranades", looks like typo, it may not be of course but as you don't include your variable definitions can't say.
"if total_time#>GrenadeExpObj#(t,3)+0.0167", that line is the only reason I can see for using a float for the array. What are you doing there exactly? Why are you adding that odd number at the end? It is always the same so I cannot see why you are adding it at all. You could simply define grenadeExpObj# to have that number included.
I don't really see why you would use a time variable at all, just use your frame count.
Here is something I have cooked up to test speed. Runs fine on my system, 60fps smooth as silk.
Rem Project: explosion test
Rem Created: Sunday, August 29, 2010
Rem ***** Main Source File *****
set bitmap format 21
set display mode 1024,768,32,1
sync on
red=rgb(255,0,0)
yellow=rgb(255,255,0)
black=rgb(0,0,0)
white=rgb(255,255,255)
explosionamount=300
for n= 1 to 160
if n<30
ink yellow*n,0
ENDIF
if n>30 and n<120
ink red*n,0
endif
if n>60
ink black,0
circle 100,100,n-60
ENDIF
if n>60 and n<100
ink n,0
ENDIF
circle 100,100,n
get image n,0,0,200,200,1
next n
for n=1 to explosionamount
make object plane n,100,100
texture object n,1
set object transparency n,1
position object n,rnd(400),rnd(400),rnd(400)
next n
ink white,0
dim frame(explosionamount)
position camera 50,50,50
do
control camera using arrowkeys 0,3,3
text 0,0,"FPS "+str$(screen fps())
x#=camera position x():y#=camera position y():z#=camera position z()
for n= 1 to explosionamount
if frame(n)<160
inc frame(n)
else
frame(n)=1
endif
texture object n,frame(n)
point object n,x#,y#,z#
next n
sync
LOOP
This animates them at the same frame all the time but adding in a random is easy enough. Just demonstrates speed isn't an issue at least on my computer. Takes 2000+ objects to start slowing down here, and that is only by around 2 fps at that point.
http://s6.bitefight.org/c.php?uid=103081