; Main control loop.
; This is the very outer loop of the program.

; What needs to be done and when?

; Black screen start.
; Load title music
; Load title screen
; Fade up title screen
; Select options
; Play game.

; Playing the game involves allocating screen and
; level memory, loading the level, loading the
; samples, loading the wall graphics, playing the
; level, deallocating the screen memory....

; Control part should therefore:

; 1. Load Title Music
; 2. Load title screen
; 3. Fade up title screen.
; 4. Add 'loading' message
; 5. Load samples and walls
; 6: LOOP START
; 7. Option select screens
; 8. Free music mem, allocate level mem.
; 9. Load level
;10. Play level with options selected
;11. Reload title music
;12. Reload title screen
;13. goto 6

INTROTUNEADDR: dc.l 0
INTROTUNENAME: dc.b 'ab3:sounds/abreed3d.med',0
 even
TITLESCRNADDR: dc.l 0
TITLESCRNNAME: dc.b 'TKG1:includes/titlescrnraw1',0
 even
TITLESCRNNAME2: dc.b 'TKG2:includes/titlescrnraw1',0
 even
OPTSPRADDR: dc.l 0
TITLESCRNPTR: dc.l 0


ProtValA: dc.l 0
ProtValB: dc.l 0
ProtValC: dc.l 0
ProtValD: dc.l 0
ProtValE: dc.l 0
ProtValF: dc.l 0
ProtValG: dc.l 0
ProtValH: dc.l 0
ProtValI: dc.l 0
ProtValJ: dc.l 0
ProtValK: dc.l 0
ProtValL: dc.l 0
ProtValM: dc.l 0
ProtValN: dc.l 0

MASTERPLAYERONEHEALTH:
  dc.w 0
  dc.w 0
MASTERPLAYERONEAMMO:
 ds.w 20

MASTERPLAYERONESHIELD:
 dc.w 0
 dc.w 0
MASTERPLAYERONEGUNS:
 dcb.w 10,0

MASTERPLAYERTWOHEALTH:
  dc.w 0
  dc.w 0
MASTERPLAYERTWOAMMO:
 ds.w 20

MASTERPLAYERTWOSHIELD:
 dc.w 0
 dc.w 0
MASTERPLAYERTWOGUNS:
 dcb.w 10,0

KVALTOASC:
		Dc.b	" `  "," 1  "," 2  "," 3  "
		dc.b	" 4  "," 5  "," 6  "," 7  "
		dc.b	" 8  "," 9  "
; 10
		Dc.b	" 0  "," -  "," +  "," \  "
		dc.b 	'    ','    '," Q  "," W  "
		dc.b	" E  "," R  "
; 20
		Dc.b	" T  "," Y  "," U  "," I  "
		dc.b	" O  "," P  "," [  "," ]  "
		dc.b	'    ','KP1 '
; 30
		Dc.b	'KP2 ','KP3 '," A  "," S  "
		dc.b	" D  "," F  "," G  "," H  "
		dc.b	" J  "," K  "
;40
		Dc.b	" L  "," ;  "," #  ",'    '
		dc.b	'    ','KP4 ','KP5 ','KP6 '
		dc.b	'    '," Z  "
;50
		Dc.b	" X  "," C  "," V  "," B  "
		dc.b	" N  "," M  "," ,  "," .  "
		dc.b 	" /  ",'    '
;60
		Dc.b	'    ','KP7 ','KP8 ','KP9 '
		dc.b	'SPC ','<-- ','TAB ','ENT '
		dc.b	'RTN ','ESC '
;70
		Dc.b	'DEL ','    ','    ','    '
		dc.b	'KP- ','    ','UCK ','DCK '
		dc.b	'RCK ','LCK '
;80
		Dc.b	'FK1 ','FK2 ','FK3 ','FK4 '
		dc.b	'FK5 ','FK6 ','FK7 ','FK8 '
		dc.b	'FK9 ','FK0 '
;90
		Dc.b	'KP( ','KP) ','KP/ ','KP* '
		dc.b    'KP+ ','HLP ','LSH ','RSH '
		dc.b	'CPL ','CTL '
;100
		Dc.b	'LAL ','RAL ','LAM ','RAM '
		dc.b	'    ','    ','    ','    '
		dc.b	'    ','    '
		Dc.b	'    ','    ','    ','    '
		dc.b	'    ','    ','    ','    '
		dc.b	'    ','    '

 even

FINISHEDLEVEL: dc.w 0

_IntuitionBase: dc.l 0
_GfxBase: dc.l 0
MyScreen: dc.l 0

MyNewScreen	dc.w	0,0		left, top
		dc.w	320,16		width, height
		dc.w	1		depth
		dc.b	0,1		pens
		dc.w	0		viewmodes
		dc.w	CUSTOMSCREEN+SCREENQUIET	type
		dc.l	0		font
		dc.l	0	title
		dc.l	0		gadgets
		dc.l	0		bitmap


INTUITION_REV	equ	31		v1.1
int_name	INTNAME
 even

START:

 move.b #'n',mors  

************************************88
* TAKE OUT WHEN PLAYING MODULE AGAIN
********************************
ProtChkBLev1:
	PRSDF
	PRSDE
************************************

; move.l #PROTCALLENC,a0
; move.l #(ENDPROT-PROTCALLENC)/4-1,d1
; move.l #$75055345,d0
;codeitup:
; sub.l d0,(a0)+
; ror.l #1,d0
; dbra d1,codeitup
; rts

ProtChkCLev1:
 PRSDA

 move.w #$7201,titleplanes
 
 move.l 4.w,a6
 move.l #doslibname,a1
 moveq #0,d0
 jsr -552(a6)
 move.l d0,doslib

	moveq	#INTUITION_REV,d0	version
	lea	int_name(pc),a1
	CALLEXEC OpenLibrary
	tst.l	d0
;	beq	exit_false		if failed then quit
	move.l	d0,_IntuitionBase	else save the pointer

	lea	MyNewScreen(pc),a0
	
	CALLINT	OpenScreen		open a screen
	tst.l	d0
;	beq	exit_closeall		if failed the close both, exit
	move.l	d0,MyScreen

	CALLINT RethinkDisplay

 move.l #LINKname,a0
 jsr LOADAFILE
 move.l d0,LINKFILE


; move.l doslib,a6
; move.l #LINKname,d1
; move.l #1005,d2
; jsr -30(a6)
; move.l d0,LLhandle
;
; move.l doslib,a6
; move.l d0,d1
; move.l #LINKSPACE,d2
; move.l #90000,d3
; jsr -42(a6)
;
; move.l doslib,a6
; move.l LLhandle,d1
; jsr -36(a6)


 PRSDS
 jsr stuff
 
 jsr _InitLowLevel
 
; jsr CLEARTITLEPAL
 
ProtChkDLev1:
 PRSDT
 
 move.w #$20,$dff1dc
 move.l #titlecop,$dff080
 PRSDV
 move.w #$87c0,$dff000+dmacon
 move.w #$8020,$dff000+dmacon
ProtChkMLev1:
 move.w $dff006,d0
 lea RVAL2-100(pc),a0
 add.w d0,100(a0)
 
 bsr GETTITLEMEM
ProtChkELev1:
 PRSDU
 bsr CLROPTSCRN
 
 bsr SETUPTITLESCRN
 
; jsr _InitPlayer

; move.l #INTROTUNENAME,a0
; jsr _LoadModule
; move.l d0,INTROTUNEADDR
 PRSDY
; move.l d0,a0
; jsr _InitModule
 
; move.l INTROTUNEADDR,a0
; jsr _PlayModule
ProtChkFLev1:
 PRSDa
 move.l #TITLESCRNNAME,TITLESCRNPTR
 bsr LOADTITLESCRN2

 FLASHER $0f0,$fff

**********************************************
 jsr INITQUEUE
**********************************************

 move.w #0,FADEVAL
 move.w #31,FADEAMOUNT
 bsr FADEUPTITLE
 PRSDB
 jsr LOADWALLS
 jsr LOADFLOOR
 jsr LOADOBS
 PRSDZ

; IFNE CD32VER
 PRSDD
; ENDC

 jsr LOAD_SFX
; jsr _StopPlayer
 PRSDW
 PRSDX
; jsr _RemPlayer


***********************************************
 jsr FLUSHQUEUE
***********************************************

 jsr PATCHSFX

 move.w #15,FADEAMOUNT
 bsr FADEDOWNTITLE 

 bsr ASKFORDISK

 IFNE CD32VER
 move.l doslib,a6
 move.l #115,d1
 jsr -198(a6)
 ENDC

; move.l #newblag,$80
; trap #0
; bra JUMPPASTIT
; rts
;
;newblag:


ProtChkGLev1:
; bsr PROTSETUP
 bsr DEFAULTGAME
 
; move.l INTROTUNEADDR,a0
; jsr _UnLoadModule

; IFEQ CD32VER
; jsr KInt_Init
; ENDC
ProtChkHLev1:
; rte
;
;JUMPPASTIT:
; 

BACKTOMENU:

 jsr CLEARKEYBOARD

 cmp.b #'s',mors
 beq.s BACKTOSLAVE
 cmp.b #'m',mors
 beq.s BACKTOMASTER
 bsr READMAINMENU
 bra DONEMENU
