;************************************************************************
;*									*
;*	title name	: "yossy"					*
;*	proccess	: enemy sub.1					*
;*	file name	: ys_enmy12					*
;*									*
;************************************************************************
;
;
		SALL
;
		include		ys_header.inc
		include		ys_unit.h
		include		ys_pld.h
		include		ys_presno.h
		include		ys_color.h
		include		ys_ename.h
;
		XALL
;
;
;------------------------------------------------------------------------
;-		global symbol						-
;------------------------------------------------------------------------
		GLB	KAMCSIN,SHEIHIN,MARUTIN
;
		GLB	KAMCSMV,SHEIHMV,MARUTMV
;
;------------------------------------------------------------------------
;-		extern symbol						-
;------------------------------------------------------------------------
;
;-------------< ys_main >------------------------------------------------
		EXT	BS_SCRE
		EXT	SOUND_3_ON
;
;-------------< ys_rpro >------------------------------------------------
		EXT	JSRSUB
		EXT	CHIPON
;
;-------------< ys_play >------------------------------------------------
		EXT	EBSTAT
		EXT	PFAL,PSTP,PMOV,PDEM,PGOL
		EXT	PFLP
;
;-------------< ys_bgsc >------------------------------------------------
;
;-------------< ys_enmy >------------------------------------------------
		EXT	ENEMY,ENINSB
		EXT	ENCLEAR,ENCLEAR_NORETN,DISPCK0,DISPCK2
		EXT	ENINSR,ENINSR2,EEXCHK,EEYCHK,EEXYCK,ESTATST
		EXT	ENINSR_I,ENINSR2_I
		EXT	SCOREST
		EXT	ENMDCK,XSDOWN,EPCRCK,MUKEOR,XSPEOR,MKEOR2,PLFLST
		EXT	PLFLST_2
		EXT	FUSENST
		EXT	SHOT_EN_KILL,SHOT_EN_KILL_S
;
		EXT	EINIT,EFAIL,EMOVE,EEATM,ENOSE,EBABL
;
		EXT	EATMXS,NOSWT
;
		EXT	EGGKILL_ALL
;
		EXT	FSMK0_SET2
;
		EXT	TROBJ_CANCEL
		EXT	TROBJ_SR_2x2,TROBJ_SR_4x4,TROBJ_SR_8x8
		EXT	TROBJ_SR_2x2_CL,TROBJ_SR_4x4_CL,TROBJ_SR_8x8_CL
		EXT	TROBJ_OAM_2x2,TROBJ_OAM_4x4,TROBJ_OAM_8x8
		EXT	TROBJ_OAM_2x2_I,TROBJ_OAM_4x4_I,TROBJ_OAM_8x8_I
		EXT	TROBJ_CLEAR
		EXT	TROBJ_PLOT_X,TROBJ_PLOT_Y
;
;-------------< ys_enmy2 >------------------------------------------------
		EXT	NMZ_HOSEI
;
;-------------< ys_enmy3 >------------------------------------------------
		EXT	BSCLW_SET_B,BSCLW_SET_M,BSCLW_SET_B_T
		EXT	BOSS_CLEAR
		EXT	BOSS_EN_CHANGE
;
;-------------< ys_enmy4 >------------------------------------------------
		EXT	MPACK_DEMO_ED
;
;-------------< ys_enmy6 >------------------------------------------------
		EXT	LOCKON_TARGET,LOCKON_TARGET2
;
;-------------< ys_exst >------------------------------------------------
		EXT	EXINSR
;
;-------------< ys_unit >------------------------------------------------
		EXT	UNDTADD,UNDATA,RUTDATA
;
;-------------< ys_init >------------------------------------------------
		EXT	UNCOMPRES,VRAMDX_ST,VRAMDX_H_ST,VRAMDX_L_ST,VRAMDX_L_C_ST
		EXT	M_DMA_BFST
;
;-------------< ys_play >------------------------------------------------
		EXT	TIMEUP_SET
;
;-------------< ys_game >------------------------------------------------
		EXT	BS1_MSG
;
;-------------< ys_data >------------------------------------------------
		EXT	SIN,COS
;
;-------------< ys_msgdt >------------------------------------------------
		EXT	BS3_MSG_2
;
;
;------------------------------------------------------------------------
;-		define symbol						-
;------------------------------------------------------------------------
BABY_INDEX	EQU	00
;
;
;
;************************************************************************
;*									*
;*		program start						*
;*									*
;************************************************************************
;
		EXTEND
