ZX81 Listing for starwars.p


ZX81 program listing for **STAR WARS**SLR/2017**

**STAR WARS**SLR/2017** (starwars.p)

A short animation using a sketch from 1983.


SYSTEM VARIABLES

PROG  : 16509
D-FILE: 20094
VARS  : 20887
E-LINE: 20888
STKBOT: 20888
STKEND: 20888


LEGEND

9999 means line number
PRINT means treat as KEYWORD P


PROGRAM LISTING

  10 REM **STAR WARS**SLR/2017**
  20 GOSUB 400
  30 LET SD1X=2
  40 LET SD1Z=.1
  50 LET SD2X=3
  60 LET SD2Z=.2
  70 FOR I=1 TO 15
  80 GOSUB 1000
  90 GOSUB 1100
 100 NEXT I
 110 GOSUB 500
 120 FOR I=1 TO 10
 130 GOSUB 1000
 140 IF RND>.4 THEN GOSUB 1200
 150 GOSUB 1100
 160 NEXT I
 170 GOSUB 1400
 180 FOR I=1 TO 15
 190 GOSUB 1000
 200 GOSUB 1100
 210 NEXT I
 220 GOSUB 1600
 230 RUN
 400 REM **PLANET**
 410 CLS
 420 PRINT TAB 23;"ô ³ ô  ô";
TAB 19;"· ô   ´² ö¶·";TAB 19;"  
  ±ô ´  ô¶";TAB 19;"ò ñ ò ôö´²  
¶";TAB 26;"¶·´² ö";TAB 27;"¶ ´ "
;TAB 19;"·     ô  ¶ö´²";TAB 19;"
´ñ     ·  · ´";TAB 29;"ô";TAB 27
;"ôò÷";TAB 30;"³";TAB 29;"µ õ";
TAB 30;"ó"
 430 RETURN
 500 REM **STAR DESTROYER**
 510 FOR X=20 TO 4 STEP -1
 520 LET ZEND=((21-X AND X>4)+(1
7 AND X<=4))
 530 PRINT AT X,22;"¸¸"
 540 IF ZEND>=2 THEN PRINT TAB 2
1;"¸¸¸¸"
 550 IF ZEND>=3 THEN PRINT TAB 2
1;" ºº "
 560 IF ZEND>=4 THEN PRINT TAB 2
1;"ö  ¶"
 570 IF ZEND>=5 THEN PRINT TAB 2
0;"·¹´óóô"
 580 IF ZEND>=6 THEN PRINT TAB 2
0;"ö¸µ ÷óô"
 590 IF ZEND>=7 THEN PRINT TAB 1
9;"·²º± ÷óóô"
 600 IF ZEND>=8 THEN PRINT TAB 1
9;"õ¸ µ õú òô"
 610 IF ZEND>=9 THEN PRINT TAB 1
7;"³óóóóóó÷óóó´"
 620 IF ZEND>=10 THEN PRINT TAB
13;"³³óó ³ ó÷´      !"
 630 IF ZEND>=11 THEN PRINT TAB
5;"³³³³ ÷¹ó!úúúúú  ²±³ñ ù µ!ù¸"
 640 IF ZEND>=12 THEN PRINT " ´÷
÷´÷ó  ´¹ ÷ó´´÷ ´´÷÷´¹¹÷´´´!!¸"
 650 IF ZEND>=13 THEN PRINT "²²²
ººò  ññ³²² ±²±³º³±±±³ ²±²±!!¸"
 660 IF ZEND>=14 THEN PRINT "   
  óóó󠲺³!ùùùùù  ÷´óô úò´!ú¸"
 670 IF ZEND>=15 THEN PRINT TAB
5;"        ó   ó÷´ó²±      !  "
 680 IF ZEND>=16 THEN PRINT TAB
13;"  ó     óóóó³³³± "
 690 IF ZEND>=17 THEN PRINT TAB
15;"               "
 700 NEXT X
 710 RETURN
 720 FOR Z=1 TO ZEND
 730 PRINT TAB S(Z);S$(Z, TO 32-
S(Z));
 740 NEXT Z
 750 NEXT X
 760 RETURN