BACKTOMASTER:
 bsr MASTERMENU
 bra DONEMENU
BACKTOSLAVE:
 bsr SLAVEMENU
DONEMENU:


 bsr WAITREL

; IFEQ CD32VER
; move.l OLDKINT,$68.w
; ENDC



 
 bsr CLRSPRITES
 
 move.w #15,FADEAMOUNT
 bsr FADEUPTITLE
 move.w #31,FADEAMOUNT
 bsr FADEDOWNTITLE
 
 move.w #$0201,titleplanes

	FILTER
	
 tst.b SHOULDQUIT
 bne QUITTT

 bsr RELEASETITLEMEM

  
; jsr LOADBOTPIC

  
 clr.b FINISHEDLEVEL
 
 move.w #0,PLR1s_angpos
 move.w #0,PLR2s_angpos
 move.w #0,PLR1_angpos
 move.w #0,PLR2_angpos
 move.b #0,PLR1_GunSelected
 move.b #0,PLR2_GunSelected
 
**************************8
 clr.b NASTY
*************************** 

 move.l #MASTERPLAYERONEHEALTH,a0
 move.l #MASTERPLAYERONESHIELD,a1
 move.l #PLAYERONEHEALTH,a2
 move.l #PLAYERONESHIELD,a3
 move.l #PLAYERTWOHEALTH,a4
 move.l #PLAYERTWOSHIELD,a5

 REPT 11 
 move.l (a0),(a2)+
 move.l (a0)+,(a4)+
 ENDR

 REPT 6 
 move.l (a1),(a3)+
 move.l (a1)+,(a5)+
 ENDR

*************************************
; jsr INITQUEUE

; move.l #MEMF_CHIP,TYPEOFMEM
; move.l #bordername,a0
; move.l #scrn,d0
; move.l #0,d1
; jsr QUEUEFILE
 
; ifeq CHEESEY
; move.l #bordername,a0
; move.l #scrn2,d0
; move.l #0,d1
; jsr QUEUEFILE
; endc 
 
; jsr FLUSHQUEUE
 
; ifne CHEESEY
; 
; move.l scrn,scrn2
; 
; endc
 
************************************* 

	jsr PLAYTHEGAME
	
*************************************
; move.l scrn,a1
; move.l #10240*8,d0
; move.l 4.w,a6
; jsr -210(a6)
; ifeq CHEESEY
; move.l scrn2,a1
; move.l #10240*8,d0
; move.l 4.w,a6
; jsr -210(a6)
; endc
*************************************

; bsr FREEBOTMEM 

; bra QUITTT
 
 tst.b FINISHEDLEVEL
 beq dontusestats

 move.l #MASTERPLAYERONEHEALTH,a0
 move.l #MASTERPLAYERONESHIELD,a1
 move.l #PLAYERONEHEALTH,a2
 move.l #PLAYERONESHIELD,a3

 REPT 11 
 move.l (a2)+,(a0)+
 ENDR

 REPT 6 
 move.l (a3)+,(a1)+
 ENDR

dontusestats:

; bsr PASSLINETOGAME
; bsr GETSTATS
 
 bsr GETTITLEMEM
 bsr CLROPTSCRN
 bsr SETUPTITLESCRN
 
 move.l #TITLESCRNNAME2,TITLESCRNPTR
 bsr LOADTITLESCRN2
 move.w #$7201,titleplanes

 move.w #$20,$dff1dc
 move.l #titlecop,$dff080
 move.w #$87c0,$dff000+dmacon
 move.w #$8020,$dff000+dmacon 

 move.w #0,FADEVAL
 move.w #31,FADEAMOUNT
 bsr FADEUPTITLE

 move.w #15,FADEAMOUNT
 bsr FADEDOWNTITLE 

; IFEQ CD32VER
; jsr KInt_Init
; ENDC

 bra BACKTOMENU

QUITTT:

 move.l LEVELDATA,d1
 move.l d1,a1
 move.l #120000,d0
 move.l 4.w,a6
 jsr -210(a6)

 move.l TEXTSCRN,d1
 move.l d1,a1
 move.l #10240*2,d0
 move.l 4.w,a6
 jsr -210(a6)

 move.l FASTBUFFER,d1	
 move.l #2*320*256,d0
 move.l 4.w,a6
 jsr -210(a6)
 
; jsr RELEASEWALLMEM
 jsr RELEASESAMPMEM
 jsr RELEASEFLOORMEM
 jsr RELEASEOBJMEM
  
 move.l old,$dff080
 move.l 4.w,a6
 lea VBLANKInt,a1
 moveq #INTB_COPER,d0
 jsr _LVORemIntServer(a6)

 move.l 4.w,a6
 lea KEYInt,a1
 moveq #INTB_PORTS,d0
 jsr _LVORemIntServer(a6)

 move.w #$f8e,$dff1dc

 move.l old,$dff080
 move.w _storeint,d0
 or.w d0,$dff000+intena

; move.l	4.w,a6
; jsr	_LVOPermit(a6)

 
 move.l #0,d0

 rts
 
SSTACK: dc.l 0
 
bordername: dc.b "TKG2:includes/newborderRAW",0
 even
 
; KEY OPTIONS:
CONTROLBUFFER:
turn_left_key:
 dc.b $4f
turn_right_key:
 dc.b $4e
forward_key:
 dc.b $4c
backward_key:
 dc.b $4d
fire_key:
 dc.b $65
operate_key:
 dc.b $40
run_key:
 dc.b $61
force_sidestep_key:
 dc.b $67
sidestep_left_key:
 dc.b $39
sidestep_right_key:
 dc.b $3a
duck_key:
 dc.b $22
look_behind_key:
 dc.b $28
jump_key:
 dc.b $f
look_up_key:
 dc.b 27
look_down_key:
 dc.b 42


templeftkey: dc.b 0
temprightkey: dc.b 0
tempslkey: dc.b 0 
tempsrkey: dc.b 0
 
 even 
 
GETSTATS:
; CHANGE PASSWORD INTO RAW DATA

 rts


SETPLAYERS:

 move.w PLOPT,d0
 add.b #'a',d0
 move.b d0,LEVA
 move.b d0,LEVB
 move.b d0,LEVC
 move.b d0,LEVD
 move.b d0,LEVE

 cmp.b #'s',mors
 beq SLAVESETUP
 cmp.b #'m',mors
 beq MASTERSETUP
 st NASTY
onepla:
 rts

NASTY: dc.w 0
 
MASTERSETUP:
 clr.b NASTY
 move.w PLOPT,d0
 jsr SENDFIRST
 
 move.w Rand1,d0
 jsr SENDFIRST
 
 bsr TWOPLAYER
 rts

SLAVESETUP:
 CLR.B NASTY
 jsr RECFIRST
 move.w d0,PLOPT
 add.b #'a',d0
 move.b d0,LEVA
 move.b d0,LEVB
 move.b d0,LEVC
 move.b d0,LEVD
 move.b d0,LEVE
 
 jsr RECFIRST
 move.w d0,Rand1
 bsr TWOPLAYER
 
 
 rts
 	
********************************************************

ASKFORDISK:
 lea RVAL1+300(pc),a0
 lea RVAL2+900(pc),a1
 PRSDD
 move.w #10,OptScrn
 bsr DRAWOPTSCRN

ProtChkNLev1:
.wtrel:
 btst #7,$bfe001
 beq.s .wtrel

wtclick:
 add.w #$235,-300(a0)
 add.w #$4533,-900(a0)
 btst #6,$bfe001
 bne.s wtclick
 
 rts

CLRSPRITES: 
 move.l #nullspr,d0
 move.w d0,tsp0l
 move.w d0,tsp1l
 move.w d0,tsp2l
 move.w d0,tsp3l
 move.w d0,tsp4l
 move.w d0,tsp5l
 move.w d0,tsp6l
 move.w d0,tsp7l
 swap d0
 move.w d0,tsp0h
 move.w d0,tsp1h
 move.w d0,tsp2h
 move.w d0,tsp3h
 move.w d0,tsp4h
 move.w d0,tsp5h
 move.w d0,tsp6h
 move.w d0,tsp7h 
 rts

********************************************************

READMAINMENU:

 
 move.b #'n',mors

 move.w MAXLEVEL,d0
 
 move.l #CURRENTLEVELLINE,a1
 muls #40,d0
 move.l LINKFILE,a0
 add.l #LevelName,a0
 add.l d0,a0
 bsr PUTINLINE

; Stay here until 'play game' is selected.

 move.w #0,OptScrn
 bsr DRAWOPTSCRN
 move.w #0,OPTNUM

 bsr HIGHLIGHT



 bsr WAITREL
.rdlop:

 bsr CHECKMENU
 tst.w d0
 blt.s .rdlop


; tst.w d0
; bne.s .nonextlev
; move.w LEVELSELECTED,d0
; add.w #1,d0
; cmp.w MAXLEVEL,d0
; blt .nowrap
; moveq #0,d0
;.nowrap:
; and.w #$f,d0
; move.w d0,LEVELSELECTED
; move.l #CURRENTLEVELLINE,a1
; muls #40,d0
; move.l #LEVEL_OPTS,a0
; add.l d0,a0
; bsr PUTINLINE
; bsr JUSTDRAWIT
; bra .rdlop

