; BLOCKDUDE BY BRANDON STERNER ; THIS IS A TCPA GAME ; ;I do not claim this to be good source. Actaully I think it is kind of messy. ;So read it if you like. Alter it if you want but do not distribute any ;variation of this game without my permission. And don't plan on getting ;permission. .NOLIST #define equ .equ #define EQU .equ #define end .end ; name location bytes and description #define mx apd_buf ;1 x coor of man #define my apd_buf+1 ;1 y coor of man #define x apd_buf+2 ;1 generic x #define y apd_buf+3 ;1 generic y #define curloc apd_buf+4 ;2 current location of compressed data #define height apd_buf+6 ;1 #define width apd_buf+7 ;1 #define guyloc apd_buf+8 ;2 location of guy in boardmap #define toploc apd_buf+10 ;2 location of the top left square in screen #define direction apd_buf+12 ;1 direction of man; 0 if left; not 0 if right #define carry apd_buf+13 ;1 if the dude is carrying something =1 if not =0 #define textloc apd_buf+14 ;2 bytes #define textxy apd_buf+16 ;2 bytes #define option apd_buf+18 ;1 byte #define options apd_buf+19 ;1 byte #define mode apd_buf+20 ;1 byte flag; demo(1) or play(0) mode #define counter apd_buf+21 ;1 byte timing moves #define mask apd_buf+22 ;1 mask for decompressing #define password apd_buf+23 ;4 3 bytes will be chars the last being the zero terminated string #define byte apd_buf+27 ;6 a clear buffer #define level apd_buf+33 ;1 the # of the level you are on #define secbuf apd_buf+34 ;4 buffer for secret presses #define levloc apd_buf+34+4 ;2 location of the current level #define passloc apd_buf+36+4 ;2 location in passbuff #define passbuff apd_buf+38+4 ;3 an inputted password #define char apd_buf+41+4 ;1 current char# in the inout routine #define page apd_buf+46 ;1 page you are on in the instructions #define boardmap apd_buf+50 ;651 bytes of data #include "crash82.inc" .LIST get_key = GET_KEY apd_buf = APD_BUF cgbuf = _GRBUFCPY_V textInverse = 3 textflags = $5 graph_mem = GRAPH_MEM PLOTSSCREEN = GRAPH_MEM plotsscreen = GRAPH_MEM textwrite EQU 7 sgrflags EQU 20 gbuf = GRAPH_MEM _divHLbyA = $00A3 pencol = GRAF_CURS _vputmap = M_CHARPUT _vputs = D_ZM_STR .org START_ADDR .db "Block Dude - TCPA",0 ROM_CALL(CLEARLCD) ld a,(INT_STATE) or a jr z,prog_start ld hl,0 ld ($800C),hl ld hl,Text ROM_CALL(D_ZT_STR) WaitKey: call GET_KEY cp $36 jr nz,WaitKey ret Text: .db "Please disable Interrupts",0 prog_start: ld hl,password ld (hl),0 ld de,password+1 ld bc,14 ldir ;needed zeros for byte,password, and level call erasescreen set 1,(iy+$05) ;underline set textwrite,(iy+sgrflags) ;to graphbuffer call loaddemo ROM_CALL(cgbuf) ld hl,endtxt ld de,57*256+5 ld a,4 call choosemode xor a ld (mode),a ld a,(option) cp 4 jp z,new cp 3 jr z,enterpass res 1,(iy+$05) ;underline res textwrite,(iy+sgrflags) ;to graphbuffer res textInverse,(iy+textflags); dec a ret z ;exit loadhelp: res textwrite,(iy+sgrflags) call erasescreen ROM_CALL(cgbuf) ld hl,instructions ld a,1 ld (page),a loadhelp2: ld a,0 ld (x),a ld (y),a ld b,10 loadhelp3: push bc ld de,(x) ld (pencol),de ROM_CALL(_vputs) ld a,(y) add a,6 ld (y),a pop bc djnz loadhelp3 push hl call wait ROM_CALL(cgbuf) pop hl ld a,(page) inc a ld (page),a cp 3 jr nz,loadhelp2 set textwrite,(iy+sgrflags) jp prog_start enterpass: call box ld hl,please ld de,256*24+28 ld (pencol),de ROM_CALL(_vputs) ld de,256*31+26 ld (pencol),de ROM_CALL(_vputs) ROM_CALL(cgbuf) ld bc,256*38+42 res textwrite,(iy+sgrflags) call input set textwrite,(iy+sgrflags) ld hl,level1-1 ld (curloc),hl xor a ld (level),a checkpass: ld hl,(curloc) ld (levloc),hl ld ix,passbuff-1 ld c,3 checkpass2: inc hl inc ix ld a,(hl) ld b,a ld a,(ix) cp b jr nz,nextcheck dec c jr nz,checkpass2 ld hl,(levloc) ld (curloc),hl jr setuplevel ;found level nextcheck: ld hl,(levloc) ld bc,4 add hl,bc ld (curloc),hl call erasemap ld a,(level) inc a ld (level),a cp 11 jr nz,checkpass new: xor a ld (level),a ld hl,level1-1 ;beginning of compressed data ld (curloc),hl setuplevel: ld a,(level) inc a ld (level),a cp 12 jp z,message2 ld hl,(curloc) ld (levloc),hl ;in case you want to restart level inc hl ;if we are on a level>1 then we just decompressed this byte so we need to increment ld de,password ld bc,3 ldir ld (curloc),hl call erasemap call box ld hl,leveltxt ld de,27*256+27 ;y,x ld (pencol),de ROM_CALL(_vputs) ld a,(level) ld l,a ld h,0 call disphl ld hl,passtxt ld de,36*256+27 ;y,x ld (pencol),de ROM_CALL(_vputs) ld hl,password ROM_CALL(_vputs) ROM_CALL(cgbuf) call get2nd call dispall main: ROM_CALL(cgbuf) ;check if clear was pressed ld b,0fdh call Direct_Input cp %10111111 jp z,message1 ld b,0bfh call Direct_Input ;check if 2nd was pressed cp %11011111 jr z,scan ld b,0FEh call Direct_Input cp %11110111 call z,up cp %11111110 call z,down cp %11111101 call z,left cp %11111011 call z,right jr main scan: ld hl,(toploc) push hl scan2: halt ld b,0FEh call Direct_Input cp %11110111 call z,checkup2 cp %11111110 call z,checkdown2 cp %11111101 call z,checkleft2 cp %11111011 call z,checkright2 call dispall ROM_CALL(cgbuf) halt ld b,0bfh call Direct_Input ;check if 2nd was pressed cp %11011111 jr z,scan2 pop hl ld (toploc),hl call dispall jr main Direct_Input: ld a,0ffh out (1),a ld a,b out (1),a in a,(1) ret left: ld ix,(guyloc) ld a,(ix-1) cp 3 jp z,nextlevel or a jr nz,left4 ;can't walk through a wall you idiot! ld a,(carry) or a jr z,left3 ld a,(ix-32) or a jr z,left2 ld (ix),2 xor a ld (ix-31),a ld (carry),a jr left31 left2: ld (ix-31),a ld (ix-32),2 left3: ld (ix),0 left31: dec ix left4: ld (ix),4 ld (guyloc),ix xor a ld (direction),a call checkleft call checkfall jp dispall right: ld ix,(guyloc) ld a,(ix+1) cp 3 jp z,nextlevel or a jr nz,right4 ;can't walk through a wall you idiot! ld a,(carry) or a jr z,right3 ;no carry ld a,(ix-30) or a jr z,right2 ld (ix),2 xor a ld (ix-31),a ld (carry),a jr right31 right2: ld (ix-31),a ld (ix-30),2 right3: ld (ix),0 right31: inc ix right4: ld (ix),5 ld (guyloc),ix ld a,1 ld (direction),a call checkright call checkfall jp dispall up: ld ix,(guyloc) ld a,(ix-31) cp 1 ret z ;you can't go up, there is brick above you ld a,(direction) or a jr nz,upright upleft: ld a,(ix-1) or a ret z ;bozo there's nothing to climb:) cp 3 jp z,nextlevel ld a,(ix-32) cp 3 jp z,nextlevel or a ret nz ;its too tall ld a,(carry) or a jr z,upleft2 ld a,(ix-63) or a ret nz ;there is something on top of the empty space you're trying to move into ld (ix-31),a ;erase current block carried ld (ix-63),2 ;put up where you will be upleft2: ld (ix),a ld de,-32 add ix,de ld (ix),4 ld (guyloc),ix xor a ld (direction),a call checkleft call checkup jp dispall upright: ld a,(ix+1) or a ret z ;bozo there's nothing to climb:) cp 3 jp z,nextlevel ld a,(ix-30) cp 3 jp z,nextlevel or a ret nz ;its too tall ld a,(carry) or a jr z,upright2 ld a,(ix-61) or a ret nz ld (ix-31),a ld (ix-61),2 upright2: ld (ix),a ld de,-30 add ix,de ld (ix),5 ld (guyloc),ix ld a,1 ld (direction),a call checkright call checkup jp dispall down: ;pick up/put down ld ix,(guyloc) ld a,(carry) or a jr nz,putdown ld a,(ix-31) or a ret nz ;there is something over your head ld a,(direction) or a jr nz,pickupr ld a,(ix-1) cp 2 ret nz ;yes you're still stupid, you can't pick it up(if there was anything there in the first place) ld a,(ix-32) or a ret nz ;can't pick up something if something is on top of it ld a,2 ld (carry),a ld (ix-1),0 ld (ix-31),a call dispall ld c,1 jp nodkey pickupr: ld a,(ix+1) cp 2 ret nz ;yes you're still stupid, you can't pick it up(if there was anything there in the first place) ld a,(ix-30) or a ret nz ;can't pick up something if something is on top of it ld (ix+1),a ld a,2 ld (carry),a ld (ix-31),a call dispall jp nodkey putdown: ld a,(direction) rla ld e,a ld d,0 dec de add ix,de ;either ix-1 or ix+1 ld de,-31 add ix,de ;now we have the blocks location left or right one ld a,(ix) or a ret nz ;something is in the way putdown2: ld de,31 add ix,de ld a,(ix) or a jr z,putdown2 putdown3: ld (ix-31),2 ld ix,(guyloc) xor a ld (ix-31),a ld (carry),a call dispall jp nodkey checkup: ld a,(my) cp 40 ret nc checkup2: ld hl,(toploc) ld de,-31 add hl,de ld a,(hl) inc a ret z ld (toploc),hl ret checkdown: ld a,(my) cp 24 ret c checkdown2: ld hl,(toploc) ld de,248 add hl,de ld a,(hl) inc a ret z ld de,-217 add hl,de ld (toploc),hl ret checkright: ld a,(mx) cp 56 ret c checkright2: ld ix,(toploc) ld a,(ix+12) inc a ret z inc ix ld (toploc),ix ret checkleft: ld a,(mx) cp 48 ret nc checkleft2: ld ix,(toploc) dec ix ld a,(ix) inc a ret z ld (toploc),ix ret checkfall: ld ix,(guyloc) ld a,(ix+31) or a jr nz,checkfall3 ld a,(my) add a,8 ld (my),a call checkdown ld (ix),0 ld de,31 add ix,de ld a,(direction) add a,4 ld (ix),a ld (guyloc),ix ld a,(carry) or a jr z,checkfall2 ld (ix-31),a ;i think it'll always be 2 ld (ix-62),0 checkfall2: jr checkfall checkfall3: cp 3 ret nz call dispall pop hl ;de increment stack by 2 jp nextlevel dispall: call erasescreen call drawtiles delay: ;or nokey ROM_CALL(cgbuf) ld c,10 delay2: halt ld b,0FEh call Direct_Input inc a jr z,delay3 dec c jr nz,delay2 delay3: ret getdata2: push bc push hl push de push ix ld c,0 getdata3: ld hl,(curloc) ld a,(mask) ld b,a ld a,(hl) and b cp b jr nz,gotbyte inc c call nec jr getdata3 gotbyte: call nec ld a,c pop ix pop de pop hl pop bc ret nec: ld a,(mask) rrca ld (mask),a cp 128 ret nz inc hl ld (curloc),hl ret interpret: or a ret z ld ix,brick-8 ld de,8 interpret2: add ix,de dec a jr nz,interpret2 ld a,(y) ld l,a ld a,(x) sprite: ld b,8 jp smsprt ;draw the tiles on screen from location (toploc) drawtiles: ld hl,(toploc) xor a ld (y),a drawtiles2: xor a ld (x),a drawtiles3: ld a,(hl) cp 4 jr c,drawtiles4 ld (guyloc),hl sub 4 ld (direction),a ld de,(x) ld (mx),de add a,4 drawtiles4: push hl call interpret pop hl inc hl ld a,(x) add a,8 ld (x),a cp 96 jr nz,drawtiles3 ld de,19 add hl,de ld a,(y) add a,8 ld (y),a cp 64 jr nz,drawtiles2 ret erasescreen: ld hl,plotsscreen ld (hl),0 ld de,plotsscreen+1 ld a,(mode) or a jr nz,part ld bc,767 ldir ret part: ld bc,671 ldir ld HL,titlescreen ld DE,plotsscreen call DispRLE ret wait: get2nd: call get_key cp $36 jr nz,get2nd ret nodkey: ld c,1 ;mask for nokey nokey: push bc ROM_CALL(cgbuf) pop bc nokey2: halt ld b,0FEh call Direct_Input and c cp c jr nz,nokey2 ret nextlevel: ld a,(mode) or a jr nz,loaddemo pop hl ;de increment stack by 2 jp setuplevel loaddemo: ld a,1 ld (mode),a ld a,20 ld (counter),a ld hl,level1+3 ;beginning of compressed data (skipping the password ld (curloc),hl call erasemap ld a,128 ld (mask),a ld hl,moves ld (curloc),hl ret ;-----Menu Routine------; ;as it is now, this is ; ;a sideways menu routine; ;to move use right and ; ;left. Use del to select; ;an option ; ;required vars: ; ;textloc ;2 bytes; ;textxy ;2 bytes; ;option ;1 byte ; ;options ;1 byte ; ;be sure to put option ; ;right before the the ; ;var options in memory ; ; ; ;input for menu: ; ;hl=start of text ; ;de=coors of menu ; ;a=options ; ; ; ;output: ; ;option= # of options-1st or 2nd or...; ;--------Code-----------; choosemode: ; ld (textloc),hl ;store the variables ld (textxy),de ; ld (options),a ; ld (option),a ;a=the num of options. If there were 5 then five would point to the first option writemenu: ld hl,(textloc) ld de,(textxy) ld (pencol),de ld a,(options) ;load a and b with the ld b,a ;number of option writemenu2: ; push bc ;save bc ld a,(option) ;see if option(the one that sould be highlighted) cp b ;= b(the current option being written jr nz,ivputs ; set textInverse,(iy+textflags); ROM_CALL(_vputs) ; res textInverse,(iy+textflags); writemenu3: ; pop bc ;recall bc djnz writemenu2 ; writemenu4: ;main loop for selecting ld a,(mode) or a call nz,demomode ROM_CALL(cgbuf) call get_key ; cp $36 ;2nd? ret z cp $02 ;left? jr z,leftmen ;then move left cp $03 ;right? jr z,rightmen ;then move right cp $30 jr nz,writemenu4 ld a,(mode) or a jr z,writemenu4 ld a,(option) dec a ld hl,secbuf ld d,0 ld e,a add hl,de ld (hl),1 ld hl,secbuf ld b,4 secloop: ld a,(hl) dec a jr nz,writemenu4 inc hl djnz secloop jp secretselect leftmen: ;move left in the menu ld de,(option) ;compare ld a,e ;option to cp d ;options jr z,writemenu4 ;if = then go back inc a ;increase the option pointer ld (option),a ; jr writemenu ;rewrite the menu rightmen: ; ld a,(option) ;compare cp 1 ;option # to 1 jr z,writemenu4 ;if = then go back dec a ;else decrease the option # ld (option),a ; jp writemenu ;rewrite menu ivputs: ;text w/ underline ROM_CALL(_vputs) ; jr writemenu3 ; ;-----------------------; secretselect: xor a ld (mode),a call box ld hl,select ld de,256*24+27 ld (pencol),de ROM_CALL(_vputs) ld de,256*31+38 ld (pencol),de ROM_CALL(_vputs) ROM_CALL(cgbuf) ld a,1 ld (level),a secretloop: ld de,256*38+46 ld (pencol),de ld a,(level) ld h,0 ld l,a call disphl ROM_CALL(cgbuf) secretl2: call get_key cp $04 jr z,sup cp $01 jr z,sdown cp $36 jr z,secl3 jr secretl2 sup: ld a,(level) dec a jr z,secretl2 ld (level),a jr secretloop sdown: ld a,(level) cp 11 jr z,secretl2 inc a ld (level),a jr secretloop secl3: ld hl,level1-1 ld (curloc),hl ld a,(level) ld b,a secl4: ld hl,(curloc) ld (levloc),hl ld de,4 add hl,de ld (curloc),hl push bc call erasemap pop bc djnz secl4 pop hl ;rid ourselves of a call jp restart erasemap: ld hl,boardmap ld (hl),$ff ld de,boardmap+1 ld bc,650 ldir call erasescreen ld a,128 ld (mask),a copydata: ld hl,(curloc) ld a,(hl) ld e,a inc hl ld a,(hl) ld d,a inc hl ld (toploc),de ld a,(hl) ld (height),a inc hl ld a,(hl) ld (width),a inc hl ld (curloc),hl ld hl,boardmap+32 copydata2: ld a,(width) ld b,a copydata3: call getdata2 ld (hl),a inc hl djnz copydata3 ld a,(width) ld b,a ld a,31 sub b ld d,0 ld e,a add hl,de ld a,(height) dec a ld (height),a jr nz,copydata2 xor a ld (carry),a jp drawtiles demomode: ld hl,counter dec (hl) ret nz ld (hl),20 call getdata2 cp 1 jp z,up cp 2 jp z,right cp 3 jp z,down cp 4 jp z,left ret ;=========================================================== ; RLE picture displayer v1.1 ; Decodes a RLE picture made by RLE2PIC ; 82/83 version ; ; written by David Phillips ; started: 8/19/98 ; last update: 1/12/98 ; ; input: HL = RLE encoded picture, DE = where to display ; output: 1024 byte decoded picture ; destroys: AF, BC, DE, HL ; current size: 32 bytes ;=========================================================== DispRLE: ld bc,264 ; we need to copy 768 bytes DispRLEL: ld a,(hl) ; get the next byte cp $91 ; is it a run? jr z,DispRLERun ; then we need to decode the run ldi ; copy the byte, and update counters DispRLEC: ld a,b ; check the low byte and or c ; the high byte for 0 jr nz,DispRLEL ; if not, then we're not done either ret ; if it's zero, we're done DispRLERun: inc hl ; move to the run value ld a,(hl) ; get the run value inc hl ; move to the run count push hl ; save source pointer ld h,(hl) ; get the run count ex de,hl ; swap source and destination pointers DispRLERunL: ld (hl),a ; copy the byte inc hl ; increase destination pointer dec bc ; decrease byte count dec d ; decrease run count jr nz,DispRLERunL ; if we're not done, then loop ex de,hl ; swap pointers back pop hl ; recover source pointer inc hl ; advance the source pointer jr DispRLEC ; check to see if we should loop box: ; START OF CODE By Chris Hiszpanski (Man in the Moon) ld a,31 ; Height + 1 again ld de,plotsscreen+195 ; Top left corner clearline: ; Clear the section saved ld hl,byte ld bc,6 ; ldir ; inc de ; Skip last four bytes inc de ; inc de ; Skip last four bytes inc de ; inc de ; inc de ; dec a ; or a ; jr nz,clearline ; line: ld hl,graph_mem+195 ; Top left corner ld a,255 ld b,6 line1: ld (hl),a inc hl djnz line1 ld hl,graph_mem+555 ld b,6 line2: ld (hl),a inc hl djnz line2 ld a,%10000000 ld hl,graph_mem+207 ld de,12 ld b,29 line3: ld (hl),a add hl,de djnz line3 ld a,%00000001 ld hl,graph_mem+212 ld de,12 ld b,29 line4: ld (hl),a add hl,de djnz line4 ;put title in ld hl,description ld de,17*256+25 ld (pencol),de set textInverse,(iy+textflags) ROM_CALL(_vputs) res textInverse,(iy+textflags) ;end of title ret disphl: ROM_CALL($359A) ROM_CALL($19F5) ROM_CALL($2E46) .dw $6CA4 .db $04 ret message2: call box ld hl,endmess ld de,24*256+32 ld (pencol),de ROM_CALL(_vputs) ld de,30*256+29 ld (pencol),de ROM_CALL(_vputs) ld de,36*256+31 ld (pencol),de ROM_CALL(_vputs) ROM_CALL(cgbuf) call wait jp prog_start message1: call box ld hl,joke ld de,27*256+28 ld (pencol),de ROM_CALL(_vputs) ld hl,mess1txt ld de,36*256+27 ld a,2 call choosemode ld a,(option) dec a jp z,prog_start ;restart level restart: ld hl,(levloc) ld (curloc),hl ld hl,level dec (hl) jp setuplevel ;input: ;bc= coors input: ld hl,passbuff ld (passloc),hl ld (textxy),bc ld (pencol),bc ld a,3 ld (option),a alphastart: ld a,'A' ld (char),a placechar: push af ld hl,(textxy) push hl ld (pencol),hl ld hl,blanks ROM_CALL(_vputs) pop hl ld (pencol),hl pop af ROM_CALL(_vputmap) inputmain: call get_key ; cp $04 ;up? jr z,inputup cp $01 ;down? jr z,inputdown cp $36 ;2nd? jr z,nextchar ; jr inputmain inputdown: ld a,(char) cp 'Z' jr z,inputdown2 cp 'z' jr z,alphastart inc a ld (char),a jr placechar inputdown2: ld a,'a' ld (char),a jr placechar inputup: ld a,(char) cp 'A' jr z,lalphaend cp 'a' jr z,alphaend dec a ld (char),a jr placechar alphaend: ld a,'Z' ld (char),a jr placechar lalphaend: ld a,'z' ld (char),a jr placechar nextchar: ld a,(char) ld hl,(passloc) ld (hl),a inc hl ld (passloc),hl ld hl,(pencol) ld (textxy),hl ld hl,option dec (hl) ret z jr placechar brick: .db %11111011 .db %11111011 .db %00000000 .db %11111110 .db %11111110 .db %00000000 .db %11111011 .db %11111011 block: ;varible sized block .db %11111111 .db %10000001 .db %10000001 .db %10000001 .db %10000001 .db %10000001 .db %10000001 .db %11111111 door: .db %01111110 .db %01000010 .db %01000010 .db %01000010 .db %01000110 .db %01000010 .db %01000010 .db %01111110 manl: .db %00011100 .db %01111110 .db %00010010 .db %00100010 .db %00010100 .db %00101010 .db %00001000 .db %00110110 manr: .db %00111000 .db %01111110 .db %01001000 .db %01000100 .db %00101000 .db %01010100 .db %00010000 .db %01101100 titlescreen: ;rle .db $91,$00,$09,$40,$91,$00,$04,$3f,$b0,$00,$08,$1f .db $f0,$00,$40,$91,$00,$04,$0c,$90,$00,$08,$08,$18 .db $00,$40,$91,$00,$04,$09,$10,$00,$10,$08,$08,$00 .db $40,$91,$00,$04,$16,$20,$e3,$96,$10,$0e,$21,$c6 .db $91,$00,$04,$1f,$a3,$2c,$28,$10,$0a,$46,$9a,$91 .db $00,$04,$20,$a4,$30,$30,$20,$14,$59,$14,$91,$00 .db $04,$20,$a4,$50,$50,$20,$24,$91,$91,$01,$28,$91 .db $00,$04,$21,$44,$92,$48,$20,$45,$93,$20,$91,$00 .db $04,$3e,$47,$1c,$4c,$3f,$86,$5d,$b8,$91,$00,$07 .db $40,$00,$00,$01,$91,$00,$06,$04,$39,$b1,$06,$4d .db $b8,$91,$00,$06,$0a,$12,$2a,$88,$aa,$a0,$91,$00 .db $06,$0e,$12,$33,$8a,$ea,$b0,$91,$00,$06,$0a,$12 .db $22,$8a,$aa,$a0,$91,$00,$06,$0a,$11,$a2,$86,$a8 .db $b8,$91,$00,$12,$32,$8a,$4c,$ee,$aa,$4e,$91,$00 .db $06,$2a,$8a,$aa,$48,$aa,$c8,$91,$00,$06,$31,$0a .db $ac,$4c,$44,$4c,$91,$00,$06,$29,$0a,$aa,$48,$aa .db $42,$91,$00,$06,$31,$04,$4a,$4e,$aa,$ec,$91,$00 .db $03 ; Total compression: 264 bytes compressed to 205 (22% smaller) ;levels are compressed huffman meathod level1: .db "tcP" ;password .dw boardmap+40 ;screen starting position .db 8 ;height .db 20 ;widht .db 128,0,10,0,0,40,0,0,160,0,2,132,2,2,184,132,201,159,21 .db 85,85,85,85,80,0,0,0 ;27 bytes of blocks level2: .db "ARo" .dw boardmap+104 ;screen starting position .db 10 ;height .db 22 ;widht .db %01000001,%01000000,%00010100,%00001000,%00000000,%00000010 .db %00010100,%00000000,%00000000,%10001011,%10000000,%00000000 .db %00001001,%01000000,%00000000,%00000010,%01000000,%00000010 .db %00110000,%01001000,%00000000,%01011001,%10110111,%10001001 .db %01010101,%00001010,%10101010,%10101010,%10101000,%00010001 .db %10100000,%00000000,%00000101,%01010100,%00000000,%00000000 ;36 bytes of blocks level3: .db "CKs" .dw boardmap+97 .db 11 ;height .db 19 ;width .db %01000000,%00000000,%00000100,%00101010,%10101010,%10101010 .db %10100100,%10010000,%00000000,%00101000,%10000000,%00000000 .db %10100000,%00000000,%00001101,%01000000,%00000000,%00110110 .db %10100101,%01000001,%11100001,%01100101,%00100100,%10000010 .db %00101010,%10100010,%01001011,%01100101,%00010000,%00010111 .db %01001010,%10101010,%01010000,%00010101,%00101000,%01010100 .db %00000000 level4: .db "daN" .dw boardmap+198 .db 16 .db 24 .db %00000000,%00000000,%00100000,%00000000,%00000000,%00100100,%00000000,%00100000 .db %00001000,%01000000,%00001001,%00000001,%00000010,%00000101,%01000010,%00001000 .db %00000100,%00100000,%00010001,%00000000,%00100100,%00000000,%10100000,%00000010 .db %01000000,%00000000,%00000001,%10100100,%00000000,%00000000,%00110110,%10010000 .db %00000000,%00001111,%00001010,%10101000,%00100000,%00000010,%00010001,%01110000 .db %01001100,%00000001,%01010101,%00010101,%01010010,%01100001,%10001010,%10000000 .db %00001001,%00110010,%01011001,%00000000,%00000100,%10101010,%10101010,%10100000 .db %00000000,%10101000,%00000000,%0000000 level5: .db "BAH" .dw boardmap+163 .db 14 .db 22 .db %00000101,%01000001,%01010101,%01010101,%00010101,%01000010,%10101000,%00000001 .db %01000000,%00000000,%00000001,%01000000,%00000000,%00000001,%01000000,%00000000 .db %00000001,%01000000,%10000000,%00000000,%10100000,%01000000,%00000000,%01010000 .db %00101101,%10110110,%00000000,%00101011,%10000101,%01010101,%01011110,%00000000 .db %10101001,%01010000,%00101001,%00000011,%01001001,%00000000,%01001010,%00011011 .db %01001001,%00000000,%01001010,%00110110,%11010010,%10100000,%00001001,%01010101 .db %01010100,%00000000,%00010101,%00000000,%0 level6: .db "Ion" .dw boardmap+134 .db 13 .db 21 .db %01010100,%00000000,%00001010,%10100100,%01010101,%01010101,%01010101,%01000010 .db %10100000,%00000000,%00000010,%10111000,%00000000,%00000000,%10101000,%00000000 .db %00000000,%10010000,%00000000,%00000110,%11010010,%11011000,%00000010,%00110001 .db %01010010,%11011011,%00000000,%10111101,%10110110,%01000010,%11011011,%01100000 .db %00101010,%10100100,%00101010,%10100000,%10101000,%01010100,%00000010,%00011010 .db %00000000,%00000001,%01001010,%10000000,%00000000,%00101010,%00000000,%0000 level7: .db "Twe" .dw boardmap+198 .db 14 .db 24 .db %00100001,%01010101,%00001010,%00010101,%00001001,%00100000,%01001000,%10010000 .db %10001000,%10100000,%00101000,%01010000,%01001000,%01000000,%00100000,%10000010 .db %01000000,%00000000,%00000001,%10100100,%00000000,%00000000,%00011010,%10100000 .db %00000000,%00000001,%10110101,%01110000,%11000000,%00000000,%00101010,%10100001 .db %00110000,%00100000,%10100100,%00100001,%00110000,%01010011,%00111101,%01010100 .db %00101000,%10011011,%01100010,%10011011,%01101000,%00000100,%01010101,%01010010 .db %10101010,%10100000,%00010100,%10000010,%10100000,%00000000,%00101010,%00000000 .db %00000000,%00 level8: .db "nTy" .dw boardmap+326 .db 17 .db 27 .db %01010100,%00000010,%10101000,%01010101,%01010100,%01000010,%00000100,%00010010 .db %00000001,%00100000,%10000100,%00001010,%00000000,%01010110,%00001010,%10000010 .db %01000000,%10101000,%10101101,%10000000,%00010100,%00000101,%00100010,%10101010 .db %00000001,%01000000,%00000101,%11001000,%01010000,%00000000,%01010000,%01010010 .db %00100000,%11001000,%00001000,%10000000,%10001000,%00110100,%10000010,%00010000 .db %00010010,%00010101,%00001000,%00100010,%00000110,%10010000,%00010010,%00000010 .db %10000001,%10110101,%00000000,%01000000,%00000010,%10101010,%10100000,%00000000 .db %11000000,%00000001,%01000001,%10000000,%10101000,%00000000,%11010100,%00101010 .db %00000000,%00000000,%01101101,%01000000,%00011000,%00000110,%00111100,%01101101 .db %10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010 level9: .db "iRC" .dw boardmap+132 .db 16 .db 20 .db %00000000,%10101000,%00000000,%00000010,%00010000,%00000000,%00010000,%00100010 .db %10101010,%00000100,%00000010,%10000010,%00001000,%00011000,%00000010,%00010000 .db %00011011,%00000001,%10100010,%00000001,%01010000,%01101101,%00100000,%00000000 .db %11110010,%10101010,%00000000,%00000110,%00001010,%11100000,%00000001,%01010000 .db %10101000,%00101000,%01000000,%01101001,%00000101,%01100010,%10000101,%01010010 .db %00001010,%10101010,%10001010,%00001010,%10001000,%00010010,%10000000,%01001010 .db %00000101,%01000000,%00010101,%00000000,%0000000 level10: .db "JmK" .dw boardmap+258 .db 19 .db 27 .db %00010101,%01010101,%01010101,%01010101,%01010101,%01010000,%01010000,%00000000 .db %10000000,%00010001,%01010101,%10000000,%01101101,%01100001,%10110110,%01101010 .db %01000101,%00010000,%10101010,%10001101,%01010010,%10010100,%00100010,%10000000 .db %00101010,%01010100,%01010000,%10100010,%10110110,%11011000,%00000000,%00101011 .db %10000000,%01010101,%01010100,%00000000,%01010100,%00000001,%00001010,%10000000 .db %00101001,%00000011,%00001001,%00010100,%00000001,%00100000,%01000001,%00000101 .db %00000000,%10010101,%01000101,%00000000,%00000010,%10101010,%00010101,%01010000 .db %00011110,%00000000,%00010000,%10000000,%00001000,%00000000,%01000010,%00000000 .db %01010000,%01010101,%01010101,%00001000,%00000010,%10000000,%00000100,%00010000 .db %00000001,%10000000,%00011010,%00001011,%00000101,%01010101,%01010101,%01000011 .db %01101000,%00101101,%10001010,%00000000,%01010011,%01101101,%00000101,%01010101 .db %00000000,%00001010,%10101010,%0 level11: .db "wTF" .dw boardmap+39 .db 19 .db 29 .db %10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10101010,%10100010 .db %00010000,%00000000,%00000000,%01010000,%00110101,%10110000,%00000000,%01010101 .db %01001010,%11000010,%10100110,%10100000,%01100010,%10001110,%01001010,%11011000 .db %00101010,%00011110,%00110000,%00001001,%00101010,%10001101,%10100000,%01001100 .db %00000000,%01001010,%00010101,%01000000,%01000101,%01000010,%10100010,%10110000 .db %00000000,%01001000,%00001000,%11001010,%11011000,%00000101,%01001001,%01100000 .db %10001010,%10101010,%10100110,%00010101,%00010010,%10110001,%00110010,%00101000 .db %00000000,%01100101,%01000110,%10000100,%00101000,%01100000,%01101100,%10000101 .db %01010000,%00001010,%00001010,%10101010,%10101000,%00000010,%10101010,%01010000 .db %00000000,%00011000,%01101010,%00001001,%01010101,%00000000,%00001100,%00100000 .db %11011010,%01010110,%10100001,%00000100,%00000000,%01010101,%00101010,%11010101 .db %00100000,%10000110,%11011001,%10000000,%01010110,%10110101,%10101000,%00100000 .db %00001101,%10110000,%01010101,%01010101,%01010101,%01010101,%01010101,%01010101 .db %01010101,%01010000 instructions: .db "The object of this game is",0 .db "to reach the door in each",0 .db "level. If you are unsure",0 .db "where it is you can hold 2nd",0 .db "down and use the arrow keys",0 .db "to scroll freely. You can",0 .db "only clinb one block at a time",0 .db "and lift only one block at a",0 .db "time. To lift up a block",0 .db "press down. To set it down",0 .db "press down again. CLEAR will",0 .db "give you the choice of",0 .db "restarting or quiting. There",0 .db "are 11 levels in this game.",0 .db "Please visit our web page at",0 .db "tcpa.calc.org for additional",0 .db "information. Thanks to all",0 .db "the beta testers and the ACZ",0 .db "for all there useful utilities",0 .db " ",0 moves: ;for demo are compressed huffman style .db %11110111,%01111011,%10101011,%11010111,%10101101,%01101111 .db %01110111,%10111101,%01111011,%11011101,%01011110,%11110111 .db %10000000 endtxt: .db " New ",0," Password ",0," Help ",0," Quit ",0 mess1txt: .db " Restart ",0," Quit ",0 leveltxt: .db "Level: ",0 passtxt: .db "Pass: ",0 please: .db "Please Enter",0 .db "The Password",0 joke: .db "Too hard? :)",0 select: .db "Secret Level",0 .db "Select",0 titletxt: .db "Block Dude - TCPA",0 description: .db " Block Dude ",0 blanks: .db " ",0 endmess: .db "Well done!",0 .db "You beat all",0 .db "the levels.",0 ;---------= XOR a sprite =--------- ; b=size of sprite ; l=yc ; a=xc ; ix holds pointer smsprt: ld e,l ld h,$00 ld d,h add hl,de add hl,de add hl,hl add hl,hl ld e,a and $07 ld c,a srl e srl e srl e add hl,de ld de,GRAPH_MEM add hl,de sl1: ld d,(ix) ld e,$00 ld a,c or a jr z,sl3 sl2: srl d rr e dec a jr nz,sl2 sl3: ld a,(hl) xor d ld (hl),a inc hl ld a,(hl) xor e ld (hl),a ld de,$0B add hl,de inc ix djnz sl1 ret .end END