;
		MEM16
		IDX8
;
		DPAGE	EN0RAM
;
Group_F		GROUP	Enmy12_pro
Enmy12_pro	SECT	REL
;
;
;
;************************************************************************
;*		initial ( かめっく )					*
;************************************************************************
KAMCSIN		EQU	$			;-- kamcsin --
		RTL
;
;************************************************************************
;*		move	( かめっく )					*
;************************************************************************
;		ENWRK0
;		ENWRK2	ROUTINE MODE INDEX
;
KAMCS_SUB	EQU	$
		WORD	KAMCS_SUB0
		WORD	KAMCS_SUB1
		WORD	KAMCS_SUB2
		WORD	KAMCS_SUB3
;
KAMCSMV		EQU	$			;-- kamcsmv --
		LDY	#01
		STY	ATSCRL_H

		LDA	<ENWRK4,X
		SEC
		SBC	SCCH1
		CMP	#000F0H
		BMI	KAMCSMV0100

		INC	SCCH1

KAMCSMV0100	EQU	$
		LDA	SCCH1
		STA	ATSCRL_SCCH1

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

		RTL
;
;
;CHPT <- 0 XSPD<-0FC00H XPOW<-040H
KAMCS_SUB0	EQU	$
		TYX

		LDA	ENXSPD,X
		BMI	KAMCS_SUB0300

		STZ	ENXSPD,X
		STZ	ENXPOW,X
		LDA	#00002
		STA	ENCHPT,X
		LDA	#00020H
		STA	ENTIM0,X
		INC	<ENWRK2,X
		RTS

KAMCS_SUB0300	EQU	$
		CMP	#0FF00H			;止まりかけている ?
		BMI	KAMCS_SUB0500		;  no: KAMCS_SUB0500

		LDA	#00005H
		BRA	KAMCS_SUB0800

KAMCS_SUB0500	EQU	$
		LDA	ENTIM1,X
		BNE	KAMCS_SUB0900

		LDA	#00002
		STA	ENTIM1,X
		LDA	ENCHPT,X
		EOR	#00001

KAMCS_SUB0800	EQU	$
		STA	ENCHPT,X

KAMCS_SUB0900	EQU	$

		RTS
;
;CONT<- 09H
KAMCS_SUB1	EQU	$
		TYX

		LDA	ENTIM0,X		;ストップ ?
		ORA	ENTIM1,X
		BNE	KAMCS_SUB1800		;  no: KAMCS_SUB1800

		INC	ENCHPT,X
		LDA	ENCHPT,X
		CMP	#00004
		BNE	KAMCS_SUB1100

		LDA	#0005BH			;［Ｓ］
		JSL	>SOUND_3_ON
		LDA	#BS3_MSG_2
		STA	>MSG_NO
		INC	MSGMOD
		INC	<ENWRK2,X

		RTS

KAMCS_SUB1100	EQU	$
		LDA	#00008H
		STA	ENTIM1,X

KAMCS_SUB1800	EQU	$

		RTS
;
KAMCS_SUB2	EQU	$
		TYX

		LDA	MSGMOD			;メッセージ消えた ?
		BNE	KAMCS_SUB2800		;  no: KAMSC2_SUB2800

		LDA	#00002
		STA	ENCHPT,X
		LDA	#0FC00H
		STA	ENXSPD,X
		LDA	#00040H
		STA	ENXPOW,X
		LDA	#00400H
		STA	ENXMAX,X
		INC	<ENWRK2,X

KAMCS_SUB2800	EQU	$
KAMCS_SUB3000	EQU	$

		RTS
;
KAMCS_SUB3	EQU	$
		TYX

		LDA	ENXSPD,X
		CLC
		ADC	#00080H
		CMP	#00100H
		BCS	KAMCS_SUB3100

		LDA	#00006
		BRA	KAMCS_SUB3500

KAMCS_SUB3100	EQU	$
		CLC
		ADC	#00100H-00080H
		CMP	#00200H
		BCS	KAMCS_SUB3200

		LDA	#00005
		BRA	KAMCS_SUB3500

KAMCS_SUB3200	EQU	$
		LDA	#00002

KAMCS_SUB3500	EQU	$
		STA	ENCHPT,X

		LDA	ENXSPD,X
		BMI	KAMCS_SUB3800

		LDA	#00002
		STA	ENMUKI,X

