;************************************************************************
;*									*
;*	title name	: "yossy"					*
;*	proccess	: enemy sub.1					*
;*	file name	: ys_enmy6					*
;*									*
;************************************************************************
;
;
		SALL
;
		include		ys_header.inc
		include		ys_unit.h
		include		ys_pld.h
		include		ys_color.h
		include		ys_ename.h
		include		../union/ys_bgcheck.h
;
		XALL
;
;
;------------------------------------------------------------------------
;-		global symbol						-
;------------------------------------------------------------------------
		GLB	BOMBXIN,ROTLFIN
		GLB	MBALLIN,AWANGIN,GENKIIN
		GLB	AWANMIN,AWANSIN,AWANPIN,BOBK0IN,BOBK1IN
		GLB	AHOBDIN,AHOB2IN
		GLB	KAMO0IN,KAMO1IN,AWAFKIN,ZSABOIN,STAMAIN
		GLB	ZFLWRIN,ZFLW2IN,JTAMAIN,HSAN1IN,DBAHOIN,MATO0IN
		GLB	DBAH2IN,BOMB0IN,JTAM2IN,BAHOBIN,ZSAB2IN,SW000IN
		GLB	YGOROIN
;
		GLB	BOMBXMV,ROTLFMV
		GLB	MBALLMV,AWANGMV,GENKIMV
		GLB	AWANMMV,AWANSMV,AWANPMV,BOBK0MV,BOBK1MV
		GLB	AHOBDMV,AHOB2MV
		GLB	KAMO0MV,KAMO1MV,AWAFKMV,ZSABOMV,STAMAMV
		GLB	ZFLWRMV,ZFLW2MV,JTAMAMV,HSAN1MV,DBAHOMV,MATO0MV
		GLB	DBAH2MV,BOMB0MV,JTAM2MV,BAHOBMV,ZSAB2MV,SW000MV
		GLB	YGOROMV
;
		GLB	LOCKON_TARGET,LOCKON_TARGET2
		GLB	TOGEBLK_BRK,CLR_BG_4
;
		GLB	MBALL_ENCHK,MATO0_DEATH_CHK
		GLB	DOKAN_CHECK,DOKAN_CHECK2
		GLB	FLOWER_GET
;
;------------------------------------------------------------------------
;-		extern symbol						-
;------------------------------------------------------------------------
;
;-------------< sy_main >------------------------------------------------
		EXT	D_00,GMIN
		EXT	SOUND_3_ON
;
;-------------< sy_rpro >------------------------------------------------
		EXT	JSRSUB
		EXT	CHIPON
		EXT	CHIPON_RAM_READ
;
;-------------< sy_play >------------------------------------------------
		EXT	EBSTAT
		EXT	PFAL,PSTP,PMOV
		EXT	PFLP,PSHT,PDEM,PRET
		EXT	PUSHTM,PUSHPT
;
;-------------< sy_bgsc >------------------------------------------------
		EXT	BGCG,TGTM
		EXT	UNITCHG
;
;-------------< sy_enmy >------------------------------------------------
		EXT	ENEMY,ENINSB
		EXT	ENMOVE,ENCLEAR,ENCLEAR_NORETN,DISPCK0,DISPCK1,DISPCK2,DISPCK3
		EXT	ENINSR,ENINSR_I,ENINSR2,EEXCHK,EEYCHK,EEXYCK,ESTATST
		EXT	PLFLST_2,ENRINT
		EXT	SCOREST
		EXT	ENMDCK,XSDOWN,EPCRCK,MUKEOR,XSPEOR,MKEOR2,PLFLST
		EXT	EGGSET,EGG_SP_CHECK,EGG_OPTION,EGGKILL_ALL
		EXT	SHOT_EN_KILL,SHOT_EN_KILL_S
		EXT	EXIST_CHECK,EXIST_CHECK_S,NON_EXIST_SET,NON_EXIST_SET2
;
		EXT	ENDEATH_SET,ENDEATH_SET_4
;
		EXT	PL_1UP_SET,PL_3UP_SET,PL_UP_SET,BEAT_P_SET
;
		EXT	EINIT,EFAIL,ECHNG,EMOVE,EEATM,ENOSE,EBABL,EFALL
;
		EXT	EATMXS,NOSWT
;
		EXT	ENFAIL0
;
		EXT	EN_XYMOVE,EN_TIMER
;
		EXT	FSMK0_SET,FSMK0_SET2,FSMK0_SET3
;
		EXT	TROBJ_SR_2x2,TROBJ_SR_4x4,TROBJ_SR_8x8,TROBJ_SR_8x4
		EXT	TROBJ_SR_2x2_CL,TROBJ_SR_4x4_CL,TROBJ_SR_8x8_CL
		EXT	TROBJ_SR_8x4_CL
		EXT	TROBJ_OAM_8x4
		EXT	TROBJ_OAM_2x2,TROBJ_OAM_4x4,TROBJ_OAM_8x8,TROBJ_OAM_8H8
		EXT	TROBJ_OAM_2x2_I,TROBJ_OAM_4x4_I,TROBJ_OAM_8x8_I
		EXT	TROBJ_CLEAR,TROBJ_CANCEL
		EXT	TROBJ_PLOT_X,TROBJ_PLOT_Y
;
;-------------< sy_enmy2 >------------------------------------------------
		EXT	NLFLRIN,NLFUDIN
;
		EXT	TAMA_NORI_XREV
		EXT	HEIH0_KIND_CHK,HEIH0_DEATH_CHK
;
;-------------< sy_enmy3 >------------------------------------------------
		EXT	POBBGCR
		EXT	ICE_IN_CK,MONKY_FAIL_SET
		EXT	GO_NEXTGOTO
;
;-------------< sy_enmy4 >------------------------------------------------
		EXT	ZOOM_PLCHK
;
		EXT	TIMKN_3_SET
;
		EXT	ST_ENMY_REFRECT
;
		EXT	YUKID_PLCHK3,YUKID_PL_REVISE,YUKID_PL_REV2
;
;-------------< ys_enmy8 >------------------------------------------------
		EXT	AWANH_BGBR0_SET
		EXT	SHOT_EN_KILL_SP,SHOT_EN_KILL_S2
;
;-------------< sy_exst >------------------------------------------------
		EXT	EXINSR
;
;-------------< sy_game >------------------------------------------------
		EXT	FWR_MSG
;
;-------------< sy_unit >------------------------------------------------
		EXT	UNDTADD,UNDATA,RUTDATA
;
;-------------< ys_data >------------------------------------------------
		EXT	SIN,COS
;
;------------------------------------------------------------------------
;-		define symbol						-
;------------------------------------------------------------------------
BABY_INDEX	EQU	00H
;
;
;
;************************************************************************
;*									*
;*		program start						*
;*									*
;************************************************************************
;
		EXTEND
;
		MEM16
		IDX8
;
		DPAGE	EN0RAM
;
Group_E		GROUP	Enemy6_pro
Enemy6_pro	SECT	REL
;
;************************************************************************
;*		dummy subroutine					*
;************************************************************************
DUMMY_SUB	EQU	$
		TYX
		RTS
;
;************************************************************************
;*		initial ( ばくだん )					*
;************************************************************************
BOMBXIN		EQU	$			;-- bombxin --
BOMB0IN		EQU	$			;-- bomb0in --
;;;;;;;;		LDA	#0110100000100000B	;食えるようにする
;;;;;;;;		STA	ENMOD1,X

		LDA	<RANDM0
		AND	#0001FH
		CLC
		ADC	#00030H
		STA	<ENCONT,X
		M8
		LDA	#07FH
		STA	ENWTSP,X
		M16
		INC	<ENWRK4,X

		RTL
;
;************************************************************************
;*		move	( ばくだん )					*
;************************************************************************
;		ENWRK0	誰かに持たれてるフラグ（持ってるやつのROUTINE INDEX）
;		ENWRK2	ROUTINE MODE INDEX
;		ENWRK4	爆発許可フラグ
;		ENWRK6	ＢＧチェックインデックス
;		ENWRK8
;		ENWRKA
;		ENWRKC	ＢＧチェックインデックス
;
;		ENCONT	水中爆雷タイマー
;
BOMB0MV		EQU	$			;-- bomb0mv --
		LDY	ENSHOT,X
		BEQ	BOMBXMV0050

		LDY	ECRSFG,X
		BMI	BOMBXMV0600

BOMBXMV		EQU	$			;-- bombxmv --
BOMBXMV0050	EQU	$
		JSL	>ENMDCK

		LDY	<ENWRK2,X
		BEQ	BOMBXMV0080

		JSR	BOMBX_BGBR

		RTL

BOMBXMV0080	EQU	$
		LDY	<ENWRK0,X		;誰かに持たれてる ?
		BEQ	BOMBXMV0100		;  no: BOMBXMV0100

		LDA	ENMODE,Y
		CMP	#EMOVE
		BNE	BOMBXMV0600
		JMP	BOMBXMV0880

BOMBXMV0100	EQU	$
		LDY	ECRSFG,X		;プレイヤーと接触した ?
		BMI	BOMBXMV0600		; yes: BOMBXMV0600
		BEQ	BOMBXMV0180

		LDA	ENMYNO-1,Y		;プレイヤーの魚雷 ?
		CMP	#MISA0			;
		BNE	BOMBXMV0180		;  no: BOMBXMV0180

		TYX
		DEX
		JSL	>ENDEATH_SET_4
		BRA	BOMBXMV0600

BOMBXMV0180	EQU	$
		LDA	ENTIM0,X		;起爆チェックしていい ?
		BNE	BOMBXMV0200		;  no: BOMBXMV0200

		LDY	ENYSPD+1,X
		BMI	BOMBXMV0190
;===========================
		LDA	!ENMYNO,X
		CMP	#BOMB0
		BEQ	BOMBXMV0190		; 大砲の弾？ [yes->BOMBXMV0190]
;
		LDA	ENMOD1,X
		AND	#0000000000011111B
		BEQ	BOMBXMV0198

		I16				;下のＢＧは坂 ?
		TXY				;
		LDA	ENWRKC,X		;
		TAX				;
		LDA	>ENBGCK_TYPE_F,X	;
		I8				;
		TYX				;
		AND	#SK			;
		BNE	BOMBXMV0300		; yes: BOMBXMV0300

BOMBXMV0190	EQU	$
		LDA	ENCBFG,X		;ＢＧにぶつかった ?
		AND	#0002FH			;
		BNE	BOMBXMV0300		; yes: BOMBXMV0300

BOMBXMV0198	EQU	$
		LDY	#001
		STY	<ENWRK4,X

BOMBXMV0200	EQU	$
		LDY	ENWATR,X		;水中 ?
		BEQ	BOMBXMV0230		;  no: BOMBXMV0230

		DEC	<ENCONT,X		;爆雷ＯＫ ?
		BMI	BOMBXMV0300		; yes: BOMBXMV0300

BOMBXMV0230	EQU	$
		JMP	BOMBXMV0800

BOMBXMV0300	EQU	$
		LDA	<ENWRK4,X		;爆発していい ?
		BEQ	BOMBXMV0200		;  no: BOMBXMV0200

BOMBXMV0600	EQU	$
		LDA	#SMK05
		JSL	>EXINSR
		LDA	ECENTX,X
		STA	EXXPSL,Y
		LDA	ECENTY,X
		STA	EXYPSL,Y
		LDA	#0000DH
		STA	EXCHPT,Y
		LDA	#00003
		STA	EXTIM0,Y

		LDA	#00047H			;［Ｓ］
		JSL	>SOUND_3_ON
;;;;;;;;		LDA	#00025H			;[Ｓ]
;;;;;;;;		STA	SOUND0			;

		STZ	ENYSPD,X
		STZ	ENGPOW,X
		STZ	ENXSPD,X
		STZ	ENSHOT,X
		LDA	#0110100010100000B	;食ったらダメージにする
		STA	ENMOD0,X
		INC	<ENWRK2,X

		RTL

BOMBXMV0800	EQU	$
		JSL	>EPCRCK

BOMBXMV0880	EQU	$
		LDA	ENMYNO,X
		CMP	#BOMB0
		BEQ	BOMBXMV0900

		LDA	ENOAML,X
		BMI	BOMBXMV0900

		LDA	FRCNT
		AND	#00001
		BNE	BOMBXMV0900

		LDA	<RANDM0
		PHA
		AND	#00003
		SEC
		SBC	#00002+8
		STA	<EWORK0
		PLA
		XBA
		AND	#00003
		SEC
		SBC	#00002+8
		STA	<EWORK2

		LDA	#PACHI
		JSL	>EXINSR
		LDA	ECENTX,X
		CLC
		ADC	<EWORK0
		STA	EXXPSL,Y
		LDA	ENYPSL,X
		CLC
		ADC	<EWORK2
		STA	EXYPSL,Y
		LDA	#00002
		STA	EXTIM0,Y

BOMBXMV0900	EQU	$

		RTL
;
BOMBX_BGCHK_X	EQU	$
		WORD	00000H,0FFF0H,00010H,00010H,0FFF0H,00000H,00010H,0FFF0H
BOMBX_BGCHK_Y	EQU	$
		WORD	00010H,00000H,0FFF0H,00010H,00010H,0FFF0H,00000H,0FFF0H
BOMBX_BAKUFU	EQU	$
		WORD	0FF00H,00100H
;
BOMBX_BGBR	EQU	$
		LDY	ENWRK6,X
		PHY
		JSR	BOMBX_BGBR_SB
		PLY
		INY
		INY
		JSR	BOMBX_BGBR_SB

		LDA	ENWRK6,X
		CLC
		ADC	#00004H
		STA	ENWRK6,X
		CMP	#00010H
		BMI	BOMBX_BGBR0100

		JSL	>ENCLEAR

		RTS

BOMBX_BGBR0100	EQU	$
		LDA	EPWIDX,X
		CLC
;		ADC	#00030H
;		CMP	#00060H
		ADC	#00018H
		CMP	#00030H
		BCS	BOMBX_BGBR0300

		LDA	EPWIDY,X
		CLC
;		ADC	#00030H
;		CMP	#00060H
		ADC	#00018H
		CMP	#00030H
		BCS	BOMBX_BGBR0300

;		LDA	EPWIDX,X
;		CLC
;		ADC	#00018H
;		CMP	#00030H
;		BCS	BOMBX_BGBR0400
;
;		LDA	EPWIDY,X
;		CLC
;		ADC	#00018H
;		CMP	#00030H
;		BCS	BOMBX_BGBR0400

		JSL	>PLFLST

BOMBX_BGBR0300	EQU	$

		RTS
;
;BOMBX_BGBR0400 EQU	$
;		LDY	#000
;		LDA	EPWIDX,X
;		BPL	BOMBX_BGBR0500
;
;		INY
;		INY
;
;BOMBX_BGBR0500 EQU	$
;		CLC
;		ADC	!BOMBX_BAKUFU,Y
;		CLC
;		ADC	PLXSPD
;		STA	PLXSPD
;		STA	PLMVSP
;
;		LDY	#000
;		LDA	EPWIDY,X
;		BPL	BOMBX_BGBR0600
;
;		INY
;		INY
;
;BOMBX_BGBR0600 EQU	$
;		CLC
;		ADC	!BOMBX_BAKUFU,Y
;		CLC
;		ADC	PLYSPD
;		STA	PLYSPD
;		BPL	BOMBX_BGBR0700
;
;		LDA	#P006
;		STA	PLJUMP
;
;BOMBX_BGBR0700 EQU	$
;
;		RTS
;
BOMBX_BGBR_SB	EQU	$
		LDA	!BOMBX_BGCHK_X,Y
		CLC
		ADC	ECENTX,X
		STA	BGXPS1
		STA	R8
		LDA	!BOMBX_BGCHK_Y,Y
		CLC
		ADC	ECENTY,X
		STA	BGYPS1
		STA	R0
		M_CHIPR M_BGUNIT_READ
		LDX	<ENINDX
		LDA	R7
		AND	#1111100000000000B
		CMP	#ET
		BNE	BOMBX_BGBR_S010

		JSL	>AWANH_BGBR0_SET

BOMBX_BGBR_S010 EQU	$

		RTS
;
;************************************************************************
;*		initial ( rotation lift )				*
;************************************************************************
ROTLFIN		EQU	$			;-- rotlfin --
;		LDA	#04000H
;		STA	ENWRK6,X
		STZ	ENWRKA,X
		LDA	#0C000H
		STA	ENWRKC,X

		STZ	ENMUKI,X
		RTL
;
;************************************************************************
;*		move	( rotation lift )				*
;************************************************************************
;		ENWRK0	プレイヤーＯＮフラグ
;		ENWRK2
;		ENWRK4	前のフレームでのリフトのオフセットＸ　ＰＯＳ．
;		ENWRK6	リフトの長さ
;		ENWRK8	回転角
;		ENWRKA	リフトオフセットＸ　ＰＯＳ．
;		ENWRKC	リフトオフセットＹ　ＰＯＳ．
;
ROTLF_ANGADD	EQU	$
		WORD	0FFA0H,00060H
;
ROTLFMV		EQU	$			;-- rotlfmv --
;＊＊＊＊＊＊＊＊＜　ＯＡＭセット　＞＊＊＊＊＊＊＊＊
		LDA	ENWRKA,X
		CMP	#08000H
		ROR	A
		CMP	#08000H
		ROR	A
		STA	<EWORK0

		LDA	ENWRKC,X
		CMP	#08000H
		ROR	A
		CMP	#08000H
		ROR	A
		STA	<EWORK2

		LDA	ENXPSL,X
		SEC
		SBC	ESCCH1
		CLC
		ADC	#00004			;8-4
		STA	<EWORK4
		LDA	ENYPSL,X
		SEC
		SBC	ESCCV1
		CLC
		ADC	#00004			;8-4
		STA	<EWORK6

		STZ	<EWORK8
		STZ	<EWORKA

		LDA	#00003
		STA	<EWORKC

		I16				;
		LDY	ENOAML,X		;

ROTLFMV0100	EQU	$
		LDA	<EWORK8			;くさりの位置セット
		CLC
		ADC	<EWORK0
		STA	<EWORK8
		CLC
		ADC	#00080H
		XBA
		AND	#000FFH
		CMP	#00080H
		BMI	ROTLFMV0110

		ORA	#0FF00H

ROTLFMV0110	EQU	$
		CLC
		ADC	<EWORK4
		STA	SOAM_DX+0+8*1,Y

		LDA	<EWORKA
		CLC
		ADC	<EWORK2
		STA	<EWORKA
		CLC
		ADC	#00080H
		XBA
		AND	#000FFH
		CMP	#00080H
		BMI	ROTLFMV0120

		ORA	#0FF00H

ROTLFMV0120	EQU	$
		CLC
		ADC	<EWORK6
		STA	SOAM_DX+2+8*1,Y

		TYA
		CLC
		ADC	#00008
		TAY

		DEC	<EWORKC
		BNE	ROTLFMV0100
;;;;
		LDA	ENWRKA,X
		CLC
		ADC	#00080H
		XBA
		AND	#000FFH
		CMP	#00080H
		BMI	ROTLFMV0130

		ORA	#0FF00H

ROTLFMV0130	EQU	$
		CLC
		ADC	<EWORK4
		CLC
		ADC	#00004
		STA	SOAM_DX+0+8*2,Y
		SEC
		SBC	#00010H
		STA	SOAM_DX+0+8*1,Y

		LDA	ENWRKC,X
		CLC
		ADC	#00080H
		XBA
		AND	#000FFH
		CMP	#00080H
		BMI	ROTLFMV0140

		ORA	#0FF00H

ROTLFMV0140	EQU	$
		CLC
		ADC	<EWORK6
		STA	SOAM_DX+2+8*1,Y
		STA	SOAM_DX+2+8*2,Y

		I8

		JSL	>ENMDCK

;;;;;;;;		JSL	>EPCRCK

;＊＊＊＊＊＊＊＊＊＊＊＜　プレイヤーチェック　＞＊＊＊＊＊＊＊＊＊＊
		LDA	ENWRK8,X		;回転角計算
		INC	A			;
		INC	A			;
		STA	ENWRK8,X		;

		CLC
		ADC	#00080H
		AND	#001FEH
		STA	R1
;		LDA	ENWRK6,X		;半径
		LDA	#05800H
		STA	R6

		M_CHIP	M_ENMY_1P_ROT

		LDX	<ENINDX
		LDA	R0
		STA	ENWRKA,X
		CLC
		ADC	#00080H
		XBA
		AND	#000FFH
		TAY
		BPL	ROTLFMV0200

		ORA	#0FF00H

ROTLFMV0200	EQU	$
		STA	<EWORK8
		LDA	R1
		STA	ENWRKC,X
		CLC
		ADC	#00080H
		XBA
		AND	#000FFH
		TAY
		BPL	ROTLFMV0210

		ORA	#0FF00H

ROTLFMV0210	EQU	$
		STA	<EWORKA

		LDY	<ENWRK0,X		;前のフレームでプレイヤー乗ってた ?
		BNE	ROTLFMV0300		; yes: ROTLFMV0300

		LDY	PLYSPD+1		;上昇中 ?
		BMI	ROTLFMV0600		; yes: ROTLFMV0600

		LDA	<EWORKA			;プレイヤー縦範囲チェックＯＫ ?
		CLC				;
		ADC	ENYPSL,X		;
		CLC				;
		ADC	#00004			;8-4
		SEC				;
		SBC	PCENTY			;
		SEC
		SBC	PLFTLN
		BMI	ROTLFMV0600		;  no: ROTLFMV0600

		SEC
		SBC	PWIDEY
		CMP	#00004
		BMI	ROTLFMV0310
		BRA	ROTLFMV0600

ROTLFMV0300	EQU	$
		LDY	PLYSPD+1		;上昇中 ?
		BMI	ROTLFMV0600		; yes: ROTLFMV0600

		LDY	PLEATFG			;プレイヤー食われてる ?
		BNE	ROTLFMV0600		; yes: ROTLFMV0600

		CPX	PONLFFG
		BNE	ROTLFMV0600

		LDA	<EWORK8
		SEC
		SBC	<ENWRK4,X
		PHA
		CLC
		ADC	PLXPSL
		STA	PLXPSL
		PLA
		CLC
		ADC	PCENTX
		STA	PCENTX

ROTLFMV0310	EQU	$
		LDA	<EWORK8			;プレイヤー横範囲チェックＯＫ ?
		CLC				;
		ADC	ENXPSL,X		;
		CLC				;
		ADC	#00008			;
		SEC				;
		SBC	PCENTX			;
		BPL	ROTLFMV0400		;
						;
		CLC				;
		ADC	PWIDEX			;
		BRA	ROTLFMV0500		;
						;
ROTLFMV0400	EQU	$			;
		SEC				;
		SBC	PWIDEX			;
						;
ROTLFMV0500	EQU	$			;
		CLC				;
		ADC	#0000EH			;
		CMP	#0001CH			;
		BCC	ROTLFMV0700		; yes: ROTLFMV0700

ROTLFMV0600	EQU	$
		CPX	PONLFFG
		BNE	ROTLFMV0610

		STZ	PONLFFG

ROTLFMV0610	EQU	$
		STZ	<ENWRK0,X		;乗ってるフラグクリア

ROTLFMV0620	EQU	$
;		LDY	#000
;		LDA	ENWRK6,X
;		CMP	#04000H
;		BPL	ROTLFMV0630
;
;		INY
;		INY
;
;ROTLFMV0630	EQU	$
;		CLC
;		ADC	!ROTLF_ANGADD,Y
		BRA	ROTLFMV0750

ROTLFMV0700	EQU	$
		CPX	PONLFFG			;プレイヤーを乗せている ?
		BEQ	ROTLFMV0710		; yes: ROTLFMV0710

		LDY	PONLFFG			;ほかの誰かが乗せている ?
		BNE	ROTLFMV0610		; yes: ROTLFMV0610

		STX	PONLFFG

ROTLFMV0710	EQU	$
		LDA	<EWORKA
		CLC
		ADC	ENYPSL,X
		CLC
		ADC	#00008-24H
		SEC
		SBC	PLFTLN
		STA	PLYPSL

		INC	ONLFFG

		LDY	#001			;乗ってるフラグセット
		STY	<ENWRK0,X		;

;		LDA	ENWRK8,X
;		AND	#001FEH
;		CMP	#00100H
;		BPL	ROTLFMV0740
;
;		LDA	ENWRK6,X
;		CLC
;		ADC	#00050H
;		CMP	#05000H
;		BMI	ROTLFMV0750
;
;		CMP	#07000H
;		BMI	ROTLFMV0750
;
;		LDA	#07000H
;		BRA	ROTLFMV0750
;
;ROTLFMV0740	EQU	$
;		LDA	ENWRK6,X
;		SEC
;		SBC	#00030H
;
ROTLFMV0750	EQU	$
;		STA	ENWRK6,X

ROTLFMV0800	EQU	$
		LDA	<EWORK8
		STA	<ENWRK4,X

		JSL	>POBBGCR

		RTL
;
;************************************************************************
;*		initial ( 穴掘りわんわん )				*
;************************************************************************
AWANGIN		EQU	$			;-- awangin --
		LDY	SCHMK1			;左に動いてる ?
		BNE	AWANMIN0000		; yes: AWANMIN0000

		M8
		LDA	#040H
		STA	ENEMU0,X
		M16
		BRA	AWANMIN0200

AWANMIN		EQU	$			;-- awanmin --
		LDY	SCHMK1			;左に動いてる ?
		BNE	AWANMIN0000		; yes: AWANMIN0000

		LDY	AWANMFG			;出さない ?
		BEQ	AWANMIN0100		;  no: AWANMIN0100

AWANMIN0000	EQU	$
		JMP	>ENCLEAR

AWANMIN0100	EQU	$
		INC	AWANMFG			;出現ロックフラグセット

		LDA	ENXPSL,X
		AND	#0FF00H
		ORA	#00080H
		STA	AWANMXP
		LDA	ENXPSL,X
		SEC
		SBC	#00020H
		STA	ENXPSL,X

AWANMIN0200	EQU	$
		LDA	SCCH1			;WRK0 <- 出現Ｘ　ＰＯＳ．（ＢＧ１）
		AND	#0FFF0H			;WRKA <- 出現Ｘ　ＰＯＳ．（ＢＧ２）
		STA	<EWORK0			;WRKC <- 出現Ｙ　ＰＯＳ．（ＢＧ２）
		LDA	ENXPSL,X		;
		STA	<ENWRK0,X		;
		SEC				;
		SBC	<EWORK0			;
		LSR	<EWORK0			;
		CLC				;
		ADC	<EWORK0			;
		STA	ENXPSL,X		;
		STA	ENWRKA,X		;
		LDA	ENYPSL,X		;
		SEC				;
		SBC	SCCV1			;
		CLC				;
		ADC	SCCV2			;
		AND	#0FFF8H			;
		CLC				;
		ADC	#0000AH+8		;
		LDY	MAPOINT			;コース４ー４ ?
		CPY	#027H			;
		BNE	AWANGIN0300		;  no: AWANGIN0300

		SEC
		SBC	#00008
		BRA	AWANGIN0400

AWANGIN0300	EQU	$
		CPY	#001			;コース１ー１ ?
		BNE	AWANGIN0400		;  no: AWANGIN0400

		LDY	ENXPSL+1,X		;一番右のやつ ?
		CPY	#006			;
		BNE	AWANGIN0400		;  no: AWANGIN0400

		SEC
		SBC	#0000AH

AWANGIN0400	EQU	$
		STA	ENYPSL,X		;
		LDA	ENMYNO,X
		CMP	#AWANM
		BNE	AWANMIN0500

		LDA	ENYPSL,X
		CLC
		ADC	#00016H
		STA	ENYPSL,X

AWANMIN0500	EQU	$
		LDA	ENYPSL,X
		STA	ENWRKC,X		;

		INC	ENDORE,X		;８ビット、ＢＧ２に付随する
		INC	ENDORE,X

AWANSIN		EQU	$			;-- awansin --
		LDA	ENCLOR,X		;ＢＧ１の後ろに表示
		AND	#0FFDFH
		STA	ENCLOR,X

		RTL
;
;************************************************************************
;*		move	( 穴掘りわんわん )				*
;************************************************************************
;		ENWRK0	出現Ｘ　ＰＯＳ．（ＢＧ１）
;B		ENWRK2	ROUTINE MODE INDEX
;B		ENWRK3	キャラパターンインデックス(SUB3-)
;		ENWRK4	影(AWANP)のROUTINE INDEX
;		ENWRK6	倍率
;		ENWRK8	ジャンプ許可フラグ／ＢＧ書き換えデータインデックス(SUB5)
;		ENWRKA	出現Ｘ　ＰＯＳ．（ＢＧ２）
;		ENWRKC	出現Ｙ　ＰＯＳ．（ＢＧ２）
;
;		ENCONT	がじがじカウンター／ＢＧ書き換えフラグ(SUB5)
;		ENXMAX	着地フラグ(SUB5)
;		ENGMAX	照準セットフラグ(SUB5)
;
;		ENTIM0
;		ENTIM1	がじがじタイマー
;		ENTIM2	ストップタイマー
;		ENTIM3
;
;		AWANMFG マスターセットロックフラグ
;		AWANGFG セット（ジャンプ）ロックフラグ
;		AWANMXP マスターセットＸ　ＰＯＳ．
;
;AWANS は SUB3 以降しか使わない
;
AWANG_SUB	EQU	$
		WORD	AWANG_SUB0		;うろつきのイニシャル
		WORD	AWANG_SUB1		;
		WORD	AWANG_SUB2		;うろつき＆プレイヤーチェック
		WORD	AWANG_SUB3		;前を向く
;
		WORD	AWANG_SUB4		;上昇
		WORD	AWANG_SUB5		;落下
		WORD	AWANG_SUB6		;復帰待ち
;
AWANG_CHAR	EQU	$
		WORD	CIPCHD2+4000H+000	;正面
		WORD	CIPCHD2+4020H+000
		WORD	CIPCHD2+4040H+000
		WORD	CIPCHD2+4020H+000
;
AWANGMV		EQU	$			;-- awangmv --
AWANSMV		EQU	$			;-- awansmv --
;
;		ldy	#004h
;		sty	2100h
;
		LDY	ENMOD2+1,X		;１６ドット ?
		BPL	AWANGMV0100		; yes: AWANGMV0100

		LDA	ENTROB,X
		BMI	AWANGMV0100

		JSL	>TROBJ_OAM_8H8

AWANGMV0100	EQU	$
		JSL	>ENMDCK

		TXY
		LDA	<ENWRK2,X
		ASL	A
		TAX
		JSR	(AWANG_SUB,X)

		LDY	<ENWRK2,X		;落下中 ?
		CPY	#005			;
		BMI	AWANGMV0600		;  no: AWANGMV0600

		LDY	ECRSFG,X		;ショットされたものがあたってきた ?
		DEY				;
		BMI	AWANGMV0500		;
		LDA	ENMODE,Y		;
		CMP	#EMOVE			;
		BNE	AWANGMV0500		;
		LDA	ENSHOT,Y		;
		BEQ	AWANGMV0500		;  no: AWANGMV0500

		TYX
		JSL	>ENDEATH_SET_4

AWANGMV0500	EQU	$
		JSL	>POBBGCR

AWANGMV0600	EQU	$
		JSR	AWANG_ROT_SET

		LDA	ENMYNO,X
		SEC
		SBC	#AWANG
		ORA	ENWRK8,X
		BNE	AWANGMV0700

		LDA	PLXPSL			;プレイヤー近づいてきた ?
		SEC				;
		SBC	<ENWRK0,X		;
		CLC				;
		ADC	#00010H			;
		CMP	#00020H			;
		BCS	AWANGMV0700		;  no: AWANGMV0700

		LDY	<ENWRK2,X
		CPY	#005
		BPL	AWANGMV0700

		INC	ENWRK8,X		;ジャンプ許可フラグセット

AWANGMV0700	EQU	$
;
;		ldy	#00fh
;		sty	2100h
;
		RTL
;
AWANG_ROT_SET	EQU	$
		LDY	ENMOD2+1,X		;１６ドット ?
		BPL	AWANG_R_SET0800		; yes: AWANG_R_SET0800

		LDA	ENTROB,X		;
		BMI	AWANG_R_SET0800		;

		TROBJ_CHK_2
		BNE	AWANG_R_SET0800

AWANG_ROT_SET2	EQU	$
		LDY	<ENWRK3,X		;(R12) <- char. data addr.
		LDA	!AWANG_CHAR,Y
		LDY	#BANK CIPCHD2+1080H+000 ;(R13) <- char. data bank

AWANG_ROT_SET3	EQU	$
		STA	R12
		TYA
		STA	R13

		LDA	ENWRK6,X		;(R6) <- 倍率
		STA	R6			;

		LDA	#00010H			;(R8) <- 中心Ｘ　ＰＯＳ．
		STA	R8			;
		STA	R9			;(R9) <- 中心Ｙ　ＰＯＳ．

		LDY	ENTROB,X
		TYX
		LDA	>TROBJ_PLOT_X,X		;回転エリアＸ　ＰＯＳ．セット
		STA	R3			;
		LDA	>TROBJ_PLOT_Y,X		;回転エリアＹ　ＰＯＳ．セット
		STA	R2			;

		M_CHIP	C_64HZOOM_32

		LDX	<ENINDX

		INC	OBM7WF			;mode 7 OBJ chara DMA "ON"

AWANG_R_SET0800 EQU	$

		RTS
;
AWANG_XSPD	EQU	$
		WORD	0FFC0H,00040H
;
AWANG_SUB0	EQU	$
		TYX

		STZ	ENYSDR,X
		LDA	ENWRKC,X
		STA	ENYPSL,X
		STZ	ENYSPD,X

		LDA	ENMYNO,X		;ノーマル型 ( AWANMじゃない ) ?
		CMP	#AWANG			;
		BEQ	AWANG_SUB0500		; yes: AWANG_SUB0500

		LDY	AWANGFG			;新しくセットしていい ?
		BNE	AWANG_SUB0500		;  no: AWANG_SUB0500

		LDA	#AWANS
		JSL	>ENINSR
		BCC	AWANG_SUB0500

		TYX
		JSL	>TROBJ_SR_8x4		;回転エリア空いてる ?
		BCS	AWANG_SUB0300		; yes: AWANG_SUB0300

		JSL	>ENCLEAR
		LDX	<ENINDX
		RTS

AWANG_SUB0300	EQU	$
		TXY
		LDX	<ENINDX

		DEC	AWANGFG

		LDA	ENXPSL,X
		STA	ENXPSL,Y
		LDA	ENYPSL,X
		STA	ENYPSL,Y
		LDA	ENMUKI,X
		STA	ENMUKI,Y
		M8
		LDA	#040H
		STA	ENEMU0,Y
		LDA	#002
		STA	ENWRK3,Y
		STA	ENDORE,Y
		M16
		INC	A			;[ LDA #00003 ]
		STA	ENWRK2,Y		;ROUTINE MODE INDEX INC.
		LDA	ENCLOR,Y		;ＢＧ１の後ろに表示
		AND	#0FFDFH
		STA	ENCLOR,Y

AWANG_SUB0500	EQU	$
		LDA	ENTIM2,X		;ストップ ?
		BNE	AWANG_SUB0800		; yes: AWANG_SUB0800

		LDA	<RANDM0			;ジャンプカウンターセット
		PHA				;
		AND	#00003			;
		INC	A			;
		STA	<ENCONT,X		;

		PLA
		XBA
		AND	#00002			;キャラ向きセット
		CMP	ENMUKI,X
		BNE	AWANG_SUB0700

		TAY				;Ｘ　ＳＰＥＥＤセット
		LDA	!AWANG_XSPD,Y		;
		STA	ENXSPD,X		;
		LDA	#0FF80H			;Ｙ　ＳＰＥＥＤセット
		STA	ENYSPD,X		;

		INC	<ENWRK2,X

AWANG_SUB0700	EQU	$
		INC	<ENWRK2,X

		LDY	#004
		STY	<ENWRK3,X		;キャラパターンインデックスセット

AWANG_SUB0800	EQU	$

		RTS
;
AWANG_MUKI	EQU	$
		HEX	000,002,000,000
AWANG_PATN	EQU	$
		HEX	000,001,001,000
;
AWANG_SUB1	EQU	$
		TYX

		STZ	ENYSDR,X
		LDA	ENWRKC,X
		STA	ENYPSL,X
		STZ	ENYSPD,X

		LDA	ENTIM1,X		;キャラパターンチェンジ ?
		BNE	AWANG_SUB1800		;  no: AWANG_SUB1800

		M8
		DEC	<ENWRK3,X		;振り向き終わり ?
		M16
		LDY	<ENWRK3,X		;
		BPL	AWANG_SUB1500		;  no: AWANG_SUB1500

		LDY	ENMUKI,X
		LDA	!AWANG_XSPD,Y		;Ｘ　ＳＰＥＥＤセット
		STA	ENXSPD,X		;
		LDA	#0FF80H			;Ｙ　ＳＰＥＥＤセット
		STA	ENYSPD,X		;

		INC	<ENWRK2,X

		RTS

AWANG_SUB1500	EQU	$
		LDY	<ENWRK3,X
		LDA	!AWANG_PATN,Y
		AND	#000FFH
		STA	ENCHPT,X

		LDA	!AWANG_MUKI,Y
		AND	#000FFH
		EOR	ENMUKI,X
		STA	ENMUKI,X

		LDA	#00006
		STA	ENTIM1,X		;ストップタイマーセット

AWANG_SUB1800	EQU	$

		RTS
;
AWANG_SUB2	EQU	$
		TYX

		LDA	ENXPSL,X		;行動範囲内 ?
		SEC				;
		SBC	ENWRKA,X		;
		CLC				;
		ADC	#00010H			;
		CMP	#00020H			;
		BCC	AWANG_SUB2100		; yes: AWANG_SUB2100

		EOR	ENXSPD,X
		BMI	AWANG_SUB2100

		STZ	ENXSPD,X

AWANG_SUB2100	EQU	$
		LDA	ENYPSL,X		;地面に着いた ?
		CMP	ENWRKC,X		;
		BMI	AWANG_SUB2600		;  no: AWANG_SUB2600

		STZ	ENYSDR,X
		LDA	ENWRKC,X
		STA	ENYPSL,X
		STZ	ENYSPD,X

		LDA	ENMYNO,X		;ノーマル型 ?
		CMP	#AWANG			;
		BNE	AWANG_SUB2300		;  no: AWANG_SUB2300

		LDY	ENWRK8,X		;ジャンプしていい ?
		BEQ	AWANG_SUB2300		;  no: AWANG_SUB2300

		LDY	AWANGFG			;飛ばしてもいい ?
		BNE	AWANG_SUB2300		;  no: AWANG_SUB2300

		JSL	>TROBJ_SR_8x4		;回転エリア空いてる ?
		BCC	AWANG_SUB2300		;  no: AWANG_SUB2300

		DEC	AWANGFG			;セットロックフラグセット

		STZ	ENXSPD,X
		STZ	ENGPOW,X

		LDA	#00203H			;WRK2 <- ROUTINE MODE INDEX
		STA	<ENWRK2,X		;WRK3 <- キャラパターンインデックス

		RTS

AWANG_SUB2300	EQU	$
		LDA	ENXSPD,X		;止まってる ?
		BEQ	AWANG_SUB2400		; yes: AWANG_SUB2400

		DEC	<ENCONT,X		;はねるの終わり ?
		BNE	AWANG_SUB2500		;  no: AWANG_SUB2500

AWANG_SUB2400	EQU	$
		LDA	#00020H			;ストップタイマーセット
		STA	ENTIM2,X

		STZ	ENXSPD,X
		STZ	<ENWRK2,X		;WRK2 <- ROUTINE MODE INDEX DEC. WRK3 <- キャラパターンインデックス

		RTS

AWANG_SUB2500	EQU	$
		LDA	#0FF80H
		STA	ENYSPD,X

AWANG_SUB2600	EQU	$

		RTS
;
AWANG_SUB3	EQU	$
		TYX

		LDA	ENTIM1,X		;キャラパターンチェンジ ?
		BNE	AWANG_SUB3800		;  no: AWANG_SUB3800

		M8
		DEC	<ENWRK3,X		;真ん中向いた ?
		M16				;
		LDY	<ENWRK3,X		;
		BPL	AWANG_SUB3500		;  no: AWANG_SUB3500

		JSL	>TROBJ_CLEAR
		JSL	>TROBJ_SR_8x4

		LDA	ENMYNO,X		;ノーマル型(AWANG) ?
		CMP	#AWANG			;
		BEQ	AWANG_SUB3300		; yes: AWANG_SUB3300

		LDA	#00040H			;ストップタイマーセット
		STA	ENTIM2,X		;

AWANG_SUB3300	EQU	$
		LDA	#00080H			;初期倍率セット
		STA	ENWRK6,X

		LDA	#1000000010000001B	;セット数１ー＞１６
		STA	ENMOD2,X
		LDA	#00001
		STA	ENCHPT,X

		JSR	AWANG_ROT_SET2

		LDA	#00007
		STA	ENYUSN,X
		LDA	#00004			;WRK2 <- routine mode index
		STA	<ENWRK2,X		;WRK3 <- キャラパターンインデックス

		RTS

AWANG_SUB3500	EQU	$
		LDY	<ENWRK3,X
		LDA	!AWANG_PATN+2,Y
		AND	#000FFH
		STA	ENCHPT,X

		LDA	!AWANG_MUKI+2,Y
		AND	#000FFH
		EOR	ENMUKI,X
		STA	ENMUKI,X

		LDA	#00006
		STA	ENTIM1,X		;ストップタイマーセット

AWANG_SUB3800	EQU	$
AWANG_SUB4000	EQU	$

		RTS
;
AWANG_FXREV	EQU	$
		WORD	0FFC0H,00000H,00020H,00010H,00040H,00060H,00080H,000A0H,000C0H
AWANG_FXPOS	EQU	$
		WORD	00018H,00068H,000B8H
		WORD	00038H,000C8H
AWANG_FIDX	EQU	$
		HEX	00,00,00,00,00,02,02,02,02,02,04,04,04,04,04,04
		HEX	08,06,06,06,06,06,06,06,06,08,08,08,08,08,08,08
AWANG_S4_XADD	EQU	$
		WORD	0FF00H,00100H
;
AWANG_SUB4	EQU	$
		TYX

		LDA	ENTIM2,X		;ストップ ?
		BNE	AWANG_SUB4000		; yes: AWANG_SUB4000

		LDA	ENMYNO,X		;ノーマル型(AWANG) ?
		CMP	#AWANG			;
		BNE	AWANG_SUB4040		;  no: AWANG_SUB4040

		LDA	#0FC00H
		STA	ENYSPD,X
		LDA	#000C0H
		BRA	AWANG_SUB4060

AWANG_SUB4040	EQU	$
		LDA	#0FC00H
		STA	ENYSPD,X
		STA	R6
		LDA	ENDSXL,X
		SEC
		SBC	#00080H
		STA	R0
		LDA	ENDSYL,X
		CLC
		ADC	#00040H
		STA	R2

		M_CHIP	M_TRIANGLE_CALC

		LDX	<ENINDX
		LDA	R0

AWANG_SUB4060	EQU	$
		STA	ENXSPD,X

		LDA	ENDSYL,X		;画面外 ?
		CMP	#0FFC0H			;
		BMI	AWANG_SUB4300		; yes: AWANG_SUB4300

		LDA	ENWRK6,X		;倍率計算
		CLC				;
		ADC	#0000AH			;
		STA	ENWRK6,X		;
		CMP	#00100H
		BMI	AWANG_SUB4100
		CMP	#001FFH
		BMI	AWANG_SUB4080

		LDA	#001FFH
		STA	ENWRK6,X

AWANG_SUB4080	EQU	$
		LDA	ENCLOR,X		;カラー６ー＞７
		ORA	#00002H
		STA	ENCLOR,X
		M8
		STZ	ENEMU0,X
		M16

AWANG_SUB4100	EQU	$
		TROBJ_CHK_2
		BNE	AWANG_SUB4200

		M8
		LDA	<ENWRK3,X		;キャラパターンチェンジ
		INC	A			;
		INC	A			;
		AND	#007H			;
		STA	<ENWRK3,X		;
		M16

AWANG_SUB4200	EQU	$

		RTS

AWANG_SUB4300	EQU	$
		STZ	ENXSPD,X
		STZ	ENYSPD,X
		STZ	ENYUSN,X

		LDA	ENXPSL,X
		SEC
		SBC	SCCH2
		CLC
		ADC	SCCH1
		STA	ENXPSL,X

		LDA	ENYPSL,X
		SEC
		SBC	SCCV2
		CLC
		ADC	SCCV1
		STA	ENYPSL,X

		LDA	ENMYNO,X		;可変型 ?
		CMP	#AWANS			;
		BEQ	AWANG_SUB4350		; yes: AWANG_SUB4350
		JMP	AWANG_SUB4D00		;  no: AWANG_SUB4D00

AWANG_SUB4350	EQU	$
		LDA	PLXSPD			;プレイヤーの移動に合わせて
		CLC				;落下位置微調整
		ADC	#00400H			;
		CMP	#00800H			;
		BCC	AWANG_SUB4500		;
		BPL	AWANG_SUB4400		;
						;
		LDA	#00000			;
		BRA	AWANG_SUB4500		;
						;
AWANG_SUB4400	EQU	$			;
		LDA	#00800H			;
						;
AWANG_SUB4500	EQU	$			;
		AND	#0FF00H			;
		XBA				;
		ASL	A			;
		TAY				;
		LDA	PLXPSL			;
		CLC				;
		ADC	!AWANG_FXREV,Y		;
						;
AWANG_SUB4600	EQU	$			;
		STA	<EWORK0			;

		SEC				;画面外に出た場所から落下位置が
		SBC	ENXPSL,X		;離れ過ぎてる ?
		CLC				;
		ADC	#00100H			;
		CMP	#00200H			;
		BCC	AWANG_SUB4700		;  no: AWANG_SUB4700

		SEC
		SBC	#00100H
		CLC
		ADC	<EWORK0
		BRA	AWANG_SUB4600

AWANG_SUB4700	EQU	$
		LDA	<EWORK0			;落下位置最終調整
		AND	#000F0H			;
		LSR	A			;
		LSR	A			;
		LSR	A			;
		LSR	A			;
		LDY	MPTYPE			;	;ワールド１ ?
		BEQ	AWANG_SUB4750		;	; yes: AWANG_SUB4750
		CPY	#00AH			;	;ワールド６ ?
		BNE	AWANG_SUB4780		;	;  no: AWANG_SUB4780
						;
AWANG_SUB4750	EQU	$			;
		CLC				;
		ADC	#00010H			;
						;
AWANG_SUB4780	EQU	$			;
		TAY				;
		LDA	!AWANG_FIDX,Y		;
		TAY				;
		LDA	<EWORK0			;
		AND	#0FF00H			;
		ORA	!AWANG_FXPOS,Y		;
		STA	ENXPSL,X		;

AWANG_SUB4A00	EQU	$
		LDY	#000
		LDA	ENXPSL,X		;出発点から離れ過ぎ ?
		SEC				;
		SBC	AWANMXP			;
		CLC				;
		ADC	#00100H			;
		CMP	#00380H			;
		BCC	AWANG_SUB4F00		;  no: AWANG_SUB4F00
		BPL	AWANG_SUB4C00

		INY
		INY

AWANG_SUB4C00	EQU	$
		LDA	ENXPSL,X
		CLC
		ADC	!AWANG_S4_XADD,Y
		STA	ENXPSL,X
		BRA	AWANG_SUB4A00

AWANG_SUB4D00	EQU	$
		LDA	<ENWRK0,X		;落下Ｘ　ＰＯＳ．セット
		CLC				;
		ADC	#000F8H			;
		STA	ENXPSL,X		;

AWANG_SUB4F00	EQU	$
		JSL	>TROBJ_CLEAR

		STZ	ENCHPT,X
		LDA	#0000100010000001B	;セット数１６ー＞１
		STA	ENMOD2,X		;

		LDA	#00050H			;ストップタイマーセット
		STA	ENTIM2,X

		LDA	ENMYNO,X		;ノーマル型(AWANG) ?
		CMP	#AWANG			;
		BNE	AWANG_SUB4F80		;  no: AWANG_SUB4F80

		LDA	#00030H
		STA	ENTIM2,X

AWANG_SUB4F80	EQU	$
		STZ	ENGPOW,X
		STZ	ENGMAX,X		;照準セットフラグクリア
		JSR	AWANP_SET

		LDA	ENCLOR,X		;カラー７ー＞１
		AND	#0FFF3H
		ORA	#00020H			;ＢＧ１の前に表示
		STA	ENCLOR,X

		M8
		LDA	#002
		STA	ENYUSN,X		;優先順位０ー＞２
		STZ	ENDORE,X
		M16

		LDA	#001FFH			;倍率セット
		STA	ENWRK6,X

		STZ	ENWRK8,X		;ＢＧ書き換えデータインデックス
		STZ	ENXMAX,X		;着地フラグクリア
		STZ	<ENCONT,X		;ＢＧ書き換えフラグクリア

		LDA	#00018H
		STA	EWIDEX,X
		STA	EWIDEY,X

		LDA	#0006DH			;［Ｓ］
		JSL	>SOUND_3_ON

		INC	<ENWRK2,X		;ROUTINE MODE INDEX INC.

		RTS
;
A_BRBG0_XPOS	EQU	$
		WORD	0FFE8H,0FFF8H,00008H,00018H
A_BRBG0_XSPD	EQU	$
		WORD	0FE00H,0FF00H,00100H,00200H
;
AWANG_SUB5	EQU	$
		TYX

		LDA	ENTIM2,X		;ストップ ?
		BEQ	AWANG_SUB5200		;  no: AWANG_SUB5200

		JSR	AWANP_SET

AWANG_SUB5100	EQU	$

		RTS

AWANG_SUB5200	EQU	$
		LDY	ENXMAX,X		;着地してる ?
		BNE	AWANG_SUB5270		; yes: AWANG_SUB5270

		LDA	ENMYNO,X		;ノーマル型(AWANG) ?
		CMP	#AWANG			;
		BNE	AWANG_SUB5270		;  no: AWANG_SUB5270

		LDA	ENDSXL,X		;落ちてもいい ?
		CLC				;
		ADC	#00030H			;
		CMP	#00100H+030H*2		;
		BCC	AWANG_SUB5270		; yes: AWANG_SUB5270

		LDY	<ENWRK4,X		;影を消す
		TYA				;
		STA	ENWRK4,Y		;

		LDA	#0000CH			;ＢＧ１の後ろに表示
		STA	ENCLOR,X
		STZ	ENCHPT,X
		LDA	#0000100010000001B	;セット数１６ー＞１
		STA	ENMOD2,X		;

		M8
		LDA	#040H
		STA	ENEMU0,X
		LDA	#0FFH
		STA	ENYUSN,X		;優先順位２ー＞ＦＦ
		LDA	#002			;ＢＧ２を基準に表示
		STA	ENDORE,X		;
		M16

		LDA	ENWRKA,X		;ＢＧ２に従ったＸ　ＰＯＳ．セット
		STA	ENXPSL,X		;
		LDA	ENWRKC,X		;ＢＧ２に従ったＹ　ＰＯＳ．セット
		STA	ENYPSL,X		;
		STZ	ENWRK8,X		;ジャンプ許可フラグクリア

		STZ	ENYSPD,X
		STZ	ENGPOW,X
		STZ	AWANGFG
		STZ	<ENWRK4,X		;影(AWANP)の ROUTINE INDEX クリア
		INC	<ENWRK2,X
		JSL	>TROBJ_CLEAR

AWANG_SUB5260	EQU	$

		RTS

AWANG_SUB5270	EQU	$
		LDA	#0110110001110011B	;あたりをでっかく
		STA	ENMOD0,X		;
		LDA	#00020H
		STA	EWIDEX,X
		STA	EWIDEY,X

		LDY	ENTROB,X
		BPL	AWANG_SUB5280

		JSL	>TROBJ_SR_8x4		;回転エリア確保できた ?
		BCC	AWANG_SUB5260		;  no: AWANG_SUB5260

		JSR	AWANG_ROT_SET2

		INC	ENCHPT,X
		INC	ENCHPT,X
		LDA	#1000000010000001B	;セット数１ー＞１６
		STA	ENMOD2,X		;

		LDA	#00800H
		STA	ENYSPD,X

		STZ	AWANGFG			;セットロックフラグクリア

AWANG_SUB5280	EQU	$
		TROBJ_CHK_2
		BNE	AWANG_SUB5500

		M8
		LDA	<ENWRK3,X		;キャラパターンチェンジ
		INC	A			;
		INC	A			;
		AND	#007H			;
		STA	<ENWRK3,X		;
		M16

AWANG_SUB5500	EQU	$
		LDA	ENYPSL,X
		CMP	#007FFH
		BMI	AWANG_SUB5600

;
;		ldy	#00fh
;		sty	2100h
;
		PLA				;直接ＲＴＬ
		JMP	>ENCLEAR_NORETN

AWANG_SUB5600	EQU	$
		JSR	AWANG_BG_CHG		;ＢＧ書き換え

		LDY	ENXMAX,X		;着地してる ?
		BEQ	AWANG_SUB5800		;  no: AWANG_SUB5800

		LDY	<ENWRK4,X		;影(AWANP)は消えてる ?
		BEQ	AWANG_SUB5700		; yes: AWANG_SUB5700

		TYA				;影(AWANP)を消す
		STA	ENWRK4,Y		;
		STZ	<ENWRK4,X		;

AWANG_SUB5700	EQU	$
		LDA	FRCNT2
		AND	#00001
		BNE	AWANG_SUB5800

		LDA	<RANDM0
		AND	#00006
		TAY
		LDA	!A_BRBG0_XPOS,Y
		CLC
		ADC	ENXPSL,X
		STA	<EWORK0
		LDA	ENYPSL,X
		STA	<EWORK2
		LDA	!A_BRBG0_XSPD,Y
		STA	<EWORK4
		LDA	#0FF00H
		STA	<EWORK6
		LDA	#00010H
		STA	<EWORK8

		JSR	BRBG0_SET

AWANG_SUB5800	EQU	$

		RTS
;
AWANG_SUB6	EQU	$
		TYX

		LDA	ENXPSL,X		;画面外 ?
		SEC				;
		SBC	SCCH2			;
		CLC				;
		ADC	#00020H			;
		CMP	#00100H+020H*2		;
		BCS	AWANG_SUB6500		; yes: AWANG_SUB6500
						;
		LDA	ENYPSL,X		;
		SEC				;
		SBC	SCCV2			;
		CLC				;
		ADC	#00020H			;
		CMP	#00100H+020H*2		;
		BCC	AWANG_SUB6800		;  no: AWANG_SUB6800

AWANG_SUB6500	EQU	$
		M8
		STZ	ENYUSN,X
		M16
		LDA	#00100H
		STA	ENGMAX,X
		LDA	#00008H
		STA	ENGPOW,X
		STZ	<ENWRK2,X

AWANG_SUB6800	EQU	$

		RTS
;
;
AWANG_BGUNIT	EQU	$
		WORD	RRR008C,RRR0000,RRR0000,RRR008D
		WORD	RUT1D24,RUT1D25,RUT1D25,RUT1D26
		WORD	RUT1D0D,RUT1D13,RUT1D13,RUT1D0E
;
RRR0000 EQU	$
	WORD	UT0000
RRR008C EQU	$
	WORD	UT008C
RRR008D EQU	$
	WORD	UT008D
;
;;;;K;;;;		WORD	UT008C,UT0000,UT0000,UT008D
;;;;K;;;;		WORD	UT1D24,UT1D25,UT1D25,UT1D26
;;;;K;;;;		WORD	UT1D0D,UT1D13,UT1D13,UT1D0E
;
AWANG_OXPOS	EQU	$
		WORD	0FFE8H,0FFF8H,00008H,00018H
A_BG_CHG_X	EQU	$
		WORD	00018H,0FFF8H
;
AWANG_BG_CHG	EQU	$
		LDA	ENYPSL,X
		AND	#0FFF0H
		CMP	<ENCONT,X
		BEQ	A_BG_CHG0000
;
		LDY	ENXMAX,X		;着地してる ?
		BNE	A_BG_CHG0100		; yes: A_BG_CHG0100

		LDA	ENYPSL,X
		CLC
		ADC	#00010H
		STA	R0
		LDA	ENXPSL,X
		STA	R8
		M_CHIPR M_BGUNIT_READ
		LDX	<ENINDX
		LDA	R6
		CMP	RUT1D25
		BEQ	A_BG_CHG0100

		LDA	ENYPSL,X
		STA	R0
		LDA	ECENTX,X
		STA	R8
		M_CHIPR M_BGUNIT_READ
		LDX	<ENINDX
		LDA	R6			;ＢＧ存在するか ?
		CMP	#UT2A00			;
		BEQ	A_BG_CHG0100		;
		CMP	#UT2A01			;
		BEQ	A_BG_CHG0100		;
		CMP	#UT2A30			;
		BEQ	A_BG_CHG0100		;
		CMP	#UT2A31			;
		BEQ	A_BG_CHG0100		; yes: AP_SET0700

A_BG_CHG0000	EQU	$

		RTS

A_BG_CHG0100	EQU	$
		LDA	ENYPSL,X		;書き換えチェックデータセット
		AND	#0FFF0H			;
		STA	<ENCONT,X		;

		LDA	#00004
		STA	<EWORKC

		LDA	ENWRK8,X
		AND	#00007H
		LSR	A
		TAY
		LDA	ENXPSL,X
		SEC
		SBC	!A_BG_CHG_X,Y
		STA	<EWORK4
		LDA	ENYPSL,X
		STA	<EWORK2

		LDY	ENWRK8,X		;はじめて ?
		BNE	A_BG_CHG0400		;  no: A_BG_CHG0400

		INC	ENXMAX,X		;着地フラグセット

		LDA	#00050H			;地震カウンターセット
		STA	TILTCT2

A_BG_CHG0400	EQU	$
		I16			; index 16bit mode
		TYA
		AND	#000FFH
		TAY
		PHX
		LDA	!AWANG_BGUNIT,Y
		TAX
		LDA	0,X
		STA	<EWORKE
		PLX
		I8			; index 8bit mode

		INY
		INY
		PHY

		LDA	<EWORK4			;BG write X pos. set
		STA	BGXPS1
		LDA	<EWORK2			;BG write Y pos. set
		STA	BGYPS1
		LDA	#BGCG			;BG change type no. set
		STA	BGCGNO
		LDA	<EWORKE			;BG change uit no. set
		STA	BGUTNO
		JSL	>UNITCHG

		PLY

		LDA	<EWORK4
		CLC
		ADC	#00010H
		STA	<EWORK4

		DEC	<EWORKC			;書き換え終わり ?
		BNE	A_BG_CHG0400		;  no: A_BG_CHG0400

		LDX	<ENINDX
		CPY	#018H
		BMI	A_BG_CHG0800

		LDY	#010H

A_BG_CHG0800	EQU	$
		TYA
		STA	ENWRK8,X

		RTS
;
BRBG0_SET	EQU	$
		LDA	#BRBG0
		JSL	>EXINSR

		LDA	<EWORK0
		STA	EXXPSL,Y
		LDA	<EWORK2
		STA	EXYPSL,Y

		LDA	<EWORK8			;初期タイマーセット
		STA	EXTIM0,Y		;
		LDA	<EWORK4			;Ｘ　ＳＰＥＥＤセット
		STA	EXXSPD,Y		;
		LDA	<EWORK6			;Ｙ　ＳＰＥＥＤセット
		STA	EXYSPD,Y		;
		LDA	#00007		;初期カウンターセット
		STA	EXWRK0,Y		;
		DEC	A		;[ LDA	#00008 ]	;Ｇ　ＰＯＷＥＲセット
		STA	EXGPOW,Y		;
		LDA	#00400H			;Ｇ　ＭＡＸ　ＳＰＥＥＤセット
		STA	EXGMAX,Y		;
		LDA	#0000AH			;［Ｓ］
		JSL	>SOUND_3_ON
;;;;;;;;		LDA	#00007H
;;;;;;;;		STA	SOUND3			;［Ｓ］

AP_SET0000	EQU	$

		RTS
;
AWANP_SET	EQU	$
		LDY	ENGMAX,X		;照準セットする ?
		BNE	AP_SET0000		;  no: AP_SET0000

		STZ	<EWORK2
		LDA	ENYPSL,X
		STA	<EWORK0			;Ｙ　オフセットＰＯＳ．
		LDA	ENXPSL,X
		STA	<EWORK4			;Ｘ　オフセットＰＯＳ．

AP_SET0100	EQU	$
		LDA	<EWORK0
		CLC
		ADC	<EWORK2
		STA	R0
		LDA	<EWORK4
		STA	R8
		M_CHIPR M_BGUNIT_READ
		LDA	R6			;ＢＧ存在する ?
		CMP	#UT0000			;
		BNE	AP_SET0500		; yes: AP_SET0500

		LDA	<EWORK2
		CLC
		ADC	#00010H
		STA	<EWORK2

		BRA	AP_SET0100

AP_SET0500	EQU	$
		LDX	<ENINDX
		CMP	#UT2A00			;穴の上に落ちようとしてる ?
		BEQ	AP_SET0600		;
		CMP	#UT2A01			;
		BEQ	AP_SET0600		;
		CMP	#UT2A30			;
		BEQ	AP_SET0600		;
		CMP	#UT2A31			;
		BNE	AP_SET0700		; yes: AP_SET0700

AP_SET0600	EQU	$
		LDA	#AWANP
		JSL	>ENINSR_I
		BCC	AP_SET0800

		TYX
		JSL	>TROBJ_SR_8x4

		TXY
		LDX	<ENINDX
		LDA	ENXPSL,X
		STA	ENXPSL,Y
		LDA	ENYPSL,X
		CLC
		ADC	<EWORK2
		STA	ENYPSL,Y
		LDA	#00028H
		STA	ENTIM1,Y
		LDA	#00010H
		STA	ENTIM2,Y
		INC	A
		STA	ENTIM2,X
		LDA	#00100H
		STA	ENWRK6,Y
		LDA	FRCNT
		STA	ENWRK0,Y
		STY	<ENWRK4,X

AP_SET0700	EQU	$
		INC	ENGMAX,X		;照準セットフラグセット

AP_SET0800	EQU	$

		RTS
;
;************************************************************************
;*		move	( ana_hori wang-wang )				*
;************************************************************************
;		ENWRK0	キャラパターンインデックス／キャラパターンインデックス(SUB3-)
;		ENWRK2	ROUTINE MODE INDEX
;		ENWRK4	USE
;		ENWRK6	倍率
;		ENWRK8	落下位置フラグ
;		ENWRKA	出現Ｘ　ＰＯＳ．／着地フラグ(SUB5)
;		ENWRKC	出現Ｙ　ＰＯＳ．／照準セットフラグ(SUB5)
;
;		ENCONT	がじがじカウンター／ＢＧ書き換えフラグ(SUB5)
;
;		ENTIM0
;		ENTIM1	がじがじタイマー
;		ENTIM2	ストップタイマー
;		ENTIM3
;
AWANMMV		EQU	$			;-- awanmmv --
		LDY	<ENWRK4,X
		BEQ	AWANMMV0100

		JSR	AWANM_OAMSET

AWANMMV0100	EQU	$
		JSL	>ENMDCK

		LDA	ENDSXL,X
		CLC
		ADC	#00080H+020H
		CMP	#00100H+080H*2
		BCC	AWANMMV0800

		LDA	ENXPSL,X
		SEC
		SBC	ENMOVX,X
		STA	ENXPSL,X
		LDA	ENYPSL,X
		SEC
		SBC	ENMOVY,X
		STA	ENYPSL,X

		RTL

AWANMMV0800	EQU	$
		TXY
		LDA	<ENWRK2,X
		ASL	A
		TAX
		JSR	(AWANG_SUB,X)

		JSR	AW_MAIN

		RTL
;
;************************************************************************
;*		oamset							*
;************************************************************************
AWANM_OAMSET	EQU	$
		LDY	ENOAML+1,X
		BPL	AW_OAMSET0080

		RTS

AW_OAMSET0080	EQU	$
		I16

		LDA	ENWRKA,X
		STA	<EWORK0
		LDA	ENWRKC,X
		STA	<EWORK2

		LDY	ENOAML,X
		LDX	#(04-01)*2

AW_OAMSET0100	EQU	$
		LDA	AWXPSL,X
		LSR	A
		LSR	A
		LSR	A
		LSR	A
		AND	#000FFH
		CMP	#00080H
		BMI	AW_OAMSET0200

		ORA	#0FF00H

AW_OAMSET0200	EQU	$
		CLC
		ADC	<EWORK0
		SEC
		SBC	SCCH2
		STA	SOAM_DX+0+8*1,Y

		LDA	AWYPSL,X
		LSR	A
		LSR	A
		LSR	A
		LSR	A
		AND	#000FFH
		CMP	#00080H
		BMI	AW_OAMSET0300

		ORA	#0FF00H

AW_OAMSET0300	EQU	$
		CLC
		ADC	<EWORK2
		SEC
		SBC	SCCV2
		STA	SOAM_DX+2+8*1,Y

		LDA	AWMUKI,X
		AND	#000FFH
		XBA
		LSR	A
		LSR	A
		XBA
		STA	<EWORK4

		LDA	AWCHPT,X
		AND	#000FFH
		ASL	A
		CLC
		ADC	SOAM_DX+4+8*1,Y
		AND	#03FFFH
		ORA	<EWORK4
		STA	SOAM_DX+4+8*1,Y

		TYA
		CLC
		ADC	#00008
		TAY

		DEX
		DEX
		BPL	AW_OAMSET0100

		I8
		LDX	<ENINDX

		RTS
;
;************************************************************************
;*		main							*
;************************************************************************
AW_MAIN		EQU	$
		LDA	<ENWRK4,X
		BNE	AW_MAIN0500

		INC	<ENWRK4,X

		LDX	#(04-01)*2

AW_MAIN0300	EQU	$
		STA	AWXPSL,X
		STA	AWYPSL,X
		STA	AWXSPD,X
		STA	AWRMOD,X
		STA	AWCHPT,X
		STA	AWCONT,X

		DEX
		DEX
		BNE	AW_MAIN0300

AW_MAIN0500	EQU	$
		M8
		LDX	#(04-01)*2

AW_MAIN0600	EQU	$
		LDY	2137H
		LDA	213CH
		CLC
		ADC	RANDM0
		STA	RANDM0

		JSR	AW_TIMER

		JSR	AW_MOVE

		JSR	AW_CALC

		DEX
		DEX
		BPL	AW_MAIN0600

		M16
		LDX	<ENINDX

		RTS
;
		MEM8
		IDX8
;
;************************************************************************
;*		timer							*
;************************************************************************
AW_TIMER	EQU	$
		LDA	AWTIM0,X
		BEQ	AW_TIMER0800

		DEC	AWTIM0,X

AW_TIMER0800	EQU	$

		RTS
;
;************************************************************************
;*		move							*
;************************************************************************
AW_SUB		EQU	$
		WORD	AW_SUB0
		WORD	AW_SUB1
		WORD	AW_SUB2
;
AW_MOVE		EQU	$
		TXY
		LDA	AWRMOD,X
		ASL	A
		TAX
		JSR	(AW_SUB,X)

		RTS
;
AW_XSPD		EQU	$
		HEX	0FCH,004H
;
AW_SUB0		EQU	$
		TYX

		LDA	AWTIM0,X		;ストップ ?
		BNE	AW_SUB0800		; yes: AW_SUB0800

		LDA	<RANDM0			;ジャンプカウンターセット
		PHA				;
		AND	#003			;
		INC	A			;
		STA	AWCONT,X		;

		PLA
		LSR	A
		LSR	A
		AND	#001			;キャラ向きセット
		CMP	AWMUKI,X
		BNE	AW_SUB0700

		TAY				;Ｘ　ＳＰＥＥＤセット
		LDA	!AW_XSPD,Y		;
		STA	AWXSPD,X		;
		LDA	#0F8H			;Ｙ　ＳＰＥＥＤセット
		STA	AWYSPD,X		;

		INC	AWRMOD,X

AW_SUB0700	EQU	$
		INC	AWRMOD,X

		LDA	#00004
		STA	AWPTID,X		;キャラパターンインデックスセット

AW_SUB0800	EQU	$

		RTS
;
AW_MUKI		EQU	$
		HEX	000,001,000,000
AW_PATN		EQU	$
		HEX	000,001,001,000
;
AW_SUB1		EQU	$
		TYX

		LDA	AWTIM0,X		;キャラパターンチェンジ ?
		BNE	AW_SUB1800		;  no: AWANG_SUB1800

		DEC	AWPTID,X		;振り向き終わり ?
		BPL	AW_SUB1500		;  no: AWANG_SUB1500

		LDY	AWMUKI,X
		LDA	!AW_XSPD,Y		;Ｘ　ＳＰＥＥＤセット
		STA	AWXSPD,X		;
		LDA	#0F0H			;Ｙ　ＳＰＥＥＤセット
		STA	AWYSPD,X		;

		INC	AWRMOD,X

		RTS

AW_SUB1500	EQU	$
		LDY	AWPTID,X
		LDA	!AW_PATN,Y
		AND	#000FFH
		STA	AWCHPT,X

		LDA	!AW_MUKI,Y
		EOR	AWMUKI,X
		STA	AWMUKI,X

		LDA	#00006
		STA	AWTIM0,X		;ストップタイマーセット

AW_SUB1800	EQU	$

		RTS
;
AW_SUB2		EQU	$
		TYX

		LDA	AWXPSH,X		;行動範囲内 ?
		INC	A			;
		CMP	#002H			;
		BCC	AW_SUB2100		; yes: AW_SUB2100

		EOR	AWXSPD,X
		BMI	AW_SUB2100

		STZ	AWXSPD,X

AW_SUB2100	EQU	$
		LDA	AWYPSH,X		;地面に着いた ?
		BMI	AW_SUB2600		;  no: AW_SUB2600

		LDA	AWXSPD,X		;行動範囲内 ?
		BEQ	AW_SUB2400		;  no: AW_SUB2400

		DEC	AWCONT,X		;はねるの終わり ?
		BNE	AW_SUB2500		;  no: AW_SUB2500

AW_SUB2400	EQU	$
		LDA	#020H			;ストップタイマーセット
		STA	AWTIM0,X

		STZ	AWXSPD,X
		STZ	AWPTID,X
		STZ	AWRMOD,X		;ROUTINE MODE INDEX DEC.

		RTS

AW_SUB2500	EQU	$
		LDA	#0F0H
		STA	AWYSPD,X

AW_SUB2600	EQU	$

		RTS
;
;************************************************************************
;*		speed & pos. calc.					*
;************************************************************************
AW_CALC		EQU	$
;--< Y SPEED CALC. >--
		LDA	AWYSPD,X
		CLC
		ADC	#001
		CMP	#010H
		BMI	AW_CALC0100

		LDA	#010H

AW_CALC0100	EQU	$
		STA	AWYSPD,X
;--< POS. CALC. >--
		LDA	AWXSPD,X
		BPL	AW_CALC8100

		CLC
		ADC	AWXPSL,X
		STA	AWXPSL,X
		LDA	AWXPSH,X
		SBC	#000
		BRA	AW_CALC8200

AW_CALC8100	EQU	$
		CLC
		ADC	AWXPSL,X
		STA	AWXPSL,X
		LDA	AWXPSH,X
		ADC	#000

AW_CALC8200	EQU	$
		STA	AWXPSH,X

		LDA	AWYSPD,X
		BPL	AW_CALC8300

		CLC
		ADC	AWYPSL,X
		STA	AWYPSL,X
		LDA	AWYPSH,X
		SBC	#000
		BRA	AW_CALC8400

AW_CALC8300	EQU	$
		CLC
		ADC	AWYPSL,X
		STA	AWYPSL,X
		LDA	AWYPSH,X
		ADC	#000

AW_CALC8400	EQU	$
		BMI	AW_CALC8500		;地面に減り込んでる ?
						;  no: AW_CALC8500
		EOR	AWYSPD,X
		BMI	AW_CALC8500

		STZ	AWYSPD,X
		LDA	#000
		STA	AWYPSL,X

AW_CALC8500	EQU	$
		STA	AWYPSH,X

		RTS
;
		MEM16
		IDX8
;
;************************************************************************
;*		initial ( ana-hori wang-wang fall point )		*
;************************************************************************
AWANPIN		EQU	$			;-- awanpin --
		JSR	AWANP_ROT_SET

		RTL
;
;************************************************************************
;*		move	( ana_hori wang-wang fall point )		*
;************************************************************************
;
AWANP_YUSN	EQU	$
		HEX	005,0FF
AWANP_CLOR	EQU	$
		HEX	0C,0E,0A,0A
;
AWANPMV		EQU	$			;-- awanpmv --
		LDY	ENMOD2+1,X		;３２ドット ?
		BPL	AWANPMV0100		; yes: AWANPMV0100

		JSL	>TROBJ_OAM_8H8

AWANPMV0100	EQU	$
		JSL	>ENMDCK

		LDA	FRCNT
		CMP	<ENWRK0,X
		BEQ	AWANPMV0130

		LDA	#00004
		STA	ENYUSN,X

AWANPMV0130	EQU	$
		LDA	<ENWRK4,X		;わんわん地面に着いた ?
		BEQ	AWANPMV0300		;  no: AWANPMV0300

		LDY	ENTROB,X
		BMI	AWANPMV0200

		LDA	#00004
		STA	ENCHPT,X

		LDA	#0010000010000001B	;セット数１６ー＞４
		STA	ENMOD2,X

AWANPMV0200	EQU	$
		JMP	>ENCLEAR

AWANPMV0300	EQU	$
		LDA	ENTIM2,X		;３２ドット ?
		BNE	AWANPMV0500		;  no: AWANPMV0500

		LDY	ENTROB,X
		BMI	AWANPMV0800

		LDA	#00004
		STA	ENCHPT,X

		LDA	#0010000010000001B	;セット数１６ー＞４
		STA	ENMOD2,X

		JMP	>TROBJ_CLEAR

AWANPMV0500	EQU	$
		LDA	ENWRK6,X		;倍率計算
		CLC				;
		ADC	#00010H			;
		CMP	#001FFH			;
		BMI	AWANPMV0600		;
						;
		LDA	#001FFH			;
						;
AWANPMV0600	EQU	$			;
		STA	ENWRK6,X		;

		JSR	AWANP_ROT_SET

AWANPMV0800	EQU	$

		RTL
;
AWANP_ROT_SET	EQU	$
		LDA	ENWRK6,X
		AND	#000FFH
		ASL	A
		ASL	A
		XBA
		TAY
		M8
		LDA	ENCLOR,X
		AND	#0F1H
		ORA	!AWANP_CLOR,Y
		STA	ENCLOR,X
		M16

		LDA	#CIPCHD2+60E0H+000	;(R12) <- char. data addr.
		LDY	#BANK CIPCHD2+60E0H+000 ;(R13) <- char. data bank
		JSR	AWANG_ROT_SET3

		RTS
;
;************************************************************************
;*		initial ( びよぉ〜んおばけ )				*
;************************************************************************
BOBK0_I_XSPD	EQU	$
		WORD	0FF80H,00080H
;
BOBK0IN		EQU	$			;-- bobk0in --
BOBK1IN		EQU	$			;-- bobk1in --
		LDY	ENMUKI,X
		LDA	!BOBK0_I_XSPD,Y
		STA	ENXSPD,X

		LDA	ENXPSL,X
		AND	#00010H
		LSR	A
		LSR	A
		LSR	A
		LSR	A
		PHP
		INC	A
		STA	<EWORK0
		PLP
		BEQ	BOBK0IN0100

		LDA	ENCLOR,X		;Ｖフリップセット
		EOR	#000C0H
		STA	ENCLOR,X

		LDA	ENYPSL,X
		DEC	A
		AND	#0FFF0H
		ORA	#0000FH
		STA	ENYPSL,X

		LDA	ENGMAX,X
		EOR	#0FFFFH
		INC	A
		STA	ENGMAX,X

		LDA	ENMUKI,X
		EOR	#00002
		STA	ENMUKI,X

BOBK0IN0100	EQU	$
		LDA	ENMYNO,X
		SEC
		SBC	#BOBK0
		ASL	A
		ASL	A
		PHP
		CLC
		ADC	<EWORK0
		STA	ENWRKC,X

		PLP
		BEQ	BOBK0IN0800

		LDA	#SPRKL
		JSL	>ENINSR
		BCS	BOBK0IN0300

		LDA	#BOBK0
		STA	ENMYNO,X

		BRA	BOBK0IN0800

BOBK0IN0300	EQU	$
		STY	<ENWRK0,X

		LDA	ENXPSL,X
		STA	ENXPSL,Y
		LDA	ENYPSL,X
		SEC
		SBC	#00008
		STA	ENYPSL,Y
		LDA	#00000
		STA	ENGPOW,Y
		INC	A			;ビットマップエリアＵＳＥフラグセット
		STA	ENWRKA,Y
		LDA	ENMOD2,Y		;範囲クリアなし
		AND	#0FFF3H
		STA	ENMOD2,Y
		LDA	#00100H			;初期倍率セット
		STA	ENWRK6,Y
		LDA	#00005
		STA	ENWRK2,Y

BOBK0IN0800	EQU	$
		LDY	#003
		STY	<ENCONT,X

		RTL
;
;************************************************************************
;*		move	( びよぉ〜んおばけ )				*
;************************************************************************
;		ENWRK0	スパーク ROUTINE INDEX
;		ENWRK2	ROUTINE MODE INDEX
;		ENWRK4	キャラの高さインデックス
;		ENWRK6	弾にあたったフラグ
;		ENWRK8	ジャンプしようとしたときのキャラの高さインデックス
;		ENWRKA	プレイヤーＯＮフラグ
;		ENWRKC	上下ＢＧチェックフラグ	1...下 2...上 4...BOBK1
;
;		ENCONT	キャラパターンインデックス
;
;		ENTIM1	キャラパターンチェンジタイマー
;
BOBK0_SUB	EQU	$
		WORD	BOBK0_SUB0		;ぬとぬとぉぅぉ
		WORD	BOBK0_SUB1		;のびのびぃー
		WORD	BOBK0_SUB2		;たまあたってぐちゃ
		WORD	BOBK0_SUB3		;たまあたってのび
		WORD	BOBK0_SUB4		;ぐちゃっ１ｓｔ．
		WORD	BOBK0_SUB5		;ぐちゃっ
		WORD	BOBK0_SUB6		;にょん
;
BOBK0_SPRK_XRV0 EQU	$
;ENMUKI =		 [0]	[2]
		WORD	0FFFCH,00004H,0FFFCH
BOBK0_SPRK_XRV1 EQU	$
;ENCHPT =		[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [A] [B] [C]
		HEX	000,004,008,004,000,000,000,000,000,000,000,000,000
;			[D] [E] [F] [10]
		HEX	000,000,000,000
BOBK0_SPRK_YREV EQU	$
;ENCHPT =		[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [A] [B] [C]
		HEX	002,000,002,000,00C,010,014,018,01C,008,01C,01C,01C
;			[D] [E] [F] [10]
		HEX	000,000,000,000
BOBK0_ENCH_IDX	EQU	$
;ENCHPT =		[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [A] [B] [C]
		HEX	004,004,004,004,006,007,008,009,00A,005,00B,00B,00B
;			[D] [E] [F] [10]
		HEX	003,002,001,000
BOBK0_YP_LOCK	EQU	$
		WORD	00000H,0000FH
;
;
BOBK0MV		EQU	$			;-- bobk0mv --
BOBK1MV		EQU	$			;-- bobk1mv --
		LDA	ENMODE,X
		CMP	#EMOVE
		BEQ	BOBK0MV0060

		LDA	#00400H
		STA	ENGMAX,X

		LDA	ENMYNO,X
		CMP	#BOBK1
		BNE	BOBK0MV0060

		LDY	<ENWRK0,X
		LDA	ENWRK2,Y
		CMP	#00005
		BMI	BOBK0MV0060

		LDA	#00040H
		STA	ENGPOW,Y
		LDA	#00004
		STA	ENWRK2,Y
		ORA	ENMOD2,Y		;範囲クリアあり
		STA	ENMOD2,Y

BOBK0MV0060	EQU	$
		LDA	ENWRKC,X		;Ｙ　ＰＯＳ．補正
		AND	#00002H			;
		TAY				;
		LDA	ENWRKC,X		;
		AND	#00003H			;
		DEC	A			;
		STA	<EWORK0			;
		LDA	ENYPSL,X		;
		SEC				;
		SBC	<EWORK0			;
		AND	#0FFF0H			;
		ORA	!BOBK0_YP_LOCK,Y	;
		STA	ENYPSL,X		;
;
		JSL	>ENMDCK

		JSL	>DISPCK0		;範囲外 ?
		BCC	BOBK0MV0090		;  no: BOBK0MV0090

BOBK0MV0070	EQU	$
		LDY	ENMYNO,X
		CPY	#BOBK0
		BEQ	BOBK0MV0080

		LDA	<ENWRK0,X
		TAX
		JSL	>ENCLEAR
		LDX	<ENINDX

BOBK0MV0080	EQU	$
		RTL

BOBK0MV0090	EQU	$
		LDY	ECRSFG,X		;ショットされた敵にあたった ?
		DEY				;
		BMI	BOBK0MV0099		;
						;
		LDA	ENMODE,Y		;
		CMP	#EMOVE			;
		BNE	BOBK0MV0099		;
						;
		LDA	ENSHOT,Y		;
		BEQ	BOBK0MV0099		;  no: BOBK0MV0099

		LDY	#002
		STY	<ENWRK2,X
		STZ	ENTIM1,X
		STZ	ENXSPD,X

BOBK0MV0099	EQU	$
		TXY
		LDA	<ENWRK2,X
		ASL	A
		TAX
		JSR	(BOBK0_SUB,X)

		LDA	ENWRKC,X		;天井にくっ着いてる ?
		AND	#00002			;
		BEQ	BOBK0MV0100		;  no: BOBK0MV0100

		AND	ENCBFG,X		;天井がある ?
		BNE	BOBK0MV0100		; yes: BOBK0MV0100

		LDA	ENXSPD,X
		EOR	#0FFFFH
		INC	A
		STA	ENXSPD,X
		LDA	ENMUKI,X
		EOR	#00002
		STA	ENMUKI,X
		LDA	ENXPSL,X
		SEC
		SBC	ENMOVX,X
		STA	ENXPSL,X
		LDA	ENYPSL,X
		SEC
		SBC	ENMOVY,X
		STA	ENYPSL,X

BOBK0MV0100	EQU	$
		LDA	ENWRKC,X		;[ BOBK1 ] ?
		AND	#00004			;
		BEQ	BOBK0MV0500		;  no: BOBK0MV0500

		LDY	ENCHPT,X
		LDA	!BOBK0_SPRK_YREV,Y
		AND	#000FFH
		SEC
		SBC	#00004
		STA	<EWORK0

		LDA	!BOBK0_SPRK_XRV1,Y
		AND	#000FFH
		EOR	#0FFFFH
		INC	A
		LDY	ENCLOR,X		;Ｖフリップしてる ?
		BPL	BOBK0MV0150		;  no: BOBK0MV0150

		LDY	ENMUKI,X
		BNE	BOBK0MV0148

		EOR	#0FFFFH
		INC	A

BOBK0MV0148	EQU	$
		INY
		INY
		BRA	BOBK0MV0200

BOBK0MV0150	EQU	$
		LDY	ENMUKI,X
		BEQ	BOBK0MV0200

BOBK0MV0160	EQU	$
		EOR	#0FFFFH
		INC	A

BOBK0MV0200	EQU	$
		CLC
		ADC	!BOBK0_SPRK_XRV0,Y
		LDY	<ENWRK0,X
		CLC
		ADC	ENXPSL,X
		STA	ENXPSL,Y

		LDA	ENWRK6,Y
		STA	R6
		LDA	#00008
		STA	R0

		PHX
		PHY

		M_CHIP	MULTIPLY

		PLY
		PLX

		LDA	<EWORK0
		CLC
		ADC	R0
		CLC
		ADC	#00008
		STA	<EWORK0

		LDA	ENWRKC,X		;天井にくっついてる ?
		AND	#00002			;
		BEQ	BOBK0MV0300		;  no: BOBK0MV0300

		LDA	<EWORK0
		EOR	#0FFFFH
		INC	A
		STA	<EWORK0

BOBK0MV0300	EQU	$
		LDA	ENYPSL,X
		SEC
		SBC	<EWORK0
		STA	ENYPSL,Y

BOBK0MV0500	EQU	$
		JSR	BOBK0_PLCHK

		LDY	ENCHPT,X
		LDA	!BOBK0_ENCH_IDX,Y
		AND	#000FFH
		STA	<ENWRK4,X

		RTL
;
BOBK0_TIM1	EQU	$
;ENCHPT =		[0] [1] [2] [3]
		HEX	008,002,006,006
;
BOBK0_SUB0	EQU	$
		TYX

		LDA	ENTIM1,X
		BNE	BOBK0_SUB0500

		LDA	ENCHPT,X
		INC	A
		AND	#00003
		STA	ENCHPT,X
		TAY
		BNE	BOBK0_SUB0300

		DEC	<ENCONT,X		;移動終わり ?
		BNE	BOBK0_SUB0300		;  no: BOBK0_SUB0300

		LDY	#015H+1
		STY	<ENCONT,X

		STZ	ENXSPD,X

		LDA	#00034H			;［Ｓ］
		JSL	>SOUND_3_ON

		INC	<ENWRK2,X

		LDA	#00002
		BRA	BOBK0_SUB0400

BOBK0_SUB0300	EQU	$
		LDA	!BOBK0_TIM1,Y
		AND	#000FFH

BOBK0_SUB0400	EQU	$
		STA	ENTIM1,X

BOBK0_SUB0500	EQU	$

		RTS
;
BOBK0_NOBI_PT	EQU	$-1
		HEX	01,09,04,05,06,07,08,0B,0C,0B,0A,0B,0C,0B,0A,08,07,06,05,04,09
BOBK0_NOBI_TM	EQU	$-1
		HEX	02,02,02,02,02,02,08,04,04,04,04,04,04,04,04,08,02,02,02,02,02
;
BOBK0_SUB1	EQU	$
		TYX

		LDA	ENTIM1,X		;キャラパターンチェンジ ?
		BNE	BOBK0_SUB1800		;  no: BOBK0_SUB1800

		DEC	<ENCONT,X		;伸び終わり ?
		BNE	BOBK0_SUB1500		;  no: BOBK0_SUB1500

		LDY	#003+1
		STY	<ENCONT,X

		LDA	ENWRKC,X
		AND	#00002H
		EOR	ENMUKI,X
		TAY
		LDA	!BOBK0_I_XSPD,Y
		STA	ENXSPD,X

		DEC	<ENWRK2,X

		RTS

BOBK0_SUB1500	EQU	$
		LDY	<ENCONT,X
		LDA	!BOBK0_NOBI_PT,Y
		AND	#000FFH
		STA	ENCHPT,X
		LDA	!BOBK0_NOBI_TM,Y
		AND	#000FFH
		STA	ENTIM1,X

BOBK0_SUB1800	EQU	$

		RTS
;
BOBK0_SUB3	EQU	$
		TYX

		LDA	ENTIM1,X
		BNE	BOBK0_SUB1800

		INC	<ENWRK4,X
		LDY	<ENWRK4,X
		CPY	#004H
		BMI	BOBK0_SUB4300
		BRA	BOBK0_SUB4080
;
BOBK0_S4_SEQ	EQU	$
;ENWRK4 =		[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [A]
		HEX	010,00F,00E,00D,001,009,004,005,006,007,008
;
BOBK0_S4_TIM1	EQU	$
		HEX	006,003,002,001,002,002,002,002,002,002,002
;
BOBK0_SUB2	EQU	$
BOBK0_SUB4	EQU	$
		TYX

		LDA	ENTIM1,X		;キャラパターンチェンジ ?
		BNE	BOBK0_SUB4800		;  no: BOBK0_SUB4800

		DEC	<ENWRK4,X		;
		BPL	BOBK0_SUB4300		;

		LDY	<ENWRK2,X		;たまにあたって潰れてる ?
		CPY	#002			;
		BNE	BOBK0_SUB4100		;  no: BOBK0_SUB4100

		TYA		;[ LDA	#00002H ]
		STA	ENTIM1,X
		INC	<ENWRK2,X

		RTS

BOBK0_SUB4000	EQU	$
		LDY	ENWRKA,X		;プレイヤー乗ってる ?
		BNE	BOBK0_SUB4100		; yes: BOBK0_SUB4100

BOBK0_SUB4080	EQU	$
		LDY	#003+1			;キャラパターンインデックスセット
		STY	<ENCONT,X		;

		LDY	ENMUKI,X
		LDA	!BOBK0_I_XSPD,Y
		STA	ENXSPD,X

		STZ	<ENWRK2,X

		RTS

BOBK0_SUB4100	EQU	$
		LDA	#00002H
		STA	ENTIM1,X

		LDY	#006
		STY	<ENWRK2,X

		RTS

BOBK0_SUB4300	EQU	$
		LDY	<ENWRK4,X
		LDA	!BOBK0_S4_SEQ,Y
		AND	#000FFH
		STA	ENCHPT,X
		LDA	!BOBK0_S4_TIM1,Y
		AND	#000FFH
		STA	ENTIM1,X

BOBK0_SUB4800	EQU	$

		RTS
;
BOBK0_SUB5	EQU	$
		TYX

		LDA	ENTIM1,X
		BNE	BOBK0_SUB4800

		DEC	<ENWRK4,X
		LDY	<ENWRK4,X
		CPY	#004H
		BPL	BOBK0_SUB4300
		BRA	BOBK0_SUB4000
;
BOBK0_S6_YSPD	EQU	$
 IF PAL	   ;*** PAL 対応 [1995/7/20] ******************
;ENWRK8 ( ENWRK4 ) =	 [0]	[1]    [2]    [3]
		WORD	0F80FH,0F80FH,0F80FH,0F80FH
;			 [4]	[5]    [6]    [7]
		WORD	0F8A0H,0F931H,0F9C2H,0FA54H
;			 [8]	[9]    [A]
		WORD	0FB76H,0FC99H,0FDBBH
 ELSE	   ;*** JPN/NES 対応 [1995/6/30] **************
;ENWRK8 ( ENWRK4 ) =	 [0]	[1]    [2]    [3]
		WORD	0F900H,0F900H,0F900H,0F900H
;			 [4]	[5]    [6]    [7]
		WORD	0F980H,0FA00H,0FA80H,0FB00H
;			 [8]	[9]    [A]
		WORD	0FC00H,0FD00H,0FE00H
 ENDIF	   ;*** PAL 対応 [1995/7/20] ******************
;
BOBK0_SUB6	EQU	$
		TYX

		LDA	ENTIM1,X
		BNE	BOBK0_SUB4800

		INC	<ENWRK4,X
		LDY	<ENWRK4,X
		CPY	#004
		BNE	BOBK0_SUB6100

		LDA	ENWRKA,X		;プレイヤー乗ってる ?
		BNE	BOBK0_SUB4300		; yes: BOBK0_SUB4300
		BRA	BOBK0_SUB4080

BOBK0_SUB6100	EQU	$
		CPY	#008H
		BMI	BOBK0_SUB4300

		LDA	ENWRKA,X		;プレイヤー乗ってる ?
		BEQ	BOBK0_SUB6200		;  no: BOBK0_SUB6200

		LDA	ENWRK8,X
		ASL	A
		TAY
		CPY	#00AH*2+1
		BMI	BOBK0_SUB6180

		LDY	#00AH*2

BOBK0_SUB6180	EQU	$
		LDA	!BOBK0_S6_YSPD,Y
		STA	PLYSPD

;;;;;;;;		LDA	#0F900H
;;;;;;;;		STA	PLYSPD
		LDA	#P006
		STA	PLJUMP
		LDA	#001+8000H
		STA	PLSPJP
		STZ	ENWRKA,X		;プレイヤーＯＮフラグクリア

BOBK0_SUB6200	EQU	$
		CPY	#00BH
		BMI	BOBK0_SUB4300

		LDY	ENWRKA,X		;プレイヤー乗ってる ?
		BNE	BOBK0_SUB6300		; yes: BOBK0_SUB6300

		LDA	#00008H
		STA	ENTIM1,X

BOBK0_SUB6300	EQU	$
		DEC	<ENWRK2,X

		RTS
;
BOBK0_YCHK	EQU	$
;ENCHPT			[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [A] [B] [C]
		HEX	010,010,010,010,018,01C,01E,01F,020,010,020,020,020
;			[D] [E] [F] [10]
		HEX	008,008,004,003
;
BOBK0_PLCHK	EQU	$
		LDY	ENCHPT,X
		LDA	!BOBK0_YCHK,Y
		AND	#000FFH
		SEC
		SBC	#00010H
		STA	<EWORK0
		LDA	PWIDEX
		CLC
		ADC	EWIDEX,X
		STA	<EWORK2
		ASL	A
		STA	<EWORK4

		LDA	ENWRKC,X		;天井にくっついてる ?
		AND	#00002			;
		BEQ	BOBK0_PLCHK0100		;  no: BOBK0_PLCHK0100

		JMP	BOBK0_PLCHK2

BOBK0_PLCHK0100 EQU	$
		LDY	<ENWRK2,X		;伸び縮み中 ?
		CPY	#002			;
		BMI	BOBK0_PLCHK0300		;  no: BOBK0_PLCHK0300

		LDY	ENWRKA,X		;プレイヤー乗ってる ?
		BEQ	BOBK0_PLCHK0300		;  no: BOBK0_PLCHK0300

		LDA	EPWIDX,X		;プレイヤー、横にずれた ?
		CLC				;
		ADC	<EWORK2			;
		CMP	<EWORK4			;
		BCS	BOBK0_PLCHK0190		; yes: BOBK0_PLCHK0190

		LDY	PLJUMP			;プレイヤージャンプ下降中 ?
		BEQ	BOBK0_PLCHK0400		;
		LDY	PLYSPD+1		;
		BPL	BOBK0_PLCHK0400		;  no: BOBK0_PLCHK0400

		LDA	<ENWRK4,X		;ジャンプしようとしたときのキャラの高さインデックスセット
		STA	ENWRK8,X		;
		LDY	#006
		STY	<ENWRK2,X
		BRA	BOBK0_PLCHK0400

BOBK0_PLCHK0190 EQU	$
		STZ	ENWRKA,X		;プレイヤーＯＮフラグクリア

BOBK0_PLCHK0200 EQU	$

		RTS

BOBK0_PLCHK0300 EQU	$
		LDA	EPWIDX,X		;横チェックＯＫ ?
		CLC				;
		ADC	<EWORK2			;
		CMP	<EWORK4			;
		BCS	BOBK0_PLCHK0800		;  no: BOBK0_PLCHK0800

		LDA	PWIDEY			;縦チェックＯＫ ?
		EOR	#0FFFFH			;
		INC	A			;
		STA	<EWORK2			;
		CLC				;
		ADC	#00008			;
		STA	<EWORK4			;
		LDA	<EWORK0			;
		SEC				;
		SBC	ENYPSL,X		;
		CLC				;
		ADC	PCENTY			;
		CMP	<EWORK2			;
		BMI	BOBK0_PLCHK0800		;  no: BOBK0_PLCHK0800

		CMP	<EWORK4			;プレイヤー乗った ?
		BPL	BOBK0_PLCHK0500		;  no: BOBK0_PLCHK0500

		LDY	PLJUMP			;プレイヤージャンプ下降中 ?
		BEQ	BOBK0_PLCHK0800		;
		LDY	PLYSPD+1		;
		BMI	BOBK0_PLCHK0800		;  no: BOBK0_PLCHK0800

		STZ	ENWRK8,X		;ジャンプしようとしたときのキャラの高さインデックスクリア
		LDY	#004
		STY	<ENWRK2,X
		STZ	ENTIM1,X
		STZ	ENXSPD,X

;		LDA	#00062H			;［Ｓ］
;		JSL	>SOUND_3_ON

BOBK0_PLCHK0400 EQU	$
		LDA	ENYPSL,X		;プレイヤーＹ　ＰＯＳ．補正
		SEC				;
		SBC	<EWORK0			;
		SEC				;
		SBC	PWIDEY			;
		SEC				;
		SBC	PCENTY			;
		CLC				;
		ADC	PLYPSL			;
		INC	A			;
		INC	A			;
		STA	PLYPSL			;

		LDA	#00001			;プレイヤーＯＮフラグセット
		STA	ENWRKA,X		;

		STZ	PLYSPD
		STZ	PLDOSN
		INC	ONLFFG

		RTS

BOBK0_PLCHK0500 EQU	$
		SEC
		SBC	<EWORK0
		SEC
		SBC	#00010H
		SEC
		SBC	PWIDEY
		BPL	BOBK0_PLCHK0800

		JSL	>PLFLST

BOBK0_PLCHK0800 EQU	$

		RTS
;
BOBK0_PLCHK2	EQU	$
		LDA	EPWIDX,X
		CLC
		ADC	<EWORK2
		CMP	<EWORK4
		BCS	BOBK0_PLCHK2800

		LDA	PWIDEY
		CLC
		ADC	EWIDEY,X
		STA	<EWORK2
		LDA	<EWORK0
		PHA
		LSR	A
		CLC
		ADC	<EWORK2
		ASL	A
		STA	<EWORK4
		PLA
		CLC
		ADC	EPWIDY,X
		CLC
		ADC	<EWORK2
		CMP	<EWORK4
		BCS	BOBK0_PLCHK2800

		JSL	>PLFLST

BOBK0_PLCHK2800 EQU	$

		RTS
;
;************************************************************************
;*		initial ( あほーどり )					*
;************************************************************************
AHOBD_I_XSPD	EQU	$
		WORD	0FF40H,000C0H
AHOB2_I_TIM0	EQU	$-1
		HEX	010,020
AHOBD_I_XPOS	EQU	$
		WORD	0FFE0H,00130H
;
AHOB2IN		EQU	$			;-- ahob2in --
		INC	<ENWRK0,X		;はねセットロックフラグセット

		LDA	#0000CH
		STA	ENCHPT,X
		LDY	#004
		STY	<ENWRK2,X

		LDA	ENWRKA,X		;食べられた後の復帰 ?
		INC	A			;
		BEQ	AHOBDIN0160		; yes: AHOBDIN0160

		LDA	#00002
		STA	<EWORK0
		STA	<ENWRK0,X
		LDA	ECENTX,X
		SEC
		SBC	PCENTX
		STA	<EWORK4
		LDA	ECENTY,X
		SEC
		SBC	PCENTY
		STA	<EWORK6

AHOBDIN0100	EQU	$
		LDY	<EWORK0
		LDA	!AHOB2_I_TIM0,Y
		AND	#000FFH
		STA	<EWORK2

		LDA	#AHOB2
		JSL	>ENINSR
		BCC	AHOBDIN0160

		LDA	ENXPSL,X
		STA	ENXPSL,Y
		LDA	ENYPSL,X
		STA	ENYPSL,Y
		LDA	ENMUKI,X
		STA	ENMUKI,Y
		LDA	<EWORK2
		STA	ENTIM0,Y
		LDA	#0000CH
		STA	ENCHPT,Y
		LDA	#00004
		STA	ENWRK2,Y
		STA	ENWRK0,Y
		LDA	<EWORK4
		STA	EPWIDX,Y
		LDA	<EWORK6
		STA	EPWIDY,Y

		DEC	<EWORK0
		BNE	AHOBDIN0100

AHOBDIN0160	EQU	$
		BRA	AHOBDIN0300

AHOBDIN		EQU	$			;-- ahobdin --
		LDA	ENWRKA,X		;食べられた後の復帰 ?
		INC	A			;
		BEQ	AHOBDIN0280		; yes: AHOBDIN0280

		LDA	ENYPSL,X		;湧きだしフラグ ?
		BIT	#00010H			;
		BEQ	AHOBDIN0200		;  no: AHOBDIN0200

		AND	#0FFE0H
		STA	ENWRKC,X
		LDA	ENXPSL,X
		AND	#00010H
		LSR	A
		LSR	A
		LSR	A
		TAY
		LDA	!AHOBD_I_XPOS,Y
		STA	ENWRK6,X
		LDA	#000FFH
		STA	ENYUSN,X
		LDA	#0000000001100000B	;食えない、投げた敵あたらない
		STA	ENMOD0,X		;
		LDA	#0100000000000000B	;ＢＧチェックしない、敵じゃない
		STA	ENMOD1,X		;
		LDA	#0000000000000010B	;範囲クリアなし
		STA	ENMOD2,X		;
		STZ	ENGPOW,X
		INC	ENWRK8,X		;湧きだしフラグセット

		LDY	AHOB_ST_FG
		BNE	AHOBDIN0180

		INC	AHOB_ST_FG		;あほーどりのわきだしフラグ”ＯＮ”

AHOBDIN0180	EQU	$

		RTL

AHOBDIN0200	EQU	$
BAHOBIN		EQU	$			;-- bahobin --
		LDA	ENWRKA,X		;食べられた後の復帰 ?
		INC	A			;
		BNE	AHOBDIN0400		;  no: AHOBDIN0400

AHOBDIN0280	EQU	$
		INC	<ENWRK0,X		;はねセットロックフラグセット
		LDA	#00040H
		STA	ENTIM0,X

AHOBDIN0300	EQU	$
		LDA	#0000CH
		STA	ENCHPT,X
		LDA	#00003
		STA	ENTIM1,X
		INC	A		;[ LDA	#04 ]
		STA	<ENWRK2,X
		LDA	#00040H
		STA	ENGPOW,X
		LDA	#00400H
		STA	ENGMAX,X
		LDA	#0000100001000001B	;ＢＧチェックする
		STA	ENMOD1,X
		LDA	#0110110000000000B	;投げた敵あたる
		STA	ENMOD0,X

		RTL

AHOBDIN0400	EQU	$
		STZ	ENWRKA,X

		LDA	ENXPSL,X		;出てきてもいい ?
		PHA				;
		SEC				;
		SBC	ESCCH1			;
		STA	<EWORK0			;
		PLA				;
		AND	#00010H			;
		EOR	#00010H			;
		DEC	A			;
		EOR	<EWORK0			;
		BMI	AHOBDIN0500		; yes: AHOBDIN0500

		LDA	#000FFH
		STA	ENYUSN,X
		LDA	#0110100001100000B	;食えない、投げた敵あたらない
		STA	ENMOD0,X

		LDA	#0000EH
		STA	EWIDEX,X

		STZ	ENGPOW,X
		LDY	#005
		STY	<ENWRK2,X

		RTL

AHOBDIN0500	EQU	$
		LDA	<RANDM0
		AND	#00001
		CLC
		ADC	#00003
		STA	<ENCONT,X

		LDY	ENMUKI,X
		LDA	!AHOBD_S0_XSPD,Y
		STA	ENXSPD,X

		INC	<ENWRK2,X

		LDA	#00004
		STA	ENTIM1,X

		LDA	#00020H
		STA	ENGMAX,X

;;;;;;;;		LDY	#003+1			;羽ばたき回数セット
;;;;;;;;		STY	<ENCONT,X		;
;;;;;;;;
;;;;;;;;		LDY	ENMUKI,X
;;;;;;;;		LDA	!AHOBD_I_XSPD,Y
;;;;;;;;		STA	ENXSPD,X

		LDA	ENMYNO,X
		CMP	#BAHOB
		BNE	AHOBDIN0800

		JSR	BAHOB_HEIHO_SET

AHOBDIN0800	EQU	$

		RTL
;
BAHOB_HEIHO_SET EQU	$
		TXY
		LDA	#HEIH0
		JSL	>ENINSR2
		BCC	BAHOB_H_SET0500

		LDA	ENXPSL,X
		STA	ENXPSL,Y
		LDA	ENYPSL,X
		CLC
		ADC	#00010H
		STA	ENYPSL,Y
		LDA	#00003
		STA	ENWRK2,Y
		ASL	A	;[ LDA	#006 ]	;ぶらさがりポーズ
		STA	ENCHPT,Y		;
		LDA	ENMUKI,X
		STA	ENMUKI,Y
		LDA	#00001
		STA	ENWRKC,Y

		STY	<ENWRK4,X
		LDA	#0000FH
		STA	ENCHPT,X
		LDY	ENMUKI,X
		LDA	!AHOBD_S0_XSPD,Y
		STA	ENXSPD,X
		LDY	#006
		STY	<ENWRK2,X

BAHOB_H_SET0500 EQU	$
		LDA	#AHOBD
		STA	ENMYNO,X

		RTS
;
;************************************************************************
;*		move	( あほーどり )					*
;************************************************************************
;B		ENWRK0	はねセットロックフラグ
;B		ENWRK1
;		ENWRK2	ROUTINE MODE INDEX
;		ENWRK4	へいほーのROUTINE INDEX
;		ENWRK6
;		ENWRK8	湧きだしフラグ
;		ENWRKA	USE
;		ENWRKC	セットＹ　ＰＯＳ．
;
;		ENTIM0	ストップタイマー
;		ENTIM1	キャラパターンチェンジタイマー
;		ENTIM2	プレイヤーチェックロックタイマー
;		ENTIM3	敵チェックロックタイマー
;
;		ENCONT	羽ばたき回数
;
AHOBD_SUB	EQU	$
		WORD	AHOBD_SUB0	;上昇
		WORD	AHOBD_SUB1	;下降
		WORD	AHOBD_SUB2	;下降ー＞上昇
		WORD	AHOBD_SUB3	;一生懸命上昇
		WORD	AHOBD_SUB4	;歩き
		WORD	AHOBD_SUB5	;出現待ち
		WORD	AHOBD_SUB6	;爆撃滑空
;
AHOBDMV		EQU	$			;-- ahobdmv --
AHOB2MV		EQU	$			;-- ahob2mv --
BAHOBMV		EQU	$			;-- bahobmv --
		LDY	ENWRK8,X		;湧きだしフラグ ?
		BNE	AHOBDMV1000		; yes: AHOBDMV1000

		LDA	ENCOLD,X
		BEQ	AHOBDMV0080

		STZ	ENMOD1,X

AHOBDMV0080	EQU	$
		LDY	<ENWRK2,X		;出現待ち ?
		CPY	#005			;
		BNE	AHOBDMV0100		;  no: AHOBDMV0100

		JSL	>ENMDCK
		BRA	AHOBDMV0300

AHOBDMV0100	EQU	$
		JSR	AHOBD_EAT_CHK

		JSL	>ENMDCK

		JSR	AHOBD_PLCHK

AHOBDMV0300	EQU	$
		TXY
		LDA	<ENWRK2,X
		ASL	A
		TAX
		JSR	(AHOBD_SUB,X)

		LDY	<ENWRK2,X		;走り回ってる ?
		CPY	#004			;
		BEQ	AHOBDMV0500		; yes: AHOBDMV0500
		CPY	#005			;出現待ち ?
		BEQ	AHOBDMV0800		; yes: AHOBDMV0800

		JSR	AHOBD_SHOT_CHK
		RTL

AHOBDMV0500	EQU	$
		LDA	ENTIM3,X		;チェックロック ?
		BNE	AHOBDMV0800		; yes: AHOBDMV0800

		JSL	>SHOT_EN_KILL_SP

AHOBDMV0800	EQU	$

		RTL

AHOBDMV1000	EQU	$
		JSL	>ENMDCK

		LDY	AHOB_ST_FG		;湧きだし終わり ?
		BEQ	AHOBDMV1300		; yes: AHOBDMV1300

		LDA	ENDSYL,X		;画面内 ?
		CLC				;
		ADC	#00040H			;
		CMP	#000E0H+040H*2		;
		BCC	AHOBDMV1500		; yes: AHOBDMV1500

AHOBDMV1300	EQU	$
		JMP	>ENCLEAR

AHOBDMV1500	EQU	$
		LDA	ENTIM0,X		;湧きだす ?
		BNE	AHOBDMV1800		;  no: AHOBDMV1800

		LDA	#AHOBD
		JSL	>ENINSR_I
		BCC	AHOBDMV1800

		LDA	ESCCH1
		AND	#0FFEFH
		CLC
		ADC	ENWRK6,X
		STA	ENXPSL,Y
		AND	#00010H
		LSR	A
		LSR	A
		LSR	A
		EOR	#00002
		STA	ENMUKI,Y
		LDA	ENWRKC,X
		STA	ENYPSL,Y

		LDA	#00040H*4
		STA	ENTIM0,X

AHOBDMV1800	EQU	$

		RTL
;
AHOBD_EAT_CHK	EQU	$
		LDY	ENMODE,X
		CPY	#EMOVE
		BNE	AHOBD_E_CHK0100

		RTS

AHOBD_E_CHK0100 EQU	$
		LDA	#00040H
		STA	ENGPOW,X
		LDA	#00400H
		STA	ENGMAX,X

		CPY	#EEATM
		BNE	AHOBD_E_CHK0800

		LDY	<ENWRK4,X		;へいほーを連れてる ?
		BEQ	AHOBD_E_CHK0200		;  no: AHOBD_E_CHK0200

		LDA	ENXSPD,X
		STA	ENXSPD,Y

		STZ	<ENWRK4,X		;へいほーのROUTINE INDEX クリア

AHOBD_E_CHK0200 EQU	$
		LDY	<ENWRK0,X		;はねセットロック ?
		BNE	AHOBD_E_CHK0300		; yes: AHOBD_E_CHK0300

		INC	<ENWRK0,X

		LDA	#AHANE
		JSL	>EXINSR

		LDA	ENXPSL,X
		STA	EXXPSL,Y
		LDA	ENYPSL,X
		STA	EXYPSL,Y

		LDA	#0FFFFH
		STA	EXTIM0,Y
		LDA	#00040H*3
		STA	EXTIM1,Y

		LDA	#00020H
		STA	EXXSPD,Y

AHOBD_E_CHK0300 EQU	$
		LDY	ENYUSN,X
		BPL	AHOBD_E_CHK0500

		LDA	#0FFFFH
		STA	ENWRKA,X

AHOBD_E_CHK0500 EQU	$
		LDA	ENMYNO,X
		CMP	#DBAHO
		BEQ	AHOBD_E_CHK0580
		CMP	#DBAH2
		BNE	AHOBD_E_CHK0600

AHOBD_E_CHK0580 EQU	$
		JSR	DBAHO_ROT_SET

		LDA	#0111010010100010B	;食うとプレイヤーダメージ
		PHA
		LDY	#001
		LDA	#0000100001000011B	;ＢＧチェックする
		BRA	AHOBD_E_CHK0700

AHOBD_E_CHK0600 EQU	$
		LDA	#0110110000000000B	;投げた敵あたる
		PHA
		LDY	#00CH
		LDA	#0000100001000001B	;行ったり来たりしない

AHOBD_E_CHK0700 EQU	$
		STA	ENMOD1,X
		TYA
		STA	ENCHPT,X
		PLA
		STA	ENMOD0,X

AHOBD_E_CHK0800 EQU	$
AHOBD_S_C0000	EQU	$

		RTS
;
AHOBD_SHOT_CHK	EQU	$
		TXA
		STA	R1
		M_CHIP	MY_ENCROS2
		BRA	AHOBD_S_C0200

AHOBD_S_C0100	EQU	$
		LDX	#BANK MY_ENCROS2
		LDA	R15
		JSL	>CHIPON

AHOBD_S_C0200	EQU	$
		LDX	<ENINDX
		LDY	R14
		BMI	AHOBD_S_C0000
		BEQ	AHOBD_S_C0000

		LDA	ENMODE,Y
		CMP	#EMOVE
		BNE	AHOBD_S_C0100
		LDA	ENSHOT,Y		;ショットされてる ?
		BEQ	AHOBD_S_C0100		;  no: AHOBD_S_C0000

		LDA	ENMYNO,Y
		CMP	#EGG00
		BCC	AHOBD_S_C0400
		CMP	#EGG09+1
		BCS	AHOBD_S_C0400

		LDA	ENWRK4,Y		;オプションになってる ?
		BNE	AHOBD_S_C0100		; yes: AHOBD_S_C0100
		BRA	AHOBD_S_C0500

AHOBD_S_C0400	EQU	$
		LDA	ENMOD1,Y		;アイテムかリフト ?
		AND	#0100000000000000B	;
		BNE	AHOBD_S_C0100		; yes: AHOBD_S_C0100

		TYX
		JSL	>ENDEATH_SET_4

AHOBD_S_C0500	EQU	$
		JSR	AHOBD_HANE_SET

		INC	<ENWRK0,X		;はねセットロックフラグセット
		LDY	<ENWRK4,X		;へいほーを連れてる ?
		BEQ	AHOBD_S_C0600		;  no: AHOBD_S_C0600

		LDA	ENXSPD,X
		STA	ENXSPD,Y

		STZ	<ENWRK4,X		;へいほーのROUTINE INDEX クリア

AHOBD_S_C0600	EQU	$
		LDA	ECENTX,X
		STA	<EWORK0
		LDA	ECENTY,X
		STA	<EWORK2
		LDA	#FSMK1
		JSL	>FSMK0_SET2

		LDA	#0000BH			;［Ｓ］
		JSL	>SOUND_3_ON
;;;;;;;;		LDA	#00003			; ［Ｓ］
;;;;;;;;		STA	SOUND0

		LDA	#00040H
		STA	ENGPOW,X
		LDA	#00400H
		STA	ENGMAX,X
		LDA	#0FD00H
		STA	ENYSPD,X
		STZ	ENXSPD,X

		LDA	ENMYNO,X		;のーまるあほーどり ?
		CMP	#AHOBD			;
		BEQ	AHOBD_S_C0700		; yes: AHOBD_S_C0700
		CMP	#BAHOB			;
		BEQ	AHOBD_S_C0700		; yes: AHOBD_S_C0700

		LDA	#00001
		STA	ENCHPT,X
		LDY	#DBAHO_RMODE40
		STY	<ENWRK2,X
		LDA	#0000100001000011B	;ＢＧチェックする
		STA	ENMOD1,X
		LDA	#0111110010100010B	;舌ダメージ
		STA	ENMOD0,X
		LDY	ENMUKI,X
		LDA	!DBAHO_I_XSPD,Y
		STA	ENXSPD,X
		LDA	#00100H			;初期倍率セット
		STA	ENWRK6,X
		RTS

AHOBD_S_C0700	EQU	$
		LDA	#0000CH
		STA	ENCHPT,X
		LDA	#00040H
		STA	ENTIM0,X
		LDA	#00010H			;敵チェックロックタイマーセット
		STA	ENTIM3,X		;
		LDY	#004
		STY	<ENWRK2,X
		LDA	#0000100001000001B	;ＢＧチェックする
		STA	ENMOD1,X
		LDA	#0110110000000000B	;投げた敵あたる
		STA	ENMOD0,X

AHOBD_PLCHK0000 EQU	$

		RTS
;
AHOBD_S3_XSPD	EQU	$
		WORD	0FF80H,00080H
;
AHOBD_PLCHK	EQU	$
		LDA	#0110110000100000B	;食える
		LDY	<ENWRK2,X		;走ってる ?
		CPY	#004			;
		BNE	AHOBD_PLCHK0040		;  no: AHOBD_PLCHK0040

		LDA	#0110110000000000B

AHOBD_PLCHK0040 EQU	$
		STA	ENMOD0,X

		CPX	PONLFFG
		BNE	AHOBD_PLCHK0080

		STZ	PONLFFG

AHOBD_PLCHK0080 EQU	$
		LDA	ENTIM2,X
		BNE	AHOBD_PLCHK0000

		LDY	<ENWRK2,X		;
		CPY	#003			;一生懸命上昇中 ?
		BNE	AHOBD_PLCHK0100		;  no: AHOBD_PLCHK0100

		LDA	#0110110001100000B	;食えない、投げた敵あたらない
		STA	ENMOD0,X
		JMP	AHOBD_PLCHK_ON

AHOBD_PLCHK0100 EQU	$
		JSR	AHOBD_PLCHK_SB		;プレイヤーと衝突した ?
		BCS	AHOBD_PLCHK0580		;  no: AHOBD_PLCHK0580

		LDA	EPWIDY,X		;プレイヤーに踏まれてる ?
		SEC				;
		SBC	<EWORK2			;
		CMP	#0FFF6H			;
		BCC	AHOBD_PLCHK0700		;  no: AHOBD_PLCHK0700

		STA	<EWORK0

		LDY	<ENWRK2,X		;走り回ってる ?
		CPY	#004			;
		BEQ	AHOBD_PLCHK0600		; yes: AHOBD_PLCHK0600

		LDY	PONLFFG			;プレイヤー他の誰かに乗ってる ?
		BNE	AHOBD_PLCHK0580		; yes: AHOBD_PLCHK0580

		LDA	PLYSPD			;プレイヤー上昇中 ?
		BMI	AHOBD_PLCHK0580		; yes: AHOBD_PLCHK0580

		CMP	#08000H
		ROR	A
		CMP	#00180H
		BMI	AHOBD_PLCHK0400

		LDA	#00180H

AHOBD_PLCHK0400 EQU	$
		STA	ENYSPD,X

		STZ	ENCHPT,X
		LDA	#00008H
		STA	ENTIM1,X
		ASL	A		;[ LDA	#00010H ]
		STA	ENGMAX,X

		LDY	ENMUKI,X
		LDA	!AHOBD_S3_XSPD,Y
		STA	ENXSPD,X

		LDY	#003
		STY	<ENWRK2,X

		LDA	PLYPSL			;プレイヤーＹ　ＰＯＳ．補正
		SEC				;
		ADC	<EWORK0			;
		INC	A
		STA	PLYPSL			;

		STZ	PLYSPD
		STZ	PLJUMP
		STZ	PLDOSN
		INC	ONLFFG
		STX	PONLFFG

		LDA	#0110110001100000B	;食えない、投げた敵あたらない
		STA	ENMOD0,X

AHOBD_PLCHK0580 EQU	$

		RTS
;
;-------------- プレイヤーが踏んだ ------------------------------
AHOBD_PLCHK0600 EQU	$
		LDX	<ENINDX
		STZ	ENXSPD,X
		STZ	ENXPOW,X
		STZ	ENYSPD,X
 IF PAL	   ;*** PAL 対応 [1995/7/20] ******************
		LDA	#0FB76H		;player Y speed set
		STA	PLYSPD
 ELSE	   ;*** JPN/NES 対応 [1995/6/30] **************
		LDA	#0FC00H		;player Y speed set
		STA	PLYSPD
 ENDIF	   ;*** PAL 対応 [1995/7/20] ******************
		PLA
		JMP	>FSMK0_SET3
;
;-------------- プレイヤーと横当たり ----------------------------
AHOBD_PLCHK0700 EQU	$
		JSL	>PLFLST

		RTS
;
AHOBD_PLCHK_ON	EQU	$
		LDA	PLBGCR			;足、頭がＢＧにあたってる ?
		AND	#0000000000011111B	;
		BNE	AHOBD_PL_ON0100		; yes: AHOBD_PL_ON0100

		LDA	PLYPSL
		CLC
		ADC	ENMOVY,X
		STA	PLYPSL
		LDA	EPWIDY,X
		SEC
		SBC	ENMOVY,X
		STA	EPWIDY,X

AHOBD_PL_ON0100 EQU	$
		LDA	PLBGCR			;壁にあたってない ?
		AND	#0000000111100000B	;
		BEQ	AHOBD_PL_ON0200		; yes: AHOBD_PL_ON0200

		AND	#0000000110000000B	;進行方向に壁 ?
		DEC	A			;
		EOR	ENXSPD,X		;
		BPL	AHOBD_PL_ON0300		; yes: AHOBD_PL_ON0300

AHOBD_PL_ON0200 EQU	$
		LDA	PLXPSL
		CLC
		ADC	ENMOVX,X
		STA	PLXPSL
		LDA	EPWIDX,X
		SEC
		SBC	ENMOVX,X
		STA	EPWIDX,X

AHOBD_PL_ON0300 EQU	$
		JSR	AHOBD_PLCHK_SB		;プレイヤーと衝突した ?
		BCS	AHOBD_PL_ON3000		;  no: AHOBD_PL_ON3000

		LDY	PONLFFG			;プレイヤー他の誰かに乗ってる ?
		BNE	AHOBD_PL_ON3000		; yes: AHOBD_PL_ON3000

		LDA	EPWIDY,X		;プレイヤーに踏まれてる ?
		SEC				;
		SBC	<EWORK2			;
		CMP	#0FFF6H			;
		BCC	AHOBD_PL_ON3000		;  no: AHOBD_PL_ON3000

		LDY	PLYSPD+1		;プレイヤー上昇中 ?
		BMI	AHOBD_PL_ON3000		; yes: AHOBD_PL_ON3000

		SEC
		ADC	PLYPSL
		INC	A
		STA	PLYPSL
		STZ	PLYSPD
		INC	ONLFFG
		STX	PONLFFG

		RTS

AHOBD_PL_ON3000 EQU	$
		LDA	<RANDM0
		AND	#00001
		CLC
		ADC	#00005
		STA	<ENCONT,X
		LDY	ENMUKI,X
		LDA	!AHOBD_I_XSPD,Y
		STA	ENXSPD,X
		LDA	#00008H
		STA	ENTIM2,X
		ASL	A		;[ LDA	#00010H ]
		STA	ENGPOW,X
		STZ	<ENWRK2,X

		RTS
;
AHOBD_PLCHK_SB	EQU	$
		LDA	PWIDEX			;プレイヤーと衝突した ?
		CLC				;
		ADC	EWIDEX,X		;
		ASL	A			;
		STA	<EWORK0			;
		LSR	A			;
		CLC				;
		ADC	EPWIDX,X		;
		CMP	<EWORK0			;
		BCS	AHOBD_PL_SB0800		;  no: AHOBD_PL_SB0800
						;
		LDA	PWIDEY			;
		CLC				;
		ADC	EWIDEY,X		;
		STA	<EWORK2			;
		ASL	A			;
		STA	<EWORK0			;
		LSR	A			;
		CLC				;
		ADC	EPWIDY,X		;
		CMP	<EWORK0			;

AHOBD_PL_SB0800 EQU	$

		RTS
;
;;;;;;;;AHOBD_HANE_XPS	EQU	$-2
;;;;;;;;		WORD	0FFF0H,0FFF8H,00006H,00014H
;;;;;;;;AHOBD_HANE_YPS	EQU	$-2
;;;;;;;;		WORD	00010H,0FFF4H,00004H,0FFF8H
;;;;;;;;AHOBD_HANE_XSPD EQU	$-2
;;;;;;;;		WORD	00040H,00060H,0FFE0H,00020H
;;;;;;;;AHOBD_HANE_TIM1 EQU	$-2
;;;;;;;;		WORD	00140H,00100H,00160H,00120H
;;;;;;;;;
;;;;;;;;AHOBD_HANE_SET	EQU	$
;;;;;;;;		LDY	#008
;;;;;;;;
;;;;;;;;AHOBD_H_SET0100 EQU	$
;;;;;;;;		LDA	!AHOBD_HANE_XPS,Y
;;;;;;;;		CLC
;;;;;;;;		ADC	ECENTX,X
;;;;;;;;		STA	<EWORK0
;;;;;;;;		LDA	!AHOBD_HANE_YPS,Y
;;;;;;;;		CLC
;;;;;;;;		ADC	ECENTY,X
;;;;;;;;		STA	<EWORK2
;;;;;;;;		LDA	!AHOBD_HANE_XSPD,Y
;;;;;;;;		STA	<EWORK4
;;;;;;;;		LDA	!AHOBD_HANE_TIM1,Y
;;;;;;;;		STA	<EWORK6
;;;;;;;;
;;;;;;;;		PHY
;;;;;;;;		LDA	#AHANE
;;;;;;;;		JSL	>EXINSR
;;;;;;;;
;;;;;;;;		LDA	<EWORK0
;;;;;;;;		STA	EXXPSL,Y
;;;;;;;;		LDA	<EWORK2
;;;;;;;;		STA	EXYPSL,Y
;;;;;;;;
;;;;;;;;		LDA	#0FFFFH
;;;;;;;;		STA	EXTIM0,Y
;;;;;;;;		LDA	<EWORK6
;;;;;;;;		STA	EXTIM1,Y
;;;;;;;;
;;;;;;;;		LDA	<EWORK4
;;;;;;;;		STA	EXXSPD,Y
;;;;;;;;		BPL	AHOBD_H_SET0200
;;;;;;;;
;;;;;;;;		LDA	#00002
;;;;;;;;		STA	EXMUKI,Y
;;;;;;;;
;;;;;;;;AHOBD_H_SET0200 EQU	$
;;;;;;;;		PLY
;;;;;;;;		DEY
;;;;;;;;		DEY
;;;;;;;;		BNE	AHOBD_H_SET0100
;;;;;;;;
;;;;;;;;		RTS
;
AHOBD_HANE_SET	EQU	$
		LDA	#HIRA1
		JSL	>EXINSR

		LDA	ECENTX,X
		STA	EXXPSL,Y
		LDA	ECENTY,X
		STA	EXYPSL,Y
		LDA	#00017H
		STA	EXCHPT,Y
		LDA	#00001
		STA	EXTIM0,Y

		RTS
;
AHOBD_S0_XSPD	EQU	$
		WORD	0FF00H,00100H
;
AHOBD_SUB0	EQU	$
		TYX

		LDA	ENTIM1,X
		BNE	AHOBD_SUB0800

		LDY	ENCHPT,X
		INY
		CPY	#009
		BMI	AHOBD_SUB0200

		DEC	<ENCONT,X		;羽ばたき終わり ?
		BNE	AHOBD_SUB0100		;  no: AHOBD_SUB0100

		LDA	<RANDM0
		AND	#00001
		CLC
		ADC	#00003
		STA	<ENCONT,X

		LDY	ENMUKI,X
		LDA	!AHOBD_S0_XSPD,Y
		STA	ENXSPD,X

		INC	<ENWRK2,X

AHOBD_SUB0100	EQU	$
		LDY	#000

AHOBD_SUB0200	EQU	$
		TYA
		STA	ENCHPT,X
		LDA	#00004
		STA	ENTIM1,X

		LDA	#00020H
		CPY	#002
		BMI	AHOBD_SUB0500
		CPY	#005+1
		BPL	AHOBD_SUB0500

		LDA	#0FD80H

AHOBD_SUB0500	EQU	$
		STA	ENGMAX,X

AHOBD_SUB0800	EQU	$

		RTS
;
AHOBD_SUB1	EQU	$
		TYX

		LDA	#00100H
		STA	ENGMAX,X

		LDA	ENTIM1,X
		BNE	AHOBD_SUB1800

		LDY	ENCHPT,X
		BNE	AHOBD_SUB1300

		LDA	#00003
		STA	ENTIM1,X
		INC	ENCHPT,X

		RTS

AHOBD_SUB1300	EQU	$
		CPY	#001
		BNE	AHOBD_SUB1500

		LDY	#009-1

AHOBD_SUB1500	EQU	$
		CPY	#009
		BNE	AHOBD_SUB1600

		DEC	<ENCONT,X
		BNE	AHOBD_SUB1600

		LDA	#00001
		STA	ENCHPT,X
		LDA	#00003
		STA	ENTIM1,X

		INC	<ENWRK2,X

		RTS

AHOBD_SUB1600	EQU	$
		INY
		CPY	#00BH+1
		BMI	AHOBD_SUB1700

		LDY	#009

AHOBD_SUB1700	EQU	$
		TYA
		STA	ENCHPT,X
		LDA	#00005
		STA	ENTIM1,X

AHOBD_SUB1800	EQU	$

		RTS
;
AHOBD_SUB2	EQU	$
		TYX

		LDA	ENTIM1,X
		BNE	AHOBD_SUB2800

		LDA	#00004
		STA	ENTIM1,X
		LDA	<RANDM0
		AND	#00001
		CLC
		ADC	#00006
		STA	<ENCONT,X
		STZ	ENCHPT,X
		LDY	ENMUKI,X
		LDA	!AHOBD_I_XSPD,Y
		STA	ENXSPD,X

		STZ	<ENWRK2,X

AHOBD_SUB2800	EQU	$

		RTS
;
AHOBD_SUB3	EQU	$
		TYX

		LDA	#00010H
		LDY	ENYSPD+1,X
		BPL	AHOBD_SUB3380

		LDA	#00040H

AHOBD_SUB3380	EQU	$
		STA	ENGPOW,X

		LDA	ENGMAX,X
		DEC	A
		CMP	#0FFE0H
		BPL	AHOBD_SUB3400

		LDA	#0FFE0H

AHOBD_SUB3400	EQU	$
		STA	ENGMAX,X

		LDA	ENTIM1,X
		BNE	AHOBD_SUB3800

		LDY	ENCHPT,X
		INY
		CPY	#009
		BMI	AHOBD_SUB3600

		LDY	#000

AHOBD_SUB3600	EQU	$
		TYA
		STA	ENCHPT,X
		LDA	#00001
		STA	ENTIM1,X

AHOBD_SUB3800	EQU	$

		RTS
;
AHOBD_S4_XSPD	EQU	$
		WORD	0FE00H,00200H
AHOBD_SUB4	EQU	$
		TYX

		LDA	ENTIM0,X
		BNE	AHOBD_SUB4800

		LDY	ENMUKI,X
		LDA	!AHOBD_S4_XSPD,Y
		STA	ENXSPD,X

		LDA	#00400H
		STA	ENGMAX,X
		LDA	#0000100001000001B	;ＢＧチェックする
		STA	ENMOD1,X

		LDA	ENTIM1,X
		BNE	AHOBD_SUB4800

		LDA	#00002
		STA	ENTIM1,X

		LDY	ENCHPT,X
		INY
		CPY	#00EH+1
		BMI	AHOBD_SUB4500

		LDY	#00CH

AHOBD_SUB4500	EQU	$
		TYA
		STA	ENCHPT,X

AHOBD_SUB4800	EQU	$

		RTS
;
AHOBD_SUB5	EQU	$
		TYX

		LDA	ENDSXL,X		;画面外 ?
		CLC				;
		ADC	#00020H			;
		CMP	#00100H+20H*2		;
		BCC	AHOBD_SUB5800		;  no: AHOBD_SUB5800

		LDA	ENXPSL,X		;まだ出撃待ち ?
		AND	#00010H			;
		DEC	A			;
		EOR	ENDSXL,X		;
		BPL	AHOBD_SUB5800		; yes: AHOBD_SUB5800

		LDA	#00005
		STA	ENYUSN,X
		LDA	#0110100000000000B
		STA	ENMOD0,X
;;;;;;;;		LDY	#003+1
;;;;;;;;		STY	<ENCONT,X
;;;;;;;;		LDY	EPXMUK,X
;;;;;;;;		TYA
;;;;;;;;		STA	ENMUKI,X
;;;;;;;;		LDA	!AHOBD_I_XSPD,Y
;;;;;;;;		STA	ENXSPD,X
		LDA	#00010H
		STA	ENGPOW,X

;;;;;;;;		STZ	<ENWRK2,X

		LDA	<RANDM0
		AND	#00001
		CLC
		ADC	#00003
		STA	<ENCONT,X
		LDY	EPXMUK,X
		TYA
		STA	ENMUKI,X
		LDA	!AHOBD_S0_XSPD,Y
		STA	ENXSPD,X
		LDA	#00004
		STA	ENTIM1,X
		LDA	#00020H
		STA	ENGMAX,X
		LDY	#001
		STY	<ENWRK2,X

		LDA	ENMYNO,X
		CMP	#BAHOB
		BNE	AHOBD_SUB5800

		JSR	BAHOB_HEIHO_SET

AHOBD_SUB5800	EQU	$

		RTS
;
AHOBD_SUB6	EQU	$
		TYX

		LDY	<ENWRK4,X
		LDA	ENMODE,Y		;へいほー生きてる ?
		CMP	#EMOVE			;
		BNE	AHOBD_SUB6600		;  no: AHOBD_SUB6600

		LDA	ENCOLD,Y
		BNE	AHOBD_SUB6600

		LDA	ENWRK2,Y		;へいほーじっとしてる ?
		CMP	#00003			;
		BNE	AHOBD_SUB6600		;  no: AHOBD_SUB6600

		LDA	#00000
		STA	ENYSPD,Y

		LDA	EPWIDX,X		;プレイヤー近くに来た ?
		CLC				;
		ADC	#00038H			;
		CMP	#00070H			;
		BCS	AHOBD_SUB6700		;
		LDA	EPWIDY,X		;
		BPL	AHOBD_SUB6700		;  no: AHOBD_SUB6700

		LDA	ENXSPD,X
		STA	ENXSPD,Y

AHOBD_SUB6600	EQU	$
		STZ	ENCHPT,X
		STZ	<ENWRK4,X
		STZ	<ENWRK2,X

		RTS

AHOBD_SUB6700	EQU	$
		LDA	ENXPSL,X		;へいほー位置補正
		STA	ENXPSL,Y		;
		LDA	ENYPSL,X		;
		CLC				;
		ADC	#00010H			;
		STA	ENYPSL,Y		;

		LDA	ENTIM1,X
		BNE	AHOBD_SUB6800

		LDA	#00005H
		STA	ENTIM1,X
		LDA	ENCHPT,X
		INC	A
		CMP	#00012H
		BMI	AHOBD_SUB6780

		LDA	#0000FH

AHOBD_SUB6780	EQU	$
		STA	ENCHPT,X

AHOBD_SUB6800	EQU	$

		RTS
;
;************************************************************************
;*		initial ( でぶあほーどり )				*
;************************************************************************
DBAHO_I_XSPD	EQU	$
		WORD	0FF40H,000C0H
;
DBAHOIN		EQU	$			;-- dbahoin --
		LDA	ENWRKA,X
		INC	A	;[ CMP	#0FFFFH ]
		BNE	DBAHOIN0400

DBAH2IN		EQU	$			;-- dbah2in --
DBAHOIN0300	EQU	$
		INC	<ENWRK0,X		;はねセットロックフラグセット

		INC	ENCHPT,X
		LDY	#DBAHO_RMODE40
		STY	<ENWRK2,X
		LDA	#00040H
		STA	ENGPOW,X
		LDA	#00400H
		STA	ENGMAX,X
		LDA	#0000100001000011B	;ひっくり返る
		STA	ENMOD1,X
		LDA	#0111010010100010B	;乗れる、食うとダメージ
		STA	ENMOD0,X
		STZ	ENWRKA,X
		LDA	ENMUKI,X
		STA	ENWRKC,X
		BRA	DBAHOIN0500

DBAHOIN0400	EQU	$
		STZ	ENWRKA,X

		LDA	ENXPSL,X
		PHA
		SEC
		SBC	ESCCH1
		STA	<EWORK0
		PLA
		AND	#00010H
		EOR	#00010H
		SEC
		SBC	#00010H
		EOR	<EWORK0
		BPL	DBAHOIN0480

		LDA	<EWORK0
		CLC
		ADC	#00010H
		CMP	#00100H+010H*2
		BCS	DBAHOIN0500

DBAHOIN0480	EQU	$
		LDA	#000FFH
		STA	ENYUSN,X

		LDA	#EINIT
		STA	ENMODE,X

		RTL

DBAHOIN0500	EQU	$
		JSL	>TROBJ_SR_4x4_CL

		LDY	ENMUKI,X
		LDA	!DBAHO_I_XSPD,Y
		STA	ENXSPD,X

		LDA	#00100H			;初期倍率セット
		STA	ENWRK6,X

		LDA	#00005
		STA	ENYUSN,X

		JSR	DBAHO_ROT_SET

		RTL
;
;************************************************************************
;*		move	( でぶあほーどり )				*
;************************************************************************
;B		ENWRK0	はねセットロックフラグ
;B		ENWRK1	向きセーブ
;		ENWRK2	ROUTINE MODE INDEX
;B		ENWRK4	ＢＧチェックフラグ 0..NO 2..頭 4..足 6..左 8..右
;B		ENWRK5	ENCHPT
;		ENWRK6	縦倍率
;		ENWRK8	プレイヤーＯＮフラグ（羽根有り）／回転角（羽根なし）
;		ENWRKA	USE
;		ENWRKC	USE
;
;		ENCONT	ＢＧチェック時のＹスピード
;
;		ENTIM0	ストップタイマー
;		ENTIM1	キャラパターンチェンジタイマー
;		ENTIM2
;		ENTIM3
;
DBAHO_SUB	EQU	$
		WORD	DBAHO_SUB0	;はばたき
DBAHO_10	EQU	$
		WORD	DBAHO_SUB10	;はね（足）ちぢみ
DBAHO_11	EQU	$
		WORD	DBAHO_SUB11	;はね（足）のび
		WORD	DBAHO_SUB12	;はね（足）もどり
DBAHO_20	EQU	$
		WORD	DBAHO_SUB20	;はね（頭）ちぢみ
		WORD	DBAHO_SUB21	;はね（頭）のび
		WORD	DBAHO_SUB22	;はね（頭）もどり
DBAHO_30	EQU	$
		WORD	DBAHO_SUB30	;はね（横）ちぢみ
		WORD	DBAHO_SUB31	;はね（横）のび
		WORD	DBAHO_SUB32	;はね（横）もどり
DBAHO_40	EQU	$
		WORD	DBAHO_SUB40	;ごろごろ
;
DBAHO_RMODE10	EQU	(DBAHO_10-DBAHO_SUB)/2
DBAHO_RMODE11	EQU	(DBAHO_11-DBAHO_SUB)/2
DBAHO_RMODE20	EQU	(DBAHO_20-DBAHO_SUB)/2
DBAHO_RMODE30	EQU	(DBAHO_30-DBAHO_SUB)/2
DBAHO_RMODE40	EQU	(DBAHO_40-DBAHO_SUB)/2
;
DBAHO_MOD0	EQU	$
		WORD	0111010010100010B
		WORD	0111010001000010B
;
DBAHOMV		EQU	$			;-- dbahomv --
DBAH2MV		EQU	$			;-- dbah2mv --
		JSR	DBAHO_OAM_SET

		JSR	AHOBD_EAT_CHK

		LDA	ENCOLD,X
		BEQ	DBAHOMV0100

		STZ	ENMOD1,X

DBAHOMV0100	EQU	$
		JSL	>ENMDCK

		TXY
		LDA	<ENWRK2,X
		ASL	A
		TAX
		JSR	(DBAHO_SUB,X)

		LDY	ENCHPT,X		;ごろごろ ?
		BNE	DBAHOMV0500		; yes: DBAHOMV0500

		JSR	AHOBD_SHOT_CHK

DBAHOMV0500	EQU	$
		JSR	DBAHO_ROT_SET

		LDA	ONLFFG
		STA	<EWORK0

		LDY	ENCHPT,X		;ごろごろ ?
		BNE	DBAHOMV0700		; yes: DBAHOMV0700

		JSR	DBAHO_PLCHK

		JSR	DBAHO_CPOS_CAL

		RTL

DBAHOMV0700	EQU	$
		JSL	>ST_ENMY_REFRECT

		JSL	>EPCRCK

		LDY	#000
		LDA	ONLFFG			;プレイヤーに乗られた ?
		CMP	<EWORK0			;
		BEQ	DBAHOMV0800		;  no: DBAHOMV0800

		INY
		INY

DBAHOMV0800	EQU	$
		LDA	!DBAHO_MOD0,Y
		STA	ENMOD0,X
		LDA	#00008
		STA	ECNTXW,X
		STA	ECNTYW,X

		RTL
;
DBAHO_CHAR_ADR	EQU	$
		WORD	DBAHO_C_0
		WORD	DBAHO_C_1
		WORD	DBAHO_C_2
		WORD	DBAHO_C_3
		WORD	DBAHO_C_4
		WORD	DBAHO_C_5
		WORD	DBAHO_C_6
		WORD	DBAHO_C_7
		WORD	DBAHO_C_8
		WORD	DBAHO_C_9
;
DBAHO_CHAR	EQU	$
DBAHO_C_0	EQU	$
		BYTE	00EH,0EDH	;[00]
		HEX	05,00,02
		BYTE	00EH,0FDH
		HEX	07,00,00
		BYTE	010H,0E6H
		HEX	0D,00,00
;
		BYTE	0F4H,0EDH
		HEX	05,40,02
		BYTE	0FCH,0FDH
		HEX	07,40,00
		BYTE	0FAH,0E6H
		HEX	0D,40,00
;
DBAHO_C_1	EQU	$
		BYTE	010H,0F5H	;[01]
		HEX	08,00,02
		BYTE	015H,0F0H
		HEX	0D,00,00
		BYTE	015H,0F0H
		HEX	0D,00,00
;
		BYTE	0F2H,0F5H
		HEX	08,40,02
		BYTE	0F5H,0F0H
		HEX	0D,40,00
		BYTE	0F5H,0F0H
		HEX	0D,40,00
;
DBAHO_C_2	EQU	$
		BYTE	010H,0FDH	;[02]
		HEX	0A,00,02
		BYTE	010H,0FDH
		HEX	0A,00,00
		BYTE	010H,005H
		HEX	1A,00,00
;
		BYTE	0F2H,0FDH
		HEX	0A,40,02
		BYTE	0FAH,0FDH
		HEX	0A,40,00
		BYTE	0FAH,005H
		HEX	1A,40,00
;
DBAHO_C_3	EQU	$
		BYTE	010H,006H	;[03]
		HEX	0C,00,02
		BYTE	010H,006H
		HEX	0C,00,00
		BYTE	010H,006H
		HEX	0C,00,00
;
		BYTE	0F2H,006H
		HEX	0C,40,02
		BYTE	0FAH,006H
		HEX	0C,40,00
		BYTE	0FAH,00EH
		HEX	0C,40,00
;
DBAHO_C_4	EQU	$
		BYTE	010H,008H	;[04]
		HEX	17,00,00
		BYTE	010H,008H
		HEX	17,00,00
		BYTE	010H,010H
		HEX	0E,00,02
;
		BYTE	0FAH,008H
		HEX	17,40,00
		BYTE	0FAH,008H
		HEX	17,40,00
		BYTE	0F2H,010H
		HEX	0E,40,02
;
DBAHO_C_5	EQU	$
		BYTE	010H,007H	;[05]
		HEX	08,80,02
		BYTE	015H,014H
		HEX	0D,80,00
		BYTE	015H,014H
		HEX	0D,80,00
;
		BYTE	0F2H,007H
		HEX	08,C0,02
		BYTE	0F5H,014H
		HEX	0D,C0,00
		BYTE	0F5H,014H
		HEX	0D,C0,00
;
DBAHO_C_6	EQU	$
		BYTE	010H,0FFH	;[06]
		HEX	0A,80,02
		BYTE	010H,007H
		HEX	0A,80,00
		BYTE	010H,0FFH
		HEX	1A,80,00
;
		BYTE	0F2H,0FFH
		HEX	0A,C0,02
		BYTE	0FAH,007H
		HEX	0A,C0,00
		BYTE	0FAH,0FFH
		HEX	1A,C0,00
;
DBAHO_C_7	EQU	$
		BYTE	00FH,0F6H	;[07]
		HEX	0C,80,02
		BYTE	00FH,0FEH
		HEX	0C,80,00
		BYTE	00FH,0F6H
		HEX	1C,80,00
;
		BYTE	0F3H,0F6H
		HEX	0C,C0,02
		BYTE	0FBH,0FEH
		HEX	0C,C0,00
		BYTE	0FBH,0F6H
		HEX	1C,C0,00
;
DBAHO_C_8	EQU	$
		BYTE	00FH,0FEH	;[08]
		HEX	17,80,00
		BYTE	00FH,0FEH
		HEX	17,80,00
		BYTE	00FH,0EEH
		HEX	0E,80,02
;
		BYTE	0FBH,0FEH
		HEX	17,C0,00
		BYTE	0FBH,0FEH
		HEX	17,C0,00
		BYTE	0F3H,0EEH
		HEX	0E,C0,02
;
DBAHO_C_9	EQU	$
		BYTE	010H,0F5H	;[09]
		HEX	08,00,02
		BYTE	015H,0F0H
		HEX	0D,00,00
		BYTE	015H,0F0H
		HEX	0D,00,00
;
		BYTE	0F2H,0F5H
		HEX	08,40,02
		BYTE	0F5H,0F0H
		HEX	0D,40,00
		BYTE	0F5H,0F0H
		HEX	0D,40,00
;
;
DBAHO_CHAR_POS	EQU	$
		HEX	008,0FD,0FA,0FD
		HEX	0F8,0FD,006,0FD
;
;		ENWRK4	ＢＧチェックフラグ 0..NO 2..頭 4..足 6..左 8..右
DBAHO_POS_XREV	EQU	$
		WORD	00000H,00000H,00000H,00010H,0FFF0H
DBAHO_POS_YREV	EQU	$
		WORD	00000H,00010H,0FFF0H,00000H,00000H
;
DBAHO_OAM_SET	EQU	$
		LDY	ENYUSN,X
		BPL	DBAHO_O_SET0000

		RTS

DBAHO_O_SET0000 EQU	$
		LDY	ENCHPT,X
		BEQ	DBAHO_O_SET0100
		JMP	DBAHO_O_SET1000

DBAHO_O_SET0100 EQU	$
		LDA	ENDSXL,X		;ENDSXL
		STA	R1
		LDA	ENDSYL,X		;ENDSYL
		STA	R2

		LDA	ENWRK6,X		;縦倍率
		STA	CREG6

		CMP	#00100H			;(R6) <- 横倍率セット
		BPL	DBAHO_O_SET0200

		ASL	A
		EOR	#0FFFFH
		CLC
		ADC	#00300H+1
		BRA	DBAHO_O_SET0300

DBAHO_O_SET0200 EQU	$
		AND	#000FFH
		STA	R0
		LDA	#00140H
		STA	R6
		M_CHIP	MULTIPLY
		LDX	<ENINDX
		LDA	R0
		CLC
		ADC	#00100H-00200H
		EOR	#0FFFFH
		INC	A

DBAHO_O_SET0300 EQU	$
		STA	R6			;

		LDY	<ENWRK5,X
		TYA
		STA	R7
		LDA	ENMUKI,X
		STA	R8
		TXA
		STA	R10
		LDA	#BANK DBAHO_CHAR
		STA	R0
		LDA	#DBAHO_CHAR_POS
		STA	R14
		LDA	#DBAHO_CHAR_ADR
		STA	CCWORK0
		LDY	<ENWRK4,X
		LDA	!DBAHO_POS_XREV,Y
		STA	R12
		LDA	!DBAHO_POS_YREV,Y
		STA	R13
		M_CHIP	M_DBAHO_OAMSET
		LDX	<ENINDX
		I16
		LDA	ENOAML,X
		CLC
		ADC	#008*3
		TAY
		JSL	>TROBJ_OAM_4x4_I
		IDX8

		RTS

DBAHO_O_SET1000 EQU	$
		JSL	>TROBJ_OAM_4x4

		I16
		LDY	ENOAML,X
		LDA	#08000H
		STA	SOAM_DX+0+8*4,Y
		STA	SOAM_DX+0+8*5,Y
		STA	SOAM_DX+0+8*6,Y
		STA	SOAM_DX+0+8*7,Y
		STA	SOAM_DX+0+8*8,Y
		STA	SOAM_DX+0+8*9,Y
		I8

		RTS
;
DBAHO_ZOM_XPS	EQU	$
		WORD	00000H,00010H,00010H,00004H,0001CH
DBAHO_ZOM_YPS	EQU	$
		WORD	00000H,00004H,0001CH,00010H,00010H
;
DBAHO_ROT_SET	EQU	$
		LDY	ENCHPT,X
		BEQ	DBAHO_R_SET0100
		JMP	DBAHO_R_SET1000

DBAHO_R_SET0100 EQU	$
		LDA	ENWRK6,X		;(R11) <- Ｙ倍率セット
		STA	R11			;

		CMP	#00100H			;(R6) <- 横倍率セット
		BPL	DBAHO_R_SET0200

		ASL	A
		EOR	#0FFFFH
		CLC
		ADC	#00300H+1
		BRA	DBAHO_R_SET0300

DBAHO_R_SET0200 EQU	$
		AND	#000FFH
		STA	R0
		LDA	#00140H
		STA	R6
		M_CHIP	MULTIPLY
		LDX	<ENINDX
		LDA	R0
		CLC
		ADC	#00100H-00200H
		EOR	#0FFFFH
		INC	A

DBAHO_R_SET0300 EQU	$
		STA	R6			;

		LDA	#BANK CIPCHD+2080H+001	;chara data bank set
		STA	R13
		LDA	#CIPCHD+2080H+001	;chara data address set
		STA	R12

		LDY	<ENWRK4,X
		LDA	!DBAHO_ZOM_XPS,Y	;(R8) <- 中心Ｘ　ＰＯＳ．
		STA	R8			;
		LDA	!DBAHO_ZOM_YPS,Y	;(R9) <- 中心Ｙ　ＰＯＳ．
		STA	R9			;
		LDY	ENMUKI,X
		BEQ	DBAHO_R_SET0500

		LDA	#00020H
		SEC
		SBC	R8
		STA	R8

DBAHO_R_SET0500 EQU	$
		LDY	ENTROB,X
		TYX
		LDA	>TROBJ_PLOT_X,X		;回転エリアＸ　ＰＯＳ．セット
		STA	R3			;
		LDA	>TROBJ_PLOT_Y,X		;回転エリアＹ　ＰＯＳ．セット
		STA	R2			;

		M_CHIP	C_32_ZOOM_XY

		LDX	<ENINDX

		INC	OBM7WF			;mode 7 OBJ chara DMA "ON"

		RTS
;
DBAHO_R_SET1000 EQU	$
		LDA	#BANK CIPCHD+2080H+001	;(R13) <-- 転送元バンクセット
		STA	R13			;
		LDA	#CIPCHD+2080H+001	;(R12) <-- 転送元アドレスセット
		STA	R12			;

		LDY	ENWRK8,X		;(R5) <- 回転角セット
		TYA
		STA	R5			;

		LDA	#00100H			;(R6) <- 倍率セット
		STA	R6			;

		LDY	ENTROB,X
		TYX
		LDA	>TROBJ_PLOT_X,X		;(R3) <- ビットマップ座標＿Ｘセット
		STA	R3			;
		LDA	>TROBJ_PLOT_Y,X		;(R2) <- ビットマップ座標＿Ｙセット
		STA	R2			;
;
;-------------- OBJ mode 7 set ----------------------------------
		M_CHIP	C_32_ROTZOM

		LDX	<ENINDX

		INC	OBM7WF		;mode 7 OBJ chara DMA "ON"

		RTS
;
DBAHO_PLCHK	EQU	$
		LDA	EWIDEX,X
		CLC
		ADC	PWIDEX
		STA	<EWORK0
		ASL	A
		STA	<EWORK2

		LDA	EWIDEY,X
		CLC
		ADC	PWIDEY
		STA	<EWORK4
		ASL	A
		STA	<EWORK6

		LDY	ENWRK8,X
		BEQ	DBAHO_PLCHK0000
		JMP	DBAHO_PLCHK1000

DBAHO_PLCHK0000 EQU	$
		LDA	EPWIDX,X		;横あたりＯＫ ?
		CLC				;
		ADC	<EWORK0			;
		CMP	<EWORK2			;
		BCS	DBAHO_PLCHK0800		;  no: DBAHO_PLCHK0800

		LDA	EPWIDY,X		;縦あたりＯＫ ?
		CLC				;
		ADC	<EWORK4			;
		SEC				;
		SBC	<EWORK6			;
		BCS	DBAHO_PLCHK0800		;  no: DBAHO_PLCHK0800
		CMP	#0FFF8H			;プレイヤーに乗られてる ?
		BCC	DBAHO_PLCHK0700		;  no: DBAHO_PLCHK0700

		LDY	PLJUMP			;プレイヤージャンプ中
		BEQ	DBAHO_PLCHK0400		;  no: DBAHO_PLCHK0400
		LDY	PLYSPD+1		;上昇中 ?
		BMI	DBAHO_PLCHK0800		; yes: DBAHO_PLCHK0800

DBAHO_PLCHK0400 EQU	$
		LDA	ECENTY,X
		SEC
		SBC	<EWORK4
		SEC
		SBC	PCENTY
		SEC
		ADC	PLYPSL
		INC	A
		STA	PLYPSL

		LDA	#00001			;プレイヤーＯＮフラグセット
		STA	ENWRK8,X

		STZ	PLYSPD
		STZ	PLJUMP
		STZ	PLDOSN
		INC	ONLFFG

		LDA	#0111010001100000B	;食えない、投げた敵あたらない
		STA	ENMOD0,X

		RTS
;
;-------------- プレイヤーと横当たり ----------------------------
DBAHO_PLCHK0700 EQU	$
		JSL	>PLFLST

DBAHO_PLCHK0800 EQU	$

		RTS

DBAHO_PLCHK1000 EQU	$
		STZ	ENWRK8,X		;プレイヤーＯＮフラグクリア
		LDA	#0111010000000000B	;食える、投げた敵あたる
		STA	ENMOD0,X

		LDA	EPWIDX,X		;横あたりＯＫ ?
		CLC				;
		ADC	<EWORK0			;
		CMP	<EWORK2			;
		BCS	DBAHO_PLCHK0800		;  no: DBAHO_PLCHK0800

		LDY	PLJUMP			;プレイヤージャンプ中
		BEQ	DBAHO_PLCHK1400		;  no: DBAHO_PLCHK1400
		LDY	PLYSPD+1		;上昇中 ?
		BMI	DBAHO_PLCHK0800		; yes: DBAHO_PLCHK0800

DBAHO_PLCHK1400 EQU	$
		LDA	PLXPSL
		CLC
		ADC	ENMOVX,X
		STA	PLXPSL
		LDA	PLYPSL
		CLC
		ADC	ENMOVY,X
		STA	PLYPSL
		BRA	DBAHO_PLCHK0400
;
DBAHO_CPOS_CAL	EQU	$
		LDA	#0000CH
		STA	R0
		LDA	ENWRK6,X
		STA	R6
		M_CHIP	MULTIPLY
		LDX	<ENINDX

		LDY	<ENWRK4,X		;壁にあたった ?
		CPY	#006			;
		BPL	DBAHO_C_CAL0500		; yes: DBAHO_C_CAL0500
		CPY	#002			;足があたった ?
		BNE	DBAHO_C_CAL0100		; yes: DBAHO_C_CAL0100

		LDA	R0
		SEC
		SBC	#00004
		BRA	DBAHO_C_CAL0200

DBAHO_C_CAL0100 EQU	$
		LDA	#00014H
		SEC
		SBC	R0

DBAHO_C_CAL0200 EQU	$
		STA	<EWORK0

		LDY	ENWRK8,X		;プレイヤー乗ってる ?
		BEQ	DBAHO_C_CAL0400		;  no: DBAHO_C_CAL0400

		SEC
		SBC	ECNTYW,X
		CLC
		ADC	PLYPSL
		STA	PLYPSL

DBAHO_C_CAL0400 EQU	$
		LDA	<EWORK0
		STA	ECNTYW,X

DBAHO_C_CAL0500 EQU	$
		LDY	ENWRK8,X		;プレイヤー乗ってる ?
		BEQ	DBAHO_C_CAL0600		;  no: DBAHO_C_CAL0600

		LDA	R0
		SEC
		SBC	EWIDEY,X
		CLC
		ADC	PLYPSL
		STA	PLYPSL

DBAHO_C_CAL0600 EQU	$
		LDA	R0
		STA	EWIDEY,X

		RTS
;
DBAHO_BGCHK_DT	EQU	$-1
;ENCBFG =		[1] [2] [3] [4] [5] [6] [7] [8] [9]
		HEX	004,002,004,008,004,002,004,006,004
;ENCBFG =		[A] [B] [C] [D] [E] [F]
		HEX	002,004,002,004,002,004
;
DBAHO_NEXT_RT	EQU	$-2
		WORD	DBAHO_RMODE20		;頭
		WORD	DBAHO_RMODE10		;足
		WORD	DBAHO_RMODE30		;左
		WORD	DBAHO_RMODE30		;右
;
DBAHO_SUB0	EQU	$
		TYX

		LDA	ENCBFG,X		;ＢＧにくっついた ?
		AND	#0000FH			;
		BEQ	DBAHO_SUB0500		;  no: DBAHO_SUB0500

		TAY
		LDA	!DBAHO_BGCHK_DT,Y
		TAY
		STY	<ENWRK4,X
		LDA	!DBAHO_NEXT_RT,Y
		STA	<ENWRK2,X

		STZ	ENXSPD,X
		STZ	ENYSPD,X
		STZ	ENGPOW,X

		LDY	#009
		STY	<ENWRK5,X

		RTS

DBAHO_SUB0500	EQU	$
		LDA	ENYSPD,X
		CMP	#00100H
		BMI	DBAHO_SUB0600

		LDA	#00040H
		STA	ENGPOW,X
		LDA	#00400H
		STA	ENGMAX,X

		STZ	<ENWRK5,X
		BRA	DBAHO_SUB0800

DBAHO_SUB0600	EQU	$
		JSR	DBAHO_HABATAKI

DBAHO_SUB0700	EQU	$
		LDA	ENYSPD,X
		CMP	#0FF00H
		BMI	DBAHO_SUB0800

		LDA	#00008H
		STA	ENGPOW,X
		LDA	#00100H
		STA	ENGMAX,X

DBAHO_SUB0800	EQU	$
		LDA	ENYSPD,X		;Ｙスピードセーブ
		STA	<ENCONT,X

		RTS
;
DBAHO_SUB10	EQU	$
DBAHO_SUB20	EQU	$
		TYX

		LDA	ENWRK6,X
		SEC
		SBC	#00004H
		CMP	#000D0H
		BPL	DBAHO_SUB10800

		LDA	#00008
		STA	ENWRKA,X
		INC	<ENWRK2,X

		LDA	#000D0H

DBAHO_SUB10800	EQU	$
		STA	ENWRK6,X

		RTS
;
DBAHO_SUB11	EQU	$
DBAHO_SUB21	EQU	$
		TYX

		LDA	ENWRK6,X
		CLC
		ADC	ENWRKA,X
		CMP	#00100H
		BMI	DBAHO_SUB11800

		PHA
		LDA	#00003			;［Ｓ］
		JSL	>SOUND_3_ON
;;;;;;;;		LDA	#0000EH			;［Ｓ］
;;;;;;;;		STA	SOUND0

		LDY	<ENWRK2,X
		CPY	#DBAHO_RMODE11		;足あたり ?
		BNE	DBAHO_SUB11400		;  no: DBAHO_SUB11400

		LDY	ENYSPD+1,X
		BMI	DBAHO_SUB11300

		LDA	#0FC00H
		STA	ENYSPD,X

		LDA	#00200H
		STA	ENGMAX,X
		LDA	#00020H
		STA	ENGPOW,X
		LSR	A		;[ LDA	#00010H ]
		STA	ENWRKA,X

DBAHO_SUB11300	EQU	$
		JSR	DBAHO_HABATAKI

DBAHO_SUB11400	EQU	$
		LDA	#00020H
		STA	ENGPOW,X
		LDY	ENMUKI,X
		LDA	!DBAHO_I_XSPD,Y
		STA	ENXSPD,X
		PLA
		CMP	#00140H
		BMI	DBAHO_SUB11800

		INC	<ENWRK2,X

DBAHO_SUB11800	EQU	$
		STA	ENWRK6,X

		RTS
;
DBAHO_SUB12	EQU	$
DBAHO_SUB22	EQU	$
		TYX

		LDA	ENWRK6,X
		SEC
		SBC	#0008
		CMP	#00100H
		BPL	DBAHO_SUB12800

		STZ	<ENWRK2,X
		LDA	#00100H

DBAHO_SUB12800	EQU	$
		STA	ENWRK6,X

		JMP	DBAHO_HABATAKI
;
DBAHO_SUB30	EQU	$
		TYX

		LDA	ENWRK6,X
		CLC
		ADC	#00008
		CMP	#00140H
		BMI	DBAHO_SUB30800

		INC	<ENWRK2,X
		LDA	#00140H

DBAHO_SUB30800	EQU	$
		STA	ENWRK6,X

		RTS
;
DBAHO_SUB31	EQU	$
		TYX

		LDA	ENWRK6,X
		SEC
		SBC	#00004
		CMP	#00100H
		BPL	DBAHO_SUB31300

		LDY	ENXSPD,X
		BNE	DBAHO_SUB31300

		PHA
		LDA	ENMUKI,X
		EOR	#00002
		STA	ENMUKI,X
		TAY
		LDA	!DBAHO_I_XSPD,Y
		STA	ENXSPD,X
		LDA	<ENCONT,X
		STA	ENYSPD,X
		LDA	#00020H
		STA	ENGPOW,X
		LDA	#00003			;［Ｓ］
		JSL	>SOUND_3_ON
;;;;;;;;		LDA	#0000EH			;［Ｓ］
;;;;;;;;		STA	SOUND0
		PLA

DBAHO_SUB31300	EQU	$
		CMP	#000E8H
		BPL	DBAHO_SUB31800

		INC	<ENWRK2,X

DBAHO_SUB31800	EQU	$
		STA	ENWRK6,X

		RTS
;
DBAHO_SUB32	EQU	$
		TYX

		LDA	ENWRK6,X
		CLC
		ADC	#00004
		CMP	#00100H
		BMI	DBAHO_SUB32800

		STZ	<ENWRK2,X
		LDA	#00100H

DBAHO_SUB32800	EQU	$
		STA	ENWRK6,X

		RTS
;
DBAHO_S40_AADD	EQU	$
		WORD	00004H,0FFFCH
;
DBAHO_SUB40	EQU	$
		TYX

		LDY	<ENWRK1,X
		LDA	ENWRK8,X
		CLC
		ADC	!DBAHO_S40_AADD,Y
		AND	#001FEH
		STA	ENWRK8,X

		LDA	ENCBFG,X		;横カベ ?
		AND	#0000CH			;
		BEQ	DBAHO_SUB40800		;  no: DBAHO_SUB40800

		LDA	<ENWRK1,X
		EOR	#00002
		STA	<ENWRK1,X

		LDA	ENWRKC,X
		STA	ENMUKI,X

;;;;;;;;		LDA	ENWRK8,X
;;;;;;;;		CLC
;;;;;;;;		ADC	#00100H
;;;;;;;;		AND	#001FEH
;;;;;;;;		STA	ENWRK8,X

DBAHO_SUB40800	EQU	$

		RTS
;
DBAHO_HABATAKI	EQU	$
		LDA	ENTIM1,X
		BNE	DBAHO_HABA0800

;;;;;;;;		LDA	#00001
		INC	ENTIM1,X

		LDY	<ENWRK5,X
		INY
		CPY	#009
		BMI	DBAHO_HABA0600

		LDY	#000

DBAHO_HABA0600	EQU	$
		STY	<ENWRK5,X

DBAHO_HABA0800	EQU	$

		RTS
;
;************************************************************************
;*		initial ( あわふきくん )				*
;************************************************************************
AWAFKIN		EQU	$			;-- awafkin --
		LDA	#00100H			;初期倍率セット
		STA	ENWRK6,X

		RTL
;
;************************************************************************
;*		move	( あわふきくん )				*
;************************************************************************
;		ENWRK0
;		ENWRK2	ROUTINE MODE INDEX
;		ENWRK4	キャラパターンフラグ
;		ENWRK6	縦倍率
;		ENWRK8
;		ENWRKA
;		ENWRKC
;
;		ENTIM0
;		ENTIM1
;		ENTIM2
;		ENTIM3
;
;		ENCONT
;
AWAFK_SUB	EQU	$
		WORD	AWAFK_SUB0		;かんがえ
		WORD	AWAFK_SUB1		;ぱしり
		WORD	AWAFK_SUB2		;ずーむ（ちぢむ）
		WORD	AWAFK_SUB3		;ずーむ（もどる）
;
AWAFKMV		EQU	$			;-- awafkmv --
		LDY	ENTROB,X
		BMI	AWAFKMV0100

		LDY	ENYUSN,X
		BMI	AWAFKMV0100

		I16
		LDA	ENOAML,X
		CLC
		ADC	#00008
		TAY

		JSL	>TROBJ_OAM_4x4_I
		IDX8

		LDA	#00004
		STA	R0
		LDA	#00200H
		SEC
		SBC	ENWRK6,X
		STA	R6

		M_CHIP	MULTIPLY

		LDX	<ENINDX
		LDA	ECENTX,X
		SEC
		SBC	ESCCH1
		STA	<EWORK0
		I16
		LDA	R0
		LDY	ENMUKI,X
		BEQ	AWAFKMV0040

		LDY	ENOAML,X
		LDA	<EWORK0
		SEC
		SBC	R0
		SEC
		SBC	#00008
		STA	SOAM_DX+0+8*0,Y
		LDA	<EWORK0
		CLC
		ADC	R0
		BRA	AWAFKMV0080

AWAFKMV0040	EQU	$
		LDY	ENOAML,X
		LDA	<EWORK0
		CLC
		ADC	R0
		STA	SOAM_DX+0+8*0,Y
		LDA	<EWORK0
		SEC
		SBC	R0
		SEC
		SBC	#00008

AWAFKMV0080	EQU	$
		STA	SOAM_DX+0+8*5,Y
		I8

AWAFKMV0100	EQU	$
		JSL	>ENMDCK

		JSR	AWAFK_OBJCHK

		TXY
		LDA	<ENWRK2,X
		ASL	A
		TAX
		JSR	(AWAFK_SUB,X)

		JSR	AWAFK_ROT_SET

		JMP	>SHOT_EN_KILL_S2
;
AWAFK_OBJCHK	EQU	$
		LDA	ENCBFG,X
		AND	#00001
		BEQ	AWAFK_OCHK0100

		LDY	PLYSPD+1		;プレイヤー上昇中 ?
		BMI	AWAFK_OCHK0080		; yes: AWAFK_OCHK0080

		LDY	PLEATFG			;プレイヤー食われてる ?
		BEQ	AWAFK_OCHK0100		;  no: AWAFK_OCHK0100

AWAFK_OCHK0080	EQU	$
		JMP	AWAFK_OCHK0500

AWAFK_OCHK0100	EQU	$
		LDA	#00006			;プレイヤー横チェックＯＫ ?
		STA	R0			;
		LDA	#00200H			;
		SEC				;
		SBC	ENWRK6,X		;
		STA	R6			;
						;
		M_CHIP	MULTIPLY		;
						;
		LDX	<ENINDX			;
		LDA	R0			;
		CLC				;
		ADC	PWIDEX			;
		STA	<EWORK0			;
		ASL	A			;
		STA	<EWORK2			;
						;
		LDA	EPWIDX,X		;
		CLC				;
		ADC	<EWORK0			;
		CMP	<EWORK2			;
		BCS	AWAFK_OCHK0080		;  no: AWAFK_OCHK0080

		LDA	#0000CH			;プレイヤー上チェックＯＫ ?
		STA	R0			;
		LDA	ENWRK6,X		;
		STA	R6			;
						;
		M_CHIP	MULTIPLY		;
						;
		LDX	<ENINDX			;
		LDA	ENYPSL,X
		CLC
		ADC	#0000FH			;10-1
		SEC
		SBC	R0
		SEC
		SBC	PCENTY
		SEC
		SBC	PWIDEY
		STA	<EWORK0

		CMP	#0FFF8H			;
		BCC	AWAFK_OCHK0400		;  no: AWAFK_OCHK0400

		CPX	PONLFFG			;プレイヤーはすでに乗ってる ?
		BEQ	AWAFK_OCHK0300		; yes: AWAFK_OCHK0300

		LDY	PONLFFG			;プレイヤーはすでにほかのやつに乗ってる ?
		BNE	AWAFK_OCHK0500		; yes: AWAFK_OCHK0500

		STX	PONLFFG

		LDY	ENTROB,X		;回転エリアＵＳＥ ?
		BPL	AWAFK_OCHK0200		; yes: AWAFK_OCHK0200

		JSL	>TROBJ_SR_4x4		;回転エリア確保ＯＫ ?
		BCC	AWAFK_OCHK0200		;  no: AWAFK_OCHK0200

		LDA	#00004
		STA	ENCHPT,X

AWAFK_OCHK0200	EQU	$
		LDY	#002
		STY	<ENWRK2,X
		STZ	ENXSPD,X

AWAFK_OCHK0300	EQU	$
		LDA	PLYPSL
		SEC		;[ INC	A ]
		ADC	<EWORK0
		INC	A
		STA	PLYPSL
		STZ	PLDOSN
		STZ	PLYSPD
		INC	ONLFFG
		LDA	#0111010001000000B	;食えない
		STA	ENMOD0,X

		RTS

AWAFK_OCHK0400	EQU	$
		BPL	AWAFK_OCHK0500

		LDY	ECRSFG,X
		BPL	AWAFK_OCHK0600

		JSL	>PLFLST

AWAFK_OCHK0500	EQU	$
		CPX	PONLFFG
		BNE	AWAFK_OCHK0700

AWAFK_OCHK0600	EQU	$
		STZ	PONLFFG

AWAFK_OCHK0700	EQU	$
		LDA	#0111010010000000B	;食える
		STA	ENMOD0,X

		RTS
;
AWAFK_ROT_SET	EQU	$
		LDY	ENTROB,X
		BMI	AWAFK_R_SET0800

		LDA	ENWRK6,X		;(R11) <- Ｙ倍率セット
		STA	R11			;
		LDA	#00200H			;(R6) <- Ｘ倍率セット
		SEC				;
		SBC	ENWRK6,X		;
		STA	R6			;

		LDA	#BANK CIPCHD+3050H+000	;chara data bank set
		STA	R13
		LDA	#CIPCHD+3050H+000	;chara data address set
		STA	R12

		LDA	#00008H			;(R8) <- 中心Ｘ　ＰＯＳ．
		STA	R8			;
		ASL	A			;(R9) <- 中心Ｙ　ＰＯＳ．
		STA	R9			;

		LDY	ENTROB,X
		TYX
		LDA	>TROBJ_PLOT_X,X		;回転エリアＸ　ＰＯＳ．セット
		STA	R3			;
		LDA	>TROBJ_PLOT_Y,X		;回転エリアＹ　ＰＯＳ．セット
		STA	R2			;

		M_CHIP	C_32_ZOOM_XY_16

		LDX	<ENINDX

		INC	OBM7WF			;mode 7 OBJ chara DMA "ON"

		LDY	ENCHPT,X
		CPY	#003
		BNE	AWAFK_R_SET0800

		JSL	>TROBJ_CLEAR

AWAFK_R_SET0800 EQU	$

		RTS
;
AWAFK_S0_XSPD	EQU	$
		WORD	0FF00H,00100H
;
AWAFK_SUB0	EQU	$
		TYX

		LDA	ENCBFG,X		;地面に着いてる ?
		AND	#00001			;
		BEQ	AWAFK_SUB0300		; yes: AWAFK_SUB0300

		LDA	#0000100001000001B	;行ったり来たりする
		STA	ENMOD1,X
		BRA	AWAFK_SUB0500

AWAFK_SUB0300	EQU	$
		INC	ENTIM0,X

AWAFK_SUB0500	EQU	$
		LDA	ENTIM0,X
		BNE	AWAFK_SUB0800

		LDA	<RANDM0
		PHA
		AND	#00002
		STA	ENMUKI,X
		TAY
		LDA	!AWAFK_S0_XSPD,Y
		STA	ENXSPD,X

		PLA
		AND	#0001FH
		CLC
		ADC	#00020H
		STA	ENTIM0,X

		INC	<ENWRK2,X

AWAFK_SUB0800	EQU	$

		RTS
;
AWAFK_CHAR	EQU	$
		HEX	00,01,02,01
;
AWAFK_SUB1	EQU	$
		TYX

		LDA	ENTIM0,X
		BNE	AWAFK_SUB1100

		LDA	#00003
		STA	ENCHPT,X
		LDA	<RANDM0
		AND	#0000FH
		CLC
		ADC	#00008
		STA	ENTIM0,X
		STZ	ENXSPD,X
		STZ	<ENWRK2,X

		RTS

AWAFK_SUB1100	EQU	$
		LDA	<ENWRK4,X
		INC	A
		AND	#00003
		STA	<ENWRK4,X

		LDY	<ENWRK4,X
		LDA	!AWAFK_CHAR,Y
		AND	#000FFH
		STA	ENCHPT,X

		RTS
;
AWAFK_S2_XSPD	EQU	$
		WORD	0FD00H,00300H
;
AWAFK_SUB2	EQU	$
		TYX

		LDA	ENCBFG,X		;地面に着いてる ?
		LSR	A			;
		BCC	AWAFK_SUB2080		;  no: AWAFK_SUB2080

		CPX	PONLFFG
		BEQ	AWAFK_SUB2100

		LDA	#00002
		STA	<ENCONT,X

		INC	<ENWRK2,X

AWAFK_SUB2080	EQU	$

		RTS

AWAFK_SUB2100	EQU	$
		LDA	ENWRK6,X
		SEC
		SBC	#00010H
		CMP	#00040H
		BPL	AWAFK_SUB2500

		LDA	#00040H
		STA	ENWRK6,X

		RTS

AWAFK_SUB2500	EQU	$
		STA	ENWRK6,X

		LDA	ENTIM1,X
		BNE	AWAFK_SUB2080

		LDA	#00006
		STA	R0
		LDA	#00200H
		SEC
		SBC	ENWRK6,X
		STA	R6
		M_CHIP	MULTIPLY
		LDX	<ENINDX
		LDY	ENMUKI,X
		LDA	!AWAFK_S2_XSPD,Y
		STA	<EWORK0

		LDA	R0
		CPY	#000
		BNE	AWAFK_SUB2600

		EOR	#0FFFFH
		INC	A
		SEC
		SBC	#00010H

AWAFK_SUB2600	EQU	$
		STA	<EWORK2

		LDA	#00006
		STA	R0
		LDA	ENWRK6,X
		STA	R6
		M_CHIP	MULTIPLY
		LDX	<ENINDX

		LDA	#SOPB0
 IF BUG10 ;********* シャボンが当たって無い敵に当たるバグ修正[95/8/10] **
		JSL	>ENINSR_I
 ELSE
		JSL	>ENINSR
 ENDIF
		BCC	AWAFK_SUB2800

		LDA	ECENTX,X
		CLC
		ADC	<EWORK2
		STA	ENXPSL,Y
		LDA	ENYPSL,X
		CLC
		ADC	#00008H		;10H-8
		SEC
		SBC	R0
		STA	ENYPSL,Y
		LDA	<EWORK0
		STA	ENXSPD,Y
		LDA	#00010
		STA	ENTIM1,Y
		LDA	#00004
		STA	ENCHPT,Y
		DEC	A		;[ LDA	#00003H ]
		STA	ENTIM1,X
		LDA	ENMOD0,Y	;敵と当たらない様に
		AND	#1111100111111111B
		STA	ENMOD0,Y

		LDA	#00061H			;［Ｓ］
		JSL	>SOUND_3_ON

AWAFK_SUB2800	EQU	$

		RTS
;
AWAFK_S3_ZADD	EQU	$
		WORD	0FFF0H,00020H
AWAFK_S3_ZCMP	EQU	$
		WORD	00100H,001C0H
;
AWAFK_SUB3	EQU	$
		TYX

		LDY	<ENCONT,X
		LDA	ENWRK6,X
		CLC
		ADC	!AWAFK_S3_ZADD,Y
		CMP	!AWAFK_S3_ZCMP,Y
		PHP
		CPY	#000
		BEQ	AWAFK_SUB3300

		PLP
		BMI	AWAFK_SUB3500

		STZ	<ENCONT,X

		LDA	#0FC00H
		STA	ENYSPD,X
		LDA	#0000100001000001B	;行ったり来たりしない
		STA	ENMOD1,X
		BRA	AWAFK_SUB3400

AWAFK_SUB3300	EQU	$
		PLP
		BPL	AWAFK_SUB3500

		LDA	#00010H
		STA	ENTIM0,X
		LDA	#00003
		STA	ENCHPT,X
		STZ	<ENWRK4,X
		STZ	<ENWRK2,X

AWAFK_SUB3400	EQU	$
		LDA	!AWAFK_S3_ZCMP,Y

AWAFK_SUB3500	EQU	$
		STA	ENWRK6,X

		RTS
;
;************************************************************************
;*		initial ( 親かるがも )					*
;************************************************************************
KAMO0IN		EQU	$			;-- kamo0in --
		LDA	#00100H			;初期倍率セット
		STA	ENWRK6,X		;

		JSL	>TROBJ_SR_4x4_CL

		M_CHIP	EGGSEARCH
		LDX	<ENINDX
		LDA	R6
		SEC
		SBC	#00006
		BPL	KAMO0IN0700

		CMP	#0FFFEH
		BPL	KAMO0IN0580

		LDA	#0FFFEH

KAMO0IN0580	EQU	$
		EOR	#0FFFFH
		INC	A
		STA	<EWORK0
		LDA	#00010H
		STA	<EWORK2

		TXY

KAMO0IN0600	EQU	$
		STY	<EWORK4

		LDA	#KAMO1
		JSL	>ENINSR
		BCC	KAMO0IN0700

		LDA	ENXPSL,X
		STA	ENXPSL,Y
		LDA	ENYPSL,X
		STA	ENYPSL,Y
		LDA	ENMUKI,X
		STA	ENMUKI,Y

		LDA	<EWORK2
		STA	ENTIM0,Y
		CLC
		ADC	#00008
		STA	<EWORK2

		LDA	FRCNT2
		STA	ENWRK8,Y
		M8
		TXA
		STA	ENWRK0,Y
		LDA	<EWORK4
		STA	ENWRK1,Y
		M16

		DEC	<EWORK0
		BNE	KAMO0IN0600

KAMO0IN0700	EQU	$
		JSR	KAMO0_ROT_SET

		LDA	FRCNT2
		STA	ENWRK8,X

		RTL
;
;************************************************************************
;*		move	( 親かるがも )					*
;************************************************************************
;		ENWRK0	いじめられフラグ
;		ENWRK2	ROUTINE MODE INDEX
;		ENWRK4
;		ENWRK6	縦倍率
;		ENWRK8	とーちゃんまだ生きてるチェック用フラグ
;		ENWRKA
;		ENWRKC
;
;		ENTIM0	ストップタイマー
;		ENTIM1	キャラパターンチェンジタイマー
;		ENTIM2
;		ENTIM3
;
;		ENCONT	ズーム方向フラグ
;
KAMO0_SUB	EQU	$
		WORD	KAMO0_SUB0		;のぉまる
		WORD	KAMO0_SUB1		;だめーじ（ひしゃげ）
		WORD	KAMO0_SUB2		;だめーじ（じゃんぷ）
		WORD	KAMO0_SUB3		;だめーじ（着地チェック）
;
KAMO0MV		EQU	$			;-- kamo0mv --
		JSR	KAMO0_OAM_SET

		JSL	>ENMDCK

		JSR	KAMO0_CHKPOS_C

		STZ	<EWORKE

		TXY
		LDA	<ENWRK2,X
		ASL	A
		TAX
		JSR	(KAMO0_SUB,X)

		JSR	KAMO0_ROT_SET

		JSR	KAMO0_OBJ_CHK

		RTL
;
KAMO0_OAM_ADD	EQU	$
;ENCHPT =		[0] [1] [2] [3] [4] [5] [6] [7] [8]
		HEX	000,010,008,010,010,010,010,010,000
;
KAMO0_OAM_SET	EQU	$
		LDY	ENTROB,X
		BMI	KAMO0_O_SET0800

		I16
		LDY	ENCHPT,X
		LDA	KAMO0_OAM_ADD,Y
		AND	#000FFH
		CLC
		ADC	ENOAML,X
		TAY

		JSL	>TROBJ_OAM_4x4_I
		IDX8

KAMO0_O_SET0800 EQU	$

		RTS
;
KAMO0_CHKPOS_C	EQU	$
		LDA	#00010H
		STA	R0
		LDA	ENWRK6,X
		STA	R6
		M_CHIP	MULTIPLY
		LDX	<ENINDX
		LDA	ENYPSL,X
		CLC
		ADC	#00010H
		SEC
		SBC	R0
		SEC
		SBC	ECENTY,X
		CLC
		ADC	ECNTYW,X
		STA	ECNTYW,X

		LDA	#0000AH
		STA	R0
		LDA	ENWRK6,X
		STA	R6
		M_CHIP	MULTIPLY
		LDX	<ENINDX
		LDA	R0
		STA	EWIDEY,X

		RTS
;
KAMO0_ROT_SET	EQU	$
		LDY	ENTROB,X
		BMI	KAMO0_R_SET0800

		LDA	ENWRK6,X		;(R11) <- Ｙ倍率セット
		STA	R11			;
		LDA	#00100H			;(R6) <- Ｘ倍率セット
		STA	R6			;

		LDA	<EWORKE			;のーまるうぉーく ?
		BEQ	KAMO0_R_SET0300		;  no: KAMO0_R_SET0300

		LDA	#00200H
		SEC
		SBC	ENWRK6,X
		STA	R6

KAMO0_R_SET0300 EQU	$
		LDA	#BANK CIPCHD3+2000H+000 ;chara data bank set
		STA	R13
		LDA	#CIPCHD3+2000H+000	;chara data address set
		STA	R12

		LDA	#00010H			;(R8) <- 中心Ｘ　ＰＯＳ．
		STA	R8			;
		ASL	A			;(R9) <- 中心Ｙ　ＰＯＳ．
		STA	R9			;

		TYX
		LDA	>TROBJ_PLOT_X,X		;回転エリアＸ　ＰＯＳ．セット
		STA	R3			;
		LDA	>TROBJ_PLOT_Y,X		;回転エリアＹ　ＰＯＳ．セット
		STA	R2			;

		M_CHIP	C_32_ZOOM_XY

		LDX	<ENINDX

		INC	OBM7WF			;mode 7 OBJ chara DMA "ON"

KAMO0_R_SET0800 EQU	$

		RTS
;
KAMO0_PL_XSPD	EQU	$
 IF PAL	   ;*** PAL 対応 [1995/7/20] ******************
		WORD	0FDBBH,00245H
 ELSE	   ;*** JPN/NES 対応 [1995/6/30] **************
		WORD	0FE00H,00200H
 ENDIF	   ;*** PAL 対応 [1995/7/20] ******************
;
KAMO0_OBJ_CHK	EQU	$
		LDY	ECRSFG,X
		BMI	KAMO0_O_CHK1000
		BEQ	KAMO0_O_CHK0800

		LDA	ENMODE-1,Y
		CMP	#EMOVE
		BNE	KAMO0_O_CHK0800
		LDA	ENSHOT-1,Y
		BEQ	KAMO0_O_CHK0800

		DEY
		TYX
		JSL	>ENDEATH_SET_4

		BRA	KAMO0_IJIME

KAMO0_O_CHK0800 EQU	$

		RTS
;
KAMO0_O_CHK1000 EQU	$
		LDA	PLBGCR			;プレイヤー頭打ってる ?
		AND	#0000000000011000B	;
		BNE	KAMO0_O_CHK1600		; yes: KAMO0_O_CHK1600

		LDY	PLYSPD+1		;プレイヤーに踏まれた ?
		BMI	KAMO0_O_CHK1500		;
		LDY	PLJUMP			;
		BEQ	KAMO0_O_CHK1500		;
		LDA	EPWIDY,X		;
		SEC				;
		SBC	EWIDEY,X		;
		SEC				;
		SBC	PWIDEY			;
		CMP	#0FFF8H			;
		BCC	KAMO0_O_CHK1500		;  no: KAMO0_O_CHK1500

 IF PAL	   ;*** PAL 対応 [1995/7/20] ******************
		LDA	#0F931H
		STA	PLYSPD
 ELSE	   ;*** JPN/NES 対応 [1995/6/30] **************
		LDA	#0FA00H
		STA	PLYSPD
 ENDIF	   ;*** PAL 対応 [1995/7/20] ******************

		LDA	#P006
		STA	PLJUMP
		STZ	PLSPJP
		STZ	PLDOSN

;		LDA	#FSMK0
;		JSL	>EXINSR
;
;		LDA	PCENTX
;		STA	EXXPSL,Y
;		LDA	ECENTY,X
;		SEC
;		SBC	EWIDEY,X
;		SEC
;		SBC	#00008
;		STA	EXYPSL,Y
;		LDA	#00004
;		STA	EXTIM0,Y
;		LDA	#00006
;		STA	EXCHPT,Y
;		STA	EXWRK0,Y
		LDA	#0001CH			;［Ｓ］
		JSL	>SOUND_3_ON

KAMO0_IJIME	EQU	$
		LDA	#00006
		STA	ENCHPT,X
		STA	<ENCONT,X
		STZ	ENXSPD,X
		LDY	#001
		STY	<ENWRK2,X
		STY	<ENWRK0,X		;いじめられたフラグセット
		LDA	ENMOD1,X		;
		AND	#1111100000111111B	;
		ORA	#0000010010000000B	;
		STA	ENMOD1,X		;

		RTS

KAMO0_O_CHK1500 EQU	$
 IF PAL	   ;*** PAL 対応 [1995/7/20] ******************
		LDA	#0FB76H
		STA	PLYSPD
 ELSE	   ;*** JPN/NES 対応 [1995/6/30] **************
		LDA	#0FC00H
		STA	PLYSPD
 ENDIF	   ;*** PAL 対応 [1995/7/20] ******************

		LDA	#P006
		STA	PLJUMP
		LDA	#001+8000H
		STA	PLSPJP
		STZ	PLDOSN

KAMO0_O_CHK1600 EQU	$
		LDY	EPXMUK,X
		LDA	!KAMO0_PL_XSPD,Y
		STA	PLXSPD
		STA	PLMVSP

KAMO0_O_CHK1800 EQU	$

		RTS
;
KAMO0_S0_XSPD	EQU	$
		WORD	0FF40H,000C0H
KAMO0_S0_ZADD	EQU	$
		WORD	0FFFEH,00002H
;
KAMO0_SUB0	EQU	$
		TYX

		LDY	<ENWRK0,X		;いじめられた後 ?
		BEQ	KAMO0_SUB0020		;  no: KAMO0_SUB0020

		LDY	EPXMUK,X
		TYA
		EOR	#00002
		STA	ENMUKI,X

KAMO0_SUB0020	EQU	$
		LDY	ENMUKI,X
		LDA	!KAMO0_S0_XSPD,Y
		LDY	<ENWRK0,X		;いじめられた後 ?
		BEQ	KAMO0_SUB0080		;  no: KAMO0_SUB0080

		ASL	A

KAMO0_SUB0080	EQU	$
		STA	ENXSPD,X

		JSR	SET_SPD_CHECK

		LDA	ENTIM1,X
		BNE	KAMO0_SUB0300

		LDA	#00008H
		LDY	<ENWRK0,X		;いじめられた後 ?
		BEQ	KAMO0_SUB0100		;  no: KAMO0_SUB0100

		LSR	A
		LSR	A

KAMO0_SUB0100	EQU	$
		STA	ENTIM1,X

		LDA	ENCHPT,X
		INC	A
		CMP	#00006
		BNE	KAMO0_SUB0200

		LDA	#00000

KAMO0_SUB0200	EQU	$
		STA	ENCHPT,X

KAMO0_SUB0300	EQU	$
		LDA	ENCHPT,X
		INC	A
		AND	#00004
		LSR	A
		TAY
		LDA	!KAMO0_S0_ZADD,Y
		LDY	<ENWRK0,X		;いじめられた後 ?
		BEQ	KAMO0_SUB0400		;  no: KAMO0_SUB0400

		ASL	A
		ASL	A

KAMO0_SUB0400	EQU	$
		CLC
		ADC	ENWRK6,X
		CMP	#0010CH
		BMI	KAMO0_SUB0500

		LDA	#0010CH

KAMO0_SUB0500	EQU	$
		CMP	#000F0H
		BPL	KAMO0_SUB0700

		LDA	#000F0H

KAMO0_SUB0700	EQU	$
		STA	ENWRK6,X
		INC	<EWORKE

		RTS
;
SET_SPD_CHECK	EQU	$
		LDA	ENCBFG,X
		AND	#0000CH
		BEQ	S_S_CHK0800

		AND	#00008H			;進行方向に壁がある ?
		DEC	A			;
		EOR	ENXSPD,X		;
		BPL	S_S_CHK0800		;  no: S_S_CHK0800

		STZ	ENXSPD,X

S_S_CHK0800	EQU	$
		RTS
;
KAMO0_S1_ZMAX	EQU	$
		WORD	00100H,000C0H,00120H,00080H
KAMO0_S1_ZADD	EQU	$
		WORD	00018H,0FFE8H,00010H,0FFF0H
KAMO0_S1_CHKDT	EQU	$
		WORD	0FFFFH,00000H,0FFFFH,00000H
;
;ENCONT <- 006 ENCHPT <- 006
KAMO0_SUB1	EQU	$
		TYX

		LDA	ENCBFG,X		;空中 ?
		AND	#00001			;
		BEQ	KAMO0_SUB1800		; yes: KAMO0_SUB1800

		LDY	<ENCONT,X
		LDA	ENWRK6,X		;目標倍率に達した ?
		SEC				;
		SBC	!KAMO0_S1_ZMAX,Y	;
		EOR	!KAMO0_S1_CHKDT,Y	;
		BPL	KAMO0_SUB1500		;  no: KAMO0_SUB1500

		LDA	!KAMO0_S1_ZMAX,Y	;目標倍率セット
		STA	ENWRK6,X		;
		DEC	<ENCONT,X		;びよびよ終わり ?
		DEC	<ENCONT,X		;
		BPL	KAMO0_SUB1100		;  no: KAMO0_SUB1100

		LDA	#00020H			;キャラパターンチェンジタイマーセット
		STA	ENTIM1,X		;
		INC	<ENWRK2,X

KAMO0_SUB1100	EQU	$

		RTS

KAMO0_SUB1500	EQU	$
		LDA	ENWRK6,X		;倍率計算
		CLC				;
		ADC	!KAMO0_S1_ZADD,Y	;
		STA	ENWRK6,X		;

KAMO0_SUB1800	EQU	$

		RTS
;
;ENTIM1 <- 020H ENCHPT <- 006
KAMO0_SUB2	EQU	$
		TYX

		LDA	ENTIM1,X		;キャラパターンチェンジ ?
		BNE	KAMO0_SUB2800		;  no: KAMO0_SUB2800

		INC	ENCHPT,X
		LDY	ENCHPT,X		;ジャンプポーズ ?
		CPY	#008			;
		BNE	KAMO0_SUB2500		;  no: KAMO0_SUB2500

		LDA	#0FC00H
		STA	ENYSPD,X
		STZ	ENCBFG,X
		INC	<ENWRK2,X

		RTS

KAMO0_SUB2500	EQU	$
		LDA	#00004
		STA	ENTIM1,X

KAMO0_SUB2800	EQU	$

		RTS
;
KAMO0_SUB3	EQU	$
		TYX

		LDY	ENYSPD+1,X		;上昇中 ?
		BMI	KAMO0_SUB3800		; yes: KAMO0_SUB3800

		LDA	#00005
		STA	ENCHPT,X

		LDA	ENCBFG,X		;地面に着いた ?
		AND	#00001			;
		BEQ	KAMO0_SUB3800		;  no: KAMO0_SUB3800

		STZ	<ENWRK2,X

KAMO0_SUB3800	EQU	$

		RTS
;
;************************************************************************
;*		initial ( 子かるがも )					*
;************************************************************************
KAMO1IN		EQU	$			;-- kamo1in --
		RTL
;
;************************************************************************
;*		move	( 子かるがも )					*
;************************************************************************
;B		ENWRK0	親の ROUTINE INDEX
;B		ENWRK1	前のやつの ROUTINE INDEX
;		ENWRK2	ROUTINE MODE INDEX
;		ENWRK4
;		ENWRK6
;		ENWRK8	とーちゃんまだ生きてるチェック用フラグ
;		ENWRKA
;		ENWRKC
;
;		ENTIM0
;		ENTIM1
;		ENTIM2	プレイヤーチェックロックタイマー
;		ENTIM3
;
;		ENCONT
;
KAMO1_SUB	EQU	$
		WORD	KAMO1_SUB0		;あるく
		WORD	KAMO1_SUB1		;はしる
		WORD	KAMO1_SUB2		;にげ
;
KAMO1_SHOT_RTMK EQU	$
		WORD	00006H,0FFFAH
KAMO1_SHOT_SP_A EQU	$
		WORD	0FFB0H,00050H
KAMO1_SHOT_SP_C EQU	$
		WORD	0FC00H,00400H
;
KAMO1MV		EQU	$			;-- kamo1mv --
;
;------------------------------------------------------------------------
;-		タマゴ特別チェック					-
;------------------------------------------------------------------------
		LDA	ENSHOT,X
		BEQ	KAMO1MVFFFF	;ショット？ ( no:KAMO1MVFFFF )
;
		STA	ENWRKC,X	;スクロール基準特殊リセット
;
;-------------- ブーメランショットセット --------------------------------
		LSR	A
		BNE	KAMO1MV0000	;プレイヤーとの衝突チェックＯＫ？ ( no:KAMO1MV0000 )
;
;-------------- プレイヤーとの衝突チェック ----------------------
		LDY	ECRSFG,X
		BPL	KAMO1MV0000	;プレイヤーと衝突してる？ ( no:KAMO1MV0000 )
;
		LDA	PLTYPE
		ORA	ENWRK6,X
		BNE	KAMO1MV0000	;変身中？ ( yes:KAMO1MV0000 )
;
;-------------< タマゴオプションモードセット >-------------------
		STZ	ENSHOT,X	;ショット解除
		JSL	>EGGSET
KAMO1MVFFFF	EQU	$
		JMP	KAMO1MV0050
;
KAMO1MV0000	EQU	$
		LDA	ENGPOW,X
		CMP	#040H
		BCC	KAMO1MV0001	;パワーショット？ ( yes:KAMO1MV0001 )
		JMP	KAMO1MV0050
;
KAMO1MV0001	EQU	$
		LDA	EPWIDX,X
		STA	R1		;(R1) <-- Ｘ距離
		LDA	EPWIDY,X
		STA	R2		;(R2) <-- Ｙ距離
		M_CHIP	M_RAD_GET
		LDX	<ENINDX
;
		LDA	R0
		LDY	GOAL_IN
		BEQ	KAMO1MV00010	;ゴール？ ( no:KAMO1MV00010 )
;
		EOR	#0100H		;プレイヤーから離れる様に
KAMO1MV00010	EQU	$
		BIT	ENWRKA,X
		BMI	KAMO1MV0002
		EOR	#0FFH
		INC	A
		AND	#01FEH
KAMO1MV0002	EQU	$
		SEC
		SBC	ENWRKA,X
		AND	#01FEH
		STA	<EWORK0
		BIT	#0100H
		BEQ	KAMO1MV0004
		EOR	#01FFH
		INC	A
KAMO1MV0004	EQU	$
		LDY	#00H
		CMP	#080H
		BCS	KAMO1MV0006
		LDA	<EWORK0
		AND	#0100H
		BEQ	KAMO1MV0006
		LDY	#02H
KAMO1MV0006	EQU	$
		LDA	ENWRKA,X
		CLC
		ADC	!KAMO1_SHOT_RTMK,Y
		AND	#01FEH
;
		I16
;
		TAY
		BIT	ENWRKA,X
		BPL	KAMO1MV0007
		ORA	#8000H
KAMO1MV0007	EQU	$
		STA	ENWRKA,X
;
		TYX
		LDY	#00H
		LDA	>SIN,X
		ASL	A
		ASL	A
		BMI	KAMO1MV00080
		LDY	#02H
KAMO1MV00080	EQU	$
		STA	<EWORK2		;Ｙスピードセット
		STY	<EWORK4
		LDA	>COS,X
		ASL	A
		ASL	A
;
		I8
;
		LDX	<ENINDX
		BIT	ENWRKA,X
		BMI	KAMO1MV0009
		EOR	#0FFFFH
		INC	A
KAMO1MV0009	EQU	$
		LDY	#00H
		CMP	#0
		BMI	KAMO1MV00090
		LDY	#02H
KAMO1MV00090	EQU	$
		STA	<EWORK0		;Ｘスピードセット
;
		SEC
		SBC	ENXSPD,X
		EOR	<EWORK0
		BPL	KAMO1MV0010	;ＭＡＸＸスピードオーバー？ ( no:KAMO1MV0010 )
		TYA
		EOR	#02H
		TAY
KAMO1MV0010	EQU	$
		LDA	ENXSPD,X
		CLC
		ADC	!KAMO1_SHOT_SP_A,Y
		STA	ENXSPD,X
		AND	#8000H
		BEQ	KAMO1MV0012
		LDA	#02H
KAMO1MV0012	EQU	$
		EOR	#02H
		STA	ENMUKI,X	;向きセット
;
		LDY	<EWORK4
		LDA	ENYSPD,X
		SEC
		SBC	<EWORK2
		EOR	<EWORK2
		BMI	KAMO1MV0020	;ＭＡＸＹスピードオーバー？ ( no:KAMO1MV0020 )
		TYA
		EOR	#02H
		TAY
KAMO1MV0020	EQU	$
		LDA	ENYSPD,X
		CLC
		ADC	!KAMO1_SHOT_SP_A,Y
		STA	ENYSPD,X
;
KAMO1MV0050	EQU	$
		JSL	>EGG_SP_CHECK
;
		LDA	<ENWRK4,X
		BEQ	KAMO1MV0100	;オプションモード？ ( no:KAMO1MV0100 )

;-------------- オプションモード ----------------------------------------
		JMP	KAMO1_OPTION
;
KAMO1MV0100	EQU	$
		LDA	ENWRK6,X
		BMI	KAMO1MV0300	;パターンチェンジロックでプレイヤーと当たり無し？ ( yes:KAMO1MV0300 )
;
		LSR	A
		BNE	KAMO1MV0120	;パターンチェンジロック？ ( yes:KAMO1MV0120 )
;
KAMO1MV0110	EQU	$
		TXY
		LDA	<ENWRK2,X
		ASL	A
		TAX
		JSR	(KAMO1_SUB,X)
;
;-------------- プレイヤーとの衝突チェック ------------------------------
KAMO1MV0120	EQU	$
		LDY	ECRSFG,X
		BPL	KAMO1MV0230	;プレイヤーと衝突してる？ ( no:KAMO1MV0230 )
;
		LDA	ENTIM2,X	;プレイヤーチェックロック
		BNE	KAMO1MV0230	; yes: KAMO1MV0230

		LDY	<ENWRK0,X	;とーちゃんいきてる ?
		BMI	KAMO1MV0140	;  no: KAMO1MV0140

		LDA	ENWRK0,Y	;とーちゃんいじめられてる ?
		BEQ	KAMO1MV0230	;  no: KAMO1MV0230

KAMO1MV0140	EQU	$
		LDA	PLTYPE
		BNE	KAMO1MV0230	;変身中？ ( yes:KAMO1MV0230 )
		LDA	ENCBFG,X
		AND	#000001B
		BNE	KAMO1MV0150	;着地？ ( yes:KAMO1MV0150 )
		LDA	ENYSPD,X
		BMI	KAMO1MV0230	;下降中？ ( no:KAMO1MV0230 )
;
KAMO1MV0150	EQU	$
		LDY	#0FFH			;まえのやついないよー
		STY	<ENWRK1,X		;
;
;-------------< タマゴオプションモードセット >-------------------
		JSL	>EGGSET
;
KAMO1MV0230	EQU	$
		LDY	<ENWRK1,X
		STY	<EWORK2
		LDY	<ENWRK0,X		;とーちゃんいきてる ?
		BMI	KAMO1MV0300		;  no: KAMO1MV0230

		CPY	<EWORK2			;前のやつはとーちゃん ?
		BEQ	KAMO1MV0300		; yes: KAMO1MV0300

		LDY	<EWORK2
		LDA	ENWRK4,Y		;前のやつはプレイヤーの下僕と成り下がった ?
		BEQ	KAMO1MV0300		;  no: KAMO1MV0300

		LDY	<ENWRK0,X
		STY	<ENWRK1,X

KAMO1MV0300	EQU	$
		RTL
;
KAMO1_S0_XSPD	EQU	$
		WORD	0FFC0H,00040H
;
KAMO1_SUB0	EQU	$
		TYX

		JSR	KAMO1_OYA_CHK

		LDA	ENTIM0,X
		BNE	KAMO1_SUB0800

		LDY	<ENWRK1,X		;まえのやついる ?
		BPL	KAMO1_SUB0100		; yes: KAMO1_SUB0100

		LDA	EPXMUK,X		;プレイヤーから離れる
		EOR	#00002			;
		TAY				;
		BRA	KAMO1_SUB0400

KAMO1_SUB0100	EQU	$
		LDA	ECENTX,Y		;前のやつ近くにいる ?
		SEC				;
		SBC	ECENTX,X		;
		CLC				;
		ADC	#00020H			;
		CMP	#00040H			;
		BCC	KAMO1_SUB0500		; yes: KAMO1_SUB0500

		LDY	#000
		CMP	#00000
		BMI	KAMO1_SUB0400

		INY
		INY

KAMO1_SUB0400	EQU	$
		TYA
		STA	ENMUKI,X

		LDA	#00004
		STA	ENCHPT,X

		INC	<ENWRK2,X

		RTS

KAMO1_SUB0500	EQU	$
		LDY	<ENWRK0,X		;とーちゃん生きてる ?
		BMI	KAMO1_SUB0580		;  no: KAMO1_SUB0580

		LDA	ENWRK0,Y

KAMO1_SUB0580	EQU	$
		PHP
		LDY	ENMUKI,X
		LDA	!KAMO1_S0_XSPD,Y
		PLP
		BEQ	KAMO1_SUB0600

		ASL	A

KAMO1_SUB0600	EQU	$
		STA	ENXSPD,X
		JSR	SET_SPD_CHECK

		LDA	ENTIM1,X
		BNE	KAMO1_SUB0800

		LDA	#00004
		STA	ENTIM1,X
		LDA	ENCHPT,X
		INC	A
		AND	#00003
		STA	ENCHPT,X

KAMO1_SUB0800	EQU	$

		RTS
;
KAMO1_S1_XSPD	EQU	$
		WORD	0FF00H,00100H
;
KAMO1_SUB1	EQU	$
		TYX

		JSR	KAMO1_OYA_CHK

		LDY	<ENWRK1,X		;まえのやついる ?
		BPL	KAMO1_SUB1100		; yes: KAMO1_SUB1100

		LDA	EPXMUK,X		;プレイヤーから離れる
		EOR	#00002			;
		STA	ENMUKI,X		;
		TAY				;
		BRA	KAMO1_SUB1500

KAMO1_SUB1100	EQU	$
		LDA	ECENTX,Y		;前のやつ近くにいる ?
		SEC				;
		SBC	ECENTX,X		;
		CLC				;
		ADC	#00018H			;
		CMP	#00030H			;
		BCS	KAMO1_SUB1500		;  no: KAMO1_SUB1500

		LDA	#00002
		STA	ENCHPT,X

		DEC	<ENWRK2,X

		RTS

KAMO1_SUB1500	EQU	$
		LDY	<ENWRK0,X		;とーちゃん生きてる ?
		BMI	KAMO1_SUB1600		;  no: KAMO1_SUB1600

		LDA	ENWRK0,Y

KAMO1_SUB1600	EQU	$
		PHP
		LDY	ENMUKI,X
		LDA	!KAMO1_S1_XSPD,Y
		PLP
		BEQ	KAMO1_SUB1700

		ASL	A

KAMO1_SUB1700	EQU	$
		STA	ENXSPD,X
		JSR	SET_SPD_CHECK

KAMO1_DUSH_PAT	EQU	$
		LDA	ENTIM1,X
		BNE	KAMO1_SUB1800

		LDA	#00002
		STA	ENTIM1,X
		DEC	A		;[ LDA	#001 ]
		EOR	ENCHPT,X
		STA	ENCHPT,X

KAMO1_SUB1800	EQU	$

		RTS
;
KAMO1_OYA_CHK	EQU	$
		LDY	<ENWRK0,X		;とーちゃん生きてる ?
		BMI	KAMO1_O_CHK0800		;  no: KAMO1_O_CHK0800

		LDA	ENMODE,Y
		CMP	#EMOVE
		BNE	KAMO1_O_CHK0100
		LDA	ENMYNO,Y
		CMP	#KAMO0
		BNE	KAMO1_O_CHK0100
		LDA	ENWRK8,Y
		CMP	ENWRK8,X
		BEQ	KAMO1_O_CHK0800

KAMO1_O_CHK0100 EQU	$
		STZ	ENXSPD,X

		LDA	#00002
		STA	ENCHPT,X
		STA	<ENWRK2,X

		PLA				;直接ＲＴＳ

KAMO1_O_CHK0800 EQU	$

		RTS
;
KAMO1_S2_XSPD	EQU	$
		WORD	00280H,0FD80H
;
KAMO1_SUB2	EQU	$
		TYX

		LDY	EPXMUK,X
		TYA
		EOR	#00002
		STA	ENMUKI,X
		LDA	!KAMO1_S2_XSPD,Y
		STA	ENXSPD,X
		JSR	SET_SPD_CHECK
		BRA	KAMO1_DUSH_PAT
;
;------------------------------------------------------------------------
;-		オプションモード					-
;------------------------------------------------------------------------
;
;-------------- 止まってる時の”トントン”ジャンプデータ ----------------
KM1JPA		EQU	$
		WORD	00000H,00000H,0FFFFH,0FFFEH,0FFFEH,0FFFDH,0FFFDH,0FFFDH
		WORD	0FFFDH,0FFFEH,0FFFEH,0FFFFH,0FFFFH,00000H,00000H,00000H
;
KAMO1_OPTION	EQU	$
		JSL	>EGG_OPTION	;[ (Y) <-- オプションポインター ]
;
;----------------------------------------------------------------
;-		オプションかるがもパターンセット		-
;----------------------------------------------------------------
		LDA	ENXPSL,X
		SEC
		SBC	ENXP2L
		STA	<EWORK0		;(EWK0,1) <-- Ｘ移動量
		BNE	KAMO1_OP_002	;Ｘ移動？ ( yes:KAMO1_OP_002 )
		LDA	PLXSPD
		BEQ	KAMO1_OP_004	;プレイヤーＸ移動？ ( no:KAMO1_OP_004 )
		PHP
		LDA	#01H
		PLP
		BPL	KAMO1_OP_000
		LDA	#0FFFFH
KAMO1_OP_000	EQU	$
		STA	<EWORK0		;(EWK0,1) <-- Ｘ移動量
KAMO1_OP_002	EQU	$
		ASL	A		;(C) <-- (N)
		ROL	A
		ASL	A
		AND	#02H
		EOR	#02H
		STA	ENMUKI,X	;向きセット
;
KAMO1_OP_004	EQU	$
		LDA	#06H		;上昇中パターンＮｏ．セット
		STA	ENCHPT,X
;
		LDA	EGOPT1-1,Y
		AND	#0FF00H
		BEQ	KAMO1_OP_010	;ジャンプ中？ ( no:KAMO1_OP_010 )
;
;-------------- ジャンプ中 --------------------------------------
		BMI	KAMO1_OP_040	;上昇中？ ( no:KAMO1_OP_040 )
;
		STZ	ENCHPT,X	;下降中パターンＮｏ．セット
		BRA	KAMO1_OP_040
;
;-------------- 着地中 ------------------------------------------
KAMO1_OP_010	EQU	$
		LDA	<EWORK0		;(EWK0,1) <-- Ｘ移動量
		BNE	KAMO1_OP_020	;Ｘ移動？ ( yes:KAMO1_OP_020 )
;
;-------------- 止まってる時のパターンセット ------------
		LDA	<ENCONT,X
		AND	#0FH
		ASL	A
		TAY
		LDA	!KM1JPA,Y
		BNE	KAMO1_OP_050	;”トントン”ジャンプ中？ ( yes:KAMO1_OP_050 )
;
		LDA	#02		;着地中パターンＮｏ．セット
		STA	ENCHPT,X
		BRA	KAMO1_OP_050
;
;-------------- 歩きパターンセット ----------------------
KAMO1_OP_020	EQU	$
		LDA	<EWORK0		;(A) <-- パターン切り替えスピード
		BPL	KAMO1_OP_030
		EOR	#0FFFFH
		INC	A
KAMO1_OP_030	EQU	$
		TAY			;(Y) <-- Ｘ移動量
		XBA			;x100H
		CLC
		ADC	<ENCONT,X
		STA	<ENCONT,X
		XBA
		LSR	A
		LSR	A
		AND	#03H
		CPY	#02H
		BCC	KAMO1_OP_032	;走る？ ( no:KAMO1_OP_032 )
		AND	#01H
		ORA	#04H
KAMO1_OP_032	EQU	$
		STA	ENCHPT,X	;歩くパターンＮｏ．セット
;
;-------------- ”トントン”ジャンプカウンターリセット ----------
KAMO1_OP_040	EQU	$
		LDA	<ENCONT,X
		AND	#0FH
		BEQ	KAMO1_OP_060
;
KAMO1_OP_050	EQU	$
		LDA	#01H		;(A) <-- パターン切り替えスピード
KAMO1_OP_060	EQU	$
;
		I8
;
		CLC
		ADC	<ENCONT,X	;パターンカウンターセット
		STA	<ENCONT,X
;
		AND	#0FH		;タマゴ”トントン”セット
		ASL	A
		TAY
		LDA	ENYPSL,X
		CLC
		ADC	!KM1JPA,Y
		STA	ENYPSL,X
		RTL
;
;************************************************************************
;*		initial ( ズームさぼてん )				*
;************************************************************************
ZSABO_I_ANG	EQU	$
		WORD	00040H,001C0H
;
ZSABOIN		EQU	$			;-- zsaboin --
ZSAB2IN		EQU	$			;-- zsab2in --
		LDY	ENMUKI,X
		LDA	!ZSABO_I_ANG,Y		;初期回転角セット
		STA	<ENWRK4,X		;
		LDA	#00100H			;初期縦倍率セット
		STA	ENWRK6,X		;
		LDA	#0FFFFH			;初期横倍率セット
		STA	ENWRKA,X		;
;
		RTL
;
;************************************************************************
;*		move	( ズームさぼてん )				*
;************************************************************************
;		ENWRK0	頭セット半径補正値
;B		ENWRK2	ROUTINE MODE INDEX
;B		ENWRK3	キャラパターンフラグ
;		ENWRK4	回転角（向き無視）
;		ENWRK6	縦倍率
;		ENWRK8	回転角
;		ENWRKA	横倍率	 ＜０...無っ視
;		ENWRKC	ターゲットカウンター
;
;		ENTIM0
;		ENTIM1
;		ENTIM2
;		ENTIM3
;
;		ENCONT	カラーパターンカウンター
;
ZSABO_SUB	EQU	$
		WORD	ZSABO_SUB0		;しょげしょげ
		WORD	ZSABO_SUB1		;ぷれいやーさーち
		WORD	ZSABO_SUB2		;ずーむあっぷ
		WORD	ZSABO_SUB3		;ふぇいすちぇんじ
		WORD	ZSABO_SUB4		;たまはき
		WORD	ZSABO_SUB5		;たまはき（あと）
		WORD	ZSABO_SUB6		;みょん
		WORD	ZSABO_SUB7		;しょげ（頭回転＆ぺしゃん）
		WORD	ZSABO_SUB8		;しょげ（復帰待ち）
		WORD	ZSABO_SUB9		;しょげ（復帰みょん）
		WORD	ZSABO_SUB10		;しょげ（ちょいまち）
;
ZSABOMV		EQU	$			;-- zsabomv --
ZSAB2MV		EQU	$			;-- zsab2mv --
		JSR	ZSABO_OAM_SET

		LDA	ENCOLD,X		;凍ってる ?
		BEQ	ZSABOMV0100		;  no: ZSABOMV0100

		LDA	ENMYNO,X		;逆ささぼてん ?
		CMP	#ZSAB2			;
		BNE	ZSABOMV0100		;  no: ZSABOMV0100

		STZ	ENMOD1,X		;ＢＧチェックなし

ZSABOMV0100	EQU	$
		JSL	>ENMDCK

		JSR	ZSABO_COND_CHK

		JSR	ZSABO_OBJ_CHK

		LDY	<ENWRK2,X
		TYA
		ASL	A
		TXY
		TAX
		JSR	(ZSABO_SUB,X)

		JSR	ZSABO_ROT_SET

		JSR	ZSABO_CPOS_CALC

		LDA	#0011000101010101B	;照準有り
		LDY	<ENWRK2,X		;しょげ　?
		CPY	#007			;
		BMI	ZSABOMV0800		;  no: ZSABOMV0800

		LDA	#0011000001010101B	;照準なし

ZSABOMV0800	EQU	$
		STA	ENMOD2,X

		RTL
;
ZSABO_O_DATA	EQU	$
		WORD	0FFFCH,00004H
;
ZSABO_OAM_SET	EQU	$
		LDY	ENCHPT,X		;回転ＯＢＪ使ってる ?
		BNE	ZSABO_O_SET0100		; yes: ZSABO_O_SET0100

		RTS

ZSABO_O_SET0100 EQU	$
		JSL	>TROBJ_OAM_4x4

;		LDA	<ENWRK4,X
;		STA	R1
;		LDA	ENMYNO,X
;		CMP	#ZSABO
;		BEQ	ZSABO_O_SET0180
;
;		LDA	R1
;		EOR	#0FFFFH
;		INC	A
;		AND	#001FEH
;		STA	R1
;
;ZSABO_O_SET0180	EQU	$
;		LDA	ENWRKA,X
;		BPL	ZSABO_O_SET0200
;
;		LDA	#00200H
;		SEC
;		SBC	ENWRK6,X
;
;ZSABO_O_SET0200 EQU	$
;		STA	R2
;		LDA	ENWRK6,X
;		STA	R3
;		LDY	<ENWRK3,X
;		LDA	!ZSABO_CPOI,Y
;		CLC
;		ADC	<ENWRK0,X
;		STA	R5
;
;		M_CHIP	M_ENMY_ROTZOM
;
;		LDX	<ENINDX
		LDA	ECENTX,X
		SEC
		SBC	ESCCH1
		STA	<EWORK0
		SEC
		SBC	#00010H
		STA	<EWORK2

		LDA	ENCLOR,X
		AND	#00080H
		ASL	A
		ASL	A
		XBA
		TAY
		LDA	ECENTY,X
		CLC
		ADC	!ZSABO_O_DATA,Y
		SEC
		SBC	ESCCV1
		STA	<EWORK4
		SEC
		SBC	#00010H
		STA	<EWORK6

		LDY	ENMUKI,X
		BEQ	ZSABO_O_SET0300

		LDA	<EWORK0
		PHA
		LDA	<EWORK2
		STA	<EWORK0
		PLA
		STA	<EWORK2

ZSABO_O_SET0300 EQU	$
		LDY	ENCLOR,X		;Ｖフリップ中 ?
		BPL	ZSABO_O_SET0400		;  no: ZSABO_O_SET0400

		LDA	<EWORK4
		PHA
		LDA	<EWORK6
		STA	<EWORK4
		PLA
		STA	<EWORK6

ZSABO_O_SET0400 EQU	$
		I16
		LDY	ENOAML,X
		LDA	<EWORK2
		STA	SOAM_DX+0+8*0,Y
		STA	SOAM_DX+0+8*2,Y
		LDA	<EWORK0
		STA	SOAM_DX+0+8*1,Y
		STA	SOAM_DX+0+8*3,Y

		LDA	<EWORK4
		STA	SOAM_DX+2+8*2,Y
		STA	SOAM_DX+2+8*3,Y
		LDA	<EWORK6
		STA	SOAM_DX+2+8*0,Y
		STA	SOAM_DX+2+8*1,Y
		I8

		RTS
;
ZSABO_OBJ_CHK	EQU	$
		LDY	ECRSFG,X
		BPL	ZSABO_O_CHK1000

		LDY	<ENWRK2,X		;ダメージ中 ?
		CPY	#009			;
		BPL	ZSABO_O_CHK1000		;  no: ZSABO_O_CHK1000
		CPY	#006			;
		BPL	ZSABO_O_CHK1800		; yes: ZSABO_O_CHK1800

ZSABO_O_CHK1000 EQU	$
		JSL	>SHOT_EN_KILL_S

ZSABO_O_CHK1800 EQU	$

		RTS
;
ZSABO_COND_CHK	EQU	$
		LDY	<ENWRK2,X
		CPY	#006
		BPL	ZSABO_C_CHK0800

		LDA	TILTCT
		BNE	ZSABO_C_CHK1000

		LDY	ECRSFG,X
		DEY
		BMI	ZSABO_C_CHK0800

		LDA	ENMODE,Y
		CMP	#EMOVE
		BNE	ZSABO_C_CHK0800

		LDA	ENSHOT,Y
		BNE	ZSABO_C_CHK1000

ZSABO_C_CHK0800 EQU	$

		RTS

ZSABO_C_CHK1000 EQU	$
		LDA	#00006				;WRK2 <- ROUTINE MODE INDEX SET
		STA	<ENWRK2,X			;WRK3 <- キャラパターンフラグクリア

		LDA	#00100H				;縦倍率セット
		STA	ENWRK6,X			;
		LDA	#0FFFFH				;横倍率クリア
		STA	ENWRKA,X			;

		LDA	#0000AH				;カラーパターンカウンターセット
		STA	<ENCONT,X			;

		LDA	ENCLOR,X			;初期カラーセット
		AND	#0FFF1H				;
		STA	ENCLOR,X			;

		RTS
;
ZSABO_CHAR	EQU	$
		WORD	CIPCHD3+2020H+000
		WORD	CIPCHD3+2040H+000
;
ZSABO_R_AADD	EQU	$
		WORD	00008H,0FFF8H
;
ZSABO_ROT_SET	EQU	$
		LDY	<ENWRK2,X
		CPY	#006
		BMI	ZSABO_R_SET0050

		LDY	#000
		LDA	ENWRK8,X
		BEQ	ZSABO_R_SET0080

		CMP	#00100H
		BPL	ZSABO_R_SET0010

		INY
		INY

ZSABO_R_SET0010 EQU	$
		CLC
		ADC	!ZSABO_R_AADD,Y
		AND	#001FEH
		STA	ENWRK8,X
		CLC
		ADC	#00008
		CMP	#00010H
		BCS	ZSABO_R_SET0080

		STZ	ENWRK8,X
		BRA	ZSABO_R_SET0080

ZSABO_R_SET0050 EQU	$
		LDA	<ENWRK4,X		;
		SEC				;
		SBC	#00080H			;
		CMP	#00100H			;
		BCC	ZSABO_R_SET0060		;
						;
		STZ	ENMUKI,X		;
						;
		LDA	<ENWRK4,X		;
		BRA	ZSABO_R_SET0070		;
						;
ZSABO_R_SET0060 EQU	$			;
		LDA	#00002H			;
		STA	ENMUKI,X		;
						;
		LDA	<ENWRK4,X		;
		CLC				;
		ADC	#00100H			;
		EOR	#0FFFFH			;
		INC	A			;
						;
ZSABO_R_SET0070 EQU	$			;
		AND	#001FEH			;
		STA	ENWRK8,X		;

ZSABO_R_SET0080 EQU	$
		LDY	ENCHPT,X
		BNE	ZSABO_R_SET0100

		RTS

ZSABO_R_SET0100 EQU	$
		LDA	ENWRK6,X		;(R11) <- 縦倍率セット
		STA	R11			;

		LDA	ENWRKA,X
		BPL	ZSABO_R_SET0300

		LDA	#00200H			;(R6) <- 横倍率セット
		SEC				;
		SBC	ENWRK6,X		;

ZSABO_R_SET0300 EQU	$
		STA	R6			;

		LDA	ENWRK8,X		;(R5) <- 回転角セット
		LSR	A			;
		STA	R5			;

		LDY	<ENWRK3,X		;chara data address set
		LDA	!ZSABO_CHAR,Y		;
		STA	R12			;
		LDA	#BANK CIPCHD3+2020H+000 ;chara data bank set
		STA	R13

		LDY	ENTROB,X
		TYX
		LDA	>TROBJ_PLOT_X,X		;回転エリアＸ　ＰＯＳ．セット
		STA	R3			;
		LDA	>TROBJ_PLOT_Y,X		;回転エリアＹ　ＰＯＳ．セット
		STA	R2			;

		M_CHIP	C_32_RTZ_32_XY

		LDX	<ENINDX

		INC	OBM7WF			;mode 7 OBJ chara DMA "ON"

		RTS
;
ZSABO_CPOI	EQU	$
		WORD	00008H,0000AH
ZSABO_C_DATA	EQU	$
		WORD	00004H-4,0FFECH+4
;
ZSABO_CPOS_CALC EQU	$
		LDA	<ENWRK4,X
		STA	R1
		LDY	ENCLOR,X
		BPL	ZSABO_C_CAL0080

		LDA	R1
		EOR	#0FFFFH
		INC	A
		AND	#001FEH
		STA	R1

ZSABO_C_CAL0080 EQU	$
		LDA	ENWRKA,X
		BPL	ZSABO_C_CAL0100

		LDA	#00200H
		SEC
		SBC	ENWRK6,X

ZSABO_C_CAL0100 EQU	$
		STA	R2
		LDA	ENWRK6,X
		STA	R3
		LDY	<ENWRK3,X
		LDA	!ZSABO_CPOI,Y
		CLC
		ADC	<ENWRK0,X
		STA	R5

		M_CHIP	M_ENMY_ROTZOM

		LDX	<ENINDX
		LDA	ENXPSL,X
		CLC
		ADC	#00008
		SEC
		SBC	R0
		SEC
		SBC	ECENTX,X
		CLC
		ADC	ECNTXW,X
		STA	ECNTXW,X
		LDA	ENCLOR,X
		AND	#00080H
		ASL	A
		ASL	A
		XBA
		TAY
		LDA	ENYPSL,X
		SEC
		SBC	!ZSABO_C_DATA,Y
		SEC
		SBC	R1
		SEC
		SBC	ECENTY,X
		CLC
		ADC	ECNTYW,X
		STA	ECNTYW,X
		LDA	#00008
		STA	EWIDEX,X
		LDA	#0000CH
		STA	EWIDEY,X

		LDY	<ENWRK2,X
		CPY	#006
		BPL	ZSABO_C_CAL0800

		LDA	<ENWRK0,X
		BEQ	ZSABO_C_CAL0800

		DEC	<ENWRK0,X

ZSABO_C_CAL0800 EQU	$

		RTS
;
ZSABO_SUB0	EQU	$
		TYX

		LDA	ENTIM0,X
		BNE	ZSABO_SUB0800

		JSL	>TROBJ_SR_4x4
		BCC	ZSABO_SUB0800

		STZ	ENWRKC,X

		INC	ENCHPT,X
		INC	<ENWRK2,X

ZSABO_SUB0800	EQU	$

		RTS
;
ZSABO_SUB1	EQU	$
		TYX

		LDA	ENTIM0,X
		BNE	ZSABO_SUB1800

		LDA	ENTIM1,X
		BNE	ZSABO_SUB1200

		LDA	ENDSXL,X		;画面外 ?
		SEC				;
		SBC	#00018H			;
		CMP	#00100H-018H*2		;
		BCS	ZSABO_SUB1200		; yes: ZSABO_SUB1200

		LDY	#002			;キャラパターンフラグセット
		STY	<ENWRK3,X		;

		LDA	#000D0H			;中間倍率セット
		STA	ENWRK6,X		;
		STA	ENWRKA,X

		LDA	#00030H
		STA	ENTIM0,X

		STZ	<ENCONT,X		;カラーパターンカウンタークリア
		INC	<ENWRK2,X

ZSABO_SUB1200	EQU	$
		JSR	ZSABO_ANG_CALC

ZSABO_SUB1800	EQU	$

		RTS
;
ZSABO_S2_COL	EQU	$
		HEX	000,004,002
;
ZSABO_SUB2	EQU	$
		TYX

		LDA	ENDSXL,X		;画面外 ?
		CLC				;
		ADC	#00010H			;
		CMP	#001000H+010H*2		;
		BCC	ZSABO_SUB2200		;  no: ZSABO_SUB2200

		LDY	#000
		STY	<ENWRK3,X		;キャラパターンフラグセット
		LDA	ENCLOR,X		;カラーリセット
		AND	#0FFF1H			;
		STA	ENCLOR,X		;
		LDA	#00100H
		STA	ENWRK6,X
		LDA	#0FFFFH
		STA	ENWRKA,X
		DEC	<ENWRK2,X

		RTS

ZSABO_SUB2200	EQU	$
		LDA	ENWRK6,X
		CLC
		ADC	#00004H
		CMP	#00100H
		BMI	ZSABO_SUB2700

		LDA	ENTIM0,X
		BNE	ZSABO_SUB2300

		LDA	ENCLOR,X		;カラーリセット
		AND	#0FFF1H			;
		STA	ENCLOR,X		;
		LDA	#00100H			;縦倍率セット
		STA	ENWRK6,X
		LDA	#000D0H			;横倍率セット
		STA	ENWRKA,X
		LDA	#00004
		STA	ENTIM0,X

		JSL	>LOCKON_TARGET
		INC	<ENWRK2,X

		RTS

ZSABO_SUB2300	EQU	$
		LDY	<ENCONT,X
		INY
		CPY	#003
		BNE	ZSABO_SUB2500

		LDY	#000

ZSABO_SUB2500	EQU	$
		STY	<ENCONT,X
		LDA	!ZSABO_S2_COL,Y
		AND	#000FFH
		STA	<EWORK0
		LDA	ENCLOR,X
		AND	#0FFF1H
		ORA	<EWORK0
		STA	ENCLOR,X

ZSABO_SUB2600	EQU	$
		LDA	#00100H

ZSABO_SUB2700	EQU	$
		STA	ENWRK6,X
		STA	ENWRKA,X
		BRA	ZSABO_SUB2800
;
ZSABO_SUB3	EQU	$
		TYX

		LDA	ENTIM0,X
		BNE	ZSABO_SUB3800

		TAY
		STY	<ENWRK3,X
		DEC	A
		STA	ENWRKA,X

		INC	<ENWRK2,X
		LDA	#00130H

ZSABO_SUB4000	EQU	$
		STA	ENWRK6,X

ZSABO_SUB2800	EQU	$
ZSABO_SUB3800	EQU	$
		JSR	ZSABO_ANG_CALC
		JSL	>LOCKON_TARGET

		RTS
;
ZSABO_SUB4	EQU	$
		TYX

		LDA	ENWRK6,X
		SEC
		SBC	#00010H
		CMP	#000E0H
		BPL	ZSABO_SUB4000

		LDA	<ENWRK4,X
		STA	R1
		LDY	ENCLOR,X
		BPL	ZSABO_SUB4200

		LDA	R1
		EOR	#0FFFFH
		INC	A
		AND	#001FEH
		STA	R1

ZSABO_SUB4200	EQU	$
		PHA
		LDA	#00008H
		STA	R6
		M_CHIP	M_ENMY_1P_ROT
		LDX	<ENINDX

		LDA	#STAR2
		JSL	>EXINSR

		LDA	ECENTX,X
		SEC
		SBC	R0
		STA	<EWORK0
		STA	EXXPSL,Y
		LDA	ECENTY,X
		SEC
		SBC	R1
		STA	<EWORK2
		STA	EXYPSL,Y
		LDA	#00002
		STA	EXTIM0,Y
		LDA	#00006
		STA	EXYUSN,Y

		PLA
		STA	R1
		LDA	#-00400H
		STA	R6
		M_CHIP	M_ENMY_1P_ROT
		LDX	<ENINDX

		LDA	#STAMA
		JSL	>ENINSR_I
		BCC	ZSABO_SUB4400

		LDA	<EWORK0
		SEC
		SBC	#00008
		STA	ENXPSL,Y
		LDA	<EWORK2
		SEC
		SBC	#00008
		STA	ENYPSL,Y
		LDA	R0
		STA	ENXSPD,Y
		LDA	R1
		STA	ENYSPD,Y

		LDY	#008
		STY	<ENCONT,X

		JSL	>LOCKON_TARGET2

		INC	<ENWRK2,X

ZSABO_SUB4400	EQU	$
		LDA	#000E0H
		STA	ENWRK6,X

		RTS
;
ZSABO_S5_ZADD	EQU	$-2
		WORD	0000AH,0FFF4H,00010H,0FFF0H
ZSABO_S5_ZCMP	EQU	$-2
		WORD	00100H,000C0H,000F0H,000A0H
;
ZSABO_SUB5	EQU	$
		TYX

		LDY	<ENCONT,X
		LDA	ENWRK6,X
		CLC
		ADC	!ZSABO_S5_ZADD,Y
		CMP	!ZSABO_S5_ZCMP,Y
		PHP

		CPY	#000
		BNE	ZSABO_SUB5300

		PLP
		BMI	ZSABO_SUB5600
		BRA	ZSABO_SUB5400

ZSABO_SUB5300	EQU	$
		PLP
		BPL	ZSABO_SUB5600

ZSABO_SUB5400	EQU	$
		DEC	<ENCONT,X
		DEC	<ENCONT,X
		BNE	ZSABO_SUB5500

		LDA	#00020H
		STA	ENTIM0,X
		LDA	#00140H
		STA	ENTIM1,X

		LDY	#001
		STY	<ENWRK2,X

ZSABO_SUB5500	EQU	$
		LDA	!ZSABO_S5_ZCMP,Y

ZSABO_SUB5600	EQU	$
		STA	ENWRK6,X

		RTS
;
ZSABO_S6_ZADD	EQU	$
		WORD	00018H,0FFE8H
ZSABO_S6_ZCMP	EQU	$
		WORD	00100H,000A0H,00140H,000A0H,00140H,000A0H
;
ZSABO_SUB6	EQU	$
		TYX

		LDA	<ENCONT,X
		AND	#00002
		PHP
		TAY
		LDA	ENWRK6,X
		CLC
		ADC	!ZSABO_S6_ZADD,Y
		STA	ENWRK6,X

		LDY	<ENCONT,X
		PLP
		BNE	ZSABO_SUB6500

		CMP	!ZSABO_S6_ZCMP,Y
		BMI	ZSABO_SUB6800
		BRA	ZSABO_SUB6700

ZSABO_SUB6500	EQU	$
		CMP	!ZSABO_S6_ZCMP,Y
		BPL	ZSABO_SUB6800

ZSABO_SUB6700	EQU	$
		DEC	<ENCONT,X
		DEC	<ENCONT,X
		BPL	ZSABO_SUB6800

		LDA	#00100H			;倍率リセット
		STA	ENWRK6,X		;
		INC	<ENWRK2,X

ZSABO_SUB6800	EQU	$

		RTS
;
ZSABO_S7_AREV	EQU	$
		WORD	0FFFCH,00004H
ZSABO_S7_ACMP	EQU	$
		WORD	00058H,000A8H
;
ZSABO_SUB7	EQU	$
		TYX

		LDY	ENMUKI,X		;頭を垂れた ?
		LDA	<ENWRK4,X		;
		SEC				;
		SBC	!ZSABO_S7_ACMP,Y	;
		CLC				;
		ADC	#00010H			;
		CMP	#00020H			;
		BCS	ZSABO_SUB7100		;  no: ZSABO_SUB7100

		LDA	!ZSABO_S7_ACMP,Y
		STA	<ENWRK4,X
		BRA	ZSABO_SUB7400

ZSABO_SUB7100	EQU	$
		PHP				;頭の位置回転角計算
		LDY	#000			;
		CLC				;
		ADC	#00100H-00010H		;
		CMP	#00200H			;
		BCS	ZSABO_SUB7200		;
						;
		PLP				;
		BPL	ZSABO_SUB7400		;
		BRA	ZSABO_SUB7300		;
						;
ZSABO_SUB7200	EQU	$			;
		PLP				;
		BMI	ZSABO_SUB7400		;
						;
ZSABO_SUB7300	EQU	$			;
		INY				;
		INY				;
						;
ZSABO_SUB7400	EQU	$			;
		LDA	<ENWRK4,X		;
		CLC				;
		ADC	!ZSABO_S7_AREV,Y	;
		AND	#001FEH			;
		STA	<ENWRK4,X		;

ZSABO_SUB7500	EQU	$
		LDY	ENMUKI,X		;頭の縮小処理をする ?
		SEC				;
		SBC	!ZSABO_S7_ACMP,Y	;
		CLC				;
		ADC	#00020H			;
		CMP	#00040H			;
		BCS	ZSABO_SUB7700		;  no: ZSABO_SUB7700

		LDA	ENWRK6,X		;縮小終わり ?
		SEC				;
		SBC	#0000CH			;
		CMP	#000A0H			;
		BPL	ZSABO_SUB7600		;  no: ZSABO_SUB7600

		JSL	>TROBJ_CLEAR

		STZ	ENCHPT,X
		LDA	#00040H*5		;ストップタイマーセット
		STA	ENTIM0,X		;
		INC	<ENWRK2,X

		LDA	#0FFF8H
		LDY	ENCLOR,X
		BPL	ZSABO_SUB7510

		LDA	#00008

ZSABO_SUB7510	EQU	$
		STA	<EWORK0

		LDA	<ENCLOR,X
		AND	#00080H
		STA	<EWORK2

		LDA	#PIYOS
		JSL	>EXINSR
		LDA	ECENTX,X
		STA	EXXPSL,Y
		LDA	ECENTY,X
		CLC
		ADC	<EWORK0
		STA	EXYPSL,Y
		LDA	#00005
		STA	EXCHPT,Y
		DEC	A		;[ LDA	#004 ]
		STA	EXTIM1,Y
		LDA	#00140H
		STA	EXTIM0,Y
		LDA	EXCLOR,Y
		ORA	<EWORK2
		STA	EXCLOR,Y

		LDA	#000A0H

ZSABO_SUB7600	EQU	$
		STA	ENWRK6,X

ZSABO_SUB7700	EQU	$
		LDA	FRCNT2
		AND	#00001
;;;;;;;;		AND	#00004
;;;;;;;;		LSR	A
;;;;;;;;		LSR	A
;;;;;;;;		LDA	#00001H
		CLC
		ADC	<ENWRK0,X
		CMP	#00008
		BMI	ZSABO_SUB7800

		LDA	#00008

ZSABO_SUB7800	EQU	$
		STA	<ENWRK0,X

		RTS
;
ZSABO_SUB8	EQU	$
		TYX

		LDA	ENTIM0,X		;ストップ ?
		BNE	ZSABO_SUB8800		; yes: ZSABO_SUB8800

		JSL	>TROBJ_SR_4x4
		BCC	ZSABO_SUB8800

		INC	ENCHPT,X
		LDA	#00020H
		STA	ENTIM0,X
		STZ	ENWRKC,X		;ターゲットカウンタークリア
		LDA	#00002
		STA	<ENCONT,X
		INC	<ENWRK2,X

ZSABO_SUB8800	EQU	$

		RTS
;
ZSABO_S9_ZADD	EQU	$
		WORD	0FFF0H,0000AH
ZSABO_S9_ZCMP	EQU	$
		WORD	00100H,00120H
;
ZSABO_SUB9	EQU	$
		TYX

		LDY	<ENCONT,X
		LDA	ENWRK6,X
		CLC
		ADC	!ZSABO_S9_ZADD,Y
		STA	ENWRK6,X

		CPY	#000
		BNE	ZSABO_SUB9500

		CMP	#00100H
		BPL	ZSABO_SUB9800
		BRA	ZSABO_SUB9700

ZSABO_SUB9500	EQU	$
		CMP	#00120H
		BMI	ZSABO_SUB9800

ZSABO_SUB9700	EQU	$
		DEC	<ENCONT,X		;
		DEC	<ENCONT,X		;
		BPL	ZSABO_SUB9800		;

		LDA	#00100H			;縦倍率リセット
		STA	ENWRK6,X		;
		INC	<ENWRK2,X
		LDA	#00040H			;ストップタイマーセット
		STA	ENTIM0,X		;

ZSABO_SUB9800	EQU	$

		RTS
;
ZSABO_SUB10	EQU	$
		TYX

		LDA	ENTIM0,X		;ストップ ?
		BNE	ZSABO_SUB10800		; yes: ZSABO_SUB10800

		LDY	#001
		STY	<ENWRK2,X

ZSABO_SUB10800	EQU	$

		RTS
;
ZSABO_ZREV	EQU	$
		WORD	0FFFCH,00004H
;
ZSABO_ZOOM_REV	EQU	$
		STA	<EWORK8

		LDA	ENWRK6,X
		STA	<EWORK2
		LDA	ENWRKA,X
		STA	<EWORK4
		STZ	<EWORK0
		LDX	#002

ZSABO_Z_REV0100 EQU	$
		LDA	<EWORK2,X
		SEC
		SBC	<EWORK8
		CLC
		ADC	#00008
		CMP	#00010H
		BCS	ZSABO_Z_REV0300

		INC	<EWORK0
		LDA	<EWORK8
		BRA	ZSABO_Z_REV0500

ZSABO_Z_REV0300 EQU	$
		PHP
		LDY	#000
		PLP
		BPL	ZSABO_Z_REV0400

		INY
		INY

ZSABO_Z_REV0400 EQU	$
		LDA	<EWORK2,X
		CLC
		ADC	!ZSABO_ZREV,Y

ZSABO_Z_REV0500 EQU	$
		STA	<EWORK2,X

		DEX
		DEX
		BPL	ZSABO_Z_REV0100

		LDX	<ENINDX
		LDA	<EWORK2
		STA	ENWRK6,X
		LDA	<EWORK4
		STA	ENWRKA,X

		RTS
;
ZSABO_AADD	EQU	$
		WORD	00004H,0FFFCH
;
ZSABO_ANG_CALC	EQU	$
		LDA	EPWIDX,X		;回転角セット
		STA	R1			;
						;
		LDA	EPWIDY,X		;
		CLC				;
		ADC	#0000CH			;
		STA	R2			;
						;
		M_CHIP	M_RAD_GET		;
						;
		LDX	<ENINDX			;
		LDY	ENCLOR,X
		BPL	ZSABO_A_CAL0100

		LDA	R0
		EOR	#0FFFFH
		INC	A
		STA	R0

ZSABO_A_CAL0100 EQU	$
		LDY	#000
		LDA	R0
		CLC
		ADC	#00100H
		AND	#001FEH
		SEC
		SBC	<ENWRK4,X
		PHP
		CLC
		ADC	#00100H
		CMP	#00200H
		BCS	ZSABO_A_CAL0300

		SEC
		SBC	#000FCH
		CMP	#00008H
		BCS	ZSABO_A_CAL0200

		PLP
		RTS

ZSABO_A_CAL0200 EQU	$
		PLP
		BMI	ZSABO_A_CAL0400
		BRA	ZSABO_A_CAL0500

ZSABO_A_CAL0300 EQU	$
		PLP
		BMI	ZSABO_A_CAL0500

ZSABO_A_CAL0400 EQU	$
		INY				;
		INY				;
						;
ZSABO_A_CAL0500 EQU	$			;
		LDA	<ENWRK4,X		;
		CLC				;
		ADC	!ZSABO_AADD,Y		;
		AND	#001FEH			;
		STA	<ENWRK4,X		;

		RTS
;
LOCKON_TARGET2	EQU	$
		LDA	#00010H
		BRA	LOCKON_T0010

LOCKON_TARGET	EQU	$
		LDA	#00000

LOCKON_T0010	EQU	$
		STA	<EWORK2
		STZ	<EWORK0			;ターゲットカラーＡＮＤデータ（固定）
		LDA	ENWRKC,X		;ターゲットカウンターＭＡＸ ?
		CLC				;
		ADC	#00002			;
		CMP	#00020H			;
		BCS	LOCKON_T0100		; yes: LOCKON_T0100

		STA	ENWRKC,X
		BRA	LOCKON_T0300

LOCKON_T0100	EQU	$
		LDY	#004			;ターゲットカラーＡＮＤデータ（点滅）
		STY	<EWORK0			;

		LDA	FRCNT2
		AND	#00007
		BNE	LOCKON_T0300

		LDA	#00063H			;［Ｓ］
		JSL	>SOUND_3_ON

LOCKON_T0300	EQU	$
		LDA	#NAG_P
		JSL	>EXINSR

		LDA	PCENTX			;Ｘ座標セット
		SEC				;
		SBC	#00008			;
		STA	EXXPSL,Y		;
		LDA	PCENTY			;Ｙ座標セット
		SEC				;
		SBC	#00008			;
		STA	EXYPSL,Y		;
		LDA	<EWORK2			;初期タイマーセット
		STA	EXTIM0,Y		;
		LDA	ENWRKC,X		;ターゲットカウンターセット
		STA	EXWRK0,Y		;
		LDA	FRCNT2
		AND	<EWORK0
		LSR	A
		CLC
		ADC	#02H*2
		STA	EXWRKC,X		;ターゲットカウンターリセット
		ORA	EXCLOR,Y		;カラーセット
		STA	EXCLOR,Y		;

		RTL
;
;************************************************************************
;*		initial ( カミナリジュゲムのたま )			*
;************************************************************************
;*		initial ( ヘディングさんぼの子供 )			*
;************************************************************************
;*		initial ( ズームさぼてんのたま )			*
;************************************************************************
;*		initial ( ジュゲムのたま )				*
;************************************************************************
STAMAIN		EQU	$			;-- stamain --
GENKIIN		EQU	$			;-- genkiin --
HSAN1IN		EQU	$			;-- hsan1in --
JTAMAIN		EQU	$			;-- jtamain --
JTAM2IN		EQU	$			;-- jtam2in --
		RTL
;
;************************************************************************
;*		move	( ヘディングさんぼの子供 )			*
;************************************************************************
;*		move	( ズームさぼてんのたま )			*
;************************************************************************
;*		move	( ジュゲムのたま )				*
;************************************************************************
;		ENWRK0	誰かに持たれてるフラグ（持ってるやつのROUTINE INDEX）
;		ENWRK2	モード
;
HSAN1MV		EQU	$			;-- hsan1mv --
STAMAMV		EQU	$			;-- stamamv --
JTAMAMV		EQU	$			;-- jtamamv --
JTAM2MV		EQU	$			;-- jtam2mv --
		LDA	ENMODE,X
		CMP	#EMOVE
		BNE	STAMAMV0080

		JSR	STAMA_BGCHK		;動いてるときショットが立ってるから

STAMAMV0080	EQU	$
GENKIMV		EQU	$			;-- genkimv --
		JSL	>ENMDCK

;		LDY	<ENWRK2,X
;		BNE	STAMAMV0800

		LDA	ENMYNO,X
		CMP	#GENKI
		BNE	STAMAMV0100

		JSR	STAMA_BGCHK

STAMAMV0100	EQU	$
		JSR	STAMA_EX_SET

		JSR	HSAN1_OBJ_CHK		;このルーチンが最後！！

STAMAMV0800	EQU	$

		RTL
;
STAMA_EX_SET	EQU	$
		LDA	ENWRK8,X		;ケムリだす ?
		ORA	ENTIM1,X
		BNE	STAMA_EX_SET080		;  no: STAMA_EX_SET080

		LDA	#00004
		STA	ENTIM1,X

		LDA	ENMYNO,X
		CMP	#GENKI
		BNE	STAMA_EX_SET040

		LDA	#SBALS
		JSL	>EXINSR

		LDA	ENXPSL,X
		STA	EXXPSL,Y
		LDA	ENYPSL,X
		STA	EXYPSL,Y
		LDA	#00005
		STA	EXCHPT,Y
		LDA	#00001
		STA	EXTIM0,Y

		RTS

STAMA_EX_SET040 EQU	$
		CMP	#STAMA
		BEQ	STAMA_EX_SET050
		CMP	#HSAN1
		BEQ	STAMA_EX_SET080

		LDA	#00008
		STA	ENTIM1,X

STAMA_EX_SET050 EQU	$
		LDA	#DSMK0
		JSL	>EXINSR

		LDA	ENXPSL,X
		STA	EXXPSL,Y
		LDA	ENYPSL,X
		STA	EXYPSL,Y
		LDA	#00004
		STA	EXTIM0,Y
		INC	A		;[ LDA	#005 ]
		STA	EXCHPT,Y
		STA	EXWRK0,Y
		INC	A		;[ LDA	#06 ]
		STA	EXYUSN,Y

STAMA_EX_SET080 EQU	$

		RTS
;
HSAN1_OBJ_CHK	EQU	$
		LDY	ECRSFG,X		;敵とあたった ?
		DEY				;
		BMI	STAMA_O_C0300		;  no: STAMA_O_C0300

		LDA	ENMODE,Y
		CMP	#EMOVE
		BNE	STAMA_O_C0700
		LDA	ENSHOT,Y
		BEQ	STAMA_O_C0700

		TYX
		JSL	>ENDEATH_SET_4

STAMA_FALL_SET	EQU	$
		PLA
		JMP	>ENDEATH_SET_4
;
;		 STZ	 ENXSPD,X
;		 LDA	 #0FE00H
;		 STA	 ENYSPD,X
;		 LDA	 #00040H
;		 STA	 ENGPOW,X
;		 LDA	 #00400H
;		 STA	 ENGMAX,X
;		 STZ	 ENMOD1,X		 ;ＢＧチェックなし
;		 INC	 <ENWRK2,X
;
;		RTS

STAMA_O_C0300	EQU	$
		INY				;プレイヤーとあたった ?
		BEQ	STAMA_O_C0700		;  no: STAMA_O_C0700

		LDY	<ENWRK0,X		;誰かに持たれてる ?
		BEQ	STAMA_O_C0500		;  no: STAMA_O_C0500

		LDA	ENMODE,Y		;持ってるやつ生きてる ?
		CMP	#EMOVE			;
		BEQ	STAMA_O_C0700		; yes: STAMA_O_C0700

STAMA_O_C0500	EQU	$
		JSL	>PLFLST

STAMA_O_C0700	EQU	$
STAMA_BGCHK0000 EQU	$

		RTS
;
ENBGCK_ADR	EQU	$
		WORD	ENBGCK_TYPE_F-ENBGCK_TYPE_L
		WORD	ENBGCK_TYPE_H-ENBGCK_TYPE_L
		WORD	ENBGCK_TYPE_R-ENBGCK_TYPE_L
		WORD	ENBGCK_TYPE_L-ENBGCK_TYPE_L
;
GENKI_S_XSPD	EQU	$
		WORD	00200H,0FE00H
;
STAMA_BGCHK	EQU	$
		LDY	<ENWRK0,X		;誰かに持たれてる ?
		BNE	STAMA_BGCHK0000		; yes: STAMA_BGCHK0000

		LDA	ENCBFG,X
		AND	#0000FH
		BEQ	STAMA_BGCHK0900

		LDY	#000
		LDA	ENCBFG,X
		BIT	#00001
		BNE	STAMA_BGCHK0300

		INY
		INY

		BIT	#00002
		BNE	STAMA_BGCHK0300

		INY
		INY

		BIT	#00004
		BNE	STAMA_BGCHK0300

		INY
		INY

STAMA_BGCHK0300 EQU	$
		LDA	!ENBGCK_ADR,Y
		CLC
		ADC	ENWRKC,X
		I16
		TAX
		LDA	>ENBGCK_TYPE_L,X
		AND	#1111100000000000B
		CMP	#ET
		BNE	STAMA_BGCHK0800

		LDA	>ENBGCK_X_L,X
		STA	BGXPS1
		LDA	>ENBGCK_Y_L,X
		STA	BGYPS1

		I8
		LDX	<ENINDX

		JSL	>AWANH_BGBR0_SET

STAMA_BGCHK0800 EQU	$
		I8
		LDX	<ENINDX

		LDA	ENMYNO,X
		CMP	#GENKI
		BEQ	GENKI_SWAVE_SET

		JMP	STAMA_FALL_SET

STAMA_BGCHK0900 EQU	$
		LDY	ENYSPD+1,X		;上昇中 ?
		BPL	STAMA_BGCHK1800		;  no: STAMA_BGCHK1800

		LDA	ENMODE,X		;生きてる ?
		CMP	#EMOVE			;
		BNE	STAMA_BGCHK1800		;  no: STAMA_BGCHK1800

		LDA	!ENBGCK_ADR		;坂 ?
		CLC				;
		ADC	ENWRKC,X		;
		I16				;
		TAX				;
		LDA	>ENBGCK_TYPE_L,X	;
		AND	#SK			;
		BNE	STAMA_BGCHK0800		; yes: STAMA_BGCHK0800

		I8
		LDX	<ENINDX

STAMA_BGCHK1800 EQU	$

		RTS

GENKI_SWAVE_SET EQU	$
		LDA	#SWAV0
		JSL	>ENINSR
		BCC	GENKI_S_SET0800

		LDA	ENXPSL,X
		STA	ENXPSL,Y
		LDA	ENYPSL,X
		STA	ENYPSL,Y
		LDA	#0000BH
		STA	ENWRK0,Y
		INC	A	;[ LDA	#0000CH ]
		STA	ECNTYW,Y
		LDA	#00003
		STA	ENTIM1,Y
		INC	A	;[ LDA	#00004 ]
		STA	EWIDEY,Y

		LDY	#002

GENKI_S_SET0100 EQU	$
		PHY
		LDA	!GENKI_S_XSPD,Y
		STA	<EWORK0

		LDA	#SWAVM
		JSL	>ENINSR_I
		BCC	GENKI_S_SET0500

		LDA	ENXPSL,X
		STA	ENXPSL,Y
		STA	ENWRKC,Y
		LDA	ENYPSL,X
		STA	ENYPSL,Y
		LDA	<EWORK0
		STA	ENXSPD,Y

		PLY
		DEY
		DEY
		BPL	GENKI_S_SET0100
		BRA	GENKI_S_SET0800

GENKI_S_SET0500 EQU	$
		PLY

GENKI_S_SET0800 EQU	$
		LDA	#00020H
		STA	TILTCT

		LDA	#0003EH			;［Ｓ］
		JSL	>SOUND_3_ON
;;;;;;;;		LDA	#00016H		;［Ｓ］
;;;;;;;;		STA	SOUND3

		PLA
		JMP	>ENCLEAR
;
;************************************************************************
;*		initial ( zoom flower )					*
;************************************************************************
ZFLWRIN		EQU	$			;-- zflwrin --
		LDA	ENWRKA,X
		BNE	ZFLWRIN0100
		CMP	ENWRKC,X
		BEQ	ZFLWRIN0200

ZFLWRIN0100	EQU	$
		STA	<EWORK4
		LDA	ENWRKC,X
		JSL	>EXIST_CHECK_S
		BRA	ZFLWRIN0300

ZFLWRIN0200	EQU	$
		JSL	>EXIST_CHECK

ZFLWRIN0300	EQU	$
		LDA	ENTROB,X
		BPL	ZFLWRIN0500

		JSL	>TROBJ_SR_4x4_CL

		LDA	#00100H			;初期倍率セット
		STA	ENWRK6,X

		JSR	ZFLWR_ROT_SET_I
		BRA	ZFLWRIN0800

ZFLWRIN0500	EQU	$
		JSL	>TROBJ_OAM_4x4

ZFLWRIN0800	EQU	$
		JSL	>ICE_IN_CK

;;;;;;;;		LDA	#00016H			;［Ｓ］
;;;;;;;;		JSL	>SOUND_3_ON

		RTL
;
;************************************************************************
;*		move	( zoom flower )					*
;************************************************************************
;		ENWRK0
;		ENWRK2	ROUTINE MODE INDEX
;		ENWRK4	キャラパターンフラグ
;		ENWRK6	倍率
;		ENWRK8	回転角
;		ENWRKA	チェックＸ　ＰＯＳ．
;		ENWRKC	チェックＹ　ＰＯＳ．
;
;		ENTIM2	メッセージロックタイマー
;
ZFLWR_SUB	EQU	$
		WORD	ZFLWR_SUB0
		WORD	ZFLWR_SUB1
		WORD	ZFLWR_SUB2
		WORD	ZFLWR_SUB3
;
ZFLWR_CHAR	EQU	$
		WORD	CIPCHD+4010H+000
		WORD	CIPCHD+4020H+000
;
ZFLWRMV		EQU	$			;-- zflwrmv --
		JSL	>TROBJ_OAM_4x4

		JSL	>ENMDCK

;		ldy	#004
;		sty	2100h

		TXY
		LDA	<ENWRK2,X
		ASL	A
		TAX
		JSR	(ZFLWR_SUB,X)

		JSR	ZFLWR_ROT_SET

;		ldy	#00fh
;		sty	2100h

		RTL
;
ZFLWR_ROT_SET	EQU	$
		TROBJ_CHK_4
		BNE	ZFLWR_R_SET0800

ZFLWR_ROT_SET_I EQU	$
		LDA	ENWRK6,X		;(R6) <- 倍率セット
		STA	R6			;

		LDA	ENWRK8,X		;(R5) <- 回転角セット
		LSR	A			;
		STA	R5			;

		LDY	<ENWRK4,X		;chara data address set
		PHP				;
		LDA	!ZFLWR_CHAR,Y		;
		STA	R12			;
		LDA	#BANK CIPCHD+4010H+000	;chara data bank set
		STA	R13

		LDY	ENTROB,X
		TYX
		LDA	>TROBJ_PLOT_X,X		;回転エリアＸ　ＰＯＳ．セット
		STA	R3			;
		LDA	>TROBJ_PLOT_Y,X		;回転エリアＹ　ＰＯＳ．セット
		STA	R2			;

		PLP
		BEQ	ZFLWR_R_SET0600

		M_CHIP	C_32_ROTZOM
		BRA	ZFLWR_R_SET0700

ZFLWR_R_SET0600 EQU	$
		M_CHIP	C_32_ROTZOM_16

ZFLWR_R_SET0700 EQU	$
		LDX	<ENINDX

		INC	OBM7WF			;mode 7 OBJ chara DMA "ON"

ZFLWR_R_SET0800 EQU	$

		RTS
;
ZFLWR_SUB0	EQU	$
		TYX

		LDY	#004
		STY	<ENCONT,X

		INC	<ENWRK2,X

ZFLWR_SUB0800	EQU	$

		RTS
;
ZFLWR_S1_ZCMP	EQU	$-2
		WORD	00100H,00150H
ZFLWR_S1_ZDAT	EQU	$-2
		WORD	00100H,000B0H
;
ZFLWR_SUB1	EQU	$
		TYX

		LDY	<ENCONT,X
		LDA	ENWRK6,X
		CLC
		ADC	#00010H
		CMP	!ZFLWR_S1_ZCMP,Y
		BMI	ZFLWR_SUB1700

		LDA	#00002
		STA	<ENWRK4,X

		DEC	<ENCONT,X
		DEC	<ENCONT,X
		BNE	ZFLWR_SUB1600

		LDA	#0000CH
		STA	ENTIM1,X

		INC	<ENWRK2,X

ZFLWR_SUB1600	EQU	$
		LDA	!ZFLWR_S1_ZDAT,Y

ZFLWR_SUB1700	EQU	$
		STA	ENWRK6,X

ZFLWR_SUB2000	EQU	$

		RTS
;
ZFLWR_S2_AADD	EQU	$
		WORD	00002H,0FFFEH
;
ZFLWR_SUB2	EQU	$
		TYX

		LDA	ENTIM1,X
		BNE	ZFLWR_SUB2200

		LDA	#00018H
		STA	ENTIM1,X

		LDA	<ENCONT,X
		EOR	#00002H
		STA	<ENCONT,X

ZFLWR_SUB2200	EQU	$
		LDY	<ENCONT,X
		LDA	ENWRK8,X
		CLC
		ADC	!ZFLWR_S2_AADD,Y
		AND	#001FEH
		STA	ENWRK8,X
;
ZFLWR_CRCHK	EQU	$
		LDY	ECRSFG,X		;何かにぶつかった ?
		BNE	ZFLWR_CRCHK0200		; yes: ZFLWR_CRCHK0200

ZFLWR_CRCHK0100 EQU	$

		RTS

ZFLWR_CRCHK0200 EQU	$
		BMI	ZFLWR_CRCHK0300		;プレイヤーにぶつかった ?
						; yes: ZFLWR_CRCHK0300

		LDA	ENMODE-1,Y		;敵は動いてる ?
		CMP	#EMOVE			;
		BNE	ZFLWR_CRCHK0100		;  no: ZFLWR_CRCHK0100
		LDA	ENSHOT-1,Y		;ショットされてる ?
		BEQ	ZFLWR_CRCHK0100		;  no: ZFLWR_CRCHK0100

		DEY
		TYX
		JSL	>ENDEATH_SET_4

ZFLWR_CRCHK0300 EQU	$
		JSL	>FLOWER_GET2

		RTS
;
FLOWER_GET	EQU	$
		PHB
		PHK
		PLB

 IF BUG00  ;*** NES 対応（バグ修正）[1995/7/13] ******************
		PHD			;(D) save
		LDA	#EN0RAM
		TCD

		LDY	<ENWRK2,X
		CPY	#002
		BNE	FLOWER_GET0800

		JSL	>FLOWER_GET2

FLOWER_GET0800	EQU	$
		PLD			;(D) load

 ELSE	   ;*** JPN 対応 [1995/6/30] ******************
		LDY	<ENWRK2,X
		CPY	#002
		BNE	FLOWER_SET0800

		JSL	>FLOWER_GET2

FLOWER_SET0800	EQU	$
 ENDIF	   ;*** NES 対応（バグ修正）[1995/7/13] ******************
	   ;*** JPN 対応 [1995/6/30] ******************


		PLB

		RTL
;
FLOWER_GET2	EQU	$
		LDA	#00020H			;メッセージロックタイマーセット
		STA	ENTIM2,X		;
		LDA	#000FFH
		STA	ENYUSN,X
		INC	<ENWRK2,X

		INC	FRWR_P
		LDY	FRWR_P			;３ＵＰする ?
		CPY	#005			;
;;;;		    BNE	    ZFLWR_CRCHK0400	    ;  no: ZFLWR_CRCHK0400
		BCC	ZFLWR_CRCHK0400		;  no: ZFLWR_CRCHK0400
		LDY	#5
		STY	FRWR_P

		LDA	ECENTX,X
		SEC
		SBC	#00008
		STA	WORK0
		LDA	ECENTY,X
		SEC
		SBC	#00008
		STA	WORK2

		JSL	>PL_1UP_SET

		LDA	#00008		;［Ｓ］
		BRA	ZFLWR_CRCHK0500

ZFLWR_CRCHK0400 EQU	$
		LDA	#00036H		;［Ｓ］

ZFLWR_CRCHK0500 EQU	$
		JSL	>SOUND_3_ON

		LDA	#FUSNB
		JSL	>EXINSR
		LDA	ENXPSL,X
		STA	EXXPSL,Y
		LDA	ENYPSL,X
		STA	EXYPSL,Y
		LDA	#0000BH
		STA	EXWRK0,Y
		LDA	#00004
		STA	EXTIM0,Y

		LDA	ENWRKA,X
		BNE	ZFLWR_CRCHK0600
		CMP	ENWRKC,X
		BEQ	ZFLWR_CRCHK0700

ZFLWR_CRCHK0600 EQU	$
		STA	<EWORK4
		LDA	ENWRKC,X
		JMP	>NON_EXIST_SET2

ZFLWR_CRCHK0700 EQU	$
		JMP	>NON_EXIST_SET
;
ZFLWR_SUB3	EQU	$
ZFLW2_SUB3	EQU	$
		TYX

		LDA	ENTIM2,X
		BNE	ZFLWR_SUB3800

		LDA	SV_STATUS		;メッセージを出す ?
		AND	#00040H			;
		ORA	MAPOINT			;
		BNE	ZFLWR_SUB3500		;  no: ZFLWR_SUB3500

		LDA	SV_STATUS
		ORA	#00040H
		STA	SV_STATUS

		LDA	#FWR_MSG
		STA	>MSG_NO

		INC	MSGMOD

ZFLWR_SUB3500	EQU	$
		JSL	>ENCLEAR_NORETN

ZFLWR_SUB3800	EQU	$

		RTS
;
;************************************************************************
;*		initial ( zoom flower 2 )				*
;************************************************************************
ZFLW2IN		EQU	$			;-- zflw2in --
		JSL	>EXIST_CHECK

		JSL	>ICE_IN_CK

;;;;;;;;		LDA	#00016H			;［Ｓ］
;;;;;;;;		JSL	>SOUND_3_ON

		RTL
;
;************************************************************************
;*		move	( zoom flower 2 )				*
;************************************************************************
;		ENWRK0
;		ENWRK2	ROUTINE MODE INDEX
;		ENWRK4
;		ENWRK6
;		ENWRK8
;		ENWRKA	チェックＸ　ＰＯＳ．
;		ENWRKC	チェックＹ　ＰＯＳ．
;
;		ENCONT	キャラパターンチェンジ方向フラグ
;
;		ENTIM1	キャラパターンチェンジタイマー
;		ENTIM2	メッセージロックタイマー
;
ZFLW2_SUB	EQU	$
		WORD	ZFLW2_SUB0		;画面内チェック
		WORD	ZFLW2_SUB1		;ズームアップ
		WORD	ZFLW2_SUB2		;衝突待ち
		WORD	ZFLW2_SUB3		;メッセージセット
;
ZFLW2MV		EQU	$			;-- zflw2mv --
		JSL	>ENMDCK

;		ldy	#004
;		sty	2100h

		TXY
		LDA	<ENWRK2,X
		ASL	A
		TAX
		JSR	(ZFLW2_SUB,X)

;		ldy	#00fh
;		sty	2100h

		RTL
;
ZFLW2_SUB0	EQU	$
		TYX

		LDA	ENDSXL,X		;画面内 ?
		AND	#0FF00H			;
		STA	<EWORK0			;
		LDA	ENDSYL,X		;
		AND	#0FF00H			;
		ORA	<EWORK0			;
		BNE	ZFLW2_SUB0800		;  no: ZFLW2_SUB0800

		LDY	#009H
		STY	<ENCONT,X

		INC	<ENWRK2,X

ZFLW2_SUB0800	EQU	$

		RTS
;
ZFLW2_SUB1	EQU	$
		TYX

		LDA	ENTIM1,X
		BNE	ZFLW2_SUB1800

		LDA	#00002
		STA	ENTIM1,X

		INC	ENCHPT,X
		LDY	ENCHPT,X
		CPY	#004
		BMI	ZFLW2_SUB1800

		LDA	#00008H
		STA	ENTIM1,X

		INC	<ENWRK2,X

ZFLW2_SUB1800	EQU	$

		RTS
;
ZFLW2_SUB2	EQU	$
		TYX

		LDA	ENTIM1,X		;キャラパターンチェンジ ?
		BNE	ZFLW2_SUB2300		;  no: ZFLWR_SUB2300

		LDA	#00004H
		STA	ENTIM1,X

		LDA	<ENCONT,X
		CMP	ENCHPT,X
		BMI	ZFLW2_SUB2100

		INC	ENCHPT,X
		BRA	ZFLW2_SUB2180

ZFLW2_SUB2100	EQU	$
		DEC	ENCHPT,X

ZFLW2_SUB2180	EQU	$
		LDA	<ENCONT,X
		CMP	ENCHPT,X
		BNE	ZFLW2_SUB2300

		TAY
		LDA	#00008H
		STA	ENTIM1,X
		LSR	A	;[ LDA	#00004H ]
		CPY	#004
		BNE	ZFLW2_SUB2200

		LDA	#00009

ZFLW2_SUB2200	EQU	$
		STA	<ENCONT,X

ZFLW2_SUB2300	EQU	$
		JSR	ZFLWR_CRCHK

		RTS
;
;************************************************************************
;*		initial ( スイッチ )					*
;************************************************************************
SW000IN		EQU	$			;-- sw000in --
		JSL	>TROBJ_SR_4x4_CL

		LDA	#00100H
		STA	ENWRK6,X
		STA	ENWRK8,X
		JSR	SW000_ROT_SET_I
		LDA	#0000CH
		STA	EWIDEX,X
		LDA	#00012H
		STA	EWIDEY,X

		RTL
;
;************************************************************************
;*		move	( スイッチ )					*
;************************************************************************
;		ENWRK0
;		ENWRK2	ROUTINE MODE INDEX
;		ENWRK4
;		ENWRK6	横倍率
;		ENWRK8	縦倍率
;		ENWRKA
;		ENWRKC
;
;		ENTIM0	スイッチ有効タイマー
;		ENTIM1	サウンドＯＮタイマー
;
SW000_SUB	EQU	$
		WORD	DUMMY_SUB		;
		WORD	SW000_SUB1		;縮む
		WORD	SW000_SUB2		;戻る
		WORD	SW000_SUB3		;タイマー管理
;
SW000MV		EQU	$			;-- sw000mv --
		LDY	<ENWRK2,X
		CPY	#003
		BEQ	SW000MV0100

		JSL	>TROBJ_OAM_4x4

;;;;;;;;		JSL	>ENMDCK

		JSR	SW000_PLCHK

SW000MV0100	EQU	$
		TXY
		LDA	<ENWRK2,X
		ASL	A
		TAX
		JSR	(SW000_SUB,X)

		JSR	SW000_ROT_SET

		RTL
;
SW000_PLCHK	EQU	$
		LDY	ENYUSN,X
		BMI	SW000_PLCHK0800

		LDY	PLYSPD+1
		BMI	SW000_PLCHK0800

		LDA	EWIDEX,X
		CLC
		ADC	PWIDEX
		ASL	A
		STA	<EWORK0
		LSR	A
		CLC
		ADC	EPWIDX,X
		CMP	<EWORK0
		BCS	SW000_PLCHK0800

		LDA	ENYPSL,X
		CLC
		ADC	#00010H
		SEC
		SBC	EWIDEY,X
		SEC
		SBC	PCENTY
		SEC
		SBC	PWIDEY
		LDY	<ENWRK2,X
		CPY	#001
		BEQ	SW000_PLCHK0100
		CPY	#002
		BEQ	SW000_PLCHK0100
		CMP	#0FFF8H
		BCC	SW000_PLCHK0800

		STX	SW000IDX

SW000_PLCHK0100 EQU	$
		INC	A
		SEC
		ADC	PLYPSL
		STA	PLYPSL

		STZ	PLYSPD
		INC	ONLFFG

		LDA	ENCBFG,X		;地面に着いてる ?
		AND	#00001			;
		BEQ	SW000_PLCHK0800		;  no: SW000_PLCHK0800

		LDY	<ENWRK2,X		;
		BNE	SW000_PLCHK0800		;

		LDA	PLXSPD
		STA	ENWRKA,X
		STZ	PLXSPD
		STZ	PLMVSP
		LDA	#PDEM
		STA	PLMODE
		INC	ENSTFG
		INC	PLSTFG
		INC	<ENWRK2,X

		LDA	#00033H			;［Ｓ］
		JSL	>SOUND_3_ON

SW000_PLCHK0800 EQU	$

		RTS
;
SW000_ROT_SET	EQU	$
		LDY	ENWRK2,X
		BEQ	SW000_R_SET0800
		CPY	#003
		BPL	SW000_R_SET0800

SW000_ROT_SET_I EQU	$
		LDA	#00C00H			;Ｘチェック幅
		STA	R0			;
		LDA	#01200H			;Ｙチェック幅
		STA	R1			;

		LDA	ENWRK8,X		;(R11) <- 縦倍率セット
		STA	R11			;

		LDA	ENWRK6,X		;(R4,R6) <- 横倍率セット
		STA	R4			;
		STA	R6			;

		LDA	#BANK CIPCHD+00C0H+001 ;chara data bank set
		STA	R13
		LDA	#CIPCHD+00C0H+001	;chara data address set
		STA	R12

		LDA	#00010H			;(R8) <- 中心Ｘ　ＰＯＳ．
		STA	R8			;
		ASL	A
		STA	R9			;(R9) <- 中心Ｙ　ＰＯＳ．

		LDY	ENTROB,X
		TYX
		LDA	>TROBJ_PLOT_X,X		;回転エリアＸ　ＰＯＳ．セット
		STA	R3			;
		LDA	>TROBJ_PLOT_Y,X		;回転エリアＹ　ＰＯＳ．セット
		STA	R2			;

		M_CHIP	M_SW000_SET
;;;;;;;;		M_CHIP	C_32_ZOOM_XY

		LDX	<ENINDX
		LDA	CCWORK10
		STA	EWIDEX,X
		LDA	CCWORK11
		STA	EWIDEY,X

		INC	OBM7WF			;mode 7 OBJ chara DMA "ON"

SW000_R_SET0800 EQU	$
SW000_SUB1000	EQU	$

		RTS
;
SW000_SUB1	EQU	$
		TYX

		LDA	ENCBFG,X
		AND	#00001
		BEQ	SW000_SUB1000

		LDA	ENWRK8,X
		SEC
		SBC	#00040H
		AND	#0FFF8H
		LSR	A
		LSR	A
		INC	A
		INC	A
		STA	<EWORK2
		LSR	A
		CLC
		ADC	#00004
		STA	<EWORK4

		LDA	#00002
		STA	<EWORK0

		LDA	ENWRK6,X
		CLC
		ADC	<EWORK4
		CMP	#00180H
		BMI	SW000_SUB1100

		DEC	<EWORK0
		LDA	#00180H

SW000_SUB1100	EQU	$
		STA	ENWRK6,X

		LDA	ENWRK8,X
		SEC
		SBC	<EWORK2
		CMP	#00040H
		BPL	SW000_SUB1200

		DEC	<EWORK0
		LDA	#00040H

SW000_SUB1200	EQU	$
		STA	ENWRK8,X

		LDY	<EWORK0
		BNE	SW000_SUB1800

		LDA	ENCLOR,X		;カラー変更
		AND	#00020H			;
		ORA	#00004			;
		STA	ENCLOR,X		;
;
		STZ	BLKCOIN
		LDA	#00001000B
		TSB	SWITCH_1
;
		LDA	#00032H			;［Ｓ］
		JSL	>SOUND_3_ON
;;;;;;;;		LDA	#0000BH			;［Ｓ］
;;;;;;;;		STA	SOUND0

		INC	<ENWRK2,X

SW000_SUB1800	EQU	$

		RTS
;
SW000_SUB2	EQU	$
		TYX

		LDA	ENWRK8,X
		SEC
		SBC	#00040H
		AND	#0FFF4H
		INC	A
		INC	A
		STA	<EWORK2
		LSR	A
		CLC
		ADC	#00004
		STA	<EWORK4

		LDY	#002
		STY	<EWORK0

		LDA	ENWRK6,X
		SEC
		SBC	<EWORK4
		CMP	#00100H
		BPL	SW000_SUB2100

		DEC	<EWORK0
		LDA	#00100H

SW000_SUB2100	EQU	$
		STA	ENWRK6,X

		LDA	ENWRK8,X
		CLC
		ADC	<EWORK2
		CMP	#00100H
		BMI	SW000_SUB2200

		DEC	<EWORK0
		LDA	#00100H

SW000_SUB2200	EQU	$
		STA	ENWRK8,X

		LDY	<EWORK0
		BNE	SW000_SUB2800

		LDA	ECENTX,X
		STA	<EWORK0
		LDA	ECENTY,X
		STA	<EWORK2
		LDA	#FSMK1
		JSL	>FSMK0_SET2

		LDA	#040H*10		;スイッチ有効タイマーセット（１０秒）
		STA	SWITCH_TIMER		;
		LDA	#000FFH
		STA	ENYUSN,X

		LDA	#PMOV
		STA	PLMODE
		LDA	#P006
		STA	PLJUMP
 IF PAL	   ;*** PAL 対応 [1995/7/20] ******************
		LDA	#0F931H
		STA	PLYSPD
		LDA	#00122H
		LDY	ENWRKA+1,X
		BPL	SW000_SUB2500

		LDA	#0FEDEH

SW000_SUB2500	EQU	$
		STA	PLXSPD
 ELSE	   ;*** JPN/NES 対応 [1995/6/30] **************
		LDA	#0FA00H
		STA	PLYSPD
		LDA	#00100H
		LDY	ENWRKA+1,X
		BPL	SW000_SUB2500

		LDA	#0FF00H

SW000_SUB2500	EQU	$
		STA	PLXSPD
 ENDIF	   ;*** PAL 対応 [1995/7/20] ******************

		STA	PLMVSP
		STZ	ENSTFG
		STZ	PLSTFG
		STZ	ONLFFG

		LDA	#0010000000000001B	;範囲クリアなし
		STA	ENMOD2,X

		JSL	>TROBJ_CLEAR

		INC	<ENWRK2,X

SW000_SUB2800	EQU	$

		RTS
;
SW000_SUB3	EQU	$
		TYX

;;;;;;;;		LDY	GOAL_IN			;ゴールイン ?
;;;;;;;;		BNE	SW000_SUB3900		; yes: SW000_SUB3900
		CPX	SW000IDX		;タイマー管理してるのは自分 ?
		BNE	SW000_SUB3300		;  no: SW000_SUB3300
;
		LDA	SWITCH_TIMER		;タイマー効いてる ?
		BNE	SW000_SUB3500		; yes: SW000_SUB3500

		LDA	#00001000B
		TRB	SWITCH_1

SW000_SUB3300	EQU	$
		PLA
		JMP	>ENCLEAR
;
SW000_SUB3500	EQU	$
;;;;;;;;		CMP	#00020H
;;;;;;;;		BNE	SW000_SUB3800

;;;;;;;;		LDA	#00001			;［Ｓ］
;;;;;;;;		JSL	>SOUND_3_ON
;;;;;;;;		LDA	#00024H			;［Ｓ］
;;;;;;;;		STA	SOUND3

SW000_SUB3800	EQU	$
		LDA	ENTIM1,X		;サウンド立てる ?
		BNE	SW000_SUB3900		;  no: SW000_SUB3900

		LDA	#00040H
		STA	ENTIM1,X

		LDY	#07EH
		LDA	SWITCH_TIMER		;３秒以下 ?
		CMP	#040H*3			;
		BPL	SW000_SUB3880		;  no: SW000_SUB3880

		INY

SW000_SUB3880	EQU	$
		TYA
		JSL	>SOUND_3_ON

SW000_SUB3900	EQU	$

		RTS
;
;************************************************************************
;*		initial ( まとくん )					*
;************************************************************************
MATO0IN		EQU	$			;-- mato0in --
		JSL	>TROBJ_SR_4x4_CL

		LDA	#00100H			;初期倍率セット
		STA	<ENWRK4,X		;
		DEC	<ENWRK0,X		;上下共にいない
		LDA	#00006
		STA	EWIDEX,X
		STA	EWIDEY,X
		STZ	ENMUKI,X		;

		LDA	FRCNT2			;発生フレームセット
		STA	ENXMAX,X		;

		JSL	>DOKAN_CHECK		;セット位置は土管 ?
		BNE	MATO0IN0500		;  no: MATO0IN0500

		LDA	ENCLOR,X		;ＢＧ１の後ろに
		EOR	#00030H			;
		STA	ENCLOR,X		;
		LDA	ENYPSL,X		;出現Ｙ　ＰＯＳ．セット
		CLC				;
		ADC	#00010H			;
		STA	ENYPSL,X		;
		SEC				;セット規準Ｙ　ＰＯＳ．セット
		SBC	#00020H			;
		STA	ENWRKC,X		;

		LDA	ENXPSL,X		;
		CLC
		ADC	#00008
		STA	ENXPSL,X
		BIT	#00010H			;単体セット ?
		BEQ	MATO0IN0100		; yes: MATO0IN0100

		STA	ENWRKA,X

MATO0IN0100	EQU	$
		INC	ENWRKA,X

		RTL

MATO0IN0500	EQU	$
		JSR	MATO0_BASE_YPS
		LDA	<EWORK2			;セット規準Ｙ　ＰＯＳ．セット
		SEC				;
		SBC	#00010H			;
		STA	ENWRKC,X		;
		LDA	#000FFH
		STA	ENYUSN,X

		LDA	ENXPSL,X		;単体セット ?
		BIT	#00010H			;
		BEQ	MATO0IN0600		; yes: MATO0IN0600

		STA	ENWRKA,X

MATO0IN0600	EQU	$
		LDY	#MATO0_RMODE10
		STY	<ENWRK2,X

MATO0IN0700	EQU	$

		RTL
;
DOKAN_CHECK	EQU	$
		LDA	ENXPSL,X
		STA	R8
		LDA	ENYPSL,X

DOKAN_CHECK2	EQU	$
		STA	R0
		M_CHIPR M_BGUNIT_READ
		LDX	<ENINDX
		LDA	R6
		CMP	#UT79FA			;プレイヤー入れない土管 ?
		BEQ	DOKAN_CHK0800		;
		CMP	#UT79FA+1		;
		BEQ	DOKAN_CHK0800		; yes: DOKAN_CHK0800

		LDA	R7			;セット位置は土管 ?
		AND	#1111100000000000B	;
		CMP	#DK			;
;;;		BNE	MATO0IN0500		;  no: MATO0IN0500

DOKAN_CHK0800	EQU	$
		RTL
;
MATO0_BASE_YPS	EQU	$
		LDA	ENXPSL,X
		STA	<EWORK0
		LDA	#00010H
		STA	<EWORK4
		CLC
		ADC	ENYPSL,X
		STA	<EWORK2
		STA	<EWORK6

MATO0_B_YPS0100 EQU	$
		LDA	<EWORK0
		STA	R8
		LDA	<EWORK2
		STA	R0
		M_CHIPR M_BGUNIT_READ
		LDA	R7
		AND	#AL+MD
		BNE	MATO0_B_YPS0300

		DEC	<EWORK4			;１画面分やった ?
		BMI	MATO0_B_YPS0200		; yes: MATO0_B_YPS0200

		LDA	<EWORK2
		CLC
		ADC	#00010H
		STA	<EWORK2
		BRA	MATO0_B_YPS0100

MATO0_B_YPS0200 EQU	$
		LDA	<EWORK6
		STA	<EWORK2

MATO0_B_YPS0300 EQU	$
		LDX	<ENINDX

		RTS
;
;************************************************************************
;*		move	( まとくん )					*
;************************************************************************
;B		ENWRK0	上のやつの ROUTINE INDEX
;B		ENWRK1	下のやつの ROUTINE INDEX
;		ENWRK2	ROUTINE MODE INDEX
;		ENWRK4	たて倍率
;		ENWRK6	ごろごろで仕留めた数
;		ENWRK8	回転角
;		ENWRKA	セットＸ　ＰＯＳ．（０の時、再セットなし）（最下位ビットが１の時、土管から）
;		ENWRKC	セット規準Ｙ　ＰＯＳ．
;
;		ENCONT	ズーム方向フラグ
;
;		ENXMAX	発生フレーム
;
;		ENTIM0	ストップタイマー
;		ENTIM1
;		ENTIM2
;		ENTIM3	プレイヤーチェックロックタイマー
;
MATO0_SUB	EQU	$
MATO0_00	EQU	$
		WORD	MATO0_SUB00		;土管から出てくる（土管セット）
MATO0_01	EQU	$
		WORD	MATO0_SUB01		;土管から出た後（土管セット）
;
MATO0_10	EQU	$
		WORD	MATO0_SUB10		;プレイヤーが近づくのを待ってる（ノーマルセット）
MATO0_11	EQU	$
		WORD	MATO0_SUB11		;着地チェック（ノーマルセット）
;
MATO0_20	EQU	$
		WORD	MATO0_SUB20		;ごろごろ
MATO0_21	EQU	$
		WORD	MATO0_SUB21		;ごろごろから復帰
;
MATO0_30	EQU	$
		WORD	DUMMY_SUB		;着地チェック（ノーマルセット＜上＞）
MATO0_31	EQU	$
		WORD	DUMMY_SUB		;位置補正（ノーマルセット＜上＞）
;
MATO0_RMODE00	EQU	(MATO0_00-MATO0_00)/2
MATO0_RMODE01	EQU	(MATO0_01-MATO0_00)/2
MATO0_RMODE10	EQU	(MATO0_10-MATO0_00)/2
MATO0_RMODE11	EQU	(MATO0_11-MATO0_00)/2
MATO0_RMODE20	EQU	(MATO0_20-MATO0_00)/2
MATO0_RMODE21	EQU	(MATO0_21-MATO0_00)/2
MATO0_RMODE30	EQU	(MATO0_30-MATO0_00)/2
MATO0_RMODE31	EQU	(MATO0_31-MATO0_00)/2
;
MATO0MV		EQU	$			;-- mato0mv --
		STZ	ENMUKI,X
;
		JSL	>TROBJ_OAM_4x4

		LDA	ENMODE,X		;
		CMP	#EMOVE			;
		BEQ	MATO0MV0080		;
		CMP	#EEATM			;プレイヤーに食われてる ?
		BNE	MATO0MV0040		;  no: MATO0MV0040
		LDY	ENYUSN,X		;プレイヤーの口の中 ?
		BPL	MATO0MV0080		;  no: MATO0MV0080

		LDA	<ENWRK0,X
		INC	A
		BEQ	MATO0MV0040
		INC	A
		BEQ	MATO0MV0040

		LDA	#0FFFFH			;共通回転エリア使わない
		STA	ENTROB,X		;

MATO0MV0040	EQU	$
		JSR	MATO0_LINK_RMK

MATO0MV0080	EQU	$
		LDY	<ENWRK2,X		;ごろごろ ?
		CPY	#MATO0_RMODE20		;
		BEQ	MATO0MV0088		;
		CPY	#MATO0_RMODE21		;
		BNE	MATO0MV0090		;  no: MATO0MV0090

MATO0MV0088	EQU	$
		LDA	ENSTFG
		ORA	BIRIBIRI
		ORA	ITEMNO
		BNE	MATO0MV0500

		LDA	ENMODE,X
		CMP	#EMOVE
		BEQ	MATO0MV0091

MATO0MV0090	EQU	$
		JSL	>ENMDCK

MATO0MV0091	EQU	$
		JSR	MATO0_DISPCK

		LDY	ENYUSN,X
		BMI	MATO0MV0100

		JSR	MATO0_BGCHK
		JSR	MATO0_OBJ_CHK

MATO0MV0100	EQU	$
		TXY
		LDA	<ENWRK2,X
		ASL	A
		TAX
		JSR	(MATO0_SUB,X)

		LDY	ENYUSN,X
		BMI	MATO0MV0500

		JSR	MATO0_ROT_SET

MATO0MV0500	EQU	$

		RTL
;
MATO0_DISPCK	EQU	$
		JSL	>DISPCK2		;画面外 ?
		BCS	MATO0_BGCHK0800		; yes: MATO0_BGCHK0800

MATO0_DISPCK080 EQU	$
MATO0_BGCHK0000 EQU	$
MATO0_O_CHK0000 EQU	$

		RTS
;
MATO0_BGCHK	EQU	$
		LDY	<ENWRK2,X		;ごろごろ中 ?
		CPY	#MATO0_RMODE20		;
		BNE	MATO0_BGCHK0000		;  no: MATO0_BGCHK0000

		LDA	ENCBFG,X		;壁にあたった ?
		AND	#0000CH			;
		BEQ	MATO0_BGCHK0000		;  no: MATO0_BGCHK0000

		LDA	ECENTX,X
		STA	<EWORK0
		LDA	ECENTY,X
		STA	<EWORK2
		LDA	#FSMK0
		JSL	>FSMK0_SET2

		JSL	>TIMKN_3_SET

		M8
		LDA	#0FFH
		STA	ENRETN,X
		M16

MATO0_BGCHK0800 EQU	$			;＊DISPCKに関係有り
		JSR	MATO0_CLEAR

		PLA			;直接ＲＴＬ
		RTL
;
MATO0_KORO_XSPD EQU	$
		WORD	00200H,0FE00H
STEP_SOUND	EQU	$-1
		HEX	0C,0D,0E,0F,10,11,12
;
MATO0_OBJ_CHK	EQU	$
		LDA	ENMOD0,X		;オブジェチェックする ?
		AND	#0000011000000000B	;
		BEQ	MATO0_O_CHK0000		;  no: MATO0_O_CHK0000

		LDY	ECRSFG,X		;衝突した ?
		BPL	MATO0_O_CHK0500		;  no: MATO0_O_CHK0500

		LDA	ENTIM3,X		;プレイヤーチェックロック ?
		BNE	MATO0_O_CHK0500		; yes: MATO0_O_CHK0500

		JSL	>PLFLST

MATO0_O_CHK0500 EQU	$
		TXA
		STA	R1
		M_CHIP	MY_ENCROS2
		LDX	<ENINDX

MATO0_O_CHK1000 EQU	$
		LDY	<ENWRK2,X		;ごろごろ中 ?
		CPY	#MATO0_RMODE20		;
		BNE	MATO0_O_CHK1200		;  no: MATO0_O_CHK1200
		JMP	MATO0_O_CHK2200

MATO0_O_CHK1100 EQU	$
		LDX	#BANK MY_ENCROS2
		LDA	R15
		JSL	>CHIPON

MATO0_O_CHK1200 EQU	$
		LDX	<ENINDX
		LDY	R14			;敵にあたった ?
		DEY				;
		BMI	MATO0_O_CHK0000		;  no: MATO0_O_CHK0000

		LDA	ENMODE+1,Y		;ショットされてる敵にあたった ?
		CMP	#EMOVE			;
		BNE	MATO0_O_CHK1100		;
		LDA	ENSHOT+1,Y		;
		BEQ	MATO0_O_CHK1100		;  no: MATO0_O_CHK1100

		LDA	ENMOD1+1,Y		;アイテムかリフト ?
		AND	#0100000000000000B	;
		BNE	MATO0_O_CHK1100		; yes: MATO0_O_CHK1100

		LDA	ENMYNO+1,Y		;ごろごろのまとくんにあたった ?
		CMP	#MATO0			;
		BNE	MATO0_O_CHK1280		;  no: MATO0_O_CHK1280
		LDA	ENWRK2+1,Y		;
		CMP	#MATO0_RMODE20		;
		BNE	MATO0_O_CHK1280		;

		LDA	ENMOD0+1,Y		;チェックしていい ?
		AND	#0000001000000000B	;
		BEQ	MATO0_O_CHK1100		;  no: MATO0_O_CHK1100

		LDA	ENXMAX,X		;同じ発生グループ ?
		CMP	ENXMAX+1,Y		;
		BEQ	MATO0_O_CHK1100		; yes: MATO0_O_CHK1100

		LDX	<ENINDX
		JMP	MATO0_TO_FALL

MATO0_O_CHK1280 EQU	$
		LDA	ENGPOW+1,Y
		CMP	#00040H
		PHP
		STZ	<ENCONT,X		;回転方向セット
		LDA	ENXSPD+1,Y		;
		BPL	MATO0_O_CHK1300		;
						;
		LDA	#00002			;
		STA	<ENCONT,X		;
						;
MATO0_O_CHK1300 EQU	$
		INY
		TYX
		JSL	>SHOT_EN_KILL

		STZ	ENMOD1,X		;ＢＧチェック無しに
		PLP				;ＭＡＸ投げ ?
		BMI	MATO0_TO_GORO		; yes: MATO0_TO_GORO
		JMP	MATO0_TO_FALL

MATO0_TO_GORO	EQU	$
		LDA	#0000000000000011B	;ＢＧチェック有りに
		STA	ENMOD1,X
		LDY	<ENCONT,X
		LDA	!MATO0_KORO_XSPD,Y
		STA	ENXSPD,X

MATO0_O_CHK1500 EQU	$
		LDA	<ENWRK0,X		;上も下もいない ?
		INC	A			;
		BEQ	MATO0_O_CHK1600		; yes: MATO0_O_CHK1600

		JSL	>TROBJ_SR_4x4

MATO0_O_CHK1600 EQU	$
		LDY	#MATO0_RMODE20
		STY	<ENWRK2,X
		LDA	#00067H			;［Ｓ］
		JSL	>SOUND_3_ON
		LDA	#0FC00H
		STA	ENYSPD,X
		LDA	#00060H
		STA	ENGPOW,X
		LDA	#00001
		STA	ENSHOT,X

		JSR	MATO0_LINK_RMK

MATO0_O_CHK2000 EQU	$

		RTS

MATO0_O_CHK2100 EQU	$
		LDX	#BANK MY_ENCROS2
		LDA	R15
		JSL	>CHIPON

MATO0_O_CHK2200 EQU	$
		LDX	<ENINDX
		LDY	R14			;敵にあたった ?
		DEY				;
		BMI	MATO0_O_CHK2000		;  no: MATO0_O_CHK2000

		INY
		LDA	ENMOD1,Y		;アイテムかリフト ?
		AND	#0100000000000000B	;
		BNE	MATO0_O_CHK2100		; yes: MATO0_O_CHK2100

		LDA	ENMODE,Y
		CMP	#EMOVE
		BNE	MATO0_O_CHK2100

		LDA	ENMYNO,Y
		CMP	#MATO0
		BNE	MATO0_O_CHK2300

		LDA	ENMOD0,Y		;チェックしていい ?
		AND	#0000001000000000B	;
		BEQ	MATO0_O_CHK2280		;  no: MATO0_O_CHK2280

		LDA	ENXMAX,X		;同じ発生グループ ?
		CMP	ENXMAX,Y		;
		BEQ	MATO0_O_CHK2100		; yes: MATO0_O_CHK2100

		LDA	ENWRK2,Y
		CMP	#MATO0_RMODE20
		PHP
		TYX
		JSR	MATO0_TO_FALL
		LDX	<ENINDX
		PLP
		BEQ	MATO0_TO_FALL

MATO0_O_CHK2280 EQU	$

		RTS

MATO0_O_CHK2300 EQU	$
		LDA	ENMOD1,Y		;敵か ?
		AND	#0110000000000000B	;
		BNE	MATO0_O_CHK2100		;  no: MATO0_O_CHK2100

		LDA	ENMOD0,Y		;投げた敵にあたる ?
		AND	#0000000000100000B	;
		BNE	MATO0_O_CHK2100		;  no: MATO0_O_CHK2100

MATO0_O_CHK2400 EQU	$
		INC	ENWRK6,X
		LDA	ENWRK6,X		;１ｕｐする ?
		CMP	#00008			;
		BCC	MATO0_O_CHK2500		;  no: MATO0_O_CHK2500

		LDA	ENMOD2,Y		;１ｕｐする
		ORA	#0000011000000000B	;
		STA	ENMOD2,Y		;

MATO0_O_CHK2500 EQU	$
		JSR	ENMY_PUCHI

		LDX	<ENINDX
		LDA	ENWRK6,X		;サウンドをたてる ?
		CMP	#00008			;
		BCS	MATO0_O_CHK2100		;  no: MATO0_O_CHK2100

		TAY
		LDA	!STEP_SOUND,Y		;［Ｓ］
		AND	#000FFH
		JSL	>SOUND_3_ON
		JMP	MATO0_O_CHK2100
;
;
MATO0_TO_FALL	EQU	$
		LDA	#0110100001100010B	;オブジェチェックなし
		STA	ENMOD0,X		;
		STZ	ENMOD1,X		;ＢＧチェック無しに
		LDA	<ENWRK0,X		;上も下もいない ?
		INC	A			;
		BEQ	MATO0_T_F0500		; yes: MATO0_T_F0500

		JSL	>TROBJ_SR_4x4

MATO0_T_F0500	EQU	$
		LDY	#MATO0_RMODE20
		STY	<ENWRK2,X
		LDA	#0FC00H
		STA	ENYSPD,X
		LDA	#00060H
		STA	ENGPOW,X
		M8
		LDA	#0FFH
		STA	ENRETN,X
		M16

		JSR	MATO0_LINK_RMK

		RTS
;
MATO0_CLEAR	EQU	$
		LDA	ENWRKA,X		;再セットする ?
		BEQ	MATO0_CLEAR020		;  no: MATO0_CLEAR020

		BIT	#00001			;土管から出てくる ?
		BNE	MATO0_CLEAR030		; yes: MATO0_CLEAR030

		JSR	MATO0_LINK_RMK

MATO0_CLEAR020	EQU	$
		LDA	<ENWRK0,X		;
		INC	A			;
		BEQ	MATO0_CLEAR028		;

		LDA	#0FFFFH
		STA	ENTROB,X

MATO0_CLEAR028	EQU	$
		PLA			;直接ＲＴＬ
		PLA			;直接ＲＴＬ
		JMP	>ENCLEAR

MATO0_CLEAR030	EQU	$
		SEC				;セット位置は画面外 ?
		SBC	ESCCH1			;
		CLC				;
		ADC	#00040H			;
		CMP	#00100H+040H*2		;
		BCS	MATO0_CLEAR020		;
						;
		LDA	ENWRKC,X		;
		SEC				;
		SBC	ESCCV1			;
		CLC				;
		ADC	#00040H			;
		CMP	#00100H+040H*2		;
		BCS	MATO0_CLEAR020		; yes: MATO0_CLEAR020

		LDA	ENWRKA,X
		STA	ENXPSL,X
		LDA	ENWRKC,X
		CLC
		ADC	#00020H
		STA	ENYPSL,X
		STZ	ENGPOW,X
		LDA	ENCLOR,X		;ＢＧ１の後ろに
		EOR	#00030H			;
		STA	ENCLOR,X		;

		STZ	<ENWRK2,X

MATO0_CLEAR040	EQU	$
		STZ	ENXSPD,X
		STZ	ENYSPD,X
		LDA	#00100H			;初期倍率セット
		STA	<ENWRK4,X		;
		STZ	ENWRK8,X		;回転角クリア
		STZ	ENMOD1,X		;ＢＧチェック無しに

		RTS
;
MATO0_LINK_RMK	EQU	$
		LDY	<ENWRK0,X		;上のやついる ?
		BMI	MATO0_L_RMK0600		;  no: MATO0_L_RMK0600

		STY	<EWORK0

		LDY	<ENWRK1,X		;下のやついる ?
		BMI	MATO0_L_RMK0500		;  no: MATO0_L_RMK0500

		M8
		LDX	<EWORK0
		TXA
		STA	ENWRK0,Y
		STY	<ENWRK1,X
		M16
		LDA	#00060H
		STA	ENGPOW,X
		LDA	#MATO0_RMODE30
		STA	<ENWRK2,X

		LDX	<ENINDX
		BRA	MATO0_L_RMK0680

MATO0_L_RMK0500 EQU	$
		M8
		TYA		;[ LDA	#0FFH ]
		LDY	<EWORK0
		STA	ENWRK1,Y
		M16
		LDA	#00060H
		STA	ENGPOW,Y
		LDA	<ENWRK4,X		;たて倍率セット
		STA	ENWRK4,Y
		LDA	#MATO0_RMODE11
		STA	ENWRK2,Y
		BRA	MATO0_L_RMK0690

MATO0_L_RMK0600 EQU	$
		LDY	<ENWRK1,X		;下のやついる ?
		BMI	MATO0_L_RMK0700		;  no: MATO0_L_RMK0700

		M8
		LDA	#0FFH
		STA	ENWRK0,Y
		M16

MATO0_L_RMK0680 EQU	$
		LDA	#00080H
		STA	ENTIM0,Y

MATO0_L_RMK0690 EQU	$
		M8
		LDA	#0FFH
		STA	ENRETN,X
		M16

		LDA	#0FFFEH
		BRA	MATO0_L_RMK0800

MATO0_L_RMK0700 EQU	$
		LDA	#0FFFFH

MATO0_L_RMK0800 EQU	$
		STA	<ENWRK0,X

MATO0_R_SET0000 EQU	$

		RTS
;
;MATO0_TO_MOVE	EQU	$
;		PHB
;		PHK
;		PLB
;;
;		LDA	PLCMKI
;		STA	<ENCONT,X
;		LDA	#00010H
;		STA	ENTIM3,X
;		JSR	MATO0_TO_GORO
;
;		PLB
;		RTL
;
MATO0_ROT_SET	EQU	$
		LDA	#BANK CIPCHD3+6060H+000 ;chara data bank set
		STA	R13

		LDA	#CIPCHD3+6060H+000	;chara data address set
		STA	R12

		LDY	<ENWRK2,X		;ごろごろ中 ?
		CPY	#MATO0_RMODE20
		BNE	MATO0_R_SET0080
		JMP	MATO0_R_SET1000		; yes: MATO0_R_SET1000

MATO0_R_SET0080 EQU	$
		LDY	<ENWRK1,X		;一番下 ?
		BPL	MATO0_R_SET0000		;  no: MATO0_R_SET0000

		LDA	<ENWRK4,X		;(R11) <- 縦倍率セット
		STA	R11			;
		PHA

		CMP	#00100H			;(R6) <- 横倍率セット
		BPL	MATO0_R_SET0100

		ASL	A
		EOR	#0FFFFH
		CLC
		ADC	#00300H+1
		BRA	MATO0_R_SET0200

MATO0_R_SET0100 EQU	$
		EOR	#0FFFFH
		CLC
		ADC	#001C0H+1

MATO0_R_SET0200 EQU	$
		STA	R6			;

		LDA	#00010H			;(R8) <- 中心Ｘ　ＰＯＳ．
		STA	R8			;
		ASL	A
		STA	R9			;(R9) <- 中心Ｙ　ＰＯＳ．

		LDY	ENTROB,X
		TYX
		LDA	>TROBJ_PLOT_X,X		;回転エリアＸ　ＰＯＳ．セット
		STA	R3			;
		LDA	>TROBJ_PLOT_Y,X		;回転エリアＹ　ＰＯＳ．セット
		STA	R2			;

		M_CHIP	C_32_ZOOM_XY

		INC	OBM7WF			;mode 7 OBJ chara DMA "ON"

		PLA
		STA	R6
		LDA	#0000AH*2
		STA	R0
		M_CHIP	MULTIPLY
		LDX	<ENINDX

		LDY	<ENWRK0,X		;上のやついる ?
		BMI	MATO0_R_SET0800		;  no: MATO0_R_SET0800

		LDA	ENYPSL,X
		SEC
		SBC	R0
		STA	<EWORK0

MATO0_R_SET0280 EQU	$
		LDA	ENWRK2,Y		;落下中 ?
		CMP	#MATO0_RMODE30		;
		BNE	MATO0_R_SET0300		;  no: MATO0_R_SET0300

		LDA	<EWORK0			;くっついた ?
		CMP	ENYPSL,Y		;
		BPL	MATO0_R_SET0800		;  no: MATO0_R_SET0800

		LDA	#00000
		STA	ENYSPD,Y
		STA	ENGPOW,Y
		LDA	#MATO0_RMODE31
		STA	ENWRK2,Y

MATO0_R_SET0300 EQU	$
		LDA	<EWORK0
		STA	ENYPSL,Y
		SEC
		SBC	R0
		STA	<EWORK0

		LDA	ENWRK0,Y		;上の上のやついる ?
		TAY				;
		BPL	MATO0_R_SET0280		; yes: MATO0_R_SET0280

MATO0_R_SET0800 EQU	$

		RTS

MATO0_R_SET1000 EQU	$
		LDA	ENWRK8,X		;(R5) <- 回転角セット
		AND	#001FEH			;
		LSR	A			;
		STA	R5			;

		LDA	#00100H			;(R6) <- 倍率セット
		STA	R6			;

		LDY	ENTROB,X
		TYX
		LDA	>TROBJ_PLOT_X,X		;(R3) <- ビットマップ座標＿Ｘセット
		STA	R3			;
		LDA	>TROBJ_PLOT_Y,X		;(R2) <- ビットマップ座標＿Ｙセット
		STA	R2			;
;
;-------------- OBJ mode 7 set ----------------------------------
		M_CHIP	C_32_ROTZOM

		LDX	<ENINDX

		INC	OBM7WF		;mode 7 OBJ chara DMA "ON"

		RTS
;
MATO0_SUB00	EQU	$
		TYX

		LDY	ENGPOW,X		;すでに土管から出ようとしてる ?
		BEQ	MATO0_SUB00500		;  no: MATO0_SUB00500

		LDY	ENYSPD+1,X		;上昇中 ?
		BMI	MATO0_SUB00800		; yes: MATO0_SUB00800

		LDA	ENWRKC,X		;土管から出た ?
		CMP	ENYPSL,X		;
		BPL	MATO0_SUB00800		;  no: MATO0_SUB00800

		STA	ENYPSL,X
		STZ	ENYSPD,X
		STZ	ENGPOW,X
		LDA	ENCLOR,X
		EOR	#00030H
		STA	ENCLOR,X
		INC	<ENWRK2,X

		RTS

MATO0_SUB00500	EQU	$
		LDA	EPWIDX,X		;プレイヤーが近くに来た ?
		CLC				;
		ADC	#00050H			;
		CMP	#000A0H			;
		BCS	MATO0_SUB00800		;  no: MATO0_SUB00800

		LDA	#00060H
		STA	ENGPOW,X
		LDA	#0FA00H
		STA	ENYSPD,X

MATO0_SUB00800	EQU	$

		RTS
;
MATO0_S01_ZADD	EQU	$
		WORD	0FFFCH,00008H
MATO0_S01_ZCMP	EQU	$
		WORD	000E0H,00140H
;
MATO0_SUB01	EQU	$
		TYX

		LDY	<ENCONT,X
		LDA	<ENWRK4,X		;倍率計算
		CLC				;
		ADC	!MATO0_S01_ZADD,Y	;
		CMP	#000E0H			;
		BMI	MATO0_SUB01600		;
		CMP	#00140H			;
		BMI	MATO0_SUB01700		;
						;
MATO0_SUB01600	EQU	$			;
		LDA	<ENCONT,X		;
		EOR	#00002			;
		STA	<ENCONT,X		;
		LDA	!MATO0_S01_ZCMP,Y	;
						;
MATO0_SUB01700	EQU	$			;
		STA	<ENWRK4,X		;

		RTS
;
MATO0_SUB10	EQU	$
		TYX

		LDY	ENDSXL+1,X		;画面内にはいってきた ?
		BNE	MATO0_SUB10800		;  no: MATO0_SUB10800

		LDA	ESCCV1			;スタートＹ　ＰＯＳ．セット
		SEC				;
		SBC	#00020H			;
		STA	ENYPSL,X		;

		LDA	#00060H
		STA	ENGPOW,X
		LDA	#00005H
		STA	ENYUSN,X
		STZ	ENMOD1,X		;ＢＧチェック無しに
		INC	<ENWRK2,X

MATO0_SUB10800	EQU	$

		RTS
;
MATO0_SUB11	EQU	$
		TYX

		LDA	ENGPOW,X		;地面に着いてる ?
		BEQ	MATO0_SUB11200		; yes: MATO0_SUB11200

		LDA	ENWRKC,X
		CMP	ENYPSL,X
		BPL	MATO0_SUB11100

		STA	ENYPSL,X

		STZ	ENYSPD,X
		STZ	ENGPOW,X

		LDA	ENTIM0,X
		BNE	MATO0_SUB11100

		LDA	#00040H
		STA	ENTIM0,X

MATO0_SUB11100	EQU	$

		RTS

MATO0_SUB11200	EQU	$
;		TXY
		JSR	MATO0_SUB01

		JSR	MATO0_BASE_YPS		;床がある ?
		LDA	<EWORK2			;
		SEC				;
		SBC	#00010H			;
		CMP	ENWRKC,X		;
		BEQ	MATO0_SUB11300		; yes: MATO0_SUB11300

		STA	ENWRKC,X
		LDA	#00060H
		STA	ENGPOW,X
		RTS

MATO0_SUB11300	EQU	$
		LDA	ENWRKA,X		;単体セット ?
		BEQ	MATO0_SUB11100		; yes: MATO0_SUB11100

		LDY	<ENWRK0,X		;上のやつがいる ?
		BMI	MATO0_SUB11500		;  no: MATO0_SUB11500

		LDA	ENWRK0,Y		;上の上のやつがいる ?
		TAY				;
		BPL	MATO0_SUB11100		; yes: MATO0_SUB11100

MATO0_SUB11500	EQU	$
		LDA	ENTIM0,X		;上のやつをセットする ?
		BNE	MATO0_SUB11800		;  no: MATO0_SUB11800

		LDA	#MATO0
		JSL	>ENINSR
		BCC	MATO0_SUB11800

		LDA	ENWRKA,X
		STA	ENXPSL,Y
		LDA	ESCCV1
		SEC
		SBC	#00020H
		STA	ENYPSL,Y
		LDA	#00060H
		STA	ENGPOW,Y
		LDA	ENTROB,X
		STA	ENTROB,Y
		LDA	ENWRKA,X
		STA	ENWRKA,Y
		LDA	ENWRKC,X
		STA	ENWRKC,Y
		LDA	#MATO0_RMODE30
		STA	ENWRK2,Y

		LDA	ENXMAX,X		;発生フレーム伝承
		STA	ENXMAX,Y		;

		M8
		LDA	ENRETN,X
		STA	ENRETN,Y
		LDA	#0FFH			;上のやつのインデックスクリア
		STA	ENWRK0,Y		;

		LDA	ENWRK0,X		;上のやついる ?
		BMI	MATO0_SUB11700		;  no: MATO0_SUB11700

		TAX

MATO0_SUB11700	EQU	$
		TXA				;下のやつのインデックスセット
		STA	ENWRK1,Y		;
		TYA				;上のやつのインデックスセット
		STA	ENWRK0,X		;

		LDX	<ENINDX
		M16

		LDA	#00040H
		STA	ENTIM0,X

MATO0_SUB11800	EQU	$

		RTS
;
MATO0_SUB20	EQU	$
		TYX

		LDA	ENXSPD,X		;真上に吐かれた ?
		BNE	MATO0_SUB20800		;  no: MATO0_SUB20800

		INC	<ENWRK2,X

		RTS

MATO0_SUB20800	EQU	$
		JMP	MBALL_ROTANG
;
MATO0_SUB21	EQU	$
		TYX

		LDA	ENCBFG,X		;着地した ?
		AND	#00001			;
		BEQ	MATO0_SUB21800		;  no: MATO0_SUB21800

		LDA	ENMOD1,X		;ＢＧチェックなし
		AND	#0FFE0H			;
		STA	ENMOD1,X		;
		STZ	ENWRKA,X
		STZ	ENYSPD,X
		STZ	ENGPOW,X
		STZ	ENSHOT,X
		LDY	#MATO0_RMODE11
		STY	<ENWRK2,X

MATO0_SUB21800	EQU	$

		RTS
;
MATO0_DEATH_CHK EQU	$
		LDA	ENMYNO,X
		CMP	#MATO0

		RTL
;
;************************************************************************
;*		initial ( move ball )					*
;************************************************************************
MBALLIN		EQU	$			;-- mballin --
		JSL	>TROBJ_SR_4x4_CL

		LDY	MAPOINT			;1-1 ?
		BNE	MBALLIN0080		;  no: MBALLIN0080

		LDY	CORSNO			;地下コース ?
		CPY	#001			;
		BEQ	MBALLIN0100		; yes: MBALLIN0100
		BRA	MBALLIN0300

MBALLIN0080	EQU	$
		CPY	#028H			;4-5 ?
		BNE	MBALLIN0300		;  no: MBALLIN0300

		LDY	MBALLLOCK		;１個目 ?
		BEQ	MBALLIN0100		; yes: MBALLIN0100

		JMP	>ENCLEAR

MBALLIN0100	EQU	$
		INC	MBALLLOCK
		LDA	#0010000000000001B		;範囲クリアなし
		STA	ENMOD2,X
		LDA	ENCLOR,X		;アトリビュート４に
		AND	#0FFF0H
		ORA	#00008H
		STA	ENCLOR,X

MBALLIN0300	EQU	$
		JSR	MBALL_ROT_SET

		LDA	#0000CH
		STA	EWIDEX,X
		STA	EWIDEY,X

		RTL
;
;************************************************************************
;*		move	( move ball )					*
;************************************************************************
;B		ENWRK0	プレイヤーＯＮフラグ
;B		ENWRK1	プレイヤー横あたりフラグ
;		ENWRK2	プレイヤー補正中のＸ　ＰＯＳ．の小数値
;		ENWRK4	サウンドセットカウンター
;		ENWRK6	進行方向キーチェックデータ
;		ENWRK8	回転角
;		ENWRKA	プレイヤーパターンチェンジカウンター
;		ENWRKC	ＢＧチェック用インデックス
;
;		ENCONT	ENYSPD セーブ
;
;		ENTIM0
;		ENTIM1	重力無効タイマー
;		ENTIM2	USE
;		ENTIM3
;
MBALLMV		EQU	$			;-- mballmv --
		JSL	>DISPCK2		;画面外 ?
		BCC	MBALLMV0100		;  no: MBALLMV0100

		JSR	MBALL_BGDTMK
		JSR	MBALL_BGCHK		;ＢＧチェック
		JSR	MBALL_SLOPE		;坂チェック
		JSR	MBALL_ROTANG		;回転角計算

		RTL

MBALLMV0100	EQU	$
		JSL	>TROBJ_OAM_4x4

		JSL	>ENMDCK

		STZ	ENMUKI,X

		JSR	MBALL_BGDTMK

		JSL	>MBALL_ENCHK		;敵チェック

		JSR	MBALL_PLCHK		;プレイヤーチェック

		JSR	MBALL_BGCHK		;ＢＧチェック

		JSR	MBALL_SLOPE		;坂チェック

		JSR	MBALL_ROTANG		;回転角計算

		JSR	MBALL_ROT_SET		;ビットマップセット

		JSR	MBALL_SOUND		;ごろごろ音セット

		STZ	ENGPOW,X
		LDA	ENTIM1,X		;重力無効中 ?
		BNE	MBALLMV0500		; yes: MBALLMV0500

		LDA	#00040H
		STA	ENGPOW,X

MBALLMV0500	EQU	$
		JSR	MBALL_EAT_FLAG

		LDA	#0100000000001110B	;ＢＧチェックサイズ変更
		STA	ENMOD1,X		;
		LDA	ENSLOP,X		;	;坂か ?
		AND	#000FFH			;	;
		TAY				;	;
		BEQ	MBALLMV0800		;	;  no: MBALLMV0800
		BPL	MBALLMV0600		;
						;
		ORA	#0FF00H			;
						;
MBALLMV0600	EQU	$			;
		EOR	ENXSPD,X		;
		BMI	MBALLMV0800		;
						;
		LDA	#0100000000010000B	;
		STA	ENMOD1,X		;

MBALLMV0800	EQU	$

		RTL
;
;
MBALL_BGCHK_DT	EQU	$
		WORD	0FFFAH,00016H
MBALL_BGMAKE_DT EQU	$
		WORD	00008H,00004H
MBALL_BGIDX	EQU	$
		WORD	00000H,00008H
;
MBALL_BGDTMK	EQU	$
		LDY	#000
		LDA	ENXSPD,X
		BMI	MBALL_BGDTMK010

		INY
		INY

MBALL_BGDTMK010 EQU	$
		LDA	!MBALL_BGIDX,Y
		STA	<EWORK2
		LDA	!MBALL_BGMAKE_DT,Y
		STA	<EWORK0
		AND	ENCBFG,X
		BNE	MBALL_BGDTMK080

		LDA	!MBALL_BGCHK_DT,Y
		CLC
		ADC	ENXPSL,X
		STA	R8
		LDA	ENYPSL,X
		SEC
		SBC	#00004
		STA	R0
		M_CHIPR M_BGUNIT_READ
		LDX	<ENINDX
		LDY	R5			;ＢＧにあたった ?
		BEQ	MBALL_BGDTMK080		;  no: MBALL_BGDTMK080

		LDA	ENCBFG,X		;チェックデータセット
		ORA	<EWORK0			;
		STA	ENCBFG,X		;

		I16
		LDA	ENWRKC,X
		CLC
		ADC	<EWORK2
		TAX

		LDA	CCWORK0
		STA	>ENBGCK_X_L,X
		LDA	CCWORK1
		STA	>ENBGCK_Y_L,X
		LDA	R7
		STA	>ENBGCK_TYPE_L,X
		LDA	R6
		STA	>ENBGCK_UNIT_L,X
		I8
		LDX	<ENINDX

MBALL_BGDTMK080 EQU	$

		RTS
;
MBALL_REF_XSPD	EQU	$
		WORD	0FF00H,00100H
;
;＊＊＊＊＊＊＊＊＜　プレイヤーチェック　＞＊＊＊＊＊＊＊＊＊＊
MBALL_PLCHK	EQU	$
YGORO_PLCHK	EQU	$
		LDA	PLFLSH			;プレイヤーダメージ中 ?
		BNE	MBALL_FARAWAY		; yes: MBALL_FARAWAY

		LDY	PLEATFG			;プレイヤー食われてる ?
		BNE	MBALL_FARAWAY		; yes: MBALL_FARAWAY

		LDA	EWIDEX,X		;プレイヤーと衝突した ?
		CLC				;
		ADC	PWIDEX			;
		ASL	A			;
		STA	<EWORK2			;
		LSR	A			;
		CLC				;
		ADC	EPWIDX,X		;
		CMP	<EWORK2			;
		BCS	MBALL_FARAWAY		;  no: MBALL_FARAWAY

		LDA	#00000
		LDY	<ENWRK1,X		;横あたってる ?
		BEQ	MBALL_PLCHK040		;  no: MBALL_PLCHK040

		LDA	#00008

MBALL_PLCHK040	EQU	$
		CLC
		ADC	EWIDEY,X		;プレイヤーと衝突した ?
		CLC				;
		ADC	PWIDEY			;

MBALL_PLCHK060	EQU	$
		ASL	A			;
		STA	<EWORK2			;
		LSR	A			;
		CLC				;
		ADC	EPWIDY,X		;
		CMP	<EWORK2			;
		BCC	MBALL_PLCHK200		; yes: MBALL_PLCHK200

MBALL_PLCHK080	EQU	$
MBALL_FARAWAY	EQU	$
		STZ	<ENWRK0,X		;プレイヤー接触フラグクリア

		CPX	PONLFFG
		BNE	MBALL_PLCHK100

		STZ	PONLFFG

MBALL_PLCHK100	EQU	$
		LDA	ENMYNO,X
		CMP	#MBALL
		BEQ	MBALL_PLCHK170

		CPX	YGOROFLG
		BNE	MBALL_PLCHK180

		STZ	YGOROFLG
		RTS

MBALL_PLCHK170	EQU	$
		CPX	MBALLFLG
		BNE	MBALL_PLCHK180

		STZ	MBALLFLG

MBALL_PLCHK180	EQU	$

		RTS

MBALL_PLCHK200	EQU	$
		LDA	EPWIDX,X		;チェックデータ作成   EWORK6 <- 横方向食い込み量 EWORK8 <- 縦方向食い込み量
		BPL	MBALL_PLCHK210		;	;プレイヤーは右にいる ?
						;	;  no: MBALL_PLCHK210
		CLC				;
		ADC	PWIDEX			;
		CLC				;
		ADC	EWIDEX,X		;
		BRA	MBALL_PLCHK220		;
						;
MBALL_PLCHK210	EQU	$			;
		SEC				;
		SBC	PWIDEX			;
		SEC				;
		SBC	EWIDEX,X		;
						;
MBALL_PLCHK220	EQU	$			;
		STA	<EWORK6			;
						;
		LDA	EPWIDY,X		;	;プレイヤーは上にいる ?
		BPL	MBALL_PLCHK230		;	; yes: MBALL_PLCHK230
						;
		CLC				;
		ADC	PWIDEY			;
		CLC				;
		ADC	EWIDEY,X		;
		BRA	MBALL_PLCHK240		;
						;
MBALL_PLCHK230	EQU	$			;
		SEC				;
		SBC	PWIDEY			;
		SEC				;
		SBC	EWIDEY,X		;
						;
MBALL_PLCHK240	EQU	$			;
		STA	<EWORK8			;

		LDA	PLXPSL			;CCWORK1F <- 補正前Ｘ　ＰＯＳ．
		STA	CCWORK1F		;

		LDY	<ENWRK0,X		;プレイヤー乗ってた ?
		BEQ	MBALL_PLCHK300		;  no: MBALL_PLCHK300

		JSR	MBALL_PLCHK1
		BRA	MBALL_PLCHK500

MBALL_PLCHK300	EQU	$
		LDY	<ENWRK1,X		;プレイヤー横からあたってる ?
		BEQ	MBALL_PLCHK400		;  no: MBALL_PLCHK400

		JSR	MBALL_PLCHK2
		BRA	MBALL_PLCHK500

MBALL_PLCHK400	EQU	$
		JSR	MBALL_PLCHK0

MBALL_PLCHK500	EQU	$
MBALL_PLCHK800	EQU	$

		RTS
;
MBALL_PLXMAX	EQU	$
 IF PAL	   ;*** PAL 対応 [1995/7/20] ******************
		WORD	0FB76H,0048AH
 ELSE	   ;*** JPN/NES 対応 [1995/6/30] **************
		WORD	0FC00H,00400H
 ENDIF	   ;*** PAL 対応 [1995/7/20] ******************
;
;チェックデータ	  EWORK6 <- 横方向食い込み量 EWORK8 <- 縦方向食い込み量
;
MBALL_PLCHK0	EQU	$
		LDA	<EWORK8			;上からあたってきた ?
		BMI	MBALL_PLCHK0020		; yes: MBALL_PLCHK0020

		CMP	#00008			;横あたりだった ?
		BCS	MBALL_PLCHK0020		; yes: MBALL_PLCHK0020

		LDA	ENCBFG,X		;地面に着いてる ?
		AND	#00001			;
		BNE	MBALL_PLCHK0040		; yes: MBALL_PLCHK0040
		JMP	MBALL_PLCHK0200		;

MBALL_PLCHK0020 EQU	$
		CMP	#0FFF6H			;プレイヤーに踏まれた ?
		BCS	MBALL_PLCHK0100		; yes: MBALL_PLCHK0100

MBALL_PLCHK0040 EQU	$
		JMP	MBALL_PLCHK0300		;  no: MBALL_PLCHK0300
;
;プレイヤーに乗られたとき
MBALL_PLCHK0100 EQU	$
		LDA	ENMYNO,X		;???????????????
		CMP	#MBALL			;
		BEQ	MBALL_PLCHK0110		;
						;
		CPX	YGOROFLG		;
		BNE	MBALL_PLCHK0120		;
						;
		STZ	YGOROFLG		;
		BRA	MBALL_PLCHK0120		;
						;
MBALL_PLCHK0110 EQU	$			;
		CPX	MBALLFLG		;
		BNE	MBALL_PLCHK0120		;
						;
		STZ	MBALLFLG		;

MBALL_PLCHK0120 EQU	$
		LDY	PLYSPD+1		;プレイヤー上昇中 ?
		BMI	MBALL_PLCHK0125		; yes: MBALL_PLCHK0125

		LDA	PLBGCR			;プレイヤー頭打ってる ?
		AND	#0000000000011000B	;
		BNE	MBALL_PLCHK0125		; yes: MBALL_PLCHK0125

		LDY	PONLFFG			;プレイヤー誰にも乗ってない ?
		BEQ	MBALL_PLCHK0128		; yes: MBALL_PLCHK0128

MBALL_PLCHK0125 EQU	$
		RTS

MBALL_PLCHK0128 EQU	$
		JSR	MBALL_PL_REVISE

		STX	PONLFFG			;プレイヤーＯＮフラグセット
		STZ	PLYSPD
		INC	ONLFFG
		INC	<ENWRK0,X		;プレイヤーＯＮフラグセット

		LDA	PLXPSL-1
		AND	#0FF00H
		STA	<ENWRK2,X		;プレイヤー補正中のＸ　ＰＯＳ．の小数値クリア

		LDA	EPWIDX,X		;プレイヤーに乗ったときの玉乗りスピードセット
		STA	R6			;
		LDA	#0FFE0H			;
		STA	R0			;
		M_CHIP	MULTIPLY		;
		LDX	<ENINDX			;
		LDA	R0			;
		CLC				;
		ADC	ENXSPD,X		;
		STA	ENXSPD,X		;

		LDY	#000			;プレイヤー玉から滑り落ちスピードセット
		LDA	PLXSPD			;
		CLC				;
		ADC	ENXSPD,X		;
		STA	PLXSPD			;
		CLC				;	;プレイヤーのスピード速すぎる ?
		ADC	#00400H			;	;
		CMP	#00800H			;	;
		BCC	MBALL_PLCHK0140		;	;  no: MBALL_PLCHK0140
		BMI	MBALL_PLCHK0130		;
						;
		INY				;
		INY				;
						;
MBALL_PLCHK0130 EQU	$			;
		LDA	!MBALL_PLXMAX,Y		;
		STA	PLXSPD			;
						;
MBALL_PLCHK0140 EQU	$			;
		LDA	PLXSPD			;
		STA	PLMVSP			;

MBALL_PLCHK0180 EQU	$

		RTS
;
;プレイヤーを踏んだとき
MBALL_PLCHK0200 EQU	$
		LDA	PLBGCR			;プレイヤー地面に着いてる ?
		AND	#0000000000000111B	;
		BNE	MBALL_PLCHK0250		; yes: MBALL_PLCHK0250

		LDA	PLYPSL
		CLC
		ADC	#00002
		STA	PLYPSL

		LDA	#P006
		STA	PLJUMP
		LDA	ENYSPD,X
		STA	PLYSPD

MBALL_PLCHK0250 EQU	$
		LDA	PLBGCR			;プレイヤー横ＢＧあたってる ?
		AND	#0000000111100000B	;
		BEQ	MBALL_PLCHK0260		;  no: MBALL_PLCHK0260

		LDA	PLXSPD			;プレイヤー止まってる ?
		BEQ	MBALL_PLCHK0270		; yes: MBALL_PLCHK0270

		LDA	PLBGCR
		AND	#0000000110000000B	;玉の進行方向側があたってる ?
		DEC	A			;
		EOR	PLXSPD			;
		BMI	MBALL_PLCHK0270		; yes: MBALL_PLCHK0270

MBALL_PLCHK0260 EQU	$
		LDA	ENXSPD,X
		ASL	A
		STA	PLXSPD
		STA	PLMVSP

MBALL_PLCHK0270 EQU	$

		RTS
;
;プレイヤー横からあたったとき
MBALL_PLCHK0300 EQU	$
		LDA	ENMYNO,X
		CMP	#MBALL
		BEQ	MBALL_PLCHK0400

		CPX	YGOROFLG
		BEQ	MBALL_PLCHK0520
		LDY	YGOROFLG		;プレイヤーほかの玉にくっついてる ?
		BNE	MBALL_PLCHK0410		; yes: MBALL_PLCHK0410

		LDA	ENXSPD,X		;動いてる ?
		BEQ	MBALL_PLCHK0310		;  no: MBALL_PLCHK0310
		EOR	PLXSPD			;プレイヤーと同じ方向に動いてる ?
		BPL	MBALL_PLCHK0500		; yes: MBALL_PLCHK0500

		LDA	ENXSPD,X		;スピード出過ぎてる ?

MBALL_PLCHK0310 EQU	$
		CLC				;
		ADC	#00080H			;
		CMP	#00100H			;
		BCC	MBALL_PLCHK0500		;  no: MBALL_PLCHK0500

		LDA	ENXSPD,X
		CMP	#08000H
		ROR	A
		STA	<EWORK2
		CLC
		ADC	ENXSPD,X
		STA	PLXSPD
		STA	PLMVSP
		LDA	<EWORK2
		STA	ENXSPD,X

		LDA	#P006
		STA	PLJUMP
		LDA	#001+8000H
		STA	PLSPJP
		LDA	PLBGCR			;プレイヤー地面に着いてる ?
		AND	#0000000000000111B	;
		BEQ	MBALL_PLCHK0380		;  no: MBALL_PLCHK0380

 IF PAL	   ;*** PAL 対応 [1995/7/20] ******************
		LDA	#0FB76H
		STA	PLYSPD
 ELSE	   ;*** JPN/NES 対応 [1995/6/30] **************
		LDA	#0FC00H
		STA	PLYSPD
 ENDIF	   ;*** PAL 対応 [1995/7/20] ******************

MBALL_PLCHK0380 EQU	$

		RTS

MBALL_PLCHK0400 EQU	$
		LDY	MBALLFLG		;プレイヤーほかの玉にくっついてる ?
		BEQ	MBALL_PLCHK0510		;  no: MBALL_PLCHK0510
		CPX	MBALLFLG
		BEQ	MBALL_PLCHK0520
;
;他の玉とプレイヤーを挟んだ
MBALL_PLCHK0410 EQU	$
		LDA	ENXSPD,X
		PHA
		LDA	ENXSPD,Y
		STA	ENXSPD,X
		PLA
		STA	ENXSPD,Y

		LDA	ENXPSL,X
		SEC
		SBC	<EWORK6
		STA	ENXPSL,X

		JSL	>PLFLST

		RTS

MBALL_PLCHK0500 EQU	$
		STX	YGOROFLG
		BRA	MBALL_PLCHK0520

MBALL_PLCHK0510 EQU	$
		STX	MBALLFLG

MBALL_PLCHK0520 EQU	$
		JSL	>YUKID_PLCHK3

		RTS
;
MBALL_PL_REVISE EQU	$
		LDA	<EWORK8			;R12 <- 補正量
		INC	A			;
		INC	A			;
		STA	R12			;
		LDA	PCENTX			;CWRK10 <- チェックＸ　ＰＯＳ．１
		SEC				;
		SBC	#00004			;
		STA	CCWORK10		;
		CLC				;CWRK12 <- チェックＸ　ＰＯＳ．２
		ADC	#00004+4		;
		STA	CCWORK12		;
		LDA	PCENTY			;CWRK11 <- チェックＹ　ＰＯＳ．１
		SEC				;CWRK13 <- チェックＹ　ＰＯＳ．２
		SBC	PWIDEY			;
		STA	<EWORK0			;
		STA	CCWORK11		;
		STA	CCWORK13		;
		LDA	#00001			;R9 <- 補正方向
		STA	R9			;
		M_CHIPR PL_REVISE_CHK
		LDX	<ENINDX
		LDA	R12			;補正ＯＫ ?
		BEQ	MBALL_P_R0100		; yes: MBALL_P_R0100

		INC	CCWORK11

MBALL_P_R0100	EQU	$
		LDA	CCWORK11		;プレイヤーＹ　ＰＯＳ．補正
		SEC				;
		SBC	<EWORK0			;
		CLC				;
		ADC	PLYPSL			;
		STA	PLYPSL			;

		RTS
;
MBALL_PLCHK1	EQU	$
		LDY	PLYSPD+1		;プレイヤー上昇中 ?
		BMI	MBALL_PLCHK1700		; yes: MBALL_PLCHK1700

		LDA	<EWORK8			;プレイヤー乗ってる ?
		CMP	#0FFF6H			;
		BCC	MBALL_PLCHK1700		;  no: MBALL_PLCHK1700

		JSR	MBALL_PL_REVISE

		LDA	ENTIM2,X		;加速する ?
		BNE	MBALL_PLCHK1100		;  no: MBALL_PLCHK1100

		LDA	#00004
		STA	ENTIM2,X

		LDA	EPWIDX,X
		STA	R6
		LDA	#0FFE0H
		STA	R0
		M_CHIP	MULTIPLY
		LDX	<ENINDX
		LDA	R0
		CLC
		ADC	ENXSPD,X
		STA	ENXSPD,X

MBALL_PLCHK1100 EQU	$
		STZ	PLYSPD
		INC	ONLFFG

		LDA	PLXSPD
		PHA
		LDA	ENXSPD,X
		PHA
		LDA	PLXPSL
		PHA
		LDA	#00180H
		JSL	>TAMA_NORI_XREV
		PLA
		PHA
		SEC
		SBC	PLXPSL
		EOR	#0FFFFH
		INC	A
		STA	<EWORK6
		PLA
		STA	PLXPSL
		LDA	<EWORK6
		JSL	>YUKID_PL_REV2
		PLA
		STA	ENXSPD,X
		PLA
		STA	PLXSPD

		RTS

MBALL_PLCHK1700 EQU	$
		JMP	MBALL_FARAWAY
;
MBALL_VS_PLXSPD EQU	$
 IF PAL	   ;*** PAL 対応 [1995/7/20] ******************
		WORD	0048AH,0FB76H
 ELSE	   ;*** JPN/NES 対応 [1995/6/30] **************
		WORD	00400H,0FC00H
 ENDIF	   ;*** PAL 対応 [1995/7/20] ******************
;
MBALL_PLCHK2	EQU	$
		LDA	ENWRK6,X
		LDY	ENMYNO,X
		CPY	#MBALL
		BEQ	MBALL_PLCHK2040

		LDA	ENWRKC,X

MBALL_PLCHK2040 EQU	$
		STA	<EWORK2

		LDA	KEYC1L			;進行方向と同じ方向のキーが押されてる ?
		BIT	<EWORK2			;
		BEQ	MBALL_PLCHK2080		;  no: MBALL_PLCHK2080

		AND	P_KEY_JUMP		;ジャンプボタン押された ?
		BEQ	MBALL_PLCHK2100		;  no: MBALL_PLCHK2100

		LDA	ENXSPD,X
		STA	PLXSPD
		STA	PLMVSP
		BRA	MBALL_PLCHK2090

MBALL_PLCHK2080 EQU	$
		LDA	PLXPSL
		CLC
		ADC	ENMOVX,X
		STA	PLXPSL
		LDA	#00160H
		STA	EGOPSP

MBALL_PLCHK2090 EQU	$
		JMP	MBALL_FARAWAY
;
MBALL_PLCHK2100 EQU	$
		LDA	ENXSPD,X		;動いてる ?
		BEQ	MBALL_PLCHK2200		;  no: MBALL_PLCHK2200

		LDA	PLBGCR			;プレイヤー壁にあたってる ?
		AND	#0000000111100000B	;
		BEQ	MBALL_PLCHK2200		;  no: MBALL_PLCHK2200

		AND	#0000000110000000B	;進行方向側の壁にあたってる ?
		DEC	A			;
		EOR	ENXSPD,X		;
		BPL	MBALL_PLCHK2080		; yes: MBALL_PLCHK2080

MBALL_PLCHK2200 EQU	$
		JSL	>YUKID_PL_REVISE

		LDA	PLNAGE			;プレイヤー投げてる ?
		ORA	BERFLG			;プレイヤー舌を出してる ?
		BNE	MBALL_PLCHK2C00		; yes:MBALL_PLCHK2C00

		LDA	PLXSPD
		BPL	MBALL_PLCHK2480

		EOR	#0FFFFH
		INC	A

MBALL_PLCHK2480 EQU	$
		AND	#0FF00H
		XBA
		SEC
		ADC	ENXPOW,X
		LDY	EPXMUK,X
		BEQ	MBALL_PLCHK2500

		EOR	#0FFFFH
		INC	A

MBALL_PLCHK2500 EQU	$
		CLC
		ADC	ENXSPD,X
		STA	<EWORKE
		CLC
		ADC	#00400H
		LDY	#000
		CMP	#00800H
		BCC	MBALL_PLCHK2700
		BPL	MBALL_PLCHK2600

		INY
		INY

MBALL_PLCHK2600 EQU	$
		LDA	!MBALL_VS_PLXSPD,Y
		STA	<EWORKE

MBALL_PLCHK2700 EQU	$
		LDA	<EWORKE
		STA	ENXSPD,X

		INC	PUSHFG			;敵押しフラグ”ＯＮ”

		LDA	PLXSPD
		BPL	MBALL_PLCHK2800

		EOR	#0FFFFH
		INC	A

MBALL_PLCHK2800 EQU	$
		CLC
		ADC	ENWRKA,X
		CMP	#00040H
		BMI	MBALL_PLCHK2A00

		INC	PSPUSH			;押しカウンターセット
		AND	#0003FH

MBALL_PLCHK2A00 EQU	$
		STA	ENWRKA,X

MBALL_PLCHK2C00 EQU	$

		RTS
;
;＊＊＊＊＊＊＊＊＜　敵チェック　＞＊＊＊＊＊＊＊＊＊＊
EN_XSPD		EQU	$
		WORD	00200H,0FE00H
MBALL_EN_XREV	EQU	$
		WORD	0FFFFH,00001H
;
MBALL_ENCHK	EQU	$
		PHB
		PHK
		PLB

		TXA
		STA	R1
		M_CHIP	MY_ENCROS2
		BRA	MBALL_ENCHK0200

MBALL_ENCHK0100 EQU	$
		LDX	#BANK MY_ENCROS2
		LDA	R15
		JSL	>CHIPON

MBALL_ENCHK0200 EQU	$
		LDX	<ENINDX
		LDY	R14			;敵にあたった ?
		DEY				;
		BPL	MBALL_ENCHK0300		; yes: MBALL_ENCHK0300

		PLB
		RTL

MBALL_ENCHK0300 EQU	$
		INY
		LDA	ENMYNO,Y		;目標物は同じ玉 ?
		CMP	#MBALL			;
		BNE	MBALL_ENCHK0400		;  no: MBALL_ENCHK0400

		JSR	MBALL_MBALL_CHK
		BRA	MBALL_ENCHK0100

MBALL_ENCHK0400 EQU	$
		CMP	#BATSN			;バットさん ?
		BEQ	MBALL_ENCHK0100		; yes: MBALL_ENCHK0100

		LDA	ENMOD1,Y		;潰してもいい ?
		AND	#0000100000000000B	;
		BEQ	MBALL_ENCHK0100		;  no: MBALL_ENCHK0100

		LDA	ENXSPD,X		;スピードが出てる ?
		CLC				;
		ADC	#00010H			;
		CMP	#00020H			;
		BCS	MBALL_ENCHK0500		; yes: MBALL_ENCHK0500

		LDA	ECENTX,Y		;目標物、動いてる ?
		SEC				;
		SBC	ECENTX,X		;
		STA	<EWORKA			;
		LDA	ENXSPD,Y		;
		BEQ	MBALL_ENCHK0450		;  no: MBALL_ENCHK0450

		EOR	<EWORKA			;目標物、近寄ってきてる ?
		BPL	MBALL_ENCHK0100		;  no: MBALL_ENCHK0100

		LDA	ENXPSL,Y		;目標物、Ｘ座標補正
		SEC				;
		SBC	ENMOVX,Y		;
		STA	ENXPSL,Y		;
		LDA	ENMUKI,Y		;目標物、向き反転
		EOR	#00002			;
		STA	ENMUKI,Y		;
		LDA	ENXSPD,Y		;目標物、Ｘスピード反転
		EOR	#0FFFFH			;
		INC	A			;
		STA	ENXSPD,Y		;
		EOR	ENXMAX,Y		;目標物、マックススピード反転 ?
		BPL	MBALL_ENCHK0450		;  no: MBALL_ENCHK0450

		LDA	ENXMAX,Y		;目標物、マックススピード反転
		EOR	#0FFFFH			;
		INC	A			;
		STA	ENXMAX,Y		;

MBALL_ENCHK0450 EQU	$
		LDX	#000
		LDA	<EWORKA			;目標物、左にいる ?
		BMI	MBALL_ENCHK0460		; yes: MBALL_ENCHK0460

		INX
		INX

MBALL_ENCHK0460 EQU	$
		LDA	ENXPSL,Y		;目標物、Ｘ座標補正
		CLC				;
		ADC	!MBALL_EN_XREV,X	;
		STA	ENXPSL,Y		;
		LDX	<ENINDX

MBALL_ENCHK0470 EQU	$
		JMP	MBALL_ENCHK0100

MBALL_ENCHK0500 EQU	$
		LDA	ENMOD1,Y		;敵か ?
		AND	#0110000000000000B	;
		BNE	MBALL_ENCHK0470		;  no: MBALL_ENCHK0470

		JSR	ENMY_PUCHI
		BRA	MBALL_ENCHK0470
;
ENMY_PUCHI	EQU	$
		LDA	ENMOD2,Y		;範囲クリア有り
		ORA	#0000000000000100B	;（ルーチン内でＲＡＭをいじってる場合が
		STA	ENMOD2,Y		;あるので、注意すること）

		PHY
		TYX
		JSL	>ENDEATH_SET_4
		PLX

		LDA	ENMODE,X		;あたってきたやつ往生してくれた ?
		CMP	#EFALL			;
		BNE	ENMY_PUCHI0400		;  no: ENMY_PUCHI0400

		LDY	#000			;目標物は右 ?
		LDA	CCWORK0			;
		BPL	ENMY_PUCHI0200		; yes: ENMY_PUCHI0200

		INY
		INY

ENMY_PUCHI0200	EQU	$
		LDA	!EN_XSPD,Y
		STA	ENXSPD,X

ENMY_PUCHI0400	EQU	$
MBALL_M_C0000	EQU	$

		RTS
;
MBALL_MBALL_CHK EQU	$
		LDA	EWIDEY,X
		ASL	A
		STA	<EWORK0

		LDA	ECENTY,X
		SEC
		SBC	ECENTY,Y
		BPL	MBALL_M_C1000

		CLC				;下にいる ?
		ADC	<EWORK0			;
		CMP	#00008			;
		BCS	MBALL_M_C5000		;  no: MBALL_M_C5000

		RTS

MBALL_M_C1000	EQU	$
		SEC				;上に乗られた ?
		SBC	<EWORK0			;
		DEC	A			;
		CMP	#0FFF8H-1		;
		BCC	MBALL_M_C5000		;  no: MBALL_M_C5000

		LDA	ENCBFG,X		;地面に着いてる ?
		AND	#00001			;
		BEQ	MBALL_M_C1500		;  no: MBALL_M_C1500

		LDA	ENYSPD,Y
		CMP	#08000H
		ROR	A
		CMP	#08000H
		ROR	A
		EOR	#0FFFFH
		INC	A
		BRA	MBALL_M_C1800

MBALL_M_C1500	EQU	$
		LDA	ENYSPD,X
		PHA
		LDA	ENYSPD,Y
		STA	ENYSPD,X
		PLA

MBALL_M_C1800	EQU	$
		STA	ENYSPD,Y
		LDA	ENYPSL,X
		SEC
		SBC	ENMOVY,X
		STA	ENYPSL,X
		LDA	ENYPSL,Y
		SEC
		SBC	ENMOVY,Y
		STA	ENYPSL,Y

		LDA	ECENTX,X
		SEC
		SBC	ECENTX,Y
		PHP
		LDA	ENXSPD,Y
		BPL	MBALL_M_C1900

		EOR	#0FFFFH
		INC	A

MBALL_M_C1900	EQU	$
		LSR	A
		LSR	A
		LSR	A
		PLP
		BPL	MBALL_M_C1A00

		EOR	#0FFFFH
		INC	A

MBALL_M_C1A00	EQU	$
		CLC
		ADC	ENXSPD,X
		STA	ENXSPD,X
		RTS
;
;横あたり
MBALL_M_C5000	EQU	$
		LDA	ENMOVX,X		;どちらか動いてる ?
		ORA	ENMOVX,Y		;
		BNE	MBALL_M_C5800		; yes: MBALL_M_C5800

		LDA	ECENTX,Y
		SEC
		SBC	ECENTX,X
		STA	<EWORK0

		CPX	MBALLFLG		;プレイヤー自分にくっついてる ?
		BNE	MBALL_M_C5500		;  no: MBALL_M_C5500

		LDA	<EWORK0
		PHP
		LDA	EWIDEX,X
		ASL	A
		INC	A
		PLP				;相手は右にいる ?
		BPL	MBALL_M_C5100		; yes: MBALL_M_C5100

		EOR	#0FFFFH
		INC	A

MBALL_M_C5100	EQU	$
		CLC
		ADC	ENXPSL,X
		STA	ENXPSL,Y
		CLC
		ADC	ECNTXW,Y
		STA	ECENTX,Y
		BRA	MBALL_M_C7000

MBALL_M_C5500	EQU	$
		CPY	MBALLFLG		;プレイヤー相手にくっついてる ?
		BNE	MBALL_M_C5800		;  no: MBALL_M_C5800

		LDA	<EWORK0
		PHP
		LDA	EWIDEX,X
		ASL	A
		INC	A
		PLP				;相手は左にいる ?
		BMI	MBALL_M_C5600		; yes: MBALL_M_C5600

		EOR	#0FFFFH
		INC	A

MBALL_M_C5600	EQU	$
		CLC
		ADC	ENXPSL,Y
		STA	ENXPSL,X
		CLC
		ADC	ECNTXW,X
		STA	ECENTX,X
		BRA	MBALL_M_C7000

MBALL_M_C5800	EQU	$
		LDA	ENXPSL,X
		SEC
		SBC	ENMOVX,X
		STA	ENXPSL,X

		LDA	ECENTX,X
		SEC
		SBC	ENMOVX,X
		STA	ECENTX,X

		LDA	ENXPSL,Y
		SEC
		SBC	ENMOVX,Y
		STA	ENXPSL,Y

		LDA	ECENTX,Y
		SEC
		SBC	ENMOVX,Y
		STA	ECENTX,Y

MBALL_M_C7000	EQU	$
		LDA	ENXSPD,X
		PHA
		LDA	ENXSPD,Y
		STA	ENXSPD,X
		PLA
		STA	ENXSPD,Y

		RTS
;
MBALL_BGCHK	EQU	$
		LDA	ENXSPD,X
		CLC
		ADC	#00080H
		CMP	#00100H
		BCS	MBALL_BGCHK0100

		LDA	<ENCONT,X
		CLC
		ADC	#00110H
		CMP	#00220H
		BCC	MBALL_BGCHK0800

MBALL_BGCHK0100 EQU	$
		LDA	ENWRKC,X
		STA	<EWORK2
		STZ	<EWORK4
		LDA	ENXPSL,X
		STA	<EWORK6
		LDA	ENYPSL,X
		STA	<EWORK8
		STZ	<EWORKE

		JSR	MBALL_CHK_SB		;左チェック
;;;;;;;;		BCS	MBALL_BGCHK0500

		LDY	#008
		STY	<EWORK4
		JSR	MBALL_CHK_SB		;右チェック
;;;;;;;;		BCS	MBALL_BGCHK0500

		LDY	#010H
		STY	<EWORK4
		JSR	MBALL_CHK_SB		;頭チェック
;;;;;;;;		BCS	MBALL_BGCHK0500

		LDY	#018H
		STY	<EWORK4
		JSR	MBALL_CHK_SB		;足チェック

MBALL_BGCHK0500 EQU	$
		LDX	<ENINDX
		LDY	<EWORKE			;左右がチェックされた ?
		BEQ	MBALL_BGCHK0700		;  no: MBALL_BGCHK0700

		LDA	ENXSPD,X
		CMP	#08000H
		ROR	A
		STA	ENXSPD,X

MBALL_BGCHK0700 EQU	$
		LDY	<EWORKF			;上下がチェックされた ?
		BEQ	MBALL_BGCHK0800		;  no: MBALL_BGCHK0800

		LDA	<ENCONT,X
		CMP	#08000H
		ROR	A
		STA	ENYSPD,X

MBALL_BGCHK0800 EQU	$

		RTS
;
MBALL_BGCHK_PT	EQU	$
		WORD	0FFF9H,00008H
		WORD	00017H,00008H
		WORD	00008H,0FFF9H
		WORD	00008H,00017H
;
MBALL_CHK_SB	EQU	$
		I16

		LDA	<EWORK2
		CLC
		ADC	<EWORK4
		TAX

		LDA	>ENBGCK_X_L,X
		STA	BGXPS1
		LDA	>ENBGCK_Y_L,X
		STA	BGYPS1

		LDA	>ENBGCK_TYPE_L,X	;食べれるＢＧ ?
		AND	#1111100000000000B	;
		CMP	#ET			;
		BNE	MBALL_C_SB0100		;  no: MBALL_C_SB0100

		I8
		JSL	>AWANH_BGBR0_SET
		BRA	MBALL_C_SB0300
		IDX16

MBALL_C_SB0100	EQU	$
		LDA	>ENBGCK_UNIT_L+1,X	;２度当てブロック ?
		AND	#000FFH			;
		CMP	#UT7B00/100H		;
		BNE	MBALL_C_SB0200		;  no: MBALL_C_SB0200

		I8
		JSL	>CLR_BG_4
		BRA	MBALL_C_SB0300
		IDX16

MBALL_C_SB0200	EQU	$
		CMP	#UT7C00/100H		;とげとげブロック ?
		BNE	MBALL_C_SB0800		;  no: MBALL_C_SB0300

		I8
		JSL	>TOGEBLK_BRK
		IDX16

MBALL_C_SB0300	EQU	$
		LDY	<EWORK4			;上下をチェック ?
		CPY	#018H			;
		BPL	MBALL_C_SB0400		; yes: MBALL_C_SB0400

		INC	<EWORKE
		BRA	MBALL_C_SB0500

MBALL_C_SB0400	EQU	$
		INC	<EWORKF

MBALL_C_SB0500	EQU	$
		I8

		LDA	#00010H			;重力無効タイマーセット
		STA	ENTIM1,X		;

		SEC

		RTS

MBALL_C_SB0800	EQU	$
		I8

		CLC

		RTS
;
;----------------------------------------------------------------
;-								-
;-		２度当てＢＧを壊す				-
;-								-
;-	BGXPS1	Ｘ座標						-
;-	BGYPS1	Ｙ座標						-
;-								-
;----------------------------------------------------------------
CLR_BG_4	EQU	$
		LDA	BGYPS1
		PHA
		LDA	BGXPS1
		PHA

		LDA	#UT0000			;BG change unit no.
		STA	BGUTNO
		LDA	#BGCG			;BG change type no.
		STA	BGCGNO
		JSL	>UNITCHG

		LDA	BGXPS1
		CLC
		ADC	#00010H
		STA	BGXPS1
		JSL	>UNITCHG

		LDA	BGYPS1
		CLC
		ADC	#00010H
		STA	BGYPS1
		JSL	>UNITCHG

		PLA
		STA	BGXPS1
		JSL	>UNITCHG

		PLA
		STA	BGYPS1

		LDX	<ENINDX
		LDA	#BR2CR
		JSL	>EXINSR

		LDA	BGXPS1			;Ｘ座標セット
		AND	#0FFF0H
		STA	EXXPSL,Y
		LDA	BGYPS1			;Ｙ座標セット
		AND	#0FFF0H
		STA	EXYPSL,Y
		LDA	#0000DH			;初期パターンＮｏ．セット
		STA	EXCHPT,Y
		LDA	#00002			;初期タイマーセット
		STA	EXTIM0,Y

		LDA	#00048H			;［Ｓ］
		JSL	>SOUND_3_ON
;;;;;;;;		LDA	#00018H			;［Ｓ］
;;;;;;;;		STA	SOUND3

		RTL
;
;----------------------------------------------------------------
;-								-
;-		とげとげＢＧを壊す				-
;-								-
;-	BGXPS1	Ｘ座標						-
;-	BGYPS1	Ｙ座標						-
;-								-
;----------------------------------------------------------------
TOGEBLK_BRK	EQU	$
		LDA	#TGTM
		STA	BGCGNO
		JSL	>UNITCHG

		LDX	<ENINDX
		LDA	#BRTOG
		JSL	>EXINSR

		LDA	BGXPS1			;Ｘ座標セット
		AND	#0FFF0H
		STA	EXXPSL,Y
		LDA	BGYPS1			;Ｙ座標セット
		AND	#0FFF0H
		STA	EXYPSL,Y
		LDA	#0000CH			;初期パターンＮｏ．セット
		STA	EXCHPT,Y
		LDA	#00002			;初期タイマーセット
		STA	EXTIM0,Y

		LDA	#0000AH			;［Ｓ］
		JSL	>SOUND_3_ON
;;;;;;;;		LDA	#00019H			;［Ｓ］
;;;;;;;;		STA	SOUND3

		RTL
;
;＊＊＊＊＊＊＊＊＜　坂チェック　＞＊＊＊＊＊＊＊＊＊＊
MBALL_XPOW_SLP	EQU	$
;			 -10	-20    -30
		WORD	00004H,00006H,00008H
;			 +30	+20    +10
		WORD	00008H,00006H,00004H
YGORO_XPOW_SLP	EQU	$
;			 -10	-20    -30
		WORD	00001H,00002H,00003H
;			 +30	+20    +10
		WORD	00003H,00002H,00001H
;			 -10	-20    -30
		WORD	00020H,00040H,00060H
;			 +30	+20    +10
		WORD	00060H,00040H,00020H
;
MBALL_XMAX_SLP	EQU	$
;			 -10	-20    -30
		WORD	00380H,00224H,001C0H
;			 +30	+20    +10
		WORD	0FE40H,0FDDCH,0FC80H
YGORO_XMAX_SLP	EQU	$
;			 -10	-20    -30
		WORD	00180H,000D2H,000A0H
;			 +30	+20    +10
		WORD	0FF60H,0FF2EH,0FE80H
;			 -10	-20    -30
		WORD	0FFB0H,0FF97H,0FF40H
;			 +30	+20    +10
		WORD	0FF60H,0FF2EH,0FE80H
;			 -10	-20    -30
		WORD	00180H,000D2H,000A0H
;			 +30	+20    +10
		WORD	00050H,00069H,000C0H
;
MBALL_SLOPE	EQU	$
YGORO_SLOPE	EQU	$
		STZ	ENXPOW,X

		LDA	ENSLOP,X		;坂の上にいる ?
		AND	#000FFH			;
		BEQ	MBALL_BGCHK0		;  no: MBALL_BGCHK0

		LDY	#000
		CMP	#00080H
		BMI	MBALL_S0200

		ORA	#0FF00H
		LDY	#002
		CLC
		ADC	#00020H
		BRA	MBALL_S0300

MBALL_S0200	EQU	$
		LDY	#008H
		SEC
		SBC	#00020H

MBALL_S0300	EQU	$
		BEQ	MBALL_S0500
		BMI	MBALL_S0400

		DEY
		DEY
		BRA	MBALL_S0500

MBALL_S0400	EQU	$
		INY
		INY

MBALL_S0500	EQU	$
		LDA	ENMYNO,X
		CMP	#MBALL
		BEQ	MBALL_S0600

		PHY
		LDA	<ENWRK1,X		;プレイヤーに押されてる ?
		AND	#000FFH			;
		BEQ	MBALL_S0501		;  no: MBALL_S0501

		TYA
		CLC
		ADC	#0000CH
		TAY

		LDA	ENXSPD,X
		BMI	MBALL_S0501

		TYA
		CLC
		ADC	#0000CH
		TAY

MBALL_S0501	EQU	$
		LDA	!YGORO_XMAX_SLP,Y	;
		STA	ENXMAX,X		;
		PLY

		LDA	ENXMAX,X		;スピード出てる ?
		BPL	MBALL_S0510		;
						;
		EOR	#0FFFFH			;
		INC	A			;
						;
MBALL_S0510	EQU	$			;
		ASL	A			;
		STA	<EWORK0			;
		LSR	A			;
		CLC				;
		ADC	ENXSPD,X		;
		CMP	<EWORK0			;
		BCC	MBALL_S0520		;  no: MBALL_S0520

		TYA
		CLC
		ADC	#0000CH
		TAY

MBALL_S0520	EQU	$
		LDA	!YGORO_XPOW_SLP,Y
		BRA	MBALL_S0700

MBALL_S0600	EQU	$
		LDA	!MBALL_XMAX_SLP,Y
		STA	ENXMAX,X
		LDA	!MBALL_XPOW_SLP,Y

MBALL_S0700	EQU	$
		STA	ENXPOW,X

		BRA	MBALL_BG0200
;
;＊＊＊＊＊＊＊＊＜　ＢＧチェック　＞＊＊＊＊＊＊＊＊＊＊
MBALL_BGCHK0	EQU	$
		LDA	ENCBFG,X		;ＢＧにあたってる ?
		AND	#0000FH			;
		BEQ	MBALL_BG0500		;  no: MBALL_BG0500

		BIT	#00001H			;地面に着いてる ?
		BEQ	MBALL_BG0200		;  no: MBALL_BG0200

		LDA	<ENWRK0,X		;プレイヤーがそばにいる ?
		BNE	MBALL_BG0200		; yes: MBALL_BG0200

		LDA	ENXSPD,X		;止まりかけている ?
		CLC				;
		ADC	#00004			;
		CMP	#00008H			;
		BCS	MBALL_BG0150		;  no: MBALL_BG0150

		STZ	ENXSPD,X		;Ｘ　ＳＰＥＥＤクリア
		BRA	MBALL_BG0200

MBALL_BG0150	EQU	$
		LDA	ENXSPD,X		;平地での抵抗値（Ｘ　ＰＯＷＥＲ）セット
		BPL	MBALL_BG0180		;
						;
		EOR	#0FFFFH			;
		INC	A			;
						;
MBALL_BG0180	EQU	$			;
		XBA				;
		AND	#000FFH			;
		INC	A			;
		STA	ENXPOW,X		;

		STZ	ENXMAX,X		;Ｘ　ＭＡＸ　ＳＰＥＥＤセット

MBALL_BG0200	EQU	$
		LDA	ENCBFG,X		;壁にぶつかってる ?
		AND	#0000CH			;
		BEQ	MBALL_BG0500		;  no: MBALL_BG0500

		SEC				;進行方向が壁 ?
		SBC	#00008			;
		EOR	ENXSPD,X		;
		BPL	MBALL_BG0500		;  no: MBALL_BG0500

		LDA	ENSLOP,X		;今坂にいる ?
		BEQ	MBALL_BG0300		;  no: MBALL_BG0300

		LDA	ENMOD1,X		;ＢＧチェックは坂用 ?
		AND	#0000000000011111B	;
		CMP	#0000000000001110B	;
		BEQ	MBALL_BG0500		;  no: MBALL_BG0500

MBALL_BG0300	EQU	$
		LDA	ENXPSL,X
		SEC
		SBC	ENMOVX,X
		STA	ENXPSL,X

		LDA	ENXSPD,X
		CMP	#08000H
		ROR	A
		CMP	#08000H
		ROR	A
		EOR	#0FFFFH
		INC	A
		STA	ENXSPD,X

MBALL_BG0500	EQU	$

		RTS

MBALL_BG1000	EQU	$
		LDA	ENCBFG,X		;壁にぶつかってる ?
		AND	#0000CH			;
		BEQ	MBALL_BG1500		;  no: MBALL_BG1500

		LDA	ENXSPD,X		;スピードが出てる ?
		CLC				;
		ADC	#00180H			;
		CMP	#00300H			;
		BCC	MBALL_BG1500		;  no: MBALL_BG1500

		LDA	#SNWBR		;(A) <-- exstra no.
		JSL	>EXINSR
		LDA	#00008H
		STA	EXWRK0,Y	;counter set
		LDA	#00001H
		STA	EXTIM0,Y
		LDA	ENXPSL,X
		STA	EXXPSL,Y	;X pos set
		LDA	ENYPSL,X
		STA	EXYPSL,Y	;Y pos set
		LDA	ENXSPD,X
		STA	EXXSPD,Y
		LDA	ENYSPD,X
		STA	EXYSPD,Y

		LDA	#00037H		;［Ｓ］
		JSL	>SOUND_3_ON

MBALL_BG1500	EQU	$

		RTS
;
;＊＊＊＊＊＊＊＊＜　回転角計算　＞＊＊＊＊＊＊＊＊＊＊
MBALL_ROTANG	EQU	$
		LDA	ENMOVX,X
		ASL	A
		ASL	A
		ASL	A
		EOR	#0FFFFH
		SEC
		ADC	ENWRK8,X
		STA	ENWRK8,X

		RTS
;
;＊＊＊＊＊＊＊＊＜　ビットマップエリアセット　＞＊＊＊＊＊＊＊＊＊＊
MBALL_ROT_SET	EQU	$
						;転送元アドレス＆バンクセット
		LDA	#BANK CIPCHD3+6020H+000 ;(R13) <-- 転送元バンクセット
		STA	R13			;
		LDA	#CIPCHD3+6020H+000	;(R12) <-- 転送元アドレスセット
		STA	R12			;

		LDY	ENWRK8,X		;(R5) <- 回転角セット
		TYA
		STA	R5			;

		LDA	#00100H			;(R6) <- 倍率セット
		STA	R6			;

		LDY	ENTROB,X
		TYX
		LDA	>TROBJ_PLOT_X,X		;(R3) <- ビットマップ座標＿Ｘセット
		STA	R3			;
		LDA	>TROBJ_PLOT_Y,X		;(R2) <- ビットマップ座標＿Ｙセット
		STA	R2			;
;
;-------------- OBJ mode 7 set ----------------------------------
		M_CHIP	C_32_ROTZOM

		LDX	<ENINDX

		INC	OBM7WF		;mode 7 OBJ chara DMA "ON"

		RTS
;
MBALL_SOUND	EQU	$
YGORO_SOUND	EQU	$
		LDA	ENMOVX,X
		BPL	MBALL_SOUND010

		EOR	#0FFFFH
		INC	A

MBALL_SOUND010	EQU	$
		CLC
		ADC	<ENWRK4,X
		CMP	#00010H
		BMI	MBALL_SOUND020

		SEC
		SBC	#00010H
		PHA
		LDA	#00059H		;［Ｓ］
		JSL	>SOUND_3_ON
		PLA

MBALL_SOUND020	EQU	$
		STA	<ENWRK4,X

		RTS
;
MBALL_EAT_FLAG	EQU	$
YGORO_EAT_FLAG	EQU	$
		LDA	ENYSPD,X
		STA	<ENCONT,X

		LDA	#0000010010100010B	;舌しびれる
		LDY	<ENWRK0,X		;プレイヤー乗ってる ?
		BEQ	MBALL_E_FLAG010		;  no: MBALL_E_FLAG010

		LDA	#0000010011100010B	;食えない

MBALL_E_FLAG010 EQU	$
		STA	ENMOD0,X

		RTS
;
;************************************************************************
;*		initial ( 雪ごろごろ )					*
;************************************************************************
YGOROIN		EQU	$			;-- ygoroin --
		JSL	>TROBJ_SR_8x8_CL

		LDY	MAPOINT			;5-2 ?
		CPY	#031H			;
		BNE	YGOROIN0300		;  no: YGOROIN0300

		LDA	#1000000000000001B	;範囲クリアなし
		STA	ENMOD2,X

YGOROIN0300	EQU	$
		JSR	YGORO_ROT_SET

		LDA	#000B3H*8		;初期倍率セット
		STA	ENWRK6,X		;

		RTL
;
;************************************************************************
;*		move	( 雪ごろごろ )					*
;************************************************************************
;B		ENWRK0	プレイヤーＯＮフラグ
;B		ENWRK1	プレイヤー横あたりフラグ
;		ENWRK2	プレイヤー補正中のＸ　ＰＯＳ．の小数値
;		ENWRK4	サウンドセットカウンター
;		ENWRK6	倍率
;		ENWRK8	回転角
;		ENWRKA	プレイヤーパターンチェンジカウンター
;		ENWRKC	進行方向キーチェックデータ
;
;		ENTIM0
;		ENTIM1	重力無効タイマー
;		ENTIM2	USE
;		ENTIM3
;
;		YGOROFLG	雪ごろごろ用PONLFFG
;
YGOROMV		EQU	$			;-- ygoromv --
		JSL	>TROBJ_OAM_8x8

		JSL	>ENMDCK

		STZ	ENMUKI,X

		JSL	>MBALL_ENCHK

		JSR	YGORO_PLCHK		;プレイヤーチェック

		JSR	YGORO_SLOPE		;坂チェック

		JSR	YGORO_ANG_CALC		;回転角計算

		JSR	YGORO_ROT_SET		;ビットマップセット

		JSR	YGORO_SOUND

		JSR	YGORO_EAT_FLAG

		RTL
;
;＊＊＊＊＊＊＊＊＜　回転角計算　＞＊＊＊＊＊＊＊＊＊＊
YGORO_ANG_CALC	EQU	$
		TXA
		STA	R10
		M_CHIP	M_YGORO_CALC
		LDX	<ENINDX

		RTS
;
;＊＊＊＊＊＊＊＊＜　ビットマップエリアセット　＞＊＊＊＊＊＊＊＊＊＊
YGORO_ROT_SET	EQU	$
		LDA	#BANK CIPCHD2+6080H+000 ;(R13) <-- 転送元バンクセット
		STA	R13			;
		LDA	#CIPCHD2+6080H+000	;(R12) <-- 転送元アドレスセット
		STA	R12			;

		LDY	ENWRK9,X		;(R5) <- 回転角セット
		TYA				;
		STA	R5			;

		LDA	ENWRK6,X		;(R6) <- 倍率セット
		LSR	A
		LSR	A
		LSR	A
		STA	R6			;

		LDY	ENTROB,X
		TYX
		LDA	>TROBJ_PLOT_X,X		;(R3) <- ビットマップ座標＿Ｘセット
		STA	R3			;
		LDA	>TROBJ_PLOT_Y,X		;(R2) <- ビットマップ座標＿Ｙセット
		STA	R2			;
;
;-------------- OBJ mode 7 set ----------------------------------
		M_CHIP	C_64_ROTZOM_32

		LDX	<ENINDX

		INC	OBM7WF		;mode 7 OBJ chara DMA "ON"

		RTS
;
;
;
;
;
;
;
;
;
;
;
;
		END
