		ORG	32768
		LD	A,2
		CALL	5633		;   
		LD	A,7
		LD	(23693),A	;ATTR_P
		
		LD	HL,(23670)
		LD	(RND_VAL),HL
		CALL	MAIN_CYCLE
		RET


;-------------------
LEVELS_ADDR	EQU	#C000
LEVEL_ADR	DEFW	0

;-------------------
T_COORD		DEFW	0
T_SPR_ADR	DEFW	0
T_MAS_ADR	DEFW	0
T_SPR_W		DEFB	0
T_SPR_H		DEFB	0
T_DIRECT	DEFB	0	; 
T_ACTIVE	DEFB	0
T_LIVES		DEFB	0
T_POWER		DEFB	0
T_VISIBLE	DEFB	0
T_BLINK_TIMER	DEFB	0
T_PROTECT_TIMER	DEFB	0
T_SLIP_TIMER	DEFB	0
T_COL_SHOT	DEFB	0
T_SH_TIMER	DEFB	0
T_FASE		DEFB	0
;-------------------

T_SH_COORD	EQU	0
T_SH_DIRECT	EQU	2
T_SH_ACTIVE	EQU	3
T_SH_SPEED	EQU	4

T_SH_LEN	EQU	5
T_SHOT		DEFS	10	;  

;-------------------
E_COORD		EQU	0	; 
E_SPR_H		EQU	2	;   
E_SPR_W		EQU	3	;   
E_SPR_ADR	EQU	4	;   
E_MAS_ADR	EQU	6	;   
E_DIRECT	EQU	8	; 
E_HP		EQU	9	;  
E_SH_COORD	EQU	10
E_SH_DIRECT	EQU	12
E_SH_ACTIVE	EQU	13
E_BONUSED	EQU	14
E_VISIBLE	EQU	15
E_BLINK_TIMER	EQU	16
E_TYPE		EQU	17
E_SPRITE	EQU	18
E_FASE		EQU	20

E_COUNT		EQU	3

ENEMY_LEN	EQU	25	;    
ENEMY		DEFS	75	; 

L_ECOUNT	DEFB	7,3,1,6
STAGE_NUM	DEFB	0
SCORE		DEFW	0	
HI_SCORE	DEFW	200
;-------------------
B_COORD		DEFW	0
B_OLD_COORD	DEFW	0
B_SPR_ADR	DEFW	0
B_ACTIVE	DEFB	0
B_INDEX		DEFB	0
B_VISIBLE	DEFB	0
B_BLINK_TIMER	DEFB	0


STOP_TIMER	DEFB	0
SPAWN_POS	DEFB	0
ENEMY_COUNT	DEFB	0
BASE_DAMAGED	DEFB	0
BONUS_COUNTER	DEFB	0	
IS_ICE		DEFB	0
IS_KEMPSTON	DEFB	0
DEFICULT	DEFB	0

BLINK_TIME	EQU	3

L_END_TIMER	DEFB	0	;   	

;--------------------------
W_COORD		DEFW	0
W_SPRADR	DEFW	0
W_SPRW		DEFB	0
W_SPRH		DEFB	0

U_PRESSED	DEFB	0
D_PRESSED	DEFB	0
L_PRESSED	DEFB	0
R_PRESSED	DEFB	0
F_PRESSED	DEFB	0


U_PORT		DEFB	#FB	;    
D_PORT		DEFB	#FD	;  
L_PORT		DEFB	#FD
R_PORT		DEFB	#FD
F_PORT		DEFB	#BF

;--------------------------
SELECT_T_SPRITE
	LD	A,(T_POWER)
	LD	HL,T1
	CP	0
	JR	Z,STS_END
	LD	HL,T2
	CP	1
	JR	Z,STS_END
	LD	HL,T3
	CP	2
	JR	Z,STS_END
	LD	HL,T4

STS_END	LD	DE,T_SPRITE_1
	CALL	FILL_SPRITE
	RET

;--------------------------
SELECT_E_SPRITE
	LD	A,(IX+E_TYPE)
	LD	HL,E1
	CP	0
	JR	Z,SES_END
	LD	HL,E2
	CP	1
	JR	Z,SES_END
	LD	HL,E3
	CP	2
	JR	Z,SES_END
	LD	HL,E4

SES_END	LD	E,(IX+E_SPRITE)
	LD	D,(IX+E_SPRITE+1)
	CALL	FILL_SPRITE
	RET
;--------------------------
REDEFINE_KEYS
		LD	DE,TXT_LEFT
		LD	HL,#0A10
		CALL	PRINT
		CALL	WAIT_UNPRESSED_KEY	;  

		; 
		CALL	WAIT_PRESS_KEY
		LD	A,(HL)
		LD	(L_PORT),A
		LD	A,(DE)
		LD	(L_BIT+1),A
		CALL	WAIT_UNPRESSED_KEY	;  

		LD	DE,TXT_RIGHT
		LD	HL,#0A10
		CALL	PRINT

		; 
		CALL	WAIT_PRESS_KEY
		LD	A,(HL)
		LD	(R_PORT),A
		LD	A,(DE)
		LD	(R_BIT+1),A
		CALL	WAIT_UNPRESSED_KEY

		LD	DE,TXT_UP
		LD	HL,#0A10
		CALL	PRINT

		; 
		CALL	WAIT_PRESS_KEY
		LD	A,(HL)
		LD	(U_PORT),A
		LD	A,(DE)
		LD	(U_BIT+1),A
		CALL	WAIT_UNPRESSED_KEY

		LD	DE,TXT_DOWN
		LD	HL,#0A10
		CALL	PRINT

		; 
		CALL	WAIT_PRESS_KEY
		LD	A,(HL)
		LD	(D_PORT),A
		LD	A,(DE)
		LD	(D_BIT+1),A
		CALL	WAIT_UNPRESSED_KEY

		LD	DE,TXT_FIRE
		LD	HL,#0A10
		CALL	PRINT

		; 
		CALL	WAIT_PRESS_KEY
		LD	A,(HL)
		LD	(F_PORT),A
		LD	A,(DE)
		LD	(F_BIT+1),A
		CALL	WAIT_UNPRESSED_KEY

		LD	DE,MENU_2
		LD	HL,#0610
		CALL	PRINT

		RET


TXT_LEFT	DEFM	"PRESS LEFT KEY "
		DEFB	0
TXT_RIGHT	DEFM	"PRESS RIGHT KEY"
		DEFB	0
TXT_UP		DEFM	"PRESS UP KEY   "
		DEFB	0
TXT_DOWN	DEFM	"PRESS DOWN KEY "
		DEFB	0
TXT_FIRE	DEFM	"PRESS FIRE KEY "
		DEFB	0

;--------------------------
IS_KEY
		LD	HL,KEY_PORTS

		LD	B,8	;8 
IK_NP		LD	A,(HL)
		IN	A,(254)
		AND	31
		XOR	31
		RET	NZ	;-  

		INC	HL
		DJNZ	IK_NP
		RET	;    

;--------------------------
WAIT_UNPRESSED_KEY
		LD	HL,KEY_PORTS

		LD	B,8	;8 
WKP_NP		LD	A,(HL)
		IN	A,(254)
		AND	31
		CP	31
		JR	NZ,WAIT_UNPRESSED_KEY	; .
		INC	HL
		DJNZ	WKP_NP
		RET	;    


;--------------------------
WAIT_PRESS_KEY
		LD	HL,KEY_PORTS
		LD	B,8	;8 
		
DK_NP		LD	A,(HL)
		IN	A,(254)

		PUSH	AF
		LD	A,#FE
		CP	(HL)
		JR	NZ,WAKP_0
		POP	AF
		OR	1		;CAPS SHIFT -  
		JR	WAKP_1
WAKP_0		POP	AF
WAKP_1
		LD	C,5	;5 
		LD	DE,BIT_HALFCODE

NEXT_BIT	RRA
		RET	NC	; .  (HL) ,  (DE) 
		INC	DE
		DEC	C
		JR	NZ,NEXT_BIT

		INC	HL
		DJNZ	DK_NP
		JR	WAIT_PRESS_KEY	;    

BIT_0		EQU	#47	;   BIT 0,A  BIT 4,A
BIT_1		EQU	#4F
BIT_2		EQU	#57
BIT_3		EQU	#5F
BIT_4		EQU	#67

KEY_PORTS	DEFB	#7F,#BF,#DF,#EF,#F7,#FB,#FD,#FE		; 8  
BIT_HALFCODE	DEFB	#47,#4F,#57,#5F,#67


;--------------------------
PRINT
		CALL	ADR

PRNT_1		PUSH	DE
		PUSH	HL

		LD	A,H         ;    
		AND	#18
		RRCA
		RRCA
		RRCA
		ADD	A,#58
		LD	H,A
		LD	A,(COLOR)
		LD	(HL),A

		LD	A,(DE)		;  
		LD	L,A
		LD	H,0
		ADD	HL,HL
		ADD	HL,HL
		ADD	HL,HL
		LD	DE,(23606)
		ADD	HL,DE		;  

		POP	DE
		PUSH	DE

		LD	B,8
PRNT_0		LD	A,(HL)
		SRL	A
		OR	(HL)		; 
		LD	(DE),A		;  
		INC	HL
		INC	D
		DJNZ	PRNT_0

		POP	HL
		POP	DE
		INC	HL
		INC	DE

		LD	A,(DE)
		AND	A
		RET	Z		;,     0

		JR	PRNT_1
COLOR	DEFB	0
;--------------------------
START_MELODY
	DI
	LD	HL,MELODY
NOTE	LD	D,(HL)
	INC	HL
	LD	E,(HL)
	INC	HL
	LD	A,E
	OR	D
	JR	Z,END_MELODY
	PUSH	HL
	CALL	TWOTON
	POP	HL
	JR	NOTE
END_MELODY
	EI
	RET
MELODY
	DEFB	226,225
	DEFB	201,0
	DEFB	190,0

	DEFB	226,225
	DEFB	201,227
	DEFB	190,225

	DEFB	190,191
	DEFB	169,0
	DEFB	150,0

	DEFB	190,189
	DEFB	169,191
	DEFB	150,189

	DEFB	169,170
	DEFB	150,0
	DEFB	142,0

	DEFB	169,170
	DEFB	150,170
	DEFB	142,170

	DEFB	142,143
	DEFB	126,143
	DEFB	113,143

	DEFB	142,125
	DEFB	126,125
	DEFB	113,125

	DEFB	113,114
	DEFB	113,0
	DEFB	113,0
	DEFB	113,114
	DEFB	113,114
	DEFB	113,114
	DEFB	113,114

	DEFB	0,0

;------------------------------
TWOTON

	LD	BC,5000		; 
	LD	A,(23624)
	AND	#38
	RRA
	RRA
	RRA
	LD	H,D
	LD	L,E

TWOTN1	INC	H           
	DEC	H
	JR	Z,TWOTN2
	DEC	H		;    
	JR	NZ,TWOTN2
	XOR	16
	OUT	(254),A		;  
	LD	H,D		;     
TWOTN2	INC	H           
	DEC	H
	JR	Z,TWOTN22
	DEC	L		;    
	JR	NZ,TWOTN22
	XOR	16
	OUT	(254),A		;  
	LD	L,E		;     
TWOTN22	PUSH	AF
	LD	A,B		;  
	OR	C
	JR	Z,TWOTN3
	POP	AF
	DEC	BC
	JR	TWOTN1
TWOTN3	POP	AF
	
	RET

;-------------------
INTERR	PUSH	AF          ; 
	PUSH	BC          ;   
	PUSH	HL
INTER1	LD	A,(REPEAT)
	AND	A
	;      ,   
	JR	NZ,NO_EXITI
	LD	(BLOCKED),A
	JR	EXITI
NO_EXITI
	LD	HL,(CURADR) ;     
	LD	B,(HL)      ; 
	INC	B
	DEC	B
	;      ,    
	JR	Z,EXITI0
	INC	HL
	LD	C,(HL)      ; 
	INC	HL
	LD	(CURADR),HL ;  
	CALL	BEEP        ; 
EXITI
	POP	HL          ; 
	POP	BC
	POP	AF
	JP	56          ;    
	;     - 
EXITI0	LD	HL,(ADREFF) ; 
	LD	(CURADR),HL ;   
	LD	HL,REPEAT
	DEC	(HL)        ;  
	JR	INTER1
REPEAT	DEFB	0           ;  
ADREFF	DEFW	0           ;    
CURADR	DEFW	0           ;    
BLOCKED	DEFB	0
	;  
BEEP	LD	A,(23624)
	SRL	A
	SRL	A
	SRL	A
BEEP1	XOR	16
	OUT	(254),A
	PUSH	BC
DELAY	DJNZ	DELAY
	POP	BC
	DEC	C
	JR	NZ,BEEP1
	RET

;-------------------------
ON_SILENCE
	XOR	A
	JR	ON_EFF

ON_SHOT_SOUND
	LD	A,(BLOCKED)
	CP	0
	RET	NZ	;   
	LD	HL,EFF1
	LD	A,1
	JR	ON_EFF
ON_CRASH_SOUND
	LD	A,(BLOCKED)
	CP	0
	RET	NZ	;   
	LD	A,1
	LD	(BLOCKED),A
	LD	HL,EFF2
	LD	A,2
	JR	ON_EFF
ON_ADD_LIVE_SOUND
	LD	A,(BLOCKED)
	CP	0
	RET	NZ	;   
	LD	A,1
	LD	(BLOCKED),A
	LD	HL,EFF3
	LD	A,1
	JR	ON_EFF

ON_BONUS_SOUND
	LD	A,(BLOCKED)
	CP	0
	RET	NZ	;   
	LD	A,1
	LD	(BLOCKED),A
	LD	HL,EFF4
	LD	A,2
	JR	ON_EFF

ON_CLANG_SOUND
	LD	A,(BLOCKED)
	CP	0
	RET	NZ	;   
	LD	A,1
	LD	(BLOCKED),A
	LD	HL,EFF5
	LD	A,1
	JR	ON_EFF

ON_EFF  LD	(ADREFF),HL
	LD	(CURADR),HL
	LD	(REPEAT),A
	RET
EFF1	DEFB	50,12,100,6,150,4,200,2,250,2
	DEFB	0
EFF2	DEFB	50,2,100,2,25,2,46,2,215,2
	DEFB	0
EFF3	DEFB	60,6,60,6,60,6,60,6,60,6
	DEFB	80,6,80,6,80,6,80,6,80,6
	DEFB	100,6,100,6,100,6,100,6,100,6
	DEFB	120,6,120,6,120,6,120,6,120,6
	DEFB	100,6,100,6,100,6,100,6,100,6
	DEFB	60,6,60,6,60,6,60,6,60,6
	DEFB	70,6,70,6,70,6,70,6,70,6
	DEFB	0
EFF4	DEFB	250,4,200,4,150,4,100,4,50,4
	DEFB	0
EFF5	DEFB	80,4,70,4,60,5,50,5
	DEFB	0

