;*******************************
;* STAGE1 MAP DATA
;* LCD LINE0 DATA
;* LCD LINE1 DATA
;* LCD LINE2 DATA
;* LCD LINE3 DATA
;* EVENT NO
;*  EVENT NO &HFF - BOSS STAGE
;*******************************

INIT_DATA_STAGE1:
; INITIAL DATA(18POINT)
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0

STAGE1_MAP:
DB 1,0,0,0,0;READY,ERASE
DB 1,0,0,0,0;START,ERASE
DB 1,0,0,0,0;READY START DISPLAY END
DB 1,0,0,0,0;GAME START
DB 1,0,0,0,0;&HFF;&HF1;ITEM
;
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,1
DB 2,0,0,0,0
DB 2,0,0,0,1
DB 2,0,0,0,0
DB 2,0,0,0,1
DB 1,0,0,0,0
DB 3,0,0,0,0
DB 4,0,0,0,0
DB 1,0,0,0,0
DB 2,0,0,0,2
DB 2,0,0,0,0
DB 2,0,0,0,2
DB 5,0,0,0,0
DB 1,0,0,0,2
DB 1,0,0,0,0
DB 6,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 7,0,0,0,1
DB 1,0,0,0,0
DB 1,0,0,0,2
DB 1,0,0,0,0
DB 1,0,0,0,1
DB 8,0,0,0,0
DB 1,0,0,0,2
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 9,0,0,0,0
DB 11,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 9,0,0,0,0
DB 10,0,0,0,1
DB 10,0,0,0,1
DB 10,0,0,0,1
DB 10,0,0,0,1
DB 11,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,2
DB 1,0,0,0,0
DB 1,0,0,0,2
DB 7,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 8,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,3
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 12,0,0,0,0
DB 7,0,0,0,0
DB 5,0,0,0,0
DB 12,0,0,0,0
DB 12,0,0,0,0
DB 13,0,0,0,0
DB 7,0,0,0,0
DB 13,0,0,0,0
DB 12,0,0,0,0
DB 7,0,0,0,0
DB 13,0,0,0,0
DB 12,0,0,0,1
DB 12,0,0,0,2
DB 12,0,0,0,0
DB 7,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 3,0,0,0,0
DB 4,0,0,0,0
DB 3,0,0,0,0
DB 4,0,0,0,3
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 2,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,&HF2;ITEM
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 1,0,0,0,0
DB 14,0,0,0,0
DB 14,0,0,0,0
DB 14,0,0,0,0
DB 15,0,0,0,0
DB 1,0,0,0,0
DB 14,0,0,0,0
DB 14,0,0,0,0
DB 1,0,0,0,&HFF ;BOSS

;******************************************************
;*              STAGE1 MAP CHARACTOR
;******************************************************
STAGE1_MAP_CHARA:
MAP1_CHR00:DB 0,0,0,0,0,0,0,0 ;無地背景
MAP1_CHR01:DB &H03,&H03,&H03,&H03,&H03,&H03,&H03,&H03 ;ROAD
MAP1_CHR02:DB &H02,&H01,&H02,&H01,&H02,&H01,&H02,&H01 ;WATER
MAP1_CHR03:DB &H03,&H03,&H03,&H0C,&H14,&H24,&H3C,&H24 ;BRIDGE_L
MAP1_CHR04:DB &H3C,&H24,&H3C,&H24,&H14,&H0C,&H04,&H03 ;BRIDGE_R
MAP1_CHR05:DB &H07,&H23,&H7F,&H23,&H03,&H03,&H03,&H03 ;ANTENA
MAP1_CHR06:DB &H03,&H03,&H0B,&H2B,&H93,&H6F,&H03,&H03 ;RADAR
MAP1_CHR07:DB &H03,&H03,&H0F,&H0B,&H0F,&H03,&HFF,&H03 ;COMM HOUSE
MAP1_CHR08:DB &H03,&H07,&H1F,&H2F,&H5F,&HEF,&H3F,&H1F ;SOLO MOUNTAIN
MAP1_CHR09:DB &H03,&H0F,&H17,&H2F,&H77,&HBF,&HE7,&HDF ;LEFT MOUNTAIN
MAP1_CHR10:DB &HFF,&H7F,&H7F,&HCF,&HBF,&H5F,&HFF,&H7F ;CENTER MOUNTAIN
MAP1_CHR11:DB &HBF,&H5F,&HFF,&H7F,&H3F,&H1F,&H0F,&H07 ;RIGHT MOUNTAIN
MAP1_CHR12:DB &H03,&H3F,&H2B,&H3F,&H2B,&H3F,&H03,&H03 ;BUILDING(MIDDLE)
MAP1_CHR13:DB &HFF,&HAB,&HFF,&HAB,&HFF,&HAB,&HFF,&H03 ;BUILDING(TALL)
MAP1_CHR14:DB &H0B,&H0F,&H1B,&H03,&H03,&H0B,&H0F,&H1B ;AIRPORT(AIR PLANE)
MAP1_CHR15:DB &H03,&H03,&H23,&H3F,&HFF,&H23,&H03,&H03 ;AIRPORT(TOWER)

