; Assembling this single file can generate almost exactly the same bytes as the original released game ; the differences are only bytes in uninitialised memory areas and do not matter, but Zeus reports them ; as "9 source lines generate bytes that differ" if you use comparison mode. ; ; In Zeus hitting "assemble then emulate" will build this and let you play it in the internal emulator. ; ; There are two known bugs in Warlock :( ; The main one is that when the player opens the chest the code screws IX and can crash the game, nasty... ; A lesser one is that the initialise code doesn't correctly initialise one of the things, so it's always dead ; which isn't a problem anyone ever notices. ; These are both fixed by default in this code, but you can restore them to generate the original game. ; ; This is a bit untidy as it's a single file whereas there were four original sources. ; ; I might get round to releasing a tidied version, have a look at www.desdes.com/products/oldfiles ; ; (c) 1984..2018 Simon Brattel and Neil Mottershead. All rights, wrongs and buggered if I knows reserved. emulate_spectrum "48K" ; Tell Zeus what to emulate ;bCheckCopy equ true ; Compare the code with the original, if you have the file. ;bWalkThroughWalls equ not enabled bCheckCopy ; The man can walk through walls, handy for debugging. ; Comment these out to restore the bugs bCureExitBug equ not enabled bCheckCopy ; Cure the exit bug, unless we're comparing with the original code bCureThingInitBug equ not enabled bCheckCopy ; Cure the initialise bug, unless we're comparing with the original code ; Constants KeyNo equ 15 ; This is the number of keys that have to be collected. ; Various damages SwdDamMan equ 20 ; SwdDamTg equ 8 ; ArrDam equ 10 ; ; Offsets into a thing definition. TgAlive is 0, TgX is 1, TgY is 3 and so on... struct ; TgAlive ds 1 ; Paradoxically, if this is NZ it's dead. TgX ds 2 ; TgY ds 2 ; TgSpeed ds 1 ; TgISpeed ds 1 ; TgpMove ds 2 ; TgpShape ds 2 ; TgMDir ds 1 ; TgnArrow ds 1 ; TgDamage ds 1 ; TgType ds 1 ; TgW1X ds 1 ; TgW2X ds 1 ; TgW1Y ds 1 ; TgW2Y ds 1 ; TgNDir ds 1 ; TgStage ds 1 ; TgMode ds 1 ; TgTargX ds 1 ; TgTargY ds 1 ; TgMType ds 1 ; TgPause ds 1 ; TgGuardDuty ds 1 ; TgRoomX ds 1 ; TgRoomY ds 1 ; TgOffsetX ds 1 ; TgOffsetY ds 1 ; TgTreas ds 1 ; TgUseSword ds 1 ; TgMRoomX ds 1 ; TgMRoomY ds 1 ; TgTDir ds 1 ; TgFDir ds 1 ; TgSMode ds 1 ; TgSSpeed ds 1 ; TgSSpeedI ds 1 ; TgADRate ds 1 ; TgARate ds 1 ; TgDRate ds 1 ; TgMinDel ds 1 ; TgMaxDel ds 1 ; TgAStep ds 1 ; TgDStep ds 1 ; TgTargX16 ds 2 ; TgTargY16 ds 2 ; TgContDam ds 1 ; ds 12 ; Unused lThing send ; nObjects equ 8 ; nArrow equ 8 ; nThings equ 33 ; Includes the man and the warlock with bug... Sentry equ 0 ; Range equ 5 ; LookRange equ 40 ; nRhumes equ 50 ; nOpen equ 5 ; nArch equ 2 ; DoorProb equ 10 ; ; Characters CornBase equ #90 ; Wall0 equ #95 ; Wall1 equ #9A ; Wall2 equ #91 ; Wall3 equ #98 ; Wall4 equ #94 ; Wall5 equ #92 ; Wall6 equ #DC ; Wall7 equ #DD ; xDisp equ 4 ; yDisp equ 3 ; pAttrib equ #5800 ; pyREP equ #4880 ; pxREP equ 80 ; pySPC equ #50E0 ; pxSPC equ 30 ; CurSpeed equ 255 ; ScanRate equ 14 ; org $5B00 ; AppFirst equ * ; Entry jp Begin ; LineYs dw #4000,#4020,#4040,#4060 ; dw #4080,#40A0,#40C0,#40E0 ; dw #4800,#4820,#4840,#4860 ; dw #4880,#48A0,#48C0,#48E0 ; dw #5000,#5020,#5040,#5060 ; dw #5080,#50A0,#50C0,#50E0 ; ; Front end variables GetIB ds 110 ; GetIL dw 0 ; CurY dw 0 ; CurX db 0 ; Score dw 0 ; HSptr1 dw 0 ; HSptr2 dw 0 ; HSDoneIt db 0 ; HSy dw 0 ; PrintMess push ix ; push bc ; push hl ; ld e,(ix) ; ld d,(ix+1) ; ld (CurY),de ; xor a ; ld (CurX),a ; call DWMess ; pop hl ; pop bc ; pop ix ; inc ix ; inc ix ; call SkipTZ ; djnz PrintMess ; ret ; PrintSpc ld hl,SpcMess ; ld b,1 ; ld ix,LineYs+46 ; jp PrintMess ; PrintWait ld hl,sWait ; ld b,1 ; ld ix,LineYs+46 ; jp PrintMess ; PrintBlurb3 ld hl,ThirdShit ; ld b,24 ; jr Burble ; PrintBlurb2 ld hl,SecondShit ; ld b,24 ; jr Burble ; PrintBlurb1 ld b,$18 ; ld hl,FirstSheet ; Burble ld ix,LineYs ; call PrintMess ; ret ; Begin di ; ld sp,Maze ; Begin0Ex ld hl,0 ; ld (Score),hl ; call CLS ; call PrintBlurb1 ; call WaitTS ; call CLS ; call PrintBlurb2 ; call WaitTNS ; call WaitTS ; call CLS ; call PrintBlurb3 ; call WaitTNS ; call WaitTS ; ld hl,0 ; ld (Score),hl ; BeginSc3 call HighDisp ; call PrintSpc ; Sc3lp ld bc,$DFFE ; in a,(c) ; bit 2,a ; jr z Begin0Ex ; ld bc,$7FFE ; in a,(c) ; bit 0,a ; jr nz Sc3lp ; call PrintSpc ; call PrintWait ; call Game ; ld (Score),hl ; call Report ; jr BeginSc3 ; WaitTS ld bc,$7FFE ; in a,(c) ; bit 0,a ; jr nz WaitTS ; ret ; WaitTNS ld bc,$7FFE ; in a,(c) ; bit 0,a ; jr z WaitTS ; ret ; HighDisp call CLS ; ld ix,LineYs ; ld hl,Mess6 ; ld b,4 ; call PrintMess ; xor a ; ld (HSDoneIt),a ; ld hl,HighScores ; ld a,1 ; ld (CurX),a ; ld a,'1' ; HighLoop push af ; push hl ; push ix ; ld e,(ix) ; ld d,(ix+1) ; ld (CurY),de ; push ix ; push hl ; call OutChar ; pop hl ; pop ix ; call LeaveLine ; jp c HighL1 ; ld a,10 ; ld (CurX),a ; call DWMess ; ld a,0 ; ld (CurX),a ; pop ix ; pop hl ; pop af ; call SkipTZ ; ld e,(hl) ; inc hl ; ld d,(hl) ; inc hl ; push hl ; push af ; ld l,(ix) ; ld h,(ix+1) ; ld bc,27 ; add hl,bc ; push ix ; call DispNo ; pop ix ; pop af ; pop hl ; HighL2 inc ix ; inc ix ; inc a ; cp '9'+1 ; jr nz HL1 ; ld a,'A' ; HL1 cp 'H' ; jr nz HighLoop ; inc hl ; inc hl ; ld (HSptr2),hl ; ld a,(HSDoneIt) ; or a ; ret z ; ld hl,(HSy) ; ld (CurY),hl ; ld a,$0A ; ld (CurX),a ; call GetInput ; call InsertEnt ; ld hl,$0000 ; ld (Score),hl ; call HighDisp ; ret ; CLS ld hl,$4000 ; ld de,$4001 ; ld bc,$1800 ; ld (hl),$00 ; ldir ; ld bc,$02FF ; ld (hl),$0F ; ldir ; ld a,1 ; out ($FE),a ; ret ; InsertEnt ld bc,(GetIL) ; inc bc ; inc bc ; inc bc ; ld hl,(HSptr2) ; add hl,bc ; ex de,hl ; ld hl,(HSptr2) ; push hl ; push de ; ld hl,(HSptr2) ; ld de,(HSptr1) ; or a ; sbc hl,de ; ld b,h ; ld c,l ; inc bc ; pop de ; pop hl ; lddr ; ld hl,GetIB ; ld de,(HSptr1) ; ld bc,(GetIL) ; ldir ; ex de,hl ; ld (hl),0 ; inc hl ; ld de,(Score) ; ld (hl),e ; inc hl ; ld (hl),d ; ret ; GetInput ld hl,GetIB ; GetIl push hl ; ld c,1 ; ld b,CurSpeed ; call PutCursor ; InLin2 djnz InLin3 ; ld a,c ; xor 1 ; ld c,a ; call PutCursor ; ld b,CurSpeed ; InLin3 push bc ; push hl ; call ReadKey ; pop hl ; pop bc ; or a ; jr z InLin2 ; bit 0,c ; jr z InLin4 ; call PutCursor ; InLin4 pop hl ; cp 8 ; jp z DelChar ; cp $0D ; jr z GetIEx ; push hl ; push af ; call OutChar ; pop af ; pop hl ; ld (hl),a ; inc hl ; ld a,(CurX) ; cp 214 ; jp nc DelChar ; jr GetIl ; GetIEx ld (hl),0 ; ld de,GetIB ; or a ; sbc hl,de ; jp z Silly ; ld a,l ; cp 100 ; jp nc Silly4 ; ld (GetIL),hl ; ld ix,Clues ; ld iy,NameList ; SillyL1 call CompStr ; jr z PlaceStr ; call StepIXtz ; call StepIYtz ; ld a,(ix) ; cp $FF ; ret z ; jr SillyL1 ; StepIXtz ld a,(ix) ; inc ix ; or a ; jr nz StepIXtz ; ret ; StepIYtz ld a,(iy) ; inc iy ; or a ; jr nz StepIYtz ; ret ; SkipSp ld a,(hl) ; cp $20 ; ret nz ; inc hl ; CompStr push ix ; ld hl,GetIB ; Cpir ld a,(hl) ; inc hl ; cp $20 ; jr z Cpir ; or a ; jr z CpirF ; call ConvLC ; cp (ix) ; inc ix ; jr z Cpir ; dec ix ; CpirF ld a,(ix) ; or a ; pop ix ; ret ; ConvLC cp 'Z'+1 ; ret nc ; cp 'A' ; ret c ; add a,'a'-'A' ; ret ; PlaceStr push iy ; pop hl ; jr SillyOut ; An5 db "At it again I see !" ; db 0 ; An4 db "Someone" ; db 0 ; Silly ld hl,An4 ; jr SillyOut ; Silly4 ld hl,An5 ; SillyOut ld de,GetIB ; ld bc,0 ; SillyLp ld a,(hl) ; ld (de),a ; or a ; ld (GetIL),bc ; ret z ; inc bc ; inc de ; inc hl ; jr SillyLp ; NameList db "Design Design Software",0 ; db "It's a fair cop !",0 ; db "Oh god knows !",0 ; db "Wrong game !",0 ; db "(c) N.Mottershead & S.Brattel",0; db "Not enough Hobbits I suppose ?",0; db "Ian Livingstone I presume",0; db "The only game more tedious than this",0; db "Still waiting !",0 ; db "Strange thing to type !",0 ; db "Shit somewhere else !",0 ; Clues db "crystal",0 ; db "s.brattel",0 ; db "n.mottershead",0 ; db "6031769",0 ; db "(c)",0 ; db "t.bridge",0 ; db "warlock",0 ; db "thehobbit",0 ; db "sex",0 ; db "fuck",0 ; db "shit",0 ; db $FF ; PutCursor push af ; ld a,(CurX) ; push af ; ld a,'_' ; push bc ; push de ; push hl ; push ix ; call OutChar ; pop ix ; pop hl ; pop de ; pop bc ; pop af ; ld (CurX),a ; pop af ; ret ; DelChar ex de,hl ; ld hl,GetIB ; or a ; sbc hl,de ; ex de,hl ; jp z GetIl ; dec hl ; ld a,(hl) ; push hl ; ld l,a ; ld h,0 ; ld de,Wset ; add hl,de ; ld b,(hl) ; ex af,af' ; ld a,(CurX) ; sub b ; ld (CurX),a ; ex af,af' ; call OutChar ; ex af,af' ; ld (CurX),a ; pop hl ; jp GetIl ; HighL1 pop ix ; ld l,(ix) ; ld h,(ix+1) ; ld bc,27 ; add hl,bc ; ld de,(Score) ; push ix ; call DispNo ; pop ix ; ld a,0 ; ld (CurX),a ; pop hl ; pop af ; jp HighL2 ; Report call CLS ; ld hl,pyREP ; ld (CurY),hl ; ld a,$50 ; ld (CurX),a ; ld hl,MessRep ; call DWMess ; ld hl,(Score) ; call PrintDec ; call Delay ; ret ; Delay ld bc,0 ; Del1 push ix ; push ix ; pop ix ; pop ix ; push ix ; push ix ; pop ix ; pop ix ; dec bc ; ld a,c ; or b ; jr nz Del1 ; ret ; KeyScan ld hl,kMap ; ld a,(hl) ; rlca ; ld (hl),a ; in a,($FE) ; or $E0 ; ld c,a ; inc hl ; ld a,(hl) ; ld d,$00 ; inc a ; and $07 ; ld (hl),a ; ld e,a ; inc e ; add hl,de ; ld a,$FE ; in a,($FE) ; ld d,a ; ld a,$7F ; in a,($FE) ; rrca ; rrca ; rl d ; ld e,c ; KeyS0 ld a,e ; xor (hl) ; ret z ; ld c,a ; xor a ; ld b,$FF ; scf ; KeyS1 rla ; inc b ; rrc c ; jr nc KeyS1 ; ld c,a ; xor (hl) ; ld (hl),a ; ld a,e ; and c ; jr nz KeyS0 ; ld a,(kMap+1) ; ld c,a ; add a,a ; add a,a ; add a,c ; add a,b ; ld c,a ; ld b,0 ; ld hl,kTab ; add hl,bc ; ld bc,40 ; rr d ; jr c KeyS2 ; add hl,bc ; KeyS2 rr d ; jr c KeyS3 ; add hl,bc ; add hl,bc ; KeyS3 ld a,(hl) ; ret ; ReadKey push bc ; ld b,ScanRate ; IntLL2 push bc ; call KeyScan ; or a ; pop bc ; jr nz IntFin ; djnz IntLL2 ; IntFin pop bc ; ret ; kMap db #7F,7 ; db #FF,#FF,#FF,#FF ; db #FF,#FF,#FF,#FF ; kTab db #00, "Z", "X", "C", "V" ; db "A", "S", "D", "F", "G" ; db "Q", "W", "E", "R", "T" ; db "1", "2", "3", "4", "5" ; db "0", "9", "8", "7", "6" ; db "P", "O", "I", "U", "Y" ; db #0D, "L", "K", "J", "H" ; db #20,#00, "M", "N", "B" ; db #00, ":", "`", "?", "/" ; db #00,#00,#00,#00,#00 ; db #00,#00,#00, "<", ">" ; db "!", "@", "#", "$", "%" ; db "_", ")", "(", "'", "&" ; db #22, ";",#00,#00,#00 ; db #00, "=", "+", "-", "^" ; db #00,#00, ".", ",", "*" ; db #00, "z", "x", "c", "v" ; db "a", "s", "d", "f", "g" ; db "q", "w", "e", "r", "t" ; db "1", "2", "3", "4", "5" ; db #08, "9", "8", "7", "6" ; db "p", "o", "i", "u", "y" ; db #00, "l", "k", "j", "h" ; db #20,#00, "m", "n", "b" ; db #00, "Z", "X", "C", "V" ; db "A", "S", "D", "F", "G" ; db "Q", "W", "E", "R", "T" ; db "1", "2", "3", "4", "5" ; db "0", "9", "8", "7", "6" ; db "P","O","I","U","Y" ; db #0D, "L", "K", "J", "H" ; db #00,#00, "M", "N", "B" ; SkipTZ push af ; SkipTZl ld a,(hl) ; or a ; jr z SkipTZx ; inc hl ; jr SkipTZl ; SkipTZx inc hl ; pop af ; ret ; PrintOne sub 10 ; push af ; ld a,'1' ; call OutChar ; pop af ; ret ; PrintDec push hl ; pop de ; ld c,0 ; ld a,d ; and $F0 ; rrca ; rrca ; rrca ; rrca ; call PDec ; ld a,d ; and $0F ; call PDec ; ld a,e ; and $F0 ; rrca ; rrca ; rrca ; rrca ; call PDec ; ld a,e ; and $0F ; call PDec ; xor a ; call PDec2 ; ret ; PDec or a ; jr z PDec1 ; ld c,$01 ; PDec2 push de ; push bc ; or $30 ; call OutChar ; pop bc ; pop de ; ret ; PDec1 bit 0,c ; jr nz PDec2 ; ret ; DispNo ld c,0 ; ld a,d ; and $F0 ; rrca ; rrca ; rrca ; rrca ; call PDig ; ld a,d ; and $0F ; call PDig ; ld a,e ; and $F0 ; rrca ; rrca ; rrca ; rrca ; call PDig ; ld a,e ; and $0F ; call PDig ; xor a ; call PDig2 ; ret ; PDig or a ; jr z PDig1 ; ld c,1 ; PDig2 push hl ; push de ; ld e,a ; ld d,0 ; ld ix,DigTab ; add ix,de ; ld de,10 ; ld b,7 ; PDigL ld a,(ix) ; ld (hl),a ; inc h ; add ix,de ; djnz PDigL ; pop de ; pop hl ; inc l ; ret ; PDig1 bit 0,c ; jr nz PDig2 ; ret ; DWMess ld a,(hl) ; or a ; ret z ; inc hl ; push hl ; call OutChar ; pop hl ; jr DWMess ; OutChar push af ; ld l,a ; ld h,0 ; add hl,hl ; add hl,hl ; add hl,hl ; ld de,Cset ; add hl,de ; push hl ; pop ix ; ld a,(CurX) ; rrca ; rrca ; rrca ; and $1F ; ld de,(CurY) ; or e ; ld e,a ; ld a,(CurX) ; and $07 ; ld c,a ; ld b,8 ; OutCharL call GetHL ; ld a,(de) ; xor h ; ld (de),a ; inc e ; ld a,(de) ; xor l ; ld (de),a ; dec e ; inc ix ; inc d ; djnz OutCharL ; pop af ; ld l,a ; ld h,0 ; ld de,Wset ; add hl,de ; ld b,(hl) ; ld a,(CurX) ; add a,b ; ld (CurX),a ; ld a,1 ; ld a,1 ; ?? ld a,1 ; ?? ret ; GetHL ld h,(ix) ; ld l,0 ; ld a,c ; GetHLlp or a ; jr nz GetHLsh ; ret ; GetHLsh dec a ; srl h ; rr l ; jr GetHLlp ; DigTab db #1C,8,#1C,#3E,4,#3E,#E,#3E,#1C,#1C; db #22,#18,#22,2,#C,#20,#10,2,#22,#22; db #26,8,2,4,#14,#3C,#20,4,#22,#22; db #2A,8,#C,#C,#24,2,#3C,8,#1C,#1E; db #32,8,#10,2,#3E,2,#22,#10,#22,2; db #22,8,#20,#22,4,#22,#22,#10,#22,4; db #1C,#1C,#3E,#1C,4,#1C,#1C,#10,#1C,#38; LeaveLine push de ; push bc ; push hl ; ld a,(HSDoneIt) ; or a ; jr nz LLexNC ; call SkipTZ ; ld e,(hl) ; inc hl ; ld d,(hl) ; ld hl,(Score) ; or a ; sbc hl,de ; jr c LLexNC ; jr z LLexNC ; pop hl ; push hl ; ld (HSptr1),hl ; ld l,(ix) ; ld h,(ix+1) ; ld (HSy),hl ; ld a,1 ; ld (HSDoneIt),a ; pop hl ; pop bc ; pop de ; scf ; ret ; LLexNC pop hl ; pop bc ; pop de ; or a ; ret ; ; Mess6 db " Warlock Of Firetop Mountain ",0,0; db " Hall of Fame",0,0; SpcMess db " Press SPACE to play or I for Instructions",0; MessRep db " You scored :-",0 ; FirstSheet db " ",0,0 ; db "You are about to enter the vast and complex",0; db "labyrinth that lies beneath the awesome crags",0; db "of Firetop Mountain . Created by the evil",0; db "Warlock to guard himself and his fabulous",0; db "treasure , the labyrinth is crawling with",0; db "vicious monsters , such as Orcs , Spiders ,",0; db "Slime Moulds and others , which will all take",0; db "the greatest pleasure in preventing your",0; db "return to the surface .",0 ; db 0 ; db "All you have with you is a bow and your",0; db "trusty sword , which has been with you on",0; db "many an adventure .",0 ; db 0 ; db "You must collect the fifteen magic keys in",0; db "order to unlock the Warlocks treasure chest",0; db "and escape with your life .",0; db 0 ; db 0 ; db 0 ; db 0 ; db "Press SPACE to continue .",0; SecondShit db "Keys :-",0 ; db 0 ; db "Z : Move left",0 ; db "X : Move right",0 ; db "N : Move up",0 ; db "M : Move down",0 ; db "S : Draw or sheath sword",0; db "A : Fire an arrow in the direction faced",0; db "O : Open a door",0 ; db "C : Close a door",0 ; db "W : Set colour or B/W display",0; db "SPACE : Centre the man on screen",0; db "1 : Display score and number of keys held",0; db "2 : Game pause",$00,"3 : Turn the noises on",0; db "4 : Turn the noises off",$00,"5 : Face left",0; db "6 : Face up",0 ; db "7 : Face down",0 ; db "8 : Face right",0 ; db "0 : Face in the direction of motion",0; db 0 ; db 0 ; db "Press SPACE to continue .",0; ThirdShit db "General advice :-",0 ; db 0 ; db "The arrows fire and the sword acts in the",0; db "direction you are facing .",0; db 0 ; db "To open doors the man must be next to the",0; db " door and either facing it or moving toward it",0; db 0 ; db "Picking up keys and opening the chest is done",0; db "by moving onto them .",0 ; db 0 ; db "Once the chest has been collected you must",0; db " find the exit now displayed somewhere in the",0; db "maze .",0 ; db 0 ; db 0 ; db 0 ; db "Program written by N.Mottershead & S.Brattel",0; db "of Crystal Computing",0 ; db 0 ; db 0 ; db 0 ; db 0 ; db "Press SPACE to continue .",$00; sWait db "Please wait .",0 ; db 0 ; db 0 ; db 0 ; db 0 ; ; The character widths align 256 ; Wset db $07,$09,$09,$09,$09,$09,$09,$03 ; Widths of the characters db $05,$05,$05,$05,$03,$05,$05,$05 ; db $05,$03,$05,$05,$05,$05,$09,$09 ; db $07,$09,$07,$02,$05,$09,$07,$09 ; db $06,$02,$04,$06,$06,$06,$06,$02 ; db $04,$04,$06,$06,$03,$06,$02,$06 ; db $06,$06,$06,$06,$06,$06,$06,$06 ; db $06,$06,$02,$03,$05,$06,$05,$06 ; db $06,$06,$06,$06,$06,$06,$06,$06 ; db $06,$04,$06,$06,$06,$06,$06,$06 ; db $06,$06,$06,$06,$06,$06,$06,$06 ; db $06,$06,$06,$06,$06,$06,$06,$06 ; db $06,$06,$06,$06,$06,$06,$04,$06 ; db $06,$02,$04,$06,$04,$06,$06,$06 ; db $06,$06,$05,$06,$06,$06,$06,$06 ; db $06,$05,$06,$05,$02,$05,$06,$06 ; Cset dg --###--- ; dg --###--- ; dg #--#--#- ; dg -#####-- ; dg --###--- ; dg -#####-- ; dg --#-#--- ; dg -##-##-- ; dg --#----- ; dg -------- ; dg #---#--- ; dg -#---#-- ; dg --#---#- ; dg ---#---# ; dg ----#--- ; dg -----#-- ; dg ---#---- ; dg ----#--- ; dg -----#-- ; dg #-----#- ; dg -#-----# ; dg --#----- ; dg ---#---- ; dg ----#--- ; dg ----#--- ; dg -----#-- ; dg ------#- ; dg -------# ; dg #------- ; dg -#------ ; dg --#----- ; dg ---#---- ; dg -----#-- ; dg ------#- ; dg -------# ; dg -------- ; dg -------- ; dg #------- ; dg -#------ ; dg --#----- ; dg ------#- ; dg -------# ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg #------- ; dg -#------ ; dg -------# ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg #------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ##------ ; dg ##------ ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -##----- ; dg #--#---- ; dg #--#---- ; dg -##----- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ####---- ; dg #--#---- ; dg #--#---- ; dg ####---- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -##----- ; dg ####---- ; dg ####---- ; dg -##----- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ####---- ; dg ####---- ; dg ####---- ; dg ####---- ; dg -------- ; dg -------- ; dg -------- ; dg ##------ ; dg ##------ ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -##----- ; dg #--#---- ; dg #--#---- ; dg -##----- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ####---- ; dg #--#---- ; dg #--#---- ; dg ####---- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -##----- ; dg ####---- ; dg ####---- ; dg -##----- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ####---- ; dg ####---- ; dg ####---- ; dg ####---- ; dg -------- ; dg -------- ; dg ##------ ; dg ##------ ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -##----- ; dg #--#---- ; dg #--#---- ; dg -##----- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ####---- ; dg #--#---- ; dg #--#---- ; dg ####---- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -##----- ; dg ####---- ; dg ####---- ; dg -##----- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ####---- ; dg ####---- ; dg ####---- ; dg ####---- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ######## ; dg -------- ; dg -------- ; dg ######## ; dg ######## ; dg -------- ; dg -------- ; dg ######## ; dg #--##--# ; dg #--##--# ; dg #--##--# ; dg #--##--# ; dg #--##--# ; dg #--##--# ; dg #--##--# ; dg #--##--# ; dg -------- ; dg -------- ; dg ###----- ; dg ---#---- ; dg ----#--- ; dg ##---#-- ; dg --#--#-- ; dg --#--#-- ; dg -------- ; dg -------- ; dg ######## ; dg -------- ; dg -------- ; dg ##----## ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg ##---#-- ; dg -----#-- ; dg -----#-- ; dg ##---#-- ; dg --#--#-- ; dg --#--#-- ; dg -------- ; dg -------- ; dg #------- ; dg #------- ; dg #------- ; dg #------- ; dg -------- ; dg -------- ; dg ####---- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ---##--- ; dg ---##--- ; dg --####-- ; dg ######## ; dg ######## ; dg ######## ; dg ######## ; dg ######## ; dg -------- ; dg -------- ; dg -------- ; dg #####--- ; dg ######-- ; dg ######-- ; dg ######-- ; dg ######-- ; dg #####--- ; dg ##------ ; dg #-#----- ; dg #--#---- ; dg #---#--- ; dg -----#-- ; dg ------#- ; dg -------# ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg #------- ; dg #------- ; dg #------- ; dg #------- ; dg #------- ; dg -------- ; dg #------- ; dg -------- ; dg #-#----- ; dg #-#----- ; dg #-#----- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -#-#---- ; dg -#-#---- ; dg #####--- ; dg -#-#---- ; dg #####--- ; dg -#-#---- ; dg -#-#---- ; dg -------- ; dg --#----- ; dg -####--- ; dg #-#----- ; dg -###---- ; dg --#-#--- ; dg ####---- ; dg --#----- ; dg -------- ; dg ##------ ; dg ##--#--- ; dg ---#---- ; dg --#----- ; dg -#------ ; dg #--##--- ; dg ---##--- ; dg -------- ; dg -#------ ; dg #-#----- ; dg #-#----- ; dg -#------ ; dg #-#-#--- ; dg #--#---- ; dg -##-#--- ; dg -------- ; dg #------- ; dg #------- ; dg #------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg --#----- ; dg -#------ ; dg #------- ; dg #------- ; dg #------- ; dg -#------ ; dg --#----- ; dg -------- ; dg #------- ; dg -#------ ; dg --#----- ; dg --#----- ; dg --#----- ; dg -#------ ; dg #------- ; dg -------- ; dg --#----- ; dg #-#-#--- ; dg -###---- ; dg --#----- ; dg -###---- ; dg #-#-#--- ; dg --#----- ; dg -------- ; dg -------- ; dg --#----- ; dg --#----- ; dg #####--- ; dg --#----- ; dg --#----- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -#------ ; dg -#------ ; dg #------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg #####--- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg #------- ; dg -------- ; dg -------- ; dg ----#--- ; dg ---#---- ; dg --#----- ; dg -#------ ; dg #------- ; dg -------- ; dg -------- ; dg -###---- ; dg #---#--- ; dg #--##--- ; dg #-#-#--- ; dg ##--#--- ; dg #---#--- ; dg -###---- ; dg -------- ; dg --#----- ; dg -##----- ; dg --#----- ; dg --#----- ; dg --#----- ; dg --#----- ; dg -###---- ; dg -------- ; dg -###---- ; dg #---#--- ; dg ----#--- ; dg --##---- ; dg -#------ ; dg #------- ; dg #####--- ; dg -------- ; dg #####--- ; dg ----#--- ; dg ---#---- ; dg --##---- ; dg ----#--- ; dg #---#--- ; dg -###---- ; dg -------- ; dg ---#---- ; dg --##---- ; dg -#-#---- ; dg #--#---- ; dg #####--- ; dg ---#---- ; dg ---#---- ; dg -------- ; dg #####--- ; dg #------- ; dg ####---- ; dg ----#--- ; dg ----#--- ; dg #---#--- ; dg -###---- ; dg -------- ; dg --###--- ; dg -#------ ; dg #------- ; dg ####---- ; dg #---#--- ; dg #---#--- ; dg -###---- ; dg -------- ; dg #####--- ; dg ----#--- ; dg ---#---- ; dg --#----- ; dg -#------ ; dg -#------ ; dg -#------ ; dg -------- ; dg -###---- ; dg #---#--- ; dg #---#--- ; dg -###---- ; dg #---#--- ; dg #---#--- ; dg -###---- ; dg -------- ; dg -###---- ; dg #---#--- ; dg #---#--- ; dg -####--- ; dg ----#--- ; dg ---#---- ; dg ###----- ; dg -------- ; dg -------- ; dg -------- ; dg #------- ; dg -------- ; dg #------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -#------ ; dg -------- ; dg -#------ ; dg -#------ ; dg #------- ; dg -------- ; dg ---#---- ; dg --#----- ; dg -#------ ; dg #------- ; dg -#------ ; dg --#----- ; dg ---#---- ; dg -------- ; dg -------- ; dg -------- ; dg #####--- ; dg -------- ; dg #####--- ; dg -------- ; dg -------- ; dg -------- ; dg #------- ; dg -#------ ; dg --#----- ; dg ---#---- ; dg --#----- ; dg -#------ ; dg #------- ; dg -------- ; dg -###---- ; dg #---#--- ; dg ---#---- ; dg --#----- ; dg --#----- ; dg -------- ; dg --#----- ; dg -------- ; dg -###---- ; dg #---#--- ; dg #-#-#--- ; dg #-###--- ; dg #-##---- ; dg #------- ; dg -####--- ; dg -------- ; dg --#----- ; dg -#-#---- ; dg #---#--- ; dg #---#--- ; dg #####--- ; dg #---#--- ; dg #---#--- ; dg -------- ; dg ####---- ; dg #---#--- ; dg #---#--- ; dg ####---- ; dg #---#--- ; dg #---#--- ; dg ####---- ; dg -------- ; dg -###---- ; dg #---#--- ; dg #------- ; dg #------- ; dg #------- ; dg #---#--- ; dg -###---- ; dg -------- ; dg ####---- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg ####---- ; dg -------- ; dg #####--- ; dg #------- ; dg #------- ; dg ####---- ; dg #------- ; dg #------- ; dg #####--- ; dg -------- ; dg #####--- ; dg #------- ; dg #------- ; dg ####---- ; dg #------- ; dg #------- ; dg #------- ; dg -------- ; dg -####--- ; dg #------- ; dg #------- ; dg #------- ; dg #--##--- ; dg #---#--- ; dg -####--- ; dg -------- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg #####--- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg -------- ; dg ###----- ; dg -#------ ; dg -#------ ; dg -#------ ; dg -#------ ; dg -#------ ; dg ###----- ; dg -------- ; dg ----#--- ; dg ----#--- ; dg ----#--- ; dg ----#--- ; dg ----#--- ; dg #---#--- ; dg -###---- ; dg -------- ; dg #---#--- ; dg #--#---- ; dg #-#----- ; dg ##------ ; dg #-#----- ; dg #--#---- ; dg #---#--- ; dg -------- ; dg #------- ; dg #------- ; dg #------- ; dg #------- ; dg #------- ; dg #------- ; dg #####--- ; dg -------- ; dg #---#--- ; dg ##-##--- ; dg #-#-#--- ; dg #-#-#--- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg -------- ; dg #---#--- ; dg #---#--- ; dg ##--#--- ; dg #-#-#--- ; dg #--##--- ; dg #---#--- ; dg #---#--- ; dg -------- ; dg -###---- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg -###---- ; dg -------- ; dg ####---- ; dg #---#--- ; dg #---#--- ; dg ####---- ; dg #------- ; dg #------- ; dg #------- ; dg -------- ; dg -###---- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg #-#-#--- ; dg #--#---- ; dg -##-#--- ; dg -------- ; dg ####---- ; dg #---#--- ; dg #---#--- ; dg ####---- ; dg #-#----- ; dg #--#---- ; dg #---#--- ; dg -------- ; dg -###---- ; dg #---#--- ; dg #------- ; dg -###---- ; dg ----#--- ; dg #---#--- ; dg -###---- ; dg -------- ; dg #####--- ; dg --#----- ; dg --#----- ; dg --#----- ; dg --#----- ; dg --#----- ; dg --#----- ; dg -------- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg -###---- ; dg -------- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg -#-#---- ; dg --#----- ; dg -------- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg #-#-#--- ; dg #-#-#--- ; dg ##-##--- ; dg #---#--- ; dg -------- ; dg #---#--- ; dg #---#--- ; dg -#-#---- ; dg --#----- ; dg -#-#---- ; dg #---#--- ; dg #---#--- ; dg -------- ; dg #---#--- ; dg #---#--- ; dg -#-#---- ; dg --#----- ; dg --#----- ; dg --#----- ; dg --#----- ; dg -------- ; dg #####--- ; dg ----#--- ; dg ---#---- ; dg --#----- ; dg -#------ ; dg #------- ; dg #####--- ; dg -------- ; dg #####--- ; dg ##------ ; dg ##------ ; dg ##------ ; dg ##------ ; dg ##------ ; dg #####--- ; dg -------- ; dg -------- ; dg #------- ; dg -#------ ; dg --#----- ; dg ---#---- ; dg ----#--- ; dg -------- ; dg -------- ; dg #####--- ; dg ---##--- ; dg ---##--- ; dg ---##--- ; dg ---##--- ; dg ---##--- ; dg #####--- ; dg -------- ; dg --#----- ; dg -###---- ; dg #-#-#--- ; dg --#----- ; dg --#----- ; dg --#----- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg #####--- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -##-#--- ; dg #--##--- ; dg #---#--- ; dg #--##--- ; dg -##-#--- ; dg -------- ; dg #------- ; dg #------- ; dg #-##---- ; dg ##--#--- ; dg #---#--- ; dg ##--#--- ; dg #-##---- ; dg -------- ; dg -------- ; dg -------- ; dg -####--- ; dg #------- ; dg #------- ; dg #------- ; dg -####--- ; dg -------- ; dg ----#--- ; dg ----#--- ; dg -##-#--- ; dg #--##--- ; dg #---#--- ; dg #--##--- ; dg -##-#--- ; dg -------- ; dg -------- ; dg -------- ; dg -###---- ; dg #---#--- ; dg #####--- ; dg #------- ; dg -###---- ; dg -------- ; dg --#----- ; dg -#------ ; dg -#------ ; dg ###----- ; dg -#------ ; dg -#------ ; dg -#------ ; dg -------- ; dg -------- ; dg -------- ; dg -####--- ; dg #---#--- ; dg #--##--- ; dg -##-#--- ; dg ----#--- ; dg -###---- ; dg #------- ; dg #------- ; dg ####---- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg -------- ; dg #------- ; dg -------- ; dg #------- ; dg #------- ; dg #------- ; dg #------- ; dg #------- ; dg -------- ; dg -------- ; dg --#----- ; dg -------- ; dg --#----- ; dg --#----- ; dg --#----- ; dg --#----- ; dg ##------ ; dg #------- ; dg #------- ; dg #--#---- ; dg #-#----- ; dg ###----- ; dg #--#---- ; dg #---#--- ; dg -------- ; dg ##------ ; dg -#------ ; dg -#------ ; dg -#------ ; dg -#------ ; dg -#------ ; dg ###----- ; dg -------- ; dg -------- ; dg -------- ; dg ##-#---- ; dg #-#-#--- ; dg #-#-#--- ; dg #-#-#--- ; dg #-#-#--- ; dg -------- ; dg -------- ; dg -------- ; dg ####---- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg -------- ; dg -------- ; dg -------- ; dg -###---- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg -###---- ; dg -------- ; dg -------- ; dg -------- ; dg ####---- ; dg #---#--- ; dg #---#--- ; dg ####---- ; dg #------- ; dg #------- ; dg -------- ; dg -------- ; dg -####--- ; dg #---#--- ; dg #---#--- ; dg -####--- ; dg ----#--- ; dg ----#--- ; dg -------- ; dg -------- ; dg #-##---- ; dg ##------ ; dg #------- ; dg #------- ; dg #------- ; dg -------- ; dg -------- ; dg -------- ; dg -####--- ; dg #------- ; dg -###---- ; dg ----#--- ; dg ####---- ; dg -------- ; dg -------- ; dg --#----- ; dg #####--- ; dg --#----- ; dg --#----- ; dg --#----- ; dg ---##--- ; dg -------- ; dg -------- ; dg -------- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg -####--- ; dg -------- ; dg -------- ; dg -------- ; dg #---#--- ; dg #---#--- ; dg -#-#---- ; dg -#-#---- ; dg --#----- ; dg -------- ; dg -------- ; dg -------- ; dg #---#--- ; dg #---#--- ; dg #---#--- ; dg #-#-#--- ; dg -#-#---- ; dg -------- ; dg -------- ; dg -------- ; dg #---#--- ; dg -#-#---- ; dg --#----- ; dg -#-#---- ; dg #---#--- ; dg -------- ; dg -------- ; dg -------- ; dg #--#---- ; dg #--#---- ; dg #--#---- ; dg ####---- ; dg ---#---- ; dg ###----- ; dg -------- ; dg -------- ; dg #####--- ; dg ---#---- ; dg --#----- ; dg -#------ ; dg #####--- ; dg -------- ; dg --##---- ; dg -#------ ; dg -#------ ; dg #------- ; dg -#------ ; dg -#------ ; dg --##---- ; dg -------- ; dg -------- ; dg #------- ; dg #------- ; dg -------- ; dg -------- ; dg #------- ; dg #------- ; dg -------- ; dg ##------ ; dg --#----- ; dg --#----- ; dg ---#---- ; dg --#----- ; dg --#----- ; dg ##------ ; dg -------- ; dg -#-#---- ; dg -------- ; dg -###---- ; dg #---#--- ; dg #####--- ; dg #------- ; dg -###---- ; dg -------- ; dg -------- ; dg -------- ; dg ----#--- ; dg -###---- ; dg #------- ; dg -------- ; dg -------- ; dg -------- ; ; The high-score entries HighScores db "Five Miles Out",$00,$00,$01 ; db "Moonlight Shadow",$00,$00,$01; db "The Ledge",$00,$50,$00 ; db "Not That Funny",$00,$50,$00 ; db "I Know I'm Not Wrong",$00,$50,$00; db "Xanadu",$00,$01,$00 ; db "Lucky Man",$00,$01,$00 ; db "Army Dreamers",$00,$01,$00 ; db "Hotel California",$00,$01,$00; db "Scarbourgh Fair",$00,$01,$00; db "Northern Lights",$00,$01,$00; db "A Day In The Life",$00,$01,$00; db "To The Unknown Man",$00,$01,$00; db "Last Chance On The Stairway",$00,$01,$00; db "Every Little Thing She Does Is Magic",$00,$01,$00; db "What Makes You Think You're The One",$00,$01,$00; db "PS we apologise for the game being boring",$00,$01,$00; db " but we were literaly only given 3 weeks to",$00,$01,$00; db " write it .",$00,$01,$00 ; db "PPS Return of the Things !",$00,$01,$00; db " coming soon - the follow up to Halls",$00,$01,$00; db " The programme about which will be said :-",$00,$01,$00; db " ",$22,"Oh no not again",$22," ",$80; db " Sinclair User",$00,$01,$00 ; db "and",$00,$01,$00 ; db " ",$22,"I'll get them for this",$22," GOD",$00,$01,$00; db "and finally",$00,$01,$00 ; db " ",$22,"..sod 30% what about a wench ?..",$22; db " The Authors",$00,$01,$00 ; db " ",$22," one thats nice ",$22,$00,$01,$00; db " ",$22," not too nice ",$22,$00,$01,$00; db " ",$22," with huge .... tracts of land ",$22,$00,$01,$00; db " ",$22," and not too expensive ",$22,$00,$01,$00; db "PSSP See you in the next game !",$00,$01,$00; db " Try not to take life seriously or you'll",$00,$01,$00; db " go as far as ",$A6," have .....",$00,$01,$00; db " Virgin,22 years old,lonely,suicidal and mad .",$00,$01,$00; db " (interesting order they're in huh ?)",$00,$01,$00; db "PSSPS It's goodnight from me",$00,$01,$00; db " and It's goodnight from another unoriginal joke",$00,$01,$00; db "(c) S.Brattel and the one and only N.Mottershead",$00,$01,$00; db "(Chewrubba and Mottly)",$00,$01,$00; db "(The Blue Brothers)",$00,$FF,$FF; ; Space from here to 7780 is free org $7780 ; ObjTab ds $80 ; Characters dg -------- ; Starts at 7800 but the first 32 chars aren't used dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -#-----# ; dg -#-----# ; dg -#-----# ; dg -#-----# ; dg -----##- ; dg -#-----# ; dg -#----#- ; dg ------## ; dg -----#-- ; dg -#---#-# ; dg -----##- ; dg -----### ; dg -#----#- ; dg -#----#- ; dg -#----#- ; dg -#----#- ; dg -#----#- ; dg -#----#- ; dg -#----#- ; dg -#----#- ; dg -#----#- ; dg -#----#- ; dg -#----#- ; dg -#----#- ; dg -#----#- ; dg -#----#- ; dg -#----#- ; dg -#----#- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -#----## ; dg -#----## ; dg -#----## ; dg -#----## ; dg -#----## ; dg -#----## ; dg -----##- ; dg -#----## ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -#----## ; dg -#----## ; dg -#----## ; dg -#----## ; dg -----### ; dg -----### ; dg -----### ; dg -----### ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -----##- ; dg -#----## ; dg -#---##- ; dg -#---#-# ; dg -#-----# ; dg -------- ; dg -#---#-# ; dg -#---#-# ; dg -#---#-# ; dg -#---#-# ; dg -#---#-# ; dg -#---#-# ; dg -#---#-# ; dg -#---#-# ; dg -------- ; Space... dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg -------- ; dg ---#---- ; dg -------- ; dg --#-#--- ; dg --#-#--- ; dg --#-#--- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg --#-#--- ; dg --#-#--- ; dg -#####-- ; dg --#-#--- ; dg -#####-- ; dg --#-#--- ; dg --#-#--- ; dg -------- ; dg ---#---- ; dg --####-- ; dg -#-#---- ; dg --###--- ; dg ---#-#-- ; dg -####--- ; dg ---#---- ; dg -------- ; dg -##----- ; dg -##--#-- ; dg ----#--- ; dg ---#---- ; dg --#----- ; dg -#--##-- ; dg ----##-- ; dg -------- ; dg --#----- ; dg -#-#---- ; dg -#-#---- ; dg --#----- ; dg -#-#-#-- ; dg -#--#--- ; dg --##-#-- ; dg -------- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ---#---- ; dg --#----- ; dg -#------ ; dg -#------ ; dg -#------ ; dg --#----- ; dg ---#---- ; dg -------- ; dg ---#---- ; dg ----#--- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg ----#--- ; dg ---#---- ; dg -------- ; dg ---#---- ; dg -#-#-#-- ; dg --###--- ; dg ---#---- ; dg --###--- ; dg -#-#-#-- ; dg ---#---- ; dg -------- ; dg -------- ; dg ---#---- ; dg ---#---- ; dg -#####-- ; dg ---#---- ; dg ---#---- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ---#---- ; dg ---#---- ; dg --#----- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -#####-- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ---#---- ; dg -------- ; dg -------- ; dg -----#-- ; dg ----#--- ; dg ---#---- ; dg --#----- ; dg -#------ ; dg -------- ; dg -------- ; dg --###--- ; dg -#---#-- ; dg -#--##-- ; dg -#-#-#-- ; dg -##--#-- ; dg -#---#-- ; dg --###--- ; dg -------- ; dg ---#---- ; dg --##---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg --###--- ; dg -------- ; dg --###--- ; dg -#---#-- ; dg -----#-- ; dg ---##--- ; dg --#----- ; dg -#------ ; dg -#####-- ; dg -------- ; dg -#####-- ; dg -----#-- ; dg ----#--- ; dg ---##--- ; dg -----#-- ; dg -#---#-- ; dg --###--- ; dg -------- ; dg ----#--- ; dg ---##--- ; dg --#-#--- ; dg -#--#--- ; dg -#####-- ; dg ----#--- ; dg ----#--- ; dg -------- ; dg -#####-- ; dg -#------ ; dg -####--- ; dg -----#-- ; dg -----#-- ; dg -#---#-- ; dg --###--- ; dg -------- ; dg ---###-- ; dg --#----- ; dg -#------ ; dg -####--- ; dg -#---#-- ; dg -#---#-- ; dg --###--- ; dg -------- ; dg -#####-- ; dg -----#-- ; dg ----#--- ; dg ---#---- ; dg --#----- ; dg --#----- ; dg --#----- ; dg -------- ; dg --###--- ; dg -#---#-- ; dg -#---#-- ; dg --###--- ; dg -#---#-- ; dg -#---#-- ; dg --###--- ; dg -------- ; dg --###--- ; dg -#---#-- ; dg -#---#-- ; dg --####-- ; dg -----#-- ; dg ----#--- ; dg -###---- ; dg -------- ; dg -------- ; dg -------- ; dg ---#---- ; dg -------- ; dg ---#---- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ---#---- ; dg -------- ; dg ---#---- ; dg ---#---- ; dg --#----- ; dg -------- ; dg ----#--- ; dg ---#---- ; dg --#----- ; dg -#------ ; dg --#----- ; dg ---#---- ; dg ----#--- ; dg -------- ; dg -------- ; dg -------- ; dg -#####-- ; dg -------- ; dg -#####-- ; dg -------- ; dg -------- ; dg -------- ; dg --#----- ; dg ---#---- ; dg ----#--- ; dg -----#-- ; dg ----#--- ; dg ---#---- ; dg --#----- ; dg -------- ; dg --###--- ; dg -#---#-- ; dg ----#--- ; dg ---#---- ; dg ---#---- ; dg -------- ; dg ---#---- ; dg -------- ; dg --###--- ; dg -#---#-- ; dg -#-#-#-- ; dg -#-###-- ; dg -#-##--- ; dg -#------ ; dg --####-- ; dg -------- ; dg ---#---- ; dg --#-#--- ; dg -#---#-- ; dg -#---#-- ; dg -#####-- ; dg -#---#-- ; dg -#---#-- ; dg -------- ; dg -####--- ; dg -#---#-- ; dg -#---#-- ; dg -####--- ; dg -#---#-- ; dg -#---#-- ; dg -####--- ; dg -------- ; dg --###--- ; dg -#---#-- ; dg -#------ ; dg -#------ ; dg -#------ ; dg -#---#-- ; dg --###--- ; dg -------- ; dg -####--- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -####--- ; dg -------- ; dg -#####-- ; dg -#------ ; dg -#------ ; dg -####--- ; dg -#------ ; dg -#------ ; dg -#####-- ; dg -------- ; dg -#####-- ; dg -#------ ; dg -#------ ; dg -####--- ; dg -#------ ; dg -#------ ; dg -#------ ; dg -------- ; dg --####-- ; dg -#------ ; dg -#------ ; dg -#------ ; dg -#--##-- ; dg -#---#-- ; dg --####-- ; dg -------- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -#####-- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -------- ; dg --###--- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg --###--- ; dg -------- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -----#-- ; dg -#---#-- ; dg --###--- ; dg -------- ; dg -#---#-- ; dg -#--#--- ; dg -#-#---- ; dg -##----- ; dg -#-#---- ; dg -#--#--- ; dg -#---#-- ; dg -------- ; dg -#------ ; dg -#------ ; dg -#------ ; dg -#------ ; dg -#------ ; dg -#------ ; dg -#####-- ; dg -------- ; dg -#---#-- ; dg -##-##-- ; dg -#-#-#-- ; dg -#-#-#-- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -------- ; dg -#---#-- ; dg -#---#-- ; dg -##--#-- ; dg -#-#-#-- ; dg -#--##-- ; dg -#---#-- ; dg -#---#-- ; dg -------- ; dg --###--- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg --###--- ; dg -------- ; dg -####--- ; dg -#---#-- ; dg -#---#-- ; dg -####--- ; dg -#------ ; dg -#------ ; dg -#------ ; dg -------- ; dg --###--- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -#-#-#-- ; dg -#--#--- ; dg --##-#-- ; dg -------- ; dg -####--- ; dg -#---#-- ; dg -#---#-- ; dg -####--- ; dg -#-#---- ; dg -#--#--- ; dg -#---#-- ; dg -------- ; dg --###--- ; dg -#---#-- ; dg -#------ ; dg --###--- ; dg -----#-- ; dg -#---#-- ; dg --###--- ; dg -------- ; dg -#####-- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg -------- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg --###--- ; dg -------- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg --#-#--- ; dg ---#---- ; dg -------- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -#-#-#-- ; dg -#-#-#-- ; dg -##-##-- ; dg -#---#-- ; dg -------- ; dg -#---#-- ; dg -#---#-- ; dg --#-#--- ; dg ---#---- ; dg --#-#--- ; dg -#---#-- ; dg -#---#-- ; dg -------- ; dg -#---#-- ; dg -#---#-- ; dg --#-#--- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg -------- ; dg -#####-- ; dg -----#-- ; dg ----#--- ; dg ---#---- ; dg --#----- ; dg -#------ ; dg -#####-- ; dg -------- ; dg -#####-- ; dg -##----- ; dg -##----- ; dg -##----- ; dg -##----- ; dg -##----- ; dg -#####-- ; dg -------- ; dg -------- ; dg -#------ ; dg --#----- ; dg ---#---- ; dg ----#--- ; dg -----#-- ; dg -------- ; dg -------- ; dg -#####-- ; dg ----##-- ; dg ----##-- ; dg ----##-- ; dg ----##-- ; dg ----##-- ; dg -#####-- ; dg -------- ; dg ---#---- ; dg --###--- ; dg -#-#-#-- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -#####-- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg --##-#-- ; dg -#--##-- ; dg -#---#-- ; dg -#--##-- ; dg --##-#-- ; dg -------- ; dg -#------ ; dg -#------ ; dg -#-##--- ; dg -##--#-- ; dg -#---#-- ; dg -##--#-- ; dg -#-##--- ; dg -------- ; dg -------- ; dg -------- ; dg --####-- ; dg -#------ ; dg -#------ ; dg -#------ ; dg --####-- ; dg -------- ; dg -----#-- ; dg -----#-- ; dg --##-#-- ; dg -#--##-- ; dg -#---#-- ; dg -#--##-- ; dg --##-#-- ; dg -------- ; dg -------- ; dg -------- ; dg --###--- ; dg -#---#-- ; dg -#####-- ; dg -#------ ; dg --###--- ; dg -------- ; dg ----#--- ; dg ---#---- ; dg ---#---- ; dg --###--- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg -------- ; dg -------- ; dg -------- ; dg --####-- ; dg -#---#-- ; dg -#--##-- ; dg --##-#-- ; dg -----#-- ; dg --###--- ; dg -#------ ; dg -#------ ; dg -####--- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -------- ; dg -------- ; dg ---#---- ; dg -------- ; dg --##---- ; dg ---#---- ; dg ---#---- ; dg --###--- ; dg -------- ; dg -------- ; dg ----#--- ; dg -------- ; dg ----#--- ; dg ----#--- ; dg ----#--- ; dg ----#--- ; dg --##---- ; dg -#------ ; dg -#------ ; dg -#--#--- ; dg -#-#---- ; dg -###---- ; dg -#--#--- ; dg -#---#-- ; dg -------- ; dg --##---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg --###--- ; dg -------- ; dg -------- ; dg -------- ; dg -##-#--- ; dg -#-#-#-- ; dg -#-#-#-- ; dg -#-#-#-- ; dg -#-#-#-- ; dg -------- ; dg -------- ; dg -------- ; dg -####--- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -------- ; dg -------- ; dg -------- ; dg --###--- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg --###--- ; dg -------- ; dg -------- ; dg -------- ; dg -####--- ; dg -#---#-- ; dg -#---#-- ; dg -####--- ; dg -#------ ; dg -#------ ; dg -------- ; dg -------- ; dg --####-- ; dg -#---#-- ; dg -#---#-- ; dg --####-- ; dg -----#-- ; dg -----#-- ; dg -------- ; dg -------- ; dg -#-##--- ; dg -##----- ; dg -#------ ; dg -#------ ; dg -#------ ; dg -------- ; dg -------- ; dg -------- ; dg --####-- ; dg -#------ ; dg --###--- ; dg -----#-- ; dg -####--- ; dg -------- ; dg -------- ; dg ---#---- ; dg -#####-- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ----##-- ; dg -------- ; dg -------- ; dg -------- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg --####-- ; dg -------- ; dg -------- ; dg -------- ; dg -#---#-- ; dg -#---#-- ; dg --#-#--- ; dg --#-#--- ; dg ---#---- ; dg -------- ; dg -------- ; dg -------- ; dg -#---#-- ; dg -#---#-- ; dg -#---#-- ; dg -#-#-#-- ; dg --#-#--- ; dg -------- ; dg -------- ; dg -------- ; dg -#---#-- ; dg --#-#--- ; dg ---#---- ; dg --#-#--- ; dg -#---#-- ; dg -------- ; dg -------- ; dg -------- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg --####-- ; dg -----#-- ; dg --###--- ; dg -------- ; dg -------- ; dg -#####-- ; dg ----#--- ; dg ---#---- ; dg --#----- ; dg -#####-- ; dg -------- ; dg ----##-- ; dg ---#---- ; dg ---#---- ; dg --#----- ; dg ---#---- ; dg ---#---- ; dg ----##-- ; dg -------- ; dg -------- ; dg ---#---- ; dg ---#---- ; dg -------- ; dg -------- ; dg ---#---- ; dg ---#---- ; dg -------- ; dg -##----- ; dg ---#---- ; dg ---#---- ; dg ----#--- ; dg ---#---- ; dg ---#---- ; dg -##----- ; dg -------- ; dg -------- ; dg ---#---- ; dg -------- ; dg -#####-- ; dg -------- ; dg ---#---- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -----#-- ; dg --###--- ; dg -#------ ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -----#-- ; dg ------#- ; dg ######## ; dg ######## ; dg ------#- ; dg -----#-- ; dg -------- ; dg ---##--- ; dg --####-- ; dg -#-##-#- ; dg ---##--- ; dg ---##--- ; dg ---##--- ; dg ---##--- ; dg ---##--- ; dg -------- ; dg --#----- ; dg -#------ ; dg ######## ; dg ######## ; dg -#------ ; dg --#----- ; dg -------- ; dg ---##--- ; dg ---##--- ; dg ---##--- ; dg ---##--- ; dg ---##--- ; dg -#-##-#- ; dg --####-- ; dg ---##--- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ---##--- ; dg --####-- ; dg -######- ; dg --##-#-- ; dg --##-#-- ; dg ---##--- ; dg --#-##-- ; dg --#-##-- ; dg ---##--- ; dg --####-- ; dg -######- ; dg --####-- ; dg --####-- ; dg ---##--- ; dg -######- ; dg #-####-# ; dg ---##--- ; dg --####-- ; dg -######- ; dg --#-##-- ; dg --#-##-- ; dg ---##--- ; dg --##-#-- ; dg --##-#-- ; dg ---##--- ; dg --####-- ; dg -######- ; dg --#--#-- ; dg --#--#-- ; dg ---##--- ; dg -######- ; dg #-####-# ; dg --##-#-- ; dg --###--- ; dg --####-- ; dg --####-- ; dg ---#-#-- ; dg ---#-#-- ; dg -###-#-- ; dg -#---##- ; dg #-####-# ; dg #-####-# ; dg --####-- ; dg --####-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg -##--##- ; dg --#-##-- ; dg ---###-- ; dg --####-- ; dg --####-- ; dg --#-#--- ; dg --#-#--- ; dg --#-###- ; dg -##---#- ; dg #-####-# ; dg #-####-# ; dg --####-- ; dg --####-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg -##--##- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg #######- ; dg -------# ; dg -------# ; dg #######- ; dg -------- ; dg -------- ; dg ---##--- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg -------- ; dg -------- ; dg #####--- ; dg -----#-- ; dg -----#-- ; dg #----#-- ; dg -#---#-- ; dg --#--#-- ; dg -------- ; dg -------- ; dg -####### ; dg #------- ; dg #------- ; dg -####### ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ######## ; dg -------- ; dg -------- ; dg ######## ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ---##### ; dg --#----- ; dg --#----- ; dg --#----# ; dg --#---#- ; dg --#--#-- ; dg -------- ; dg -------- ; dg ######## ; dg -------- ; dg -------- ; dg #------# ; dg -#----#- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg ---##--- ; dg --#--#-- ; dg -#---#-- ; dg #----#-- ; dg -----#-- ; dg -----#-- ; dg #####--- ; dg -------- ; dg -------- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg -#---#-- ; dg #----#-- ; dg -----#-- ; dg -----#-- ; dg #----#-- ; dg -#---#-- ; dg --#--#-- ; dg --#--#-- ; dg --#---#- ; dg --#----# ; dg --#----- ; dg --#----- ; dg ---##### ; dg -------- ; dg -------- ; dg --#--#-- ; dg -#----#- ; dg #------# ; dg -------- ; dg -------- ; dg ######## ; dg -------- ; dg -------- ; dg --#--#-- ; dg --#---#- ; dg --#----# ; dg --#----- ; dg --#----- ; dg --#----# ; dg --#---#- ; dg --#--#-- ; dg --#--#-- ; dg -#----#- ; dg #------# ; dg -------- ; dg -------- ; dg #------# ; dg -#----#- ; dg --#--#-- ; dg -------- ; dg -------# ; dg ------#- ; dg ###--#-- ; dg ###--#-- ; dg -###--#- ; dg -####### ; dg --###### ; dg -------- ; dg ------## ; dg -----#-- ; dg ----#--- ; dg ----#--- ; dg -----#-- ; dg ------## ; dg -----### ; dg -------- ; dg -----### ; dg ----#--- ; dg ---#---- ; dg ---#---- ; dg ----#--- ; dg --###### ; dg ######## ; dg -------- ; dg ------## ; dg -----#-- ; dg ----#-## ; dg ----#-## ; dg -----#-# ; dg ------## ; dg -----### ; dg -------- ; dg ###----- ; dg ---#---- ; dg ----#--- ; dg ----#--- ; dg ---#---- ; dg ######-- ; dg ######## ; dg -------- ; dg ##------ ; dg --#----- ; dg ---#---- ; dg ---#---- ; dg --#----- ; dg ##------ ; dg ###----- ; dg -------- ; dg #------- ; dg -#------ ; dg --#--### ; dg --#--### ; dg -#--###- ; dg #######- ; dg ######-- ; dg -------- ; dg ##------ ; dg --#----- ; dg ##-#---- ; dg ##-#---- ; dg #-#----- ; dg ##------ ; dg ###----- ; dg ---##--- ; dg --####-- ; dg --####-- ; dg ---##--- ; dg --####-- ; dg ######## ; dg #-####-# ; dg #-####-# ; dg #-####-# ; dg #-####-# ; dg --####-- ; dg --####-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg -##--##- ; dg ---###-- ; dg --##--#- ; dg --##--#- ; dg ---###-- ; dg --#####- ; dg --#--##- ; dg --#--##- ; dg --#--##- ; dg --##--#- ; dg --###--- ; dg ---#-#-- ; dg ---#-#-- ; dg ---#-#-- ; dg -###-#-- ; dg -#---#-- ; dg -----##- ; dg ---##--- ; dg --#--#-- ; dg --#--#-- ; dg ---##--- ; dg --####-- ; dg ######## ; dg #-####-# ; dg #-####-# ; dg #-####-# ; dg #-####-# ; dg --####-- ; dg --####-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg -##--##- ; dg --###--- ; dg -#--##-- ; dg -#--##-- ; dg --###--- ; dg -#####-- ; dg -##--#-- ; dg -##--#-- ; dg -##--#-- ; dg -#--##-- ; dg ---###-- ; dg --#-#--- ; dg --#-#--- ; dg --#-#--- ; dg --#-###- ; dg --#---#- ; dg -##----- ; dg -------- ; dg ---#-#-# ; dg --#--#-- ; dg ---#--#- ; dg ----#--# ; dg -----### ; dg ------## ; dg -----### ; dg -------- ; dg -------- ; dg --#----- ; dg -#-#---- ; dg ----#--- ; dg -##--#-# ; dg ---#-### ; dg -#--#### ; dg -------- ; dg -####--- ; dg -----##- ; dg -------# ; dg ---###-- ; dg --#---#- ; dg -#---### ; dg -#--#### ; dg -------- ; dg -#----## ; dg -#---#-- ; dg -#--#--- ; dg -#--#--# ; dg --#-#-## ; dg --#--### ; dg ---#--## ; dg -------- ; dg ---####- ; dg -##----- ; dg #------- ; dg --###--- ; dg -#---#-- ; dg ###---#- ; dg ####--#- ; dg -------- ; dg -------- ; dg -----#-- ; dg ----#-#- ; dg ---#---- ; dg #-#--##- ; dg ###-#--- ; dg ####--#- ; dg -------- ; dg #-#-#--- ; dg --#--#-- ; dg -#--#--- ; dg #--#---- ; dg ###----- ; dg ##------ ; dg ###----- ; dg -------- ; dg ##----#- ; dg --#---#- ; dg ---#--#- ; dg #--#--#- ; dg ##-#-#-- ; dg ###--#-- ; dg ##--#--- ; dg -----### ; dg ------## ; dg -----### ; dg ----#--# ; dg ---#--#- ; dg --#--#-- ; dg ---#-#-# ; dg -------- ; dg ---#--## ; dg --#--### ; dg --#-#-## ; dg -#--#--# ; dg -#--#--- ; dg -#---#-- ; dg -#----## ; dg -------- ; dg -#--#### ; dg -#---### ; dg --#---#- ; dg ---###-- ; dg -------# ; dg -----##- ; dg -####--- ; dg -------- ; dg -#--#### ; dg ---#-### ; dg -##--#-# ; dg ----#--- ; dg -#-#---- ; dg --#----- ; dg -------- ; dg -------- ; dg ####--#- ; dg ###---#- ; dg -#---#-- ; dg --###--- ; dg #------- ; dg -##----- ; dg ---####- ; dg -------- ; dg ##--#--- ; dg ###--#-- ; dg ##-#-#-- ; dg #--#--#- ; dg ---#--#- ; dg --#---#- ; dg ##----#- ; dg -------- ; dg ###----- ; dg ##------ ; dg ###----- ; dg #--#---- ; dg -#--#--- ; dg --#--#-- ; dg #-#-#--- ; dg -------- ; dg ####--#- ; dg ###-#--- ; dg #-#--##- ; dg ---#---- ; dg ----#-#- ; dg -----#-- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------# ; dg -----### ; dg ---##### ; dg -####### ; dg ######## ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ---#--#- ; dg --#--##- ; dg -###--#- ; dg -##-##-- ; dg ##------ ; dg ##------ ; dg ##------ ; dg ##------ ; dg ###----- ; dg ####---- ; dg ######-- ; dg ######## ; dg -------- ; dg ------## ; dg -----#-# ; dg -----#-- ; dg -----#-- ; dg ------## ; dg ------## ; dg -------# ; dg -------# ; dg -------# ; dg ------## ; dg -----### ; dg ----#### ; dg ---##### ; dg --###### ; dg -####### ; dg -------- ; dg #------- ; dg -#------ ; dg -#------ ; dg -#------ ; dg #------- ; dg -------- ; dg #------- ; dg #------- ; dg #------- ; dg #------- ; dg ##------ ; dg ###----- ; dg #####--- ; dg ######-- ; dg #######- ; dg -------- ; dg -------- ; dg -------- ; dg --##---- ; dg -#--#--- ; dg -##--#-- ; dg -#--###- ; dg --##-##- ; dg ------## ; dg ------## ; dg ------## ; dg ------## ; dg -----### ; dg ----#### ; dg --###### ; dg ######## ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg #------- ; dg ###----- ; dg #####--- ; dg #######- ; dg ######## ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ------## ; dg -----#-- ; dg -----#-# ; dg ------## ; dg -------# ; dg ------## ; dg -----### ; dg ----#### ; dg --###### ; dg -####### ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg #------- ; dg -#------ ; dg -#------ ; dg #------- ; dg #------- ; dg ##------ ; dg ###----- ; dg ####---- ; dg #####--- ; dg ######-- ; dg ---##--- ; dg --####-- ; dg -######- ; dg ##-##-## ; dg ##-##-## ; dg ######## ; dg --#--#-- ; dg -##--##- ; dg ---##--- ; dg --####-- ; dg -######- ; dg ######## ; dg ######## ; dg ######## ; dg --#--#-- ; dg -##--##- ; dg ---##--- ; dg ---##--- ; dg --##-#-- ; dg ##-###-- ; dg -###-##- ; dg -#-####- ; dg ####-### ; dg ######## ; dg ---##--- ; dg ---##--- ; dg --#-##-- ; dg --###-## ; dg -##-###- ; dg -####-#- ; dg ###-#### ; dg ######## ; dg ---##--- ; dg --####-- ; dg -######- ; dg ##-##-## ; dg ##-##-## ; dg ######## ; dg --#--#-- ; dg -##--##- ; dg ---##--- ; dg --####-- ; dg -######- ; dg ######## ; dg ######## ; dg ######## ; dg --#--#-- ; dg -##--##- ; dg ---##--- ; dg ---##--- ; dg -------- ; dg -##--##- ; dg -##--##- ; dg -------- ; dg ##-##-## ; dg ##-##-## ; dg --####-- ; dg -##--##- ; dg ###--### ; dg #-####-# ; dg #-####-# ; dg --#--#-- ; dg --#--#-- ; dg -##--##- ; dg -------- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg -------- ; dg -------- ; dg -------- ; dg ######## ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg -------- ; dg -------- ; dg -------- ; dg ######## ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg #-#-#-#- ; dg -#-#-#-# ; dg -------- ; dg -------- ; dg -------- ; dg ---#---- ; dg ----#--- ; dg ---#---- ; dg ----#--- ; dg ---#---- ; dg ----#--- ; dg ---#---- ; dg ----#--- ; dg -------- ; dg -------- ; dg -------- ; dg ######## ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---##--- ; dg --###--- ; dg --#-#--- ; dg --#-##-- ; dg ---#-#-- ; dg --#-#--- ; dg -##-#--- ; dg -#--##-- ; dg --####-- ; dg -######- ; dg ######## ; dg #-####-# ; dg #-####-# ; dg --#--#-- ; dg --#--#-- ; dg -##--##- ; dg ---##--- ; dg ---###-- ; dg ---#-#-- ; dg --##-#-- ; dg --#-#--- ; dg ---#-#-- ; dg ---#-##- ; dg --##--#- ; dg --####-- ; dg -##--##- ; dg ###--### ; dg #-####-# ; dg #-####-# ; dg --#--#-- ; dg --#--#-- ; dg -##--##- ; dg -------# ; dg ------#- ; dg -----#-- ; dg ----#--- ; dg ---#---- ; dg --#----- ; dg -#------ ; dg #------- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg ---#---- ; dg #------- ; dg -#------ ; dg --#----- ; dg ---#---- ; dg ----#--- ; dg -----#-- ; dg ------#- ; dg -------# ; dg ######## ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ######## ; dg -------- ; dg -------- ; dg ######## ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ######## ; dg -------# ; dg -------# ; dg ######## ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ######## ; dg ------## ; dg ------## ; dg ######## ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ######## ; dg -----### ; dg -----### ; dg ######## ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ######## ; dg ----#### ; dg ----#### ; dg ######## ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ######## ; dg ---##### ; dg ---##### ; dg ######## ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ######## ; dg --###### ; dg --###### ; dg ######## ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ######## ; dg -####### ; dg -####### ; dg ######## ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg ######## ; dg ######## ; dg ######## ; dg ######## ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------# ; dg -------# ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg -------- ; dg #------- ; dg #------- ; dg -------- ; dg -------- ; dg -------- ; dg --####-- ; dg -##--##- ; dg ###--### ; dg #-####-# ; dg #-####-# ; dg --#--#-- ; dg --#--#-- ; dg --##-##- ; dg --###--- ; dg -#---#-- ; dg --###--- ; dg ---#---- ; dg ---#---- ; dg ---###-- ; dg ---#---- ; dg ---###-- ; dg --####-- ; dg -#-##-#- ; dg #--##--# ; dg #--##--# ; dg ######## ; dg #--##--# ; dg #--##--# ; dg ######## ; dg ---#---# ; dg --#---#- ; dg -#---#-- ; dg #---#--- ; dg ---#---# ; dg --#---#- ; dg -#---#-- ; dg #---#--- ; dg --#----- ; dg --#----- ; dg --#----- ; dg --#----- ; dg --#----- ; dg --#----- ; dg --#----- ; dg -------- ; dg ---##--- ; dg --####-- ; dg -######- ; dg --##-#-- ; dg --##-#-- ; dg ---##--- ; dg --#-##-- ; dg --#-##-- ; dg ---##--- ; dg --####-- ; dg -######- ; dg --####-- ; dg --####-- ; dg ---##--- ; dg -######- ; dg #-####-# ; dg ---##--- ; dg --####-- ; dg -######- ; dg --#-##-- ; dg --#-##-- ; dg ---##--- ; dg --##-#-- ; dg --##-#-- ; dg ---##--- ; dg --####-- ; dg -######- ; dg --#--#-- ; dg --#--#-- ; dg ---##--- ; dg -######- ; dg #-####-# ; dg --##-#-- ; dg --###--- ; dg --####-- ; dg --####-- ; dg ---#-#-- ; dg ---#-#-- ; dg -###-#-- ; dg -#---##- ; dg #-####-# ; dg #-####-# ; dg --####-- ; dg --####-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg -##--##- ; dg --#-##-- ; dg ---###-- ; dg --####-- ; dg --####-- ; dg --#-#--- ; dg --#-#--- ; dg --#-###- ; dg -##---#- ; dg #-####-# ; dg #-####-# ; dg --####-- ; dg --####-- ; dg --#--#-- ; dg --#--#-- ; dg --#--#-- ; dg -##--##- ; ; Vector table here because we originally assembled this as three different sources jp DrawMaze ; Game jp StartGame ; vDrawMaze jp DrawMaze ; PAGE jp AltPage ; PageX dw 0 ; PageY equ PageX+1 ; vCLS jp CLS2 ; vRandom jp Random ; vRand jp Rand ; Seed dw 1278,42 ; vOutItHL jp OutItHL ; vOutItHLAttr jp OutItHLAttr ; OutItHLcol jp OutItHLCol ; vScanKeys jp ScanKeys ; vReadKey jp GameReadKey ; vDoScore jp DoScore ; DSDamage db 0 ; DSScore dw 0 ; DSnKeys_BCD db 0 ; DSMode db 0 ; WayOutX db 63 ; WayOutY db 63 ; ExitOpen db 0 ; ChestPos dw 0 ; KeyA db 0 ; KeyAP db 0 ; KeyF db 0 ; KeyFP db 0 ; KeyO db 0 ; KeyOP db 0 ; KeyC db 0 ; KeyCP db 0 ; KeyS db 0 ; KeySP db 0 ; Keysp db 0 ; KeyspP db 0 ; KeyAL db 0 ; KeyALP db 0 ; KeyAR db 0 ; KeyARP db 0 ; KeyAU db 0 ; KeyAUP db 0 ; KeyAD db 0 ; KeyADP db 0 ; KeyW db 0 ; KeyWP db 0 ; CColour db 0 ; StartGame jp S1Start ; MoveThings jp S1MoveThings ; ds 3 ; ManX dw 3 ; ManY dw 3 ; InitProj jp S1InitGame ; InitThings jp S1InitThings ; InitGame jp S1InitGame ; ThingMove jp ThingMove2 ; vFA1 jp FA1 ; vCalcRoomAdd jp CalcRoomAdd ; vOpenDoor jp OpenDoor ; vCloseDoor jp CloseDoor ; vFlipSwordTg jp FlipSwordTg ; vClear jp Clear ; vHitMon jp HitMon ; org $8200 ; DrawMaze ld a,$FF ; ld (cKeys),a ; ld (cDamage),a ; ld (cScore),a ; ld (cScore+1),a ; ld hl,Maze ; ld de,Maze+1 ; ld bc,$3FFF ; ld (hl),0 ; ldir ; ld a,r ; ld (Seed),a ; ld hl,#3F3F+Maze ; ld (SX),hl ; call DMDoRhume ; call DMNext ; DM0 set 6,l ; set 0,(hl) ; res 6,l ; DM1 call DMMoveOpts ; jr z DM2 ; call DMMove ; jr DM0 ; DM2 call DMNext ; jr c DrawMazeEx ; call DMLinkOpts ; jr z DM2 ; call DMLink ; jr DM0 ; DrawMazeEx call DMFillRhume ; call DMAddDoors ; ret ; Random push hl ; push de ; push bc ; push af ; call Rand ; pop af ; ld b,16 ; ld c,a ; xor a ; ld hl,(Seed) ; Random1 add hl,hl ; rla ; jr c Random2 ; cp c ; jr c Random3 ; Random2 sub c ; inc hl ; Random3 djnz Random1 ; pop bc ; pop de ; pop hl ; ret ; Rand ld hl,(Seed+2) ; rl l ; rl h ; rl l ; rl h ; ld c,h ; ld a,(Seed) ; rla ; ld b,a ; ld de,(Seed+1) ; rl e ; rl d ; res 7,d ; ld hl,(Seed) ; add hl,bc ; ld (Seed),hl ; ld hl,(Seed+2) ; adc hl,de ; res 7,h ; ld (Seed+2),hl ; ret m ; ld hl,Seed ; Rnd1 inc (hl) ; ret nz ; inc hl ; jp Rnd1 ; DMNext ld c,64 ; DMN1 ld b,64 ; DMN2 ld hl,(SX) ; ld a,l ; add a,c ; and $3F ; ld l,a ; ld a,h ; add a,b ; and $3F ; or high Maze ; ld h,a ; set 6,l ; ld a,(hl) ; res 6,l ; or a ; jr z DMN3 ; djnz DMN2 ; dec c ; jr nz DMN1 ; scf ; ret ; DMN3 ld (SX),hl ; ret ; DMMoveOpts ld c,0 ; ld b,0 ; ld de,DMList ; call DMTMLeft ; call DMTMDown ; call DMTMRight ; call DMTMUp ; ld a,c ; or a ; ret ; DMLinkOpts ld c,0 ; ld b,1 ; ld de,DMList ; call DMTMLeft ; call DMTMDown ; call DMTMRight ; call DMTMUp ; ld a,c ; or a ; ret ; DMMove call Random ; ld de,DMList ; add a,e ; ld e,a ; ld a,(de) ; dec a ; jr z DMMoveDown ; dec a ; jr z DMMoveRight ; dec a ; jr z DMMoveUp ; DMMoveLeft call DMRat ; ld a,b ; or (hl) ; ld (hl),a ; dec l ; ld a,b ; rlca ; rlca ; rlca ; rlca ; or (hl) ; ld (hl),a ; ret ; DMMoveDown call DMRat ; ld a,b ; rlca ; rlca ; or (hl) ; ld (hl),a ; inc h ; ld a,b ; rrca ; rrca ; or (hl) ; ld (hl),a ; ret ; DMMoveRight call DMRat ; ld a,b ; rlca ; rlca ; rlca ; rlca ; or (hl) ; ld (hl),a ; inc l ; ld a,b ; or (hl) ; ld (hl),a ; ret ; DMMoveUp call DMRat ; ld a,b ; rrca ; rrca ; or (hl) ; ld (hl),a ; dec h ; ld a,b ; rlca ; rlca ; or (hl) ; ld (hl),a ; ret ; DMLink push hl ; call DMMove ; pop hl ; ret ; DMTMLeft ld a,l ; or a ; ret z ; dec l ; set 6,l ; ld a,(hl) ; res 6,l ; inc l ; cp b ; ret nz ; ld a,0 ; ld (de),a ; inc de ; inc c ; ret ; DMTMDown ld a,h ; cp Maze/256+63 ; ret z ; inc h ; set 6,l ; ld a,(hl) ; res 6,l ; dec h ; cp b ; ret nz ; ld a,1 ; ld (de),a ; inc de ; inc c ; ret ; DMTMRight ld a,l ; cp 63 ; ret z ; inc l ; set 6,l ; ld a,(hl) ; res 6,l ; dec l ; cp b ; ret nz ; ld a,2 ; ld (de),a ; inc de ; inc c ; ret ; DMTMUp ld a,h ; cp high Maze ; ret z ; dec h ; set 6,l ; ld a,(hl) ; res 6,l ; inc h ; cp b ; ret nz ; ld a,3 ; ld (de),a ; inc de ; inc c ; ret ; DMRat ld a,(Seed+1) ; ld b,a ; ld a,r ; add a,b ; and #7F ; cp nOpen ; ld b,2 ; ret nc ; cp nArch ; ld b,3 ; ret nc ; ld b,1 ; ret ; DMDoRhume ld ix,RhumeList ; ld (ix),#FF ; ld b,nRhumes ; DMDR1 push bc ; call DMGRhume ; pop bc ; djnz DMDR1 ; ret ; DMGRhume ld a,59 ; call Random ; add a,2 ; ld l,a ; ld a,59 ; call Random ; add a,2 ; ld h,a ; ld a,4 ; call Random ; add a,2 ; ld c,a ; ld a,4 ; call Random ; add a,2 ; ld b,a ; ld a,l ; add a,c ; cp 62 ; jr nc DMGRhume ; ld a,h ; add a,b ; cp 62 ; jr nc DMGRhume ; ld ix,RhumeList ; DMNRhume ld a,(ix) ; cp #FF ; jr z DMAddRhume ; add a,(ix+2) ; inc a ; cp l ; jr c DMNR1 ; ld a,(ix+1) ; add a,(ix+3) ; inc a ; cp h ; jr c DMNR1 ; ld a,l ; add a,c ; inc a ; cp (ix) ; jr c DMNR1 ; ld a,h ; add a,b ; inc a ; cp (ix+1) ; jr c DMNR1 ; jr DMGRhume ; DMNR1 inc ix ; inc ix ; inc ix ; inc ix ; jr DMNRhume ; DMAddRhume ld (ix+0),l ; ld (ix+1),h ; ld (ix+2),c ; ld (ix+3),b ; ld (ix+4),#FF ; ld a,h ; or high Maze ; ld h,a ; set 6,l ; ld a,c ; ld c,b ; ld b,a ; inc c ; inc b ; ld a,b ; neg ; ld e,a ; ld d,0 ; ld a,b ; DMARlp ld (hl),2 ; inc l ; djnz DMARlp ; add hl,de ; ld b,a ; dec c ; jr nz DMARlp ; ret ; DMFillRhume ld ix,RhumeList ; xor a ; ld (RoomObj),a ; ex af,af' ; DMFR1 ld a,(ix) ; cp #FF ; ret z ; ex af,af' ; inc a ; ex af,af' ; ld l,(ix) ; ld h,(ix+1) ; ld b,(ix+2) ; ld c,(ix+3) ; ld a,h ; or high Maze ; ld h,a ; inc b ; inc c ; ld d,b ; ld e,c ; DMFR2 set 7,l ; ex af,af' ; ld (hl),a ; ex af,af' ; res 7,l ; ld a,b ; cp d ; jr z DMFR3 ; dec l ; res 4,(hl) ; set 5,(hl) ; inc l ; res 0,(hl) ; set 1,(hl) ; DMFR3 ld a,c ; cp e ; jr z DMFR4 ; dec h ; res 2,(hl) ; set 3,(hl) ; inc h ; res 6,(hl) ; set 7,(hl) ; DMFR4 inc l ; djnz DMFR2 ; ld a,l ; sub d ; ld l,a ; inc h ; ld b,d ; dec c ; jr nz DMFR2 ; ld l,(ix) ; ld h,(ix+1) ; ld c,(ix+2) ; ld b,(ix+3) ; sra b ; sra c ; add hl,bc ; ld bc,#C0C0 ; add hl,bc ; ld a,(RoomObj) ; cp KeyNo+1 ; jr z DMFR5 ; inc a ; ld (RoomObj),a ; cp 1 ; ld a,#F4 ; call z StoreChest ; ld (hl),a ; DMFR5 inc ix ; inc ix ; inc ix ; inc ix ; jp DMFR1 ; StoreChest ld a,l ; and #3F ; inc a ; ld c,a ; ld a,h ; and #3F ; ld b,a ; ld (ChestPos),bc ; ld a,#F5 ; ret ; RoomObj db 0 ; DMAddDoors ld ix,RhumeList ; DMAD0 ld a,(ix) ; cp #FF ; ret z ; ld l,(ix+0) ; ld a,(ix+1) ; or high Maze ; ld h,a ; ld d,0 ; ld e,DoorProb ; DMAD1 call DMDoorGen ; ld b,(ix+2) ; DMADL0 inc l ; call DMDoorGen ; djnz DMADL0 ; ld b,(ix+3) ; inc d ; DMADL1 call DMDoorGen ; inc h ; djnz DMADL1 ; call DMDoorGen ; ld b,(ix+2) ; inc d ; DMADL2 call DMDoorGen ; dec l ; djnz DMADL2 ; call DMDoorGen ; ld b,(ix+3) ; inc d ; DMADL3 call DMDoorGen ; dec h ; djnz DMADL3 ; call DMDoorGen ; inc ix ; inc ix ; inc ix ; inc ix ; jr DMAD0 ; DMDoorGen ld a,e ; call Random ; dec e ; or a ; ret nz ; ld e,DoorProb ; ld a,d ; or a ; jr z DoorUp ; dec a ; jr z DoorRight ; dec a ; jr z DoorDown ; DoorLeft dec l ; set 4,(hl) ; res 5,(hl) ; inc l ; set 0,(hl) ; res 1,(hl) ; ret ; DoorDown inc h ; set 6,(hl) ; res 7,(hl) ; dec h ; set 2,(hl) ; res 3,(hl) ; ret ; DoorRight inc l ; set 0,(hl) ; res 1,(hl) ; dec l ; set 4,(hl) ; res 5,(hl) ; ret ; DoorUp dec h ; set 2,(hl) ; res 3,(hl) ; inc h ; set 6,(hl) ; res 7,(hl) ; ret ; cDamage db #FF ; cScore dw #FFFF ; cKeys db #FF ; cMode db 0 ; DoScore ld a,(DSDamage) ; ld b,a ; ld a,(cDamage) ; cp b ; jr nz DoScore1 ; ld a,(DSScore) ; ld b,a ; ld a,(cScore) ; cp b ; jr nz DoScore1 ; ld a,(DSScore+1) ; ld b,a ; ld a,(cScore+1) ; cp b ; jr nz DoScore1 ; ld a,(DSnKeys_BCD) ; ld b,a ; ld a,(cKeys) ; cp b ; jr nz DoScore1 ; ld a,(DSMode) ; ld b,a ; ld a,(cMode) ; cp b ; ret z ; DoScore1 ld hl,DSDamage ; ld de,cDamage ; ld bc,5 ; ldir ; ld a,(cDamage) ; neg ; ld hl,pBar ; jr nz DS2a ; ld a,#FF ; DS2a call PrintBar2 ; ld hl,(cScore) ; ld ix,pScore ; call PrintScore ; ld a,(cKeys) ; ld ix,pKeys ; call PrintKeys ; jr PShack ; ClearBL push de ; ld hl,#50E0 ; ld b,8 ; DS1 push hl ; ld e,l ; ld d,h ; inc e ; ld (hl),0 ; push bc ; ld bc,31 ; ldir ; pop bc ; pop hl ; inc h ; djnz DS1 ; pop de ; ret ; PShack call ClearBL ; ld a,(cMode) ; and #7F ; jr nz DS2 ; ld de,DWMWounds ; call DWMess2 ; ret ; DS2 cp 2 ; jr nz DispScore ; ld ix,PauseMess ; call pSillyMess ; DPause call SillyMess ; ld bc,65278 ; in a,(c) ; bit 3,a ; jr nz DPause ; ld a,#FF ; ld (cMode),a ; xor a ; ld (DSMode),a ; inc a ; ld (Keysp),a ; ret ; DispScore ld de,DWMScore ; DWMess2 ld hl,#1700 ; DWMlp ld a,(de) ; or a ; ret z ; call OutItHL ; inc l ; inc de ; jr DWMlp ; DWMWounds db "Wounds " ; pBar db " " ; db " " ; db " " ; db 0 ; DWMScore db "Score " ; pScore db "00000 " ; db "Keys " ; pKeys db "00 " ; db 0 ; PauseMess dw 80,PM1 ; db "Pausing - press C" ; db " to continue" ; db 0 ; PM1 dw 16,PM2 ; db "C,short for" ; db " CONTINUE" ; db 0 ; PM3 dw 8,PM4 ; db "When you're" ; db " quite ready" ; db 0 ; PM2 dw 8,PM3 ; db "4th along,bottom " ; db "row" ; db 0 ; PM4 dw 5,PM5 ; db "Hello ?" ; db 0 ; PM5 dw 8,PM6 ; db "Gone for a " ; db "cheesecake ?" ; db 0 ; PM6 dw 80,PM7 ; db "Pausing - press C" ; db " to continue" ; db 0 ; PM7 dw 4,PM8a ; db "Oh not again" ; db 0 ; PM8a dw 4,PM8b ; db "No not again" ; db 0 ; PM8b dw 4,PM8c ; db "Please not again" ; db 0 ; PM8c dw 4,PM8d ; db " " ; db 0 ; PM8d dw 20,PauseMess ; db "The next " ; db "one's good !" ; db 0 ; pSillyMess push ix ; pop de ; inc de ; inc de ; inc de ; inc de ; call ClearBL ; call DWMess2 ; ld hl,30000 ; ld (SDel),hl ; ld l,(ix) ; ld h,(ix+1) ; ld (SSpeed),hl ; ld l,(ix+2) ; ld h,(ix+3) ; push hl ; pop ix ; ret ; SillyMess ld hl,(SDel) ; dec hl ; ld (SDel),hl ; ld a,l ; or h ; ret nz ; ld hl,30000 ; ld (SDel),hl ; ld hl,(SSpeed) ; dec hl ; ld (SSpeed),hl ; ld a,l ; or h ; ret nz ; jr pSillyMess ; SDel dw 0 ; SSpeed dw 0 ; PrintScore ld c,0 ; ld a,h ; call PSHN ; call PSHN ; ld a,l ; call PSHN ; PSHN rrca ; rrca ; rrca ; rrca ; push af ; and #F ; cp c ; jr z PSHNx ; dec c ; or #30 ; ld (ix),a ; inc ix ; pop af ; ret ; PSHNx ld (ix),#20 ; inc ix ; pop af ; ret ; PrintKeys ld c,0 ; call PSHN ; dec c ; jr PSHN ; AltPage ld hl,ObjTab+2 ; ld (hl),#FF ; ld hl,(PageX) ; ld ix,WallTypes ; ld de,0 ; ld c,0 ; Page1 ld b,0 ; Page2 push bc ; push hl ; push de ; ld a,l ; add a,b ; cp 64 ; jr nc MoatEx ; ld l,a ; ld a,h ; add a,c ; cp 64 ; jr nc MoatEx ; ld h,a ; push hl ; ld a,l ; or #C0 ; ld l,a ; ld a,h ; or #C0 ; ld h,a ; ld a,(hl) ; or a ; call nz DispThingy ; pop hl ; ld a,(ExitOpen) ; or a ; jr z Page2a ; ld a,(WayOutX) ; cp l ; jr nz Page2a ; ld a,(WayOutY) ; cp h ; jr nz Page2a ; push hl ; push de ; push bc ; ex de,hl ; inc l ; inc h ; ld a,#F6 ; ld c,6 ; HI1 push hl ; ld b,6 ; HI2 call AddChar ; djnz HI2 ; pop hl ; inc h ; ld a,c ; cp 5 ; call z WriteExit ; ld a,#F6 ; dec c ; jr nz HI1 ; pop bc ; pop de ; pop hl ; Page2a call ShowRhume ; MoatEx inc ix ; pop de ; pop hl ; pop bc ; ld a,7 ; add a,e ; ld e,a ; inc b ; ld a,b ; cp xDisp ; jr nz Page2 ; ld e,0 ; ld a,7 ; add a,d ; ld d,a ; inc c ; ld a,c ; cp yDisp ; jr nz Page1 ; ret ; WriteExit push hl ; ld a,#F6 ; call AddChar ; ld a,"E" ; call AddChar ; ld a,"x" ; call AddChar ; ld a,"i" ; call AddChar ; ld a,"t" ; call AddChar ; ld a,#F6 ; call AddChar ; dec c ; pop hl ; inc h ; ret ; AddChar call OutItHL ; push ix ; push af ; ld ix,ObjTab ; AClp ld a,(ix+2) ; inc ix ; inc ix ; inc ix ; cp #FF ; jr nz AClp ; pop af ; ld (ix-1),a ; ld (ix-3),l ; ld (ix-2),h ; ld (ix+2),#FF ; inc l ; pop ix ; ret ; DispThingy push ix ; ld ix,ObjTab ; DTlp ld a,(ix+2) ; cp #FF ; inc ix ; inc ix ; inc ix ; jr nz DTlp ; ld a,(hl) ; ld (ix-1),a ; ld (ix+2),#FF ; ld hl,#303 ; add hl,de ; ld (ix-3),l ; ld (ix-2),h ; call OutItHL ; pop ix ; ret ; ShowRhume ld a,h ; or high Maze ; ld h,a ; ex de,hl ; call ShowWalls ; ex de,hl ; ret ; ShowWalls ld a,(ix) ; or a ; jr z WallType0 ; dec a ; jr z WallType1 ; dec a ; jr z WallType2 ; ld a,(de) ; call ShowUp ; call ShowTLC ; call MpR ; ld a,(de) ; call ShowRight ; call ShowTRC ; call MpL ; ld a,(de) ; call ShowLeft ; call MpD ; call ShowBLC ; ld a,(de) ; call ShowDown ; call MpR ; call ShowBRC ; ret ; WallType2 ld a,(de) ; call ShowUp ; call ShowTLC ; ld a,(de) ; call ShowLeft ; call MpD ; ld a,(de) ; call ShowDown ; call ShowBLC ; ret ; WallType1 ld a,(de) ; call ShowUp ; call ShowTLC ; ld a,(de) ; call ShowLeft ; call MpR ; call ShowTRC ; ld a,(de) ; call ShowRight ; ret ; WallType0 ld a,(de) ; call ShowUp ; ld a,(de) ; call ShowLeft ; call ShowTLC ; ret ; MpR ld bc,7 ; add hl,bc ; ret ; MpL ld bc,0-7 ; add hl,bc ; ret ; MpD ld bc,#700 ; add hl,bc ; ret ; MpU ld bc,0-#700 ; add hl,bc ; ret ; ShowUp rlca ; rlca ; jr ShowHoris ; ShowDown rrca ; rrca ; ShowHoris push hl ; and #3 ; jr z SHWall ; dec a ; jr z SHDoor ; dec a ; jr z SHOpen ; jr SHArch ; SHWall ld a,Wall0 ; ld b,6 ; inc l ; SHW1 call OutItHL ; inc l ; djnz SHW1 ; SHOpen pop hl ; ret ; SHDoor inc l ; ld a,Wall2 ; call OutItHL ; inc l ; ld a,Wall6 ; call OutItHL ; inc l ; ld a,Wall6 ; call OutItHL ; inc l ; ld a,Wall6 ; call OutItHL ; inc l ; ld a,Wall6 ; call OutItHL ; inc l ; ld a,Wall4 ; call OutItHL ; inc l ; pop hl ; ret ; SHArch inc l ; ld a,Wall2 ; call OutItHL ; inc l ; inc l ; inc l ; inc l ; inc l ; ld a,Wall4 ; call OutItHL ; inc l ; pop hl ; ret ; ShowRight rrca ; rrca ; rrca ; rrca ; ShowLeft push hl ; and #3 ; jr z SVWall ; dec a ; jr z SVDoor ; dec a ; jr z SVOpen ; jr SVArch ; SVWall ld a,Wall1 ; ld b,6 ; inc h ; SVW1 call OutItHL ; inc h ; djnz SVW1 ; SVOpen pop hl ; ret ; SVDoor inc h ; ld a,Wall3 ; call OutItHL ; inc h ; ld a,Wall7 ; call OutItHL ; inc h ; ld a,Wall7 ; call OutItHL ; inc h ; ld a,Wall7 ; call OutItHL ; inc h ; ld a,Wall7 ; call OutItHL ; inc h ; ld a,Wall5 ; call OutItHL ; inc h ; pop hl ; ret ; SVArch inc h ; ld a,Wall3 ; call OutItHL ; inc h ; inc h ; inc h ; inc h ; inc h ; ld a,Wall5 ; call OutItHL ; inc h ; pop hl ; ret ; ShowTLC ld b,0 ; call CkTLD ; call CkTLR ; call CkTLU ; call CkTLL ; ld a,b ; add a,CornBase ; call OutItHL ; ret ; ShowTRC ld b,0 ; call CkTRD ; call CkTRR ; call CkTRU ; call CkTRL ; ld a,b ; add a,CornBase ; call OutItHL ; ret ; ShowBLC ld b,0 ; call CkBLD ; call CkBLR ; call CkBLU ; call CkBLL ; ld a,b ; add a,CornBase ; call OutItHL ; ret ; ShowBRC ld b,0 ; call CkBRD ; call CkBRR ; call CkBRU ; call CkBRL ; ld a,b ; add a,CornBase ; call OutItHL ; ret ; CkTLD ld a,(de) ; and #3 ; cp 2 ; ret z ; set 1,b ; ret ; CkTLR ld a,(de) ; rlca ; rlca ; and #3 ; cp 2 ; ret z ; set 2,b ; ret ; CkTLU ld a,d ; cp Maze/256 ; ret z ; dec d ; ld a,(de) ; inc d ; and #3 ; cp 2 ; ret z ; set 3,b ; ret ; CkTLL ld a,e ; or a ; ret z ; dec e ; ld a,(de) ; inc e ; rlca ; rlca ; and #3 ; cp 2 ; ret z ; set 0,b ; ret ; CkTRD ld a,(de) ; rrca ; rrca ; rrca ; rrca ; and #3 ; cp 2 ; ret z ; set 1,b ; ret ; CkTRR ld a,e ; cp 63 ; ret z ; inc e ; ld a,(de) ; dec e ; rlca ; rlca ; and #3 ; cp 2 ; ret z ; set 2,b ; ret ; CkTRU ld a,d ; cp high Maze ; ret z ; dec d ; ld a,(de) ; inc d ; rrca ; rrca ; rrca ; rrca ; and #3 ; cp 2 ; ret z ; set 3,b ; ret ; CkTRL ld a,(de) ; rlca ; rlca ; and #3 ; cp 2 ; ret z ; set 0,b ; ret ; CkBLD ld a,d ; cp 63+high Maze ; ret z ; inc d ; ld a,(de) ; dec d ; and #3 ; cp 2 ; ret z ; set 1,b ; ret ; CkBLR ld a,(de) ; rrca ; rrca ; and #3 ; cp 2 ; ret z ; set 2,b ; ret ; CkBLU ld a,(de) ; and #3 ; cp 2 ; ret z ; set 3,b ; ret ; CkBLL ld a,e ; or a ; ret z ; dec e ; ld a,(de) ; inc e ; rrca ; rrca ; and #3 ; cp 2 ; ret z ; set 0,b ; ret ; CkBRD ld a,d ; cp 63+high Maze ; ret z ; inc d ; ld a,(de) ; dec d ; rrca ; rrca ; rrca ; rrca ; and #3 ; cp 2 ; ret z ; set 1,b ; ret ; CkBRR ld a,e ; cp 63 ; ret z ; inc e ; ld a,(de) ; dec e ; rrca ; rrca ; and #3 ; cp 2 ; ret z ; set 2,b ; ret ; CkBRU ld a,(de) ; rrca ; rrca ; rrca ; rrca ; and #3 ; cp 2 ; ret z ; set 3,b ; ret ; CkBRL ld a,(de) ; rrca ; rrca ; and #3 ; cp 2 ; ret z ; set 0,b ; ret ; CLS2 ld hl,#4000 ; ld de,#4001 ; ld bc,#1AFF ; ld (hl),0 ; ldir ; ret ; OutItDE ex de,hl ; call OutItHL ; ex de,hl ; ret ; WallTypes db 0,0,0,1 ; db 0,0,0,1 ; db 2,2,2,3 ; OutItHL push hl ; push de ; push af ; push bc ; push hl ; push hl ; ld h,Characters/256 ; ld l,a ; ld c,(hl) ; pop hl ; ld de,SpecTab ; push hl ; ld l,h ; ld h,0 ; add hl,hl ; add hl,de ; ld e,(hl) ; inc hl ; ld d,(hl) ; pop hl ; ld h,0 ; add hl,de ; push hl ; ld l,a ; ld h,0 ; add hl,hl ; add hl,hl ; add hl,hl ; ld de,Characters ; add hl,de ; pop de ; ld b,8 ; OutItL ld a,(de) ; xor (hl) ; ld (de),a ; inc hl ; inc d ; djnz OutItL ; pop hl ; ld a,l ; add a,a ; add a,a ; add a,a ; srl h ; rra ; srl h ; rra ; srl h ; rra ; ld l,a ; ld de,pAttrib ; add hl,de ; ld a,(CColour) ; Colour or B/W or a ; jr nz OutItC ; ld (hl),c ; pop bc ; pop af ; pop de ; pop hl ; ret ; OutItC ld (hl),7 ; pop bc ; pop af ; pop de ; pop hl ; ret ; OutItHLAttr push hl ; push de ; push af ; push bc ; ld d,Characters/256 ; ld e,a ; ld a,(de) ; ld c,a ; ld a,l ; add a,a ; add a,a ; add a,a ; srl h ; rra ; srl h ; rra ; srl h ; rra ; ld l,a ; ld de,pAttrib ; add hl,de ; ld a,(CColour) ; or a ; jr nz OutItC ; ld (hl),c ; pop bc ; pop af ; pop de ; pop hl ; ret ; OutItHLCol push hl ; push de ; push af ; push bc ; push hl ; ld de,SpecTab ; push hl ; ld l,h ; ld h,0 ; add hl,hl ; add hl,de ; ld e,(hl) ; inc hl ; ld d,(hl) ; pop hl ; ld h,0 ; add hl,de ; push hl ; ld l,a ; ld h,0 ; add hl,hl ; add hl,hl ; add hl,hl ; ld de,Characters ; add hl,de ; pop de ; ld b,8 ; OutItc ld a,(de) ; xor (hl) ; ld (de),a ; inc hl ; inc d ; djnz OutItc ; pop hl ; ld a,l ; add a,a ; add a,a ; add a,a ; srl h ; rra ; srl h ; rra ; srl h ; rra ; ld l,a ; ld de,pAttrib ; add hl,de ; ld a,(CColour) ; or a ; jr nz OutItC ; pop bc ; ld (hl),b ; pop af ; pop de ; pop hl ; ret ; ScanKeys ld bc,65022 ; in a,(c) ; bit 0,a ; ld hl,KeyA ; call DWKey ; ld bc,57342 ; in a,(c) ; bit 1,a ; ld hl,KeyO ; call DWKey ; ld bc,65278 ; in a,(c) ; bit 3,a ; ld hl,KeyC ; call DWKey ; ld bc,65022 ; in a,(c) ; bit 1,a ; ld hl,KeyS ; call DWKey ; ld bc,32766 ; in a,(c) ; bit 0,a ; ld hl,Keysp ; call DWKey ; ld bc,63486 ; in a,(c) ; bit 4,a ; ld hl,KeyAL ; call DWKey ; ld bc,61438 ; in a,(c) ; bit 2,a ; ld hl,KeyAR ; call DWKey ; ld bc,61438 ; in a,(c) ; bit 3,a ; ld hl,KeyAU ; call DWKey ; ld bc,61438 ; in a,(c) ; bit 4,a ; ld hl,KeyAD ; call DWKey ; ld bc,64510 ; in a,(c) ; bit 1,a ; ld hl,KeyW ; call DWKey ; ret ; DWKey jr nz KillDWKey ; ld a,(hl) ; or a ; ret nz ; inc a ; ld (hl),a ; inc hl ; ld (hl),a ; ret ; KillDWKey xor a ; ld (hl),a ; ret ; GameReadKey ld a,(hl) ; or a ; ret z ; ld a,0 ; ld (hl),a ; ret ; PrintBar2 srl a ; call PBar2F1 ; cp #FF ; jr z PBar2F ; ld de,17 ; add hl,de ; ld d,15 ; call PBar2F2 ; dec hl ; ld c,a ; srl a ; srl a ; srl a ; or a ; jr z PBar2E ; ld b,a ; PBar2L call PBar2F0 ; dec hl ; dec d ; djnz PBar2L ; PBar2E ld a,c ; and #7 ; or #E8 ; ld (hl),a ; ld a,d ; or a ; jr z PBar2Ex ; ld b,d ; PBar2L2 dec hl ; ld a,#E8 ; ld (hl),a ; djnz PBar2L2 ; PBar2Ex ret ; PBar2F ld b,16 ; PBar2Fl call PBar2F0 ; dec hl ; djnz PBar2Fl ; ret ; PBar2F0 ld (hl),#F0 ; ret ; PBar2F1 ld (hl),#F1 ; ret ; PBar2F2 ld (hl),#F2 ; ret ; SpecTab dw #4000,#4020,#4040,#4060 ; dw #4080,#40A0,#40C0,#40E0 ; dw #4800,#4820,#4840,#4860 ; dw #4880,#48A0,#48C0,#48E0 ; dw #5000,#5020,#5040,#5060 ; dw #5080,#50A0,#50C0,#50E0 ; dw #0000,#0000,#0000,#0000 ; SX dw 0 ; SY equ SX+1 ; align 4 ; DMList ds 4 ; org #8E00 ; This was a source-boundary CallHL2 jp (hl) ; CallDE2 push de ; ret ; CallBC2 push bc ; Ret2 ret ; FireArrowL ex af,af' ; ld a,(ThingTable+TgAlive) ; or a ; ret nz ; ld a,r ; and 3 ; ret nz ; call CheckPathL ; ret c ; jp vFA1 ; FireArrowR ex af,af' ; ld a,(ThingTable+TgAlive) ; or a ; ret nz ; ld a,r ; and 3 ; ret nz ; call CheckPathR ; ret c ; jp vFA1 ; FireArrowD ex af,af' ; ld a,(ThingTable+TgAlive) ; or a ; ret nz ; ld a,r ; and 3 ; ret nz ; call CheckPathD ; ret c ; jp vFA1 ; FireArrowU ex af,af' ; ld a,(ThingTable+TgAlive) ; or a ; ret nz ; ld a,r ; and 3 ; ret nz ; call CheckPathU ; ret c ; jp vFA1 ; CheckPathR ld l,(ix+TgRoomX) ; ld h,(ix+TgRoomY) ; ld a,(ThingTable+TgRoomX) ; sub l ; ret z ; CPR2 cp Range ; ccf ; ret c ; ld b,a ; ld c,0 ; set 6,h ; set 7,h ; CPR0 bit 5,(hl) ; jp z,CPFail ; bit 4,(hl) ; jr z,CPR1 ; inc c ; CPR1 inc l ; djnz CPR0 ; ld a,c ; or a ; ret z ; ld a,(ix+TgOffsetY) ; cp 2 ; ret c ; cp 6 ; ccf ; ret ; CheckPathL ld l,(ix+TgRoomX) ; ld h,(ix+TgRoomY) ; ld a,(ThingTable+TgRoomX) ; sub l ; ret z ; CPL2 neg ; cp Range ; ccf ; ret c ; ld b,a ; ld c,0 ; set 6,h ; set 7,h ; CPL0 bit 1,(hl) ; jr z,CPFail ; bit 0,(hl) ; jr z,CPL1 ; inc c ; CPL1 dec l ; djnz CPL0 ; ld a,c ; or a ; ret z ; ld a,(ix+TgOffsetY) ; cp 2 ; ret c ; cp 6 ; ccf ; ret ; CheckPathD ld l,(ix+TgRoomX) ; ld h,(ix+TgRoomY) ; ld a,(ThingTable+TgRoomY) ; sub h ; ret z ; CPD2 cp Range ; ccf ; ret c ; ld b,a ; ld c,0 ; set 6,h ; set 7,h ; CPD0 bit 3,(hl) ; jr z,CPFail ; bit 2,(hl) ; jr z,CPD1 ; inc c ; CPD1 inc h ; djnz CPD0 ; ld a,c ; or a ; ret z ; ld a,(ix+TgOffsetX) ; cp 2 ; ret c ; cp 6 ; ccf ; ret ; CheckPathU ld l,(ix+TgRoomX) ; ld h,(ix+TgRoomY) ; ld a,(ThingTable+TgRoomY) ; sub h ; ret z ; CPU2 neg ; cp Range ; ccf ; ret c ; ld b,a ; ld c,0 ; set 6,h ; set 7,h ; CPU0 bit 7,(hl) ; jr z,CPFail ; bit 6,(hl) ; jr z,CPU1 ; inc c ; CPU1 dec h ; djnz CPU0 ; ld a,c ; or a ; ret z ; ld a,(ix+TgOffsetX) ; cp 2 ; ret c ; cp 6 ; ccf ; ret ; CPFail scf ; ret ; LookForMan ld a,(ThingTable+TgAlive) ; or a ; scf ; ret nz ; ld hl,(ThingTable+TgRoomX) ; ld e,(ix+TgRoomX) ; ld d,(ix+TgRoomY) ; call CheckRoom ; jr c InSameRoom ; ld hl,(ThingTable+TgRoomX) ; ld a,e ; cp l ; jr nz LookLR ; ld a,d ; cp h ; jr nz LookUD ; InSameRoom xor a ; dec a ; ret ; CheckRoom push de ; ld bc,#C080 ; add hl,bc ; ex de,hl ; add hl,bc ; ld a,(de) ; or a ; jr z ChkFail ; cp (hl) ; jr nz ChkFail ; scf ; pop de ; ret ; ChkFail or a ; pop de ; ret ; LookLR ld a,d ; cp h ; scf ; ret nz ; ld a,e ; cp l ; jr nc LookL ; call CheckPathR ; ret c ; ld a,0 ; or a ; ret ; LookL call CheckPathL ; ret c ; ld a,2 ; or a ; ret ; LookUD jr nc LookU ; call CheckPathD ; ret c ; ld a,3 ; or a ; ret ; LookU call CheckPathU ; ret c ; ld a,1 ; or a ; ret ; MonTTFire ld l,(ix+TgX) ; ld h,(ix+TgX+1) ; ld a,(ThingTable+TgX) ; ld e,a ; ld a,(ThingTable+TgX+1) ; ld d,a ; or a ; sbc hl,de ; jr z FireUD ; push hl ; ex af,af' ; ld l,(ix+TgY) ; ld h,(ix+TgY+1) ; ld a,(ThingTable+TgY) ; ld e,a ; ld a,(ThingTable+TgY+1) ; ld d,a ; or a ; sbc hl,de ; pop de ; ld a,h ; or a ; ret nz ; ld a,l ; cp 2 ; ret nc ; ex de,hl ; FireLR ex af,af' ; jr c,FireR ; ld de,0-LookRange ; add hl,de ; ret c ; ld a,2 ; call FireArrowL ; ret ; FireR ld de,LookRange-1 ; add hl,de ; ret nc ; ld a,0 ; call FireArrowR ; ret ; FireUD ld l,(ix+TgY) ; ld h,(ix+TgY+1) ; ld a,(ThingTable+TgY) ; ld e,a ; ld a,(ThingTable+TgY+1) ; ld d,a ; or a ; sbc hl,de ; ret z ; ????? jr c,FireD ; ld de,0-LookRange ; add hl,de ; ret c ; ld a,1 ; call FireArrowU ; ret ; FireD ld de,LookRange-1 ; add hl,de ; ret nc ; ld a,3 ; call FireArrowD ; ret ; ThingMove2 ld l,(ix+TgpShape) ; ld h,(ix+TgpShape+1) ; call CallHL2 ; Hacky0 ld a,(ix+TgMode) ; call AccelDecel ; call LookForMan ; jr c Hack ; jp m Attack ; Hack call MoveThing ; ld a,(ix+TgMDir) ; ld (ix+TgFDir),a ; Hacky call vCalcRoomAdd ; ld (ix+TgOffsetX),e ; ld (ix+TgOffsetY),d ; ld (ix+TgRoomX),l ; ld (ix+TgRoomY),h ; ld l,(ix+TgpShape) ; ld h,(ix+TgpShape+1) ; call CallHL2 ; jp MonTTFire ; Attack bit 5,(ix+TgMode) ; jr nz Att1 ; ld (ix+TgADRate),1 ; ld (ix+TgStage),5 ; Att1 ld (ix+TgMode),#60 ; res 7,(iy+64) ; set 7,(ix+TgContDam) ; call WakeWarlock ; call FindTargPos ; call MoveToTarget ; jr Hacky ; HackHim ld a,(AttDir) ; ld (ix+TgFDir),a ; ld a,(ix+TgContDam) ; bit 7,a ; ret z ; and #7F ; ld iy,ThingTable ; call vHitMon ; call vFlipSwordTg ; or a ; ret ; MoveToTarget ld l,(ix+TgTargY16) ; ld h,(ix+TgTargY16+1) ; ld e,(ix+TgY) ; ld d,(ix+TgY+1) ; or a ; sbc hl,de ; push de ; push hl ; ld l,(ix+TgTargX16) ; ld h,(ix+TgTargX16+1) ; ld e,(ix+TgX) ; ld d,(ix+TgX+1) ; or a ; sbc hl,de ; ld c,l ; pop hl ; ld b,l ; pop hl ; ex de,hl ; ld a,b ; or c ; jr z HackHim ; ld (ix+TgFDir),a ; bit 7,b ; jr nz MTT2 ; bit 7,c ; jr nz MTT1 ; ld a,c ; cp b ; jp c AttDR ; jp AttRD ; MTT1 ld a,c ; neg ; cp b ; jp c AttDL ; jp AttLD ; MTT2 ld a,b ; neg ; ld b,a ; bit 7,c ; jr nz MTT3 ; ld a,c ; cp b ; jr c AttUR ; jr AttRU ; MTT3 ld a,c ; neg ; cp b ; jr c AttUL ; AttLU ld (ix+TgMDir),2 ; ld (ix+TgFDir),2 ; dec hl ; call MonClear ; jp nc AttMove ; ld (ix+TgMDir),1 ; ld (ix+TgFDir),1 ; inc hl ; dec de ; call MonClear ; jp nc AttMove ; jp NoMove ; AttUL ld (ix+TgMDir),1 ; ld (ix+TgFDir),1 ; dec de ; call MonClear ; jp nc AttMove ; ld (ix+TgMDir),2 ; ld (ix+TgFDir),2 ; inc de ; dec hl ; call MonClear ; jp nc AttMove ; jp NoMove ; AttRU ld (ix+TgMDir),0 ; ld (ix+TgFDir),0 ; inc hl ; call MonClear ; jp nc AttMove ; ld (ix+TgMDir),1 ; ld (ix+TgFDir),1 ; dec hl ; dec de ; call MonClear ; jp nc AttMove ; jp NoMove ; AttUR ld (ix+TgMDir),1 ; ld (ix+TgFDir),1 ; dec de ; call MonClear ; jp nc AttMove ; ld (ix+TgMDir),0 ; ld (ix+TgFDir),0 ; inc de ; inc hl ; call MonClear ; jp nc AttMove ; jp NoMove ; AttLD ld (ix+TgMDir),2 ; ld (ix+TgFDir),2 ; dec hl ; call MonClear ; jr nc AttMove ; ld (ix+TgMDir),3 ; ld (ix+TgFDir),3 ; inc hl ; inc de ; call MonClear ; jr nc AttMove ; jr NoMove ; AttDL ld (ix+TgMDir),3 ; ld (ix+TgFDir),3 ; inc de ; call MonClear ; jr nc AttMove ; ld (ix+TgMDir),2 ; ld (ix+TgFDir),2 ; dec de ; dec hl ; call MonClear ; jr nc AttMove ; jr NoMove ; AttRD ld (ix+TgMDir),0 ; ld (ix+TgFDir),0 ; inc hl ; call MonClear ; jr nc AttMove ; ld (ix+TgMDir),3 ; ld (ix+TgFDir),3 ; dec hl ; inc de ; call MonClear ; jr nc AttMove ; jr NoMove ; AttDR ld (ix+TgMDir),3 ; ld (ix+TgFDir),3 ; inc de ; call MonClear ; jr nc AttMove ; ld (ix+TgMDir),0 ; ld (ix+TgFDir),0 ; dec de ; inc hl ; call MonClear ; jr nc AttMove ; jr NoMove ; AttMove ld (ix+TgX),l ; ld (ix+TgX+1),h ; ld (ix+TgY),e ; ld (ix+TgY+1),d ; ld (ix+TgStage),5 ; scf ; ret ; NoMove dec (ix+TgStage) ; scf ; ret nz ; or a ; ret ; MonClear call vClear ; ret c ; call MC1 ; ret c ; ld a,(ix+TgW1Y) ; cp 2 ; ret z ; inc de ; call vClear ; jr c MC0 ; call MC1 ; MC0 dec de ; ret ; MC1 ld a,(ix+TgW1X) ; cp 2 ; ret z ; inc hl ; call vClear ; dec hl ; ret ; FollowHim res 7,(ix+TgContDam) ; push iy ; call MoveToTarget ; pop iy ; ret c ; ld (ix+TgMode),0 ; jp MLG0 ; AttDir db 0 ; FindTargPos push ix ; ld ix,ThingTable ; call vCalcRoomAdd ; pop ix ; ld a,e ; cp 3 ; jr nc FTPr ; ld a,2 ; ld (AttDir),a ; ld hl,(ThingTable+TgX) ; ld a,r ; bit 0,a ; jr nz FTPl1 ; inc hl ; FTPl1 inc hl ; ld (ix+TgTargX16),l ; ld (ix+TgTargX16+1),h ; ld hl,(ThingTable+TgY) ; ld (ix+TgTargY16),l ; ld (ix+TgTargY16+1),h ; ret ; FTPr ld hl,(ThingTable+TgX) ; ld a,0 ; ld (AttDir),a ; ld a,r ; bit 0,a ; jr nz FTPr1 ; dec hl ; FTPr1 dec hl ; ld (ix+TgTargX16),l ; ld (ix+TgTargX16+1),h ; ld hl,(ThingTable+TgY) ; ld (ix+TgTargY16),l ; ld (ix+TgTargY16+1),h ; ret ; ManLogic bit 4,(ix+TgMode) ; jr z MLG1 ; ld l,(ix+TgRoomX) ; ld h,(ix+TgRoomY) ; ld e,(ix+TgMRoomX) ; ld d,(ix+TgMRoomY) ; or a ; sbc hl,de ; jr nz MLG1 ; res 4,(ix+TgMode) ; res 5,(ix+TgMode) ; res 6,(ix+TgMode) ; ld (ix+TgADRate),1 ; pop hl ; MLG0 ld a,(iy+64) ; and 3 ; xor 2 ; jp InitHomePos ; MLG1 call LookForMan ; ret c ; call WakeWarlock ; ld hl,(ThingTable+TgRoomX) ; ld (ix+TgMRoomX),l ; ld (ix+TgMRoomY),h ; set 4,(ix+TgMode) ; set 5,(ix+TgMode) ; res 7,(iy+64) ; res 3,(ix+TgMode) ; ld (ix+TgADRate),1 ; ld (ix+TgTDir),a ; ret ; ChaseMan ld a,(ix+TgTDir) ; jp InitHomePos ; AccelDecel bit 5,(ix+TgMode) ; jr nz Accel ; ld a,(ix+TgISpeed) ; cp (ix+TgMaxDel) ; jr nc PutItAway ; dec (ix+TgADRate) ; ret nz ; add a,(ix+TgDStep) ; ld (ix+TgISpeed),a ; ld a,(ix+TgDRate) ; ld (ix+TgADRate),a ; ret ; WakeWarlock push af ; ld a,(ix+TgMType) ; cp #FF ; jr nz GoAway ; ld (ix+TgMType),2 ; ld (ix+TgISpeed),11 ; GoAway pop af ; ret ; PutItAway ld a,(ix+TgSMode) ; or a ; ret z ; cp 5 ; ret nz ; inc a ; ld (ix+TgSMode),a ; ret ; Accel ld a,(ix+TgISpeed) ; cp (ix+TgMinDel) ; ret c ; ret z ; dec (ix+TgADRate) ; ret nz ; sub (ix+TgAStep) ; ld (ix+TgISpeed),a ; ld a,(ix+TgARate) ; ld (ix+TgADRate),a ; ld a,(ix+TgSMode) ; or a ; ret nz ; jp vFlipSwordTg ; MoveThing ld l,(ix+TgRoomX) ; ld h,(ix+TgRoomY) ; set 6,h ; set 7,h ; push hl ; pop iy ; ld a,(ix+TgMode) ; bit 0,a ; jp nz HomeOnPosn ; bit 1,a ; jp nz GoToNextCell ; bit 3,a ; jp nz GetBack ; LookForExit call ManLogic ; bit 4,(ix+TgMode) ; jp nz ChaseMan ; bit 6,(ix+TgMode) ; jp nz FollowHim ; ld a,(ix+TgMType) ; cp #FF ; ret z ; call FindAllExits ; ld a,c ; cp 1 ; jp z DW1exit ; cp 2 ; jp z DW2exit ; ld a,(ix+TgMType) ; and #FE ; cp 0 ; jp z RandomChoice ; cp 2 ; jp z WallFollow ; cp 4 ; jp z ManFollow ; RandomChoice bit 0,(ix+TgMType) ; jr nz NoDoubleBack ; ld a,c ; call vRandom ; ld hl,ExitList ; add a,l ; ld l,a ; ld a,(hl) ; jp InitHomePos ; NoDoubleBack ld a,(ix+TgMDir) ; xor #2 ; ld b,a ; TryAgain ld a,c ; call vRandom ; ld hl,ExitList ; add a,l ; ld l,a ; ld a,(hl) ; cp b ; jr z,TryAgain ; jp InitHomePos ; WallFollow ld a,c ; cp 4 ; jp z DW4exit ; ld a,(ix+TgMDir) ; xor #2 ; ld b,a ; bit 0,(ix+TgMType) ; jp nz FollowR ; ld hl,ExitList ; WFL1 ld a,(hl) ; cp b ; jr z WFL2 ; inc hl ; jr WFL1 ; WFL2 dec hl ; ld a,(hl) ; cp #FF ; jp nz InitHomePos ; ld hl,ExitList ; ld a,l ; add a,c ; dec a ; ld l,a ; ld a,(hl) ; jp InitHomePos ; FollowR ld hl,ExitList ; WFR1 ld a,(hl) ; cp b ; jr z WFR2 ; inc hl ; jr WFR1 ; WFR2 inc hl ; ld a,(hl) ; cp #FF ; jp nz InitHomePos ; ld hl,ExitList ; ld a,(hl) ; jp InitHomePos ; ManFollow ld a,(iy+64) ; bit 2,a ; jp z WallFollow ; and #3 ; xor 2 ; jp InitHomePos ; DW1exit ld a,(ExitList) ; jp InitHomePos ; DW4exit ld a,r ; and 1 ; xor (ix+TgMode) ; ld (ix+TgMode),a ; ld a,(ix+TgNDir) ; jp InitHomePos ; DW2exit ld a,(ix+TgMDir) ; xor #2 ; ld b,a ; ld a,(ExitList) ; cp b ; jp nz InitHomePos ; ld a,(ExitList+1) ; jp InitHomePos ; RecloseDoor res 2,(ix+TgMode) ; ld a,(ix+TgMDir) ; xor 2 ; ld (ix+TgMDir),a ; call vCloseDoor ; ld a,(ix+TgMDir) ; xor 2 ; ld (ix+TgMDir),a ; ret ; FindAllExits ld hl,ExitList ; ld c,0 ; ld a,(iy) ; and #30 ; jr z FPE1 ; ld (hl),0 ; inc hl ; inc c ; FPE1 ld a,(iy) ; and #C0 ; jr z FPE2 ; ld (hl),1 ; inc hl ; inc c ; FPE2 ld a,(iy) ; and #03 ; jr z FPE3 ; ld (hl),2 ; inc hl ; inc c ; FPE3 ld a,(iy) ; and #0C ; ret z ; ld (hl),3 ; inc hl ; inc c ; FPE4 ld (hl),#FF ; ret ; InitHomePos ld (ix+TgNDir),a ; call FindExitPos ; ld (ix+TgTargX),l ; ld (ix+TgTargY),h ; set 0,(ix+TgMode) ; ld a,(ix+TgMDir) ; xor 2 ; cp (ix+TgNDir) ; jp z HomeOnPosn ; bit 2,(ix+TgMode) ; jp z HomeOnPosn ; ld a,r ; and 7 ; jp z HomeOnPosn ; bit 5,(ix+TgMode) ; jp nz HomeOnPosn ; jp RecloseDoor ; FindExitPos or a ; jp z ExitR ; dec a ; jp z ExitU ; dec a ; jp z ExitL ; ld h,(ix+TgW2Y) ; ld l,3 ; ret ; ExitL ld h,3 ; ld l,1 ; ret ; ExitU ld h,1 ; ld l,3 ; ret ; ExitR ld h,3 ; ld l,(ix+TgW2X) ; ret ; HomeOnPosn bit 4,(ix+TgMode) ; jr nz HOP1 ; call LookForMan ; jr c HOP1 ; res 0,(ix+TgMode) ; ret ; HOP1 ld a,(ix+TgTargY) ; sub (ix+TgOffsetY) ; ld h,a ; ld a,(ix+TgTargX) ; sub (ix+TgOffsetX) ; ld l,a ; ld a,(ix+TgOffsetX) ; ld a,(ix+TgOffsetY) ; ld a,h ; or l ; jp z HomeOver ; bit 7,h ; jr nz HP2 ; bit 7,l ; jr nz HP1 ; ld a,l ; cp h ; jp c MinDown ; jp MinRight ; HP1 ld a,l ; neg ; cp h ; jp c MinDown ; jp MinLeft ; HP2 ld a,h ; neg ; ld h,a ; bit 7,l ; jr nz HP3 ; ld a,l ; cp h ; jp c MinUp ; jp MinRight ; HP3 ld a,l ; neg ; cp h ; jp c MinUp ; jp MinLeft ; HomeOver res 0,(ix+TgMode) ; set 1,(ix+TgMode) ; ld a,(ix+TgNDir) ; ld (ix+TgMDir),a ; ld (ix+TgStage),0 ; jp GoToNextCell ; GetBack call LookForMan ; jr nc GExit ; ld a,(ix+TgStage) ; or a ; jr z Stage0 ; dec a ; jr z Stage1 ; dec a ; jr z Stage2 ; dec a ; jp z Stage3 ; dec a ; jr z Stage1 ; dec a ; jr z Stage2 ; ld (ix+TgStage),0 ; dec (ix+TgGuardDuty) ; jr nz Stage0 ; GExit res 3,(ix+TgMode) ; set 2,(ix+TgMode) ; res 7,(iy+64) ; ret ; Stage1 ld a,(ix+TgNDir) ; xor 2 ; ld (ix+TgMDir),a ; inc (ix+TgStage) ; ld (ix+TgPause),10 ; jp RecloseDoor ; Stage2 ld a,(ix+TgNDir) ; xor 2 ; ld (ix+TgMDir),a ; call LookForMan ; dec (ix+TgPause) ; ret nz ; inc (ix+TgStage) ; ret ; Stage0 ld a,(ix+TgNDir) ; dec a ; and 3 ; ld (ix+TgMDir),a ; ld a,(ix+TgNDir) ; S0 or a ; jr z S0R ; dec a ; jr z S0U ; dec a ; jr z S0L ; ld a,(ix+TgOffsetX) ; cp 1 ; jp nz Left ; inc (ix+TgStage) ; ret ; S0L ld a,(ix+TgOffsetY) ; cp 1 ; jp nz Up ; inc (ix+TgStage) ; ret ; S0U ld a,(ix+TgOffsetX) ; cp (ix+TgW2X) ; jp nz Right ; inc (ix+TgStage) ; ret ; S0R ld a,(ix+TgOffsetY) ; cp (ix+TgW2Y) ; jp nz Down ; inc (ix+TgStage) ; ret ; Stage3 ld a,(ix+TgNDir) ; inc a ; and 3 ; ld (ix+TgMDir),a ; ld a,(ix+TgNDir) ; xor 2 ; jr S0 ; MinRight ld (ix+TgMDir),0 ; jp Right ; MinUp ld (ix+TgMDir),1 ; jp Up ; MinLeft ld (ix+TgMDir),2 ; jp Left ; MinDown ld (ix+TgMDir),3 ; jp Down ; GoToNextCell ld a,(ix+TgMDir) ; or a ; jp z MoveRight ; dec a ; jp z MoveUp ; dec a ; jp z MoveLeft ; ld a,(ix+TgStage) ; or a ; jr nz MD1 ; bit 2,(iy) ; call nz,Guard ; bit 3,(iy) ; jr nz MD1 ; bit 2,(iy) ; jp z OhFuck ; call vOpenDoor ; set 2,(ix+TgMode) ; ret ; MD1 call Down ; inc (ix+TgStage) ; ld a,(ix+TgStage) ; sub (ix+TgW1Y) ; ret nz ; res 1,(ix+TgMode) ; ret ; MoveLeft ld a,(ix+TgStage) ; or a ; jr nz ML1 ; bit 0,(iy) ; call nz Guard ; bit 1,(iy) ; jr nz ML1 ; bit 0,(iy) ; jp z OhFuck ; call vOpenDoor ; set 2,(ix+TgMode) ; ret ; ML1 call Left ; inc (ix+TgStage) ; ld a,(ix+TgStage) ; sub (ix+TgW1X) ; ret nz ; res 1,(ix+TgMode) ; ret ; MoveUp ld a,(ix+TgStage) ; or a ; jr nz MU1 ; bit 6,(iy) ; call nz Guard ; bit 7,(iy) ; jr nz MU1 ; bit 6,(iy) ; jp z OhFuck ; call vOpenDoor ; set 2,(ix+TgMode) ; ret ; MU1 call Up ; inc (ix+TgStage) ; ld a,(ix+TgStage) ; sub (ix+TgW1Y) ; ret nz ; res 1,(ix+TgMode) ; ret ; MoveRight ld a,(ix+TgStage) ; or a ; jr nz MR1 ; bit 4,(iy) ; call nz Guard ; bit 5,(iy) ; jr nz MR1 ; bit 4,(iy) ; jp z OhFuck ; call vOpenDoor ; set 2,(ix+TgMode) ; ret ; MR1 call Right ; inc (ix+TgStage) ; ld a,(ix+TgStage) ; sub (ix+TgW1X) ; ret nz ; res 1,(ix+TgMode) ; ret ; Move ld a,(ix+TgMDir) ; dec a ; jr z Up ; dec a ; jr z Left ; dec a ; jr z Down ; Right ld l,(ix+TgX) ; ld h,(ix+TgX+1) ; inc hl ; ld (ix+TgX),l ; ld (ix+TgX+1),h ; ret ; Up ld l,(ix+TgY) ; ld h,(ix+TgY+1) ; dec hl ; ld (ix+TgY),l ; ld (ix+TgY+1),h ; ret ; Left ld l,(ix+TgX) ; ld h,(ix+TgX+1) ; dec hl ; ld (ix+TgX),l ; ld (ix+TgX+1),h ; ret ; Down ld l,(ix+TgY) ; ld h,(ix+TgY+1) ; inc hl ; ld (ix+TgY),l ; ld (ix+TgY+1),h ; ret ; OhFuck jp RandomChoice ; Guard ld a,r ; and 7 ; ret nz ; bit 7,(iy+64) ; ret nz ; bit 5,(ix+TgMode) ; ret nz ; ld a,(ix+TgISpeed) ; cp (ix+TgMaxDel) ; ret c ; pop hl ; set 7,(iy+64) ; res 1,(ix+TgMode) ; set 3,(ix+TgMode) ; ld a,(ix+TgMDir) ; ld (ix+TgNDir),a ; ld (ix+TgStage),0 ; ld (ix+TgGuardDuty),20 ; jp vCloseDoor ; align 8 ; db #FF ; ExitList dw 0,0 ; db #FF ; OAlp rlca ; call c OA1 ; call nc OA0 ; djnz OAlp ; ret ; OA1 push af ; push bc ; ld a,#31 ; call vOutItHL ; inc l ; pop bc ; pop af ; ret ; OA0 push af ; push bc ; ld a,#30 ; call vOutItHL ; inc l ; pop bc ; pop af ; ret ; org #9800 ; CallHL jp (hl) ; CallDE push de ; ret ; CallBC push bc ; Ret ret ; KilledFlag db 0 ; FinishedFlag db 0 ; CarryOn dw 1000 ; S1InitGame call vDrawMaze ; call SetUpTable7 ; xor a ; ld (DSDamage),a ; ld (DSnKeys_BCD),a ; ld (DSScore),a ; ld (DSScore+1),a ; ld (KilledFlag),a ; ld (ExitOpen),a ; ld (FinishedFlag),a ; ld (DSMode),a ; ld (OutStat),a ; ld hl,1000 ; ld (CarryOn),hl ; ld a,0 ; out (#FE),a ; ld hl,#3D3C ; ld (PageX),hl ; xor a ; ld (CColour),a ; call InitThings ; call vCLS ; call Page ; ld ix,ThingTable ; ret ; AddScore push hl ; ld hl,(DSScore) ; ld a,e ; add a,l ; daa ; ld l,a ; ld a,h ; adc a,d ; daa ; cp h ; ld h,a ; jr z AS1 ; ld a,#FF ; ld (ThingTable+TgDamage),a ; AS1 ld (DSScore),hl ; pop hl ; ret ; KeyProb db 1 ; S1Start di ; call InitGame ; call vDoScore ; GameLoop ld a,(KeyProb) ; dec a ; ld (KeyProb),a ; jp nz S1S1 ; call MakeNoise ; ld a,20 ; ld (KeyProb),a ; call RefreshKAtt ; call vScanKeys ; call OpenIN ; ld bc,63486 ; in a,(c) ; cpl ; and 1 ; ld e,a ; ld a,(DSMode) ; and #80 ; or e ; ld (DSMode),a ; in a,(c) ; bit 2,a ; call z SdOn ; in a,(c) ; bit 3,a ; call z SdOff ; in a,(c) ; bit 1,a ; jr nz GL1 ; ld a,(DSMode) ; and #80 ; or 2 ; ld (DSMode),a ; GL1 ld bc,65278 ; in a,(c) ; and #1F ; ld e,a ; ld bc,32766 ; in a,(c) ; and #1F ; or e ; cp #1E ; jr nz GL2 ; call Delay1 ; ld a,7 ; out (#FE),a ; ld hl,#4000 ; ld de,#4001 ; ld bc,#1AFF ; ld (hl),2 ; ldir ; ld hl,#4000 ; ld bc,#1B00 ; GLp1 dec (hl) ; dec (hl) ; push ix ; push ix ; pop ix ; pop ix ; cpi ; jp v GLp1 ; call Delay1 ; call Delay1 ; xor a ; out (#FE),a ; call Page ; jr GL3 ; GL2 ld a,(ThingTable+TgDamage) ; ld (DSDamage),a ; call vDoScore ; call SetArrowDir ; ld hl,KeyWP ; call vReadKey ; jr z S1S1 ; ld a,(CColour) ; xor 1 ; ld (CColour),a ; call Page ; call Page ; GL3 ld a,(DSMode) ; xor #80 ; ld (DSMode),a ; S1S1 call MoveThings ; ld a,(KilledFlag) ; ld b,a ; ld a,(FinishedFlag) ; or b ; jp z GameLoop ; ld hl,(CarryOn) ; dec hl ; ld (CarryOn),hl ; ld a,l ; or h ; jp nz GameLoop ; ld hl,(DSScore) ; ret ; Delay1 push bc ; ld bc,40000 ; Dellp dec bc ; push ix ; pop ix ; ld a,b ; or c ; jr nz Dellp ; pop bc ; ret ; OutStat db 0 ; SdOn xor a ; ld (SdF),a ; ld (OutStat),a ; ret ; SdOff ld a,#C9 ; ld (SdF),a ; xor a ; ld (nBurst),a ; ret ; nBurst db 5 ; nCycle db 3 ; Freq db 40 ; dFreq db 0 ; MakeNoise equ $ ; SdF ret ; SMC ld a,(nBurst) ; or a ; ret z ; dec a ; ld (nBurst),a ; ret z ; ld a,(dFreq) ; ld b,a ; ld a,(Freq) ; add a,b ; ld (Freq),a ; ld a,(nCycle) ; ld c,a ; SdOlp ld a,(Freq) ; ld b,a ; SdIlp call SdDel ; djnz SdIlp ; ld a,(OutStat) ; xor #10 ; ld (OutStat),a ; out (#FE),a ; dec c ; jr nz SdOlp ; ret ; SdDel ld a,1 ; SdDel1 dec a ; jr nz SdDel1 ; ret ; AddSound push de ; add a,a ; add a,a ; ld e,a ; ld d,0 ; ld hl,SoundTable ; add hl,de ; ld a,(hl) ; ld (nBurst),a ; inc hl ; ld a,(hl) ; ld (nCycle),a ; inc hl ; ld a,(hl) ; ld (Freq),a ; inc hl ; ld a,(hl) ; ld (dFreq),a ; pop de ; ret ; SoundTable db 2,20,120,#00 ; Keep db 8,20,30,#FE ; Fire db 10,60,26,4 ; Killed db 3,12,60,1 ; Hit db 20,140,25,10 ; End RefreshKAtt ld hl,ObjTab ; RKA0 ld e,(hl) ; inc hl ; ld d,(hl) ; inc hl ; ld a,(hl) ; inc hl ; cp #FF ; ret z ; RKA1 ex de,hl ; call vOutItHLAttr ; ex de,hl ; jr RKA0 ; S1InitThings ld hl,ManDef ; Copy the Man's definition into the Thing table ld de,ThingTable ; ld bc,lThing ; ldir ; ld ix,ThingTable ; ld de,lThing ; ld b,nThings-2 ; The things but not counting the man or Warlock S1ITlp add ix,de ; Pre-increment skips the man push de ; push bc ; call CreateThing ; pop bc ; pop de ; djnz S1ITlp ; if enabled bCureThingInitBug add ix,de ; Skip this thing push de ; Now do the Warlock (B800) call CreateWarl ; pop de ; else push de ; Now do the Warlock (B7C0) call CreateWarl ; pop de ; add ix,de ; Skip the Warlock and point wrongly at the last thing entry endif ld b,nArrow ; Now "kill" all the arrows S1ITlp1 add ix,de ; ld (ix+TgAlive),1 ; Mark as dead djnz S1ITlp1 ; ret ; CreateWarl ld hl,(ChestPos) ; xor a ; call CTent ; ld (ix+TgISpeed),80 ; ret ; CreateThing ld a,64 ; call vRandom ; ld l,a ; ld a,64 ; call vRandom ; ld h,a ; ld a,5 ; call vRandom ; inc a ; CTent push ix ; pop de ; push hl ; ld hl,ThingDef ; ld bc,lThing ; ldir ; pop hl ; ld (ix+TgRoomX),l ; ld (ix+TgRoomY),h ; ld (ix+TgOffsetX),3 ; ld (ix+TgOffsetY),3 ; ex de,hl ; ld bc,3 ; push af ; ld a,e ; call Mult7 ; add hl,bc ; ld (ix+TgX),l ; ld (ix+TgX+1),h ; ld a,d ; call Mult7 ; add hl,bc ; ld (ix+TgY),l ; ld (ix+TgY+1),h ; ld (ix+TgARate),1 ; ld (ix+TgDRate),3 ; pop af ; add a,a ; add a,a ; add a,a ; add a,a ; ld e,a ; ld d,0 ; ld hl,TypeT ; add hl,de ; ld a,(hl) ; ld (ix+TgpMove),a ; inc hl ; ld a,(hl) ; ld (ix+TgpMove+1),a ; inc hl ; ld a,(hl) ; ld (ix+TgpShape),a ; inc hl ; ld a,(hl) ; ld (ix+TgpShape+1),a ; inc hl ; ld a,(hl) ; ld (ix+TgType),a ; inc hl ; ld a,r ; and #1 ; xor (hl) ; cp #FE ; jr nz WarlHack ; inc a ; WarlHack ld (ix+TgMType),a ; inc hl ; ld a,(hl) ; inc hl ; call vRandom ; add a,(hl) ; ld (ix+TgSpeed),a ; ld (ix+TgISpeed),a ; ld (ix+TgMaxDel),a ; ld a,r ; and #F ; add a,14 ; ld (ix+TgMinDel),a ; ld (ix+TgAStep),3 ; ld (ix+TgDStep),2 ; inc hl ; ld a,(hl) ; ld (ix+TgW1X),a ; inc hl ; ld a,(hl) ; ld (ix+TgW2X),a ; inc hl ; ld a,(hl) ; ld (ix+TgW1Y),a ; inc hl ; ld a,(hl) ; ld (ix+TgW2Y),a ; inc hl ; ld a,(hl) ; ld (ix+TgnArrow),a ; inc hl ; ld a,(hl) ; ld (ix+TgUseSword),a ; inc hl ; ld a,(hl) ; ld (ix+TgDamage),a ; inc hl ; ld a,(hl) ; ld (ix+TgContDam),a ; ret ; ; pMove pShape Type MType DelSpeed MinSpeed ; W1X W2X W1Y W2Y UseArrow UseSword Damage ConDam TypeT dw ThingMove,sWarlock ; db 1,#FF,6,8 ; db 2,6,3,5 ; db 1,1,255,0 ; dw ThingMove,sOrc ; db 1,2,50,30 ; db 2,6,3,5 ; db 1,1,40,0 ; dw ThingMove,sSpider ; db 3,3,50,15 ; db 3,5,3,5 ; db 0,0,70,25 ; dw ThingMove,sSlime ; db 3,4,30,35 ; db 3,5,3,5 ; db 0,0,100,18 ; dw ThingMove,sPMan ; db 1,1,60,20 ; db 2,6,3,5 ; db 1,1,80,0 ; dw ThingMove,sThing ; db 1,2,60,9 ; db 2,6,2,6 ; db 1,0,40,0 ; RandIndex call vRand ; ld hl,(Seed) ; ld a,h ; and #1 ; ld h,a ; ld de,448 ; or a ; sbc hl,de ; jr nc RandIndex ; add hl,de ; push hl ; call Div7 ; pop hl ; or a ; jr z RandIndex ; ret ; RandMaze call RandIndex ; push hl ; call RandIndex ; pop de ; ret ; Page call PAGE ; jp XORthings ; ArrowMove call ArrowShape ; call ArrowTTMove ; ld a,(ix+TgAlive) ; or a ; ret nz ; ArrowShape ld a,(ix+TgFDir) ; and #1 ; add a,#DE ; call FConvScr ; ret c ; jp vOutItHL ; ArrowTTMove dec (ix+TgStage) ; jr z ATTMkill ; ld l,(ix+TgX) ; ld h,(ix+TgX+1) ; ld e,(ix+TgY) ; ld d,(ix+TgY+1) ; call AddFDir ; push hl ; push de ; call MonLook ; pop de ; pop hl ; jr c,HitMonA ; call Clear ; jr c ATTMkill ; ld (ix+TgY),e ; ld (ix+TgY+1),d ; ld (ix+TgX),l ; ld (ix+TgX+1),h ; ret ; ATTMkill ld (ix+TgAlive),1 ; ret ; HitMonA ld a,ArrDam ; ld (ix+TgAlive),1 ; HitMon ld b,a ; ld a,3 ; call AddSound ; ld a,(iy+TgAlive) ; or a ; ret nz ; ld a,(iy+TgDamage) ; sub b ; ld (iy+TgDamage),a ; ret nc ; HitMon1 ld (iy+TgDamage),1 ; ld a,2 ; call AddSound ; push ix ; push iy ; pop ix ; ld l,(ix+TgpShape) ; ld h,(ix+TgpShape+1) ; call CallHL ; push iy ; pop hl ; ld de,ThingTable ; or a ; sbc hl,de ; jr z ManKilled ; ld de,#0005 ; call AddScore ; HM2 call CreateThing ; call FConvScr ; jr nc HM2 ; pop ix ; ret ; ManKilled ld a,1 ; ld (KilledFlag),a ; ld (ix+TgAlive),1 ; pop ix ; ret ; MonLook ld b,h ; ld c,l ; ld iy,ThingTable ; exx ; ld de,lThing ; ld b,nThings ; MonL1 exx ; ld a,(iy+TgAlive) ; or a ; jr nz,ML3 ; ld l,(iy+TgX) ; ld h,(iy+TgX+1) ; xor a ; sbc hl,bc ; jr z,ML2 ; inc h ; jr nz,ML3 ; inc l ; jr nz,ML3 ; ld a,(iy+TgW1X) ; cp 3 ; jr nz,ML3 ; ML2 ld l,(iy+TgY) ; ld h,(iy+TgY+1) ; xor a ; sbc hl,de ; jr z,ML4 ; inc h ; jr nz,ML3 ; inc l ; jr nz,ML3 ; ld a,(iy+TgW1Y) ; cp 3 ; jr z,ML4 ; ML3 exx ; add iy,de ; djnz MonL1 ; or a ; ret ; ML4 ld e,(ix+TgTargX) ; ld d,(ix+TgTargY) ; push iy ; pop hl ; or a ; sbc hl,de ; jr z,ML3 ; scf ; ret ; FireArrow ex af,af' ; FA1 ld a,(ix+TgnArrow) ; or a ; ret z ; call FindProjSp ; ret c ; ld a,1 ; call AddSound ; push iy ; pop de ; ld hl,ArrowDef ; ld bc,lThing ; ldir ; push ix ; pop hl ; ld (iy+TgTargX),l ; ld (iy+TgTargY),h ; ld l,(ix+TgX) ; ld h,(ix+TgX+1) ; ld e,(ix+TgY) ; ld d,(ix+TgY+1) ; ld (iy+TgX),l ; ld (iy+TgX+1),h ; ld (iy+TgY),e ; ld (iy+TgY+1),d ; ex af,af' ; ld (iy+TgFDir),a ; ld (iy+TgMDir),a ; ld (iy+TgAlive),0 ; push ix ; push iy ; pop ix ; call ArrowShape ; pop ix ; ret ; FindProjSp ld iy,ArrowTable ; ld b,nArrow ; ld de,lThing ; FPSlp ld a,(iy+TgAlive) ; or a ; ret nz ; add iy,de ; djnz FPSlp ; scf ; ret ; S1MoveThings ld b,nThings+nArrow ; Man, things, Warlock and the arrows ld ix,ThingTable ; MTlp ld a,(ix+TgAlive) ; or a ; jr nz MTlp2 ; dec (ix+TgSpeed) ; jr nz MTlp1 ; ld a,(ix+TgISpeed) ; ld (ix+TgSpeed),a ; push bc ; ld l,(ix+TgpMove) ; ld h,(ix+TgpMove+1) ; call CallHL ; pop bc ; MTlp1 ld a,(ix+TgSMode) ; or a ; jr z MTlp2 ; ld a,(ix+TgAlive) ; or a ; jr nz MTlp2 ; dec (ix+TgSSpeed) ; jr nz MTlp2 ; ld a,(ix+TgSSpeedI) ; ld (ix+TgSSpeed),a ; push bc ; call MoveSword ; pop bc ; ld a,b ; cp nThings+nArrow ; jr z MTlp3 ; call SwordScanMan ; jr MTlp2 ; MTlp3 call SwordScanTh ; MTlp2 ld de,lThing ; add ix,de ; djnz MTlp ; ret ; SwordScanMan push bc ; ld iy,ThingTable ; ld a,(ThingTable+TgAlive) ; or a ; jr nz SSMex ; call GetSwordPos ; ld bc,(ThingTable+TgX) ; or a ; sbc hl,bc ; jr nz SSMex ; ex de,hl ; ld bc,(ThingTable+TgY) ; or a ; sbc hl,bc ; res 0,l ; ld a,l ; or h ; ld a,SwdDamTg ; call z HitMon ; SSMex pop bc ; ret ; SwordScanTh push bc ; call GetSwordPos ; call MonLookSwd ; ld a,SwdDamMan ; call c HitMon ; S pop bc ; ret ; MonLookSwd ld b,h ; ld c,l ; ld iy,ThingTable ; exx ; ld de,lThing ; ld b,nThings ; SL1 exx ; ld a,(iy+TgAlive) ; or a ; jr nz,SL3 ; ld l,(iy+TgX) ; ld h,(iy+TgX+1) ; xor a ; sbc hl,bc ; jr z,SL2 ; inc h ; jr nz,SL3 ; inc l ; jr nz,SL3 ; ld a,(iy+TgW1X) ; cp 3 ; jr nz,SL3 ; SL2 ld l,(iy+TgY) ; ld h,(iy+TgY+1) ; xor a ; sbc hl,de ; scf ; ret z ; inc h ; jr nz,SL3 ; inc l ; jr nz,SL3 ; ld a,(iy+TgW1Y) ; cp 3 ; scf ; ret z ; SL3 exx ; add iy,de ; djnz SL1 ; or a ; ret ; XORSword ld a,(ix+TgSMode) ; or a ; ret z ; call GetSwordPos ; call Clear ; ret c ; call ConvScrHLDE ; ret c ; call GetSwordChar ; call vOutItHL ; ret ; AttSword ld a,(ix+TgSMode) ; or a ; ret z ; call GetSwordPos ; call Clear ; ret c ; call ConvScrHLDE ; ret c ; call GetSwordChar ; call vOutItHLAttr ; GetSwordChar ld a,(ix+TgFDir) ; add a,a ; add a,a ; add a,a ; add a,a ; or (ix+TgSMode) ; ld e,a ; ld d,0 ; push hl ; ld hl,SwordCTab ; add hl,de ; ld a,(hl) ; pop hl ; ret ; SwordCTab db 0,#E4,#E7,#E6,#E7,#E4,#E7,#E6,#E7,#E4,0 ; R db 0,0,0,0,0 ; db 0,#E5,#E4,#E5,#E6,#E5,#E4,#E5,#E6,#E5,0 ; U db 0,0,0,0,0 ; db 0,#E6,#E7,#E4,#E7,#E6,#E7,#E4,#E7,#E6,0 ; L db 0,0,0,0,0 ; db 0,#E5,#E6,#E5,#E4,#E5,#E6,#E5,#E4,#E5,0 ; D GetSwordPos ld l,(ix+TgX) ; ld h,(ix+TgX+1) ; ld e,(ix+TgY) ; ld d,(ix+TgY+1) ; ld a,(ix+TgFDir) ; or a ; jr z GSPr ; dec a ; jr z GSPu ; dec a ; jr z GSPl ; GSPd inc de ; inc de ; ld bc,GSPTu ; jr SwdAddX ; GSPu dec de ; ld bc,GSPTu ; jr SwdAddX ; GSPr inc hl ; ld bc,GSPTr ; jr SwdAddY ; GSPl dec hl ; ld bc,GSPTr ; SwdAddY ld a,(ix+TgSMode) ; add a,c ; ld c,a ; ld a,0 ; adc a,b ; ld b,a ; ld a,(bc) ; bit 7,a ; ld c,a ; ld b,0 ; jr z SAY1 ; ld b,#FF ; SAY1 ex de,hl ; add hl,bc ; ex de,hl ; ret ; SwdAddX ld a,(ix+TgSMode) ; add a,c ; ld c,a ; ld a,0 ; adc a,b ; ld b,a ; ld a,(bc) ; bit 7,a ; ld c,a ; ld b,0 ; jr z SAX1 ; ld b,#FF ; SAX1 add hl,bc ; ret ; GSPTu db 0,0,1,0,#FF,0,1,0,#FF,0,1,0,#FF; GSPTr db 0,0,1,1,1,0,1,1,1,0,1,1,1 ; XORthings ld b,nThings+nArrow ; ld ix,ThingTable ; Xtlp ld a,(ix+TgAlive) ; or a ; jr nz Xtlp1 ; push bc ; ld l,(ix+TgpShape) ; ld h,(ix+TgpShape+1) ; call CallHL ; pop bc ; Xtlp1 ld de,lThing ; add ix,de ; djnz Xtlp ; ret ; MoveSword ld a,(ix+TgSMode) ; cp 10 ; jr nz MoveS1 ; ld (ix+TgSMode),0 ; ret ; MoveS1 cp 5 ; ret z ; call XORSword ; inc (ix+TgSMode) ; jp XORSword ; ManDef db 0 ; Alive dw 439 ; X dw 439 ; Y db 1 ; Speed db 7 ; ISpeed dw ManMove ; dw ManShapeA ; db 2 ; Dir db 1 ; nArrow db 255 ; Damage db 1 ; Type ;0..3 shapes db 2 ; W1X db 6 ; W2X db 3 ; W1Y db 5 ; W2Y db 0 ; NDir db 0 ; Count db 0 ; Event db 0 ; DelX db 0 ; DelY db 0 ; MType db 0 ; DoorWidth db 0 ; GuardDuty db 62 ; RoomX db 62 ; RoomY db 0 ; OffsetX db 0 ; OffsetY db 0 ; TgTreas db 1 ; UseSword db 0 ; MRoomX db 0 ; MRoomY db 0 ; TDir db 0 ; FDir db 0 ; SMode db 1 ; SSpeed db 20 ; SSpeedI db 0 ; ADRate db 0 ; ARate db 0 ; DRate db 0 ; MinDel db 0 ; MaxDel ThingDef db 0 ; Alive dw 445 ; X dw 445 ; Y db 1 ; Speed db 5 ; ISpeed dw ThingMove ; dw sOrc ; db 3 ; Dir db 0 ; nArrow db 0 ; Damage db 3 ; Type ;0..3 shapes db 3 ; W1X db 5 ; W2X db 3 ; W1Y db 5 ; W2Y db 0 ; NDir db 0 ; Count db 0 ; Event db 0 ; DelX db 0 ; DelY db 0 ; MType db 0 ; DoorWidth db 0 ; GuardDuty db 63 ; RoomX db 63 ; RoomY db 4 ; OffsetX db 4 ; OffsetY db 0 ; TgTreas db 0 ; UseSword db 0 ; MRoomX db 0 ; MRoomY db 0 ; TDir db 0 ; FDir db 0 ; SMode db 1 ; SSpeed db 10 ; SSpeedI db 0 ; ADRate db 0 ; ARate db 0 ; DRate db 0 ; MinDel db 0 ; MaxDel ArrowDef db 1 ; Alive dw 0 ; X dw 0 ; Y db 1 ; Speed db 6 ; ISpeed dw ArrowMove ; dw ArrowShape ; db 0 ; Dir db 0 ; nArrow db 0 ; Damage db 0 ; Type ;0..3 shapes db 2 ; W1X db 6 ; W2X db 2 ; W1Y db 6 ; W2Y db 0 ; NDir db 30 ; Count db 0 ; Event db 0 ; DelX db 0 ; DelY db 0 ; MType db 0 ; DoorWidth db 0 ; GuardDuty db 0 ; RoomX db 0 ; RoomY db 0 ; OffsetX db 0 ; OffsetY db 0 ; TgTreas db 0 ; UseSword db 0 ; MRoomX db 0 ; MRoomY db 0 ; TDir db 0 ; FDir db 0 ; SMode db 0 ; SSpeed db 0 ; SSpeedI db 0 ; ADRate db 0 ; ARate db 0 ; DRate db 0 ; MinDel db 0 ; MaxDel ManSword ld hl,KeySP ; call vReadKey ; ret z ; FlipSword ld a,(ix+TgUseSword) ; or a ; ret z ; ld a,(ix+TgSMode) ; or a ; jr nz ManS1 ; ld (ix+TgSMode),1 ; ld a,(ix+TgSSpeedI) ; ld (ix+TgSSpeed),a ; jp XORSword ; ManS1 cp 5 ; ret nz ; call XORSword ; ld (ix+TgSMode),6 ; ld a,(ix+TgSSpeedI) ; ld (ix+TgSSpeed),a ; jp XORSword ; FlipSwordTg ld a,(ix+TgUseSword) ; or a ; ret z ; ld a,(ix+TgSMode) ; or a ; jr nz TgS1 ; ld (ix+TgSMode),1 ; ld a,(ix+TgSSpeedI) ; ld (ix+TgSSpeed),a ; ret ; TgS1 cp 5 ; ret nz ; ld (ix+TgSMode),6 ; ld a,(ix+TgSSpeedI) ; ld (ix+TgSSpeed),a ; ret ; ManNotMove ld a,(cArrowDir) ; inc a ; jp z ManShapeAtt ; dec a ; cp (ix+TgFDir) ; jp z ManShapeAtt ; push af ; call ManShape ; pop af ; ld (ix+TgFDir),a ; jp ManShape ; ManMove call ManSword ; call JustifyIN ; call FireIN ; call ManKeys ; jr nz ManNotMove ; ; RULD push af ; xor a ; ld (ScrollF),a ; call ManShape ; ld a,(cArrowDir) ; ld (ix+TgFDir),a ; pop af ; cp (ix+TgMDir) ; ld (ix+TgMDir),a ; ex af,af' ; call FaceIN ; ex af,af' ; push ix ; call z ManTTMove ; pop ix ; call ManShape ; ld a,(ScrollF) ; or a ; call nz ManShape1a ; call CalcRoomAdd ; ld a,(WayOutX) ; cp l ; jr nz Exitx ; ld a,(WayOutY) ; cp h ; jr nz Exitx ; ld a,(ExitOpen) ; or a ; jr z Exitx ; ld hl,1 ; ld (CarryOn),hl ; ld a,1 ; ld (FinishedFlag),a ; Exitx call TTKeep ; ld e,(ix+TgRoomX) ; ld d,(ix+TgRoomY) ; or a ; sbc hl,de ; ret z ; ChangeRoom add hl,de ; ex de,hl ; ld (ix+TgRoomX),e ; ld (ix+TgRoomY),d ; ld a,d ; cp h ; jr nz,ChangeUD ; ld a,e ; cp l ; jr nc,ChangeR ; ChangeL set 6,l ; set 6,h ; set 7,h ; res 0,(hl) ; res 1,(hl) ; set 2,(hl) ; ret ; ChangeR set 6,l ; set 6,h ; set 7,h ; res 0,(hl) ; set 1,(hl) ; set 2,(hl) ; ret ; ChangeUD jr nc,ChangeD ; ChangeU set 6,l ; set 6,h ; set 7,h ; set 0,(hl) ; set 1,(hl) ; set 2,(hl) ; ret ; ChangeD set 6,l ; set 6,h ; set 7,h ; set 0,(hl) ; res 1,(hl) ; set 2,(hl) ; ret ; TTKeep ld a,e ; cp 3 ; ret nz ; ld a,d ; sub 2 ; cp 2 ; ret nc ; push hl ; ld bc,#C0C0 ; add hl,bc ; ld a,(hl) ; or a ; jr z,TTKx ; cp #F5 ; Chest? jr z TTKC ; ld (hl),0 ; ld de,(PageX) ; pop hl ; push hl ; or a ; sbc hl,de ; ex de,hl ; ld a,e ; call Mult7 ; ld e,l ; ld a,d ; call Mult7 ; ld d,l ; ld hl,#303 ; add hl,de ; ld a,#F4 ; Key? call vOutItHL ; ld a,(DSnKeys_BCD) ; Inc the number of keys collected (in BCD) inc a ; daa ; ld (DSnKeys_BCD),a ; ld de,#10 ; call AddScore ; ld a,0 ; call AddSound ; TTKx pop hl ; ret ; ; Hit the chest KeyNo_BCD equ ((KeyNo/10)*16) + (KeyNo mod 10) ; "KeyNo" expressed in BCD, used below... TTKC ld a,(DSnKeys_BCD) ; Collected all the keys? cp KeyNo_BCD ; jr nz TTKx ; No, exit ld (hl),0 ; Kill the chest ld de,(PageX) ; pop hl ; push hl ; or a ; sbc hl,de ; ex de,hl ; ld a,e ; call Mult7 ; ld e,l ; ld a,d ; call Mult7 ; ld d,l ; ld hl,#303 ; add hl,de ; ld a,#F5 ; call vOutItHL ; ld de,#500 ; call AddScore ; ld a,4 ; call AddSound ; ; Bugger! We needed to save IX here and didn't if enabled bCureExitBug push ix ; endif call Page ; ld a,1 ; ld (ExitOpen),a ; ld a,63 ; call vRandom ; ld (WayOutX),a ; ld a,63 ; call vRandom ; ld (WayOutY),a ; call Page ; if enabled bCureExitBug pop ix ; endif pop hl ; ret ; FaceIN ld a,(cArrowDir) ; inc a ; ret nz ; ld a,(ix+TgMDir) ; ld (ix+TgFDir),a ; ret ; SASp db 3 ; SetArrowDir ld a,(SASp) ; dec a ; ld (SASp),a ; ret nz ; ld a,3 ; ld (SASp),a ; ld bc,61438 ; in a,(c) ; bit 0,a ; jr z Rev ; ld hl,KeyARP ; call vReadKey ; jr z SAD1 ; xor a ; ld (cArrowDir),a ; ret ; Rev ld a,#FF ; ld (cArrowDir),a ; SAD1 ld hl,KeyALP ; call vReadKey ; jr z SAD2 ; ld a,2 ; ld (cArrowDir),a ; ret ; SAD2 ld hl,KeyAUP ; call vReadKey ; jr z SAD3 ; ld a,1 ; ld (cArrowDir),a ; ret ; SAD3 ld hl,KeyADP ; call vReadKey ; ret z ; ld a,3 ; ld (cArrowDir),a ; ret ; cArrowDir db #FF ; FireIN ld hl,KeyAP ; call vReadKey ; ret z ; ld a,(ThingTable+TgFDir) ; jp FireArrow ; JustifyIN ld hl,KeyspP ; call vReadKey ; ret z ; call SpaceMan ; ret ; CalcRoomAdd ld l,(ix+TgX) ; ld h,(ix+TgX+1) ; call Div7 ; ld d,l ; ld e,a ; ld l,(ix+TgY) ; ld h,(ix+TgY+1) ; call Div7 ; ld h,l ; ld l,d ; ld d,a ; ret ; HL = X,Y DE = Offset X,Y OpenIN ld ix,ThingTable ; ld hl,KeyOP ; call vReadKey ; jr z OIN1 ; call XORSword ; call OpenDoor ; call XORSword ; OIN1 ld hl,KeyCP ; call vReadKey ; ret z ; call XORSword ; call CloseDoor ; call XORSword ; ret ; OpenDoor ld a,3 ; ld (OpenClose),a ; call XORSwords ; call DWOCDoor ; jr XORSwords ; OpenClose db 0 ; CloseDoor ld a,1 ; ld (OpenClose),a ; call XORSwords ; call DWOCDoor ; XORSwords ld hl,(PageX) ; ld a,(ix+TgRoomX) ; sub l ; inc a ; cp 6 ; ret nc ; ld a,(ix+TgRoomY) ; sub h ; inc a ; cp 5 ; ret nc ; push ix ; pop de ; push de ; ld b,nThings ; ld ix,ThingTable ; XSslp push bc ; push ix ; pop hl ; or a ; sbc hl,de ; jr z XSsx ; ld a,(ix+TgAlive) ; or a ; jr nz XSsx ; call XSs1 ; XSsx ld bc,lThing ; add ix,bc ; pop bc ; djnz XSslp ; pop ix ; ret ; XSs1 push de ; call XORSword ; pop de ; ret ; DWOCDoor ld a,(ix+TgMDir) ; call DWOCDoor1 ; ld a,(ix+TgFDir) ; DWOCDoor1 push af ; call CalcRoomAdd ; set 6,h ; set 7,h ; pop af ; or a ; jp z DWDr ; dec a ; jp z DWDu ; dec a ; jp z DWDl ; DWDd ld a,(ix+TgW2Y) ; cp d ; ret nz ; ld a,(hl) ; rrca ; rrca ; and #3 ; bit 0,a ; ret z ; ld b,a ; ld a,(OpenClose) ; cp b ; ret z ; call TryOpenD ; ret c ; ld a,(hl) ; rrca ; rrca ; and #FC ; ld b,a ; ld a,(OpenClose) ; or b ; rlca ; rlca ; ld (hl),a ; inc h ; ld a,(hl) ; rlca ; rlca ; and #FC ; ld b,a ; ld a,(OpenClose) ; or b ; rrca ; rrca ; ld (hl),a ; dec h ; call FindTgCellXY ; ld bc,7 ; ex de,hl ; add hl,bc ; ex de,hl ; inc hl ; inc hl ; call ConvScrHLDE ; ret c ; XORdoorH ld b,4 ; ld a,#DC ; XORdoorH1 call vOutItHL ; inc l ; djnz XORdoorH1 ; ret ; DWDu ld a,1 ; cp d ; ret nz ; ld a,(hl) ; rlca ; rlca ; and #3 ; bit 0,a ; ret z ; ld b,a ; ld a,(OpenClose) ; cp b ; ret z ; call TryOpenU ; ret c ; ld a,(hl) ; rlca ; rlca ; and #FC ; ld b,a ; ld a,(OpenClose) ; or b ; rrca ; rrca ; ld (hl),a ; dec h ; ld a,(hl) ; rrca ; rrca ; and #FC ; ld b,a ; ld a,(OpenClose) ; or b ; rlca ; rlca ; ld (hl),a ; inc h ; call FindTgCellXY ; inc hl ; inc hl ; call ConvScrHLDE ; ret c ; jr XORdoorH ; DWDl ld a,1 ; cp e ; ret nz ; ld a,(hl) ; and #3 ; bit 0,a ; ret z ; ld b,a ; ld a,(OpenClose) ; cp b ; ret z ; call TryOpenL ; ret c ; ld a,(hl) ; and #FC ; ld b,a ; ld a,(OpenClose) ; or b ; ld (hl),a ; dec l ; ld a,(hl) ; rrca ; rrca ; rrca ; rrca ; and #FC ; ld b,a ; ld a,(OpenClose) ; or b ; rlca ; rlca ; rlca ; rlca ; ld (hl),a ; inc l ; call FindTgCellXY ; inc de ; inc de ; call ConvScrHLDE ; ret c ; XORdoorV ld b,4 ; ld a,#DD ; XORdoorV1 call vOutItHL ; inc h ; djnz XORdoorV1 ; ret ; DWDr ld a,(ix+TgW2X) ; cp e ; ret nz ; ld a,(hl) ; rrca ; rrca ; rrca ; rrca ; and #3 ; bit 0,a ; ret z ; ld b,a ; ld a,(OpenClose) ; cp b ; ret z ; call TryOpenR ; ret c ; ld a,(hl) ; rrca ; rrca ; rrca ; rrca ; and #FC ; ld b,a ; ld a,(OpenClose) ; or b ; rlca ; rlca ; rlca ; rlca ; ld (hl),a ; inc l ; ld a,(hl) ; and #FC ; ld b,a ; ld a,(OpenClose) ; or b ; ld (hl),a ; dec l ; call FindTgCellXY ; ld bc,7 ; add hl,bc ; inc de ; inc de ; call ConvScrHLDE ; ret c ; jr XORdoorV ; TryOpenD push hl ; call FindTgCellXY ; ex de,hl ; ld bc,7 ; add hl,bc ; jr TryOpenHD ; TryOpenU push hl ; call FindTgCellXY ; ex de,hl ; TryOpenHD ld b,h ; ld c,l ; inc de ; inc de ; push ix ; ld ix,ThingTable ; exx ; ld de,lThing ; ld b,nThings ; OpenH1 exx ; ld l,(ix+TgX) ; ld h,(ix+TgX+1) ; or a ; sbc hl,de ; jr c OpenH2 ; dec h ; jp p OpenH2 ; ld a,l ; cp 4 ; jr nc OpenH2 ; ld l,(ix+TgY) ; ld h,(ix+TgY+1) ; scf ; sbc hl,bc ; jr nc OpenH2 ; inc h ; jr nz OpenH2 ; inc l ; jr z OpenF ; inc l ; jr nz OpenH2 ; ld a,(ix+TgW1Y) ; cp 2 ; jr nz OpenF ; OpenH2 exx ; ld a,(ix+TgSMode) ; add ix,de ; djnz OpenH1 ; pop ix ; pop hl ; or a ; ret ; OpenF pop ix ; pop hl ; scf ; ret ; TryOpenR push hl ; call FindTgCellXY ; ex de,hl ; ld bc,7 ; ex de,hl ; add hl,bc ; ex de,hl ; jr OpenVD ; TryOpenL push hl ; call FindTgCellXY ; ex de,hl ; OpenVD inc hl ; inc hl ; ld b,h ; ld c,l ; push ix ; ld ix,ThingTable ; exx ; ld de,lThing ; ld b,nThings ; OpenV1 exx ; ld l,(ix+TgY) ; ld h,(ix+TgY+1) ; or a ; sbc hl,bc ; jr c OpenV2 ; dec h ; jp p OpenV2 ; ld a,l ; cp 4 ; jr nc OpenV2 ; ld l,(ix+TgX) ; ld h,(ix+TgX+1) ; scf ; sbc hl,de ; jr nc OpenV2 ; inc h ; jr nz OpenV2 ; inc l ; jr z OpenF ; inc l ; jr nz OpenV2 ; ld a,(ix+TgW1X) ; cp 2 ; jr nz OpenF ; OpenV2 exx ; add ix,de ; djnz OpenV1 ; pop ix ; pop hl ; or a ; ret ; ManKeys ld bc,65278 ; in a,(c) ; bit 1,a ; jr z MKL ; bit 2,a ; jr nz MK1 ; ld a,0 ; ret ; MKL bit 2,a ; jr z MK1 ; xor a ; ld a,2 ; ret ; MK1 ld bc,32766 ; in a,(c) ; bit 3,a ; jr z MKU ; bit 2,a ; ret nz ; ld a,3 ; ret ; MKU bit 2,a ; jr z MKUx ; xor a ; ld a,1 ; ret ; MKUx ld a,1 ; or a ; ret ; ManTTMove ld l,(ix+TgX) ; ld h,(ix+TgX+1) ; ld e,(ix+TgY) ; ld d,(ix+TgY+1) ; call AddMDir ; call ManClear ; ret c ; inc de ; call ManClear ; ret c ; dec de ; ld (ix+TgX),l ; ld (ix+TgX+1),h ; ld (ix+TgY),e ; ld (ix+TgY+1),d ; ret ; JustL call PageS1 ; ld a,(PageX) ; sub 4 ; jp p JustL1 ; xor a ; JustL1 ld (PageX),a ; call Page ; jp JustRet ; JustR call PageS1 ; ld a,(PageX) ; add a,4 ; cp 60 ; jr c JustR1 ; ld a,60 ; JustR1 ld (PageX),a ; call Page ; jp JustRet ; JustD call PageS1 ; ld a,(PageY) ; add a,3 ; cp 61 ; jr c JustD1 ; ld a,61 ; JustD1 ld (PageY),a ; call Page ; jp JustRet ; JustU call PageS1 ; ld a,(PageY) ; sub 3 ; jp p JustU1 ; xor a ; JustU1 ld (PageY),a ; call Page ; jp JustRet ; SpaceMan ld ix,ThingTable ; ld l,(ix+TgX) ; ld h,(ix+TgX+1) ; call Div7 ; ld a,l ; dec a ; jp p SpaceM1 ; xor a ; SpaceM1 cp 60 ; jr c SpaceM1a ; ld a,60 ; SpaceM1a ld c,a ; ld l,(ix+TgY) ; ld h,(ix+TgY+1) ; call Div7 ; ld a,l ; dec a ; jp p SpaceM2 ; xor a ; SpaceM2 cp 61 ; jr c SpaceM2a ; ld a,61 ; SpaceM2a ld b,a ; ld hl,(PageX) ; or a ; sbc hl,bc ; ret z ; push ix ; call PageS1 ; pop ix ; ld (PageX),bc ; push ix ; call PageS1 ; pop ix ; ret ; PageS1 push bc ; call Page ; pop bc ; ret ; ret ; AddFDir ld a,(ix+TgFDir) ; jr AMD1 ; AddMDir ld a,(ix+TgMDir) ; AMD1 or a ; jr z ADR ; dec a ; jr z ADU ; dec a ; jr z ADL ; dec a ; ret nz ; inc de ; ret ; ADR inc hl ; ret ; ADU dec de ; ret ; ADL dec hl ; ret ; if enabled bWalkThroughWalls ManClear ld bc,448 ; Right? or a ; sbc hl,bc ; add hl,bc ; jr z ClearF ; ex de,hl ; Top? or a ; sbc hl,bc ; add hl,bc ; ex de,hl ; jr z ClearF ; ld a,l ; 0? or h ; jr z ClearF ; ld a,d ; 0? or e ; jr z ClearF ; or a ; ret ; else ManClear equ Clear ; endif Clear ld bc,448 ; or a ; sbc hl,bc ; add hl,bc ; jr z ClearF ; ex de,hl ; or a ; sbc hl,bc ; add hl,bc ; ex de,hl ; jr z ClearF ; push hl ; call Div7 ; L = Rhume A = disp or a ; ld b,a ; ld a,l ; ld (RhumeX),a ; ld c,l ; jr z Clear1 ; pop hl ; ex de,hl ; push hl ; call Div7 ; or a ; ld a,l ; ld (RhumeY),a ; jr z Clear2 ; pop hl ; ex de,hl ; or a ; ret ; ClearF scf ; ret ; Clear1 equ $ ; X of man is in wall pop hl ; ex de,hl ; push hl ; call Div7 ; or a ; ld b,a ; ld a,l ; ld (RhumeY),a ; ld h,l ; ld l,c ; set 7,h ; set 6,h ; jr z Clear3 ; Corner ld a,(hl) ; and #3 ; or a ; jr z Cl1no ; dec a ; jr z Cl1no ; dec a ; jr z Cl1yes ; Cl1arch ld a,b ; cp 1 ; jr z Cl1no ; cp 6 ; jr z Cl1no ; Cl1yes pop hl ; ex de,hl ; or a ; ret ; Cl1no pop hl ; ex de,hl ; scf ; ret ; Clear2 equ $ ; Y of man is in wall ld h,l ; ld l,c ; set 7,h ; set 6,h ; ld a,(hl) ; rlca ; rlca ; and #3 ; or a ; jr z Cl2no ; dec a ; jr z Cl2no ; dec a ; jr z Cl2yes ; Cl2arch ld a,b ; cp 1 ; jr z Cl2no ; cp 6 ; jr z Cl2no ; Cl2yes pop hl ; ex de,hl ; or a ; ret ; Cl2no pop hl ; ex de,hl ; scf ; ret ; Clear3 ld a,(hl) ; and #C3 ; cp #82 ; jr nz Cl2no ; dec l ; dec h ; ld a,(hl) ; and #3C ; cp #28 ; jr nz Cl2no ; jr Cl2yes ; ret ; sSlime call FConvScr ; ret c ; ld a,(ix+TgMDir) ; add a,a ; add a,a ; ld b,#C0 ; add a,b ; call vOutItHL ; inc h ; inc a ; call vOutItHL ; dec h ; inc l ; inc a ; call vOutItHL ; inc h ; inc a ; jp vOutItHL ; sSpider call FConvScr ; ret c ; ld a,(ix+TgFDir) ; bit 0,a ; jr nz T2S1 ; xor #02 ; T2S1 add a,#B0 ; call vOutItHL ; inc l ; add a,4 ; call vOutItHL ; inc h ; dec l ; add a,4 ; call vOutItHL ; inc l ; add a,4 ; jp vOutItHL ; sOrc call XORSword ; call FConvScr ; ret c ; call GetManTop ; ld b,#44 ; call OutItHLcol ; inc h ; call GetManBot ; jp OutItHLcol ; sWarlock call XORSword ; call FConvScr ; ret c ; ld a,(ix+TgFDir) ; add a,#F8 ; call vOutItHL ; inc h ; add a,4 ; jp vOutItHL ; sPMan call XORSword ; call FConvScr ; ret c ; call GetManTop ; ld b,#43 ; call OutItHLcol ; inc h ; call GetManBot ; jp OutItHLcol ; sThing call FConvScr ; ret c ; ld a,(ix+TgFDir) ; add a,#E0 ; jp vOutItHL ; ManShape call XORSword ; call ConvScr ; jr c ManShape1 ; call GetManTop ; call vOutItHL ; inc h ; call GetManBot ; jp vOutItHL ; ManShapeA call XORSword ; call FConvScr ; ret c ; call GetManTop ; call vOutItHL ; inc h ; call GetManBot ; jp vOutItHL ; ManShapeAtt call AttSword ; call FConvScr ; ret c ; ld a,#A8 ; call vOutItHLAttr ; inc h ; jp vOutItHLAttr ; ManShape1 ld a,1 ; ld (ScrollF),a ; ret ; ScrollF db 0 ; ManShape1a push ix ; bit 7,l ; jp nz JustL ; bit 7,h ; jp nz JustU ; ld a,l ; cp 29 ; jp z JustR ; ld a,h ; cp 22 ; jp z JustD ; jp 0 ; JustRet pop ix ; ret ; GetManTop ld a,(ix+TgFDir) ; or a ; jr z GMTR ; dec a ; jr z GMTU ; dec a ; jr z GMTL ; ld a,#AC ; ret ; GMTR ld a,#AA ; ret ; GMTU ld a,#A8 ; ret ; GMTL ld a,#AE ; ret ; GetManBot ld a,(ix+TgFDir) ; or a ; jr z GMBR ; dec a ; jr z GMBU ; dec a ; jr z GMBL ; ld a,#AD ; ret ; GMBR ld a,#AB ; ret ; GMBU ld a,#A9 ; ret ; GMBL ld a,#AF ; ret ; FindTgCellXY call CalcRoomAdd ; ex de,hl ; ld a,d ; call Mult7 ; push hl ; ld a,e ; call Mult7 ; pop de ; ret ; ConvScrHLDE push de ; jp FConvScrE ; ConvScr ld l,(ix+TgY) ; ld h,(ix+TgY+1) ; push hl ; ld l,(ix+TgX) ; ld h,(ix+TgX+1) ; push af ; ld a,#B7 ; ld (CSSMC),a ; pop af ; call GetPageXDE ; or a ; sbc hl,de ; bit 7,h ; call nz CSFail ; ld de,29 ; or a ; sbc hl,de ; call nc CSFail ; add hl,de ; ld c,l ; pop hl ; call GetPageYDE ; or a ; sbc hl,de ; bit 7,h ; call nz CSFail ; ld de,22 ; or a ; sbc hl,de ; call nc CSFail ; add hl,de ; ld h,l ; ld l,c ; CSSMC or a ; ret ; CSFail push af ; ld a,#37 ; ld (CSSMC),a ; pop af ; ret ; GetPageXDE push hl ; ld de,(PageX) ; ld d,0 ; ld l,e ; ld h,d ; add hl,hl ; add hl,hl ; add hl,hl ; or a ; sbc hl,de ; ex de,hl ; pop hl ; ret ; GetPageYDE push hl ; ld de,(PageY) ; ld d,0 ; ld l,e ; ld h,d ; add hl,hl ; add hl,hl ; add hl,hl ; or a ; sbc hl,de ; ex de,hl ; pop hl ; ret ; SetDiv7 push de ; push bc ; ld c,7 ; ld b,16 ; xor a ; Div71 add hl,hl ; rla ; jr c Div72 ; cp c ; jr c Div73 ; Div72 sub c ; inc hl ; Div73 djnz Div71 ; pop bc ; pop de ; ret ; Mult7 push de ; ld e,a ; ld d,0 ; ld h,d ; ld l,e ; add hl,hl ; add hl,hl ; add hl,hl ; or a ; sbc hl,de ; pop de ; ret ; Div7 add hl,hl ; push de ; ld de,Table7 ; add hl,de ; pop de ; ld a,(hl) ; inc hl ; ld l,(hl) ; ld h,0 ; ret ; SetUpTable7 ld hl,0 ; ld ix,Table7 ; ld bc,500 ; SUT1 push hl ; call SetDiv7 ; ld (ix),a ; ld (ix+1),l ; pop hl ; inc ix ; inc ix ; cpi ; jp v SUT1 ; ret ; FConvScr ld l,(ix+TgY) ; ld h,(ix+TgY+1) ; push hl ; ld l,(ix+TgX) ; ld h,(ix+TgX+1) ; FConvScrE call GetPageXDE ; or a ; sbc hl,de ; jr c FCSEf ; ld de,29 ; or a ; sbc hl,de ; ccf ; jr c FCSEf ; add hl,de ; ld c,l ; pop hl ; call GetPageYDE ; or a ; sbc hl,de ; ret c ; ld de,22 ; or a ; sbc hl,de ; ccf ; ret c ; add hl,de ; ld h,l ; ld l,c ; or a ; ret ; FCSEf pop af ; scf ; ret ; RhumeX db 0 ; RhumeY db 0 ; PrintBar srl a ; call PBarF1 ; cp #FF ; jr z PBarF ; ld de,17 ; add hl,de ; ld d,15 ; call PBarF2 ; dec hl ; ld c,a ; srl a ; srl a ; srl a ; or a ; jr z PBarE ; ld b,a ; PBarL call PBarF0 ; dec hl ; dec d ; djnz PBarL ; PBarE ld a,c ; and #7 ; or #E8 ; call vOutItHL ; ld a,d ; or a ; jr z PBarEx ; ld b,d ; PBarL2 dec hl ; ld a,#E8 ; call vOutItHL ; djnz PBarL2 ; PBarEx ret ; PBarF ld b,16 ; PBarFl call PBarF0 ; dec hl ; djnz PBarFl ; ret ; PBarF0 push af ; ld a,#F0 ; call vOutItHL ; pop af ; ret ; PBarF1 push af ; ld a,#F1 ; call vOutItHL ; pop af ; ret ; PBarF2 push af ; ld a,#F2 ; call vOutItHL ; pop af ; ret ; ; Note! The game will crash first time round if the thing table doesn't have the alive flags set to false org $B000 ; ThingTable ds lThing*nThings,$00 ; First entry is the Man, then nThings-2, then the Warlock ArrowTable ds lThing * nArrow,$00 ; AppLast equ * ; ; Divide by 7 table Table7 ds 2*500 ; ; The Room list overlaps the /7 table, it can because the table is regenerated later org $BE00 ; RhumeList ds 4*nRhumes ; DataEnds equ * ; The Maze lives in the top 16K org $C000 ; Maze ds $4000 ; ; We can compare this with the original binary to check. if enabled bCheckCopy ; import_comparison "C:\\PROJECTS\\ZeusZ80\\WOFTM\\woftm.bin",$4000,$C000; endif ; ; Setup the emulation registers, so Zeus can emulate this code correctly Zeus_PC equ Entry ; Tell the emulator where to start ; These generate some output files ; If we want a fancy loader we need to load a loading screen ; import_bin "woftm.scr",$4000 ; Load a loading screen ; Now, also generate a tzx file using the loader (not test zeus) output_tzx "woftm.tzx","Cheesy","",AppFirst,AppLast-AppFirst,3,Entry,$06123456 ; A tzx file using the loader output_z80 "woftm.z80" ; A Z80 file for those who want one...