.nonextlev:
 
 cmp.w #1,d0
 bne .noopt
 
 bra MASTERMENU
 
.noopt:

; cmp.w #5,d0
; bne.s .noqui
; st SHOULDQUIT
; bra playgame
;.noqui

 cmp.w #2,d0
 beq playgame

 cmp.w #3,d0
 bne .nocontrol
 
 bsr CHANGECONTROLS

 move.w #0,OptScrn
 bsr DRAWOPTSCRN
 move.w #0,OPTNUM

 bsr HIGHLIGHT

 bsr WAITREL
 bra .rdlop
 
.nocontrol:

 cmp.w #4,d0
 bne .nocred
 bsr SHOWCREDITS
 move.w #0,OptScrn
 bsr DRAWOPTSCRN
 move.w #1,OPTNUM

 bsr HIGHLIGHT

 bsr WAITREL
 bra .rdlop
 
.nocred:

 cmp.w #5,d0
 bne .noload
 
 bsr WAITREL
 
 jsr LOADPOSITION
 
 move.w #0,OptScrn
 bsr DRAWOPTSCRN
 move.w #1,OPTNUM

 bsr HIGHLIGHT

 bsr WAITREL
 bra .rdlop

.noload:
 cmp.w #6,d0
 bne playgame
 bsr WAITREL
 
 jsr SAVEPOSITION
 
 move.w #0,OptScrn
 bsr DRAWOPTSCRN
 move.w #1,OPTNUM

 bsr HIGHLIGHT

 bsr WAITREL
 bra .rdlop
 
 
;
; move.l #PASSWORDLINE+12,a0
; moveq #15,d2
;.clrline:
; move.b #32,(a0)+
; dbra d2,.clrline 
; move.w #0,OptScrn
; bsr DRAWOPTSCRN
;
; IFEQ CD32VER
; clr.b lastpressed
; move.l #PASSWORDLINE+12,a0
; move.w #0,d1
;.ENTERPASS:
; tst.b lastpressed
; beq .ENTERPASS
; move.b lastpressed,d2
; move.b #0,lastpressed
; move.l #KVALTOASC,a1
; 
; cmp.l #'<-- ',(a1,d2.w*4)
; bne .nodel
;
; tst.b d1
; beq .nodel
;
; subq #1,d1
; move.b #32,-(a0)
; movem.l d0-d7/a0-a6,-(a7)
; bsr JUSTDRAWIT
; movem.l (a7)+,d0-d7/a0-a6
; bra .ENTERPASS
;
;.nodel:
; 
; cmp.l #'RTN ',(a1,d2.w*4)
; beq .FORGETIT
; cmp.l #'ESC ',(a1,d2.w*4)
; beq .FORGETIT
; move.b 1(a1,d2.w*4),d2
; cmp.b #65,d2
; blt .ENTERPASS
; cmp.b #'Z',d2
; bgt .ENTERPASS
; move.b d2,(a0)+
; move.w #0,OptScrn
; movem.l d0-d7/a0-a6,-(a7)
; bsr JUSTDRAWIT
; movem.l (a7)+,d0-d7/a0-a6
; add.w #1,d1
; cmp.w #16,d1
; blt .ENTERPASS
;
; ENDC
; IFNE CD32VER
; move.l #PASSWORDLINE+12,a0
; move.w #15,d0
;.ENTERPASS:
; bsr GETACHAR
; dbra d0,.ENTERPASS
; ENDC
;
; bsr PASSLINETOGAME
; tst.w d0
; bne .FORGETIT
; 
; bsr GETSTATS
; move.w MAXLEVEL,d0
; move.l #CURRENTLEVELLINE,a1
; muls #40,d0
; move.l #LEVEL_OPTS,a0
; add.l d0,a0
; bsr PUTINLINE
;
;.FORGETIT:
; bsr WAITREL
; bsr CALCPASSWORD
;
; move.w #0,OptScrn
; bsr DRAWOPTSCRN
;
; move.w #1,OPTNUM
;
; bsr HIGHLIGHT
;
; bra .rdlop 
 
playgame:
 move.w MAXLEVEL,PLOPT
 rts
 
SHOULDQUIT: dc.w 0
 
LEVELSELECTED:
 dc.w 0
 
 IFNE CD32VER
GETACHAR:
 moveq #0,d7
 move.b #'A',(a0)
 movem.l d0-d7/a0-a6,-(a7)
 jsr JUSTDRAWIT
 movem.l (a7)+,d0-d7/a0-a6

.wtnum:
 btst #1,$dff00c
 sne d1
 btst #1,$dff00d
 sne d2
 btst #0,$dff00c
 sne d3
 btst #0,$dff00d
 sne d4
 
 eor.b d1,d3
 eor.b d2,d4
 
 tst.b d1
 beq.s .NODELETE
 cmp.w #15,d0
 beq.s .NODELETE
 move.b #32,(a0)
 subq #1,a0
 addq #1,d0
 move.b (a0),d7
 sub.b #'A',d7
 movem.l d0-d7/a0-a6,-(a7)
 jsr JUSTDRAWIT
 movem.l (a7)+,d0-d7/a0-a6
 jsr WAITFORNOPRESS
 bra .wtnum
.NODELETE

 tst.b d4
 bne.s .PREVNUM
 tst.b d3
 bne.s .NEXTNUM
 btst #7,$bfe001
 bne.s .wtnum
 addq #1,a0
 jsr WAITFORNOPRESS
 rts

.PREVNUM:
 subq #1,d7
 bge.s .nonegg
 moveq #15,d7
.nonegg:
 move.b d7,d1
 add.b #'A',d1
 move.b d1,(a0)
 movem.l d0-d7/a0-a6,-(a7)
 jsr JUSTDRAWIT
 movem.l (a7)+,d0-d7/a0-a6
 
 jsr WAITFORNOPRESS
 
 bra .wtnum

.NEXTNUM:
 addq #1,d7
 cmp.w #15,d7
 ble.s .nobigg
 moveq #0,d7
.nobigg:
 move.b d7,d1
 add.b #'A',d1
 move.b d1,(a0)
 movem.l d0-d7/a0-a6,-(a7)
 jsr JUSTDRAWIT
 movem.l (a7)+,d0-d7/a0-a6
 jsr WAITFORNOPRESS
 bra .wtnum
 rts
 ENDC
 
 
MASTERMENU:

 move.b #'m',mors

 move.w #0,LEVELSELECTED

 move.w #0,d0 
 move.l #CURRENTLEVELLINEM,a1
 muls #40,d0
 move.l #LEVEL_OPTS,a0
 add.l d0,a0
 bsr PUTINLINE

; Stay here until 'play game' is selected.

 move.w #4,OptScrn
 bsr DRAWOPTSCRN
 move.w #1,OPTNUM

 bsr HIGHLIGHT

 bsr WAITREL
.rdlop:
 bsr CHECKMENU
 tst.w d0
 blt.s .rdlop
 bsr WAITREL

 cmp.w #1,d0
 bne.s .nonextlev
 
 move.w LEVELSELECTED,d0
 add.w #1,d0
 cmp.w MAXLEVEL,d0
 blt .nowrap
 moveq #0,d0
.nowrap:
; and.w #$f,d0
 move.w d0,LEVELSELECTED
 move.l #CURRENTLEVELLINEM,a1
 muls #40,d0
 move.l #LEVEL_OPTS,a0
 add.l d0,a0
 bsr PUTINLINE
 bsr JUSTDRAWIT
 bra .rdlop
 
.nonextlev:

 cmp.w #2,d0
 beq .playgame
 
 cmp.w #0,d0
 bne .noopt
 
 bra SLAVEMENU
 
.noopt:

 cmp.w #3,d0
 bne .nocontrol
 
 bsr CHANGECONTROLS

 move.w #4,OptScrn
 bsr DRAWOPTSCRN
 move.w #0,OPTNUM

 bsr HIGHLIGHT

 bsr WAITREL
 bra .rdlop
 
.nocontrol:

.playgame

 move.w LEVELSELECTED,PLOPT
 rts
 
SLAVEMENU:

 move.b #'s',mors

; Stay here until 'play game' is selected.

 move.w #5,OptScrn
 bsr DRAWOPTSCRN
 move.w #1,OPTNUM

 bsr HIGHLIGHT

 bsr WAITREL
.rdlop:
 bsr CHECKMENU
 tst.w d0
 blt.s .rdlop
 bsr WAITREL

 cmp.w #1,d0
 beq .playgame

 cmp.w #0,d0
 bne .noopt
 
 bra READMAINMENU
 
.noopt:

 cmp.w #2,d0
 bne .nocontrol
 
 bsr CHANGECONTROLS

 move.w #0,OptScrn
 bsr DRAWOPTSCRN
 move.w #0,OPTNUM

 bsr HIGHLIGHT

 bsr WAITREL
 bra .rdlop
 
.nocontrol:
.playgame:

 rts