1000 REM **MOVE DESTROYER1**
1010 PRINT AT SD1X,16;" ";TAB 15
;" º ";TAB 13;"  ö ¶ ";TAB 13;"³
±³º±!";TAB 13;" òóóó ";TAB 14;" 
   "
1020 REM IF RND>.2 THEN RETURN
1030 LET SD1X=SD1X+SD1Z
1040 IF (SD1X<1 OR SD1X>4) THEN
LET SD1Z=-SD1Z
1050 RETURN
1100 REM **MOVE DESTROYER2**
1110 PRINT AT SD2X,8;" ";TAB 7;"
 !";TAB 6;" ·´ ";TAB 2;"    ·óú¶
  ";TAB 0;"  ³³³³ñ²õõ´ù ";TAB 0;
" ºö³ó±¶³õ²µ¸!";TAB 0;"  óóóó¶ºó
³±ú ";TAB 2;"          "
1120 REM IF RND>.25 THEN RETURN
1130 LET SD2X=SD2X+SD2Z
1140 IF (SD2X<2 OR SD2X>6) THEN
LET SD2Z=-SD2Z
1150 RETURN
1200 REM **FIRE**
1210 LET LX=0
1220 LET LY=18+(1 AND RND>.5)
1230 LET LY=18+(1 AND RND>.5)
1240 LET LXZ=.2+.1*RND
1250 LET LYZ=2+2*RND
1260 PRINT AT 20+INT LX,LY;("úú"
AND (LX<.5 OR (LX>1 AND LX<1.5)
));("ùù" AND ((LX>=.5 AND LX<=1)
OR LX>=1.5))
1270 LET LXN=LX+LXZ
1280 LET LYN=LY-LYZ
1290 PRINT AT 20+INT LX,LY;"  "
1300 IF (LXN>1.9 OR LYN<0) THEN
RETURN
1310 LET LX=LXN
1320 LET LY=LYN
1330 GOTO 1260
1400 REM **REBEL**
1410 LET LY=2
1420 LET LXZ=.2
1430 LET LYZ=6/14
1440 FOR X=20 TO 16.8 STEP -.2
1450 IF INT X>=18 THEN PRINT AT
INT X,INT LY;" ±²º±"
1460 IF (INT X<20 AND INT X>16)
THEN PRINT AT 1+INT X,INT LY;" 
òñóò";
1470 IF INT X<19 THEN PRINT AT 2
+INT X,INT LY-1;"      "
1480 LET LY=LY+LYZ
1490 NEXT X
1500 RETURN
1600 REM **ENDING**
1610 FOR X=0 TO 21
1620 PRINT AT X,0;"             
                   ";
1630 NEXT X
1640 LET S$="STAR WARS"
1650 GOSUB 1800
1660 LET S$="A ZX81 DEMO"
1670 GOSUB 1800
1680 LET S$="BY"
1690 GOSUB 1800
1700 LET S$="STEVEN REID"
1710 GOSUB 1800
1720 LET S$="FROM 1983"
1730 GOSUB 1800
1740 LET S$="TO 2017"
1750 GOSUB 1800
1760 RETURN
1800 REM **SCROLL**
1810 LET L$="                   
             "
1820 LET LTH=LEN S$
1830 LET GRW=(30-LTH)/6
1840 FOR X=5 TO 0 STEP -1
1850 LET M$=L$
1860 LET SIZE=LTH+X*GRW
1870 LET SPC=SIZE/LTH
1880 LET CTR=(30-SIZE)/2
1890 FOR Y=1 TO LTH
1900 LET M$(CTR+Y*SPC)=S$(Y)
1910 NEXT Y
1920 PRINT AT 6+X*2,0;M$;AT 8+X*
2,0;L$
1930 NEXT X
1940 FOR Y=1 TO LTH
1950 LET M$(CTR+Y*SPC)=S$(Y)
1960 NEXT Y
1970 PRINT AT 6,0;L$
1980 RETURN
2000 SAVE "STARWARS"
2010 RUN