;******************************************************
;*              STAGE1 ENEMY CHARACTOR
;******************************************************
CHR_ST1_01:DB &H38,&H7E,&H77,&H17,&H17,&H3F,&H68,&HF8
CHR_ST1_02:DB &H3C,&H5B,&H9B,&HFB,&H7F,&H2E,&H6E,&HF8
CHR_ST1_03:DB &H3C,&H6F,&H4B,&H7B,&H1B,&H3A,&H6E,&HF8

;******************************************************
;*              STAGE1 BOSS CHARACTOR
;******************************************************
CHR_BOSS1_1_1:
DB	&H07,&H07,&H04,&H04,&H0C,&H09,&H0A,&H0A
CHR_BOSS1_2_1:
DB	&H12,&H12,&H12,&H21,&H20,&H30,&H40,&H98
CHR_BOSS1_3_1:
DB	&HA0,&HA0,&HA0,&HA0,&HA0,&HB0,&H8F,&H40
CHR_BOSS1_4_1:
DB	&H3F,&H10,&H10,&H10,&H10,&H10,&H08,&H08
CHR_BOSS1_5_1:
DB	&H08,&H08,&H08,&H08,&H08,&H08,&H08,&H08
CHR_BOSS1_6_1:
DB	&H14,&H14,&H14,&H14,&H22,&H22,&H21,&H21
CHR_BOSS1_7_1:
DB	&H21,&H41,&H41,&HC1,&H81,&HFF,&H01,&H01
CHR_BOSS1_1_2:
DB	&HFC,&H84,&H7C,&H06,&H01,&HF1,&H09,&HE9
CHR_BOSS1_2_2:
DB	&HE9,&HE9,&H09,&HF1,&H03,&H05,&H05,&H25
CHR_BOSS1_3_2:
DB	&H91,&H52,&H52,&H52,&H52,&H92,&H12,&H22
CHR_BOSS1_4_2:
DB	&HC2,&H02,&H02,&H02,&H02,&H02,&H01,&H03
CHR_BOSS1_5_2:
DB	&H05,&H05,&H09,&H11,&H21,&H41,&H41,&H41
CHR_BOSS1_6_2:
DB	&H41,&H41,&H21,&H01,&H01,&H01,&H01,&H02
CHR_BOSS1_7_2:
DB	&HFE,&HA2,&HA2,&HE2,&HBC,&H80,&H80,&H80
;BOSS1_FIRE
CHR_BOSS1_FIRE:DB &H7E,&H42,&HC3,&HBD,&HE7,&HDB,&HA5,&H18

;******************************************************
;*              STAGE1 SENARIO INITIALIZE
;******************************************************
STAGE_1_INIT:
PRE IX,BASE_SENARIO_PTR
LDW $0,SCENARIO
STW $0,(IX+$31)

PRE IX,SCENARIO
LDW $0,ST1_SCENARIO_00 ;DUMMY
STIW $0,(IX+$31)
LDW $0,ST1_SCENARIO_01
STIW $0,(IX+$31)
LDW $0,ST1_SCENARIO_02
STIW $0,(IX+$31)
LDW $0,ST1_SCENARIO_03
STIW $0,(IX+$31)
;シナリオを16以上追加する場合はここを修正
RTN