KAMCS_SUB3800	EQU	$
		LDA	ENDSXL,X		;画面外に出た ?
		CMP	#00140H			;
		BMI	KAMCS_SUB3000		;  no: KAMCS_SUB3000

		LDX	ZPACKIDX
		LDA	ENXPSL,X
		STA	<EWORK0
		LDA	ENYPSL,X
		STA	<EWORK2
		JSL	>BSCLW_SET_B

		LDX	ZPACKIDX
		JSL	>ENCLEAR
		LDX	<ENINDX
		PLA
		JMP	>ENCLEAR
;
;************************************************************************
;*		initial ( small heiho- )				*
;************************************************************************
SHEIHIN		EQU	$			;-- sheihin --
		LDY	SCHMK1
		BEQ	SHEIHIN0100

		JMP	>ENCLEAR

SHEIHIN0100	EQU	$
		LDA	ENXPSL,X
		SEC
		SBC	SCCH1
		CLC
		ADC	SCCH2
		STA	ENXPSL,X
		STA	ENWRKA,X
		LDA	ENYPSL,X
		CLC
		ADC	#00008
		SEC
		SBC	SCCV1
		CLC
		ADC	SCCV2
		AND	#0FFF8H
		CLC
		ADC	#0000AH
		STA	ENYPSL,X
		STA	ENWRKC,X
		INC	ENDORE,X		;８ビット、ＢＧ２に付随する
		INC	ENDORE,X

		RTL
;
;************************************************************************
;*		move	( ana_hori wang-wang )				*
;************************************************************************
;		ENWRK0
;		ENWRK2	ROUTINE MODE INDEX
;		ENWRK4
;		ENWRK6
;		ENWRK8
;		ENWRKA	出現Ｘ　ＰＯＳ．
;		ENWRKC	出現Ｙ　ＰＯＳ．
;
;		ENCONT
;
;		ENTIM0
;		ENTIM1
;		ENTIM2	方向転換タイマー
;		ENTIM3
;
SHEIH_XSPD	EQU	$
		WORD	0FFE0H,00020H
;
SHEIHMV		EQU	$			;-- sheihmv --
		JSL	>ENMDCK

		JSL	>DISPCK2		;画面中 ?
		BCC	SHEIHMV0100		; yes: SHEIHMV0100

		JMP	>ENCLEAR_NORETN

SHEIHMV0100	EQU	$
		LDA	ENMUKI,X
		DEC	A
		STA	<EWORK0

		LDA	ENXPSL,X		;行動範囲内 ?
		SEC				;
		SBC	ENWRKA,X		;
		CLC				;
		ADC	#00020H			;
		CMP	#00040H			;
		BCC	SHEIHMV0700		;
						;
		EOR	<EWORK0			;
		BMI	SHEIHMV0700		; yes: SHEIHMV0700

SHEIHMV0500	EQU	$
		LDA	<RANDM0
		AND	#0001FH
		CLC
		ADC	#00030H
		STA	ENTIM2,X

		LDA	ENMUKI,X
		EOR	#00002
		STA	ENMUKI,X

SHEIHMV0700	EQU	$
		LDY	ENTIM2,X		;反転する ?
		BEQ	SHEIHMV0500		; yes: SHEIHMV0500

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

		LDY	ENTIM1,X
		BNE	SHEIHMV0800

		LDA	#00008
		STA	ENTIM1,X

		LDA	ENCHPT,X
		EOR	#00001
		STA	ENCHPT,X

SHEIHMV0800	EQU	$

		RTL
;
;************************************************************************
;*		initial ( maruta bashi )				*
;************************************************************************
MARUTIN		EQU	$			;-- marutin --
		STZ	ENMUKI,X

		RTL
