10 REM DAN PINAL'S PM-STRING DEMO›20 REM FOR SANITY'S SAKE IF YOU INTEND TO OFFSET A STRING FROM ITS›25 REM ASSIGNED LOCATION REMEMBER:›30 REM 1: MAKE SURE THE STRING'S OFFSET WILL BE THE FIRST ONES FOUND›35 REM IN THE TABLE I.E. DIMENSION THEM FIRST›40 REM 2: OFFSET THE STRINGS BEFORE YOU PUT DATA IN THEM›50 REM 3: IF FOR SOME SOME REASEON YOU BLOW IT LIST THE PROGRAM TO›55 REM THE DISK,POWER DOWN AND ENTER IT BACK›60 REM START›70 GRAPHICS 0:CLR ›80 DIM P0$(256),P1$(256),P2$(256),P3$(256)›90 DIM S0$(16),S1$(16),S2$(16),S3$(16),X(3),Y(3),DX(3),DY(3)›100 POKE 106,PEEK(106)-8:GRAPHICS 3+16:PMBASE=PEEK(106):PLAYER0=PMBASE*256+1024›110 DLIST=PEEK(560)+256*PEEK(561)›120 SCREEN=PEEK(DLIST+4)+256*PEEK(DLIST+5)›130 STARP=PEEK(140)+256*PEEK(141)›140 VVTP=PEEK(134)+256*PEEK(135)›150 OFFSET=PLAYER0-STARP›160 REM TRICKS IT INTO PM AREA›170 FOR LI=2 TO 26 STEP 8›180 HI=INT(OFFSET/256):LO=OFFSET-HI*256›190 POKE VVTP+LI,LO:POKE VVTP+LI+1,HI›200 OFFSET=OFFSET+256›210 NEXT LI›220 REM TURN ON PLAYERS BUT TURN OFF PLAYFIELD›230 POKE 559,30:POKE 53277,3:POKE 54279,PMBASE›240 POKE 704,200:POKE 705,70:POKE 706,154:POKE 707,254›250 REM CLEAR OUT STRINGS›260 P0$="":P0$(256)="":P0$(2)=P0$›270 P1$="":P1$(256)="":P1$(2)=P1$›280 P2$="":P2$(256)="":P2$(2)=P2$›290 P3$="":P3$(256)="":P3$(2)=P3$›300 REM READ IN PLAYERS›310 FOR LI=0 TO 15:READ X:S0$(LI+1)=CHR$(X):NEXT LI›320 FOR LI=0 TO 15:READ X:S1$(LI+1)=CHR$(X):NEXT LI›330 FOR LI=0 TO 15:READ X:S2$(LI+1)=CHR$(X):NEXT LI›340 FOR LI=0 TO 15:READ X:S3$(LI+1)=CHR$(X):NEXT LI›350 REM EACH GETS INITIAL RANDOM VELOCITY - POSITION IS SET ON DIAGONAL›360 FOR LI=0 TO 3›370 N=2*RND(0):DX(LI)=N:IF INT(2*RND(0)) THEN DX(LI)=DX(LI)›380 N=2*RND(0):DY(LI)=N:IF INT(2*RND(0)) THEN DY(LI)=DY(LI)›390 X(LI)=48+30*LI:Y(LI)=32+40*LI›400 NEXT LI›410 FOR LI=0 TO 3›420 REM COLLISION TEST - IF COLLIDE REVERSE DIRECTION›430 IF PEEK(53260+LI) THEN DX(LI)=DX(LI):DY(LI)=DY(LI):SOUND LI,PEEK(53770),10,6›440 X(LI)=X(LI)+DX(LI):Y(LI)=Y(LI)+DY(LI)›450 REM REVERSE DIRECTION IF HITS PLAYFIELD BOUNDARY›460 IF X(LI)<48 THEN X(LI)=48:DX(LI)=ABS(DX(LI)):SOUND LI,PEEK(53770),10,6›470 IF X(LI)>183 THEN X(LI)=183:DX(LI)=ABS(DX(LI)):SOUND LI,PEEK(53770),10,6›480 IF Y(LI)<32 THEN Y(LI)=32:DY(LI)=ABS(DY(LI)):SOUND LI,PEEK(53770),10,6›490 IF Y(LI)>207 THEN Y(LI)=207:DY(LI)=ABS(DY(LI)):SOUND LI,PEEK(53770),10,6›500 POKE 53248+LI,X(LI):GOTO 520+LI›510 REM SHIFT STRINGS IN PM AREA›520 P0$(Y(LI))=S0$:GOTO 560›521 P1$(Y(LI))=S1$:GOTO 560›522 P2$(Y(LI))=S2$:GOTO 560›523 P3$(Y(LI))=S3$›560 SOUND LI,0,0,0:NEXT LI:POKE 53278,0:GOTO 410›1000 REM PLAYER DATA›1010 DATA 0,0,60,126,118,231,247,247,247,247,247,118,126,60,0,0›1020 DATA 0,0,60,126,102,219,251,251,247,239,223,66,126,60,0,0›1030 DATA 0,0,60,126,66,247,239,199,251,251,219,102,126,60,0,0›1040 DATA 0,0,60,126,102,231,215,215,195,247,247,118,126,60,0,0›