;-------------------
IMON
	CALL	SET_VIDEO5

	LD	A,195		;  JP
	LD	(49087),A
	LD	HL,INTERR	;   
	LD	(49088),HL

	LD	HL,48640	;   
	LD	DE,48641
	LD	BC,256
	LD	(HL),191		;  16705
	LD	A,H
	LDIR
	
	DI
	LD	I,A		;   
	IM	2		; 2- 
	EI
	RET

;---------------------------
FIRST_INIT
	LD	HL,0
	LD	(SCORE),HL

	LD	A,4
	LD	(T_LIVES),A

	LD	HL,LEVELS_ADDR
	LD	(LEVEL_ADR),HL

	XOR	A
	LD	(BASE_DAMAGED),A
	LD	(T_PROTECT_TIMER),A
	LD	A,0
	LD	(T_POWER),A
	
	LD	A,1
	LD	(T_COL_SHOT),A

	LD	IX,T_SHOT
	LD	(IX+T_SH_ACTIVE),0
	LD	IX,T_SHOT+T_SH_LEN
	LD	(IX+T_SH_ACTIVE),0

	LD	DE,ENEMY_LEN
	LD	IX,ENEMY

	LD	HL,E_SPRITE_1
	LD	(IX+E_SPRITE),L
	LD	(IX+E_SPRITE+1),H
	ADD	IX,DE

	LD	HL,E_SPRITE_2
	LD	(IX+E_SPRITE),L
	LD	(IX+E_SPRITE+1),H
	ADD	IX,DE

	LD	HL,E_SPRITE_3
	LD	(IX+E_SPRITE),L
	LD	(IX+E_SPRITE+1),H

	RET

;----------------------------
MAIN_CYCLE
	CALL	ON_SILENCE
	CALL	IMON

	CALL	FIRST_SCREEN
	CALL	FIRST_INIT

M_C0
	;  
	LD	HL,(LEVEL_ADR)
	LD	A,H
	OR	L
	CP	0
	JR	NZ,M_C1

	CALL	DEC_L_TIMER
	JR	NZ,M_C1

	CALL	VIN_SCREEN
	JR	MAIN_CYCLE
M_C1

	CALL	INIT_LEVEL
M_CGC	CALL	GAME_CYCLE

	; 
	LD	A,(T_LIVES)
	CP	0
	JR	NZ,M_C2
	LD	A,(T_ACTIVE)
	CP	0
	JR	NZ,M_C2

	CALL	DEC_L_TIMER
	JR	NZ,M_C2


	CALL	GAME_OVER_SCREEN
	JR	MAIN_CYCLE
M_C2

	;  
	LD	A,(BASE_DAMAGED)
	CP	0
	JR	Z,M_C21

	CALL	DEC_L_TIMER
	JR	NZ,M_C21

	CALL	GAME_OVER_SCREEN
	JR	MAIN_CYCLE
M_C21
	
	;  
	LD	A,(ENEMY_COUNT)
	CP	0
	JR	NZ,M_C3
	LD	IX,ENEMY
	LD	DE,ENEMY_LEN
	LD	A,(IX+E_HP)
	CP	0
	JR	NZ,M_C3
	ADD	IX,DE
	LD	A,(IX+E_HP)
	CP	0
	JR	NZ,M_C3
	ADD	IX,DE
	LD	A,(IX+E_HP)
	CP	0
	JR	NZ,M_C3

	CALL	DEC_L_TIMER
	JR	NZ,M_C3

	CALL	ENDLEVEL_SCREEN
	JR	M_C0
M_C3
	JR	M_CGC
DEC_L_TIMER
	LD	A,(L_END_TIMER)
	DEC	A
	LD	(L_END_TIMER),A
	OR	A
	RET
;----------------------------
GAME_CYCLE
	CALL	PRINT_FON
	CALL	INIT_PLAYER
	CALL	INIT_EMPTY_ENEMY

	CALL	KEY_TEST

	CALL	T_ACTION
	CALL	E_ACTION
	CALL	T_SHOT_MOVE
	CALL	E_SHOT_MOVE

	CALL	PRINT_ENEMYS
	CALL	PRINT_PLAYER
	CALL	PRINT_T_SHOT
	CALL	PRINT_E_SHOT
	CALL	PRINT_BONUS
	CALL	PRINT_LIVES
	CALL	SWAP_SCREEN

	RET
;--------------------------
SCROLL_SCREEN
	LD	A,(IX)
	LD	HL,SCROL_COLOR
	CP	1
	JR	Z,SS0
	LD	HL,SCROL_DEF
SS0	LD	(S8B_CF+1),HL
	INC	IX

	LD	A,(IX)
	LD	(SSCOL+1),A
	INC	IX

	LD	A,(IX)
	LD	(SSBCNT+1),A
	INC	IX

	LD	A,(IX)
	LD	(SSSCNT+1),A
	INC	IX

	LD	B,(IX)
	INC	IX
SS1	PUSH	BC

	LD	L,23
SSCOL	LD	H,0
	CALL	ADR

SSBCNT	LD	B,0
SS2	PUSH	BC

	LD	C,8	
SS3	RLC	(IX)
	JR	NC,SS5

	PUSH	HL
	LD	DE,SPR_C1
	LD	B,8
SS4	LD	A,(DE)
	LD	(HL),A
	INC	H
	INC	DE
	DJNZ	SS4
	POP	HL

SS5	INC	HL
	DEC	C
	JR	NZ,SS3

	INC	IX
	POP	BC
	DJNZ	SS2

	LD	B,8
	CALL	SCRU_8B

	POP	BC
	DJNZ	SS1

SSSCNT	LD	B,0
	CALL	SCRU_8B

	RET
;---------------------------
SCRU_8B	PUSH	BC
S8B_CF	CALL	0
	CALL	SCROLL_UP
	POP	BC
	DJNZ	SCRU_8B
	RET