TWOPLAYER:

 move.w #200,PLAYERONEHEALTH
 move.w #200,PLAYERTWOHEALTH

 st.b PLAYERONEGUNS+1
 st.b PLAYERONEGUNS+3
 st.b PLAYERONEGUNS+5
 st.b PLAYERONEGUNS+7
 st.b PLAYERONEGUNS+9
 st.b PLAYERONEGUNS+11
 
 st.b PLAYERTWOGUNS+1
 st.b PLAYERTWOGUNS+3
 st.b PLAYERTWOGUNS+5
 st.b PLAYERTWOGUNS+7
 st.b PLAYERTWOGUNS+9
 st.b PLAYERTWOGUNS+11

 move.l #PLAYERONEAMMO,a0
 move.l #PLAYERTWOAMMO,a1
 move.w #9,d1
.putinvals
 jsr GetRand
 and.w #63,d0
 add.w #5,d0
 move.w d0,(a0)+
 move.w d0,(a1)+
 dbra d1,.putinvals
 
 rts

 move.w #0,OldEnergy
 move.w #127,Energy
 jsr EnergyBar
 
 move.w #63,OldAmmo
 move.w #0,Ammo
 jsr AmmoBar
 move.w #0,OldAmmo
 
 move.b #0,PLR1_GunSelected
 
 move.b #0,PLR2_GunSelected
 rts

newdum:
 rts
 
DEFAULTGAME:
 move.w #0,MAXLEVEL
 
 move.l #MASTERPLAYERONEHEALTH,a0
 move.l #MASTERPLAYERONESHIELD,a1
 move.l #0,(a0)+
 move.l #0,(a0)+
 move.l #0,(a0)+
 move.l #0,(a0)+
 move.l #0,(a0)+
 move.l #0,(a0)+
 move.l #0,(a0)+
 move.l #0,(a0)+
 move.l #0,(a0)+
 move.l #0,(a0)+
 move.l #0,(a0)+
 
 move.l #0,(a1)+
 move.l #0,(a1)+
 move.l #0,(a1)+
 move.l #0,(a1)+
 move.l #0,(a1)+
 move.l #0,(a1)+
 
 move.w #200,MASTERPLAYERONEHEALTH
 move.w #$ff,MASTERPLAYERONEGUNS
 
 move.l LINKFILE,a5
 add.l #GunBulletTypes,a5
 move.w (a5),d0
 
 move.l #MASTERPLAYERONEAMMO,a5
 move.w #20,(a5,d0.w*2)
 
 rts
 
CHKPROT: dc.w 0
 
GETPARITY:
 move.w #6,d3
.calcparity:
 btst d3,d0
 beq.s .nochange
 bchg #7,d0
.nochange:
 dbra d3,.calcparity
 rts

CHECKPARITY:
 move.w #6,d3
 move.b #$0,d2
.calcparity:
 btst d3,d0
 beq.s .nochange
 bchg #7,d2
.nochange:
 dbra d3,.calcparity
 move.b d0,d1
 and.b #$80,d1
 eor.b d1,d2
 sne.s d5
 rts
 
CALCPASSWORD:
 rts
 
PASSLINETOGAME:
 rts
 
illega:

 move.w #-1,d0

 rts

PASSBUFFER:
 ds.b 8
 
CHECKBUFFER: ds.b 8
 
PASS:
 ds.b 16

**************************************************

CHANGECONTROLS:

 move.w #6,OptScrn
 bsr DRAWOPTSCRN
 move.w #0,OPTNUM
 bsr HIGHLIGHT
 bsr WAITREL
 
.rdlop:
 bsr CHECKMENU
 tst.w d0
 blt.s .rdlop

 cmp.w #15,d0
 beq .backtomain

 move.l #KEY_LINES,a0
 move.w d0,d1
 muls #40,d1
 add.l d1,a0
 add.w #32,a0
 move.l #$20202020,(a0)
 movem.l d0/a0,-(a7)
 bsr JUSTDRAWIT
 movem.l (a7)+,d0/a0 

 clr.b lastpressed

.wtkey
 tst.b lastpressed
 beq .wtkey
 
 move.l #CONTROLBUFFER,a1
 moveq #0,d1
 move.b lastpressed,d1
 move.b d1,(a1,d0.w)
 move.l #KVALTOASC,a1
 move.l (a1,d1.w*4),(a0)
 bsr JUSTDRAWIT
 bsr WAITREL
 bra .rdlop

.backtomain:
 rts

**************************************************

 
MAXLEVEL: dc.w 0
 
SHOWCREDITS:
 move.w #2,OptScrn
 bsr DRAWOPTSCRN
 move.w #0,OPTNUM
 bsr HIGHLIGHT

 bsr WAITREL

.rdlop:
 bsr CHECKMENU
 tst.w d0
 blt.s .rdlop
 
 bra READMAINMENU
 
HELDDOWN:
 dc.w 0

WAITREL:

 movem.l d0/d1/d2/d3,-(a7)

 move.l #KeyMap,a5
WAITREL2:
 btst #7,$bfe001
 beq.s WAITREL2
 
 IFEQ CD32VER
 tst.b $40(a5)
 bne.s WAITREL2
 tst.b $44(a5)
 bne.s WAITREL2
 tst.b $4c(a5)
 bne.s WAITREL2
 tst.b $4d(a5)
 bne.s WAITREL2
 ENDC

 btst #1,$dff00c
 sne d0
 btst #1,$dff00d
 sne d1
 btst #0,$dff00c
 sne d2
 btst #0,$dff00d
 sne d3
 
 eor.b d0,d2
 eor.b d1,d3
 tst.b d2
 bne.s WAITREL2
 tst.b d3
 bne.s WAITREL2

 
 movem.l (a7)+,d0/d1/d2/d3
 rts
 
PUTINLINE:
 moveq #39,d0
pill
 move.b (a0)+,(a1)+
 dbra d0,pill
 rts

CHECKMENU:
 btst #1,$dff00c
 sne d0
 btst #1,$dff00d
 sne d1
 btst #0,$dff00c
 sne d2
 btst #0,$dff00d
 sne d3
 
 eor.b d0,d2
 eor.b d1,d3
 
 move.l #KeyMap,a5
 move.b $4c(a5),d0
 move.b $4d(a5),d1
 or.b d1,d3
 or.b d0,d2

 move.w OptScrn,d0
 move.l #MENUDATA,a0
 move.l 4(a0,d0.w*8),a0	; opt data

 move.w OPTNUM,d0

 tst.b d2
 beq.s NOPREV
 
 
 sub.w #1,d0
 bge.s NOPREV
 
 move.w #0,d0 

NOPREV:

 tst.b d3
 beq.s NONEXT
 
 bsr WAITREL
 
 add.w #1,d0
 tst.w (a0,d0.w*8)
 bge.s NONEXT
 
 subq #1,d0
 
NONEXT:

 cmp.w OPTNUM,d0
 beq.s .nochange

 bsr HIGHLIGHT
 move.w d0,OPTNUM
 bsr HIGHLIGHT
 bsr WAITREL
 
.nochange:
 
 move.w #-1,d0
 
 btst #7,$bfe001
 beq.s select
 move.b $40(a5),d1
 or.b $44(a5),d1
 tst.b d1
 beq.s noselect
 
select:
 bsr WAITREL
 move.w OPTNUM,d0
noselect:
 
 rts
 
HIGHLIGHT:

 SAVEREGS
 
 move.w OptScrn,d0
 move.l #MENUDATA,a0
 move.l 4(a0,d0.w*8),a0
 move.w OPTNUM,d0
 lea (a0,d0.w*8),a0
 move.w (a0)+,d0	;left
 move.w (a0)+,d1	;top
 move.w (a0)+,d2	;width

 muls #16*8,d1
 move.l OPTSPRADDR,a1
 add.w d1,a1
 add.w #8+16,a1
 move.l #SCRTOSPR2,a5
 adda.w d0,a5
 adda.w d0,a5
 
NOTLOP:

 move.w (a5)+,d3
 lea (a1,d3.w),a2
 not.b (a2)
 not.b 16(a2)
 not.b 32(a2)
 not.b 48(a2)
 not.b 64(a2)
 not.b 80(a2)
 not.b 96(a2)
 not.b 112(a2)
 not.b 128(a2)
 subq #1,d2
 bgt.s NOTLOP
 
 GETREGS
 rts
 
SCRTOSPR2:
val SET 0
 REPT 6
 dc.w val+0
 dc.w val+1
 dc.w val+2
 dc.w val+3
 dc.w val+4
 dc.w val+5
 dc.w val+6
 dc.w val+7
val SET val+258*16
 ENDR
 
CLROPTSCRN:

 move.l #$2cdfea,d0
 move.w (a4,d0.l),d0
 add.w d0,RVAL2

 move.l OPTSPRADDR,a0
 lea 16(a0),a1
 lea 16+(258*16)(a0),a2
 lea 16+(258*16*2)(a0),a3
 lea 16+(258*16*3)(a0),a4
 lea 258*16(a4),a0
 
 move.w #256,d0
 moveq #0,d1
