**************************************************************************** * * * MR DO! (C) 1990 SPECIAL FX SOFTWARE LIMITED * * * * BY WESLEY KNACKERS * * * * START DATE 28/06/90 * * LAST DATE 05/09/90 * * * **************************************************************************** MRDOSPEED EQU 128+64+32 EATSPEED EQU 128+32 BALLSPEED EQU 2 BRDLEN EQU 9 ;SCORE BOARD LENGTH STACK EQU $CFFF OBJSET EQU $8000 ;$1000 BGSET EQU OBJSET+$1000 ;$800 DISPSCREEN EQU $9800 ;$400 STATSCREEN EQU $9C00 ;$400 BACKSCREEN EQU $C800 ;$400 BYTESCREEN EQU $CC00 ;$100 WORKRAM EQU $C000 OAMRAM EQU $FE00 INTRAM EQU $FF80 BLITS EQU INTRAM OBJDATA EQU OAMRAM PORT EQU $FF00 SB EQU $FF01 SC EQU $FF02 DIV EQU $FF04 TIMA EQU $FF05 TMA EQU $FF06 TAC EQU $FF07 LCDC EQU $FF40 STAT EQU $FF41 SCY EQU $FF42 SCX EQU $FF43 LY EQU $FF44 LYC EQU $FF45 DMA EQU $FF46 BGP EQU $FF47 OBP0 EQU $FF48 OBP1 EQU $FF49 WY EQU $FF4A WX EQU $FF4B IF EQU $FF0F IE EQU $FFFF APLEN EQU 5 APNUM EQU 10 ;APPLE TOTAL CDTOTAL EQU 5+1*4 ;CHR DUMP TOTAL CHRNUM EQU 3 ;CHR SP TOTAL DINONUM EQU 4 GHSTNUM EQU 3 BADNUM EQU DINONUM+GHSTNUM+1 SPNUM EQU BADNUM+CHRNUM ;SPRITE TOTAL TYP EQU 0 ;SPRITE VARS YNO EQU 1 XNO EQU 2 GNO EQU 3 FLG EQU 4 ADL EQU 5 YSD EQU 6 XSD EQU 7 EVAR EQU XSD+1 P0 EQU %00000000 ;OBJ FLAGS P1 EQU %00010000 R EQU %00000000 L EQU %00100000 U EQU %01000000 D EQU %00000000 PRI EQU %10000000 ;OBJ CHARACTER DATA... EBG EQU $7C PNTG EQU $F5 ;1 BALL1G EQU $F6 ;1 BALL2G EQU $F7 ;1 FIVEG EQU $F8 ;2 EXTRAG EQU $FA ;5 BIGMRDO EQU 00*4 BIGDINO EQU 09*4 BIGEXTRA EQU 18*4 LETTERHI EQU EXTRAG*$10+OBJSET EXPHS0 EQU EBG+00*$10+OBJSET+08 EXPHS1 EQU EBG+04*$10+OBJSET+10 EXPHS2 EQU EBG+08*$10+OBJSET+06 MRDO EQU $00 ;MRDO (4) MONSTG EQU $18 ;APPLE MONSTER (4) EATERG EQU $28 ;WALL EATER (4) GHOSTG EQU $38 ;GHOST (3) EBONSG EQU $3E ;EXTRA MONSTER (3) WL EQU $00 ;BG CHR GROUPS CH EQU $10 ED EQU $14 CN EQU $1C DT EQU $20 WT EQU $24 ;WHITE CHR! FD EQU $25 AP0 EQU $5C AP1 EQU AP0+4 AP2 EQU AP1+4 AP3 EQU AP2+4 AP4 EQU AP3+4 AP5 EQU AP4+4 AP6 EQU AP5+4 WLE EQU ED-1 TMRDO EQU 1 ;BADDIE TYPES TOUTBALL EQU 2 TINBALL EQU 3 TCBALL EQU 4 TTBALL EQU 5 TDINO EQU 6 TDINOE EQU 7 TDINOP EQU 8 TGHOST EQU 9 TGHOSTE EQU 10 TPOINTS EQU 11 TEXDANCE EQU 12 TEXUP EQU 13 TEXWALK EQU 14 TEXEXIT EQU 15 TEXEAT EQU 16 TAPPW EQU 1 ;APPLE TYPES TAPPJ EQU 2 TAPPF EQU 3 TAPPS EQU 4 **************************************************************************** ;RAM VARIABLES... ORG WORKRAM+$1000 GAMEOBJ DEFS $A0,0 ;DUMMY OBJDATA VARS SPEEDFLAG DEFB 0 TOGGLE DEFB 0 MRDOANI DEFB 0 ANIOFF3 DEFB 0 ANIOFF4 DEFB 0 BLOBSINE NEWSCY DEFB 0 BLOBY NEWSCX DEFB 0 BLOBX SCYT DEFB 0 BLOBXSD SCXT DEFB 0 SUBMENU DEFB 0 LEVEL DEFB 0 MENUY MAP DEFB 0 SCRLCOUNT CATCHDEL DEFB 0 LOGOSTATE CHERRYDEL DEFB 0 LOGTIME CHERRYBON DEFB 0 CONTOG CHERRYTOT DEFB 0 SPEED DEFB 0 SPEEDO DEFB 0 SPDCOW DEFB 0 LETLOW DEFW 0 LETCOW DEFB 0 EXTRALETTER DEFB 0 EXTRATOT DEFB 0 FREEZE DEFB 0 GHOSTOTAL DEFB 0 FRAMES DEFB 0 TALLOFF DEFB 0 DUMPTOT DEFB 0 APPLEAND DEFB 0 KEYPRESS DEFB 0 CONTROL DEFB 0 MUD DEFB 0 SPLAT DEFB 0 GODELAY DEFB 0 VEND RND1 DEFB $20 RND2 DEFB $AA RND3 DEFB $55 REALSCORE DEFB "000000" ;ACTUAL SCORE SCORE DEFB "000000",0,0,0 ;LEVELS SCORE,TIME,ENDOBJ DEFB "000000",0,0,0 DEFB "000000",0,0,0 TOTAL DEFB "000000",0,0 ;RUNNING TOTAL,TIME TIMER EQU SCORE+6 TIMERTOTAL EQU TOTAL+6 ;*************************************************************************** ORG WORKRAM+$1100 STATUSOBJ DEFS $A0,0 CHRDUMP DEFS 3*CDTOTAL,0 ;ADLO,ADHI,CHR ;*************************************************************************** ORG WORKRAM+$1200 SPRITES ; TYP,YNO,XNO,GNO ; FLG,ADL,YSD,XSD MRDOSP DEFB TMRDO,0,0,MRDO DEFB 0,00*16,0,0 DINOSP DEFB TDINO,$70,$58,MONSTG DEFB 0,01*16,0,0 DEFB TDINO,$70,$58,MONSTG DEFB 0,02*16,0,0 DEFB TDINO,$70,$58,MONSTG DEFB 2,03*16,0,0 DEFB TDINO,$70,$58,MONSTG DEFB 2,04*16,0,0 GHSTSP DEFB TGHOST,8*13,8*12+2,GHOSTG DEFB 1,05*16,0,0 DEFB TGHOST,8*13,8*14+4,GHOSTG DEFB 3,06*16,0,0 DEFB TGHOST,8*13,8*16+6,GHOSTG DEFB 3,07*16,0,0 EXBONSP DEFB TEXDANCE,8*13,8*10+0,EBONSG DEFB 1,08*16,0,0 MRBALLSP DEFB TCBALL,0,0,BALL1G DEFB 0,09*16,0,0 MRSBALLSP DEFB 0,0,0,BALL2G DEFB 0,09*16+4,0,0 SCORSP DEFB 0,0,0,0 DEFB 0,09*16+8,0,0 APPLESP DEFS APLEN*APNUM,0 ;TYP,YNO,XNO,GNO,FLG EXTRATAB DEFB 4,8*09-4,EXTRAG+0,P1 ;Y,X,GNO,FLG DEFB 2,8*10-4,EXTRAG+1,P1 DEFB 0,8*11-4,EXTRAG+2,P1 DEFB 2,8*12-4,EXTRAG+3,P1 DEFB 4,8*13-4,EXTRAG+4,P1 DEFS $5A,0 ;*** FREE RAM *** ; SCORE(6)/NAME(3)/SCENE(1)/TIME(2) HIGHTAB DEFB "001700JOF",7,0,7 DEFB "001600CHZ",6,0,6 DEFB "001500KEG",5,0,5 DEFB "001400ELM",4,0,4 DEFB "001300MYK",3,0,3 DEFB "001200IVN",2,0,2 DEFB "001100PAM",1,0,1 HIGHTABEND DEFB "001000GAZ",0,0,0 HIGHBUFF DEFB "FROBUSH HERE" ;*************************************************************************** ;CARTRIDGE REGISTRATION DATA ORG $100 NOP ;NULL BYTE JP START ;GAME START ADDR HEX CEED6666CC0D000B ;NINTENDO CHRDATA HEX 03730083000C000C HEX 0008111F8889000E HEX DCCC6EE6DDDDD999 HEX BBBB67636E0EECCC HEX DDDC999FBBB9333E DEFB "MRDO! " ;GAME TITLE DEFB 0,0,0 ;UNUSED DEFB 0 ;CARTRIDGE TYPE (ROM ONLY) DEFB 0 ;ROM SIZE (256K) DEFB 0 ;RAM SIZE (NONE) DEFW 0 ;MAKER CODE DEFB 0 ;VERSION NUMBER DEFB 0 ;COMPLEMENT CHECK DEFW 0 ;CHECK SUM ;*************************************************************************** ;TABLES... ORG $200 BADTAB DEFW NOBAD ;00 DEFW NOBAD ;01 PLAYER 1 DEFW OUTBALL ;02 DEFW INBALL ;03 DEFW CARRYBALL ;04 DEFW THROWBALL ;05 DEFW DINO ;06 DEFW DINOEAT ;07 DEFW DINOPUSH ;08 DEFW GHOST ;09 DEFW GHOSTEAT ;10 DEFW POINTS ;11 DEFW EXDANCE ;12 EXTRA DEFW EXUP ;13 DEFW EXWALK ;14 DEFW EXEXIT ;15 DEFW EXEAT ;16 HITBALLTAB DEFW DUFKILL ;00 DEFW MRDOCATCH ;01 DEFW DUFKILL ;02 DEFW DUFKILL ;03 DEFW DUFKILL ;04 DEFW DUFKILL ;05 DEFW DINODIE ;06 DEFW DINODIE ;07 DEFW DINODIE ;08 DEFW GHOSTDIE ;09 DEFW GHOSTDIE ;10 DEFW DUFKILL ;11 DEFW DUFKILL ;12 EXTRA DEFW DUFKILL ;13 DEFW EXDIE ;14 DEFW EXDIE ;15 DEFW EXDIE ;16 APPLETAB DEFW NOAPPLE ;00 DEFW APPLEWAIT ;01 DEFW APPLEJIG ;02 DEFW APPLEFALL ;03 DEFW APPLESPLIT ;04 VECTAB DEFB +0,-1,+1,+0,+0,+1,-1,+0 VECTAB2 DEFB +0,-2,+2,+0,+0,+2,-2,+0 VALIDLR DEFB +0,+2,+4,+0 ;+1 FOR KEY DECODE VALIDUD DEFB +0,+1,+3,+0 BALLOFF DEFB +0,-8,+8,+0,+0,+8,-8,+0 BALLXY DEFB -1,+0,-1,-1,+1,-1,-1,+1 BALLVEC DEFB +BALLSPEED,-BALLSPEED,+BALLSPEED,+BALLSPEED DEFB -BALLSPEED,+BALLSPEED,-BALLSPEED,-BALLSPEED BALLCPS DEFB ED+4,ED+5,ED+6,ED+7,CN+1,DT+2 ;UP,RG DEFB ED+0,ED+1,ED+6,ED+7,CN+3,DT+0 ;DW,RG DEFB ED+0,ED+1,ED+2,ED+3,CN+2,DT+1 ;DW,LT DEFB ED+4,ED+5,ED+2,ED+3,CN+0,DT+3 ;UP,LT BALLBOU DEFB 1,1,3,3,2,1+128 DEFB 0,0,2,2,3,2+128 DEFB 3,3,1,1,0,3+128 DEFB 2,2,0,0,1,0+128 MRDOTAB DEFB $00,$06,$0C,$12 ;U/R/D/R CHEWJP DEFW CHEWUP ;00 DEFW CHEWRT ;01 DEFW CHEWDW ;02 DEFW CHEWLT ;03 EATJP DEFW EATWALL ;00 DEFW EATUNNEL ;01 DEFW EATCHERRY ;02 DEFW EATAPPLE ;03 DEFW EATFOOD ;04 BITAB DEFB %0001,%0010,%0100,%1000 VECTOBIT DEFB %1000,%0001,%0100,%0010 BITTOVEC DEFB 0,1,3,0,2,0,0,0,0 **************************************************************************** ;SPRITE CHARACTER TABLES...((CHR,FLG)*4)(TOPL,TOPR,BOTR,BOTL) ORG $300 CHRTABLE DEFB $06,U,$07,U,$05,U,$04,U ;00 MRDO U DEFB $0E,U,$0F,U,$0D,U,$0C,U ;01 DEFB $16,U,$17,U,$15,U,$14,U ;02 DEFB $1E,U,$1F,U,$1D,U,$1C,U ;03 DEFB $26,U,$27,U,$25,U,$24,U ;04 DEFB $2E,U,$2F,U,$2D,U,$2C,U ;05 DEFB $00,R,$01,R,$03,R,$02,R ;06 MRDO R DEFB $08,R,$09,R,$0B,R,$0A,R ;07 DEFB $10,R,$11,R,$13,R,$12,R ;08 DEFB $18,R,$19,R,$1B,R,$1A,R ;09 DEFB $20,R,$21,R,$23,R,$22,R ;0A DEFB $28,R,$29,R,$2B,R,$2A,R ;0B DEFB $05,D+L,$04,D+L,$06,D+L,$07,D+L ;0C MRDO D DEFB $0D,D+L,$0C,D+L,$0E,D+L,$0F,D+L ;0D DEFB $15,D+L,$14,D+L,$16,D+L,$17,D+L ;0E DEFB $1D,D+L,$1C,D+L,$1E,D+L,$1F,D+L ;0F DEFB $25,D+L,$24,D+L,$26,D+L,$27,D+L ;10 DEFB $2D,D+L,$2C,D+L,$2E,D+L,$2F,D+L ;11 DEFB $01,L,$00,L,$02,L,$03,L ;12 MRDO L DEFB $09,L,$08,L,$0A,L,$0B,L ;13 DEFB $11,L,$10,L,$12,L,$13,L ;14 DEFB $19,L,$18,L,$1A,L,$1B,L ;15 DEFB $21,L,$20,L,$22,L,$23,L ;16 DEFB $29,L,$28,L,$2A,L,$2B,L ;17 DEFB $42,U,$43,U,$41,U,$40,U ;18 DINO U DEFB $4A,U,$4B,U,$49,U,$48,U ;19 DEFB $52,U,$53,U,$51,U,$50,U ;1A DEFB $5A,U,$5B,U,$59,U,$58,U ;1B DEFB $3C,R,$3D,R,$3F,R,$3E,R ;1C DINO R DEFB $44,R,$45,R,$47,R,$46,R ;1D DEFB $4C,R,$4D,R,$4F,R,$4E,R ;1E DEFB $54,R,$55,R,$57,R,$56,R ;1F DEFB $40,D,$41,D,$43,D,$42,D ;20 DINO D DEFB $48,D,$49,D,$4B,D,$4A,D ;21 DEFB $50,D,$51,D,$53,D,$52,D ;22 DEFB $58,D,$59,D,$5B,D,$5A,D ;23 DEFB $3D,L,$3C,L,$3E,L,$3F,L ;24 DINO L DEFB $45,L,$44,L,$46,L,$47,L ;25 DEFB $4D,L,$4C,L,$4E,L,$4F,L ;26 DEFB $55,L,$54,L,$56,L,$57,L ;27 DEFB $62,U,$63,U,$61,U,$60,U ;28 DINOX U DEFB $6A,U,$6B,U,$69,U,$68,U ;29 DEFB $72,U,$73,U,$71,U,$70,U ;2A DEFB $7A,U,$7B,U,$79,U,$78,U ;2B DEFB $5C,R,$5D,R,$5F,R,$5E,R ;2C DINOX R DEFB $64,R,$65,R,$67,R,$66,R ;2D DEFB $6C,R,$6D,R,$6F,R,$6E,R ;2E DEFB $74,R,$75,R,$77,R,$76,R ;2F DEFB $60,D,$61,D,$63,D,$62,D ;30 DINOX D DEFB $68,D,$69,D,$6B,D,$6A,D ;31 DEFB $70,D,$71,D,$73,D,$72,D ;32 DEFB $78,D,$79,D,$7B,D,$7A,D ;33 DEFB $5D,L,$5C,L,$5E,L,$5F,L ;34 DINOX L DEFB $65,L,$64,L,$66,L,$67,L ;35 DEFB $6D,L,$6C,L,$6E,L,$6F,L ;36 DEFB $75,L,$74,L,$76,L,$77,L ;37 DEFB $30,R,$31,R,$33,R,$32,R ;38 GHOST R DEFB $34,R,$35,R,$37,R,$36,R ;39 DEFB $38,R,$39,R,$3B,R,$3A,R ;3A DEFB $31,L,$30,L,$32,L,$33,L ;3B GHOST L DEFB $35,L,$34,L,$36,L,$37,L ;3C DEFB $39,L,$38,L,$3A,L,$3B,L ;3D DEFB $7C,R,$7E,R,$7F,R,$7D,R ;3E EBONUSS LR DEFB $80,R,$82,R,$83,R,$81,R ;3F DEFB $84,R,$86,R,$87,R,$85,R ;40 **************************************************************************** ORG $600 BLOCKS DEFB ED+2,ED+6,ED+3,ED+7 ;00 U TUNNELS DEFB ED+4,ED+5,ED+0,ED+1 ;01 R DEFB ED+2,ED+6,ED+3,ED+7 ;02 D DEFB ED+4,ED+5,ED+0,ED+1 ;03 L CORNERS DEFB CN+0,CN+1,ED+3,ED+7 ;04 U ENDS DEFB ED+4,CN+1,ED+0,CN+3 ;05 R DEFB ED+2,ED+6,CN+2,CN+3 ;06 D DEFB CN+0,ED+5,CN+2,ED+1 ;07 L DEFB CN+0,ED+5,ED+3,DT+0 ;08 TL CORNERS DEFB ED+4,CN+1,DT+1,ED+7 ;09 TR DEFB DT+3,ED+6,ED+0,CN+3 ;0A BR DEFB ED+2,DT+2,CN+2,ED+1 ;0B BL DEFB ED+4,ED+5,DT+1,DT+0 ;0C T WALLS DEFB DT+3,ED+6,DT+1,ED+7 ;0D R DEFB DT+3,DT+2,ED+0,ED+1 ;0E B DEFB ED+2,DT+2,ED+3,DT+0 ;0F L CHERRY DEFB CH+0,CH+1,CH+2,CH+3 ;10 FOOD DEFB FD+0,FD+1,FD+2,FD+3 ;11 APPLE DEFB AP0,AP0+1,AP0+2,AP0+3 ;12 DEFB DT+3,DT+2,DT+1,DT+0 ;13 MIDDLE! ;EAT TABLES... UTL DEFB CN+0,CN+0,CN+0,CN+0 ;WALLS/CHERRY DEFB DT+1,DT+1,ED+2,ED+3 ;EDGES DEFB ED+4,ED+5,ED+6,ED+7 DEFB CN+0,DT+3,ED+3,DT+1 ;CORNERS DEFB WT,DT+1,WT,DT+3 ;DOTS DEFB WT UTR DEFB CN+1,CN+1,CN+1,CN+1 ;WALLS/CHERRY DEFB DT+0,DT+0,ED+2,ED+3 ;EDGES DEFB ED+4,ED+5,ED+6,ED+7 DEFB DT+2,CN+1,DT+0,ED+7 ;CORNERS DEFB DT+0,WT,DT+2,WT ;DOTS DEFB WT UBL DEFB ED+2,ED+3,ED+2,ED+3 ;WALLS/CHERRY DEFB ED+0,ED+1,ED+2,ED+3 ;EDGES DEFB DT+3,DT+3,"0","1" DEFB ED+2,ED+3,CN+2,CN+3 ;CORNERS DEFB WT,DT+1,WT,DT+3 ;DOTS DEFB WT UBR DEFB ED+6,ED+7,ED+6,ED+7 ;WALLS/CHERRY DEFB ED+0,ED+1,"2","3" ;EDGES DEFB DT+2,DT+2,ED+6,ED+7 DEFB ED+6,ED+7,CN+2,CN+3 ;CORNERS DEFB DT+0,WT,DT+2,WT ;DOTS DEFB WT MULTIE ADD A,E ;FOR CIRCLE ADD A,E ADD A,E ADD A,E RET MULTID ADD A,D ADD A,D ADD A,D ADD A,D RET HEXTAB DEFB "0123456789ABCDEF" OBJSWAP DEFB 8*16,9*16,9*16+4,9*16+8 DEFB 9*16,8*16,8*16+4,8*16+8 LEVTAB DEFW SCENE1,SCENE2,SCENE3,SCENE4,SCENE5 DEFW SCENE6,SCENE7,SCENE8,SCENE9,SCENE10 STATNUM DEFW STATSCREEN+32+0,REALSCORE+0 DEFW STATSCREEN+32+1,REALSCORE+1 DEFW STATSCREEN+32+2,REALSCORE+2 DEFW STATSCREEN+32+3,REALSCORE+3 DEFW STATSCREEN+32+4,REALSCORE+4 DEFW STATSCREEN+32+5,REALSCORE+5 DEFW STATSCREEN+32+0,REALSCORE+0 ;SPARE DEFW STATSCREEN+32+0,REALSCORE+0 ; ORG $700 LTL DEFB CN+0,CN+0,CN+0,CN+0 ;WALLS/CHERRY DEFB "4","5",ED+2,ED+3 ;EDGES DEFB ED+4,ED+5,DT+2,DT+2 DEFB CN+0,ED+5,DT+3,DT+2 ;CORNERS DEFB DT+0,DT+1,DT+2,DT+3 ;DOTS DEFB WT LTR DEFB ED+4,ED+5,ED+4,ED+5 ;WALLS/CHERRY DEFB "6","7",DT+3,DT+3 ;EDGES DEFB ED+4,ED+5,ED+6,ED+7 DEFB ED+4,CN+1,"A","B" ;CORNERS DEFB DT+0,DT+1,DT+2,DT+3 ;DOTS DEFB WT LBL DEFB CN+2,CN+2,CN+2,CN+2 ;WALLS/CHERRY DEFB ED+0,ED+1,ED+2,ED+3 ;EDGES DEFB "C","D",DT+0,DT+0 DEFB DT+1,DT+0,CN+2,ED+1 ;CORNERS DEFB DT+0,DT+1,DT+2,DT+3 ;DOTS DEFB WT LBR DEFB ED+0,ED+1,ED+0,ED+1 ;WALLS/CHERRY DEFB ED+0,ED+1,DT+1,DT+1 ;EDGES DEFB "E","F",ED+6,ED+7 DEFB "G","H",ED+0,CN+3 ;CORNERS DEFB DT+0,DT+1,DT+2,DT+3 ;DOTS DEFB WT RTL DEFB ED+4,ED+5,ED+4,ED+5 ;WALLS/CHERRY DEFB "I","J",ED+2,ED+3 ;EDGES DEFB ED+4,ED+5,DT+2,DT+2 DEFB CN+0,ED+5,"K","L" ;CORNERS DEFB DT+0,DT+1,DT+2,DT+3 ;DOTS DEFB WT RTR DEFB CN+1,CN+1,CN+1,CN+1 ;WALLS/CHERRY DEFB "M","N",DT+3,DT+3 ;EDGES DEFB ED+4,ED+5,ED+6,ED+7 DEFB ED+4,CN+1,DT+3,DT+2 ;CORNERS DEFB DT+0,DT+1,DT+2,DT+3 ;DOTS DEFB WT RBL DEFB ED+0,ED+1,ED+0,ED+1 ;WALLS/CHERRY DEFB ED+0,ED+1,ED+2,ED+3 ;EDGES DEFB "O","P",DT+0,DT+0 DEFB "Q","R",CN+2,ED+1 ;CORNERS DEFB DT+0,DT+1,DT+2,DT+3 ;DOTS DEFB WT RBR DEFB CN+3,CN+3,CN+3,CN+3 ;WALLS/CHERRY DEFB ED+0,ED+1,DT+1,DT+1 ;EDGES DEFB "S","T",ED+6,ED+7 DEFB DT+1,DT+0,ED+0,CN+3 ;CORNERS DEFB DT+0,DT+1,DT+2,DT+3 ;DOTS DEFB WT CTAB DEFB $00,$00,$01,$01,$01,$02,$02,$03 DEFB $03,$03,$04,$04,$04,$05,$05,$05 DEFB $06,$06,$06,$07,$07,$07,$08,$08 DEFB $08,$09,$09,$09,$09,$0A,$0A,$0A DEFB $0B,$0B,$0B,$0B,$0C,$0C,$0C,$0C DEFB $0C,$0D,$0D,$0D,$0D,$0D,$0E,$0E DEFB $0E,$0E,$0E,$0E,$0E,$0E,$0F,$0F DEFB $0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F QUADX DEFB $00 QUADY DEFB $00,$FF,$FF QUADTAB DEFB $00,$3F,$00,$3F ORG $800 DTL DEFB ED+2,ED+3,ED+2,ED+3 ;WALLS/CHERRY DEFB DT+1,DT+1,ED+2,ED+3 ;EDGES DEFB ED+4,ED+5,ED+6,ED+7 DEFB CN+0,CN+0,ED+2,ED+3 ;CORNERS DEFB WT,DT+1,WT,DT+3 ;DOTS DEFB WT DTR DEFB ED+6,ED+7,ED+6,ED+7 ;WALLS/CHERRY DEFB DT+0,DT+0,ED+2,ED+3 ;EDGES DEFB ED+4,ED+5,ED+6,ED+7 DEFB CN+1,CN+1,ED+6,ED+7 ;CORNERS DEFB DT+0,WT,DT+2,WT ;DOTS DEFB WT DBL DEFB CN+2,CN+2,CN+2,CN+2 ;WALLS/CHERRY DEFB ED+0,ED+1,ED+2,ED+3 ;EDGES DEFB DT+3,DT+3,ED+6,ED+7 DEFB CN+2,DT+3,CN+2,DT+1 ;CORNERS DEFB WT,DT+1,WT,DT+3 ;DOTS DEFB WT DBR DEFB CN+3,CN+3,CN+3,CN+3 ;WALLS/CHERRY DEFB ED+0,ED+1,ED+2,ED+3 ;EDGES DEFB DT+2,DT+2,ED+6,ED+7 DEFB DT+2,CN+3,DT+0,CN+3 ;CORNERS DEFB DT+0,WT,DT+2,WT ;DOTS DEFB WT LAFALL DEFB DT+1,DT+1,ED+2,ED+3 ;EDGES DEFB DT+3,DT+3,WT,WT DEFB ED+2,DT+3,ED+3,DT+1 ;CORNERS DEFB WT,DT+1,WT,DT+3 ;DOTS DEFB WT DEFB FD+0,FD+1,FD+2,FD+3 ;FOOD RAFALL DEFB DT+0,DT+0,WT,WT ;EDGES DEFB DT+2,DT+2,ED+6,ED+7 DEFB DT+2,ED+6,DT+0,ED+7 ;CORNERS DEFB DT+0,WT,DT+2,WT ;DOTS DEFB WT DEFB FD+0,FD+1,FD+2,FD+3 ;FOOD SUBMENUTAB DEFW OPTIONS ;00 DEFW UPMENU ;01 DEFW SKILEVEL ;02 DEFW UPMENU ;03 DEFW SOUNDOPT ;04 DEFW DWMENU ;05 LOGOTAB DEFW LOGOON ;00 DEFW RASTARS ;01 DEFW STARFALL ;02 DEFW BARREL ;03 FACEADTAB DEFW $16*$20+STATSCREEN+$05 DEFB $00,$04 DEFW $16*$20+STATSCREEN+$09 DEFB $08,$0C DEFW $16*$20+STATSCREEN+$0D DEFB $10,$14 WAVETAB DEFB +02,+04,+06,+06,+07,+07,+08,+08 DEFB +08,+08,+07,+07,+06,+04,+02,+00 DEFB -02,-04,-06,-06,-07,-07,-08,-08 DEFB -08,-08,-07,-07,-06,-04,-02,-00 PULSETAB DEFB %00110100,%01110100 DEFB %10110100,%11110100 DEFB %11110100,%11110100 DEFB %10110100,%01110100 FADETAB DEFB %11100100,%11100100 DEFB %11100100,%11100100 DEFB %11100100,%11100100 DEFB %11100100,%11100100 DEFB %10100100,%10010100 DEFB %10010100,%10010100 DEFB %01010000,%01010000 DEFB %01010000,%01000000 WELLTAB DEFW EMOVE ;0 DEFW ALLWAIT ;1 DEFW ALLMOVE ;2 DEFW ALLWAIT ;3 DEFW DODIMOVE ;4 SETBIGTAB DEFB BIGMRDO,8*15,8*$16+1 ;OBJ OFFSET,Y,X DEFB BIGDINO,8*15,8*$1D DEFB BIGEXTRA,8*15,8*$16 **************************************************************************** DMATRANS DI LD (DMA),A LD A,40 DMAL DEC A JR NZ,DMAL EI RET SYSETUP CALL WAITBLANK DI XOR A LD (LCDC),A ;LCD CONTROLLER OFF LD HL,VARS LD B,VEND-VARS RESETV LD (HLI),A DEC B JR NZ,RESETV LD (IF),A INC A LD (IE),A LD HL,DMATRANS ;SETUP DMA TRANS ROUTINE LD DE,INTRAM LD B,SYSETUP-DMATRANS TOINTRAM LD A,(HLI) LD (DE),A INC E DEC B JR NZ,TOINTRAM CALL CLEARDISP CALL CLEARSTAT EI RET ;*************************************************************************** GAMESETUP XOR A LD (MAP),A LD (LEVEL),A LD HL,REALSCORE ;RESET SCORE LD A,"0" LD (HLI),A LD (HLI),A LD (HLI),A LD (HLI),A LD (HLI),A LD (HL),A LD B,4 ;AND LEVEL SCORES/TIMERS CALL RESETBOARD LD A,%11 ;APPLE Y SPEED LD (APPLEAND),A JP SETEXTRA ;*************************************************************************** LEVELSETUP CALL CLEARSTAT CALL RESETOBJ ;CLEAR REAL OBJ CALL STATUS ;DRAW STATUS LINE ;COPY CHRS/SPRITES TO OBJSET... CALL CLEARSET LD HL,CPNT ;WILL CHANGE LD DE,PNTG*$10+OBJSET LD BC,$10 CALL SHUNT LD HL,CMRDO LD A,(CONTROL) OR A JR Z,ISMISTER LD HL,CMRSDO ISMISTER LD DE,OBJSET LD BC,$300 CALL SHUNT LD HL,GAMESETAB CALL CREATESET XOR A LD (WY),A LD (SPEEDO),A LD (SPDCOW),A LD (FREEZE),A LD (FRAMES),A LD (DUMPTOT),A LD (KEYPRESS),A LD (CHERRYTOT),A LD (CHERRYDEL),A LD B,BADNUM ;RESET BADDIES LD HL,DINOSP LD DE,EVAR RESETSP LD (HL),A ADD HL,DE DEC B JR NZ,RESETSP LD (HL),TCBALL ;RESET MRDO BALL ADD HL,DE LD (HL),A ;RESET MRSDO BALL ADD HL,DE LD (HL),A ;RESET PNTS LD B,APNUM ;RESET APPLES LD HL,APPLESP LD DE,APLEN-1 SETAPPLES LD (HLI),A LD (HL),A ADD HL,DE DEC B JR NZ,SETAPPLES LD A,8 ;EXTRA MONSTER & SCORE LD (LETCOW),A LD A,SCORE LD (HL),A RET ;*************************************************************************** EXTRALIFE ;DO FANCY BITS... LD A,2 CALL WINHOW CALL SETEXTRA JR EXITLEVEL SETEXTRA LD A,5 LD (EXTRATOT),A LD HL,EXTRATAB+2 LD B,A LD A,EXTRAG RESETET LD (HLI),A LD (HL),P1 INC A INC L INC L INC L DEC B JR NZ,RESETET RET ;*************************************************************************** PAUSEGAME CALL WAITBLANK LD A,>STATUSOBJ CALL BLITS LD A,%10100100 ;OBJ PAL1 LD (OBP1),A LD A,%11100011 ;STATUS ON LD (LCDC),A CALL WAITNOK NOSTRT CALL WAITBLANK CALL KEYS BIT 3,A ;'START' JR Z,NOSTRT CALL WAITNOK JP MAINLOOP WAITNOK CALL KEYS OR A JR NZ,WAITNOK RET ;*************************************************************************** SPLITSCREEN CALL WAITBLANK LD A,>STATUSOBJ CALL BLITS LD A,%10100100 ;OBJ PAL1 LD (OBP1),A LD A,%11100011 ;STATUS ON LD (LCDC),A CALL PRSCORE CALL CHRDUMPER CALL PRAPPLES LD A,(NEWSCX) ;UPDATE SCROLL OFFSETS LD (SCX),A LD A,(NEWSCY) LD (SCY),A LD A,(MUD) ;BG PAL LD (BGP),A LD A,16 ;WAIT FOR END OF WINDOW CALL WAITSYNC LD A,>GAMEOBJ ;DMA DUMMY OBJDATA CALL BLITS LD A,%11000011 ;STATUS OFF LD (LCDC),A LD A,%11100100 ;OBJ PAL1 LD (OBP1),A RET ;*************************************************************************** ;PRINT THE APPLES... PRAPPLES LD HL,APPLESP LD BC,APNUM*256+32-1 PRALOOP INC L LD D,(HL) ;YNO INC L LD E,(HL) ;XNO INC L SRL D RRA SRL D RRA SRL D RRA AND %11100000 ADD A,E LD E,A LD A,D ADD A,>DISPSCREEN LD D,A LD A,(HL) ;GNO LD (DE),A INC E INC A LD (DE),A LD A,E ADD A,C LD E,A ADC A,D SUB E LD D,A LD A,(HLI) ADD A,2 LD (DE),A INC E INC A LD (DE),A INC L DEC B JR NZ,PRALOOP RET ;*************************************************************************** ;WORK THE APPLES... APPLEPIE XOR A LD (SPLAT),A ;RESET @DONE ONCE@ FLAG LD A,APNUM LD HL,APPLESP APLOOP PUSH AF CALL WORKAPPLE INC L LD (HL),D ;YNO INC L LD (HL),E ;XNO INC L LD (HL),C ;GNO INC L LD (HL),B ;FLG INC L POP AF DEC A JR NZ,APLOOP RET WORKAPPLE PUSH HL LD A,(HLI) ;TYP LD D,(HL) ;YNO INC L LD E,(HL) ;XNO INC L LD C,(HL) ;GNO INC L LD B,(HL) ;FLG ADD A,A ADD A,APPLETAB LD A,(HLI) LD H,(HL) LD L,A JP (HL) ;--------------------------------------------------------------------------- ;THE APPLE BITS... (MUST POP HL(TYP) BEFORE EXITING) NOAPPLE LD E,0 LD D,E NOLFALL POP HL RET GOSPLIT POP HL LD (HL),TAPPS LD C,AP2 LD B,40 ;DELAY RET APPLEWAIT LD A,D ;HIT BOTTOM? CP $1A JR Z,GOSPLIT LD L,E LD H,D INC H INC H CALL GETMAPLO LD A,(HLI) ;TEST LEFT CHR CP CH+4 JR C,NOLFALL LD A,(HL) ;TEST RIGHT CHR POP HL CP CH+4 JR C,NORFALL INC (HL) ;AND WOBBLE LD B,60 ;FOR 1 SECOND NORFALL RET APPLEJIG LD A,(SPEEDFLAG) AND %100 ADD A,AP0 LD C,A POP HL DEC B RET NZ INC (HL) ;GO FALL! LD B,0 ;FALL COUNTER RET APPLEFALL LD A,(APPLEAND) ;SLOW DOWN A BIT LD L,A LD A,(SPEEDFLAG) ;DIFFICULTY LEVEL AND L JR NZ,HLOUT PUSH DE CALL GETMAPLODE ;DE=BACKSCREEN LD A,(DUMPTOT) LD L,A ADD A,2 LD (DUMPTOT),A LD A,L ADD A,A ADD A,L ADD A,CHRDUMP ;HL=CHR DUMP LD (HL),E INC L LD (HL),D INC L LD A,B CP 3 ;PAST CRITICAL POINT? (2CHRS) JR C,REPBACK PUSH BC LD A,(DE) ;IF SO THEN CHANGE THE MAP! CP ED JR C,LEEV0 ADD A,LAFALL LD A,(BC) LD (DE),A LEEV0 LD (HLI),A INC E LD (HL),E INC L LD (HL),D INC L LD A,(DE) CP ED JR C,LEEV1 ADD A,RAFALL LD A,(BC) LD (DE),A LEEV1 LD (HL),A POP BC FLOUT LD HL,96-1 ADD HL,DE POP DE INC D ;DOWN 1 CHR INC B ;CHR COUNT LD A,(HLI) CP CH+4 JR C,STOPAFALL LD A,(HL) CP CH+4 JR C,STOPAFALL HLOUT POP HL RET REPBACK LD A,(DE) ;JUST REPLACE BACKGROUND LD (HLI),A INC E LD (HL),E INC L LD (HL),D INC L LD A,(DE) LD (HL),A JR FLOUT STOPAFALL LD A,B ;PAST CRITICAL POINT CP 3 JP NC,GOSPLIT POP HL LD (HL),TAPPW RET APPLESPLIT LD A,B AND %111 LD A,C JR NZ,NOASPL CP AP6 JR Z,NOASPL ADD A,$4 NOASPL LD C,A DEC B JR NZ,HLOUT INC B LD A,(SPLAT) ;DON'T SPLIT MORE THAN 1 APPLE OR A JR NZ,HLOUT ;AT A TIME! CALL GETMAPLODE ;DE=BACKSCREEN LD A,(DUMPTOT) LD L,A ADD A,4 LD (DUMPTOT),A LD (SPLAT),A ;SET 'DONE ONCE' FLAG! LD A,L ADD A,A ADD A,L ADD A,CHRDUMP ;HL=CHR DUMP LD (HL),E INC L LD (HL),D INC L LD A,(DE) CP ED JR C,LEEV2 ADD A,LAFALL LD A,(BC) LD (DE),A LEEV2 LD (HLI),A INC E LD (HL),E INC L LD (HL),D INC L LD A,(DE) CP ED JR C,LEEV3 ADD A,RAFALL LD A,(BC) LD (DE),A LEEV3 LD (HLI),A LD A,E ADD A,32-1 LD (HLI),A LD E,A ADC A,D SUB E LD D,A LD (HLI),A LD A,(DE) LD (HLI),A INC E LD (HL),E INC L LD (HL),D INC L LD A,(DE) LD (HL),A POP HL LD E,0 LD D,E ;MAKE Y=0 LD (HL),E ;TYP OFF RET **************************************************************************** ;TEMP BRING ON ROUTINES... BRINGON CALL GETDINO RET NZ LD (HL),TDINO ;TYP INC L LD (HL),$78 ;YNO INC L LD (HL),$58 ;XNO INC L LD (HL),MONSTG ;GNO INC L LD A,(HL) LD (HL),2 ;FLG RET GETDINO LD HL,DINOSP LD BC,DINONUM*256+EVAR GETSP LD A,(HL) ;TYP OR A RET Z LD A,L ADD A,C LD L,A DEC B JR NZ,GETSP DEC B RET GETAPPLE LD HL,APPLESP LD BC,APNUM*256+APLEN GETAP LD A,(HL) ;TYP OR A RET Z LD A,L ADD A,C LD L,A DEC B JR NZ,GETAP DEC B RET ;*************************************************************************** ;WORK ANIMATION VARS AND FLAGS... FLAGS LD A,(SPEEDFLAG) INC A LD (SPEEDFLAG),A LD C,A AND 1 LD (TOGGLE),A LD A,C AND %11000 SRL A SRL A SRL A LD (ANIOFF4),A LD A,C AND 7 RET NZ LD A,(ANIOFF3) ADD A,%01 CP %11 JR NZ,NOT3 XOR A NOT3 LD (ANIOFF3),A RET **************************************************************************** ;THE XY COLLISION ROUTINES... COLLISIONS LD HL,MRBALLSP ;BALL TO ALL 2*2 SPRITES... BALLCP LD A,(HL) ;TYP CP TTBALL ;BALL MOVING? RET NZ PUSH HL ;HL=BALL VARS INC L LD A,(HLI) ;YNO SUB 8 LD D,A LD A,(HL) ;XNO SUB 8 LD E,A LD HL,MRDOSP+YNO LD B,BADNUM+1 BALLCPL LD C,L LD A,(HLI) ;YNO SUB D CP 16 JR NC,NBALLCP LD A,(HL) ;XNO SUB E CP 16 JR NC,NBALLCP DEC L DEC L LD E,L ;DE=BADDIE VARS LD D,H LD A,(HL) ;TYP ADD A,A ADD A,HITBALLTAB LD A,(HLI) LD H,(HL) LD L,A JP (HL) ;NO MORE CHECKS NEEDED NBALLCP LD A,C ADD A,EVAR LD L,A DEC B JR NZ,BALLCPL POP HL RET ;-------------------------------------------------------------------------- ;BALL TO 2 BY 2 DEATH ROUTINES... ;(SP)=BALL VARS DE=BAD VARS MRDOCATCH POP HL LD A,(CATCHDEL) OR A RET NZ LD (HL),TCBALL ;CATCHBALL RET ;--------------------------------------------------------------------------- GHOSTDIE LD A,(GHOSTOTAL) DEC A LD (GHOSTOTAL),A JR NZ,NOTLASTG LD (FREEZE),A LD A,%11100100 ;RESET BACKGROUND PALETTE LD (MUD),A NOTLASTG LD L,E LD H,D LD (HL),0 ;TYP INC L LD D,(HL) INC L LD E,(HL) CALL GOAPPLE JP BALLSCORE ;--------------------------------------------------------------------------- ;RESET EXMON/CHANGE PAL/RESET LETTER/SETUP APPLES/KILL GHOSTS/UNFREEZE... EXDIE LD A,(EXTRATOT) DEC A LD (EXTRATOT),A LD A,(EXTRALETTER) LD C,A SUB EXTRAG ADD A,A ADD A,A ADD A,EXTRATAB LD (HL),C ;RESTORE CHR INC L LD (HL),P0 ;CHANGE PALETTE XOR A LD (FREEZE),A LD A,EATJP LD A,(HLI) LD H,(HL) LD L,A CALL JPHL ;WORK EAT ROUTINE ;--------------------------------------------------------------------------- DECODER LD A,(SPEED) OR A JR Z,NOSLOW LD C,A LD A,(SPDCOW) DEC A LD (SPDCOW),A JR NZ,ISSLOW LD A,MRDOSPEED LD (SPEED),A ISSLOW LD A,(SPEEDO) ADD A,C LD (SPEEDO),A RET NC NOSLOW LD A,(MRDOSP+FLG) ;LAST MOVE LD B,A LD A,(KEYPRESS) ;GET KEYPAD SWAP A AND %1111 JP Z,INVALID ;NOT WALKING LD C,A AND %0011 ;GET L/R ADD A,VALIDLR LD A,D ;ON Y BOUNRY? ADD A,8 AND 15 JR NZ,INVALIDX ;MISS OUT IF NOT LD A,(HL) ;GET DIRECTION+1! SUB 1 JR C,INVALIDX ;INCORRECT MOVE CP B ;SAME AS LAST MOVE? JR NZ,NEWMOVE INVALIDX LD A,E ;ON X BOUNRY? ADD A,8 AND 15 JR NZ,INVALIDY ;MISS OUT IF NOT LD A,C AND %1100 ;GET U/D SRL A SRL A ADD A,BALLOFF ;PLACE BALL LD A,(HLI) ADD A,E OR 4 LD E,A LD A,(HL) ADD A,D OR 4 LD D,A LD HL,MRBALLSP LD A,(HL) CP TCBALL ;DO WE HOLD THE BALL? RET NZ LD (HL),TTBALL ;THROW BALL INC L LD (HL),D ;YNO INC L LD (HL),E ;XNO INC L INC L LD (HL),B ;VECTOR LD A,32 ;DELAY TO AVOID REGRAB LD (CATCHDEL),A RET ;***************************************************************************** ;WORK THE BADDIES... BADDIES LD B,SPNUM LD HL,DINOSP BADLOOP PUSH BC LD A,(HLI) ;TYP PUSH HL CALL WORKBADDIE POP HL LD (HL),D ;YNO INC L LD (HL),E ;XNO INC L LD (HL),C ;GNO INC L LD (HL),B ;FLG LD A,L ADD A,EVAR-FLG LD L,A LD A,(RND1) XOR E RRCA RRCA RRCA XOR D LD (RND1),A POP BC DEC B JR NZ,BADLOOP RET WORKBADDIE LD D,(HL) ;YNO INC L LD E,(HL) ;XNO INC L LD C,(HL) ;GNO INC L LD B,(HL) ;FLG INC L INC L PUSH HL ;MISC VARS DATA ADD A,A LD L,A LD H,>BADTAB LD A,(HLI) LD H,(HL) LD L,A JPHL JP (HL) NOBAD POP HL LD E,-16 LD D,E RET ;--------------------------------------------------------------------------- ;CIRCLE ROUTINE... ;A=RADIUS (0TO$FF) RETS DE=XY CIRCLE PUSH BC LD C,A AND %11000000 ;QUADRANT RLCA RLCA LD B,A ADD A,QUADTAB LD A,C ;ANGLE XOR (HL) AND %00111111 LD C,A ADD A,VECTAB LD A,(HLI) ADD A,E LD E,A LD A,(HL) ADD A,D LD D,A RET ;--------------------------------------------------------------------------- ;FIND ANY POSSIBLE EXITS AT EACH JUNCTION... ;DE=XY RETS A=%UDLR BITS FINDEXITS PUSH DE LD L,E DEC L LD H,D DEC H CALL GETMAPHI LD DE,$0100 LD A,(HLI) ;TOP CHR... CP DT+1 JR Z,ISUP CP DT+3 JR Z,ISUP OR D CP ED+3 JR NZ,NOUP ISUP SET 3,E NOUP LD A,(HL) ;R CHR... OR D CP DT+3 JR Z,ISRT CP ED+5 JR NZ,NORT ISRT SET 0,E NORT LD A,L ADD A,32 LD L,A ADC A,H SUB L LD H,A LD A,(HLD) ;BOT CHR... CP DT+0 JR Z,ISDW CP DT+2 JR Z,ISDW OR D CP ED+7 JR NZ,NODW ISDW SET 2,E NODW LD A,(HL) ;L CHR... OR D CP DT+1 JR Z,ISLF CP ED+1 JR NZ,NOLF ISLF SET 1,E NOLF LD A,E POP DE RET ;--------------------------------------------------------------------------- ;THIS IS THE INTELLIGENCE ROUTINE AND ;SHOULD BE DIFFERENT FOR EACH BADDIE TYPE... WORKEXITS PUSH DE LD D,L LD E,A ;TEMP EXITS ;DO WE HAVE TO CHANGE DIRECTION? LD A,B ;GET OLD DIR ADD A,VECTOBIT LD A,(HL) AND E ;IS DIR AN OPTION JR Z,CHANGEDIR ;IF NOT THEN CHANGE LD A,(RND2) ;RND MOVE AND 7 JR NZ,DINODE CHANGEDIR LD A,(RND1) ADD A,D SRL A SRL A SRL A FINDEX LD D,A AND 3 ADD A,EXTRATAB LD A,(HLD) ;PAL0=FREE CP P0 ;PAL1=GONE JR Z,EXMOVE LD A,(HL) ;STORE CURRENT CHR LD (EXTRALETTER),A LD (HL),$FF ;CHANGE TO SPACE CHR SUB EXTRAG SWAP A ADD A,BALLOFF ;PLACE BALL LD A,(HLI) ADD A,E LD E,A LD A,(HL) ADD A,D LD D,A POP AF ;ANIMATE BALL AND 3 ADD A,A ADD A,BALLCPS LD D,6 ;TOTAL NUMBER OF CHRS TO CHECK BCHECK LD A,(HLI) ;HAVE WE HIT A VALID CHR? CP E JR NZ,NOBHIT ;IF NOT THEN CARRY ON MOVING LD A,BALLBOU-BALLCPS-1 ADD A,L LD L,A ;INDEX BOUNCE VECTORS LD A,(HL) ;GET NEW BOUNCE DIRECTION BIT 7,A ;BIT OF RND? JR Z,NRNDB LD B,A LD A,(RND3) ;STOPS BEING TRAPPED! AND 2 ADD A,128 XOR B NRNDB LD B,A JR BHITC NOBHIT DEC D JR NZ,BCHECK BHITC POP DE NOCHN LD A,B ;MOVE THE BALL ADD A,A ADD A,BALLVEC LD A,(HLI) ADD A,E LD E,A LD A,(HL) ADD A,D LD D,A POP HL RET ;--------------------------------------------------------------------------- ;BALL CIRCLE ROUTINES... OUTBALL LD A,B ;GET COUNTER CP %01000000 JR Z,GOINBALL AND %00001111 ;GET RADIUS SWAP A CALL CIRCLE LD A,B CPL AND %00110000 SWAP A ;GET MATHS INDEX ADD A,MULTIE XOR A CALL JPHL ;X MULTI LD E,A LD A,MULTID-MULTIE ADD A,L LD L,A XOR A CALL JPHL ;Y MULTI POP HL ADD A,(HL) ;CENT Y LD D,A INC L LD A,(HL) ;CENT X ADD A,E LD E,A INC B RET GOINBALL POP HL LD (HL),32 ;60TH DELAY (WILL CHANGE) LD A,L SUB YSD LD L,A LD (HL),TINBALL ;TYP RET INBALL POP HL LD A,(HL) OR A JR Z,INBALL0 DEC (HL) LD E,-16 LD D,E RET INBALL0 DEC B JR NZ,INBALL1 LD A,L SUB YSD LD L,A LD (HL),TCBALL ;TYP RET INBALL1 PUSH HL LD A,B ;GET COUNTER AND %00001111 ;GET RADIUS SWAP A CALL CIRCLE LD A,B CPL AND %00110000 SWAP A ;GET MATHS INDEX ADD A,MULTIE LD A,(MRDOSP+XNO) CALL JPHL ;X MULTI LD E,A LD A,MULTID-MULTIE ADD A,L LD L,A LD A,(MRDOSP+YNO) CALL JPHL ;Y MULTI LD D,A POP HL RET ;--------------------------------------------------------------------------- ;BONUS SCORE DISPLAY ROUTINES... POINTS POP HL DEC B ;DECREASE COUNTER RET NZ LD A,L LD B,L SUB YSD LD L,A LD (HL),0 ;BADDIE OFF LD L,B RET ;*************************************************************************** ;SETUP SPRITES... DUMPOBJ LD A,(NEWSCX) ;INVERT SCROLL OFFSETS CPL INC A LD (SCXT),A LD A,(NEWSCY) CPL ADD A,9 LD (SCYT),A ;----------------------------------------------------------------------------- LD HL,SPRITES+ADL ;SWAP 8 OBJ POINTERS LD DE,EVAR LD A,(SPEEDFLAG) LD C,A SWAP A LD B,8 MPLEX AND %01110000 LD (HL),A ADD A,16 ADD HL,DE DEC B JR NZ,MPLEX LD A,C ;AND MIXUP THE REST AND 1 ADD A,A ADD A,A ADD A,OBJSWAP LD A,(BC) INC C LD (HL),A ADD HL,DE LD A,(BC) INC C LD (HL),A ADD HL,DE LD A,(BC) INC C LD (HL),A ADD HL,DE LD A,(BC) LD (HL),A ;----------------------------------------------------------------------------- ;DO 2*2 CHAR SPRITES... LD HL,SPRITES LD A,BADNUM+1 ;TOTAL+MRDO DUMPL PUSH AF CALL DUMP2BY2 POP AF DEC A JR NZ,DUMPL ;----------------------------------------------------------------------------- ;DO 1*1 SPRITES... (BALLS) CALL DUMP1BY1 CALL DUMP1BY1 ;----------------------------------------------------------------------------- ;DO 2*1 SPRITES... (POINTS) LD A,(SPEEDFLAG) ADD A,A AND P1 LD C,A ;PALETTE CONTROL FLASH DUMP2BY1 INC L ;IGNORE TYP LD A,(SCYT) ADD A,(HL) LD E,A ;YNO INC L LD A,(SCXT) ADD A,(HL) ;XNO LD D,A INC L LD A,(HLI) ;GNO INC L ;FLAG LD L,(HL) ;OBJ ADDR L LD H,>GAMEOBJ LD (HL),E ;YNO INC L LD (HL),D ;XNO INC L LD (HLI),A ;GNO LD (HL),C ;FLAG INC L LD A,D ADD A,8 LD D,A LD (HL),E ;YNO INC L LD (HL),D ;XNO INC L LD (HL),$F9 ;GNO (00) INC L LD (HL),C ;FLAG RET DUMP1BY1 INC L ;IGNORE TYP LD A,(SCYT) ADD A,(HL) ADD A,4 LD E,A ;YNO INC L LD A,(SCXT) ADD A,(HL) ;XNO ADD A,4 INC L LD D,(HL) ;GNO INC L INC L PUSH HL LD L,(HL) ;OBJ ADDR L LD H,>GAMEOBJ LD (HL),E ;YNO INC L LD (HLI),A ;XNO LD (HL),D ;GNO INC L LD (HL),0 ;FLAG POP HL LD A,L ADD A,EVAR-ADL LD L,A RET DUMP2BY2 INC L ;IGNORE TYP LD A,(SCYT) ADD A,(HL) LD E,A ;YNO INC L LD A,(SCXT) ADD A,(HL) ;XNO LD D,A INC L LD A,(HLI) ;GNO INC L ;FLAG PUSH HL LD L,(HL) ;OBJ ADDR L LD H,>GAMEOBJ ;A=2BY2 CHRNUM E=YNO D=XNO HL=OBJDATA DUMP2BY2S LD C,A ;GET CHRTABLE DATA... SLA C RLA SLA C RLA SLA C RLA AND %111 ADD A,>CHRTABLE LD B,A LD (HL),E ;YNO INC L LD (HL),D ;XNO INC L LD A,(BC) LD (HLI),A ;GNO INC C LD A,(BC) LD (HLI),A ;FLAG INC C LD A,D ADD A,8 LD D,A LD (HL),E ;YNO INC L LD (HLI),A ;XNO LD A,(BC) LD (HLI),A ;GNO INC C LD A,(BC) LD (HLI),A ;FLAG INC C LD A,E ADD A,8 LD E,A LD (HLI),A ;YNO LD (HL),D ;XNO INC L LD A,(BC) LD (HLI),A ;GNO INC C LD A,(BC) LD (HLI),A ;FLAG INC C LD A,D SUB 8 LD (HL),E ;YNO INC L LD (HLI),A ;XNO LD A,(BC) LD (HLI),A ;GNO INC C LD A,(BC) LD (HL),A ;FLAG POP HL LD A,L ADD A,EVAR-ADL LD L,A RET ;************************************************************************** ;CHEW THE BACKGROUND UP... MRDOCHEW LD A,(MRDOSP+XNO) LD C,A SUB 4 LD E,A LD A,(MRDOSP+YNO) SUB 4 LD D,A ADD A,4 ;ON A CHR BOUNDRY? OR C AND 7 RET NZ LD A,(MRDOSP+FLG) LD B,A ;B=FLG (0/3) DE=COORDS... GOCHEW LD A,(DUMPTOT) ;INDEX CHR DUMP TABLE LD C,A ADD A,A ADD A,C ADD A,CHRDUMP LD A,C ADD A,4 LD (DUMPTOT),A CHEWS PUSH HL SRL D SRL D SRL D SRL D RR E SRL D RR E SRL D RR E LD A,D ADD A,>BACKSCREEN LD D,A ;DE=BACKSCREEN ADDR LD A,B ADD A,A ADD A,CHEWJP LD A,(HLI) LD H,(HL) LD L,A JP (HL) ;--------------------------------------------------------------------------- CHEWUP POP HL LD B,>UTL LD (HL),E INC L LD (HL),D INC L LD A,(DE) SUB CH JR NC,CHU0 XOR A CHU0 ADD A,RTL LD (HL),E INC L LD (HL),D INC L LD A,(DE) SUB CH JR NC,CHR0 XOR A CHR0 ADD A,DTL LD (HL),E INC L LD (HL),D INC L LD A,(DE) SUB CH JR NC,CHD0 XOR A CHD0 ADD A,LTL LD (HL),E INC L LD (HL),D INC L LD A,(DE) SUB CH JR NC,CHL0 AND 3 XOR A CHL0 ADD A,DISPSCREEN^>BACKSCREEN CDUMP LD E,(HL) INC L LD A,(HLI) XOR C LD D,A LD A,(HLI) LD (DE),A DEC B JR NZ,CDUMP RET ;*************************************************************************** ;PRINT ONE CHR EVERY LOOP... PRSCORE LD A,(LETCOW) OR A JP NZ,COPYLETTER LD A,(SPEEDFLAG) AND 7 ADD A,A ADD A,A ADD A,STATNUM LD E,(HL) INC L LD D,(HL) ;DE=SCRN INC L LD A,(HLI) LD H,(HL) LD L,A ;HL=CHR PNTR LD A,(HL) LD (DE),A RET ;L=UNIT OFFSET (0TO6) H=CHR TO ADD (0TO9)... SCOREADD PUSH DE LD A,L ;ADD TO MAIN SCORE ADD A,REALSCORE CALL UPSCORE ;AND TO LEVEL SCORE LD A,(TALLOFF) ADD A,6 ADD A,E LD L,A LD A,D POP DE UPSCORE ADD A,(HL) CP "9"+1 JR C,NOSCRP SUB 10 LD (HLD),A LD A,1 JR UPSCORE NOSCRP LD (HL),A RET CLOCK LD A,(FRAMES) INC A LD (FRAMES),A CP 60 RET NZ XOR A LD (FRAMES),A LD A,(TALLOFF) ADD A,TIMER CALL UPCLOCK LD L,LEVTAB LD A,(HLI) LD H,(HL) LD L,A LD DE,MRDOSP+YNO LD A,(HLI) ;MRDO Y LD (DE),A INC E LD A,(HLI) ;MRDO X LD (DE),A INC E LD A,$06 ;GRAPHIC LD (DE),A INC E LD A,$01 ;DIRECTION LD (DE),A LD A,TCBALL ;CARRY BALL LD (MRBALLSP+TYP),A LD D,(HL) ;TUNNEL Y,X INC HL LD E,(HL) INC HL CALL DOTUNNEL ;DRAW TUNNEL CALL ENDTUNNEL ;DRAW END AND CHERRIES PUSH HL CALL COPYMAP ;COPY MAP WITHOUT APPLES/FOOD POP HL CALL PUTAPPLES ;DRAW APPLES PUTFOOD LD D,(HL) INC HL LD E,(HL) INC HL LD A,(HL) PUSH AF PUSH DE LD C,BLOCKS ;BC=BLOCK ADDR LD A,(BC) LD (HLI),A INC C LD A,(BC) LD (HLI),A INC C LD A,L ADD A,32-2 LD L,A ADC A,H SUB L LD H,A LD A,(BC) LD (HLI),A INC C LD A,(BC) LD (HL),A POP DE POP BC POP HL RET ;--------------------------------------------------------------------------- DOTUNNEL LD A,(HLI) ;START BLOCK NUMBER CP -1 RET Z ADD A,A ADD A,A LD C,A LD A,1 CALL DRAWBLOCK ;DRAW START BLOCK LD A,(HLI) ;DIRECTION 0TO4 ADD A,A LD B,A ADD A,A LD C,A ;C=BLOCK ADDR LOW LD A,VECTAB2 DRAWREP PUSH AF LD L,B LD A,(HLI) ;MOVE TO NEXT POS ADD A,E LD E,A LD A,(HL) ADD A,D LD D,A LD A,1 CALL DRAWBLOCK ;DRAW REPEAT BLOCK POP AF DEC A JR NZ,DRAWREP POP HL JR DOTUNNEL ENDTUNNEL LD A,(HLI) ;END BLOCK NUMBER ADD A,A ADD A,A LD C,A LD A,1 CALL DRAWBLOCK PUTCHERRY LD A,(HLI) CP -1 RET Z LD D,A LD E,(HL) INC HL LD C,LETTERHI ;DE=LETTER GRAPHIC ADD A,2 LD (LETLOW),A LD A,B ;PLACE INTO ALL 3 GRAPHICS... ADD A,EXPHS0 CALL PUTLINE LD A,B ADD A,EXPHS1 CALL PUTLINE LD A,B ADD A,EXPHS2 PUTLINE LD A,(DE) ;DO LEFT SIDE AND %11110000 SWAP A LD C,A LD A,(HL) AND %11110000 OR C LD (HLI),A INC E LD A,(DE) AND %11110000 SWAP A LD C,A LD A,(HL) AND %11110000 OR C LD (HL),A LD A,L ADD A,32 LD L,A ADC A,H SUB L LD H,A LD A,(DE) ;DO RIGHT SIDE AND %00001111 SWAP A LD C,A LD A,(HL) AND %00001111 OR C LD (HLD),A DEC E LD A,(DE) AND %00001111 SWAP A LD C,A LD A,(HL) AND %00001111 OR C LD (HL),A RET ;*************************************************************************** KEYS LD A,$20 ;READ CURSOR PAD LD (PORT),A LD A,(PORT) LD A,(PORT) CPL AND %1111 SWAP A LD C,A LD A,$10 LD (PORT),A LD A,(PORT) LD A,(PORT) LD A,(PORT) LD A,(PORT) LD A,(PORT) LD A,(PORT) CPL AND %1111 ADD A,C LD C,A LD (KEYPRESS),A LD A,$30 LD (PORT),A LD A,C RET ;***************************************************************************** ;SCREEN ADDR ROUTINES... PIXAD SRL H SRL H SRL H SRL H RR L SRL H RR L SRL H RR L LD A,H ADD A,>DISPSCREEN LD H,A RET GETMAPHI SRL H SRL H SRL H SRL H RR L SRL H RR L SRL H RR L LD A,H ADD A,>BACKSCREEN LD H,A RET GETMAPLODE SRL D RRA SRL D RRA SRL D RRA AND %11100000 ADD A,E LD E,A LD A,D ADD A,>BACKSCREEN LD D,A RET GETMAPLO SRL H RRA SRL H RRA SRL H RRA AND %11100000 ADD A,L LD L,A LD A,H ADD A,>BACKSCREEN LD H,A RET GETBYTEHI LD A,L SWAP A AND %00001111 LD L,A LD A,H AND %11110000 ADD A,L LD L,A LD H,>BYTESCREEN RET GETBYTELO LD A,H SRL A SWAP A SRL L ADD A,L LD L,A LD H,>BYTESCREEN RET LOWAD SRL H RRA SRL H RRA SRL H RRA AND %11100000 ADD A,L LD L,A LD A,H ADD A,>DISPSCREEN LD H,A RET ;***************************************************************************** WAITBLANK LD A,144 WAITSYNC LD (LYC),A WAITSC LD A,(STAT) BIT 2,A JR Z,WAITSC RET ;***************************************************************************** RESETOBJ LD HL,OBJDATA CALL RESETOB LD HL,GAMEOBJ CALL RESETOB LD HL,STATUSOBJ RESETOB LD B,40 LD A,8*31 RESETO LD (HLI),A LD (HLI),A LD (HL),0 INC L LD (HL),0 INC L DEC B JR NZ,RESETO RET ;***************************************************************************** RAND LD HL,RND1 LD A,(HLI) LD E,A LD A,(HLI) LD D,A LD A,(DIV) XOR (HL) XOR E XOR D RLCA RLCA RLCA SRL E SRL D LD (HL),D DEC L LD (HL),E DEC L LD (HL),A RET ;*************************************************************************** ;TEXT ROUTINES... ;HL=STRING PRINTEXT LD A,(HLI) ;LENGTH OR A RET Z LD B,A LD E,(HL) ;DE=SCRN ADDR INC HL LD D,(HL) INC HL TEXTL LD A,(HLI) ;0=EXIT LD (DE),A INC E DEC B JR NZ,TEXTL JR PRINTEXT ;HL=DATA DE=SCRN ADDR PRINTSHAPE LD C,(HL) ;XSIZE INC HL LD B,(HL) ;YSIZE INC HL YROWS PUSH BC PUSH DE XROWS LD A,(HLI) LD (DE),A INC E DEC C JR NZ,XROWS POP DE POP BC LD A,E ADD A,$20 LD E,A ADC A,D SUB E LD D,A DEC B JR NZ,YROWS RET ;*************************************************************************** ;DIVIDE HL/BC (BC MUST BE NEGATIVE!) RETS BC=RESULT HL=REMAINDER DIVIDE PUSH DE LD DE,-1 DIVE INC DE ADD HL,BC JR C,DIVE LD C,E LD B,D POP DE RET ;*************************************************************************** CREATESET LD E,(HL) ;DE=DEST INC HL LD A,(HLI) LD D,A OR E RET Z LD C,(HL) ;BC=LEN INC HL LD B,(HL) INC HL LD A,(HLI) PUSH HL LD H,(HL) LD L,A CALL SHUNT POP HL INC HL JR CREATESET CLEARSET LD HL,OBJSET LD DE,OBJSET+1 LD BC,$1800-1 LD (HL),0 SHUNT LD A,(HLI) LD (DE),A INC DE DEC BC LD A,B OR C JR NZ,SHUNT RET ;*************************************************************************** ;VARIABLE DISPLAY ROUTINES... DISPBIN LD HL,STATSCREEN+32 LD B,8 DOBIN LD (HL),"0" RLCA JR NC,ISNONE LD (HL),"1" ISNONE INC L DEC B JR NZ,DOBIN RET ;***************************************************************************** CLEARSTAT LD HL,STATSCREEN JR CLEARS CLEARDISP LD HL,DISPSCREEN CLEARS LD BC,32*32 CLR LD (HL),$FF INC HL DEC BC LD A,B OR C JR NZ,CLR RET ;***************************************************************************** HEXBYTE LD HL,STATSCREEN+$20+19 JR PRHEX HEXWORD LD A,H PUSH AF LD A,L LD HL,STATSCREEN+$20+19 CALL PRHEX POP AF PRHEX LD C,A AND $F ADD A,HEXTAB LD A,(DE) LD (HLD),A LD A,C SWAP A AND $F ADD A,STATUSOBJ CALL BLITS CALL LOGOPULSE CALL WORKMENU CALL MENUOBJ CALL FLAGS CALL RAND CALL KEYS JR LOGOLOOP ;*************************************************************************** ;SUB MENU ROUTINES... WORKMENU LD A,(SUBMENU) ADD A,A ADD A,SUBMENUTAB LD A,(HLI) LD H,(HL) LD L,A CALL JPHL ;DO OPTION MENU LD A,(LOGTIME) ;CHANGE TITLE EFFECTS DEC A LD (LOGTIME),A RET NZ LD A,(LOGOSTATE) INC A AND 3 LD (LOGOSTATE),A RET ;--------------------------------------------------------------------------- EXITMENU POP AF POP AF ;RET ADDR CALL WAITBLANK XOR A LD (LCDC),A JP WAITNOK OPTIONS LD HL,STATUSOBJ LD A,(CONTOG) LD C,A LD A,(KEYPRESS) BIT 3,A ;'START' JR Z,NOGAME LD A,(CONTROL) CP 2 JR NZ,EXITMENU INC L LD (HL),$0D ;XNO INC L LD (HL),$11 ;GNO NEXTUP LD A,8*8 LD (SCRLCOUNT),A NEXTMENU LD A,(SUBMENU) INC A LD (SUBMENU),A RET NOGAME AND %11110100 ;CUR/SELECT LD A,(CONTROL) JR Z,NEWSEL LD C,0 JR NOSEL NEWSEL INC C DEC C JR NZ,NOSEL INC A LD C,A CP 3 JR NZ,SELWRP XOR A SELWRP LD (CONTROL),A NOSEL SWAP A ADD A,100 LD (HLI),A ;YNO LD (HL),$2C ;XNO INC L LD (HL),$08 ;GNO LD A,C LD (CONTOG),A RET ;--------------------------------------------------------------------------- UPMENU LD A,(MENUY) ;MENU MOVES UP INC A LD (MENUY),A LD C,A LD A,(SCRLCOUNT) DEC A LD (SCRLCOUNT),A JR Z,NEXTMENU HANDYMAN LD A,C CPL AND %00011111 ADD A,8*12 LD (STATUSOBJ),A LD A,C SRL A AND 15 ADD A,WAVETAB LD A,(HL) ADD A,$0D-4 LD (STATUSOBJ+1),A RET SKILEVEL SOUNDOPT LD A,(KEYPRESS) BIT 3,A ;'START' JR NZ,NEXTUP RET DWMENU LD A,(MENUY) ;MENU MOVES DOWN SUB 2 LD (MENUY),A LD C,A LD A,(SCRLCOUNT) DEC A LD (SCRLCOUNT),A JR NZ,HANDYMAN LD (SUBMENU),A RET ;*************************************************************************** ;THE LOGO SPECIAL FX... LOGOPULSE LD A,%11000011 ;DISPSCREEN LD (LCDC),A XOR A LD (SCY),A LD A,(RND1) LD C,A AND %11 CALL NZ,ANIHEAD LD A,(SPEEDFLAG) SRL A SRL A SRL A AND 1 ADD A,$18 LD HL,$16*$20+STATSCREEN+$0C LD (HLI),A INC L INC L ADD A,2 LD (HL),A LD A,(LOGOSTATE) ADD A,A ADD A,LOGOTAB LD A,(HLI) LD H,(HL) LD L,A CALL JPHL LD A,$48 CALL WAITSYNC XOR A LD (BGP),A LD (SCX),A LD A,(MENUY) ;CURRENT Y POS LD (SCY),A LD A,%11001011 ;STATSCREEN LD (LCDC),A LD E,FADETAB LD BC,$1049 FADE LD A,C INC C CALL WAITSYNC LD A,B ADD A,E LD L,A LD A,(HL) LD (BGP),A DEC B JR NZ,FADE RET ;--------------------------------------------------------------------------- LOGOON LD A,%11100100 LD (BGP),A LD HL,BYTESCREEN ;TEMP VARS LD BC,$4207 LOGON LD A,C INC C CALL WAITSYNC LD A,(HL) LD (SCX),A OR A JR Z,NOMOV INC A BIT 0,B JR Z,NOMOV SUB 2 NOMOV LD (HLI),A DEC B JR NZ,LOGON RET ;--------------------------------------------------------------------------- BARREL LD A,(SPEEDFLAG) AND 31 LD D,A LD E,WAVETAB LD BC,$4207 BARON INC D LD A,D AND 31 ADD A,E LD L,A LD A,C INC C CALL WAITSYNC LD A,(HL) LD (SCX),A DEC B JR NZ,BARON RET ;--------------------------------------------------------------------------- RASTARS LD A,(SPEEDFLAG) SRL A SRL A LD D,A LD E,PULSETAB LD BC,$4207 RASTAR LD A,C INC C CALL WAITSYNC INC D LD A,D AND 7 ADD A,E LD L,A LD A,(HL) LD (BGP),A DEC B JR NZ,RASTAR RET ;--------------------------------------------------------------------------- STARFALL LD A,66 CALL WAITSYNC LD A,(SPEEDFLAG) ;SETUP A STAR... AND %1111 ADD A,A ADD A,A ADD A,4*9+2 LD L,A LD H,>STATUSOBJ LD A,(HL) OR A RET NZ LD (HL),$8 ;GNO/TIME INC L LD A,(HL) XOR P1 LD (HLD),A DEC L LD A,(RND1) AND 127 ADD A,16+8 LD (HLD),A ;XNO LD A,(RND2) AND 63 ADD A,16+4 LD (HL),A ;YNO RET ;*************************************************************************** ;ANIMATE CHRMAPPED SCREEN... ANIHEAD ADD A,A ;ANIMATE SKILL FACES ADD A,A ADD A,FACEADTAB LD E,(HL) INC L LD D,(HL) INC L LD A,C SRL A SRL A AND %1 ADD A,L LD L,A LD A,(HL) LD (DE),A INC E INC A LD (DE),A INC A LD HL,32-1 ADD HL,DE LD (HLI),A INC A LD (HL),A RET ;*************************************************************************** ;WORK THE MENU SPRITES... MENUOBJ LD HL,STATUSOBJ LD D,(HL) ;YNO INC L LD E,(HL) ;XNO INC L LD C,(HL) DEC L DEC L CALL DUMP3BY3 ;DO HAND LD BC,$1000 LD A,(SPEEDFLAG) AND %11 JR NZ,WORKSTAR INC C WORKSTAR LD A,B AND 3 ADD A,(HL) LD (HLI),A ;FALLING STAR INC L LD A,(HL) ;DECREASE GNO OR A JR Z,STAROFF SUB C STAROFF LD (HLI),A INC L DEC B JR NZ,WORKSTAR ;WORK THE LITTLE BLOB THING!... PUSH HL LD A,(TOGGLE) LD C,A LD A,(BLOBSINE) ADD A,C LD C,A LD A,(BLOBY) ADD A,C LD (BLOBY),A LD E,A CP 17*8+4 LD A,C JR C,NOBOW LD A,(RND1) AND 7 SUB 4 LD (BLOBXSD),A LD A,(RND2) AND 7 SUB 8 NOBOW LD (BLOBSINE),A LD A,(BLOBXSD) LD D,A LD A,(BLOBX) ADD A,D LD (BLOBX),A LD D,A LD A,GHOSTG JP DUMP2BY2S ;--------------------------------------------------------------------------- DUMP3BY3 LD (HL),D ;YNO INC L LD A,E LD (HLI),A ;XNO LD (HL),C ;GNO INC C INC L LD (HL),0 ;FLG INC L LD (HL),D INC L ADD A,8 LD (HLI),A LD (HL),C INC C INC L LD (HL),0 INC L LD (HL),D INC L ADD A,8 LD (HLI),A LD (HL),C INC C INC L LD (HL),0 INC L LD A,D ADD A,8 LD D,A LD (HLI),A ;YNO LD A,E LD (HLI),A ;XNO LD (HL),C ;GNO INC C INC L LD (HL),0 ;FLG INC L LD (HL),D INC L ADD A,8 LD (HLI),A LD (HL),C INC C INC L LD (HL),0 INC L LD (HL),D INC L ADD A,8 LD (HLI),A LD (HL),C INC C INC L LD (HL),0 INC L LD A,D ADD A,8 LD D,A LD (HLI),A ;YNO LD A,E LD (HLI),A ;XNO LD (HL),C ;GNO INC C INC L LD (HL),0 ;FLG INC L LD (HL),D INC L ADD A,8 LD (HLI),A LD (HL),C INC C INC L LD (HL),0 INC L LD (HL),D INC L ADD A,8 LD (HLI),A LD (HL),C INC C INC L LD (HL),0 INC L RET ;*************************************************************************** ;*************************************************************************** ;HERE'S A LATE RESULT... ;DISPLAY+RESET LAST 3 LEVEL SCORES&TIMES/ADD TO RUNNING TOTAL... SHOWRESULTS LD A,(LEVEL) DEC A CALL BOARDLINED ;PRINT SCORE BOARD CALL BOARDLINE CALL BOARDLINE CALL TOTOTAL ;ADD TO TOTAL... LD HL,RESTEXT CALL PRINTEXT LD HL,BOARDTAB ;CHANGE GRAPHIC SET CALL CREATESET XOR A LD (SCXT),A ;SCRNX LD (SUBMENU),A ;MODE ;SETUP 'BIG' SPRITES... LD B,3 LD HL,SETBIGTAB ;BIG SPRITES LD D,>STATUSOBJ SETBIG LD E,(HL) ;OFFSET INC HL LD A,(HLI) ;YNO LD (DE),A INC E LD A,(HLI) ;XNO LD (DE),A INC E INC E XOR A LD (DE),A DEC B JR NZ,SETBIG ;SETUP 'FINISHED' SPRITES... LD HL,27*4+STATUSOBJ ;FINISH SPRITES LD DE,$1C90 LD A,(0*BRDLEN+SCORE+8) CALL DUMPENDOBJ LD D,$2C LD A,(1*BRDLEN+SCORE+8) CALL DUMPENDOBJ LD D,$3C LD A,(2*BRDLEN+SCORE+8) CALL DUMPENDOBJ LD B,3 CALL RESETBOARD ;RESET LAST 3 RESLOOP CALL WAITBLANK LD A,>STATUSOBJ CALL BLITS LD HL,BIGAPPLE1 XOR A ;NO SCROLL UP TOP LD (SCX),A LD A,(SPEEDFLAG) ;ANIMATE APPLE AND %100 JR Z,APLM LD HL,BIGAPPLE2 APLM LD DE,$20*13+STATSCREEN+$18 CALL PRINTSHAPE LD A,%11000011 LD (LCDC),A LD A,%11100100 LD (BGP),A LD A,8*08 ;SPLIT SCREENS CALL WAITSYNC LD A,(SPEEDFLAG) SRL A AND 7 ADD A,PULSETAB LD A,(HL) AND %11000000 LD L,A SRL A SRL A OR L SRL A SRL A OR L LD (BGP),A LD A,8*10 CALL WAITSYNC LD A,%11001011 LD (LCDC),A LD A,%11100100 LD (BGP),A CALL WORKWELL CALL DUMPBIG CALL FLAGS JR RESLOOP ;--------------------------------------------------------------------------- WORKWELL LD A,(SUBMENU) ADD A,A ADD A,WELLTAB LD A,(HLI) LD H,(HL) LD L,A CALL JPHL LD A,(SCXT) LD (SCX),A RET EMOVE LD A,(STATUSOBJ+BIGEXTRA+1) INC A LD (STATUSOBJ+BIGEXTRA+1),A CP 10*8-4 RET NZ UPWELLY LD A,60*3 LD (SCRLCOUNT),A UPWELL LD A,(SUBMENU) INC A LD (SUBMENU),A RET ALLWAIT LD A,(SCRLCOUNT) DEC A LD (SCRLCOUNT),A JR Z,UPWELL RET ALLMOVE LD A,(STATUSOBJ+BIGEXTRA+1) INC A LD (STATUSOBJ+BIGEXTRA+1),A DODIMOVE LD A,(SCXT) DEC A LD (SCXT),A LD A,(STATUSOBJ+BIGDINO+1) INC A LD (STATUSOBJ+BIGDINO+1),A LD A,(STATUSOBJ+BIGMRDO+1) INC A LD (STATUSOBJ+BIGMRDO+1),A CP 8*6 JR Z,UPWELLY ;IN MIDDLE? CP 8*21 RET NZ ;OFF EDGE? POP AF ;THEN EXIT POP AF CALL WAITBLANK XOR A LD (LCDC),A RET ;--------------------------------------------------------------------------- DUMPBIG LD HL,STATUSOBJ LD A,(SPEEDFLAG) SRL A SRL A SRL A AND %11 LD C,A ADD A,A ADD A,A ADD A,A ADD A,C LD B,3 DUMPBG LD C,A LD D,(HL) ;YNO INC L LD E,(HL) ;XNO DEC L CALL DUMP3BY3 LD A,C ADD A,$24-9 DEC B JR NZ,DUMPBG RET ;*************************************************************************** ;DISPLAY+RESET LAST LEVEL SCORE&TIME/ADD TO RUNNING TOTAL/SHOW AVERAGE... SHOWAVERAGES LD A,(LEVEL) INC A CALL BOARDLINED CALL TOTOTAL ;ADD TO TOTAL... LD DE,TOTAL LD HL,5*$20+DISPSCREEN+8 PUSH DE CALL DUMPDIGIT POP DE LD HL,7*$20+DISPSCREEN+8 LD (HL),"0" INC L LD C,5 PUTAVER LD A,(DE) LD (HLI),A INC E DEC C JR NZ,PUTAVER INC E INC L ;AVERAGE TIME... PUSH HL LD A,(DE) LD L,A INC E LD A,(DE) LD H,A ;TOTAL TIME INC E LD A,(DE) ;END OBJ LD D,A LD BC,-10 CALL DIVIDE LD L,C LD H,B LD BC,-60 CALL DIVIDE LD A,C LD BC,60 ADD HL,BC LD E,L POP HL CALL PRDECDIGITS ;PRINT MINUTES INC L LD (HL),";" INC L LD A,E CALL PRDECDIGITS ;PRINT SECONDS LD A,D LD HL,STATUSOBJ ;FINISH SPRITE LD DE,$1C90 CALL DUMPENDOBJ LD B,4 CALL RESETBOARD ;RESET LAST 4 LD HL,AVRTEXT CALL PRINTEXT LD HL,BOARDTAB ;CHANGE GRAPHIC SET CALL CREATESET LD A,%11000011 LD (LCDC),A AVELOOP CALL WAITBLANK LD A,>STATUSOBJ CALL BLITS CALL KEYS AND %1000 JR Z,AVELOOP CALL WAITBLANK XOR A LD (LCDC),A JP START ;--------------------------------------------------------------------------- RESETBOARD LD HL,SCORE ;RESET LAST 3 LEVELS LD A,"0" RESETB LD (HLI),A ;RESET SCORE DIGITS LD (HLI),A LD (HLI),A LD (HLI),A LD (HLI),A LD (HLI),A LD (HL),0 ;RESET TIMER INC L LD (HL),0 INC L LD (HL),0 ;RESET END OBJ INC L DEC B JR NZ,RESETB RET BOARDLINED LD E,A XOR A LD (SCX),A LD (SCY),A LD (TALLOFF),A LD A,%11100100 LD (OBP0),A CALL CLEARDISP CALL CLEARSTAT CALL RESETOBJ LD A,E LD DE,SCORE ;PLACE LEVEL SCORE LD HL,2*$20+DISPSCREEN+1 BOARDLINE PUSH AF ;WAVE NUMBER CALL PRDECDIGITS INC L INC L CALL DUMPDIGIT LD A,$40-14 ADD A,L LD L,A POP AF INC A RET DUMPDIGIT LD C,6 PUTSCORE LD A,(DE) LD (HLI),A INC E DEC C JR NZ,PUTSCORE INC L PUSH HL LD A,(DE) LD L,A INC E LD A,(DE) LD H,A INC E LD BC,-60 CALL DIVIDE LD A,C LD BC,60 ADD HL,BC LD D,L POP HL CALL PRDECDIGITS ;PRINT MINUTES INC L LD (HL),";" INC L INC E ;IGNORE END OBJ LD A,D LD D,>SCORE JP PRDECDIGITS ;ADD LEVEL SCORE TO RUNNING TOTAL... TOTOTAL LD DE,SCORE LD B,3 UPTOTAL LD HL,TOTAL LD C,6 DIGITADD LD A,(DE) SUB "0" CALL UPSCORE INC L INC E DEC C JR NZ,DIGITADD INC E ;IGNORE TIMER INC E INC E ;IGNORE END OBJ DEC B JR NZ,UPTOTAL RET DUMPENDOBJ ADD A,A ADD A,A ADD A,$6C LD C,A DUMP2BY2SEQU LD (HL),D INC L LD A,E LD (HLI),A LD (HL),C INC L LD (HL),0 INC L INC C LD (HL),D INC L ADD A,8 LD (HLI),A LD (HL),C INC L LD (HL),0 INC L INC C LD A,D ADD A,8 LD (HLI),A LD (HL),E INC L LD (HL),C INC L LD (HL),0 INC L INC C LD (HLI),A LD A,E ADD A,8 LD (HLI),A LD (HL),C INC L LD (HL),0 INC L RET ;*************************************************************************** ;HIGHSCORES... ENTRIES EQU 8 DIGTOT EQU 6 INITOT EQU 3 VARTOT EQU 3 LINELEN EQU DIGTOT+INITOT+VARTOT RANKCHR EQU 0 CHECKHIGH LD DE,HIGHTAB LD B,ENTRIES CHECKLINE PUSH DE LD HL,REALSCORE LD C,DIGTOT CHECKCHR LD A,(DE) CP (HL) ;HIGH-SCORE JR C,ISBIG JR NZ,NEXTLINE INC E INC L DEC C JR NZ,CHECKCHR NEXTLINE POP DE LD A,E ADD A,LINELEN LD E,A DEC B JR NZ,CHECKLINE RET ISBIG POP DE ;SHUNT TABLE AND ENTER SCORE LD HL,HIGHTABEND+LINELEN-1 LD DE,HIGHBUFF+LINELEN-1 SHUNTALL LD C,LINELEN SHUNTLINE LD A,(HLD) LD (DE),A DEC E DEC C JR NZ,SHUNTLINE DEC B JR NZ,SHUNTALL INC HL LD DE,REALSCORE LD B,DIGTOT ;PLACE SCORE PUTDIG LD A,(DE) LD (HLI),A INC E DEC B JR NZ,PUTDIG LD A,-1 ;WIPE NAME LD (HLI),A LD (HLI),A LD (HLI),A LD A,(LEVEL) ;PLACE LEVEL INC A LD (HLI),A LD A,(TIMERTOTAL) ;AND TIME LD (HLI),A LD A,(TIMERTOTAL+1) LD (HL),A RET PRHIGHSCORES LD HL,$20*4+STATSCREEN LD DE,HIGHTAB LD A,ENTRIES PRHIGHS PUSH AF ADD A,RANKCHR LD (HLI),A ;PRINT RANK LD C,6 CALL PRHGH ;PRINT SCORE INC L LD C,3 CALL PRHGH ;PRINT NAME INC L LD A,(DE) INC E CALL PRDECDIGITS ;PRINT SCENE INC L INC L LD A,(DE) INC E PUSH DE PUSH HL LD L,A LD A,(DE) INC E LD H,A LD BC,-60 CALL DIVIDE LD A,C LD BC,+60 ADD HL,BC LD D,L POP HL CALL PRDECDIGITS ;PRINT MINUTES INC L LD (HL),";" INC L LD A,D LD D,>HIGHTAB CALL PRDECDIGITS ;PRINT SECONDS LD DE,$20-19 ADD HL,DE POP DE INC E POP AF DEC A JR NZ,PRHIGHS RET PRHGH LD A,(DE) ;PRINT SCORE/NAME LD (HLI),A INC E DEC C JR NZ,PRHGH RET ;*************************************************************************** END ;***************************************************************************