;
;************************************************************************
;*		move	( maruta bashi )				*
;************************************************************************
;		ENWRK0	プレイヤーＯＮフラグ 0...no OTHER...on player
;		ENWRK2	ROUTINE MODE INDEX
;		ENWRK4	プレイヤーＹ　ＳＰＥＥＤ
;		ENWRK6	丸太　その１　オフセットＹ　ＰＯＳ．
;		ENWRK8	丸太　その２　オフセットＹ　ＰＯＳ．
;		ENWRKA	丸太　その３　オフセットＹ　ＰＯＳ．
;		ENWRKC	丸太　その４　オフセットＹ　ＰＯＳ．
;
MARUTMV		EQU	$			;-- marutmv --
;＊＊＊＊＊＊＊＊＜　ＯＡＭセット　＞＊＊＊＊＊＊＊＊
		I16				;
		LDY	ENOAML,X		;
		LDA	ENDSYL,X
		STA	<EWORK0

		LDA	ENWRK6,X
		AND	#000FFH
		CLC
		ADC	<EWORK0
		STA	SOAM_DX+2+8*0,Y
		LDA	ENWRK7,X
		AND	#000FFH
		CLC
		ADC	<EWORK0
		STA	SOAM_DX+2+8*1,Y
		LDA	ENWRK8,X
		AND	#000FFH
		CLC
		ADC	<EWORK0
		STA	SOAM_DX+2+8*2,Y
		LDA	ENWRK9,X
		AND	#000FFH
		CLC
		ADC	<EWORK0
		STA	SOAM_DX+2+8*3,Y
		LDA	ENWRKA,X
		AND	#000FFH
		CLC
		ADC	<EWORK0
		STA	SOAM_DX+2+8*4,Y
		LDA	ENWRKB,X
		AND	#000FFH
		CLC
		ADC	<EWORK0
		STA	SOAM_DX+2+8*5,Y
		LDA	ENWRKC,X
		AND	#000FFH
		CLC
		ADC	<EWORK0
		STA	SOAM_DX+2+8*6,Y
		LDA	ENWRKD,X
		AND	#000FFH
		CLC
		ADC	<EWORK0
		STA	SOAM_DX+2+8*7,Y
		I8

;＊＊＊＊＊＊＊＊＜　プレイヤーチェック　＞＊＊＊＊＊＊＊＊
		LDA	PLBGCR			;プレイヤー地面に着いてる ?
		AND	#00003			;
		BNE	MARUTMV0001		; yes: MARUTMV0001

		LDA	PLYPSL
		CLC
		ADC	<ENWRK0,X
		STA	PLYPSL

MARUTMV0001	EQU	$
		LDA	ENWRK6,X
		AND	#000FFH
		STA	CCWORK0
		STA	<EWORK0
		LDA	ENWRK7,X
		AND	#000FFH
		STA	CCWORK1
		STA	<EWORK2
		LDA	ENWRK8,X
		AND	#000FFH
		STA	CCWORK2
		STA	<EWORK4
		LDA	ENWRK9,X
		AND	#000FFH
		STA	CCWORK3
		STA	<EWORK6
		LDA	ENWRKA,X
		AND	#000FFH
		STA	CCWORK4
		STA	<EWORK8
		LDA	ENWRKB,X
		AND	#000FFH
		STA	CCWORK5
		STA	<EWORKA
		LDA	ENWRKC,X
		AND	#000FFH
		STA	CCWORK6
		STA	<EWORKC
		LDA	ENWRKD,X
		AND	#000FFH
		STA	CCWORK7
		STA	<EWORKE

		STZ	R1
		LDY	PLYSPD+1
		BPL	MARUTMV0002

		LDY	PLJUMP
		BNE	MARUTMV0080

MARUTMV0002	EQU	$
		LDA	PCENTX
		SEC
		SBC	ENXPSL,X
		CLC
		ADC	#00020H			;20H
		CMP	#00040H
		BCS	MARUTMV0100

		STA	R2
		LDA	ENXPSL,X		;(R3) <- 丸太のＸ　ＰＯＳ．と対象物との距離
		SEC
		SBC	#00018H			;-18H
		SEC
		SBC	PCENTX
		STA	R3
		LDA	#00046H			;WRK1F <- 丸太のＭＡＸ下げ幅　（中用）
		CLC				;
		ADC	<ENWRK4,X		;
		STA	CCWORK1F		;

		LSR	A			;WRK1E <- 丸太のＭＡＸ下げ幅　（両端用）
		STA	CCWORK1E		;
		STA	R6

		LDA	PCENTY
		CLC
		ADC	PLFTLN
		STA	R8
		LDA	PWIDEY
		STA	R9
		LDA	ENYPSL,X
		STA	R10

		M_CHIP	M_MARUT_CHK

		LDX	<ENINDX

		LDY	R1			;プレイヤー乗ってる ?
		BNE	MARUTMV0200		; yes: BARUTMV0200