CLRLOP:
 move.l d1,(a0)+
 move.l d1,(a0)+
 move.l d1,(a0)+
 move.l d1,(a0)+
 move.l d1,(a1)+
 move.l d1,(a1)+
 move.l d1,(a1)+
 move.l d1,(a1)+
 move.l d1,(a2)+
 move.l d1,(a2)+
 move.l d1,(a2)+
 move.l d1,(a2)+
 move.l d1,(a3)+
 move.l d1,(a3)+
 move.l d1,(a3)+
 move.l d1,(a3)+
 move.l d1,(a4)+
 move.l d1,(a4)+
 move.l d1,(a4)+
 move.l d1,(a4)+
 dbra d0,CLRLOP

 move.l OPTSPRADDR,a0
 move.w #44*256+64,(a0)
 move.w #44*256+2,8(a0)
 add.l #258*16,a0

 move.w #44*256+96,(a0)
 move.w #44*256+2,8(a0)
 add.l #258*16,a0

 move.w #44*256+128,(a0)
 move.w #44*256+2,8(a0)
 add.l #258*16,a0

 move.w #44*256+160,(a0)
 move.w #44*256+2,8(a0)
 add.l #258*16,a0

 move.w #44*256+192,(a0)
 move.w #44*256+2,8(a0)

 rts

DRAWOPTSCRN:

 bsr CLROPTSCRN

JUSTDRAWIT:

 move.l #font,a0
 move.l #MENUDATA,a1
 move.w OptScrn,d0
 move.l (a1,d0.w*8),a1
 
 move.l OPTSPRADDR,a3
 add.l #16,a3
 moveq #0,d2
 
 move.w #31,d0
linelop:
 move.w #39,d1
 move.l #SCRTOSPR,a4
 move.l a3,a2
charlop:
 move.b (a1)+,d2
 lea (a0,d2.w*8),a5
 move.b (a5)+,(a2)
 move.b (a5)+,16(a2)
 move.b (a5)+,32(a2)
 move.b (a5)+,48(a2)
 move.b (a5)+,64(a2)
 move.b (a5)+,80(a2)
 move.b (a5)+,96(a2)
 move.b (a5),112(a2)
 add.w (a4)+,a2
 dbra d1,charlop
 add.w #16*8,a3
 dbra d0,linelop
 
 rts
  
SCRTOSPR:
 dc.w 1,1,1,1,1,1,1,258*16-7
 dc.w 1,1,1,1,1,1,1,258*16-7
 dc.w 1,1,1,1,1,1,1,258*16-7
 dc.w 1,1,1,1,1,1,1,258*16-7
 dc.w 1,1,1,1,1,1,1,258*16-7
 dc.w 1,1,1,1,1,1,1,258*16-7
  
OPTNUM: dc.w 0
OptScrn: dc.w 0
 
SAVEGAMENAME: dc.b "tkg2:boot.dat",0
 even
 
SAVEGAMEPOS: dc.l 0
SAVEGAMELEN: dc.l 0
 
LOADPOSITION: 

 move.l #SAVEGAMENAME,a0
 move.l #SAVEGAMEPOS,d0
 move.l #SAVEGAMELEN,d1
 jsr INITQUEUE
 jsr QUEUEFILE
 jsr FLUSHQUEUE
 
 move.l SAVEGAMEPOS,a2	; address of first saved game.

 move.l #LSLOTA,a4

 move.l a2,a3
 move.w #5,d7
.findlevs:

 move.l a4,a1
 move.w (a3),d1
 muls #40,d1
 move.l LINKFILE,a0
 add.l #LevelName,a0
 add.l d1,a0
 jsr PUTINLINE
 add.l #80,a4
 add.w #2+(22*2)+(12*2),a3

 dbra d7,.findlevs

 move.w #8,OptScrn
 move.w #0,OPTNUM
 
 bsr DRAWOPTSCRN
 bsr HIGHLIGHT
 bsr WAITREL
 
.rdlop:
 bsr CHECKMENU
 tst.w d0
 blt.s .rdlop

 cmp.w #6,d0
 beq.s .noload
 
 move.l SAVEGAMEPOS,a0
 muls #2+(22*2)+(12*2),d0
 add.l d0,a0
 
 move.l #MASTERPLAYERONEHEALTH,a1
 move.w (a0)+,MAXLEVEL
 
 REPT 11
 move.l (a0)+,(a1)+
 ENDR
 REPT 6
 move.l (a0)+,(a1)+
 ENDR

 move.w MAXLEVEL,d0
 move.l #CURRENTLEVELLINE,a1
 muls #40,d0
 move.l LINKFILE,a0
 add.l #LevelName,a0
 add.l d0,a0
 bsr PUTINLINE
 
.noload:

 move.l SAVEGAMEPOS,a1
 move.l SAVEGAMELEN,d0
 CALLEXEC FreeMem

 rts
 
SAVEPOSITION:


 move.l #SAVEGAMENAME,a0
 move.l #SAVEGAMEPOS,d0
 move.l #SAVEGAMELEN,d1
 jsr INITQUEUE
 jsr QUEUEFILE
 jsr FLUSHQUEUE
 
 move.l SAVEGAMEPOS,a2	; address of first saved game.

 move.l #SSLOTA,a4

 move.l a2,a3
 move.w #5,d7
.findlevs:

 move.l a4,a1
 move.w (a3),d1
 muls #40,d1
 move.l LINKFILE,a0
 add.l #LevelName,a0
 add.l d1,a0
 jsr PUTINLINE
 add.l #80,a4
 add.w #2+(22*2)+(12*2),a3

 dbra d7,.findlevs

 move.w #9,OptScrn
 move.w #0,OPTNUM
 
 bsr DRAWOPTSCRN
 bsr HIGHLIGHT
 bsr WAITREL
 
.rdlop:
 bsr CHECKMENU
 tst.w d0
 blt.s .rdlop

 cmp.w #6,d0
 beq .nosave
 
 move.l SAVEGAMEPOS,a0
 muls #2+(22*2)+(12*2),d0
 add.l d0,a0
 
 move.l #MASTERPLAYERONEHEALTH,a1
 move.w MAXLEVEL,(a0)+
 
 REPT 11
 move.l (a1)+,(a0)+
 ENDR
 REPT 6
 move.l (a1)+,(a0)+
 ENDR
  
 move.l old,$dff080
 move.w #$8020,$dff000+intena

 move.l _IntuitionBase,a6
 jsr _LVORethinkDisplay(a6)

 move.l doslib,a6
 move.l #SAVEGAMENAME,d1
 move.l #1006,d2
 jsr -30(a6)
 move.l d0,handle

 move.l doslib,a6
 move.l SAVEGAMEPOS,d2
 move.l handle,d1
 move.l SAVEGAMELEN,d3
 jsr _LVOWrite(a6)
 
 move.l doslib,a6
 move.l handle,d1
 jsr -36(a6)
 
 move.l doslib,a6
 move.l #200,d1
 jsr -198(a6) 
 
 move.w #$0020,$dff000+intena
 move.l #titlecop,$dff080
  
.nosave:

 move.l SAVEGAMEPOS,a1
 move.l SAVEGAMELEN,d0
 CALLEXEC FreeMem

 rts
 
MENUDATA:
;0
 dc.l ONEPLAYERMENU_TXT
 dc.l ONEPLAYERMENU_OPTS
;1
 dc.l INSTRUCTIONS_TXT
 dc.l INSTRUCTIONS_OPTS
;2
 dc.l CREDITMENU_TXT
 dc.l CREDITMENU_OPTS
;3
 dc.l ASKFORDISK_TXT
 dc.l ASKFORDISK_OPTS
;4
; dc.l ONEPLAYERMENU_TXT
; dc.l ONEPLAYERMENU_OPTS
 dc.l MASTERPLAYERMENU_TXT
 dc.l MASTERPLAYERMENU_OPTS
;5
 dc.l SLAVEPLAYERMENU_TXT
 dc.l SLAVEPLAYERMENU_OPTS
;6
 dc.l CONTROL_TXT
 dc.l CONTROL_OPTS
;7
 dc.l PROTMENU_TXT
 dc.l CONTROL_OPTS
;8
 dc.l LOADMENU_TXT
 dc.l LOADMENU_OPTS
;9
 dc.l SAVEMENU_TXT
 dc.l SAVEMENU_OPTS
;10
 dc.l LEVELDISK_TXT
 dc.l ASKFORDISK_OPTS
 
 
EMPTYSLOTNAME:
;      0123456789012345678901234567890123456789
 dc.b '               EMPTY SLOT               ' 
 
LOADMENU_TXT: 
;      0123456789012345678901234567890123456789
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1
 dc.b '                                        ' ;2
 dc.b '                                        ' ;3
 dc.b '         LOAD A SAVED POSITION:         ' ;4
 dc.b '                                        ' ;5
 dc.b '                                        ' ;6
 dc.b '                                        ' ;7
 dc.b '                                        ' ;8
LSLOTA:
 dc.b '                                        ' ;9
 dc.b '                                        ' ;0
LSLOTB:
 dc.b '                                        ' ;1
 dc.b '                                        ' ;2
LSLOTC:
 dc.b '                                        ' ;3
 dc.b '                                        ' ;4
LSLOTD:
 dc.b '                                        ' ;5
 dc.b '                                        ' ;6
LSLOTE:
 dc.b '                                        ' ;7
 dc.b '                                        ' ;8
LSLOTF:
 dc.b '                                        ' ;9
 dc.b '                                        ' ;0
 dc.b '               * CANCEL *               ' ;1
 dc.b '                                        ' ;2
 dc.b '                                        ' ;3
 dc.b '                                        ' ;4
 dc.b '                                        ' ;5
 dc.b '                                        ' ;6
 dc.b '                                        ' ;7
 dc.b '                                        ' ;8
 dc.b '                                        ' ;9
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1
 