;**********************************
;*    STAGE1 SCENARIO DATA
;*      (9BYTE:MAX64POINT)
;* 1:TIMING(出現タイミング+カウント(今回は1ドットスクロールなので0～7))
;* 2:ENEMY NO
;* 3:X
;* 4:Y
;* 5:LENGTH-X
;* 6:LENGTH-Y
;* 7:FREE
;* 8:FREE
;* 9:EXTRA
;* 10～18：0で自動初期化
;*
;*注意:1 必ず9BYTE定義すること
;*注意:2 10～18バイト目は自動的に0で初期化される
;*
;**********************************
ST1_SCENARIO_00: ;出現しない
ST1_SCENARIO_01:
DB 0,10,136,16,8,8,0,0,&H00,2,1
DB 2,10,136,24,8,8,0,0,&H00,2,1
DB 2,10,136,8,8,8,0,0,&H00,2,1
DB &HFF ;END CODE
ST1_SCENARIO_02:
DB 0,11,136,8,8,8,16,4,&H00,3,1
DB 4,11,136,24,8,8,16,4,&H00,3,1
DB &HFF ;END CODE
ST1_SCENARIO_03:
DB 0,12,136,8,8,8,8,0,&H00,4,1
DB 4,12,136,24,8,8,8,0,&H00,4,1
DB &HFF ;END CODE

;シナリオは64まで記述可だが今は16のみ
;16以上追加する場合はSTAGE_1_INITを修正

;****************************
;* 高度低下の警報、地面激突処理
;****************************
MY_ALT_CHECK:
PRE IX,MY_Y
LD $11,(IX+$31)
SBC $11,30
RTN C
LD $11,30
ST $11,(IX+$31)
RTN

;*********************************
;*        ENEMY MOVE
;*
;*********************************
ST1_ENEMY_MOVE:
;
;**********************************
;STAGE1では自機のY座標は30以上にしない処理を行う
;***********************************
;
CAL MY_ALT_CHECK
;

LD $28,$31

ST1_ENEMYMOVE_LP:
PRE IX,ENEMY_DATA
;
PHU $28
;
LDM $9,(IX+$28),8
SBC $9,$31
JR Z,NEXT_ST1_ENEMY_M
;-------- NO JUDGE(1-7) ------------
;----------- BULLET(8) -------------
SBC $9,8
JR Z,ST1_ENEMY09_MOVE;BULLET
;---------- BOSS CORE(9) -----------
;---------- NORM(10-255)------------
SBC $9,10
JP Z,ST1_ENEMY10_MOVE;ST1_ENEMY_01
SBC $9,11
JP Z,ST1_ENEMY11_MOVE;ST1_ENEMY_02
SBC $9,12
JP Z,ST1_ENEMY12_MOVE;ST1_ENEMY_03

NEXT_ST1_ENEMY_M:
;
PPU $28
;
AD $28,ENEMY_STRUCT

JR NC,ST1_ENEMYMOVE_LP

RTN

ST1_ENEMY09_MOVE:;BULLET
CAL MOVE_BULLET
JP NEXT_ST1_ENEMY_M

ST1_ENEMY10_MOVE:
;X移動
SB $10,2;X=X-2
;X<0ならオブジェクトを消す
SBC $10,180
JP NC,ST1_KILL_ENEMY
;DATA SAVE
JP END_ST1ENEMYMOVE

ST1_ENEMY11_MOVE:
;X移動
SB $10,2;X=X-2
;X<0ならオブジェクトを消す
JP C,ST1_KILL_ENEMY

;Y移動
;4回に1回自機のY座標に合致するよう動く
SB $15,$30
JR NZ,ST1_ENEMY11_FIRE
LD $15,4
PRE IZ,MY_Y
LD $0,(IZ+$31)
SBC $11,$0;
JR Z,ST1_ENEMY11_FIRE;ENEMY03_Y=MY_YならY移動しない
JR C,ST1_ENEMY11_YADD;ENEMY03_Y<MY_YならY=Y+1
SB $11,$30;上記以外はY=Y-1
JR ST1_ENEMY11_FIRE
ST1_ENEMY11_YADD:
AD $11,$30

ST1_ENEMY11_FIRE:
;カウンターを減じ、0フラグがたったらテンキーで4の方向に弾を発射する。
SB $14,$30
JP NZ,END_ST1ENEMYMOVE
LD $5,4  ;弾を発射するテンキーの方向
PHU $11
AD $11,4;弾のY座標を補正
CAL INSERT_BULLET;IX破壊
PPU $11
LD $14,16;弾発射カウンター初期化
;DATA SAVE
JP END_ST1ENEMYMOVE

