Guest User

Untitled

a guest
Jul 6th, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.39 KB | None | 0 0
  1.  
  2. 100 REM BASIC Month: Terraspin
  3. 110 REM http://reddit.com/r/RetroBattlestations
  4. 120 REM written by FozzTexx - IBM PC port by FozzTexx
  5. 125 REM modifed for the TRS-80 Color Computer by swampyness
  6.  
  7. 130 REM IBM BASIC has bitwise operators so much of the line clipping
  8. 140 REM logic is simplified compared to the Apple II version.
  9.  
  10. 200 REM === Initialize variables
  11. 210 SW = 256:SH = 128:XS = SW / 1000:YS = (SH * 4) / (1000 * 3)
  12. 220 SW = SW - 1:SH = SH - 1
  13. 230 PI = 3.14159
  14.  
  15. 250 REM === Set turtle start at center of screen pointing up, pen up
  16. 260 TX = 500:TY = SH / YS / 2:TA = 90:TP = 0
  17.  
  18. 300 REM === Get command to execute
  19. ' 310 CM$="5 ( D 12 ( 210 M 5 ( 30 T 10 M ) ) U 100 T 150 M ) ": ' OG STAR
  20. ' 310 CM$="8 ( D 130 M 45 T ) ": ' OCTOGON
  21. ' 310 CM$="D 100 ( 250 M 89 T ) ": ' SQUARE RING
  22. 310 CM$ = "D 4 ( 8 ( 4 ( 90 T 170 M ) 180 T 170 M 315 T ) T 270 )": ' FLOWER BOX
  23.  
  24. 490 PMODE 3,1:SCREEN 1,0:PCLS 0:EE=1:COLOR EE
  25.  
  26. 500 REM === Command interpreter
  27. 510 IP = 1:SP = 0
  28. 520 C$ = MID$(CM$, IP, 1)
  29. 530 IF C$ = " " THEN IP = IP + 1:GOTO 520
  30. 540 IF C$ >= "-" AND C$ <= "9" THEN V = VAL(MID$(CM$, IP)):GOSUB 1010
  31. 550 IF C$ = "(" THEN V = IP:GOSUB 1010
  32. 560 IF C$ = ")" THEN GOSUB 2010
  33. 570 IF C$ = "M" THEN GOSUB 2510
  34. 580 IF C$ = "T" THEN GOSUB 3010
  35. 590 IF C$ = "U" THEN GOSUB 3510
  36. 600 IF C$ = "D" THEN GOSUB 4010
  37. 610 IP = IP + 1
  38. 620 IF IP > LEN(CM$) THEN GOSUB 7000
  39. 630 C$ = MID$(CM$, IP, 1)
  40. 640 IF C$ <> " " THEN GOTO 610
  41. 650 GOTO 520
  42.  
  43. 1000 REM === Push onto stack
  44. 1010 SP = SP + 1:SK(SP) = V
  45. 1020 RETURN
  46.  
  47. 1100 REM === Pop from stack
  48. 1110 V = SK(SP):SP = SP - 1
  49. 1115 IF SP = 0 THEN GOSUB 6000
  50. 1120 RETURN
  51.  
  52. 1500 REM === Plot a line
  53. 1510 LINE(X1,Y1)-(X2,Y2),PSET
  54. 1520 RETURN
  55.  
  56. 2000 REM === Loop instruction end
  57. 2010 GOSUB 1110:BP = V
  58. 2020 GOSUB 1110:LR = V
  59. 2030 LR = LR - 1
  60. 2040 IF LR < 1 THEN RETURN
  61. 2050 V = LR:GOSUB 1010
  62. 2060 V = BP:GOSUB 1010
  63. 2070 IP = BP
  64. 2080 RETURN
  65.  
  66. 2500 REM === Move
  67. 2510 GOSUB 1110
  68. 2520 LX = V * COS((360 - TA) * PI / 180):LY = V * SIN((360 - TA) * PI / 180)
  69.  
  70. 2530 IF TP > 0 THEN X1 = TX:Y1 = TY:X2 = X1 + LX:Y2 = Y1 + LY:GOSUB 4510
  71.  
  72. 2540 TX = TX + LX:TY = TY + LY
  73. 2550 RETURN
  74.  
  75. 3000 REM === Turn
  76. 3010 GOSUB 1110
  77. 3020 TA = TA + V
  78. 3030 IF TA < 0 THEN TA = TA + 360:GOTO 3030
  79. 3040 IF TA >= 360 THEN TA = TA - 360:GOTO 3040
  80. 3050 RETURN
  81.  
  82. 3500 REM === Pen up
  83. 3510 TP = 0
  84. 3520 RETURN
  85.  
  86. 4000 REM === Pen down
  87. 4010 TP = 1
  88. 4020 RETURN
  89.  
  90. 4500 REM === Draw line, clipping if needed
  91. 4510 X1 = X1 * XS:X2 = X2 * XS:Y1 = Y1 * YS:Y2 = Y2 * YS
  92. 4520 X = X1:Y = Y1:GOSUB 5010:C1 = C
  93. 4530 X = X2:Y = Y2:GOSUB 5010:C2 = C
  94. 4540 IF C1 = 0 AND C2 = 0 THEN GOSUB 1510:RETURN
  95. 4550 IF C1 AND C2 THEN RETURN
  96. 4560 C = C1:IF C = 0 THEN C = C2
  97. 4570 IF C AND 1 THEN X = X1 + (X2 - X1) * (SH - Y1) / (Y2 - Y1):Y = SH:GOTO 4610
  98.  
  99. 4580 IF C AND 2 THEN X = X1 + (X2 - X1) * (0 - Y1) / (Y2 - Y1):Y = 0:GOTO 4610
  100.  
  101. 4590 IF C AND 4 THEN Y = Y1 + (Y2 - Y1) * (SW - X1) / (X2 - X1):X = SW:GOTO 4610
  102.  
  103. 4600 IF C AND 8 THEN Y = Y1 + (Y2 - Y1) * (0 - X1) / (X2 - X1):X = 0:GOTO 4610
  104.  
  105. 4610 IF C = C1 THEN X1 = X:Y1 = Y:GOTO 4630
  106. 4620 X2 = X:Y2 = Y
  107. 4630 GOTO 4520
  108.  
  109. 5000 REM === Calculate region code
  110. 5010 C = 0
  111. 5020 IF Y > SH THEN C = C OR 1
  112. 5030 IF Y < 0 THEN C = C OR 2
  113. 5040 IF X > SW THEN C = C OR 4
  114. 5050 IF X < 0 THEN C = C OR 8
  115. 5060 RETURN
  116.  
  117. 6000 REM === Change pen color
  118. 6010 EE=EE+1:IF EE=4 THEN EE=1
  119. 6020 COLOR EE,3
  120. 6030 RETURN
  121.  
  122. 7000 REM ==== Preview
  123. 7010 GOTO 7010
Add Comment
Please, Sign In to add comment