LOADMENU_OPTS:
 dc.w 0,9,40,1
 dc.w 0,11,40,1
 dc.w 0,13,40,1
 dc.w 0,15,40,1
 dc.w 0,17,40,1
 dc.w 0,19,40,1
 dc.w 14,21,12,1
 dc.w -1
 
LEVELDISK_TXT:
;      0123456789012345678901234567890123456789
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '  IF PLAYING FROM DISK, PLEASE INSERT   ' ;0
 dc.b '       LEVELS DISK IN DRIVE DF0:        ' ;0
 dc.b '                                        ' ;0
 dc.b '     PRESS MOUSE BUTTON WHEN READY..    ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0
 dc.b '                                        ' ;0

 
SAVEMENU_TXT: 
;      0123456789012345678901234567890123456789
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1
 dc.b '                                        ' ;2
 dc.b '                                        ' ;3
 dc.b '         SAVE CURRENT POSITION:         ' ;4
 dc.b '                                        ' ;5
 dc.b '                                        ' ;6
 dc.b '                                        ' ;7
 dc.b '                                        ' ;8
SSLOTA:
 dc.b '                                        ' ;9
 dc.b '                                        ' ;0
SSLOTB:
 dc.b '                                        ' ;1
 dc.b '                                        ' ;2
SSLOTC:
 dc.b '                                        ' ;3
 dc.b '                                        ' ;4
SSLOTD:
 dc.b '                                        ' ;5
 dc.b '                                        ' ;6
SSLOTE:
 dc.b '                                        ' ;7
 dc.b '                                        ' ;8
SSLOTF:
 dc.b '                                        ' ;9
 dc.b '                                        ' ;0
 dc.b '               * CANCEL *               ' ;1
 dc.b '                                        ' ;2
 dc.b '                                        ' ;3
 dc.b '                                        ' ;4
 dc.b '                                        ' ;5
 dc.b '                                        ' ;6
 dc.b '                                        ' ;7
 dc.b '                                        ' ;8
 dc.b '                                        ' ;9
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1

SAVEMENU_OPTS:
 dc.w 0,9,40,1
 dc.w 0,11,40,1
 dc.w 0,13,40,1
 dc.w 0,15,40,1
 dc.w 0,17,40,1
 dc.w 0,19,40,1
 dc.w 14,21,12,1
 dc.w -1
 
 
ASKFORDISK_TXT:
;      0123456789012345678901234567890123456789
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1
 dc.b '                                        ' ;2
 dc.b '                                        ' ;3
 dc.b '                                        ' ;4
 dc.b '                                        ' ;5
 dc.b '                                        ' ;6
 dc.b '                                        ' ;7
 dc.b '                                        ' ;8
 dc.b '                                        ' ;9
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1
 dc.b '                                        ' ;2
 dc.b '         PLEASE INSERT VOLUME:          ' ;3
 dc.b '                                        ' ;4
VOLLINE:
 dc.b '                                        ' ;9
 dc.b '                                        ' ;9
 dc.b '          PRESS MOUSE BUTTON            ' ;5
 dc.b '          WHEN DISK ACTIVITY            ' ;6
 dc.b '               FINISHES                 ' ;7
 dc.b '                                        ' ;8
 dc.b '                                        ' ;1
 dc.b '                                        ' ;2
 dc.b '                                        ' ;3
 dc.b '                                        ' ;4
 dc.b '                                        ' ;5
 dc.b '                                        ' ;6
 dc.b '                                        ' ;7
 dc.b '                                        ' ;8
 dc.b '                                        ' ;9
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1

ASKFORDISK_OPTS:
 dc.w -1
 
 
ONEPLAYERMENU_TXT:
;      0123456789012345678901234567890123456789
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1
 dc.b '                                        ' ;2
 dc.b '                                        ' ;3
 dc.b '                                        ' ;4
 dc.b '                                        ' ;5
 dc.b '                                        ' ;6
 dc.b '                                        ' ;7
 dc.b '                                        ' ;8
 dc.b '                                        ' ;9
 dc.b '                                        ' ;0
CURRENTLEVELLINE:
 dc.b '         *** A.F DEMO LEVEL ***         ' ;1 
 dc.b '                                        ' ;2
 dc.b '                1 PLAYER                ' ;3
 dc.b '                                        ' ;4
 dc.b '               PLAY  GAME               ' ;5
 dc.b '                                        ' ;6
 dc.b '            CONTROL  OPTIONS            ' ;7
 dc.b '                                        ' ;8
 dc.b '              GAME CREDITS              ' ;9
 dc.b '                                        ' ;0
 dc.b '             LOAD  POSITION             ' ;1
 dc.b '                                        ' ;2
PASSWORDLINE:
 dc.b '             SAVE  POSITION             ' ;1
 dc.b '                                        ' ;4
 dc.b '                  QUIT                  ' ;5
 dc.b '                                        ' ;6
 dc.b '                                        ' ;7
 dc.b '                                        ' ;8
 dc.b '                                        ' ;9
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1

ONEPLAYERMENU_OPTS:
 dc.w 0,11,40,1
 dc.w 16,13,8,1
 dc.w 15,15,10,1
 dc.w 12,17,16,1
 dc.w 14,19,12,1
 dc.w 12,21,16,1
 dc.w 12,23,16,1
 dc.w 18,25,4,1
 dc.w -1


MASTERPLAYERMENU_TXT:
;      0123456789012345678901234567890123456789
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1
 dc.b '                                        ' ;2
 dc.b '                                        ' ;3
 dc.b '                                        ' ;4
 dc.b '                                        ' ;5
 dc.b '                                        ' ;6
 dc.b '                                        ' ;7
 dc.b '                                        ' ;8
 dc.b '                                        ' ;9
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1
 dc.b '            2 PLAYER  MASTER            ' ;2
 dc.b '                                        ' ;3
CURRENTLEVELLINEM:
 dc.b '           LEVEL 1 : THE GATE           ' ;4 
 dc.b '                                        ' ;5
 dc.b '               PLAY  GAME               ' ;6
 dc.b '                                        ' ;7
 dc.b '            CONTROL  OPTIONS            ' ;8
 dc.b '                                        ' ;9
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1
 dc.b '                                        ' ;2
 dc.b '                                        ' ;3
 dc.b '                                        ' ;4
 dc.b '                                        ' ;5
 dc.b '                                        ' ;6
 dc.b '                                        ' ;7
 dc.b '                                        ' ;8
 dc.b '                                        ' ;9
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1

MASTERPLAYERMENU_OPTS:
 dc.w 12,12,16,1
 dc.w 6,14,28,1
 dc.w 15,16,10,1
 dc.w 12,18,16,1
 dc.w -1

SLAVEPLAYERMENU_TXT:
;      0123456789012345678901234567890123456789
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1
 dc.b '                                        ' ;2
 dc.b '                                        ' ;3
 dc.b '                                        ' ;4
 dc.b '                                        ' ;5
 dc.b '                                        ' ;6
 dc.b '                                        ' ;7
 dc.b '                                        ' ;8
 dc.b '                                        ' ;9
 dc.b '                                        ' ;9
 dc.b '                                        ' ;1
 dc.b '             2 PLAYER SLAVE             ' ;4
 dc.b '                                        ' ;3
 dc.b '               PLAY  GAME               ' ;2
 dc.b '                                        ' ;5
 dc.b '            CONTROL  OPTIONS            ' ;0
 dc.b '                                        ' ;1
 dc.b '                                        ' ;3
 dc.b '                                        ' ;7
 dc.b '                                        ' ;7
 dc.b '                                        ' ;3
 dc.b '                                        ' ;3
 dc.b '                                        ' ;3
 dc.b '                                        ' ;4
 dc.b '                                        ' ;5
 dc.b '                                        ' ;6
 dc.b '                                        ' ;7
 dc.b '                                        ' ;9
 dc.b '                                        ' ;9
 dc.b '                                        ' ;9
 dc.b '                                        ' ;9


PROTMENU_TXT:
;      0123456789012345678901234567890123456789
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1
 dc.b '                                        ' ;2
 dc.b '                                        ' ;3
 dc.b '                                        ' ;4
 dc.b '                                        ' ;5
 dc.b '                                        ' ;6
 dc.b '                                        ' ;7
 dc.b '                                        ' ;8
 dc.b '                                        ' ;9
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1
 dc.b ' TYPE IN THREE DIGIT CODE FROM MANUAL : ' ;2
 dc.b '                                        ' ;3
PROTLINE:
 dc.b '        TABLE 00 ROW 00 COLUMN 00       ' ;4
 dc.b '                                        ' ;5
 dc.b '                                        ' ;6
 dc.b '                                        ' ;7
 dc.b '                                        ' ;8
 dc.b '                                        ' ;9
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1
 dc.b '                                        ' ;2
 dc.b '                                        ' ;3
 dc.b '                                        ' ;4
 dc.b '                                        ' ;5
 dc.b '                                        ' ;6
 dc.b '                                        ' ;7
 dc.b '                                        ' ;9
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1