ST1_ENEMY12_MOVE:
;X移動
SB $10,$30;X=X-1
;X<0ならオブジェクトを消す
SBC $10,5
JP C,ST1_KILL_ENEMY

;カウンターを減じ、キャリーフラグがたったら3方向に弾を発射する。
;ENEMY_X>MY_Xなら左側、ENEMY_X<MY_Xなら右側
SB $14,$30
JR NC,END_ST1ENEMYMOVE

;弾のX,Y座標を補正
PHUW $11
AD $10,4
AD $11,4

PRE IZ,MY_X
LD $0,(IZ+$31)
SBC $10,$0;ENEMY_X-MY_X<0?
JR NC,ST1_ENEMY12FIREL
LD $5,9  ;弾を発射するテンキーの方向
CAL INSERT_BULLET;IX破壊
LD $5,6  ;弾を発射するテンキーの方向
CAL INSERT_BULLET;IX破壊
LD $5,3;弾を発射するテンキーの方向
CAL INSERT_BULLET;IX破壊
JR ST1_ENEMY12FIREE
ST1_ENEMY12FIREL:
LD $5,1;弾を発射するテンキーの方向
CAL INSERT_BULLET;IX破壊
LD $5,4;弾を発射するテンキーの方向
CAL INSERT_BULLET;IX破壊
LD $5,7;弾を発射するテンキーの方向
CAL INSERT_BULLET;IX破壊

ST1_ENEMY12FIREE:
LD $14,8;弾発射カウンター初期化
PPUW $10

;DATA SAVE
;JP END_ST1ENEMYMOVE

END_ST1ENEMYMOVE:
PRE IX,ENEMY_DATA
STM $9,(IX+$28),8
JP NEXT_ST1_ENEMY_M

ST1_KILL_ENEMY:
CAL DELETE_OBJECT
JP NEXT_ST1_ENEMY_M

;*********************************
;*        STAGE1 ENEMY DISP
;*********************************
ST1_ENEMY_DISP:

LD $28,$31

ST1_ENEMYDISP_LP:
PRE IX,ENEMY_DATA

LDM $9,(IX+$28),8
SBC $9,$31
JR Z,NEXT_ST1_ENEMY_D
;
PHU $28
;
;GPRINTのRTN命令でRTN_ST1_EDISPに戻れるようにするため、RTN_ST1_EDISPのアドレスを
;SSPにPUSHしておく。
;なおGPRINTからの復帰はRTNでありSSPにスタックされたアドレス+1からプログラムを実行するため
;RTN_ST1_EDISPのアドレスから-1したものをSSPにPUSHする。
LDW $0,RTN_ST1_EDISP-1
PHSW $1

SBC $9,8
JR Z,ST1_ENEMY08_DISP;BULLET
SBC $9,10
JP Z,ST1_ENEMY10_DISP
SBC $9,11
JP Z,ST1_ENEMY11_DISP
SBC $9,12
JP Z,ST1_ENEMY12_DISP

;JUMPしなかった場合はSSPを戻す。
PPSW $0

RTN_ST1_EDISP:
;
PPU $28
;
NEXT_ST1_ENEMY_D:

AD $28,ENEMY_STRUCT

JR NC,ST1_ENEMYDISP_LP

RTN

ST1_ENEMY08_DISP:;BULLET
LDW $13,@CHR_BULLET
#if (USE_LIB=FAST_LIB)
JP SGPRINT_4
#else
LD $12,8
JP GPRINT
#endif

ST1_ENEMY10_DISP:
LD $12,8
LDW $13,SG_CHR_DATA03
#if (USE_LIB=NORMAL_G)
JP GPRINT
#endif
#if(USE_LIB=SUPER_GP)
JP SGPRINT
#endif
#if(USE_LIB=FAST_LIB)
JP SGPRINT_FAST
#endif

ST1_ENEMY11_DISP:
LD $12,8
LDW $13,SG_CHR_DATA04
#if (USE_LIB=NORMAL_G)
JP GPRINT
#endif
#if(USE_LIB=SUPER_GP)
JP SGPRINT
#endif
#if(USE_LIB=FAST_LIB)
JP SGPRINT_FAST
#endif

ST1_ENEMY12_DISP:
LD $12,8
LDW $13,SG_CHR_DATA05
#if (USE_LIB=NORMAL_G)
JP GPRINT
#endif
#if(USE_LIB=SUPER_GP)
JP SGPRINT
#endif
#if(USE_LIB=FAST_LIB)
JP SGPRINT_FAST
#endif

