; *********************************************************************** ; * ; * P A C M A N 9 8 ; * ; * Programmed by Patrick Davidson ; * ; *********************************************************************** NUM_LEVELS =3 ; -------------- PROGRAM HEADER -------------------------------------------- .include "rigel.h" .org PROG_START @title(Pac-Man 98 v6.2 by PAD) ; -------------- VARIABLE ADDRESSES ---------------------------------------- DELC_LEN =$800F DELC_MEM =DELC_LEN+1 lives =DELC_MEM x =DELC_MEM+1 y =DELC_MEM+2 xv =DELC_MEM+3 yv =DELC_MEM+4 level =DELC_MEM+5 image =DELC_MEM+6 pills =DELC_MEM+8 enemies =DELC_MEM+9 jp2nd =DELC_MEM+29 nxv =DELC_MEM+30 nyv =DELC_MEM+31 countdown =DELC_MEM+32 score =DELC_MEM+34 scrlstart =DELC_MEM+36 scrlpos =DELC_MEM+38 temp =DELC_MEM+40 ; -------------- INITIALIZATION CODE --------------------------------------- ld (end_game+1),sp ld hl,$85c1 ld de,$80df ld bc,128 ldir ld sp,DELC_MEM+98 ld de,TEXT_MEM2+167 ld hl,$FBFF ld bc,168 lddr ROM_CALL(CLEARLCD) ld (iy+13),0 ld (iy+5),2 ld a,(CONTRAST) cp $1f jr z,ok1 inc a ok1: out (2),a ld a,1 ld (RIGEL_BITS),a xor a ld (DELC_LEN),a ld b,96 ld a,32 ld ix,$8641 pcl: ld hl,0 ld ($800c),hl push af push bc ROM_CALL(TX_CHARPUT) ld hl,$fc00 ld b,8 ld de,16 il2: ld a,(hl) rlca or (hl) ld (ix),a add hl,de inc ix djnz il2 pop bc pop af inc a djnz pcl call display_ttl_scr push af ld a,(saved_flag) or a jr nz,now pop af continue_game: ld de,default_enemy_data ld hl,500 cp K_F4 jr nz,nocheat ld de,easy_enemy_data ld hl,0 nocheat: ld (enemy_setup+1),de ld (score),hl now: call play_game ld a,%111111 out (1),a in a,(1) sla a jp nc,save_the_game call do_scores ROM_CALL(CLEARLCD) ld ($800c),de ld hl,hstitle ROM_CALL(D_ZT_STR) ld hl,$1001 ld ($800c),hl ld de,hsdata ld b,7 high_display_loop: ;Display high scores ld a,(de) ld l,a inc de ld a,(de) ld h,a inc de push de ROM_CALL(D_HL_DECI) ld hl,CURSOR_ROW dec (hl) pop hl ROM_CALL(D_ZT_STR) ex de,hl ld hl,CURSOR_ROW inc (hl) djnz high_display_loop loop_wk: call GET_KEY or a jr z,loop_wk ld a,(CONTRAST) out (2),a jr end_game save_the_game: ld de,saved_flag ld a,3 ld (de),a ld (RIGEL_BITS),a inc de ld hl,lives ld bc,35 ldir ld a,(CONTRAST) out (2),a end_game: ld sp,0 ld de,$85c1 ld hl,$80df ld bc,128 ldir ld hl,TEXT_MEM2+167 ld de,$FBFF ld bc,168 lddr ret ; -------------- SCORING --------------------------------------------------- do_scores: ld hl,lowest ;See if ya got a hi-score call LD_HL_MHL ld de,(score) call CP_HL_DE ret nc ROM_CALL(CLEARLCD) ld ($800c),de ld hl,hi_score_str ROM_CALL(D_ZT_STR) ld hl,lowest+2 ld (temp),hl ld b,16 ld c,32 space_loop: ld (hl),c inc hl djnz space_loop ld ix,(temp) ld b,0 enter_name_loop: call GET_KEY cp 0 jr z,enter_name_loop cp K_DEL jr z,backup sub 9 jr z,nomore jp m,enter_name_loop dec a ld c,a ld a,15 cp b jr z,enter_name_loop ld hl,chartable ld e,c ld d,0 add hl,de ld a,(hl) ld (ix),a ROM_CALL(TX_CHARPUT) inc b inc ix jr enter_name_loop backup: dec b ld a,255 cp b jr z,too_far dec ix ld (ix),32 ld hl,$800d dec (hl) ld a,32 ROM_CALL(TX_CHARPUT) dec (hl) jr enter_name_loop too_far: inc b jr enter_name_loop nomore: ld hl,(score) ld (lowest),hl ld ix,lowest ld b,6 sort_scores: ld e,(ix) ld d,(ix+1) ld l,(ix-19) ld h,(ix-18) call CP_HL_DE ret nc push bc ld b,19 ld d,0 exg_loop:ld e,(ix) ld c,(ix-19) ld (ix),c ld (ix-19),e inc ix djnz exg_loop ld de,-38 add ix,de pop bc djnz sort_scores ret ; -------------- TITLE SCREEN ---------------------------------------------- display_ttl_scr: ROM_CALL(CLEARLCD) ld ($800c),de ld hl,title ROM_CALL(D_ZT_STR) ld ix,$800c inc (ix) ROM_CALL(D_ZT_STR) inc (ix) ROM_CALL(D_ZT_STR) ld hl,0 ld (scrlpos),hl ld hl,$0806 ld ($8941),hl intro_loop: ld hl,$89c1 ld b,128 lclearscrl: ld (hl),0 inc hl djnz lclearscrl ld hl,(scrlpos) inc hl ld de,(scrl_end-scrltext)*8 call CP_HL_DE jr nz,okscrl ld hl,0 okscrl: ld (scrlpos),hl ld a,8 call UNPACK_HL+2 cpl and 7 ld de,scrltext add hl,de ld b,15 scroll_loop: push bc push hl push af ld a,(hl) sub 32 ld l,a ld h,0 add hl,hl add hl,hl add hl,hl ld de,$8641 add hl,de ld de,$8943 ld bc,8 ldir pop af push af ld d,a ld e,56 ld ix,$8941 call drw_spr pop af pop hl pop bc add a,8 inc hl djnz scroll_loop ld de,15 ld hl,$89c1 ld b,8 ld a,255 loop_blox: ld (hl),a add hl,de ld (hl),a inc hl djnz loop_blox dec hl ld de,$ffff ld bc,128 lddr call GET_KEY or a jr z,intro_loop ret ; -------------- THE ACTUAL GAME ------------------------------------------- restore: ld (hl),0 ld hl,image_left ld (image),hl ld hl,savedata ld de,lives ld bc,35 ldir jp main_loop play_game: set 0,(iy+3) ld hl,$fA80 ;Initialize block images ld (hl),0 ld de,$fa81 ld bc,383 ldir ld hl,8+$fa80 ;Draw tops ld de,16 ld b,24 ldrawtops: ld (hl),255 add hl,de djnz ldrawtops ld hl,39+$fa80 ;Draw bottoms ld de,8 ld b,6 ldrawbottom: push bc ld b,4 ldrawbottom2: ld (hl),255 add hl,de djnz ldrawbottom2 ld bc,32 add hl,bc pop bc djnz ldrawbottom ld hl,$fa80 ;Draw left sides ld de,16 ld b,12 ldrawleft: add hl,de push bc ld b,16 ldrawleft2: set 7,(hl) inc hl djnz ldrawleft2 pop bc djnz ldrawleft ld hl,$fa80 ;Draw right sides ld de,64 ld b,3 ldrawright: add hl,de push bc ld b,64 ldrawright2: set 0,(hl) inc hl djnz ldrawright2 pop bc djnz ldrawright ld hl,131+$fa80 ld de,7 ld b,16 ldrawspills: ld a,24 or (hl) ld (hl),a inc hl ld (hl),a add hl,de djnz ldrawspills ld hl,258+$fa80 ;Draw large pills ld de,5 ld b,16 ldrawlpills: ld a,24 or (hl) ld (hl),a or 36 inc hl ld (hl),a inc hl ld (hl),a inc hl and %11011011 ld (hl),a add hl,de djnz ldrawlpills ROM_CALL(CLEARLCD) ld hl,$1000 ld ($800c),hl ld hl,initialtemplate ROM_CALL(D_ZT_STR) ld de,$1003 ld ($800c),de ROM_CALL(D_ZT_STR) ld de,$1006 ld ($800c),de ROM_CALL(D_ZT_STR) ld hl,saved_flag ld a,(hl) or a jp nz,restore LD hl,lives ld (hl),9 ld a,1 ld (level),a level_start: call make_level call prepare_to_play_level main_loop: call render_background call do_you call do_enemies call display_stats call display_data call toggle_autopilot ld a,(pills) or a jr z,you_won ld a,%111111 out (1),a in a,(1) sla a ret nc sla a jr c,main_loop ret you_won: ld hl,level inc (hl) ld b,100 ld a,(lives) ld e,a ld d,0 ld hl,(score) loopis: add hl,de ld (score),hl push hl push de push bc call display_stats pop bc pop de pop hl djnz loopis ld a,(level) nlev: cp NUM_LEVELS+1 jr z,win call display_stats jr level_start win: ld hl,(score) ld de,1000 add hl,de ld (score),hl call display_stats ld b,3 loop_flickerw: push bc call display_data ld bc,0 lww1: dec bc ld a,b or c jr nz,lww1 ld hl,$0303 ld ($800c),hl ld hl,youwin ROM_CALL(D_ZT_STR) ld bc,0 lww2: dec bc ld a,b or c jr nz,lww2 pop bc djnz loop_flickerw ret youwin: .db "YOU WIN!!!!",0 ; -------------- DISPLAY STATUS INFORMATION -------------------------------- display_stats: ld hl,$1001 ld ($800c),hl ld hl,(score) ROM_CALL(D_HL_DECI) ld hl,$1004 ld ($800C),hl ld a,(lives) ld l,a ld h,0 ROM_CALL(D_HL_DECI) ld hl,$1007 ld ($800C),hl ld a,(level) ld l,a ld h,0 ROM_CALL(D_HL_DECI) ret ; -------------- RENDER THE BACKGROUND ------------------------------------- render_background: ld ix,$85c1 ld de,data ld b,12 line_loop: push bc ld b,12 blocks_loop: push bc ld bc,$fa80 ld a,(de) ld l,a inc de ld h,0 add hl,hl add hl,hl add hl,hl add hl,bc pop bc ld a,(hl) ld (ix),a inc hl ld a,(hl) ld (ix+12),a inc hl ld a,(hl) ld (ix+24),a inc hl ld a,(hl) ld (ix+36),a inc hl ld a,(hl) ld (ix+48),a inc hl ld a,(hl) ld (ix+60),a inc hl ld a,(hl) ld (ix+72),a inc hl ld a,(hl) ld (ix+84),a inc ix djnz blocks_loop ld bc,84 add ix,bc pop bc djnz line_loop ret ; -------------- COPY THE IMAGE TO THE SCREEN ------------------------------ top_of_buffer: ld de,384 add hl,de jr dispi display_data: ld hl,$85c1 ld a,(y) bit 6,a jr nz,top_of_buffer sub 32 jr z,dispi jp m,dispi ld b,a ld de,12 lfa: add hl,de djnz lfa dispi: ld de,$fc00 ld a,32 loop_copy_image: ld bc,12 ldir inc de inc de inc de inc de ld bc,12 ldir inc de inc de inc de inc de dec a jp nz,loop_copy_image ret ; -------------- SET UP A LEVEL -------------------------------------------- make_level: ld de,144 ld hl,level_maps-144 ld a,(level) ld b,a lfld: add hl,de djnz lfld ld bc,144 ld de,data ld b,144 ld c,0 loop_make_level_map: ld a,(hl) bit 4,a jr z,nph inc c nph: ld (de),A INC HL INC DE djnz loop_make_level_map ld a,c ld (pills),a ret prepare_to_play_level: call render_background call display_stats ld hl,image_right ld (image),hl ld hl,0 ld (x),hl ld (xv),hl ld (nxv),hl ld a,$5f ld (bitsmc+1),a ld b,3 loop_flicker: push bc call display_data ld bc,0 lw1: dec bc ld a,b or c jr nz,lw1 ld hl,$0303 ld ($800c),hl ld hl,getready ROM_CALL(D_ZT_STR) ld bc,0 lw2: dec bc ld a,b or c jr nz,lw2 pop bc djnz loop_flicker ld de,enemies enemy_setup: ld hl,default_enemy_data ld bc,20 ldir ret ; -------------- SPRITE RENDERING ROUTINE ---------------------------------- offsets_table: .db 128,64,32,16,8,4,2,1 drw_spr: ld a,d and 7 ld hl,offsets_table ld c,a ld b,0 add hl,bc ld a,(hl) ld (smc1+1),a ld hl,$8641 ;Calculate byte number ld a,e add a,a add a,a add a,a rl b add a,a rl b srl d srl d srl d or d ld c,a add hl,bc ld d,(ix) ld b,(ix+1) oloop: push bc ;Save # of rows push hl ;Save screen address ld b,d ;Load width ld c,(ix+2) ;Load one line of image inc ix smc1 ld a,1 ;Load pixel mask iloop: sla c ;Test leftmost pixel jr nc,noplot ;See if a plot is needed ld e,a ;OR pixel with screen or (hl) ld (hl),a ld a,e noplot: rrca jr nc,notedge ;Test if edge of byte reached inc hl ;Go to next byte notedge: djnz iloop pop hl ;Restore address ld bc,16 ;Go to next line add hl,bc pop bc ;Restore data djnz oloop ret drw_spr96: ld a,d and 7 ld hl,offsets_table ld c,a ld b,0 add hl,bc ld a,(hl) ld (_smc1+1),a ld hl,$85c1 ;Calculate byte number ld a,e add a,a add a,e rl b add a,a rl b add a,a rl b srl d srl d srl d add a,d jr nc,n1 inc b n1: ld c,a add hl,bc ld d,(ix) ld b,(ix+1) _oloop: push bc ;Save # of rows push hl ;Save screen address ld b,d ;Load width ld c,(ix+2) ;Load one line of image inc ix _smc1 ld a,1 ;Load pixel mask _iloop: sla c ;Test leftmost pixel jr nc,_noplot ;See if a plot is needed ld e,a ;OR pixel with screen or (hl) ld (hl),a ld a,e _noplot: rrca jr nc,_notedge ;Test if edge of byte reached inc hl ;Go to next byte _notedge:djnz _iloop pop hl ;Restore address ld bc,12 ;Go to next line add hl,bc pop bc ;Restore data djnz _oloop ret ; -------------- DO STUFF ABOUT YOU ---------------------------------------- do_you: ld ix,(image) ld hl,x ld d,(hl) inc hl ld e,(hl) call drw_spr96 ld hl,x ld a,(hl) inc hl inc hl add a,(hl) dec hl dec hl ld (hl),a inc hl ld b,a ld a,(hl) inc hl inc hl add a,(hl) ld (y),a or b and 7 jr nz,read_arrows ; -------------- POSSIBLY CHANGE YOUR MOVEMENT ------------------------------ autop: ld a,0 or a jr z,km ld hl,0 ld (nxv),hl km: call read_arrows ld hl,(nxv) ld (xv),hl ld hl,x ld c,(hl) ;C = X srl c ;C = X / 2 srl c ;C = X / 4 srl c ;C = X / 8 inc hl ;HL -> Y ld a,(hl) ;A = Y ld b,a ;B = Y srl a ;A = Y / 2 add a,b ;A = 12 * Y / 8 add a,c ;A = (X / 8) + (12 * Y / 8) ld hl,data ;HL -> MAP ld c,a ;C = (X / 8) + (12 * Y / 8) ld b,0 ;BC = (X / 8) + (12 * Y / 8) add hl,bc ;HL -> MAP + (X / 8) + (12 * Y / 8) ld a,(hl) bit 4,a jr z,nopill push hl ld hl,pills dec (hl) ld hl,(score) inc hl ld (score),hl pop hl nopill: bit 5,a jr z,nospill push af push hl ld hl,enemies ld de,5 ld B,4 lse: ld a,(hl) cp 3 jr nz,cste ld (hl),6 cste: add hl,de djnz lse ld a,160 ld (countdown),a ld hl,(score) add hl,de ld (score),hl pop hl pop af nop nospill: and 15 ld (hl),a bitsmc: bit 3,a ret z ld hl,0 ld (xv),hl ret read_arrows: LD A,%1111110 ld ix,bitsmc+1 OUT (1),a in a,(1) srl a jr c,no_down ld hl,image_down ld (image),hl ld hl,$0100 ld (nxv),hl ld (ix),$57 no_down: srl a jr c,no_left ld hl,image_left ld (image),hl ld hl,$00ff ld (nxv),hl ld (ix),$4f no_left: srl a jr c,no_right ld hl,image_right ld (image),hl ld hl,$0001 ld (nxv),hl ld (ix),$5f no_right:srl a ret c ld hl,image_up ld (image),hl ld hl,$ff00 ld (nxv),hl ld (ix),$47 ret ; -------------- TOGGLE AUTOPILOT ------------------------------------------ toggle_autopilot: ld a,%111111 out (1),a ld hl,jp2nd in a,(1) bit 5,a jr nz,notpressed ld a,(hl) or a ret nz ld a,(autop+1) cpl ld (autop+1),a ret notpressed: ld (hl),0 ret ; -------------- STUFF RELATED TO ENEMIES ---------------------------------- do_enemies: ld a,(countdown) or a jr z,ncd dec a ld (countdown),a ncd: ld hl,enemies ld b,4 enemy_loop: push bc push hl ld b,0 ld c,(hl) ld ix,enemy_routine_table add ix,bc jp (ix) eback: pop hl pop bc ld de,5 add hl,de djnz enemy_loop ret enemy_routine_table: jp eback jp enemy_normal jp enemy_scared jp enemy_dead_r enemy_dead_l: inc hl dec (hl) jr z,enemy_restore enemy_draw: ld d,(hl) inc hl ld e,(hl) ld ix,image_ghost_dead call drw_spr96 jr eback enemy_dead_r: inc hl inc (hl) ld a,(hl) cp 88 jr z,enemy_restore jr enemy_draw enemy_restore: dec hl ld (hl),3 jr eback rand: ld de,0 ld a,(de) xor e inc de res 7,d ld (rand+1),de ret ; -------------- NORMAL ENEMY --------------------------------------------- enemy_normal: inc hl ld a,(hl) inc hl or (hl) and 7 scf call z,enemy_pseudo_intelligence call nc,change_enemy_related_stuff ld a,(y) sub (hl) dec hl add a,5 jp m,nocoll1 cp 10 jr nc,nocoll1 ld a,(x) sub (hl) add a,5 jp m,nocoll1 cp 10 jr nc,nocoll1 inc sp inc sp inc sp inc sp inc sp inc sp ld hl,lives dec (hl) ret z call prepare_to_play_level jp main_loop nocoll1: ld a,(hl) inc hl inc hl add a,(Hl) dec hl dec hl ld (hl),a ld d,a inc hl ld a,(hl) inc hl inc hl add a,(hl) dec hl dec hl ld (hl),a ld e,A ld ix,image_ghost call drw_spr96 jp eback ; -------------- SCARED ENEMY --------------------------------------------- slow: inc hl ld d,(hl) inc hl ld e,(Hl) jr drawit btn: ld (hl),3 jp enemy_normal enemy_scared: ld a,(countdown) or a jr z,btn rra jr nc,slow inc hl ld a,(hl) inc hl or (hl) and 7 scf call z,enemy_pseudo_intelligence_2 call nc,change_enemy_related_stuff ld a,(y) sub (hl) dec hl add a,5 jp m,nocoll2 cp 10 jr nc,nocoll2 ld a,(x) sub (hl) add a,5 jp m,nocoll2 cp 10 jr nc,nocoll2 ld a,(hl) dec hl ld (hl),12 sub 44 jp p,ec1 ld (hl),9 ec1: inc hl inc hl ld a,(hl) and %11111000 ld (hl),a inc hl ld (hl),0 inc hl ld (hl),0 ld hl,(score) ld de,50 add hl,de ld (score),hl jp eback nocoll2: ld a,(hl) inc hl inc hl add a,(Hl) dec hl dec hl ld (hl),a ld d,a inc hl ld a,(hl) inc hl inc hl add a,(hl) dec hl dec hl ld (hl),a ld e,A drawit: ld ix,image_ghost_scared call drw_spr96 jp eback ; -------------- CHANGE ENEMY DIRECTION ----------------------------------- enemy_pseudo_intelligence: push hl call rand rra jr c,_updown _leftright: dec hl ld a,(x) sub (hl) jp p,right__ jr left__ _updown: ld a,(y) sub (hl) jp m,up__ _down: jr down__ enemy_pseudo_intelligence_2: push hl call rand rra jr c,__updown dec hl ld a,(x) sub (hl) jp m,right__ jr left__ __updown: ld a,(y) sub (hl) jp p,up__ jr down__ change_enemy_related_stuff: push hl ld a,r and 3 dec a jr z,left__ dec a jr z,right__ dec a jr z,up__ down__: ld a,$57 ld bc,$0100 jr enemy_continue left__: ld a,$4f ld bc,$00ff jr enemy_continue right__: ld a,$5f ld bc,1 jr enemy_continue up__: ld a,$47 ld bc,$ff00 enemy_continue: ld hl,smcebit+1 ld (hl),a pop hl inc hl ld (hl),c inc hl ld (hl),b dec hl dec hl ld a,(hl) ;A = Y push hl dec hl ld c,(hl) ;C = X srl c ;C = X / 2 srl c ;C = X / 4 srl c ;C = X / 8 ld b,a ;B = Y srl a ;A = Y / 2 add a,b ;A = 12 * Y / 8 add a,c ;A = (X / 8) + (12 * Y / 8) ld hl,data ;HL -> MAP ld c,a ;C = (X / 8) + (12 * Y / 8) ld b,0 ;BC = (X / 8) + (12 * Y / 8) add hl,bc ;HL -> MAP + (X / 8) + (12 * Y / 8) ld a,(hl) pop hl scf smcebit: bit 0,a ret z inc hl ld (hl),0 inc hl ld (hl),0 dec hl dec hl scf ccf ret ; -------------- GAME DATA ------------------------------------------------- saved_flag: .db 0 savedata: .db 0,0,0,0,0,0,0 .db 0,0,0,0,0,0,0 .db 0,0,0,0,0,0,0 .db 0,0,0,0,0,0,0 .db 0,0,0,0,0,0,0 data: .dw 0,0,0,0,0,0,0,0,0,0,0,0 .dw 0,0,0,0,0,0,0,0,0,0,0,0 .dw 0,0,0,0,0,0,0,0,0,0,0,0 .dw 0,0,0,0,0,0,0,0,0,0,0,0 .dw 0,0,0,0,0,0,0,0,0,0,0,0 .dw 0,0,0,0,0,0,0,0,0,0,0,0 chartable: .db "XTOJE." .db ". WSNID!.ZVRMHC?" .db ".YUQLGB#x~+PKFA|" .db "@54321.~+" errmsg: .db "INSUFFICIENT MEMORY!",0 ; -------------- IMAGES ---------------------------------------------------- image_right: .db 7,7 .db %00000000 .db %00111100 .db %01110110 .db %01111100 .db %01111000 .db %01111110 .db %00111100 image_up: .db 7,7 .db %00000000 .db %00100100 .db %01110110 .db %01011110 .db %01111110 .db %01111110 .db %00111100 image_left: .db 7,7 .db %00000000 .db %00111100 .db %01101110 .db %00111110 .db %00011110 .db %01111110 .db %00111100 image_down: .db 7,7 .db %00000000 .db %00111100 .db %01111110 .db %01111110 .db %01111010 .db %01101110 .db %00100100 image_ghost: .db 7,7 .db %00000000 .db %00111100 .db %01111110 .db %01111010 .db %01111110 .db %01111110 .db %01010100 image_ghost_scared: .db 7,7 .db %00000000 .db %00101000 .db %01010100 .db %00101010 .db %01010100 .db %00101010 .db %01010100 image_ghost_dead: .db 7,4 .db %01000100 .db %10101010 .db %10101010 .db %01000100 ; -------------- LEVEL DATA ------------------------------------------------ level_maps: .db 03,21,21,17,17,21,21,17,17,21,21,25 .db 26,35,21,28,26,19,25,26,22,21,41,26 .db 26,26,35,17,20,28,22,20,17,41,26,26 .db 18,28,26,26,19,17,17,25,26,26,22,24 .db 18,21,24,26,26,10,10,26,26,18,21,24 .db 26,19,28,18,28,10,10,22,24,22,25,26 .db 26,22,25,18,25,10,10,19,24,19,28,26 .db 18,21,24,26,26,10,10,26,26,18,21,24 .db 18,25,26,26,22,20,20,28,26,26,19,24 .db 26,26,38,20,17,25,19,17,20,44,26,26 .db 26,38,21,25,26,22,28,26,19,21,44,26 .db 22,21,21,20,20,21,21,20,20,21,21,28 .db 03,21,21,17,17,41,35,17,17,21,21,25 .db 26,19,21,28,26,26,26,26,22,21,25,26 .db 26,26,19,21,28,26,26,22,21,25,26,26 .db 18,28,26,19,21,16,16,21,25,26,22,24 .db 18,21,28,26,19,24,18,25,26,22,21,24 .db 38,21,21,24,26,14,14,26,18,21,21,44 .db 35,21,21,24,26,11,11,26,18,21,21,41 .db 18,21,25,26,22,24,18,28,26,19,21,24 .db 18,25,26,22,21,16,16,21,28,26,19,24 .db 26,26,22,21,25,26,26,19,21,28,26,26 .db 26,22,21,25,26,26,26,26,19,21,28,26 .db 22,21,21,20,20,44,38,20,20,21,21,28 .db 03,21,21,21,21,17,17,21,21,21,21,25 .db 26,35,17,21,21,28,22,21,21,17,41,26 .db 26,26,18,21,21,21,21,21,21,24,26,26 .db 26,26,18,21,17,25,19,17,21,24,26,26 .db 26,26,26,19,28,26,26,22,25,26,26,26 .db 18,28,26,26,19,12,06,25,26,26,22,24 .db 18,25,26,26,22,09,03,28,26,26,19,24 .db 26,26,26,22,25,26,26,19,28,26,26,26 .DB 26,26,18,21,20,28,22,20,21,24,26,26 .db 26,26,18,21,21,21,21,21,21,24,26,26 .db 26,38,20,21,21,25,19,21,21,20,44,26 .db 22,21,21,21,21,20,20,21,21,21,21,28 ; -------------- BLOCK IMAGES ---------------------------------------------- getready:.db "GET READY!",0 default_enemy_data: .db 3,40,40,0,0 easy_enemy_data: .DB 3,48,40,0,0 .DB 3,40,48,0,0 .DB 3,48,48,0,0 .DB 0,00,00,0,0 initialtemplate: .db "SCORE",0 .db "LIVES",0 .db "LEVEL",0 title: .db "P A C - M A N 9 8",0 .db "by Patrick A Davidson" .db "ariwsi@rocketmail.com",0 .db " Copyright 1997",0 .db 0 scrltext:.db " " .db "WELCOME TO PACMAN 98! " .db "PRESS THE F4 KEY TO START THE " .db "GAME IN EASY MODE, OR ANY " .db "OTHER KEY TO PLAY AT NORMAL " .db "DIFFICULTY. USE ARROW KEYS " .db "TO PLAY, EXIT TO GIVE UP, " .db "AND MORE TO SAVE THE GAME. " .db "PRESS 2nd TO TOGGLE " .db "AUTOPILOT... " scrl_end:.db " " ; ---------------------- HIGH SCORES --------------------------------------- hi_score_str: .db "----> PACMAN 98 <----" .db " You have a hiscore!" .db "Enter your name here:",0 hstitle: .db "= PACMAN HIGHSCORES =",0 hsdata: .dw 4000 .db "Pac-Man 98 v6.2 ",0 .dw 3500 .db "Pac-Man 98 v6.2 ",0 .dw 3000 .db "Pac-Man 98 v6.2 ",0 .dw 2500 .db "Pac-Man 98 v6.2 ",0 .dw 2000 .db "Pac-Man 98 v6.2 ",0 .dw 1500 .db "Pac-Man 98 v6.2 ",0 lowest .dw 1000 .db "Pac-Man 98 v6.2 ",0 .end