SLAVEPLAYERMENU_OPTS:
 dc.w 12,12,16,1
 dc.w 15,14,10,1
 dc.w 12,16,16,1
 dc.w -1

 
PLAYER_OPTS:
;      0123456789012345678901234567890123456789
 dc.b '                 1 PLAYER               '
 dc.b '             2  PLAYER MASTER           '
 dc.b '              2 PLAYER SLAVE            '
 
LEVEL_OPTS:
;      0123456789012345678901234567890123456789
 dc.b  '       CU AMIGA *EXCLUSIVE* DEMO        '
 dc.b '      LEVEL  2 :       STORAGE BAY      '
 dc.b '      LEVEL  3 :     SEWER NETWORK      '
 dc.b '      LEVEL  4 :     THE COURTYARD      '
 dc.b '      LEVEL  5 :      SYSTEM PURGE      '
 dc.b '      LEVEL  6 :         THE MINES      '
 dc.b '      LEVEL  7 :       THE FURNACE      '
 dc.b '      LEVEL  8 :  TEST ARENA GAMMA      '
 dc.b '      LEVEL  9 :      SURFACE ZONE      '
 dc.b '      LEVEL 10 :     TRAINING AREA      '
 dc.b '      LEVEL 11 :       ADMIN BLOCK      '
 dc.b '      LEVEL 12 :           THE PIT      '
 dc.b '      LEVEL 13 :            STRATA      '
 dc.b '      LEVEL 14 :      REACTOR CORE      '
 dc.b '      LEVEL 15 :     COOLING TOWER      '
 dc.b '      LEVEL 16 :    COMMAND CENTRE      '

CONTROL_TXT:
;      0123456789012345678901234567890123456789
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1
 dc.b '            DEFINE  CONTROLS            ' ;2
 dc.b '                                        ' ;3
KEY_LINES:
 dc.b '     TURN LEFT                  LCK     ' ;4
 dc.b '     TURN RIGHT                 RCK     ' ;5
 dc.b '     FORWARDS                   UCK     ' ;6
 dc.b '     BACKWARDS                  DCK     ' ;7
 dc.b '     FIRE                       RAL     ' ;8
 dc.b '     OPERATE DOOR/LIFT/SWITCH   SPC     ' ;9
 dc.b '     RUN                        RSH     ' ;0
 dc.b '     FORCE SIDESTEP             RAM     ' ;1
 dc.b '     SIDESTEP LEFT               .      ' ;2
 dc.b '     SIDESTEP RIGHT              /      ' ;3
 dc.b '     DUCK                        D      ' ;4
 dc.b '     LOOK BEHIND                 L      ' ;5
 dc.b '     JUMP                       KP0     ' ;6
 dc.b '     LOOK UP                     ]      ' ;7
 dc.b '     LOOK DOWN                   #      ' ;8
 dc.b '                                        ' ;9
 dc.b '             OTHER CONTROLS             ' ;0
 dc.b '                                        ' ;1
 dc.b '1-0   Select Weapon P              Pause' ;2
 dc.b 'F1   Zoom in on map F3 4/8 Channel Sound' ;3
 dc.b 'F2  Zoom out on map F4 Mono/Stereo Sound' ;4
 dc.b '    Keypad 1-9 scroll map, 5 centres    ' ;5
 dc.b '                                        ' ;6
 dc.b '                                        ' ;7
 dc.b '               MAIN  MENU               ' ;8
 dc.b '                                        ' ;9
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1

CONTROL_OPTS:
 dc.w 5,4,30,1
 dc.w 5,5,30,1
 dc.w 5,6,30,1
 dc.w 5,7,30,1
 dc.w 5,8,30,1
 dc.w 5,9,30,1
 dc.w 5,10,30,1
 dc.w 5,11,30,1
 dc.w 5,12,30,1
 dc.w 5,13,30,1
 dc.w 5,14,30,1
 dc.w 5,15,30,1
 dc.w 5,16,30,1
 dc.w 5,17,30,1
 dc.w 5,18,30,1
 dc.w 15,28,10,1
 dc.w -1

PLOPT: dc.w 0

INSTRUCTIONS_TXT:
;      0123456789012345678901234567890123456789
 dc.b 'Main controls:                          ' ;1
 dc.b '                                        ' ;2
 dc.b 'Curs Keys = Forward / Backward          ' ;3
 dc.b '            Turn left / right           ' ;4
 dc.b '          Right Alt = Fire              ' ;5
 dc.b '        Right Shift = Run               ' ;6
 dc.b '                  > = Slide Left        ' ;7
 dc.b '                  ? = Slide Right       ' ;8
 dc.b '              SPACE = Operate Door/Lift ' ;9
 dc.b '                  D = Duck              ' ;0
 dc.b '                  J = Joystick Control  ' ;1
 dc.b '                  K = Keyboard Control  ' ;2
 dc.b '                                        ' ;3
 dc.b '              1,2,3 = Select weapon     ' ;4
 dc.b '              ENTER = Toggle screen size' ;5
 dc.b '                ESC = Quit              ' ;6
 dc.b '                                        ' ;7
 dc.b '                                        ' ;8
 dc.b 'The one player game has no objective and' ;9
 dc.b 'the only way to finish is to die or quit' ;0
 dc.b '                                        ' ;1
 dc.b 'The two-player game is supposed to be a ' ;2
 dc.b 'fight to the death but will probably be ' ;3
 dc.b 'a fight-till-we-find-the-rocket-launcher' ;4
 dc.b 'then-blow-ourselves-up type game.       ' ;5
 dc.b '                                        ' ;6
 dc.b 'LOOK OUT FOR TELEPORTERS: They usually  ' ;7
 dc.b 'have glowing red walls and overhead     ' ;8
 dc.b 'lights. Useful for getting behind your  ' ;9
 dc.b ' opponent!                              ' ;0
 dc.b '  Just a taster of what is to come....  ' ;1
 dc.b '                                        ' ;0

INSTRUCTIONS_OPTS:
 dc.w 0,0,0,1
 dc.w -1

CREDITMENU_TXT:

;      0123456789012345678901234567890123456789
 dc.b '    Programming, Game Code, Graphics    ' ;0
 dc.b '         Game Design and Manual         ' ;1
 dc.b '            Andrew Clitheroe            ' ;2
 dc.b '                                        ' ;3
 dc.b '       Alien and Scenery Graphics       ' ;4
 dc.b '             Michael  Green             ' ;5
 dc.b '                                        ' ;6
 dc.b '           3D Object Designer           ' ;7
 dc.b '            Charles Blessing            ' ;8
 dc.b '                                        ' ;9
 dc.b '              Level Design              ' ;0
 dc.b 'Jackie Lang   Michael Green  Ben Chanter' ;1
 dc.b '                                        ' ;3
 dc.b '                                        ' ;3
 dc.b '           Creative  Director           ' ;4
 dc.b '              Martyn Brown              ' ;5
 dc.b '                                        ' ;6
 dc.b '       Project Manager and Manual       ' ;7
 dc.b '      "Lazy" Phil Quirke-Webster        ' ;8
 dc.b '                                        ' ;9
 dc.b '                 Music                  ' ;0
 dc.b '           Ben "666" Chanter            ' ;1
 dc.b '                                        ' ;2
 dc.b '      Cover Illustration and Logo       ' ;3
 dc.b '             Kevin Jenkins              ' ;4
 dc.b '                                        ' ;5
 dc.b '      Packaging and Manual Design       ' ;6
 dc.b '               Paul Sharp               ' ;7
 dc.b '                                        ' ;8
 dc.b '             QA and Playtest            ' ;9
 dc.b '           Phil and The Wolves          ' ;0
 dc.b '                                        ' ;1
 
 dc.b '    Serial Link and 3D Object Editor:   ' ;4
 dc.b '                   by                   ' ;5
 dc.b '            Charles Blessing            ' ;6
 dc.b '                                        ' ;7
 dc.b '                Graphics:               ' ;8
 dc.b '                   by                   ' ;9
 dc.b '              Mike  Oakley              ' ;0
 dc.b '                                        ' ;1
 dc.b '             Title  Picture             ' ;2
 dc.b '                   by                   ' ;3
 dc.b '               Mike Green               ' ;4
 dc.b '                                        ' ;5
 dc.b ' Inspiration, incentive, moral support, ' ;6
 dc.b '     level design and plenty of tea     ' ;7
 dc.b '         generously supplied by         ' ;8
 dc.b '                                        ' ;9
 dc.b '              Jackie  Lang              ' ;0
 dc.b '                                        ' ;1
 dc.b '    Music for the last demo composed    ' ;2
 dc.b '       by the inexpressibly evil:       ' ;3
 dc.b '                                        ' ;8
 dc.b '            *BAD* BEN CHANTER           ' ;9
 dc.b '                                        ' ;0
 dc.b '    Sadly no room for music this time   ' ;1
 dc.b '                                        ' ;7
 dc.b '                                        ' ;7

CREDITMENU_OPTS:
 dc.w 0,0,1,1
 dc.w -1