;*********************************
;*          BOSS1 INIT
;*  +0($9)  種類(0:未使用フラグ,&H01～&HFF)
;*  +1($10)  x(必須)
;*  +2($11)  y(必須)
;*  +3($12)  キャラのXサイズ
;*  +4($13)  キャラのYサイズ
;*  +5($14)  NONE
;*  +6($15)  NONE
;*  +7($16)  LIFE
;*  +8($17)  SCORE
;*  +9($18)  DAMAGE
;**********************************
;NOTE
;
;BOSS1は1つのパーツで構成されている。
;PARTS Noは次のとおり
;
;          9------9 <- &H09:CORE
;          9------9
;
;
;動作の際は下記の各パーツのインデックスアドレスを
;直接指定してXを参照、変更している。
;
; 0:ENEMY_DATA_0 = &H09(09):BOSS1 CORE
;
; &H0A(10):連射弾
;
;ENEMY_DATA
;+0 Active Flag/CHARACTOR No(0:NO 1-8:NO JUDGE 9-:NORM)
;+1 X
;+2 Y
;+3 CHARACTOR X SIZE(当たり判定で使用するので必須)
;+4 CHARACTOR Y SIZE(当たり判定で使用するので必須)
;+5 COUNTER1
;+6 COUNTER2
;+7 LIFE
;------------------------------------------
;+8 SCORE
;+9 DAMAGE
;+A～+F FREE

BOSS1_DATA:
DB 09,40,&HF0,56,16,0,0,&H0A,1,10,0,0,0,0,0,0
BOSS1_DATA_END:

BOSS1_DATA_NUM:EQU 1;BOSS1のパーツ数

BOSS1_INIT:

;RXCNT
;ENEMY_DATA初期化
LDW $0,ENEMY_DATA
LDW $2,&H0FF
LDW $28,CLEME
CAL IOCS_CAL

;BOSS1を構成する位置データ等を転送
PRE IX,BOSS1_DATA
LDIM $17,(IX+$31),8
LDM $25,(IX+$31),2
CAL INSERT_OBJECT

;転送したBOSSデータを実体化する
CAL INSERT_OBJECT_ON

;ボス戦闘中フラグをONにする。
PRE IX,NOW_BOSS_FIGHT
ST $30,(IX+$31)
;ボス破壊フラグをOFFにする。
PRE IX,BOSS_DESTROY
ST $31,(IX+$31)
;ボスのデータ数(BOSS1:1)を設定にする。
PRE IX,BOSS_DATA_NUM
LD $0,BOSS1_DATA_NUM
ST $0,(IX+$31)
RTN

;************************************
;*              BOSS1 PRE
;*  (BOSS1 MOVE STANBY POSITION)
;************************************

BOSS1_PRE:
;
;**********************************
;STAGE1では自機のY座標は30以上にしない処理を行う
;***********************************
;
CAL MY_ALT_CHECK
;

PRE IX,ENEMY_DATA_00
LDW $0,(IX+$30)
AD $0,$30
AD $1,$30
STW $0,(IX+$30)

;BOSS1のX座標が72になったらボス戦に突入
SBC $0,72
RTN NZ
PRE IX,PHASE
LD $0,3
ST $0,(IX+$31) ;PHASE2->3
ST $31,(IX+$30) ;PHASE_COUNTER->0
RTN

;*********************************
;*          MOVE BOSS1
;*
;*USE:
;*      $0      WORK
;*      $2,$3   JUMP TABLE
;*      $9-$16  ENEMY DATA
;*      $28     COUNTER
;*      IX
;*      IZ
;*********************************
MOVE_BOSS1:
;
;**********************************
;STAGE1では自機の高度を30以上にしない処理を行う
;***********************************
;
CAL MY_ALT_CHECK
;
LD $28,$31

MOVE_BOSS1_LOOP:
PHU $28
PRE IX,ENEMY_DATA

LDM $9,(IX+$28),8

SBC $9,$31
JR Z,NEXT_MOVE_BOSS1
SBC $9,BOSS_CORE_NO;(09)
JR Z,BOSS1_P09_MOVE
SBC $9,10
JR Z,BOSS1_P10_MOVE

NEXT_MOVE_BOSS1:
PPU $28
AD $28,ENEMY_STRUCT
JR NC,MOVE_BOSS1_LOOP