;---------------------------
SCROL_COLOR
	LD	A,(#D800)
	LD	HL,#D801
	LD	DE,#D800
	LD	BC,735
	LDIR
	LD	(#DADF),A
	RET
SCROL_DEF
	RET
;---------------------------
GAME_OVER_SCREEN
	CALL	SET_VIDEO5

	LD	A,%00000010
	LD	B,0
	CALL	CLS

	LD	A,6
	LD	(COL),A
	LD	A,6
	LD	(ROW),A
	LD	A,20
	LD	(WDT),A
	LD	A,18
	LD	(HGT),A

	LD	DE,#DAE1
	LD	HL,#DAE0
	LD	(HL),0
	LD	BC,31
	LDIR
	
	LD	IX,GAME_OVER_TEXT
	CALL	SCROLL_SCREEN

	CALL	WAIT_PRESS_KEY

	RET

;---------------------------
VIN_SCREEN
	CALL	SET_VIDEO5

	LD	A,%00000000
	LD	B,0
	CALL	CLS

	LD	HL,#D800
	LD	BC,736
V_S0	PUSH	HL
	PUSH	BC
	CALL	RND_255
	AND	71
	POP	BC
	POP	HL
	LD	(HL),A
	INC	HL
	DEC	BC
	LD	A,B
	OR	C
	JR	NZ,V_S0

	LD	A,8
	LD	(COL),A
	LD	A,6
	LD	(ROW),A
	LD	A,15
	LD	(WDT),A
	LD	A,18
	LD	(HGT),A

	LD	IX,VIN_TEXT
	CALL	SCROLL_SCREEN

V_S7	CALL	SCROL_COLOR
	CALL	IS_KEY
	CP	0
	JR	Z,V_S7

	RET
;---------------------------
FIRST_SCREEN
	CALL	SET_VIDEO5

	LD	A,%00000010
	LD	B,0
	CALL	CLS

	LD	A,7
	LD	(COL),A
	LD	A,3
	LD	(ROW),A
	LD	A,18
	LD	(WDT),A
	LD	A,21
	LD	(HGT),A

	LD	DE,#DAE1
	LD	HL,#DAE0
	LD	(HL),0
	LD	BC,31
	LDIR
	
	LD	IX,FIRST_TEXT
	CALL	SCROLL_SCREEN

	LD	A,7
	LD	(COLOR),A

	LD	DE,MENU_1
	LD	HL,#060E
	CALL	PRINT
	LD	DE,MENU_2
	LD	HL,#0610
	CALL	PRINT
	LD	DE,MENU_3
	LD	HL,#0612
	CALL	PRINT
	LD	DE,MENU_4
	LD	HL,#0614
	CALL	PRINT


F_WKP	LD	DE,T_OFF
	LD	HL,#1312
	LD	A,(IS_KEMPSTON)
	CP	0
	JR	Z,KEMP
	LD	DE,T_ON
KEMP	CALL	PRINT

F_DEF	LD	DE,TDEF_1
	LD	HL,#1514
	LD	A,(DEFICULT)
	CP	0
	JR	Z,DEFI
	LD	DE,TDEF_2
	CP	1
	JR	Z,DEFI
	LD	DE,TDEF_3

DEFI	CALL	PRINT

	CALL	WAIT_PRESS_KEY

	LD	A,(HL)
	CP	#F7		;   1...5
	JR	NZ,F_WKP

	LD	A,(DE)
	CP	BIT_0		; 1
	RET	Z

	PUSH	AF
	CP	BIT_1		; 2
	CALL	Z,REDEFINE_KEYS
	POP	AF

	PUSH	AF
	CP	BIT_2		; 3
	CALL	Z,CHANGE_KAMPSTON
	POP	AF

	CP	BIT_3		; 4
	CALL	Z,INC_DEFIC
	
	JR	F_WKP

MENU_1	DEFM	"1 - START DESTRUCTION"
	DEFB	0
MENU_2	DEFM	"2 - REDEFINE KEYS  "
	DEFB	0
MENU_3	DEFM	"3 - KEMPSTON"
	DEFB	0
MENU_4	DEFM	"4 - DIFFICULTY"
	DEFB	0
T_OFF	DEFM	"OFF"
	DEFB	0
T_ON	DEFM	"ON "
	DEFB	0
TDEF_1	DEFM	"EASY  "
	DEFB	0
TDEF_2	DEFM	"NORMAL"
	DEFB	0
TDEF_3	DEFM	"HARD  "
	DEFB	0

;---------------------------
ENDLEVEL_SCREEN
	CALL	SET_VIDEO5
	LD	A,%00000111
	LD	B,0
	CALL	CLS

	LD	A,2
	LD	(COLOR),A

	LD	HL,(HI_SCORE)
	LD	DE,(SCORE)
	AND	A
	SBC	HL,DE
	JR	NC,NO_HISCORE
	LD	(HI_SCORE),DE

NO_HISCORE

	LD	DE,ELS_1
	LD	HL,#0800
	CALL	PRINT

	LD	DE,ELS_3
	LD	HL,#0304
	CALL	PRINT

	LD	A,7
	LD	(COLOR),A

	LD	DE,ELS_2
	LD	HL,#0C02
	CALL	PRINT

	

	LD	DE,ELS_4
	LD	HL,#0808
	CALL	PRINT
	LD	DE,ELS_4
	LD	HL,#080B
	CALL	PRINT
	LD	DE,ELS_4
	LD	HL,#080E
	CALL	PRINT
	LD	DE,ELS_4
	LD	HL,#0811
	CALL	PRINT
	LD	DE,ELS_5
	LD	HL,#0C13
	CALL	PRINT
	LD	DE,ELS_6
	LD	HL,#0614
	CALL	PRINT

	

	LD	HL,ENEMY1_UP1
	LD	(W_SPRADR),HL
	LD	A,2
	LD	(W_SPRW),A
	LD	A,16
	LD	(W_SPRH),A
	LD	A,MOD_OR
	LD	(MODE),A

	LD	HL,#7840
	LD	(W_COORD),HL
	LD	HL,E1
	LD	DE,E_SPRITE_1
	CALL	FILL_SPRITE
	CALL	PRINT_SPRITE

	LD	HL,#7858
	LD	(W_COORD),HL
	LD	HL,E2
	LD	DE,E_SPRITE_1
	CALL	FILL_SPRITE
	CALL	PRINT_SPRITE

	LD	HL,#7870
	LD	(W_COORD),HL
	LD	HL,E3
	LD	DE,E_SPRITE_1
	CALL	FILL_SPRITE
	CALL	PRINT_SPRITE

	LD	HL,#7888
	LD	(W_COORD),HL
	LD	HL,E4
	LD	DE,E_SPRITE_1
	CALL	FILL_SPRITE
	CALL	PRINT_SPRITE

	LD	A,17
	RST	16
	XOR	A
	RST	16

	LD	A,16
	RST	16
	LD	A,6
	RST	16

	LD	DE,PTS_HISCORE
	LD	BC,3
	CALL	8252        ; 
	LD	BC,(HI_SCORE)
	CALL	6683	
	LD	BC,0
	CALL	6683
	LD	BC,0
	CALL	6683
	
	LD	DE,PTS_SCORE
	LD	BC,3
	CALL	8252        ; 
	LD	BC,(SCORE)
	PUSH	BC
	CALL	6683
	POP	BC
	LD	A,B
	OR	C
	JR	Z,SCORE_NODBL
	LD	BC,0
	CALL	6683
	LD	BC,0
	CALL	6683
SCORE_NODBL
	LD	A,16
	RST	16
	LD	A,7
	RST	16
	

	LD	HL,L_ECOUNT
	LD	(CNT_ADR),HL
	LD	HL,PTS_11
	LD	(PTS_1ADR),HL
	LD	HL,PTS_12
	LD	(PTS_2ADR),HL
	LD	DE,1
	CALL	PRINT_PTS

	LD	HL,L_ECOUNT+1
	LD	(CNT_ADR),HL
	LD	HL,PTS_21
	LD	(PTS_1ADR),HL
	LD	HL,PTS_22
	LD	(PTS_2ADR),HL
	LD	DE,2
	CALL	PRINT_PTS

	LD	HL,L_ECOUNT+2
	LD	(CNT_ADR),HL
	LD	HL,PTS_31
	LD	(PTS_1ADR),HL
	LD	HL,PTS_32
	LD	(PTS_2ADR),HL
	LD	DE,3
	CALL	PRINT_PTS

	LD	HL,L_ECOUNT+3
	LD	(CNT_ADR),HL
	LD	HL,PTS_41
	LD	(PTS_1ADR),HL
	LD	HL,PTS_42
	LD	(PTS_2ADR),HL
	LD	DE,4
	CALL	PRINT_PTS


	LD	A,22
	RST	16
	LD	A,20
	RST	16
	LD	A,12
	RST	16

	LD	A,0
	LD	HL,L_ECOUNT
	ADD	A,(HL)
	INC	HL
	ADD	A,(HL)
	INC	HL
	ADD	A,(HL)
	INC	HL
	ADD	A,(HL)
	LD	C,A
	LD	B,0
	CALL	6683
	CALL	ON_BONUS_SOUND

	CALL	WAIT_UNPRESSED_KEY
	CALL	WAIT_PRESS_KEY
	RET
ELS_1	DEFM	"HI-SCORE"
	DEFB	0
ELS_2	DEFM	"STAGE"
	DEFB	0
ELS_3	DEFM	"1-PLAYER"
	DEFB	0
ELS_4	DEFM	"PTS"
	DEFB	0
ELS_5	DEFM	"________"
	DEFB	0
ELS_6	DEFM	"TOTAL"
	DEFB	0

;--------------------------
PRINT_PTS
	LD	HL,(CNT_ADR)
	LD	A,(HL)
	INC	A
	LD	(BCNT1+1),A
	LD	(BCNT2+1),A

	LD	HL,0
BCNT1	LD	B,0
ES_C1	PUSH	BC
	PUSH	DE
	PUSH	HL
	PUSH	HL

	PUSH	BC
	LD	DE,(PTS_2ADR)
	LD	BC,3
	CALL	8252        ;  
	POP	BC
BCNT2	LD	A,0
	SUB	B
	LD	C,A
	LD	B,0
	CALL	6683
	
	LD	DE,(PTS_1ADR)
	LD	BC,3
	CALL	8252        ;  
	POP	BC
	PUSH	BC
	CALL	6683
	POP	BC
	LD	A,B
	OR	C
	JR	Z,NODBL
	LD	BC,0
	CALL	6683
	LD	BC,0
	CALL	6683
NODBL
	CALL	ON_CLANG_SOUND

	LD	BC,20000
ES_DLY	DEC	BC
	LD	A,B
	OR	C
	JR	NZ,ES_DLY

	POP	HL
	POP	DE
	POP	BC

	ADD	HL,DE
	DJNZ	ES_C1
	RET

CNT_ADR		DEFW	0
PTS_1ADR	DEFW	0
PTS_2ADR	DEFW	0
PTS_11		DEFB	22,8,3
PTS_12		DEFB	22,8,12
PTS_21		DEFB	22,11,3
PTS_22		DEFB	22,11,12
PTS_31		DEFB	22,14,3
PTS_32		DEFB	22,14,12
PTS_41		DEFB	22,17,3
PTS_42		DEFB	22,17,12
PTS_HISCORE	DEFB	22,0,19
PTS_SCORE	DEFB	22,6,5

;--------------------------

GAME_OVER_TEXT
	DEFB	0,4,3,48,11
	DEFB	%00011100,%11001000,%10111100
	DEFB	%00100001,%00101000,%10100000
	DEFB	%00101101,%11101101,%10111100
	DEFB	%00100101,%00101010,%10100000
	DEFB	%00011001,%00101000,%10111100
	DEFB	%00000000,%00000000,%00000000
	DEFB	%00011001,%00010111,%10111000
	DEFB	%00100101,%00010100,%00100100
	DEFB	%00100101,%00010111,%10111000
	DEFB	%00100100,%10100100,%00100100
	DEFB	%00011000,%01000111,%10100100

VIN_TEXT
	DEFB	1,8,2,48,11
	DEFB	%10001001,%10010010
	DEFB	%01010010,%01010010
	DEFB	%00100010,%01010010
	DEFB	%00100010,%01010010
	DEFB	%00100001,%10001100
	DEFB	%00000000,%00000000
	DEFB	%10001011,%10100010
	DEFB	%10001001,%00110010
	DEFB	%10101001,%00101010
	DEFB	%11011001,%00100110
	DEFB	%10001011,%10100010

FIRST_TEXT
	DEFB	0,4,3,80,10
	DEFB	%00011100,%11001001,%01001000
	DEFB	%00001001,%00101101,%01110000
	DEFB	%00001001,%11101011,%01001000
	DEFB	%00001001,%00101001,%01001000
	DEFB	%00000000,%00000000,%00000000
	DEFB	%00000101,%11101111,%01111000
	DEFB	%00001101,%00101001,%01001000
	DEFB	%00010101,%11101111,%01001000
	DEFB	%00000100,%00100001,%01001000
	DEFB	%00000101,%11101111,%01111000

;---------------------------
CHANGE_KAMPSTON
	LD	A,(IS_KEMPSTON)
	XOR	1
	LD	(IS_KEMPSTON),A
	CALL	WAIT_UNPRESSED_KEY
	RET

;---------------------------
INC_DEFIC
	LD	A,(DEFICULT)
	INC	A
	CP	3
	JR	NZ,CH_D1
	LD	A,0
CH_D1	LD	(DEFICULT),A

	CALL	WAIT_UNPRESSED_KEY
	RET
;---------------------------
SCROLL_UP 
       LD    HL,(ROW)
       CALL  ADR
       
       
       LD    A,(HGT)
       LD    B,A
       SLA   B
       SLA   B
       SLA   B     
       DEC   B

SCR_U1 PUSH  HL
       PUSH  BC

       PUSH  HL
       POP   DE
       CALL  DOWN
       LD    A,(WDT)
       LD    C,A
       LD    B,0
       LDIR

       POP   BC
       POP   HL
       CALL  DOWN
       DJNZ  SCR_U1
       
       PUSH  HL
       POP   DE
       INC   DE
       LD    (HL),0
       LD    A,(WDT)
       DEC   A
       RET   Z
       LD    C,A
       LD    B,0
       LDIR 


       RET
ROW    DEFB  0
COL    DEFB  0
HGT    DEFB  0
WDT    DEFB  0

;---------------
PRINT_LIVES

	LD	L,15
	LD	H,27
	CALL	ADR
	LD	DE,MINI

	LD	B,8
P_LI1	LD	A,(DE)
	LD	(HL),A
	INC	DE
	INC	H
	DJNZ	P_LI1

	LD	HL,(T_LIVES)
	LD	H,0
	DEC	L
	SLA	L
	SLA	L
	SLA	L
	LD	DE,15744
	ADD	HL,DE

	EX	DE,HL

	LD	L,15
	LD	H,28
	CALL	ADR

	LD	B,8
P_LI2	LD	A,(DE)
	LD	(HL),A
	INC	DE
	INC	H
	DJNZ	P_LI2	

	RET

;---------------
PRINT_MINI
	PUSH	IX
	PUSH	HL
       
	LD	IX,MINI_COORDS
	LD	C,1
NXTM	LD	L,(IX)
	LD	H,(IX+1)
	CALL	ADR

	LD	DE,MINI
	LD	B,8
NXTL	LD	A,(ENEMY_COUNT)
	CP	C
	JR	C,ZERO
	LD	A,(DE)
	JR	NOZERO
ZERO	XOR	A
NOZERO	LD	(HL),A
	INC	DE
	CALL	DOWN
	DJNZ	NXTL

	INC	IX
	INC	IX
	INC	C
	LD	A,21
	CP	C
	JR	NZ,NXTM

	POP	HL
	POP	IX

	RET

MINI_COORDS
	DEFB	1,27,1,28
	DEFB	2,27,2,28
	DEFB	3,27,3,28
	DEFB	4,27,4,28
	DEFB	5,27,5,28
	DEFB	6,27,6,28
	DEFB	7,27,7,28
	DEFB	8,27,8,28
	DEFB	9,27,9,28
	DEFB	10,27,10,28
MINI  
	DEFB	0,73,93,119,119,93,73,28

;---------------------------
BOX_COLLISION
       LD    A,(BOX_HL_W)
       ADD   A,H
       CP    D
       JR    NC,CLS16_1           
       XOR   A
       RET           ; X  
CLS16_1
       LD    A,(BOX_DE_W)
       ADD   A,D
       CP    H
       JR    NC,CLS16_2           
       XOR   A
       RET           ; X  

CLS16_2
       LD    A,(BOX_HL_H)
       ADD   A,L
       CP    E
       JR    NC,CLS16_3           
       XOR   A
       RET           ; Y  
CLS16_3
       LD    A,(BOX_DE_H)
       ADD   A,E
       CP    L
       JR    NC,CLS16_4           
       XOR   A
       RET           ; Y  
      
CLS16_4   
       LD    A,1
       RET
BOX_HL_H	DEFB	0
BOX_HL_W	DEFB	0
BOX_DE_H	DEFB	0
BOX_DE_W	DEFB	0 

;---------------------------
;    
EQUAL_IX_HL

	PUSH	IX
	POP	DE
 
	LD	A,D
	CP	H
	JR	Z,EIH_1           
	XOR	A
	RET
EIH_1
	LD	A,E
	CP	L
	JR	Z,EIH_2          
	XOR	A
	RET           
EIH_2	LD	A,1
	RET

;---------------------------
;  HL   
ENEMY_COLLISION
	; 
	LD	A,15
	LD	(BOX_DE_W),A
	LD	(BOX_DE_H),A

	LD	(CURRENT_COOR),HL
	PUSH	HL

	LD	HL,ENEMY
	LD	B,E_COUNT
CO_E1  
	LD	(ECOL_ADDR),HL
	CALL	EQUAL_IX_HL
	CP	1
	JR	Z,C_NEXT	;    

	PUSH	HL
	LD	DE,E_HP
	ADD	HL,DE
	LD	A,(HL)
	POP	HL
	CP	0
	JR	Z,C_NEXT	;   
       

	PUSH	HL
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	
	LD	HL,(CURRENT_COOR)

	CALL	BOX_COLLISION
	POP	HL
       
	CP	1    
	JR	Z,IS_COLLIZ	;     
       
C_NEXT 
	LD	DE,ENEMY_LEN
	ADD	HL,DE
	DJNZ	CO_E1

	XOR	A		;  
	POP	HL
	RET

IS_COLLIZ 
	LD	A,1		; 
	POP	HL
	RET

ECOL_ADDR
	DEFW	0
;---------------------------
CURRENT_COOR
	DEFW	0

;---------------------------
;  HL   
PLAYER_COLLISION
	LD	A,(T_ACTIVE)
	CP	0
	RET	Z	;   

	; 
	LD	A,15
	LD	(BOX_DE_W),A
	LD	(BOX_DE_H),A
	LD	DE,(T_COORD)
	
	CALL	BOX_COLLISION
	RET

;---------------------------
;  HL   
T_SHOT_COLLISION
	PUSH	IX

	LD	IX,T_SHOT
	LD	A,(T_COL_SHOT)
	LD	B,A
TSC_ALL	PUSH	BC


	LD	A,(IX+T_SH_ACTIVE)
	CP	0
	JR	Z,TSC_NEXT

	LD	A,6
	LD	(BOX_DE_W),A
	LD	(BOX_DE_H),A
	LD	E,(IX+T_SH_COORD)
	LD	D,(IX+T_SH_COORD+1)

	CALL	BOX_COLLISION
	CP	0
	JR	Z,TSC_NEXT
	;...................
	LD	(IX+T_SH_ACTIVE),0
	POP	BC
	POP	IX
	RET
	;...................
TSC_NEXT
	POP	BC
	LD	DE,T_SH_LEN
	ADD	IX,DE
	DJNZ	TSC_ALL

	POP	IX
	RET


;----------------------------
INIT_LEVEL
	LD	HL,0
	LD	(L_ECOUNT),HL
	LD	(L_ECOUNT+2),HL

	LD	A,150
	LD	(L_END_TIMER),A

	;  
	LD	IX,ENEMY
	LD	DE,ENEMY_LEN

	LD	B,E_COUNT
IL_EN
	LD	(IX+E_HP),0
	LD	(IX+E_SH_ACTIVE),0
	ADD	IX,DE
	DJNZ	IL_EN

	;  
	LD	IX,T_SHOT
	LD	(IX+T_SH_ACTIVE),0
	LD	IX,T_SHOT+T_SH_LEN
	LD	(IX+T_SH_ACTIVE),0

	;  
	XOR	A
	LD	(T_ACTIVE),A
	LD	(T_SH_ACTIVE),A

	LD	(BONUS_COUNTER),A
	LD	(B_ACTIVE),A

	; 
	LD	A,20
	LD	(ENEMY_COUNT),A

	;   
	CALL	BIND_BUF_0

	LD	DE,(LEVEL_ADR)
	; 
	LD	A,(DE)
	LD	(LEVEL_ADR),A
	INC	DE
	LD	A,(DE)
	LD	(LEVEL_ADR+1),A
	INC	DE

	; 
	LD	HL,LEVEL
L_I_NXT	LD	A,(DE)
	CP	0
	JR	Z,L_I_ENDLVL
	AND	248
	SRL	A
	SRL	A
	SRL	A
	LD	B,A
	LD	A,(DE)
	AND	7
L_I_IND	LD	(HL),A
	INC	HL
	DJNZ	L_I_IND
	INC	DE
	JR	L_I_NXT
L_I_ENDLVL

	;   
	LD	A,1
	LD	(LEVEL+557),A
	LD	(LEVEL+558),A
	LD	(LEVEL+559),A
	LD	(LEVEL+560),A
	LD	(LEVEL+583),A
	LD	(LEVEL+586),A
	LD	(LEVEL+609),A
	LD	(LEVEL+612),A
	LD	A,6
	LD	(LEVEL+584),A
	LD	A,7
	LD	(LEVEL+585),A
	LD	A,8
	LD	(LEVEL+610),A
	LD	A,9
	LD	(LEVEL+611),A

	;       
	CALL	SET_VIDEO5
	LD	B,5
	LD	A,0
	CALL	CLS
	CALL	CLOSE_WEIL
	CALL	COLORIZE_BUF
	CALL	PRINT_LEVEL

	CALL	START_MELODY

	CALL	OPEN_WEIL
	CALL	PRINT_MINI
	CALL	COLORIZE_RIGHT

	;         
	CALL	SWAP_SCREEN
	LD	B,5
	LD	A,40
	CALL	CLS
	CALL	COLORIZE_BUF
	CALL	COLORIZE_SCREEN
	CALL	PRINT_LEVEL
	CALL	PRINT_MINI

	RET

;---------------------------
;    
INIT_EMPTY_ENEMY
	LD	A,(ENEMY_COUNT)
	CP	0
	RET	Z	;,  

	LD	IX,ENEMY
	LD	B,E_COUNT
IEE1	LD	A,(IX+E_HP)            
	CP	0
	JR	Z,IEE2	;   ,  
	LD	DE,ENEMY_LEN
	ADD	IX,DE
	DJNZ	IEE1
	RET

IEE2	;  
	CALL	RND_255
	AND	3
	LD	(IX+E_TYPE),A
	INC	A

	LD	B,A
	LD	A,(DEFICULT)
	ADD	A,B
	LD	(IX+E_HP),A	; 

	LD	A,(SPAWN_POS)
	LD	HL,#0000	;  
	CP	0
	JR	Z,IEE4 
	LD	HL,#6000	;  
	CP	1
	JR	Z,IEE4 
	LD	HL,#C000	;  
IEE4	INC	A
	CP	3
	JR	NZ,IEE5
	XOR	A
IEE5	LD	(SPAWN_POS),A

	LD	(IX+E_BONUSED),0
	LD	(IX+E_VISIBLE),1
	LD	A,(BONUS_COUNTER)
	INC	A
	CP	5
	JR	NZ,IEE_NB
	LD	(IX+E_BONUSED),1
	LD	(IX+E_BLINK_TIMER),0
	XOR	A
	
IEE_NB	LD	(BONUS_COUNTER),A
      
	;
	LD	(IX+E_COORD),L
	LD	(IX+E_COORD+1),H

	; 
	PUSH	IX
	CALL	SELECT_E_SPRITE
	POP	IX

	;
	LD	L,(IX+E_SPRITE)
	LD	H,(IX+E_SPRITE+1)
	LD	DE,64
	ADD	HL,DE
	LD	(IX+E_SPR_ADR),L
	LD	(IX+E_SPR_ADR+1),H

	LD	(IX+E_SPR_H),16
	LD	(IX+E_SPR_W),2
	LD	(IX+E_DIRECT),4	; 
	

	LD	A,(ENEMY_COUNT)
	DEC	A		;  
	LD	(ENEMY_COUNT),A

	CALL	PRINT_MINI
	CALL	SWAP_SCREEN
	CALL	PRINT_MINI
	RET     
;--------------------------
INIT_PLAYER

	LD	A,(T_LIVES)	
	CP	0
	RET	Z		;  

	LD	A,(T_ACTIVE)
	CP	1
	RET	Z		;  ,  

	;
	LD	HL,#40B0
	LD	(T_COORD),HL
	; 
	LD	A,2
	LD	(T_SPR_W),A
	LD	A,16
	LD	(T_SPR_H),A
	; 
	LD	HL,TANK_UP1
	LD	(T_SPR_ADR),HL
	LD      DE,832		;  
	ADD	HL,DE
	LD	(T_MAS_ADR),HL
	;
	LD	A,3
	LD	(T_DIRECT),A
	; 
	LD	A,1
	LD	(T_ACTIVE),A
	;   
	LD	A,50
	LD	(T_PROTECT_TIMER),A

	; 
	CALL	SELECT_T_SPRITE
	RET

;--------------------------
INIT_BONUS


	;
	CALL	RND_255
	AND	10
	SLA	A
	INC	A
	SLA	A
	SLA	A
	SLA	A
	LD	(B_COORD),A	;Y
	CALL	RND_255
	AND	11
	SLA	A
	INC	A
	SLA	A
	SLA	A
	SLA	A
	LD	(B_COORD+1),A	;X
	
	;
	CALL	RND_255
	LD	B,0
	CP	42
	JR	C,IB_1

	LD	B,1
	CP	84
	JR	C,IB_1

	LD	B,2
	CP	126
	JR	C,IB_1

	LD	B,3
	CP	168
	JR	C,IB_1

	LD	B,4
	CP	210
	JR	C,IB_1

	LD	B,5
	;CP	210
	;JR	C,IB_1

IB_1	LD	A,B
	LD	(B_INDEX),A

	LD	A,1
	LD	(B_ACTIVE),A
	LD	(B_VISIBLE),A
	LD	(B_BLINK_TIMER),A

	; 
	LD	HL,B_1
	LD	DE,32
	LD	A,(B_INDEX)
	LD	B,A
	CP	0
	JR	Z,IB_NADD
IB_ADD	ADD	HL,DE
	DJNZ	IB_ADD
IB_NADD	LD	(B_SPR_ADR),HL

	CALL	ON_BONUS_SOUND
	RET

;--------------------------
; 
SWAP_SCREEN
	DI
BUF_MODE
	LD      A,%00011101		;16+8+5
	XOR	  %00001010		;->%00010111=16+0+7

        LD      (BUF_MODE+1),A
	LD	(#5B5C),A
	LD	BC,#7FFD
        OUT	(C),A
	EI
        RET

;--------------------------
;    5
SET_VIDEO5
	DI
	LD      A,%00011101	;   
        LD      (BUF_MODE+1),A

	LD      A,%00010101
	LD	(#5B5C),A
	LD	BC,#7FFD
	OUT	(C),A
	EI
	RET

;--------------------------
;  0
BIND_BUF_0
	DI
	LD      A,(#5B5C)
	AND	24
	LD	(#5B5C),A
	LD	BC,#7FFD
        OUT	(C),A
	EI
        RET

;---------------------------
PRINT_ENEMYS
	LD	IX,ENEMY
	LD	B,E_COUNT
P_E1	PUSH	BC

	LD	A,(IX+E_HP)
	CP	0
	JR	Z,P_E2

	LD	L,(IX+E_COORD) ;  
	LD	H,(IX+E_COORD+1) 
	LD	(W_COORD),HL

	LD	A,(IX+E_SPR_W)
	LD	(W_SPRW),A
	LD	A,(IX+E_SPR_H)
	LD	(W_SPRH),A

	LD	A,(IX+E_VISIBLE)
	CP	0
	JR	Z,P_E11

	; 
	LD	A,MOD_OR
	LD	(MODE),A

	; 
	LD	L,(IX+E_SPR_ADR)
	LD	H,(IX+E_SPR_ADR+1)
	LD	(W_SPRADR),HL
	CALL	PRINT_SPRITE

P_E11	LD	A,(IX+E_BONUSED)
	CP	0
	JR	Z,P_E2

	LD	A,(IX+E_BLINK_TIMER)
	INC	A
	CP	BLINK_TIME
	JR	NZ,P_E_NB
	LD	A,(IX+E_VISIBLE)
	XOR	1
	LD	(IX+E_VISIBLE),A
	XOR	A

P_E_NB	LD	(IX+E_BLINK_TIMER),A
       
P_E2	POP	BC
	LD	DE,ENEMY_LEN
	ADD	IX,DE
	DJNZ	P_E1

	RET

;--------------------------
PRINT_PLAYER

	LD	A,(T_ACTIVE)
	CP	0
	RET	Z

	; 
	LD	HL,(T_COORD)
	LD      (W_COORD),HL
	LD	A,(T_SPR_W)
	LD	(W_SPRW),A
	LD	A,(T_SPR_H)
	LD	(W_SPRH),A

	LD	A,(T_VISIBLE)
	CP	0
	JR	Z,P_P1

	;  
	LD	A,MOD_OR
	LD	(MODE),A
	LD	HL,(T_SPR_ADR)
	LD      (W_SPRADR),HL

	; 
	CALL	PRINT_SPRITE

P_P1	LD	A,(T_PROTECT_TIMER)
	CP	0
	JR	NZ,P_P2
	LD	A,1
	LD	(T_VISIBLE),A
	RET

P_P2	DEC	A
	LD	(T_PROTECT_TIMER),A

	LD	A,(T_BLINK_TIMER)
	INC	A
	CP	BLINK_TIME
	JR	NZ,P_P_NB
	LD	A,(T_VISIBLE)
	XOR	1
	LD	(T_VISIBLE),A
	XOR	A

P_P_NB	LD	(T_BLINK_TIMER),A
       
	RET

;--------------------------
PRINT_BONUS

	LD	A,(B_ACTIVE)
	CP	0
	RET	Z

	LD	A,(B_BLINK_TIMER)
	INC	A
	CP	BLINK_TIME
	JR	NZ,PB_NB
	LD	A,(B_VISIBLE)
	XOR	1
	LD	(B_VISIBLE),A
	XOR	A

PB_NB	LD	(B_BLINK_TIMER),A

	
	LD	A,(B_VISIBLE)
	CP	0
	RET	Z

	; 
	LD	HL,(B_COORD)
	LD      (W_COORD),HL
	LD	A,2
	LD	(W_SPRW),A
	LD	A,16
	LD	(W_SPRH),A

	;  
	LD	A,MOD_AND
	LD	(MODE),A
	LD	HL,B_M
	LD      (W_SPRADR),HL

	; 
	CALL	PRINT_SPRITE

	;  
	LD	A,MOD_OR
	LD	(MODE),A
	LD	HL,(B_SPR_ADR)
	LD      (W_SPRADR),HL

	; 
	CALL	PRINT_SPRITE
	RET


;--------------------------
PRINT_T_SHOT
	LD	IX,T_SHOT
	LD	A,(T_COL_SHOT)
	LD	B,A
PTS_ALL	PUSH	BC

	LD	A,(IX+T_SH_ACTIVE)
	CP	0
	JR	Z,PTS_NEXT

	; 
	LD	L,(IX+T_SH_COORD)
	LD	H,(IX+T_SH_COORD+1)
	LD      (W_COORD),HL
	LD	A,2
	LD	(W_SPRW),A
	LD	A,8
	LD	(W_SPRH),A

	LD	A,H
	LD	HL,SPR_SHOT
	AND	7
	CP	0
	JR	Z,NO_ADDSH
	LD      DE,16
	LD	B,A
ADDSH	ADD	HL,DE
	DJNZ	ADDSH
NO_ADDSH
	
	;PUSH	HL

	;LD      DE,128		;  
	;ADD	HL,DE

	;  
	;LD	A,MOD_AND
	;LD	(MODE),A
	;LD      (W_SPRADR),HL

	; 
	;CALL	PRINT_SPRITE

	;POP	HL

	;  
	LD	A,MOD_OR
	LD	(MODE),A
	LD      (W_SPRADR),HL

	; 
	CALL	PRINT_SPRITE

PTS_NEXT
	POP	BC
	LD	DE,T_SH_LEN
	ADD	IX,DE
	DJNZ	PTS_ALL
	RET

;--------------------------
PRINT_E_SHOT

	LD	IX,ENEMY
	LD	B,E_COUNT
PES1	PUSH	BC


	LD	A,(IX+E_SH_ACTIVE)
	CP	0
	JR	Z,PENEXT

	; 
	LD	L,(IX+E_SH_COORD)
	LD	H,(IX+E_SH_COORD+1)
	LD      (W_COORD),HL
	LD	A,2
	LD	(W_SPRW),A
	LD	A,8
	LD	(W_SPRH),A

	LD	A,H
	LD	HL,SPR_SHOT
	AND	7
	CP	0
	JR	Z,PES_NO_ADDSH
	LD      DE,16
	LD	B,A
PES_ADDSH
	ADD	HL,DE
	DJNZ	PES_ADDSH
PES_NO_ADDSH
	
	;  
	LD	A,MOD_OR
	LD	(MODE),A
	LD      (W_SPRADR),HL

	; 
	CALL	PRINT_SPRITE

PENEXT	LD	DE,ENEMY_LEN
	ADD	IX,DE
	POP	BC
	DJNZ	PES1

	RET

;--------------------------
PRINT_FON

	; 
	LD	HL,(T_COORD)
	LD      (W_COORD),HL
	LD	A,(T_SPR_W)
	LD	(W_SPRW),A
	LD	A,(T_SPR_H)
	LD	(W_SPRH),A

	;   
	CALL	RESTORE_FON

	;.............................

	LD	IX,ENEMY
	LD	B,E_COUNT
P_F1	PUSH	BC

	LD	L,(IX+E_COORD) ;  
	LD	H,(IX+E_COORD+1) 
	LD	(W_COORD),HL
	LD	A,(IX+E_SPR_W)
	LD	(W_SPRW),A
	LD	A,(IX+E_SPR_H)
	LD	(W_SPRH),A

	;   
	CALL	RESTORE_FON

	POP	BC
	LD	DE,ENEMY_LEN
	ADD	IX,DE
 	DJNZ	P_F1

	;.............................

	LD	IX,T_SHOT
	LD	A,(T_COL_SHOT)
	LD	B,A
P_F3	PUSH	BC

	; 
	LD	L,(IX+T_SH_COORD)
	LD	H,(IX+T_SH_COORD+1)
	LD      (W_COORD),HL
	LD	A,2
	LD	(W_SPRW),A
	LD	A,16
	LD	(W_SPRH),A

	;   
	CALL	RESTORE_FON

	POP	BC
	LD	DE,T_SH_LEN
	ADD	IX,DE
 	DJNZ	P_F3

	;.............................

	LD	IX,ENEMY
	LD	B,E_COUNT
P_F2	PUSH	BC

	; 
	LD	L,(IX+E_SH_COORD)
	LD	H,(IX+E_SH_COORD+1)
	LD      (W_COORD),HL
	LD	A,2
	LD	(W_SPRW),A
	LD	A,16
	LD	(W_SPRH),A

	;   
	CALL	RESTORE_FON

	POP	BC
	LD	DE,ENEMY_LEN
	ADD	IX,DE
 	DJNZ	P_F2

	;.............................

	; 
	LD	HL,(B_OLD_COORD)
	LD      (W_COORD),HL
	LD	HL,(B_COORD)
	LD	(B_OLD_COORD),HL
	LD	A,2
	LD	(W_SPRW),A
	LD	A,16
	LD	(W_SPRH),A

	;   
	CALL	RESTORE_FON

	
	RET



;--------------------------
RESTORE_FON

	;     
	LD	HL,(W_COORD)
	SRL	H
	SRL	H
	SRL	H
	SRL	L
	SRL	L
	SRL	L

	LD	A,(W_SPRW)	;2
	INC	A		;3
	ADD	A,H		;23+3=26
	LD	B,A		;26

	LD	A,(W_SPRH)	;16
	SRL	A
	SRL	A
	SRL	A		;2
	INC	A		;3
	ADD	A,L		;+0
	LD	C,A		;3

	XOR	A
	CP	H		;0
	JR	Z,N_DECH
	DEC	H		;23
N_DECH
	CP	L		;0
	JR	Z,N_DECL
	DEC	L
N_DECL				;0
	LD	A,25
	CP	B		;26
	JR	NC,N_DECB
	LD	B,26		;25
N_DECB				
	LD	A,23
	CP	C		;3
	JR	NC,N_DECC
	LD	C,24
N_DECC

	LD	A,C		;3
	SUB	L		;3-0=3
	ADD	A,A		;6
	ADD	A,A		;12
	ADD	A,A		;24
	LD	C,A		;24

	LD	A,B		;25
	SUB	H		;23
	LD	B,A		;2

	CALL	ADR		;C000

RES_DH	PUSH	HL
	PUSH	BC

	LD	E,L		;0
	LD	A,H		;C0
	OR	#20
	LD	D,A		;E0
	
RES_DW	LD	A,(DE)
	LD	(HL),A
	INC	HL		;C001
	INC	DE		;E001
	DJNZ	RES_DW

	POP	BC
	POP	HL
	CALL	DOWN		;C100

	DEC	C
	JR	NZ,RES_DH

	RET

;--------------------------
RESTORE_FOREST
	LD	HL,(W_COORD)
	SRL	H
	SRL	H
	SRL	H
	SRL	L
	SRL	L
	SRL	L

	;.............
	PUSH	HL

	LD	DE,LEVEL
	LD	B,L
	LD	C,H
	XOR	A
	CP	B
	JR	Z,RFR_NO_LVLH
	LD	HL,26
	EX	DE,HL
RFR_LVLH
	ADD	HL,DE		;  
	DJNZ	RFR_LVLH
	EX	DE,HL
RFR_NO_LVLH
	LD	L,C
	LD	H,0
	ADD	HL,DE		;  
	EX	DE,HL

	POP	HL
	;.............

	LD	A,(W_SPRW)
	LD	C,A
	LD	A,(W_COORD+1)
	AND	7
	;CP	0
	JR	NZ,RFR_NODECW
	DEC	C
RFR_NODECW
	LD	A,(W_SPRH)
	LD	B,A
	LD	A,(W_COORD)
	AND	7
	;CP	0
	JR	NZ,RFR_NODECH
	DEC	B
RFR_NODECH

	;LD	BC,#0203
	;.............

RFR_DH	PUSH	BC
	PUSH	HL
	PUSH	DE
	CALL	ADR
	
	;............
RFR_DW	LD	A,(DE)
	CP	4
	JR	NZ,RFR_NO_PRF
	;............
	PUSH	DE
	PUSH	HL
	LD	E,L
	LD	A,#20
	OR	H
	LD	D,A
	LD	B,8
RFR_PRF	LD	A,(DE)
	OR	(HL)
	LD	(HL),A
	INC	H
	INC	D
	DJNZ	RFR_PRF
	POP	HL
	POP	DE
	;............
RFR_NO_PRF
	INC	DE
	INC	HL
	DEC	C
	JR	NZ,RFR_DW
	;............
	
	POP	HL
	LD	DE,26
	ADD	HL,DE
	EX	DE,HL

	POP	HL
	INC	L

	POP	BC

	DJNZ	RFR_DH

	RET

;--------------------------
CLEAR_COORD_POS
	
	SRL	H
	SRL	H
	SRL	H
	SRL	L
	SRL	L
	SRL	L

	PUSH	HL
	CALL	ADR

	LD	A,#20
	OR	H
	LD	D,A
	LD	E,L

	XOR	A
	LD	B,8
CCP	LD	(DE),A
	LD	(HL),A
	INC	H
	INC	D
	DJNZ	CCP


	POP	HL
	LD	E,H
	LD	D,0

	LD	H,0
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,DE

	LD	DE,#D800
	ADD	HL,DE

	LD	A,#20
	OR	H
	LD	D,A
	LD	E,L

	LD	A,7
	LD	(HL),A
	LD	(DE),A


	LD	HL,(CALCULATED_LPOS)
	LD	A,(HL)

	CP	6
	JR	Z,CCP_1
	CP	7
	JR	Z,CCP_1
	CP	8
	JR	Z,CCP_1
	CP	9
	JR	Z,CCP_1
	RET

CCP_1	LD	A,1
	LD	(BASE_DAMAGED),A
	CALL	ON_CRASH_SOUND
	RET

;---------------------
PRINT_SPRITE  
	LD	HL,(W_COORD)
          
	SRL	L
	SRL	L
	SRL	L
	SRL	H
	SRL	H
	SRL	H

	CALL	ADR
	
	LD	A,(W_COORD)
	AND	7
	ADD	A,H
	LD	H,A
	
	LD	DE,(W_SPRADR) 

	LD	A,(W_SPRH)
	LD	B,A		;   
FOR_Y	PUSH	BC
	PUSH	HL		;  

	LD	A,(W_SPRW)
	LD	C,A		;   
FOR_X	LD	A,(DE)		; 
MODE	NOP
	LD	(HL),A		; 
	INC	DE		;  
	INC	HL		;   
	DEC	C		;  
	JR	NZ,FOR_X

	POP	HL		;  
	POP	BC
        CALL	DOWN

	DJNZ	FOR_Y
	RET

MOD_PUT		EQU	#00		;NOP
MOD_OR		EQU	#B6		;OR (HL)
MOD_AND		EQU	#A6		;AND (HL)
MOD_XOR		EQU	#AE		;XOR (HL)

;------------------------------
COLORIZE_BUF
	LD   HL,#F800
	LD   DE,LEVEL

	LD   C,24

CLR_1	PUSH BC
	PUSH HL
	PUSH DE
	LD   B,26
CLR_2     
	LD   A,(DE)
          

	LD   C,%00100010
	CP   1
	JR   Z,CLR_3

	LD   C,%00000111
	CP   2
	JR   Z,CLR_3

	LD   C,%01001111
	CP   3
	JR   Z,CLR_3

	LD   C,%00100110
	CP   4
	JR   Z,CLR_3

	LD   C,%00101111
	CP   5
	JR   Z,CLR_3
          
	LD   C,7

CLR_3     
	LD   (HL),C
          
	INC  HL
	INC  DE
	DJNZ CLR_2
          
	POP  HL
	LD   BC,26
	ADD  HL,BC
	EX   DE,HL

	POP  HL
	LD   BC,32
	ADD  HL,BC

	POP  BC
	DEC  C
	JR   NZ,CLR_1

	RET

;------------------------------
COLORIZE_SCREEN

	LD	HL,#F800
	LD	DE,#D800
	LD	BC,768
	LDIR
	RET

;----------------------
COLORIZE_RIGHT
	LD	HL,#D81A
	LD	B,24
	LD	DE,32
C_R1    PUSH	HL
	LD	(HL),%00101000
	INC	HL
	LD	(HL),%00101000
	INC	HL
	LD	(HL),%00101000
	INC	HL
	LD	(HL),%00101000
	INC	HL
	LD	(HL),%00101000
	INC	HL
	LD	(HL),%00101000
	POP	HL
       
	ADD	HL,DE  
	DJNZ	C_R1
	RET

;------------------------------
OPEN_WEIL
	LD	HL,#D960
	LD	(TOP_A),HL
	LD	HL,#D980
	LD	(BOT_A),HL

	LD	B,12
O_W1	PUSH	BC

	LD	HL,(TOP_A)
	LD	DE,#2000
	ADD	HL,DE
	LD	DE,(TOP_A)
	LD	BC,26
	LDIR

	LD	HL,(BOT_A)
	LD	DE,#2000
	ADD	HL,DE
	LD	DE,(BOT_A)
	LD	BC,26
	LDIR

	LD	DE,32
	LD	HL,(TOP_A)
	AND	A
	SBC	HL,DE
	LD	(TOP_A),HL

	LD	HL,(BOT_A)
	ADD	HL,DE
	LD	(BOT_A),HL


	LD	BC,1000
O_W2	DEC	BC
	LD	A,B
	OR	C
	JR	NZ,O_W2

	POP	BC
	DJNZ	O_W1


	RET


TOP_A	DEFW	0
BOT_A	DEFW	0

;----------------------
CLOSE_WEIL
	LD	HL,#D800
	LD	(TOP_A),HL
	LD	HL,#DAE0
	LD	(BOT_A),HL

	LD	B,12
C_W1	PUSH	BC

	LD	HL,(TOP_A)
	PUSH	HL
	POP	DE
	INC	DE
	LD	(HL),%00101101
	LD	BC,31
	LDIR

	LD	HL,(BOT_A)
	PUSH	HL
	POP	DE
	INC	DE
	LD	(HL),%00101101
	LD	BC,31
	LDIR

	LD	BC,1000
C_W2	DEC	BC
	LD	A,B
	OR	C
	JR	NZ,C_W2


	POP	BC
	LD	DE,32
	LD	HL,(TOP_A)
	ADD	HL,DE
	LD	(TOP_A),HL

	LD	HL,(BOT_A)
	AND	A
	SBC	HL,DE
	LD	(BOT_A),HL

	DJNZ	C_W1
	RET


;---------------------------
CLS
	PUSH	BC

	LD	DE,#C001
	LD	HL,#C000
	LD	(HL),0
	LD	BC,#1800
	LDIR
	LD	(HL),A
	LD	BC,#0300
	LDIR

	LD	DE,#E001
	LD	HL,#E000
	LD	(HL),0
	LD	BC,#1800
	LDIR
	LD	(HL),A
	LD	BC,#0300
	LDIR

	POP	AF

	CALL	8859      ;BORDER

	RET


;--------------------------
PRINT_LEVEL
	
	LD	HL,#0000	;X,Y -  
	LD	DE,LEVEL	; 

P_L3	PUSH	HL		; X,Y        
        CALL	ADR

	LD	C,26		;   
P_L2	PUSH	DE
	PUSH	HL

	LD	A,(DE)		;  
	ADD	A,A		;  8
	ADD	A,A
	ADD	A,A
	LD	H,0
	LD	L,A
	LD	DE,SPR_C0
	ADD	HL,DE
	EX	DE,HL		; 
	POP	HL
        PUSH	HL

	LD	B,8
P_L1	LD	A,(DE)
	LD	(HL),A
	INC	H
	INC	DE
	DJNZ	P_L1

P_L4	POP	HL
	POP	DE
        
	INC	DE
	INC	HL

	DEC	C
	JR	NZ,P_L2
        
	POP	HL
	INC	L
	LD	A,L
	CP	24
	JR	NZ,P_L3

	;      
	LD	HL,#0000
	CALL	ADR
	LD	E,L
	LD	A,H
	OR	#20
	LD	D,A
	LD	BC,#1800
	LDIR

	RET



;--------------------------
DOWN	INC	H
	LD	A,H
	AND	#07
	RET	NZ
	LD	A,L
	ADD	A,#20
	LD	L,A
	RET	C
	LD	A,H
	SUB	#08
	LD	H,A
	RET

;--------------------------
ADR	LD	A,L
	AND	7
	RRCA
	RRCA
	RRCA
	ADD	A,H
	LD	H,L
	LD	L,A
	LD	A,H
	AND	#18
	OR	#C0
	LD	H,A
	RET
;--------------------------
;   
M_CLR
	PUSH	HL
	CALL	CLEAR_COORD_POS
	POP	HL
	CALL	SWAP_SCREEN
	CALL	CLEAR_COORD_POS
	CALL	SWAP_SCREEN
	
	XOR	A
	LD	HL,(CALCULATED_LPOS)
	LD	(HL),A
	LD	(IX+E_SH_ACTIVE),A
	RET
;---------------------------
E_SHOT_MOVE

	LD	A,3
	LD	(L_DOP),A

	LD	IX,ENEMY
	LD	B,E_COUNT
ESMALL	PUSH	BC

	LD	A,(IX+E_SH_ACTIVE)
	CP	0
	JP	Z,ESM_NEXT
       
	LD	A,(IX+E_SH_DIRECT)
	LD	L,(IX+E_SH_COORD)
	LD	H,(IX+E_SH_COORD+1)
       
	CALL	UPDATE_COORD
	CALL	UPDATE_COORD
	CALL	UPDATE_COORD

	LD	A,H
	CP	203
	JR	C,ESM1
	XOR	A
	LD	(IX+E_SH_ACTIVE),A
	JP	ESM_NEXT
ESM1	LD	A,L
	CP	187
	JR	C,ESM2
	XOR	A
	LD	(IX+E_SH_ACTIVE),A
	JP	ESM_NEXT

ESM2
	LD	A,6
	LD	(BOX_HL_W),A
	LD	(BOX_HL_H),A
	CALL	T_SHOT_COLLISION
	CP	1
	JR	NZ,ESM3
	LD	(IX+E_SH_ACTIVE),0
	JP	ESM_NEXT

ESM3
	CALL	PLAYER_COLLISION
	CP	1
	JR	NZ,ESM4
	XOR	A
	LD	(IX+E_SH_ACTIVE),A
	LD	A,(T_PROTECT_TIMER)
	CP	0
	JP	NZ,ESM_NEXT

	LD	A,(T_POWER)
	CP	3
	JR	NC,ESM_NODED
	XOR	A
	LD	(T_ACTIVE),A
	LD	A,(T_LIVES)
	DEC	A
	LD	(T_LIVES),A
	; 
	XOR	A
	LD	(T_POWER),A
	INC	A
	LD	(T_COL_SHOT),A
	CALL	ON_CRASH_SOUND
	CALL	SELECT_T_SPRITE
	JP	ESM_NEXT
ESM_NODED
	; 
	LD	A,2
	LD	(T_POWER),A
	CALL	ON_CLANG_SOUND
	CALL	SELECT_T_SPRITE
	JP	ESM_NEXT

	;....................

ESM4	
	PUSH	HL

	PUSH	HL
	CALL	COORD_IS_FILL
	POP	HL
	CP	1
	JR	NZ,ESM5

	PUSH	HL
	LD	HL,(CALCULATED_LPOS)
	LD	A,(HL)
	POP	HL
	CP	2
	JR	NZ,ECCP1

	XOR	A
	LD	(IX+E_SH_ACTIVE),A
	JR	ESM5

ECCP1
	CALL	M_CLR
	
ESM5	POP	HL
	PUSH	HL

	LD	A,5
	ADD	A,L
	LD	L,A

	PUSH	HL
	CALL	COORD_IS_FILL
	POP	HL
	CP	1
	JR	NZ,ESM6

	PUSH	HL
	LD	HL,(CALCULATED_LPOS)
	LD	A,(HL)
	POP	HL
	CP	2
	JR	NZ,ECCP2

	XOR	A
	LD	(IX+E_SH_ACTIVE),A
	JR	ESM6

ECCP2
	CALL	M_CLR
	
	
ESM6	POP	HL
	PUSH	HL

	LD	A,5
	ADD	A,H
	LD	H,A

	PUSH	HL
	CALL	COORD_IS_FILL
	POP	HL
	CP	1
	JR	NZ,ESM7

	PUSH	HL
	LD	HL,(CALCULATED_LPOS)
	LD	A,(HL)
	POP	HL
	CP	2
	JR	NZ,ECCP3

	XOR	A
	LD	(IX+E_SH_ACTIVE),A
	JR	ESM7

ECCP3
	CALL	M_CLR
	
ESM7	POP	HL
	PUSH	HL

	LD	A,5
	ADD	A,H
	LD	H,A
	LD	A,5
	ADD	A,L
	LD	L,A

	PUSH	HL
	CALL	COORD_IS_FILL
	POP	HL
	CP	1
	JR	NZ,ESM_UC

	PUSH	HL
	LD	HL,(CALCULATED_LPOS)
	LD	A,(HL)
	POP	HL
	CP	2
	JR	NZ,ECCP4

	XOR	A
	LD	(IX+E_SH_ACTIVE),A
	JR	ESM_UC

ECCP4
	CALL	M_CLR
	

ESM_UC	POP	HL
	LD	(IX+E_SH_COORD),L
	LD	(IX+E_SH_COORD+1),H

ESM_NEXT
	POP	BC
	LD	DE,ENEMY_LEN
	ADD	IX,DE
	DEC	B
	JP	NZ,ESMALL
	RET
;---------------------------
TM_CLR
	PUSH	HL
	CALL	CLEAR_COORD_POS
	POP	HL
	CALL	SWAP_SCREEN
	CALL	CLEAR_COORD_POS
	CALL	SWAP_SCREEN
	
	XOR	A
	LD	HL,(CALCULATED_LPOS)
	LD	(HL),A
	LD	(IX+T_SH_ACTIVE),A
	RET


;---------------------------
T_SHOT_MOVE
	LD	A,3
	LD	(L_DOP),A

	LD	IX,T_SHOT
	LD	A,(T_COL_SHOT)
	LD	B,A
TSMALL	PUSH	BC

	LD	A,(IX+T_SH_ACTIVE)
	CP	0
	JP	Z,T_SH_NEXT

	LD	A,(IX+T_SH_DIRECT)
	LD	L,(IX+T_SH_COORD)
	LD	H,(IX+T_SH_COORD+1)
       
	CALL	UPDATE_COORD
	CALL	UPDATE_COORD
	CALL	UPDATE_COORD
	LD	A,(IX+T_SH_SPEED)
	CP	0
	LD	A,(IX+T_SH_DIRECT)
	JR	Z,NO_SPEED
	CALL	UPDATE_COORD
	CALL	UPDATE_COORD
NO_SPEED


	LD	A,H
	CP	203
	JR	C,TSM1
	LD	(IX+T_SH_ACTIVE),0
	JP	T_SH_NEXT

TSM1	LD	A,L
	CP	187
	JR	C,TSM2
	LD	(IX+T_SH_ACTIVE),0
	JP	T_SH_NEXT

TSM2	LD	A,6
	LD	(BOX_HL_W),A
	LD	(BOX_HL_H),A
	PUSH	HL
	CALL	ENEMY_COLLISION
	POP	HL
	CP	0
	JR	Z,TSM3
	LD	(IX+T_SH_ACTIVE),0

	PUSH	IX
	LD	IX,(ECOL_ADDR)
	DEC	(IX+E_HP)
	LD	A,(IX+E_BONUSED)
	CP	1
	CALL	Z,INIT_BONUS
	LD	(IX+E_BONUSED),0
	LD	(IX+E_VISIBLE),1
	LD	A,(IX+E_HP)
	LD	B,(IX+E_TYPE)
	POP	IX

	CP	0
	JR	Z,CRASH
	CALL	ON_CLANG_SOUND
	JP	T_SH_NEXT
CRASH
	LD	HL,L_ECOUNT
	LD	E,B
	LD	D,0
	ADD	HL,DE
	INC	(HL)
	LD	HL,(SCORE)
	INC	E
	ADD	HL,DE
	LD	(SCORE),HL
	
	CALL	ON_CRASH_SOUND
	JP	T_SH_NEXT

	
TSM3	
	PUSH	HL
	PUSH	HL
	CALL	COORD_IS_FILL
	POP	HL

	CALL	CUT_BUSH

	CP	1
	JR	NZ,TSM4

	LD	A,(T_POWER)
	CP	3
	JR	NC,TCCP1

	PUSH	HL
	LD	HL,(CALCULATED_LPOS)
	LD	A,(HL)
	POP	HL
	CP	2
	JR	NZ,TCCP1

	LD	(IX+T_SH_ACTIVE),0
	JR	TSM4

TCCP1
	CALL	TM_CLR
	
TSM4
	POP	HL
	PUSH	HL	;(1)

	LD	A,5
	ADD	A,L
	LD	L,A

	PUSH	HL
	CALL	COORD_IS_FILL
	POP	HL

	CALL	CUT_BUSH

	CP	1
	JR	NZ,TSM5
	
	LD	A,(T_POWER)
	CP	3
	JR	NC,TCCP2

	PUSH	HL
	LD	HL,(CALCULATED_LPOS)
	LD	A,(HL)
	POP	HL
	CP	2
	JR	NZ,TCCP2

	LD	(IX+T_SH_ACTIVE),0
	JR	TSM5

TCCP2
	CALL	TM_CLR

TSM5	POP	HL	;(1)
	
	PUSH	HL	;(2)
	
	LD	A,5
	ADD	A,H
	LD	H,A

	PUSH	HL
	CALL	COORD_IS_FILL
	POP	HL

	CALL	CUT_BUSH

	CP	1
	JR	NZ,TSM6

	LD	A,(T_POWER)
	CP	3
	JR	NC,TCCP3

	PUSH	HL
	LD	HL,(CALCULATED_LPOS)
	LD	A,(HL)
	POP	HL
	CP	2
	JR	NZ,TCCP3

	LD	(IX+T_SH_ACTIVE),0
	JR	TSM6

TCCP3
	CALL	TM_CLR

TSM6	POP	HL	;(2)
	PUSH	HL	;(3)
	
	LD	A,5
	ADD	A,H
	LD	H,A
	LD	A,5
	ADD	A,L
	LD	L,A

	PUSH	HL
	CALL	COORD_IS_FILL
	POP	HL

	CALL	CUT_BUSH

	CP	1
	JR	NZ,TSMEND

	LD	A,(T_POWER)
	CP	3
	JR	NC,TCCP4

	PUSH	HL
	LD	HL,(CALCULATED_LPOS)
	LD	A,(HL)
	POP	HL
	CP	2
	JR	NZ,TCCP4

	LD	(IX+T_SH_ACTIVE),0
	JR	TSMEND

TCCP4
	CALL	TM_CLR

TSMEND	POP	HL	;(3)
	LD	(IX+T_SH_COORD),L
	LD	(IX+T_SH_COORD+1),H
T_SH_NEXT
	POP	BC
	LD	DE,T_SH_LEN
	ADD	IX,DE
	DEC	B
	JP	NZ,TSMALL
	RET
;----------------------------
CUT_BUSH
	LD	(CUT_COORD),HL
	PUSH	HL
	PUSH	AF

	LD	HL,(CALCULATED_LPOS)
	LD	A,(HL)
	
	CP	4
	JR	NZ,NO_CUT	; 
	LD	A,(T_POWER)
	CP	5
	JR	C,NO_CUT	;  

	LD	HL,(CUT_COORD)
	CALL	CLEAR_COORD_POS
	CALL	SWAP_SCREEN
	LD	HL,(CUT_COORD)
	CALL	CLEAR_COORD_POS
	CALL	SWAP_SCREEN


NO_CUT	POP	AF
	POP	HL
	RET
CUT_COORD
	DEFW	0
;----------------------------
UPDATE_COORD
       CP    1
       JR    Z,UPD_L  
       CP    2
       JR    Z,UPD_R
       CP    3
       JR    Z,UPD_U
       CP    4
       JR    Z,UPD_D
       RET   
UPD_L  DEC   H
       RET
UPD_R  INC   H
       RET
UPD_U  DEC   L
       RET
UPD_D  INC   L
       RET

;-----------------------------
PRESS_F

	LD	A,(T_SH_TIMER)
	CP	0
	JR	Z,PF_S
	DEC	A
	LD	(T_SH_TIMER),A
	RET

PF_S	LD	IX,T_SHOT
	LD	A,(T_COL_SHOT)
	LD	B,A
PF_ALL	PUSH	BC

	LD	A,(T_SH_TIMER)
	CP	0
	JR	NZ,PF_NEXT


	LD	A,(IX+T_SH_ACTIVE)
	CP	1
	JR	Z,PF_NEXT

	LD	A,(T_DIRECT)
	LD	HL,(T_COORD)
       
	LD	D,5
	LD	E,5 

	ADD	HL,DE
	LD	(IX+T_SH_COORD),L
	LD	(IX+T_SH_COORD+1),H

	LD	(IX+T_SH_DIRECT),A
	LD	(IX+T_SH_ACTIVE),1
	LD	(IX+T_SH_SPEED),0
	LD	A,(T_POWER)
	CP	0
	JR	Z,NOSPEED
	LD	(IX+T_SH_SPEED),1
NOSPEED
	CALL	ON_SHOT_SOUND
	LD	A,1
	LD	(T_SH_TIMER),A

PF_NEXT	POP	BC
	LD	DE,T_SH_LEN
	ADD	IX,DE
	DJNZ	PF_ALL
	RET


;-----------------------------
PRESS_R
	LD	A,(T_ACTIVE)
	CP	0
	RET	Z

	LD	A,2
	LD	(T_DIRECT),A

	LD	A,(T_COORD)    ; ""   8
	BIT	2,A
	JR	Z,PR_R1
	ADD	A,8
PR_R1	AND	248          
	LD	(T_COORD),A

	LD	A,3
	LD	(T_SPR_W),A

	LD	A,(T_COORD+1)
	INC	A
	CP	193
	JR	Z,CLC_SN

	LD	HL,(T_COORD)
	LD	A,16
	ADD	A,H
	LD	H,A
	PUSH	HL
	CALL	COORD_IS_FILL
	POP	HL
	CP	1
	JR	Z,CLC_SN
       
	PUSH	HL
	LD	A,15
	ADD	A,L
	LD	L,A
	CALL	COORD_IS_FILL
	POP	HL
	CP	1
	JR	Z,CLC_SN

	LD	A,0
	LD	(BOX_HL_W),A
	LD	A,15
	LD	(BOX_HL_H),A
	CALL	ENEMY_COLLISION
	CP	1
	JR	Z,CLC_SN

	LD	HL,(T_COORD)
	INC	H
	LD	(T_COORD),HL

CLC_SN	LD	HL,TANK_RIGHT1
	LD	A,(T_FASE)
	XOR	1
	LD	(T_FASE),A	
	CP	0
	JR	Z,NO_RF2
	LD	HL,TANK_RIGHT2
NO_RF2
	LD	A,(T_COORD+1)
	AND	7
	CP	0
	JR	Z,NO_ADDSR
	LD      DE,48
	LD	B,A
ADDSR	ADD	HL,DE
	DJNZ	ADDSR
NO_ADDSR
	LD	(T_SPR_ADR),HL
	RET
	
;-----------------------------
PRESS_L
	LD	A,(T_ACTIVE)
	CP	0
	RET	Z

	LD	A,1
	LD	(T_DIRECT),A

	LD	A,(T_COORD)
	BIT	2,A
	JR	Z,PR_L1
	ADD	A,8
PR_L1	AND	248
	LD	(T_COORD),A

	LD	A,3
	LD	(T_SPR_W),A

	LD	A,(T_COORD+1)
	DEC	A
	CP	255
	JR	Z,CLC_SL

	LD	HL,(T_COORD)
	DEC	H
	PUSH	HL
	CALL	COORD_IS_FILL
	POP	HL
	CP	1
	JR	Z,CLC_SL
       
	PUSH	HL
	LD	A,15
	ADD	A,L
	LD	L,A
	CALL	COORD_IS_FILL
	POP	HL
	CP	1
	JR	Z,CLC_SL

	LD	A,0
	LD	(BOX_HL_W),A
	LD	A,15
	LD	(BOX_HL_H),A
	CALL	ENEMY_COLLISION
	CP	1
	JR	Z,CLC_SL

	LD	HL,(T_COORD)
	DEC	H
	LD	(T_COORD),HL

CLC_SL	LD	HL,TANK_LEFT1
	LD	A,(T_FASE)
	XOR	1
	LD	(T_FASE),A	
	CP	0
	JR	Z,NO_F2
	LD	HL,TANK_LEFT2
NO_F2
	LD	A,(T_COORD+1)
	AND	7
	CP	0
	JR	Z,NO_ADDSL
	LD      DE,48
	LD	B,A
ADDSL	ADD	HL,DE
	DJNZ	ADDSL
NO_ADDSL
	LD	(T_SPR_ADR),HL
	RET
;-----------------------------
PRESS_U
	LD	A,(T_ACTIVE)
	CP	0
	RET	Z

	LD	A,3
	LD	(T_DIRECT),A

	LD	A,(T_COORD+1)
	BIT	2,A
	JR	Z,PR_U1
	ADD	A,8
PR_U1	AND	248
	LD	(T_COORD+1),A

	LD	A,2
	LD	(T_SPR_W),A

	LD	A,(T_COORD)
	DEC	A
	CP	255
	JR	Z,CLC_SU

	LD	HL,(T_COORD)
	DEC	L
	PUSH	HL
	CALL	COORD_IS_FILL
	POP	HL
	CP	1
	JR	Z,CLC_SU
       
	PUSH	HL
	LD	A,15
	ADD	A,H
	LD	H,A
	CALL	COORD_IS_FILL
	POP	HL
	CP	1
	JR	Z,CLC_SU

	LD	A,15
	LD	(BOX_HL_W),A
	LD	A,0
	LD	(BOX_HL_H),A
	CALL	ENEMY_COLLISION
	CP	1
	JR	Z,CLC_SU


	LD	HL,(T_COORD)
	DEC	L
	LD	(T_COORD),HL

CLC_SU	LD	HL,TANK_UP1
	LD	A,(T_FASE)
	XOR	1
	LD	(T_FASE),A	
	CP	0
	JR	Z,NO_UF2
	LD	HL,TANK_UP2
NO_UF2
	LD	(T_SPR_ADR),HL
	RET
;-----------------------------
PRESS_D 
	LD	A,(T_ACTIVE)
	CP	0
	RET	Z

	LD	A,4
	LD	(T_DIRECT),A

	LD	A,(T_COORD+1)
	BIT	2,A
	JR	Z,PR_D1
	ADD	A,8
PR_D1	AND	248
	LD	(T_COORD+1),A

	LD	A,2
	LD	(T_SPR_W),A
       
	LD	A,(T_COORD)
	INC	A
	CP	177
	JR	Z,CLC_SD

	LD	HL,(T_COORD)
	LD	A,16
	ADD	A,L
	LD	L,A
	PUSH	HL
	CALL	COORD_IS_FILL
	POP	HL
	CP	1
	JR	Z,CLC_SD
       
	PUSH	HL
	LD	A,15
	ADD	A,H
	LD	H,A
	CALL	COORD_IS_FILL
	POP	HL
	CP	1
	JR	Z,CLC_SD

	LD	A,15
	LD	(BOX_HL_W),A
	LD	A,0
	LD	(BOX_HL_H),A
	CALL	ENEMY_COLLISION
	CP	1
	JR	Z,CLC_SD

	LD	HL,(T_COORD)
	INC	L
	LD	(T_COORD),HL

CLC_SD
	LD	HL,TANK_DOWN1
	LD	A,(T_FASE)
	XOR	1
	LD	(T_FASE),A	
	CP	0
	JR	Z,NO_DF2
	LD	HL,TANK_DOWN2
NO_DF2

	LD	(T_SPR_ADR),HL
	;LD	HL,PRESS_D
	;LD	(LAST_DIRECT+1),HL

	RET


;------------------------------
KEY_TEST
SLT	EQU	8
	XOR	A
	LD	(U_PRESSED),A
	LD	(D_PRESSED),A
	LD	(L_PRESSED),A
	LD	(R_PRESSED),A
	LD	(F_PRESSED),A

	LD	A,(F_PORT)
	IN	A,(254)
F_BIT	BIT	0,A		;   
	JR	Z,K_T1		; ,   
	LD	A,(IS_KEMPSTON)
	CP	0
	JR	Z,K_T11		; ,  
	IN	A,(31)
	BIT	4,A
	JR	Z,K_T11
K_T1	LD	A,1
	LD	(F_PRESSED),A


K_T11	LD	A,(L_PORT)	;#FD
	IN	A,(254)
L_BIT	BIT	0,A
	JR	Z,K_T2
	LD	A,(IS_KEMPSTON)
	CP	0
	JR	Z,K_T22
	IN	A,(31)
	BIT	1,A
	JR	Z,K_T22
K_T2	LD	A,1
	LD	(L_PRESSED),A
	LD	A,SLT
	LD	(T_SLIP_TIMER),A
	LD	HL,PRESS_L
	LD	(LAST_DIRECT+1),HL

K_T22	LD	A,(D_PORT)	;#FD
	IN	A,(254)
D_BIT	BIT	1,A
	JR	Z,K_T3
	LD	A,(IS_KEMPSTON)
	CP	0
	JR	Z,K_T33
	IN	A,(31)
	BIT	3,A
	JR	Z,K_T33
K_T3	LD	A,1
	LD	(D_PRESSED),A
	LD	A,SLT
	LD	(T_SLIP_TIMER),A
	LD	HL,PRESS_D
	LD	(LAST_DIRECT+1),HL

K_T33	LD	A,(R_PORT)	;#FD
	IN	A,(254)
R_BIT	BIT	2,A
	JR	Z,K_T4
	LD	A,(IS_KEMPSTON)
	CP	0
	JR	Z,K_T44
	IN	A,(31)
	BIT	0,A
	JR	Z,K_T44
K_T4	LD	A,1
	LD	(R_PRESSED),A
	LD	A,SLT
	LD	(T_SLIP_TIMER),A
	LD	HL,PRESS_R
	LD	(LAST_DIRECT+1),HL

K_T44	LD	A,(U_PORT)	;#FB
	IN	A,(254)
U_BIT	BIT	1,A
	JR	Z,K_T5
	LD	A,(IS_KEMPSTON)
	CP	0
	RET	Z	;JR	Z,K_T55
	IN	A,(31)
	BIT	2,A
	RET	Z	;JR	NZ,K_T55
K_T5	LD	A,1
	LD	(U_PRESSED),A
	LD	A,SLT
	LD	(T_SLIP_TIMER),A
	LD	HL,PRESS_U
	LD	(LAST_DIRECT+1),HL

;K_T55
	

	RET
;------------------------------
USE_BONUS
	LD	HL,(SCORE)
	LD	DE,5
	ADD	HL,DE
	LD	(SCORE),HL


	XOR	A
	LD	(B_ACTIVE),A
	LD	A,(B_INDEX)


	CP	0		;
	JR	NZ,UB_1
	LD	A,255
	LD	(T_PROTECT_TIMER),A
	CALL	ON_BONUS_SOUND
	RET

UB_1	CP	1		;
	JR	NZ,UB_2
	LD	A,255
	LD	(STOP_TIMER),A
	CALL	ON_BONUS_SOUND
	RET

UB_2	CP	2		;
	JR	NZ,UB_3
	LD	A,(T_LIVES)
	INC	A
	LD	(T_LIVES),A
	CALL	ON_ADD_LIVE_SOUND
	RET

UB_3	CP	3		;
	JR	NZ,UB_4
	LD	A,(T_POWER)
	CP	250
	RET	NC
	ADD	A,3
	LD	(T_POWER),A
	LD	A,2
	LD	(T_COL_SHOT),A
	CALL	SELECT_T_SPRITE
	CALL	ON_BONUS_SOUND
	RET

UB_4	CP	4		;
	JR	NZ,UB_5
	
	LD	IX,ENEMY
	LD	DE,ENEMY_LEN
	LD	B,3
UB_EN	LD	(IX+E_HP),0
	ADD	IX,DE
	DJNZ	UB_EN
	CALL	ON_CRASH_SOUND
	RET

UB_5	CP	5		;
	JR	NZ,UB_6
	LD	A,(T_POWER)
	CP	255
	RET	Z
	INC	A
	LD	(T_POWER),A
	CP	2
	JR	C,NO_DBL
	LD	A,2
	LD	(T_COL_SHOT),A
NO_DBL	CALL	SELECT_T_SPRITE
	CALL	ON_BONUS_SOUND
	
	
	RET

UB_6

	RET

;------------------------------
T_ACTION

	CALL	T_COORD_IS_ICE

	XOR	A
	LD	(L_DOP),A

	LD	A,(U_PRESSED)
	CP	1
	CALL	Z,PRESS_U
	
	LD	A,(D_PRESSED)
	CP	1
	CALL	Z,PRESS_D

	LD	A,(L_PRESSED)
	CP	1
	CALL	Z,PRESS_L

	LD	A,(R_PRESSED)
	CP	1
	CALL	Z,PRESS_R

	LD	A,(F_PRESSED)
	CP	1
	CALL	Z,PRESS_F
	;------------------------------
	
	LD	A,(T_SLIP_TIMER)
	CP	0
	JR	Z,NOSLIP
	DEC	A
	LD	(T_SLIP_TIMER),A


	LD	A,(IS_ICE)
	CP	0
	JR	Z,NOSLIP
LAST_DIRECT
	CALL	NZ,0
	
NOSLIP
	;------------------------------
	LD	A,(B_ACTIVE)
	CP	0
	RET	Z

	LD	HL,(B_COORD)
	LD	A,15
	LD	(BOX_HL_H),A
	LD	(BOX_HL_W),A
	CALL	PLAYER_COLLISION
	CP	1
	CALL	Z,USE_BONUS

	RET

;-----------------------------
E_FAST_DIRECT
	;   
	CALL	RND_255
	AND	3
	INC	A
	LD	(IX+E_DIRECT),A
	RET

;-----------------------------
E_ACTION
	LD	A,(STOP_TIMER)
	CP	0
	JR	Z,E_A
	DEC	A
	LD	(STOP_TIMER),A
	RET

E_A
	XOR	A
	LD	(L_DOP),A


	LD	IX,ENEMY      
	LD	B,E_COUNT
E_A1	PUSH	BC
	LD	A,(IX+E_HP)
	CP	0
	JR	Z,E_ANEXT     ; ,   

	;  
	CALL	RND_255    
	AND	15
	CP	7
	CALL	Z,E_FIRE

	;   
	CALL	RND_255
	CP	32
	JR	NZ,E_ASD1
	LD	(IX+E_DIRECT),1
	JR	E_ASD4
E_ASD1	CP	96
	JR	NZ,E_ASD2
	LD	(IX+E_DIRECT),2
	JR	E_ASD4
E_ASD2	CP	160
	JR	NZ,E_ASD3
	LD	(IX+E_DIRECT),3
	JR	E_ASD4
E_ASD3	CP	224
	JR	NZ,E_ASD4
	LD	(IX+E_DIRECT),4

E_ASD4
	LD	A,(IX+E_DIRECT)
	CP	1
	JR	NZ,E_AMR
	CALL	E_MOVE_L
	JR	E_ANEXT
E_AMR	CP	2
	JR	NZ,E_AMU
	CALL	E_MOVE_R
	JR	E_ANEXT
E_AMU	CP	3
	JR	NZ,E_AMD
	CALL	E_MOVE_U
	JR	E_ANEXT
E_AMD	CP	4
	JR	NZ,E_ANEXT
	CALL	E_MOVE_D

E_ANEXT	POP	BC
	LD	DE,ENEMY_LEN
	ADD	IX,DE
	DJNZ	E_A1
	RET

;-----------------------------
E_FIRE
	LD	A,(IX+E_SH_ACTIVE)
	CP	1
	RET	Z

	LD	A,(IX+E_DIRECT)
	LD	L,(IX+E_COORD)
	LD	H,(IX+E_COORD+1)
       
	LD	D,5
	LD	E,5 

	ADD	HL,DE
	LD	(IX+E_SH_COORD),L
	LD	(IX+E_SH_COORD+1),H
	LD	(IX+E_SH_DIRECT),A
	LD	A,1
	LD	(IX+E_SH_ACTIVE),A
	RET

;-----------------------------
E_MOVE_R 
	XOR	A
	LD	(R_OP2),A
	LD	(R_OP3),A
	LD	A,(IX+E_TYPE)
	CP	1
	JR	NZ,R_NOINC
	LD	A,#3C		;INC	A
	LD	(R_OP2),A
	LD	A,#04		;INC	B
	LD	(R_OP3),A
R_NOINC

	LD	A,(IX+E_COORD)    ; ""   8
	BIT	2,A
	JR	Z,EM_R1
	ADD	A,8
EM_R1	AND	248          
	LD	(IX+E_COORD),A

	LD	A,3
	LD	(IX+E_SPR_W),A

	LD	A,(IX+E_COORD+1)
	INC	A
	CP	193
	JR	NZ,EMR0
	CALL	E_FAST_DIRECT
	JR	E_CLC_SR

EMR0	LD	L,(IX+E_COORD)
	LD	H,(IX+E_COORD+1)
	LD	A,16
R_OP2	NOP
	ADD	A,H
	LD	H,A
	PUSH	HL
	CALL	COORD_IS_FILL
	POP	HL
	CP	1
	JR	NZ,EMR1
	CALL	E_FAST_DIRECT
	JR	E_CLC_SR
       
EMR1	PUSH	HL
	LD	A,15
	ADD	A,L
	LD	L,A
	CALL	COORD_IS_FILL
	POP	HL
	CP	1
	JR	NZ,EMR2
	CALL	E_FAST_DIRECT
	JR	E_CLC_SR

EMR2	LD	A,0
	LD	(BOX_HL_W),A
	LD	A,15
	LD	(BOX_HL_H),A
	PUSH	IX
	CALL	ENEMY_COLLISION
	POP	IX
	CP	1
	JR	NZ,EMR3
	CALL	E_FAST_DIRECT
	JR	E_CLC_SR

EMR3	CALL	PLAYER_COLLISION
	CP	1
	JR	NZ,EMR4
	CALL	E_FAST_DIRECT
	JR	E_CLC_SR

EMR4	LD	B,1
R_OP3	NOP
EMR5	INC	(IX+E_COORD+1)
	DJNZ	EMR5
E_CLC_SR
	LD	L,(IX+E_SPRITE)
	LD	H,(IX+E_SPRITE+1)
	LD	DE,896
	LD	A,(IX+E_FASE)
	XOR	1
	LD	(IX+E_FASE),A	
	CP	0
	JR	Z,NO_ERF2
	LD	DE,1280
NO_ERF2
	ADD	HL,DE

	LD	A,(IX+E_COORD+1)
	AND	7
	CP	0
	JR	Z,NO_ADDESR
	LD      DE,48
	LD	B,A
ADDESR	ADD	HL,DE
	DJNZ	ADDESR
NO_ADDESR
	LD	(IX+E_SPR_ADR),L
	LD	(IX+E_SPR_ADR+1),H
	RET
;-----------------------------
E_MOVE_L
	XOR	A		;NOP
	LD	(L_OP2),A
	LD	(L_OP3),A
	LD	A,(IX+E_TYPE)
	CP	1
	JR	NZ,L_NOINC
	LD	A,#25		;DEC	H
	LD	(L_OP2),A
	LD	A,#04		;INC	B
	LD	(L_OP3),A
L_NOINC


	LD	A,(IX+E_COORD)
	BIT	2,A
	JR	Z,EM_L1
	ADD	A,8
EM_L1	AND	248
	LD	(IX+E_COORD),A

	LD	A,3
	LD	(IX+E_SPR_W),A

	LD	A,(IX+E_COORD+1)
	DEC	A
	CP	255
	JR	NZ,EML0
	CALL	E_FAST_DIRECT
	JR	E_CLC_SL

EML0	LD	L,(IX+E_COORD)
	LD	H,(IX+E_COORD+1)
	DEC	H
L_OP2	NOP
	PUSH	HL
	CALL	COORD_IS_FILL
	POP	HL
	CP	1
	JR	NZ,EML1
	CALL	E_FAST_DIRECT
	JR	E_CLC_SL
       
EML1	PUSH	HL
	LD	A,15
	ADD	A,L
	LD	L,A
	CALL	COORD_IS_FILL
	POP	HL
	CP	1
	JR	NZ,EML2
	CALL	E_FAST_DIRECT
	JR	E_CLC_SL

EML2	LD	A,0
	LD	(BOX_HL_W),A
	LD	A,15
	LD	(BOX_HL_H),A
	PUSH	IX
	CALL	ENEMY_COLLISION
	POP	IX
	CP	1
	JR	NZ,EML3
	CALL	E_FAST_DIRECT
	JR	E_CLC_SL

EML3	CALL	PLAYER_COLLISION
	CP	1
	JR	NZ,EML4
	CALL	E_FAST_DIRECT
	JR	E_CLC_SL

EML4	LD	B,1
L_OP3	NOP
EML5	DEC	(IX+E_COORD+1)
	DJNZ	EML5


E_CLC_SL
	LD	L,(IX+E_SPRITE)
	LD	H,(IX+E_SPRITE+1)
	LD	DE,128
	LD	A,(IX+E_FASE)
	XOR	1
	LD	(IX+E_FASE),A	
	CP	0
	JR	Z,NO_ERL2
	LD	DE,512
NO_ERL2
	ADD	HL,DE

	LD	A,(IX+E_COORD+1)
	AND	7
	CP	0
	JR	Z,NO_ADDESL
	LD      DE,48
	LD	B,A
ADDESL	ADD	HL,DE
	DJNZ	ADDESL
NO_ADDESL
	LD	(IX+E_SPR_ADR),L
	LD	(IX+E_SPR_ADR+1),H
	RET

;-----------------------------
E_MOVE_U
	XOR	A		;NOP
	LD	(U_OP2),A
	LD	(U_OP3),A
	LD	A,(IX+E_TYPE)
	CP	1
	JR	NZ,U_NOINC
	LD	A,#2D		;DEC	L
	LD	(U_OP2),A
	LD	A,#04		;INC	B
	LD	(U_OP3),A
U_NOINC


	LD	A,(IX+E_COORD+1)
	BIT	2,A
	JR	Z,EM_U1
	ADD	A,8
EM_U1	AND	248
	LD	(IX+E_COORD+1),A

	LD	A,2
	LD	(IX+E_SPR_W),A

	LD	A,(IX+E_COORD)
	DEC	A
	CP	255
	JR	NZ,EMU0
	CALL	E_FAST_DIRECT
	JR	E_CLC_SU

EMU0	LD	L,(IX+E_COORD)
	LD	H,(IX+E_COORD+1)
	DEC	L
U_OP2	NOP
	PUSH	HL
	CALL	COORD_IS_FILL
	POP	HL
	CP	1
	JR	NZ,EMU1
	CALL	E_FAST_DIRECT
	JR	E_CLC_SU
       
EMU1	PUSH	HL
	LD	A,15
	ADD	A,H
	LD	H,A
	CALL	COORD_IS_FILL
	POP	HL
	CP	1
	JR	NZ,EMU2
	CALL	E_FAST_DIRECT
	JR	E_CLC_SU

EMU2	LD	A,15
	LD	(BOX_HL_W),A
	LD	A,0
	LD	(BOX_HL_H),A
	PUSH	IX
	CALL	ENEMY_COLLISION
	POP	IX
	CP	1
	JR	NZ,EMU3
	CALL	E_FAST_DIRECT
	JR	E_CLC_SU

EMU3	CALL	PLAYER_COLLISION
	CP	1
	JR	NZ,EMU4
	CALL	E_FAST_DIRECT
	JR	E_CLC_SU

EMU4	LD	B,1
U_OP3	NOP
EMU5	DEC	(IX+E_COORD)
	DJNZ	EMU5

E_CLC_SU

	LD	L,(IX+E_SPRITE)
	LD	H,(IX+E_SPRITE+1)
	LD	A,(IX+E_FASE)
	XOR	1
	LD	(IX+E_FASE),A	
	CP	0
	JR	Z,NO_ERU2
	LD	DE,32
	ADD	HL,DE
NO_ERU2
	LD	(IX+E_SPR_ADR),L
	LD	(IX+E_SPR_ADR+1),H
	RET
;-----------------------------
E_MOVE_D
	XOR	A		;NOP
	LD	(D_OP2),A
	LD	(D_OP3),A
	LD	A,(IX+E_TYPE)
	CP	1
	JR	NZ,D_NOINC
	LD	A,#3C		;INC	A
	LD	(D_OP2),A
	LD	A,#04		;INC	B
	LD	(D_OP3),A
D_NOINC

	LD	A,(IX+E_COORD+1)
	BIT	2,A
	JR	Z,EM_D1
	ADD	A,8
EM_D1	AND	248
	LD	(IX+E_COORD+1),A

	LD	A,2
	LD	(IX+E_SPR_W),A
       
	LD	A,(IX+E_COORD)
	INC	A
	CP	177
	JR	NZ,EMD0
	CALL	E_FAST_DIRECT
	JR	E_CLC_SD

EMD0	LD	L,(IX+E_COORD)
	LD	H,(IX+E_COORD+1)
	LD	A,16
D_OP2	NOP
	ADD	A,L
	LD	L,A
	PUSH	HL
	CALL	COORD_IS_FILL
	POP	HL
	CP	1
	JR	NZ,EMD1
	CALL	E_FAST_DIRECT
	JR	E_CLC_SD
       
EMD1	PUSH	HL
	LD	A,15
	ADD	A,H
	LD	H,A
	CALL	COORD_IS_FILL
	POP	HL
	CP	1
	JR	NZ,EMD2
	CALL	E_FAST_DIRECT
	JR	E_CLC_SD

EMD2	LD	A,15
	LD	(BOX_HL_W),A
	LD	A,0
	LD	(BOX_HL_H),A
	PUSH	IX
	CALL	ENEMY_COLLISION
	POP	IX
	CP	1
	JR	NZ,EMD3
	CALL	E_FAST_DIRECT
	JR	E_CLC_SD

EMD3	CALL	PLAYER_COLLISION
	CP	1
	JR	NZ,EMD4
	CALL	E_FAST_DIRECT
	JR	E_CLC_SD

EMD4	LD	B,1
D_OP3	NOP
EMD5	INC	(IX+E_COORD)
	DJNZ	EMD5

E_CLC_SD

	LD	L,(IX+E_SPRITE)
	LD	H,(IX+E_SPRITE+1)
	LD	DE,64
	LD	A,(IX+E_FASE)
	XOR	1
	LD	(IX+E_FASE),A	
	CP	0
	JR	Z,NO_ERD2
	LD	DE,96
NO_ERD2	ADD	HL,DE
	LD	(IX+E_SPR_ADR),L
	LD	(IX+E_SPR_ADR+1),H
	RET

;------------------------------
COORD_IS_FILL
        CALL	CALC_LEVEL_POS

        LD	A,(L_DOP)
        LD	D,A
        LD	A,(HL)
        CP	0
        JR	Z,C_NO_FILL
        CP	4
        JR	Z,C_NO_FILL
        CP	5
        JR	Z,C_NO_FILL
        CP	D
        JR	Z,C_NO_FILL

	LD	A,1
	RET
C_NO_FILL
	XOR	A
	RET
L_DOP	DEFB	0

;----------------------------
T_COORD_IS_ICE
	XOR	A
	LD	(IS_ICE),A


	LD	HL,(T_COORD)
	LD	DE,#0202

	LD	A,L
	AND	7
	CP	0
	JR	Z,TCII_NOADDY
	INC	E
TCII_NOADDY
	LD	A,H
	AND	7
	CP	0
	JR	Z,TCII_NOADDX
	INC	D
TCII_NOADDX
	PUSH	DE
	CALL	CALC_LEVEL_POS
	POP	DE

	LD	A,E
	LD	(TCII_FOR_Y-1),A
	LD	A,D
	LD	(TCII_FOR_X-1),A


	LD	B,0
TCII_FOR_Y
	PUSH	BC
	PUSH	HL
	

	LD	B,0
TCII_FOR_X
	PUSH	BC

	LD	A,(HL)
	CP	5
	JR	NZ,TCII_NOICE
	LD	A,1
	LD	(IS_ICE),A
TCII_NOICE	

	INC	HL

	POP	BC
	DJNZ	TCII_FOR_X


	POP	HL
	LD	DE,26
	ADD	HL,DE

	POP	BC
	DJNZ	TCII_FOR_Y

	RET

;----------------------------
CALC_LEVEL_POS
        SRL   L
        SRL   L
        SRL   L
        SRL   H
        SRL   H
        SRL   H

        LD    B,L
        LD    C,H
        LD    HL,LEVEL

        LD    A,B
        CP    0
        JR    Z,NO_ADD_Y  ;   

        LD    DE,26
ADD_Y
        ADD   HL,DE       ; 
        DJNZ  ADD_Y

NO_ADD_Y
        LD	D,0
        LD	E,C
        ADD	HL,DE       ;   X
	LD	(CALCULATED_LPOS),HL
        RET
CALCULATED_LPOS
	DEFW	0

;---------------------------
RND_255 
	LD	HL,(RND_VAL)
	LD	DE,7
	ADD	HL,DE
	LD	E,L
	LD	D,H
	ADD	HL,HL
	ADD	HL,HL
	LD	C,L
	LD	B,H
	ADD	HL,HL
	ADD	HL,BC
	ADD	HL,DE
	LD	(RND_VAL),HL
	LD	A,H
	RET
RND_VAL	DEFW	0



;--------------------------------------
FILL_SPRITE

	CALL	FILL_SPRITE_ADDR

	;   
	CALL	BIND_BUF_0

	;  UP1,UP2  
	PUSH	HL
	LD	DE,(ADDR_UP1)
	LD	BC,64
	LDIR
	POP	HL

	;  LEFT1   LEFT1  RIGHT1
	PUSH	HL
	LD	DE,64
	ADD	HL,DE

	PUSH	HL
	LD	DE,(ADDR_LEFT1)
	LD	BC,48
	LDIR
	POP	HL
	LD	DE,(ADDR_RIGHT1)
	LD	BC,48
	LDIR
	POP	HL

	;  LEFT2   LEFT2  RIGHT2
	LD	DE,112
	ADD	HL,DE
	PUSH	HL
	LD	DE,(ADDR_LEFT2)
	LD	BC,48
	LDIR
	POP	HL
	LD	DE,(ADDR_RIGHT2)
	LD	BC,48
	LDIR

	;   1
	LD	HL,(ADDR_UP1)
	CALL	FLIP_V
	;   2
	LD	HL,(ADDR_UP2)
	CALL	FLIP_V

	; > 1
	LD	IX,(ADDR_RIGHT1)
	CALL	FLIP_H
	; > 2
	LD	IX,(ADDR_RIGHT2)
	CALL	FLIP_H

	;  1
	LD	HL,(ADDR_RIGHT1)
	CALL	SCROLL_COPY

	;  2
	LD	HL,(ADDR_RIGHT2)
	CALL	SCROLL_COPY

	;  1
	LD	HL,(ADDR_LEFT1)
	CALL	SCROLL_COPY

	;  2
	LD	HL,(ADDR_LEFT2)
	CALL	SCROLL_COPY

	CALL	SET_VIDEO5
	RET
;-------------------------
FILL_SPRITE_ADDR
	PUSH	HL
	EX	DE,HL

	LD	DE,32

	LD	(ADDR_UP1),HL
	ADD	HL,DE

	LD	(ADDR_UP2),HL
	ADD	HL,DE

	LD	(ADDR_DOWN1),HL
	ADD	HL,DE

	LD	(ADDR_DOWN2),HL
	ADD	HL,DE

	LD	DE,384
	LD	(ADDR_LEFT1),HL
	ADD	HL,DE
	
	LD	(ADDR_LEFT2),HL
	ADD	HL,DE

	LD	(ADDR_RIGHT1),HL
	ADD	HL,DE

	LD	(ADDR_RIGHT2),HL

	POP	HL
	RET

ADDR_UP1	DEFW	0
ADDR_UP2	DEFW	0
ADDR_DOWN1	DEFW	0
ADDR_DOWN2	DEFW	0
ADDR_LEFT1	DEFW	0
ADDR_LEFT2	DEFW	0
ADDR_RIGHT1	DEFW	0
ADDR_RIGHT2	DEFW	0

;-----------------------------
FLIP_H	LD	C,16
FL_H1	LD	L,(IX+0)
	LD	H,(IX+1)
	LD	B,16
FL_H2	SLA	L
	RL	H
	RR	D
	RR	E
	DJNZ	FL_H2
	LD	(IX+0),E
	LD	(IX+1),D
	INC	IX
	INC	IX
	INC	IX
	DEC	C
	JR	NZ,FL_H1
	RET

;---------------------------
FLIP_V
	LD	(SAVE_SP),SP

	PUSH	HL
	LD	DE,94
	ADD	HL,DE
	POP	DE
	LD	SP,HL


	LD	B,16
FL_V	LD	(CPY_AD+1),DE
CPY_AD	LD	HL,(00)
	PUSH	HL
	INC	DE
	INC	DE
	DJNZ	FL_V
	LD	SP,(SAVE_SP)
	RET
SAVE_SP	DEFW	0	

;-----------------------------	

SCROLL_COPY

	PUSH	HL
	LD	DE,48
	ADD	HL,DE
	POP	DE
	EX	DE,HL

	LD	B,7
R_COPY	PUSH	BC
	PUSH	DE
	PUSH	HL
	
	;------------
	PUSH	DE
	LD	BC,48
	LDIR
	POP	HL
	AND	A
	LD	B,48
S_RR	RR	(HL)
	INC	HL
	DJNZ	S_RR
	;------------
	POP	HL
	POP	DE

	EX	DE,HL
	LD	IX,48
	ADD	IX,DE
	PUSH	IX
	POP	DE
	EX	DE,HL

	LD	IX,48
	ADD	IX,DE
	PUSH	IX
	POP	DE

	POP	BC
	DJNZ	R_COPY
	
	RET

;---------------------------------
; SPRITES
;---------------------------------
T1	EQU	#C000+6607
T2	EQU	T1+160
T3	EQU	T2+160
T4	EQU	T3+160
E1	EQU	T4+160
E2	EQU	E1+160
E3	EQU	E2+160
E4	EQU	E3+160


; 
SPR_C0	DEFB	0,0,0,0,0,0,0,0
SPR_C1	DEFB	247,247,247,0,127,127,127,0
SPR_C2	DEFB	170,84,188,124,188,124,130,1
SPR_C3	DEFB	4,0,128,72,20,0,64,34
SPR_C4	DEFB	2,21,7,25,46,31,251,110
SPR_C5	DEFB	17,2,4,136,17,34,68,136
SPR_C6	DEFB	0,192,99,241,113,253,47,119
SPR_C7	DEFB	0,3,134,79,142,191,244,238
SPR_C8	DEFB	61,63,29,1,3,15,13,0
SPR_C9	DEFB	188,252,184,128,192,240,176,0

; 
B_1	DEFB 0,0,127,252,128,2,128,2,128,2,135,194,143,226,143,226,143,226,159,226,128,242,128,2,128,2,128,2,127,252,0,0
B_2	DEFB 0,0,127,252,128,2,131,194,130,50,135,130,143,194,157,226,157,226,158,226,143,194,135,130,128,2,128,2,127,252,0,0
B_3	DEFB 0,0,127,252,128,2,128,2,129,194,159,194,129,194,135,34,143,194,159,242,156,10,138,170,135,242,128,2,127,252,0,0
B_4	DEFB 0,0,127,252,128,2,128,2,144,2,191,226,191,242,152,18,134,250,130,106,129,234,128,74,128,122,128,2,127,252,0,0
B_5	DEFB 0,0,127,252,128,2,135,194,134,34,143,18,155,82,148,146,155,82,148,146,155,66,136,130,135,2,128,2,127,252,0,0
B_6	DEFB 0,0,127,252,128,2,129,2,131,130,131,130,191,250,159,242,143,226,135,194,142,226,156,114,144,18,128,2,127,252,0,0

B_M	DEFB 255,255,128,3,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,128,3,255,255

; 
SPR_SHOT
	DEFB 0,0,48,0,120,0,120,0,48,0,0,0,0,0,0,0
	DEFB 0,0,24,0,60,0,60,0,24,0,0,0,0,0,0,0
	DEFB 0,0,12,0,30,0,30,0,12,0,0,0,0,0,0,0
	DEFB 0,0,6,0,15,0,15,0,6,0,0,0,0,0,0,0
	DEFB 0,0,3,0,7,128,7,128,3,0,0,0,0,0,0,0
	DEFB 0,0,1,128,3,192,3,192,1,128,0,0,0,0,0,0
	DEFB 0,0,0,192,1,224,1,224,0,192,0,0,0,0,0,0
	DEFB 0,0,0,96,0,240,0,240,0,96,0,0,0,0,0,0


T_SPRITE_1
TANK_UP1
TANK_UP2	EQU	TANK_UP1+32
TANK_DOWN1	EQU	TANK_UP2+32
TANK_DOWN2	EQU	TANK_DOWN1+32
TANK_LEFT1	EQU	TANK_DOWN2+32
TANK_LEFT2	EQU	TANK_LEFT1+384
TANK_RIGHT1	EQU	TANK_LEFT2+384
TANK_RIGHT2	EQU	TANK_RIGHT1+384

E_SPRITE_1	EQU	TANK_RIGHT2+384
ENEMY1_UP1	EQU	E_SPRITE_1
ENEMY1_UP2	EQU	ENEMY1_UP1+32
ENEMY1_DOWN1	EQU	ENEMY1_UP2+32
ENEMY1_DOWN2	EQU	ENEMY1_DOWN1+32
ENEMY1_LEFT1	EQU	ENEMY1_DOWN2+32
ENEMY1_LEFT2	EQU	ENEMY1_LEFT1+384
ENEMY1_RIGHT1	EQU	ENEMY1_LEFT2+384
ENEMY1_RIGHT2	EQU	ENEMY1_RIGHT1+384

E_SPRITE_2	EQU	ENEMY1_RIGHT2+384
ENEMY2_UP1	EQU	E_SPRITE_2
ENEMY2_UP2	EQU	ENEMY2_UP1+32
ENEMY2_DOWN1	EQU	ENEMY2_UP2+32
ENEMY2_DOWN2	EQU	ENEMY2_DOWN1+32
ENEMY2_LEFT1	EQU	ENEMY2_DOWN2+32
ENEMY2_LEFT2	EQU	ENEMY2_LEFT1+384
ENEMY2_RIGHT1	EQU	ENEMY2_LEFT2+384
ENEMY2_RIGHT2	EQU	ENEMY2_RIGHT1+384

E_SPRITE_3	EQU	ENEMY2_RIGHT2+384
ENEMY3_UP1	EQU	E_SPRITE_3
ENEMY3_UP2	EQU	ENEMY3_UP1+32
ENEMY3_DOWN1	EQU	ENEMY3_UP2+32
ENEMY3_DOWN2	EQU	ENEMY3_DOWN1+32
ENEMY3_LEFT1	EQU	ENEMY3_DOWN2+32
ENEMY3_LEFT2	EQU	ENEMY3_LEFT1+384
ENEMY3_RIGHT1	EQU	ENEMY3_LEFT2+384
ENEMY3_RIGHT2	EQU	ENEMY3_RIGHT1+384

LEVEL		EQU	ENEMY3_RIGHT2+384