;      0123456789012345678901234567890123456789
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1
 dc.b '                                        ' ;2
 dc.b '                                        ' ;3
 dc.b '                                        ' ;4
 dc.b '                                        ' ;5
 dc.b '                                        ' ;6
 dc.b '                                        ' ;7
 dc.b '                                        ' ;8
 dc.b '                                        ' ;9
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1
 dc.b '                                        ' ;2
 dc.b '                                        ' ;3
 dc.b '                                        ' ;4
 dc.b '                                        ' ;5
 dc.b '                                        ' ;6
 dc.b '                                        ' ;7
 dc.b '                                        ' ;8
 dc.b '                                        ' ;9
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1
 dc.b '                                        ' ;2
 dc.b '                                        ' ;3
 dc.b '                                        ' ;4
 dc.b '                                        ' ;5
 dc.b '                                        ' ;6
 dc.b '                                        ' ;7
 dc.b '                                        ' ;8
 dc.b '                                        ' ;9
 dc.b '                                        ' ;0
 dc.b '                                        ' ;1


********************************************************
 
PUTIN32:
 move.w #31,d2
p32loop:
 moveq #0,d5
 move.l (a0)+,d3
 move.w d3,d4
 swap d3
 move.b d4,d5
 lsr.w #8,d4

 muls d0,d3
 muls d0,d4
 muls d0,d5
 lsr.l #8,d3
 lsr.l #8,d4
 lsr.l #8,d5
 move.w d3,d6
 swap d3
 move.w d6,d3
 move.w d4,d6
 swap d4
 move.w d6,d4
 move.w d5,d6
 swap d5
 move.w d6,d5
 and.w #%11110000,d3
 and.w #%11110000,d4
 and.w #%11110000,d5
 lsl.w #4,d3
 add.w d4,d3
 lsr.w #4,d5
 add.w d5,d3
 move.w d3,2(a1)
 swap d3
 swap d4
 swap d5
 and.w #%1111,d3
 and.w #%1111,d4
 and.w #%1111,d5
 lsl.w #8,d3
 lsl.w #4,d4
 add.w d4,d3
 add.w d5,d3
 move.w d3,2+(132*4)(a1)
 addq #4,a1
 dbra d2,p32loop


 rts

**************************************

FADEAMOUNT: dc.w 0
FADEVAL: dc.w 0

FADEUPTITLE:

 move.w FADEVAL,d0
 move.w FADEAMOUNT,d1
fadeuploop:

 move.l #TITLEPAL,a0
 move.l #TITLEPALCOP,a1

wvb:
 btst #5,$dff000+intreqrl
 beq.s wvb
 move.w #$20,$dff000+intreq 

 bsr PUTIN32
 add.w #4,a1
 bsr PUTIN32
 add.w #4,a1
 bsr PUTIN32
 add.w #4,a1
 bsr PUTIN32

 addq.w #8,d0
 dbra d1,fadeuploop

 subq #8,d0
 move.w d0,FADEVAL

 rts
 
CLEARTITLEPAL:
 PRSDP
 move.l #TITLEPALCOP,a0
 move.w #7,d1
clrpal:
 move.w #31,d0
clr32
 move.w #0,2(a0)
 addq #4,a0
 dbra d0,clr32
 addq #4,a0
 dbra d1,clrpal
 PRSDQ
 rts

FADEDOWNTITLE:

 move.w FADEVAL,d0
 move.w FADEAMOUNT,d1
fadedownloop:

 move.l #TITLEPAL,a0
 move.l #TITLEPALCOP,a1

.wvb:
 btst #5,$dff000+intreqrl
 beq.s .wvb
 move.w #$20,$dff000+intreq 

 bsr PUTIN32
 add.w #4,a1
 bsr PUTIN32
 add.w #4,a1
 bsr PUTIN32
 add.w #4,a1
 bsr PUTIN32

 subq.w #8,d0
 dbra d1,fadedownloop

 addq #8,d0
 move.w d0,FADEVAL

 rts

LOADTITLESCRN2:


 move.l #MEMF_CLEAR,d1
 move.l #52400,d0
 move.l 4.w,a6
 jsr    _LVOAllocMem(a6)
 tst.l  d0
 beq    .nomem

 move.l d0,tempptr
 
 move.l TITLESCRNPTR,d1
 move.l #1005,d2
 move.l doslib,a6
 jsr -30(a6)
 move.l d0,handle
 move.l d0,d1
 move.l doslib,a6
; move.l TITLESCRNADDR,d2
 move.l tempptr,d2
 move.l #10240*7,d3
 jsr -42(a6)
 move.l doslib,a6
 move.l handle,d1
 jsr -36(a6)

	
 move.l TITLESCRNADDR,a0
 move.l tempptr,d0

 moveq #0,d1
 lea WorkSpace,a1
 lea $0,a2
 jsr unLHA

 move.l tempptr,a1
 move.l #52400,d0
 CALLEXEC FreeMem
  
.nomem
 
 rts

tempptr dc.l 0


GETTITLEMEM:
 move.l #2,d1
 move.l #10240*7,d0
 move.l 4.w,a6
 jsr -198(a6)
 move.l d0,TITLESCRNADDR
 
 move.l #$dff000-$2cdfe4,a4
 
 move.l #2,d1
 move.l #258*16*5,d0
 move.l 4.w,a6
 jsr -198(a6)
 move.l d0,OPTSPRADDR
 
 rts
 
ProtChkJLev1:

PROTSETUP:
 incbin "ab3:includes/protsetupenc"

; Need to: Decode protection calling
; routine
; use null values to call it and erase
; it from memory
; erase this routine and return.

; include "ab3:source/protsetup"
 

RELEASETITLEMEM:
 move.l TITLESCRNADDR,d1
 move.l d1,a1
 move.l #10240*7,d0
 move.l 4.w,a6
 jsr -210(a6)

 move.l OPTSPRADDR,d1
 move.l d1,a1
 move.l #258*80,d0
 move.l 4.w,a6
 jsr -210(a6)
 rts
 

PROTCALLENC:
; incbin "ab3:source/protcallenc.bin

; one pass, all instructions executed.
; must call protection routine,store
; value somewhere, call ask routine,
; compare returned value, if correct
; set up all values, then return.

; include "ab3:source_4000/protcallenc"

ENDPROT:
 
LOADTITLESCRN:
 
 move.l #TITLESCRNNAME,d1
 move.l #1005,d2
 move.l doslib,a6
 jsr -30(a6)
 move.l d0,handle
 move.l d0,d1
 move.l doslib,a6
 move.l TITLESCRNADDR,d2
 move.l #10240*7,d3
 jsr -42(a6)
 move.l doslib,a6
 move.l handle,d1
 jsr -36(a6)
 
 rts

RVAL2: dc.w 0

SETUPTITLESCRN:

 PRSDR
 move.l #OPTCOP,a0
 move.l #rain,a1
 move.w #255,d0
putinrain:
 move.w (a1)+,d1
 move.w d1,6(a0)
 move.w d1,6+4(a0)
 move.w d1,6+8(a0)
 move.w d1,6+12(a0)
 add.w #4*14,a0

 dbra d0,putinrain

; Put addr into copper.
 move.l OPTSPRADDR,d0
 move.w d0,tsp0l
 swap d0
 move.w d0,tsp0h
 swap d0
 add.l #258*16,d0
 move.w d0,tsp1l
 swap d0
 move.w d0,tsp1h
 swap d0
 add.l #258*16,d0
 move.w d0,tsp2l
 swap d0
 move.w d0,tsp2h
 swap d0
 add.l #258*16,d0
 move.w d0,tsp3l
 swap d0
 move.w d0,tsp3h
 swap d0
 add.l #258*16,d0
 move.w d0,tsp4l
 swap d0
 move.w d0,tsp4h
 
 move.l #nullspr,d0
 move.w d0,tsp5l
 move.w d0,tsp6l
 move.w d0,tsp7l
 swap d0
 move.w d0,tsp5h
 move.w d0,tsp6h
 move.w d0,tsp7h 

 move.l TITLESCRNADDR,d0
 move.w d0,ts1l
 swap d0
 move.w d0,ts1h
 swap d0
 add.l #10240,d0
 move.w d0,ts2l
 swap d0
 move.w d0,ts2h
 swap d0
 add.l #10240,d0
 move.w d0,ts3l
 swap d0
 move.w d0,ts3h
 swap d0
 add.l #10240,d0
 move.w d0,ts4l
 swap d0
 move.w d0,ts4h
 swap d0
 add.l #10240,d0
 move.w d0,ts5l
 swap d0
 move.w d0,ts5h
 swap d0
 add.l #10240,d0
 move.w d0,ts6l
 swap d0
 move.w d0,ts6h
 swap d0
 add.l #10240,d0
 move.w d0,ts7l
 swap d0
 move.w d0,ts7h
 rts 

RVAL1: dc.w 0

DummyAdds:
 dc.l dummy-78935450
 dc.l dummy-78935450
 dc.l dummy-78935450
 dc.l dummy-78935450
 dc.l dummy-78935450
 dc.l dummy-78935450
 dc.l dummy-78935450
 dc.l dummy-78935450
 dc.l dummy-78935450
 dc.l dummy-78935450

dummycall
 dc.w $4e75-123
 
protspace: 
 ;ds.l 200

 include "ab3:CHEESESAUCE/LEVEL_BLURB"
 
font:
 incbin "OptFont"

rain: incbin "optcop"