MARUTMV0080	EQU	$
		LDA	ENYSPD,X
		BEQ	MARUTMV0100

		JMP	MARUTMV0900

MARUTMV0100	EQU	$
		LDY	#00EH

MARUTMV0110	EQU	$
		LDA	EWORK0,Y
		BEQ	MARUTMV0130
		CMP	#00008
		BPL	MARUTMV0120

		LDA	#00008

MARUTMV0120	EQU	$
		LSR	A
		LSR	A
		LSR	A
		EOR	#0FFFFH
		INC	A
		CLC
		ADC	EWORK0,Y
		STA	EWORK0,Y

MARUTMV0130	EQU	$
		DEY
		DEY
		BPL	MARUTMV0110

MARUTMV0180	EQU	$
		STZ	<ENWRK0,X

		JMP	MARUTMV0500

MARUTMV0200	EQU	$
		LDA	ENYSPD,X
		BEQ	MARUTMV0300

		LDY	#00EH

MARUTMV0210	EQU	$
		LDA	CCWORK0,Y
		SEC
		SBC	EWORK0,Y
		BMI	MARUTMV0220

		CMP	#08000H
		ROR	A
		CMP	#08000H
		ROR	A
		CLC
		ADC	EWORK0,Y
		STA	EWORK0,Y

MARUTMV0220	EQU	$
		DEY
		DEY
		BPL	MARUTMV0210
		BRA	MARUTMV0320

MARUTMV0300	EQU	$
		LDY	#00EH

MARUTMV0310	EQU	$
		LDA	CCWORK0,Y
		SEC
		SBC	EWORK0,Y
		CMP	#08000H
		ROR	A
		CMP	#08000H
		ROR	A
		CLC
		ADC	EWORK0,Y
		STA	EWORK0,Y

		DEY
		DEY
		BPL	MARUTMV0310

MARUTMV0320	EQU	$
		LDY	<ENWRK0,X		;前のフレームに乗ってた ?
		BNE	MARUTMV0400		; yes: MARUTMV0400

		LDA	PLYSPD
		LSR	A
		LSR	A
		LSR	A
		LSR	A
		STA	<ENWRK4,X

		LDY	PLDOSN			;ずしん ?
		BEQ	MARUTMV0400

		LDA	PLYSPD
		LSR	A
		STA	ENYSPD,X

MARUTMV0400	EQU	$
		LDA	PLBGCR			;プレイヤー地面に着いてる ?
		AND	#00003			;
		BNE	MARUTMV0500		; yes: MARUTMV0500

		LDA	CCWORK10
		AND	#0FFFEH
		TAY
		LDA	EWORK0,Y
		CLC
		ADC	ENYPSL,X
		SEC
		SBC	#0001EH			;20H-2
		SEC
		SBC	PLFTLN
		STA	PLYPSL

		STZ	PLYSPD

		INC	ONLFFG

		LDY	#002
		STY	<ENWRK0,X

		LDA	ENYSPD,X
		BEQ	MARUTMV0500

 IF PAL	   ;*** PAL 対応 [1995/7/20] ******************
		LDA	#00914H
		STA	PLYSPD
 ELSE	   ;*** JPN/NES 対応 [1995/6/30] **************
		LDA	#00800H
		STA	PLYSPD
 ENDIF	   ;*** PAL 対応 [1995/7/20] ******************

MARUTMV0500	EQU	$
		LDA	ENYSPD,X
		BEQ	MARUTMV0600

		LDA	<ENWRK4,X
		CLC
		ADC	#00004
		BRA	MARUTMV0800

MARUTMV0600	EQU	$
		LDA	<ENWRK4,X
		SEC
		SBC	#00008H
		BPL	MARUTMV0800

		LDA	#00000

MARUTMV0800	EQU	$
		STA	<ENWRK4,X

MARUTMV0900	EQU	$
		M8
		LDA	<EWORK0
		STA	ENWRK6,X
		LDA	<EWORK2
		STA	ENWRK7,X
		LDA	<EWORK4
		STA	ENWRK8,X
		LDA	<EWORK6
		STA	ENWRK9,X
		LDA	<EWORK8
		STA	ENWRKA,X
		LDA	<EWORKA
		STA	ENWRKB,X
		LDA	<EWORKC
		STA	ENWRKC,X
		LDA	<EWORKE
		STA	ENWRKD,X
		M16

		RTL
;
;
;
		END