RTN

BOSS1_P09_FIRE:
DB 10,0,0,8,8,0,0,&H00,1,1

BOSS1_P09_MOVE:

PRE IZ,GLOBAL_COUNTER
LD $0,(IZ+$31)
AN $0,&H03
JR NZ,END_BOSS1_FIRE

PHU $28

;キャラNO3で弾を発射
PRE IZ,BOSS1_P09_FIRE
LDIM $17,(IZ+$31),8
LDM $25,(IZ+$31),2

LD $18,$10
SB $18,8;X座標を補正
LD $19,$11
AD $19,4;Y座標を補正
CAL INSERT_OBJECT

PPU $28

END_BOSS1_FIRE:
PRE IX,ENEMY_DATA
PRE IZ,SECTION
LDW $0,(IZ+$31)
SBC $0,$30
JR Z,BOSS1P09_SEC1

BOSS1P09_SEC0:
SB $11,$30
SBC $11,8
JP NZ,END_BOSS1_MOVE
ST $30,(IZ+$31) ;BOSS1のY座標が8になったらSECTION1へ移行
JR END_BOSS1_MOVE

BOSS1P09_SEC1:
AD $11,$30
STM $9,(IX+$28),3
SBC $11,24
JP NZ,NEXT_MOVE_BOSS1
ST $31,(IZ+$31) ;BOSS1のY座標が24になったらSECTION0へ移行
JP NEXT_MOVE_BOSS1

BOSS1_P10_MOVE:
SB $10,4
JR C,ST1_KILL_BOSS
JR END_BOSS1_MOVE

ST1_KILL_BOSS:
CAL DELETE_OBJECT
JP NEXT_MOVE_BOSS1

END_BOSS1_MOVE:
PRE IX,ENEMY_DATA
STM $9,(IX+$28),8
JP NEXT_MOVE_BOSS1

;*********************************
;*        DISP BOSS1
;*
;*USE:
;*      $0      WORK
;*      $2,$3   JUMP TABLE
;*      $9-$16  ENEMY DATA
;*      $28     COUNTER
;*      IX
;*      IZ
;*********************************
DISP_BOSS1:
LD $28,$31

DISP_BOSS1_LOOP:

PRE IX,ENEMY_DATA

LDM $9,(IX+$28),8
SBC $9,$31
JR Z,NEXT_DISP_BOSS1
;
PHU $28
;
;GPRINTのRTN命令でRTN_ST1_DBOSS1に戻れるようにするため、RTN_ST1_DBOSS1のアドレスを
;SSPにPUSHしておく。
;なおGPRINTからの復帰はRTNでありSSPにスタックされたアドレス+1からプログラムを実行するため
;RTN_ST1_DBOSS1のアドレスから-1したものをSSPにPUSHする。
LDW $0,RTN_ST1_DBOSS1-1
PHSW $1

SBC $9,BOSS_CORE_NO;(09)
JR Z,BOSS1_P09_DISP
SBC $9,10
JP Z,BOSS1_P10_DISP

;JUMPしなかった場合はSSPを戻す。
PPSW $0

RTN_ST1_DBOSS1:
;
PPU $28
;
NEXT_DISP_BOSS1:
AD $28,ENEMY_STRUCT
JR NC,DISP_BOSS1_LOOP
RTN

BOSS1_P09_DISP:

PHUW $11
LD $12,8
LDW $13,SG_CHR_DATA09;CHAR_BOSS1_1_1
#if (USE_LIB=NORMAL_G)
CAL GPRINT
#endif
#if(USE_LIB=SUPER_GP)
CAL SGPRINT
#endif
#if(USE_LIB=FAST_LIB)
CAL SGPRINT_FAST
#endif
PPUW $10

PHUW $11
AD $11,8
LD $12,8
LDW $13,SG_CHR_DATA10;CHAR_BOSS1_1_2
#if (USE_LIB=NORMAL_G)
CAL GPRINT
#endif
#if(USE_LIB=SUPER_GP)
CAL SGPRINT
#endif
#if(USE_LIB=FAST_LIB)
CAL SGPRINT_FAST
#endif
PPUW $10

