DIM SHARED a%(203) DEF SEG = VARSEG(a%(0)) FOR I% = 0 TO 205 READ d% POKE VARPTR(a%(0)) + I%, d% NEXT I% DATA &HB8,&H00,&H00 : ' 2 init mouse if [64]=FFFF succesfull, [66]=FFFF two buttons, [66]=3 3 buttons,[66]=0 <> 2 buttons DATA &HCD,&H33 : ' 4 DATA &H2E : ' 5 DATA &HA3,&H64,&H00 : ' 8 DATA &H2E : ' 9 DATA &H89,&H1E,&H66,&H00 : ' 13 DATA &HCB : ' 14 DATA &HB8,&H01,&H00 : ' 17 show mouse cursor DATA &HCD,&H33 : ' 19 DATA &HCB : ' 20 DATA &HA1,&H00 : ' 22 hide mouse cursor DATA &H00,&H00,&H0A,&H00 : ' 26 DATA &H00,&H00,&H33,&H00 : ' 30 DATA &H00,&H00 : ' 32 DATA &H00 : ' 32 set position [64], [66] DATA &H00,&H00 : ' 34 DATA &HB8,&H04,&H00 : ' 37 DATA &H2E : ' 38 DATA &H8B,&H0E,&H64,&H00 : ' 42 DATA &H2E : ' 43 DATA &H8B,&H16,&H66,&H00 : ' 47 DATA &HCD,&H33 : ' 49 DATA &HCB : ' 50 DATA &HB8,&H07,&H00 : ' 53 set horizontal cursor range [64] to [66] DATA &H2E : ' 54 DATA &H8B,&H0E,&H64,&H00 : ' 58 DATA &H2E : ' 59 DATA &H8B,&H16,&H66,&H00 : ' 63 DATA &HCD,&H33 : ' 65 DATA &HCB : ' 66 DATA &HB8,&H08,&H00 : ' 69 set vertical cursor range DATA &H2E : ' 70 DATA &H8B,&H0E,&H64,&H00 : ' 74 DATA &H2E : ' 75 DATA &H8B,&H16,&H66,&H00 : ' 79 DATA &HCD,&H33 : ' 81 DATA &HCB : ' 82 DATA &HB8,&H0F,&H00 : ' 85 set pointer speed horiz.=[64] vert.=[66] DATA &H2E : ' 86 DATA &H8B,&H0E,&H64,&H00 : ' 90 DATA &H2E : ' 91 DATA &H8B,&H16,&H66,&H00 : ' 95 DATA &HCD,&H33 : ' 97 DATA &HCB : ' 98 DATA &H00,&H00,&H00,&H00,&H00 : ' 103 DATA &H00,&H00,&H00,&H00,&H00 : ' 108 DATA &H00,&H00,&H00,&H00,&H00 : ' 113 DATA &H00,&H00,&H00,&H00,&H00 : ' 118 DATA &H00,&H00,&H00,&H00,&H00 : ' 123 DATA &H00,&H00,&H00,&H00,&H00 : ' 128 DATA &H00,&H00,&H00,&H00,&H00 : ' 133 DATA &H00,&H00,&H00,&H00,&H00 : ' 138 DATA &H00,&H00,&H00,&H00,&H00 : ' 143 DATA &H00,&H00,&H00,&H00,&H00 : ' 148 DATA &HB8,&H10,&H00 : ' 152 set pointer exclusion area upleftx=[64] uplefty=[66] lowrightx=[68] lowrighty=[70] DATA &H2E : ' 153 DATA &H8B,&H0E,&H64,&H00 : ' 157 DATA &H2E : ' 158 DATA &H8B,&H16,&H66,&H00 : ' 162 DATA &H2E : ' 163 DATA &H8B,&H36,&H68,&H00 : ' 167 DATA &H2E : ' 168 DATA &H8B,&H3E,&H70,&H00 : ' 172 DATA &HCD,&H33 : ' 174 DATA &HCB : ' 175 DATA &H2E : ' 176 mouse event handler DATA &H89,&H0E,&H80,&H00 : ' 180 DATA &H2E : ' 181 DATA &H89,&H16,&H82,&H00 : ' 185 DATA &H2E : ' 186 DATA &H89,&H1E,&H84,&H00 : ' 190 DATA &HCB : ' 191 DATA &HB8,&H0C,&H00 : ' 194 set mouse event handler DATA &H0E,&H07 : ' 196 DATA &HB9,&HFF,&HFF : ' 199 DATA &HBA,&HB0,&H00 : ' 202 DATA &HCD,&H33 : ' 204 DATA &HCB : ' 205 'vara = VARPTR(a%(0)) SCREEN 12 CALL ABSOLUTE(VARPTR(a%(0)) + 0) CALL ABSOLUTE(VARPTR(a%(0)) + 192) SCREEN 12 RANDOMIZE (1) GRAVITY = 0 WIND = 0 DIM x(999) DIM y(999) DIM lx(999) DIM ly(999) DIM inerx(999) DIM inery(999) INPUT "MOMENTUM(56) %"; MOMENTUM INPUT "FRICTION(.01)"; FRICTION MOMENTUM = MOMENTUM / 100 MOMENTUM = 1 / MOMENTUM mx = 1 my = 1 CLS xpd = 1 ypd = 1 DO 'XP = 0 'yp = 0 xp = a%(64) yp = a%(65) 'LOCATE 1, 1 'PRINT xp; yp 'PRINT xpd 'PRINT ypd 'IF xp >= 639 - 320 THEN xpd = -1 'IF xp <= 0 - 320 THEN xpd = 1 'IF yp >= 479 - 240 THEN ypd = -1 'IF yp <= 0 - 240 THEN ypd = 1 lx(0) = x(0) ly(0) = y(0) x(0) = xp y(0) = yp 'LOCATE 1, 1 'PRINT WIND; GRAVITY; MOMENTUM; " " num = 30 K$ = UCASE$(INKEY$) IF K$ = "H" THEN WIND = WIND + 5 IF K$ = "S" THEN WIND = WIND - 5 IF K$ = "M" THEN GRAVITY = GRAVITY + .5 IF K$ = "L" THEN GRAVITY = GRAVITY - .5 'GRAVITY = 0 'WIND = 0 rnd1 = RND FOR calc = 1 TO num lx(calc) = x(calc) ly(calc) = y(calc) x(calc) = x(calc) + rnd1 * WIND + inerx(calc) y(calc) = y(calc) + GRAVITY + inery(calc) xd = x(calc) - x(calc - 1) yd = y(calc) - y(calc - 1) hyp = SQR(xd ^ 2 + yd ^ 2) IF hyp <> 0 THEN l = 5 xd = xd / hyp * l yd = yd / hyp * l ELSE xd = 1 yd = 0 END IF xl = xd + x(calc - 1) yl = yd + y(calc - 1) x(calc) = xl y(calc) = yl inerx(calc) = (x(calc) - lx(calc)) / (MOMENTUM + FRICTION) inery(calc) = (y(calc) - ly(calc)) / (MOMENTUM + FRICTION) NEXT calc LINE (lx(1), ly(1))-(xp, yp), 0 FOR draws = 1 TO num LINE (lx(draws - 1), ly(draws - 1))-(lx(draws), ly(draws)), 0 LINE (x(draws - 1), y(draws - 1))-(x(draws), y(draws)) NEXT draws IF TIMER - pausereprint >= 1 THEN LOCATE 1, 1 PRINT "press h to raise wind speed" PRINT "press s to lower wind speed" PRINT "press m to raise wind gravity" PRINT "press l to lower wind gravity" PRINT "press x to quit" pausereprint = TIMER END IF LOOP UNTIL K$ = "X"