; D:TRCE.ASM

;insomnia vb sound data tables

ISOMC1	=	*
ISOMF1	=	*
ISOMF2	DB	118,118,0,0,67,67,0,0,32,32,0,0,22,22,0,0,13,13,0,0,13
	DB	13,0
ISOMC2	DB	162,162,160,160,164,165,160,160,166,166,160,160,168,168,160,160,170,170,160,160,170
	DB	170,0
ISOMF3	=	*
ISOMC3	=	*
ISOMF4	=	*
ISOMC4	=	*

;sound for ships being put on screen

SSF1TB	DB	83,113,172,172
SSF2TB	DB	84,114,173,173
SSF3TB	DB	85,115,174,174
SSPATB	DB	65,55,25,25

; Ship set (on screen) sound

SHSSND	PROC
	NOP
	LDY	#4
	LDA	#167
:LOOP	STA	AUDC1,Y
	DEY ! DEY
	BPL	:LOOP
	LDA	SSF1TB,X
	STA	AUDF1
	LDA	SSF2TB,X
	STA	AUDF2
	LDA	SSF3TB,X
	STA	AUDF3
	LDY	SSPATB,X
	JSR	PAUSE
	LDY	#4
	LDA	#0
:LOOP2	STA	AUDC1,Y
	DEY ! DEY
	BPL	:LOOP2
	LDY	#5
	JSR	PAUSE
	RTS

;sound for end of game

EDF1TB	DB	172,135,113,84,84
EDF2TB	DB	173,136,114,85,85
EDPATB	DB	50,25,25,10,10
ENDSND	PROC
	LDA	#1
	STA	AUDCTL
	LDX	#4
:LOOP2	LDY	#2
	LDA	#167
:LOOP	STA	AUDC1,Y
	DEY ! DEY
	BPL	:LOOP
	LDA	EDF1TB,X
	STA	AUDF1
	LDA	EDF2TB,X
	STA	AUDF2
	LDY	EDPATB,X
	JSR	PAUSE
	LDY	#2
	LDA	#0
:LOOP3	STA	AUDC1,Y
	DEY ! DEY
	BPL	:LOOP3
	LDY	#5
	JSR	PAUSE

	LDA	#8	;check for consol
	STA	CONSOL	;key depression
	LDA	CONSOL
	AND	#1
	BNE	:CKOPT
	PLA ! PLA	;clear this jsr
	LDA	#0
	STA	AUDCTL
	JMP	REPEAT
:CKOPT	LDA	CONSOL
	AND	#4
	BNE	:OVER
	PLA ! PLA	;clear this jsr
	LDA	#0
	STA	AUDCTL
	JMP	RETTTL

:OVER	DEX
	BPL	:LOOP2
	LDA	#0
	STA	AUDCTL
	RTS

; Update this load's high score

HISCR	DB	0,0,0
UHISCR	PROC
	LDX	#0	;compare scr0 to
:NEXT	LDA	SCR0,X	;present hi score
	CMP	HISCR,X
	BNE	:OUT
	INX
	CPX	#3
	BNE	:NEXT
:OUT	BCC	:EXIT
	LDX	#2	;move scr0 to hi
:LOOP	LDA	SCR0,X	;score buffer
	STA	HISCR,X
	DEX
	BPL	:LOOP
:EXIT	=	*
	LDA	#LOW HISCR ;put hiscr to
	STA	PLACC		;to screen
	LDA	#HIGH HISCR
	STA	PLACC+1
	CLC
	LDA	SAVMSC
	ADC	#LOW [3680+6]
	STA	SCNPRT
	LDA	SAVMSC+1
	ADC	#HIGH [3680+6]
	STA	SCNPRT+1
	LDA	#%10000000  ;red GR set
	STA	HOLD3
	JSR	CNVSCR
	RTS

; range finder checks range & calls 
; locate to change dir. index

RANGE	=	$604
ALTER	DB	0,0,0,0
RANGER	PROC
	NOP		;this byte set to
;			 rts to disable ranger
	LDX	ALTCMS	;get next c ship
	DEX
	BNE	:OVER
	LDX	#3
:OVER	DEC	ALTER,X	;don't process
	BEQ	:GORAG	;unless 4'th
	BPL	:EXIT
	LDA	#3	;time thru
	STA	ALTER,X
:EXIT	RTS
:GORAG	=	*
	SEC		;if row and col
	LDA	PLROW	;are less than
	SBC	PLROW,X	;compare value
	BPL	:SKEO	;then call locatr
	EOR	#$FF
:SKEO	CMP	RANGE
	BCC	:CKCOL
	RTS
:CKCOL	SEC
	LDA	PLCOL
	SBC	PLCOL,X
	BPL	:SKEO2
	EOR	#$FF
:SKEO2	CMP	RANGE
	BCS	:EXIT2
	JSR	LOCATR
:EXIT2	RTS

; flip flop 'GAME OVER' and scores

GAOVTB	DB	$27,$21,$2D,$25,0,$2F,$36,$25,$32
FLPGOV	PROC
	CPY	RTCLOK+2
	BNE	:EXIT
	LDY	#1
	LDA	(STRPAD),Y
	BEQ	PUTSTP
	JSR	BLKSCN

	LDY	#[8+6]
	LDX	#8
:NEXT1	LDA	GAOVTB,X
	ORA	#%10000000
	STA	(STRPAD),Y
	DEY
	DEX
	BPL	:NEXT1
	JSR	SETRTY
:EXIT	RTS

; Put information strip onto screen

PUTSTP	=	*
	JSR	BLKSCN
	JSR	UHISCR
	JSR	SCRNLY
	JSR	SCNSHP
	JSR	SETRTY
	RTS

; set y from rtclok for timer use

SETRTY	PROC
	LDA	RTCLOK+2
	CLC
	ADC	#100
	TAY
	RTS

; turn : move 2 pixels ahead then turn

TURNWK	DB	0
TURN2	PROC
	PHA	;save new index value
	LDA	#1
	STA	TURNWK
:NEXT	LDY	INDEX
	LDX	#0
	STX	MINMV2
	LDA	VECTBL,Y
	STA	:SUBV+1
	LDA	VECTBL+1,Y
	STA	:SUBV+2
:SUBV	JSR	:SUBV	;update soft regs
	LDA	PLROW	;send player plot
	STA	ROWCRS	;out to system
	LDA	PLCOL	;plot routine
	STA	COLCRS
	LDA	#2
	JSR	SYSPUT
	DEC	TURNWK
	BPL	:NEXT
	PLA
	RTS

	LINK		D:TRC1F.ASM
