;グレネードイメージ消去 CALL ClearGrenade ;敵セット更新 LD A, (D_AdrEnemyset) INC A AND 03H LD (D_AdrEnemyset), A RRCA RRCA ;A=00H,40H,80H,C0H LD L, A LD H, D_AdrEnemyH LD B, 0AH ;10台/セット L_EM01: LD DE, (HL) ;X座標 PUSH DE INC L INC L LD DE, (HL) ;Y座標 PUSH DE INC L INC L EXX POP HL ;HL':Y座標 POP DE ;DE':X座標 EXX LD A, (HL) ;ステータス INC L ;HL:敵位置キャラアドレス LD C, A ;A待避 ;00H:移動1通常,01H:移動1破壊確定 ;02H:移動2通常,03H:移動2破壊確定 CP 04H JP C, P_EM10: ;敵移動処理 ;04H:移動1未移動,05H:移動2未移動 CP 06H JP C, P_EM20: ;敵移動開始判定 ;敵なし:FFH CP 0FFH JR Z, P_EM90: ;06H-07H:固定1通常/破壊確定, ;08H-09H:固定2通常/破壊確定, ;0AH-0Dh:爆発中,0EH:破壊後 ;移動後の敵キャラ描画 ;A:ステータス(00-0E) ;HL:敵キャラバックアドレス ;DE':X座標, HL':Y座標 P_EM80: LD D, D_AdrECharH ADD A, D_AdrECharL LD E, A LD A, (DE) ;敵キャラ色 EX AF, AF' ;一旦裏に待避 EXX ;裏に移動 LD B, H ;Y座標整数部 LD C, D ;X座標整数部 ;現在(移動後)敵位置のバック色取得 LD A, (BC) EXX ;表に移動 LD (HL), A EXX ;裏に移動 EX AF, AF' ;敵キャラ色戻し LD (BC), A EXX ;表に移動 ;爆発中ならステータス+1 LD A, E AND 0FH ;ステータス CP 0AH JR C, P_EM90: CP 0EH JR NC, P_EM90: INC A DEC L LD (HL), A INC L ;ループ後処理 P_EM90: INC L ;次の敵キャラ情報へ DJNZ P_EM01: RET ;● 敵移動開始判定 ;A:04H-05H ;HL:敵ステータスアドレス ;DE':敵X座標, HL':敵Y座標 P_EM20: EXX LD C, 00H ;自機Xの±10か? LD A, (D_AdrX) ADD A, 0AH ;=10 SUB D CP 15H ;=10x2+1 JR NC, P_EM11: LD C, 0FCH ;C=-4 JR P_EM12: P_EM11: ;自機Yの±10か? LD A, (D_AdrY) ADD A, 0AH ;=10 SUB H CP 15H ;=10x2+1 JR NC, P_EM12: LD C, 0FCH ;C=-4 P_EM12: LD A, C EXX ;自機XorYの±10ならステータス-4 ADD A, (HL) LD (HL), A INC L JP P_EM80: ;● 敵移動処理 ;A:00H-03H ;HL:敵ステータスアドレス ;DE':敵X座標, HL':敵Y座標 P_EM20: EX AF, AF' ;ステータス待避 ;移動前敵座標の待避 PUSH HL PUSH DE ;敵キャラを一旦消去 INC L ;HL:敵位置バック色アドレス LD A, (HL) EXX ;裏に移動 LD B, H ;Y座標整数部 LD C, D ;X座標整数部 LD (BC), A LD BC, 0000H LD A,(D_AdrX) ;自機X座標 CP D JR Z, P_EM23: ;自機X=敵X JR C, P_EM21: ;自機X>敵X LD BC, 0FF45H ;-0.7 JR P_EM23: P_EM21: LD C, 0BBH ;+0.7 P_EM23: LD A, (D_AdrY) CP H JR NZ, P_EM25: ;自機Y=敵YならX移動量最大にする ;0000->0000,FF45->FF01,0045->00FF LD A, C CP 45H JR Z, P_EM24: JR C, P_EM25: LD C, 0FFH JR P_EM25: P_EM24: LD C, 01H P_EM25: ;敵X加算 EX DE, HL ADD HL, DE EX DE, HL LD A, C LD BC, 0000H INC A CP 01H JR Z, P_EM26: CP 45H JR C, P_EM28: LD C, 45H JR P_EM27: P_EM26: LD C, 0FFH P_EM27: LD A, (D_AdrY) CP H JR NC, P_EM28: LD A, C CPL ;符号逆転 LD C, A DEC B ;=FFH P_EM28: ;敵Y加算 ADD HL, BC ;移動先の当たり判定チェック LD B, H LD C, D LD A, (BC) LD B, D_AdrColliH LD C, A LD A, (BC) AND A JR Z, P_EM31: ;移動前の状態に戻す POP HL POP DE JR P_EM32: P_EM31: ;移動前情報を捨てる POP AF POP AF P_EM32: EXX EX AF, AF' JP P_EM80: ;敵キャラ描画に移る