''' BEGIN HEX INITIALIZE CODE ''' RANDOMIZE TIMER ON RASTER CALL HEX_RASTER REM WAS8BIT GLOBAL HEX_DENT,HEX_XCURSOR,HEX_YCURSOR,HEX_FLASH,HEX_COM,HEX_XPUT,HEX_YPUT DIM GLOBAL HEXDAT_PROXIMITY(6),HEXDAT_XPROX(6),HEXDAT_YPROX(6) DIM GLOBAL HEXDAT_RAYTRACE(20),HEXDAT_XRAY(20),HEXDAT_YRAY(20) DIM GLOBAL HEX_DX(6),HEX_DY(6) FOR I=1 TO 6 READ HEX_DX(I),HEX_DY(I) NEXT I DATA 1,-1, 1,0, 1,1, -1,1, -1,0, -1,-1 SPRITE 0,0,0,1 SPRITE 0 PAL 2 GAMEPAD 1 DIM GLOBAL HEX_MAP(40,15) CALL HEX_NEWMAP HEX_DENT=4 HEX_XCURSOR=0 HEX_YCURSOR=0 HEX_COM=0 HEX_FLASH=1 HEX_XPUT=0 HEX_YPUT=0 ''' END HEX INITIALIZE CODE ''' ''' BEGIN GAME CODE ''' EMPTY=8 NEWGAME: CALL HEX_NEWMAP FOR P=9 TO 10 II=0 WHILE II<30 C=10 WHILE (C<>8) Y=RND(15) X=RND(18) CALL HEX_GETPUT(X,Y) XP=HEX_XPUT YP=HEX_YPUT C=HEX_MAP(XP,YP) WEND IGO=1 CALL HEX_PROXIMITY(XP,YP) FOR I=1 TO 6 IF HEXDAT_PROXIMITY(I)>8 THEN IGO=0 NEXT I IF IGO=1 THEN HEX_MAP(XP,YP)=P INC II END IF WEND NEXT P CALL HEX_DRAWMAP PLAYER: SPRITE 0 PAL 2 DO IF BUTTON(0,0) THEN C=HEX_MAP(HEX_XCURSOR,HEX_YCURSOR) IF C=EMPTY THEN HEX_MAP(HEX_XCURSOR,HEX_YCURSOR)=9 PLAY 0,85,1 CALL HEX_DRAWMAP WAIT 30 GOTO COMPUTER END IF END IF CALL HEX_CURSOR_MOVE WAIT 6 LOOP COMPUTER: SPRITE 0 PAL 1 C=10 DO WHILE (C<>EMPTY) PLAY 0,90,1 Y=RND(15) X=RND(18) CALL HEX_GETPUT(X,Y) XP=HEX_XPUT YP=HEX_YPUT C=HEX_MAP(XP,YP) WEND HEX_XCURSOR=XP HEX_YCURSOR=YP IF RND(5)=0 THEN C=10 IF RND(25)=0 THEN HEX_MAP(HEX_XCURSOR,HEX_YCURSOR)=10 PLAY 0,80,1 CALL HEX_DRAWMAP WAIT 30 GOTO PLAYER END IF CALL HEX_CURSOR_MOVE WAIT 6 LOOP ''' END GAME CODE ''' ''' BEGIN HEX SUBS ''' SUB HEX_CURSOR_MOVE U=UP(0) D=DOWN(0) L=LEFT(0) R=RIGHT(0) DIR=0 IF U AND R THEN DIR=1 IF R AND (NOT U AND NOT D) THEN DIR=2 IF D AND R THEN DIR=3 IF D AND L THEN DIR=4 IF L AND (NOT U AND NOT D) THEN DIR=5 IF L AND U THEN DIR=6 IF HEX_COM>0 THEN DIR=HEX_COM OX=HEX_XCURSOR OY=HEX_YCURSOR ADD HEX_XCURSOR,HEX_DX(DIR) ADD HEX_YCURSOR,HEX_DY(DIR) IF HEX_DY(DIR)=0 THEN ADD HEX_XCURSOR,HEX_DX(DIR) IF HEX_XCURSOR<0 OR HEX_XCURSOR>37 OR HEX_YCURSOR<0 OR HEX_YCURSOR>15 THEN HEX_XCURSOR=OX HEX_YCURSOR=OY END IF ADD HEX_FLASH,1,1 TO 7 SPRITE 0,HEX_XCURSOR*4+2,HEX_YCURSOR*8,HEX_FLASH IF HEX_COM=0 THEN WAIT VBL END SUB SUB HEX_GETPUT(X,Y) IX=X*2 IY=Y IF (IY MOD 2)=1 THEN IX=IX+1 HEX_XPUT=IX HEX_YPUT=IY END SUB SUB HEX_PROXIMITY(X,Y) FOR I=1 TO 6 HEXDAT_PROXIMITY(I)=-1 IX=X+HEX_DX(I) IY=Y+HEX_DY(I) IF HEX_DY(I)=0 THEN IX=IX+HEX_DX(I) HEXDAT_XPROX(I)=IX HEXDAT_YPROX(I)=IY IF IX>=0 AND IY>=0 AND IX<=37 AND IY<=15 THEN HEXDAT_PROXIMITY(I)=HEX_MAP(IX,IY) NEXT I END SUB SUB HEX_RAYTRACE(X,Y,D) I=1 HEXDAT_RAYTRACE(I)=-1 IX=X IY=Y WHILE (IX>=0 AND IY>=0 AND IX<=39 AND IY<=15 ) AND I<20 IX=IX+HEX_DX(D) IY=IY+HEX_DY(D) IF HEX_DY(D)=0 THEN IX=IX+HEX_DX(D) HEXDAT_XRAY(I)=IX HEXDAT_YRAY(I)=IY IF IX>=0 AND IY>=0 AND IX<=39 AND IY<=15 THEN HEXDAT_RAYTRACE(I)=HEX_MAP(IX,IY) INC I HEXDAT_RAYTRACE(I)=-1 WEND END SUB SUB HEX_NEWMAP BG 1 FOR Y=0 TO 15 XX=Y MOD 2 FOR X=0 TO 36 STEP 2 HEX_MAP(X+XX,Y)=8 CELL X\2,Y,8 NEXT X NEXT Y END SUB SUB HEX_DRAWMAP BG 1 FOR Y=0 TO 15 FOR X=0 TO 38 M=HEX_MAP(X,Y) IF M>0 THEN CELL X\2,Y,M NEXT X NEXT Y END SUB SUB HEX_RASTER Y=RASTER MOD 8 IF Y=0 THEN ADD HEX_DENT,4,0 TO 4 SCROLL 1,-HEX_DENT-2,0 END SUB ''' END HEX SUBS #1:MAIN PALETTES 0500300C00302010000C0804003F3C00 003F2A15003F2A15003F2A15003F2A15 #2:MAIN CHARACTERS 00000000000000000000000000000000 3C42818101010200000201018181423C 3C0201010101021C004080808181423C 040201010181423C384080808080403C 000080818181423C3C42818080804020 304080808080423C3C42818181010000 3C428080808040303C4201010101020C 3C428181818000000C0201010101423C 55800198198001AA0000000000000000 021A5A3E1A182400021A5A3E1A182400 0000000000000000021A5A3E1A182400