.nolist #include "ion.inc" #include "keypad.inc" .list #define score saferam1 #define shipx saferam1+2 #define shipy saferam1+3 #define shipvx saferam1+4 #define shipvy saferam1+5 #define fuel saferam1+6 #define temp saferam1+8 #define fall saferam1+10 .org $9D93 .db $BB,$6D ret jr nc,start title: .db "Lunar Lander v1.0",0 start: bcall(_clrscrnfull) bcall(_grbufclr) ld hl,0 ld (pencol),hl ld hl,title bcall(_vputs) ld hl,14*256 ld (pencol),hl ld hl,author bcall(_vputs) call waitandret bcall(_clrscrnfull) bcall(_grbufclr) ld hl,500 ld (fuel),hl ld a,48 ld (shipx),a ld a,10 ld (shipy),a xor a ld (shipvx),a ld (shipvy),a ld a,8 ld (fall),a ld hl,Terrain ld de,plotsscreen+480 ld bc,24*12 ldir set textWrite,(iy+sgrflags) set 0,(iy+60) ld bc,57 ld de,95*256+57 bcall(_darkline) ld hl,0 ld (pencol),hl ld hl,fuellabel bcall(_vputs) call xorShip call ionFastCopy GameLoop: ld a,(fall) inc a ld (fall),a cp 10 jr nz,skipinc xor a ld (fall),a ld hl,shipvy inc (hl) skipinc: ld a,$ff out (1),a ld a,Group1 out (1),a in a,(1) cp kLeft call z,MoveShipLeft cp kRight call z,MoveShipRight cp kUp call z,MoveShipUp cp kDown call z,MoveShipDown ld a,$ff out (1),a ld a,Group7 out (1),a in a,(1) cp kMode jp z,waitandret ld hl,$8000 ld d,h ld e,l ld bc,7000 ldir ld hl,$8000 ld d,h ld e,l ld bc,6000 ldir ld a,(shipx) or a jp z,OutOfBounds cp 95-8 jp nc,OutOfBounds ld b,8 pixelloop: push bc ld a,(shipy) add a,9 ld e,a ld a,(shipx) add a,b call ionGetPixel and (hl) jr nz,HitSomething pop bc djnz pixelloop call xorShip ld a,(shipvx) ld b,a ld a,(shipx) add a,b ld (shipx),a ld a,(shipvy) ld b,a ld a,(shipy) add a,b ld (shipy),a cp 8 jp c,OutOfBounds cp 64-9 jp nc,HitSomething call xorShip call ionFastCopy ld hl,(fuel) dec hl ld (fuel),hl ld a,h or l jr z,OutOfFuel ld hl,(fuel) bcall(_setxxxxop2) bcall(_op2toop1) ld hl,19 ld (pencol),hl bcall(_dispop1a) ld a,' ' bcall(_vputmap) jp GameLoop OutOfFuel: bcall(_clrscrnfull) res textWrite,(iy+sgrflags) ld hl,0 ld (pencol),hl ld hl,fuelgone bcall(_vputs) jp waitandret xorShip: ld ix,LunarModule ld a,(shipy) ld l,a ld a,(shipx) ld b,8 jp ionPutSprite HitSomething: pop bc xor a ld (temp),a ld b,8 pixelOKloop: push bc ld a,(shipy) add a,9 ld e,a ld a,(shipx) add a,b call ionGetPixel and (hl) jr z,notdark ld hl,temp inc (hl) notdark: pop bc djnz pixelOKloop ld a,(temp) cp 6 jr nc,landedok notoksopanic: bcall(_clrscrnfull) res textWrite,(iy+sgrflags) ld hl,0 ld (pencol),hl ld hl,crashed bcall(_vputs) jr waitandret landedok: ld a,(shipvy) cp 3 jr nc,notoksopanic bcall(_clrscrnfull) res textWrite,(iy+sgrflags) ld hl,0 ld (pencol),hl ld hl,allok bcall(_vputs) jr waitandret MoveShipLeft: ld a,(shipvx) cp 1 jr z,alreadyleft ld a,-1 ld (shipvx),a ret alreadyleft: xor a ld (shipvx),a ret MoveShipRight: ld a,(shipvx) cp -1 jr z,alreadyleft ld a,1 ld (shipvx),a ret MoveShipUp: ld hl,shipvy dec (hl) ret MoveShipDown: ld hl,shipvy inc (hl) ret OutOfBounds: bcall(_clrscrnfull) res textWrite,(iy+sgrflags) ld hl,0 ld (pencol),hl ld hl,nobounds bcall(_vputs) ld hl,7*256 ld (pencol),hl ld hl,nobounds2 bcall(_vputs) jr waitandret waitandret: res textWrite,(iy+sgrflags) ld hl,57*256 ld (pencol),hl ld hl,presskey bcall(_vputs) prewait: bcall(_getcsc) or a jr nz,prewait waitloop: ei \ halt bcall(_getcsc) or a jr z,waitloop res 0,(iy+60) ret LunarModule: .db %01111100 .db %10000010 .db %10000010 .db %01111100 .db %00111000 .db %00111000 .db %01000100 .db %11000110 Terrain: .db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,48,1,128,0,0,0,0 .db 0,0,0,0,1,112,3,128,0,0,0,128,0,0,0,0,3,112,3,192,0,0,0,128,0,0,0,0,7,240,7 .db 224,0,0,0,128,0,0,0,0,15,240,7,224,0,0,1,192,0,0,0,0,15,240,15,224,0,0,1,192,0,0 .db 0,0,15,240,15,224,0,0,1,192,0,0,0,0,31,240,15,224,0,0,1,224,0,0,0,0,31,240,31,224,0 .db 0,31,240,0,0,0,0,63,248,31,224,0,0,63,240,0,0,0,0,127,248,31,252,0,0,127,248,0,0,0,0 .db 127,248,31,252,0,1,255,248,0,0,224,0,255,248,63,254,0,3,255,248,0,1,240,0,255,248,63,254,15,227,255 .db 248,0,1,248,1,255,252,63,255,15,227,255,252,0,255,248,1,255,252,127,255,31,227,255,252,0,255,254,1,255,252 .db 127,255,31,231,255,252,1,255,255,131,255,252,127,255,159,231,255,255,3,255,255,195,255,252,127,255,159,199,255,255,131 .db 255,255,227,255,254,255,255,191,247,255,255,135,255,255,247,255,255,255,255,255,247,255,255,223,255,255,247,255,255,255,255 .db 255,255,255,255,255,255,255,255,255 fuellabel: .db "Fuel:",0 nobounds: .db "You went out of the",0 nobounds2: .db "landing zone!",0 presskey: .db "- Press any key -",0 allok: .db "You landed!",0 crashed: .db "You crashed!",0 fuelgone: .db "Out of fuel!",0 author: .db "By Michael Vincent",0 .end