スプライトIDをカウンタのIndexとして使って管理するとこんな感じ
#include "hspdx.as"
	es_ini	1024,1024,360				; 角度の分割を360に設定
	es_screen 640,480,32,,1,1		; スクリーン初期化
	if stat : end
*start
	boxf
	font msgothic, 31, 1
	color 0,255,255
	mes "自"
	color 128,255,0
	mes "A"
	color 255,128,0
	mes "B"
	color 0,255,0
	mes "●"; 弾A
	color 255,0,255
	mes "・"; 弾B
	
	es_buffer 0,2,,,1
	if stat : rnd
	es_size 32,32,60
	es_pat 0, 0,0			; 自
	es_pat 1, 0, 32			; 敵A
	es_pat 2, 0, 32*2			; 敵B
	es_pat 3, 0, 32*3			; 弾A
	es_pat 4, 0, 32*4			; 弾B
	
	gsel 0,1
	es_cls
	es_sync
	wait 100
	myx=200:myy=400
	es_set 0,myx,myy,0,1		; メインのスプライト
	es_type 0,1	//自機のタイプを1
	es_new enid,1
	es_set enid,50,50,1,1	
	es_type enid,2	//敵Aのタイプを2
	b_tcnt(enid)=0	//弾の発射準備カウンタ初期化
	es_new enid,1
	es_set enid,600,50,2,1	
	es_type enid,4	//敵Bのタイプを4
	b_tcnt(enid)=0
*main
	stick ky,$1f
	if ky&1 : myx-=8
	if ky&4 : myx+=8
	if ky&2 : myy-=8
	if ky&8 : myy+=8
	enid=1//検索開始ID
	repeat 
		es_find enid,2+4,enid
		if enid<0 {break}
		if b_tcnt(enid)=0 {//現在弾は出してない
			es_get type,enid,13
			if type=2 {//敵Aだった
				if rnd(100)>95 {//100分の5で弾発射準備
					es_get enx,enid,3
					es_get eny,enid,5
					es_ang enx-16,eny-16,myx-16,myy-16
					b_ang(enid)=stat-25	//自機の方向から-25度ずらす
					b_fps(enid)=10	//10フレーム毎に発射(必ず1以上を設定)
					b_tcnt(enid)=5*b_fps(enid) //5初発連続発射
				}
			}else{//敵Bだった
				if rnd(1000)>980 {//1000分の20で弾発射準備
					es_get enx,enid,3
					es_get eny,enid,5
					es_ang enx-16,eny-16,myx-16,myy-16
					b_ang(enid)=stat+3//自機の方向から3度ずらして弾が直接自機を狙わないように
					b_fps(enid)=5	//5フレーム毎に発射(必ず1以上を設定)
					b_tcnt(enid)=4*b_fps(enid) //4発連続発射
				}
			}
		}
		if b_tcnt(enid) { gosub *Fire :b_tcnt(enid)--}//弾発射処理
		enid++	//同じIDを検索しないように+1(これを忘れると無限ループになる)
	loop
	if ky&$80 : goto *owari
	es_pos 0,myx,myy
	es_cls 0,70,60	
	es_draw			
	es_sync	16	
	await 0
	goto *main
//弾発射処理
*Fire
	es_get type,enid,13
	es_get enx,enid,3
	es_get eny,enid,5
	if type=2 {
		if (b_tcnt(enid)\b_fps(enid))=0 {//b_tcnt(enid)/b_fps(enid)の余りが0なら発射
			repeat 3
				es_new a,2
				if a<0{break}
				es_set a,enx,eny,3,1
				es_type a,16
				es_adir a,b_ang(enid)+cnt*25,500//+25ずつずらして指定
			loop
		}
	}else{
		if (b_tcnt(enid)\b_fps(enid))=0 {
			repeat 60
				es_new a,2
				if a<0{break}
				es_set a,enx,eny,4,1
				es_type a,16
				es_adir a,b_ang(enid)+cnt*6,300//6度ずつずらして指定
			loop
		}
	}
return
*owari
	es_bye
	end