AD $10,8
PHUW $11
LD $12,8
LDW $13,SG_CHR_DATA11;CHAR_BOSS1_2_1
#if (USE_LIB=NORMAL_G)
CAL GPRINT
#endif
#if(USE_LIB=SUPER_GP)
CAL SGPRINT
#endif
#if(USE_LIB=FAST_LIB)
CAL SGPRINT_FAST
#endif
PPUW $10

PHUW $11
AD $11,8
LD $12,8
LDW $13,SG_CHR_DATA12;CHAR_BOSS1_2_2
#if (USE_LIB=NORMAL_G)
CAL GPRINT
#endif
#if(USE_LIB=SUPER_GP)
CAL SGPRINT
#endif
#if(USE_LIB=FAST_LIB)
CAL SGPRINT_FAST
#endif
PPUW $10

AD $10,8
PHUW $11
LD $12,8
LDW $13,SG_CHR_DATA13;CHAR_BOSS1_3_1
#if (USE_LIB=NORMAL_G)
CAL GPRINT
#endif
#if(USE_LIB=SUPER_GP)
CAL SGPRINT
#endif
#if(USE_LIB=FAST_LIB)
CAL SGPRINT_FAST
#endif
PPUW $10

PHUW $11
AD $11,8
LD $12,8
LDW $13,SG_CHR_DATA14;CHAR_BOSS1_3_2
#if (USE_LIB=NORMAL_G)
CAL GPRINT
#endif
#if(USE_LIB=SUPER_GP)
CAL SGPRINT
#endif
#if(USE_LIB=FAST_LIB)
CAL SGPRINT_FAST
#endif
PPUW $10

AD $10,8
PHUW $11
LD $12,8
LDW $13,SG_CHR_DATA15;CHAR_BOSS1_4_1
#if (USE_LIB=NORMAL_G)
CAL GPRINT
#endif
#if(USE_LIB=SUPER_GP)
CAL SGPRINT
#endif
#if(USE_LIB=FAST_LIB)
CAL SGPRINT_FAST
#endif
PPUW $10

PHUW $11
AD $11,8
LD $12,8
LDW $13,SG_CHR_DATA16;CHAR_BOSS1_4_2
#if (USE_LIB=NORMAL_G)
CAL GPRINT
#endif
#if(USE_LIB=SUPER_GP)
CAL SGPRINT
#endif
#if(USE_LIB=FAST_LIB)
CAL SGPRINT_FAST
#endif
PPUW $10

AD $10,8
PHUW $11
LD $12,8
LDW $13,SG_CHR_DATA17;CHAR_BOSS1_5_1
#if (USE_LIB=NORMAL_G)
CAL GPRINT
#endif
#if(USE_LIB=SUPER_GP)
CAL SGPRINT
#endif
#if(USE_LIB=FAST_LIB)
CAL SGPRINT_FAST
#endif
PPUW $10

PHUW $11
AD $11,8
LD $12,8
LDW $13,SG_CHR_DATA18;CHAR_BOSS1_5_2
#if (USE_LIB=NORMAL_G)
CAL GPRINT
#endif
#if(USE_LIB=SUPER_GP)
CAL SGPRINT
#endif
#if(USE_LIB=FAST_LIB)
CAL SGPRINT_FAST
#endif
PPUW $10

AD $10,8
PHUW $11
LD $12,8
LDW $13,SG_CHR_DATA19;CHAR_BOSS1_6_1
#if (USE_LIB=NORMAL_G)
CAL GPRINT
#endif
#if(USE_LIB=SUPER_GP)
CAL SGPRINT
#endif
#if(USE_LIB=FAST_LIB)
CAL SGPRINT_FAST
#endif
PPUW $10

PHUW $11
AD $11,8
LD $12,8
LDW $13,SG_CHR_DATA20;CHAR_BOSS1_6_2
#if (USE_LIB=NORMAL_G)
CAL GPRINT
#endif
#if(USE_LIB=SUPER_GP)
CAL SGPRINT
#endif
#if(USE_LIB=FAST_LIB)
CAL SGPRINT_FAST
#endif
PPUW $10

AD $10,8
PHUW $11
LD $12,8
LDW $13,SG_CHR_DATA21;CHAR_BOSS1_7_1
#if (USE_LIB=NORMAL_G)
CAL GPRINT
#endif
#if(USE_LIB=SUPER_GP)
CAL SGPRINT
#endif
#if(USE_LIB=FAST_LIB)
CAL SGPRINT_FAST
#endif
PPUW $10

