お詫びと訂正
「敵弾の出現」処理にバグがありました。お詫びして訂正します。
敵が弾を連射する時に、弾が変な位置に出てしまうことがあるというものです。
敵のy座標が0未満の場合は弾を出さないようにしているのですが、例えば5発連射する時に、最初の2発はy座標が0未満だったので出さなかったが、3発目の時に0以上になったので出した、という時に起こります。
1発目の座標(fstx,fsty)が設定されていないのでそうなります。
(誤)
; 敵弾の出現 repeat 10 k=enekind.cnt l=32*(eneclass.k+1) if ((enemyf.cnt=1)|(enemyf.cnt=2))&(enemyx.cnt>=0) &(enemyx.cnt<=(xsize-l))&(enemyy.cnt>=0) &(enemyy.cnt<=(ysize-l)) { n=cnt f=0 i=0 s=bfrtime.k if enemycnt.n<s { continue } repeat p=shotpat.k.i repeat nbatshot.p if enemycnt.n=s { f=1 j=cnt break } if enemycnt.n<s { f=2 break } if cnt!(nbatshot.p-1) { s=s+btwtime.p } loop if f!0 { break } s=s+afttime.p i=i+1 if shotpat.k.i=-1 { i=0 } if shotpat.k.i=-2 { break } loop if f!1 { continue } if j=0 { fstx.n=enemyx.n+((l-8)/2) fsty.n=enemyy.n+((l-8)/2) if batdir.p=0 { fstangle.n=64 } else { ematan r,playerx+12-fstx.n,playery+12-fsty.n fstangle.n=(192-r)&255 } } m=0 repeat 100 if (eshotf.cnt=0)&(m<nbat.p) { eshotf.cnt=1 eshotx.cnt=fstx.n eshoty.cnt=fsty.n smeshotx.cnt=eshotx.cnt<<8 smeshoty.cnt=eshoty.cnt<<8 r=(fstangle.n+batangle.p.m+(dbatangle.p*j))&255 smeshotdx.cnt=shotspeed.p*vcos.r smeshotdy.cnt=shotspeed.p*vsin.r m=m+1 } if m=nbat.p { break } loop } loop
(正)
; 敵弾の出現 repeat 10 k=enekind.cnt l=32*(eneclass.k+1) if (enemyf.cnt=1)|(enemyf.cnt=2) { n=cnt f=0 i=0 s=bfrtime.k if enemycnt.n<s { continue } repeat p=shotpat.k.i repeat nbatshot.p if enemycnt.n=s { f=1 j=cnt break } if enemycnt.n<s { f=2 break } if cnt!(nbatshot.p-1) { s=s+btwtime.p } loop if f!0 { break } s=s+afttime.p i=i+1 if shotpat.k.i=-1 { i=0 } if shotpat.k.i=-2 { break } loop if f!1 { continue } if j=0 { fstx.n=enemyx.n+((l-8)/2) fsty.n=enemyy.n+((l-8)/2) if batdir.p=0 { fstangle.n=64 } else { ematan r,playerx+12-fstx.n,playery+12-fsty.n fstangle.n=(192-r)&255 } } if (enemyx.n>=0)&(enemyx.n<=(xsize-l))&(enemyy.n>=0) &(enemyy.n<=(ysize-l))&(fsty.n>=0) { m=0 repeat 100 if (eshotf.cnt=0)&(m<nbat.p) { eshotf.cnt=1 eshotx.cnt=fstx.n eshoty.cnt=fsty.n smeshotx.cnt=eshotx.cnt<<8 smeshoty.cnt=eshoty.cnt<<8 r=(fstangle.n+batangle.p.m +(dbatangle.p*j))&255 smeshotdx.cnt=shotspeed.p*vcos.r smeshotdy.cnt=shotspeed.p*vsin.r m=m+1 } if m=nbat.p { break } loop } } loop