OK...you're pausing your game while the explosion occurs. The Explode subroutine loops until the entire explosion has happened, then you drop back to the main routine and carry on with the rest of the program.
Here's an idea...
Set up 2 global variables called Exploding and Frame. Change this
`SETUP EXPLOSION WITH GOSUB
IF INKEY$() = "P" THEN gosub EXPLODE
to this
`SETUP EXPLOSION WITH GOSUB
IF INKEY$() = "P"
Exploding = 1 : REM turn explosion on
Frame = 1 :REM reset to frame 1
ENDIF
If Exploding = 1 gosub EXPLODE
Change the EXPLODE subroutine...
if Frame = 1 : REM only set up object on frame 1
show object 1
set object to camera orientation 1
set object ambient 1,25
set object transparency 1,1
ghost object on 1
endif
texture object 1,Frame
If frame = 8 then Exploding = 0 : REM if last frame, turn explosion off
return
This will let your explosion happen ALONGSIDE everything else, rather than INSTEAD of everything else.
If you want to slow the explosion down to what your code used to do, you need to add avariable to save the time, and only execute the EXPLODE routine every 125 milliseconds.
Hope this helps. I haven't tested the code so it may not be bang on.