;PHUW $11
AD $11,8
LD $12,8
LDW $13,SG_CHR_DATA22;CHAR_BOSS1_7_2
#if (USE_LIB=NORMAL_G)
JP GPRINT
#endif
#if(USE_LIB=SUPER_GP)
JP SGPRINT
#endif
#if(USE_LIB=FAST_LIB)
JP SGPRINT_FAST
#endif
;PPUW $10

BOSS1_P10_DISP:

LDW $13,SG_CHR_DATA08;BOSS FIRE
#if (USE_LIB=NORMAL_G)
JP GPRINT
#endif
#if(USE_LIB=SUPER_GP)
JP SGPRINT
#endif
#if(USE_LIB=FAST_LIB)
JP SGPRINT_FAST
#endif

;**********************************
;*      BOSS1撃破時の処理
;*RTN CODE:
;*    $5 - 0:継続 1:次のフェーズに移行
;**********************************
BOSS_DEF_ST1:
;
;**********************************
;STAGE1では自機のY座標は30以上にしない処理を行う
;***********************************
;
CAL MY_ALT_CHECK

;RTN CODE 0:継続をセット
LD $5,$31

;下へ降下
PRE IX,ENEMY_DATA_00;CORE
LDM $9,(IX+$31),3
AD $11,$30
STM $9,(IX+$31),3

PRE IX,EXTRA_COUNTER
AD (IX+$31),$30
LD $0,40
SBC (IX+$31),$0
RTN NZ
;RTN CODE 1:次のフェーズに移行をセット
LD $5,$30
RTN

;**********************************
;*      ST1_INIT_GRAPHIC
;**********************************

ST1_INIT_GRAPHIC:
LDW $0,0;自機
LDW $2,CHR_FIGHTER
CAL SET_SGPRINT_DATA

LDW $0,1;MY BOMB L
LDW $2,CHR_BOMB_L
CAL SET_SGPRINT_DATA

LDW $0,2;MY_BOMB_R
LDW $2,CHR_BOMB_R
CAL SET_SGPRINT_DATA

;ENEMY
LDW $0,3
LDW $2,CHR_ST1_01;ST1_ENEMY_01
CAL SET_SGPRINT_DATA

LDW $0,4
LDW $2,CHR_ST1_02;ST1_ENEMY_02
CAL SET_SGPRINT_DATA

LDW $0,5
LDW $2,CHR_ST1_03;ST1_ENEMY_03
CAL SET_SGPRINT_DATA

;BOSS
LDW $0,8;BOSS FIRE
LDW $2,CHR_BOSS1_FIRE
CAL SET_SGPRINT_DATA

LDW $0,9;BOSS
LDW $2,CHR_BOSS1_1_1
CAL SET_SGPRINT_DATA

LDW $0,10;BOSS
LDW $2,CHR_BOSS1_1_2
CAL SET_SGPRINT_DATA

LDW $0,11;BOSS
LDW $2,CHR_BOSS1_2_1
CAL SET_SGPRINT_DATA

LDW $0,12;BOSS
LDW $2,CHR_BOSS1_2_2
CAL SET_SGPRINT_DATA

LDW $0,13;BOSS
LDW $2,CHR_BOSS1_3_1
CAL SET_SGPRINT_DATA

LDW $0,14;BOSS
LDW $2,CHR_BOSS1_3_2
CAL SET_SGPRINT_DATA

LDW $0,15;BOSS
LDW $2,CHR_BOSS1_4_1
CAL SET_SGPRINT_DATA

LDW $0,16;BOSS
LDW $2,CHR_BOSS1_4_2
CAL SET_SGPRINT_DATA

LDW $0,17;BOSS
LDW $2,CHR_BOSS1_5_1
CAL SET_SGPRINT_DATA

LDW $0,18;BOSS
LDW $2,CHR_BOSS1_5_2
CAL SET_SGPRINT_DATA

LDW $0,19;BOSS
LDW $2,CHR_BOSS1_6_1
CAL SET_SGPRINT_DATA

LDW $0,20;BOSS
LDW $2,CHR_BOSS1_6_2
CAL SET_SGPRINT_DATA

LDW $0,21;BOSS
LDW $2,CHR_BOSS1_7_1
CAL SET_SGPRINT_DATA

LDW $0,22;BOSS
LDW $2,CHR_BOSS1_7_2
CAL SET_SGPRINT_DATA

RTN
