Advertisement
Guest User

Fire effect (broader base) (BB4W & BBCSDL 32-bit)

a guest
Dec 28th, 2017
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.04 KB | None | 0 0
  1. REM Fire effect (frame-rate independent)
  2. REM Works with BB4W and BBCSDL
  3.  
  4. ON ERROR PROCerror
  5.  
  6. N% = 1000 : REM number of fire particles
  7.  
  8. Wait% = FALSE
  9.  
  10. REM -------------------------------------
  11. BB4W% = (INKEY(-256) == &57)
  12. IF BB4W% THEN
  13. *ESC OFF
  14. GetTicks$ = "GetTickCount"
  15. SetWindowText$ = "SetWindowText"
  16. ELSE
  17. GetTicks$ = "SDL_GetTicks"
  18. SetWindowText$ = "SDL_SetWindowTitle"
  19. ENDIF
  20. REM -------------------------------------
  21. REM This code segment is the work of RTR:
  22. p = PI
  23. CASE !^p OF
  24. WHEN &2168C235: cpu$ = "x86"
  25. WHEN &54442D18: cpu$ = "arm"
  26. OTHERWISE: QUIT
  27. ENDCASE
  28. REM -------------------------------------
  29.  
  30. WinW% = 360
  31. WinH% = 640
  32. VDU 23, 22, WinW%; WinH%; 8, 16, 16, 0 : OFF
  33.  
  34. ClipBitmap% = FNread_data( "clipbitmap_" + cpu$ )
  35. Clr% = FNread_data( "clr8_360x640_" + cpu$ )
  36. Plot% = FNread_data( "plot8_incbgpixels_" + cpu$ )
  37.  
  38. bmpSz% = 54 + 4*256 + WinW%*WinH% + 2
  39. DIM bmp% bmpSz%+6
  40. bmp% = ((bmp% + 3) AND -4) + 2
  41. bmp%?0 = ASC"B"
  42. bmp%?1 = ASC"M"
  43. bmp%!2 = bmpSz%
  44. bmp%!10 = 1078
  45. bmp%!14 = 40
  46. bmp%!18 = WinW%
  47. bmp%!22 = WinH%
  48. bmp%?26 = 1
  49. bmp%?28 = 8
  50. bmp%!30 = 0
  51. bmp%!34 = WinW%*WinH%
  52.  
  53. bmp$ = STR$~bmp%
  54.  
  55. RESTORE
  56.  
  57. FOR I% = 0 TO 255
  58. READ rgb%
  59. r& = rgb% >> 16
  60. g& = rgb% >> 8
  61. b& = rgb%
  62. bmp%!(54 + 4*I%) = b& + (g&<<8) + (r&<<16)
  63. NEXT I%
  64.  
  65. REM create the fire blob/particle sprite:
  66. sprSz% = 49 : REM 49x49 at 8 bits-per-pixel
  67. DIM spr% sprSz%^2
  68. FOR Y% = 0 TO sprSz%-1
  69. FOR X% = 0 TO sprSz%-1
  70. d = SQR( (sprSz%/2 - X%)^2 + (sprSz%/2 - Y%)^2 )
  71. IF d < sprSz%/2 THEN
  72. spr%?(sprSz%*Y% + X%) = 255
  73. ENDIF
  74. NEXT
  75. NEXT
  76.  
  77. DIM x%(N%-1), Y%(N%-1), y(N%-1), yv(N%-1), ya(N%-1)
  78.  
  79. REM x%() is particle X co-ordinate
  80. REM y() is the current Y co-ordinate of the particle
  81. REM Y%() is maximum allowed Y co-ordinate before particle is reset
  82. REM yv() is Y velocity
  83. REM ya() is Y acceleration
  84.  
  85. REM Initialize all the fire blobs:
  86. FOR I% = 0 TO N%-1
  87. PROCnew
  88. NEXT
  89.  
  90. clipVars% = FNmalloc( 64 )
  91. bfVars% = FNmalloc( 16 )
  92. bmVars% = FNmalloc( 32 )
  93.  
  94. clipVars%!0 = ClipBitmap%
  95.  
  96. bfVars%!0 = bmp% + bmp%!10
  97. bfVars%!4 = WinW%
  98. bfVars%!8 = WinH%
  99.  
  100. bmVars%!0 = spr%
  101. bmVars%!4 = sprSz%
  102. bmVars%!8 = sprSz%
  103.  
  104. X% = bmVars% + 12
  105. Y% = bmVars% + 16
  106. K% = sprSz% / 2
  107. P% = Plot%
  108.  
  109. SYS GetTicks$ TO time0%
  110.  
  111. REPEAT
  112.  
  113. SYS GetTicks$ TO time1%
  114. dt = time1% - time0%
  115. time0% = time1%
  116.  
  117. A% = !bfVars% : B% = 0 : CALL Clr%
  118.  
  119. A% = clipVars%
  120. B% = bfVars%
  121. C% = bmVars%
  122.  
  123. FOR I% = 0 TO N%-1
  124. !X% = x%(I%)-K%
  125. !Y% = y(I%)-K%
  126. CALL P%
  127. IF y(I%) > Y%(I%) THEN
  128. PROCnew
  129. ENDIF
  130. y(I%) += yv(I%) * dt
  131. yv(I%) += ya(I%) * dt
  132. NEXT
  133.  
  134. OSCLI "MDISPLAY " + bmp$
  135.  
  136. IF Wait% THEN WAIT 1
  137.  
  138. UNTIL FALSE
  139. END
  140.  
  141. DEF PROCnew
  142. x%(I%) = WinW%/2 + 48*SQR(-2*LNRND(1))*COS(2*PI*RND(1))
  143. y(I%) = 16*RND(1)*COS(2*PI*RND(1))
  144. Y%(I%) = 64+RND(WinH%-64)
  145. ya(I%) = 0.0001 + 0.00075*RND(1)
  146. yv(I%) = ya(I%)*RND(100)
  147. ENDPROC
  148.  
  149. DEF FNmalloc( N% )
  150. LOCAL A%
  151. DIM A% N%+15
  152. A% = (A% + 7) AND -8
  153. = A%
  154.  
  155. DEF FNread_data( r$ )
  156. LOCAL I%, data%, byte%, s$
  157. data% = FNmalloc( 1024 )
  158. RESTORE
  159. REPEAT : READ s$ : UNTIL s$ = r$
  160. I% = 0
  161. REPEAT
  162. READ byte%
  163. IF byte% <> -1 THEN
  164. data%?I% = byte%
  165. I% += 1
  166. ENDIF
  167. UNTIL byte% = -1
  168. = data%
  169.  
  170. DEF PROCerror
  171. BB4W% += 0
  172. IF ERR=17 AND BB4W%=FALSE THEN CHAIN @lib$+"../examples/tools/touchide"
  173. OSCLI "REFRESH ON" : CLS : ON : SOUND 1, -15, 200, 3
  174. COLOUR 15, 255, 255, 255 : COLOUR 15
  175. PRINT '" " + REPORT$ + " at line " + STR$ERL
  176. COLOUR 15, 200, 200, 200
  177. PRINT ''" Closing in 3 seconds...";
  178. WAIT 300
  179. QUIT
  180. ENDPROC
  181.  
  182. DATA &60000
  183. DATA &E0000
  184. DATA &170000
  185. DATA &210000
  186. DATA &2C0000
  187. DATA &380000
  188. DATA &440000
  189. DATA &510000
  190. DATA &5F0000
  191. DATA &6D0000
  192. DATA &7B0000
  193. DATA &880000
  194. DATA &940000
  195. DATA &A00000
  196. DATA &AD0000
  197. DATA &B80000
  198. DATA &C40000
  199. DATA &CF0000
  200. DATA &D90000
  201. DATA &E20000
  202. DATA &EA0000
  203. DATA &F20000
  204. DATA &F90000
  205. DATA &FF0000
  206. DATA &FF0500
  207. DATA &FF0A00
  208. DATA &FF1100
  209. DATA &FF1800
  210. DATA &FF1F00
  211. DATA &FF2800
  212. DATA &FF3100
  213. DATA &FF3A00
  214. DATA &FF4400
  215. DATA &FF4E00
  216. DATA &FF5900
  217. DATA &FF6300
  218. DATA &FF6E00
  219. DATA &FF7900
  220. DATA &FF8200
  221. DATA &FF8800
  222. DATA &FF8E00
  223. DATA &FF9400
  224. DATA &FF9900
  225. DATA &FF9F00
  226. DATA &FFA500
  227. DATA &FFAA00
  228. DATA &FFB000
  229. DATA &FFB600
  230. DATA &FFBB00
  231. DATA &FFC000
  232. DATA &FFC600
  233. DATA &FFCB00
  234. DATA &FFD000
  235. DATA &FFD400
  236. DATA &FFD900
  237. DATA &FFDE00
  238. DATA &FFE200
  239. DATA &FFE600
  240. DATA &FFEA00
  241. DATA &FFEE00
  242. DATA &FFF200
  243. DATA &FFF500
  244. DATA &FFF800
  245. DATA &FFFB00
  246. DATA &FFFE00
  247. DATA &FFFF02
  248. DATA &FFFF05
  249. DATA &FFFF0A
  250. DATA &FFFF0E
  251. DATA &FFFF13
  252. DATA &FFFF19
  253. DATA &FFFF1F
  254. DATA &FFFF25
  255. DATA &FFFF2C
  256. DATA &FFFF33
  257. DATA &FFFF3A
  258. DATA &FFFF41
  259. DATA &FFFF48
  260. DATA &FFFF50
  261. DATA &FFFF58
  262. DATA &FFFF60
  263. DATA &FFFF69
  264. DATA &FFFF71
  265. DATA &FFFF79
  266. DATA &FFFF82
  267. DATA &FFFF8C
  268. DATA &FFFF97
  269. DATA &FFFFA1
  270. DATA &FFFFAB
  271. DATA &FFFFB6
  272. DATA &FFFFBF
  273. DATA &FFFFC9
  274. DATA &FFFFD1
  275. DATA &FFFFDA
  276. DATA &FFFFE2
  277. DATA &FFFFE9
  278. DATA &FFFFF0
  279. DATA &FFFFF6
  280. DATA &FFFFFB
  281. DATA &FFFFFF
  282. DATA &FFFFFF
  283. DATA &FFFFFF
  284. DATA &FFFFFF
  285. DATA &FFFFFF
  286. DATA &FFFFFF
  287. DATA &FFFFFF
  288. DATA &FFFFFF
  289. DATA &FFFFFF
  290. DATA &FFFFFF
  291. DATA &FFFFFF
  292. DATA &FFFFFF
  293. DATA &FFFFFF
  294. DATA &FFFFFF
  295. DATA &FFFFFF
  296. DATA &FFFFFF
  297. DATA &FFFFFF
  298. DATA &FFFFFF
  299. DATA &FFFFFF
  300. DATA &FFFFFF
  301. DATA &FFFFFF
  302. DATA &FFFFFF
  303. DATA &FFFFFF
  304. DATA &FFFFFF
  305. DATA &FFFFFF
  306. DATA &FFFFFF
  307. DATA &FFFFFF
  308. DATA &FFFFFF
  309. DATA &FFFFFF
  310. DATA &FFFFFF
  311. DATA &FFFFFF
  312. DATA &FFFFFF
  313. DATA &FFFFFF
  314. DATA &FFFFFF
  315. DATA &FFFFFF
  316. DATA &FFFFFF
  317. DATA &FFFFFF
  318. DATA &FFFFFF
  319. DATA &FFFFFF
  320. DATA &FFFFFF
  321. DATA &FFFFFF
  322. DATA &FFFFFF
  323. DATA &FFFFFF
  324. DATA &FFFFFF
  325. DATA &FFFFFF
  326. DATA &FFFFFF
  327. DATA &FFFFFF
  328. DATA &FFFFFF
  329. DATA &FFFFFF
  330. DATA &FFFFFF
  331. DATA &FFFFFF
  332. DATA &FFFFFF
  333. DATA &FFFFFF
  334. DATA &FFFFFF
  335. DATA &FFFFFF
  336. DATA &FFFFFF
  337. DATA &FFFFFF
  338. DATA &FFFFFF
  339. DATA &FFFFFF
  340. DATA &FFFFFF
  341. DATA &FFFFFF
  342. DATA &FFFFFF
  343. DATA &FFFFFF
  344. DATA &FFFFFF
  345. DATA &FFFFFF
  346. DATA &FFFFFF
  347. DATA &FFFFFF
  348. DATA &FFFFFF
  349. DATA &FFFFFF
  350. DATA &FFFFFF
  351. DATA &FFFFFF
  352. DATA &FFFFFF
  353. DATA &FFFFFF
  354. DATA &FFFFFF
  355. DATA &FFFFFF
  356. DATA &FFFFFF
  357. DATA &FFFFFF
  358. DATA &FFFFFF
  359. DATA &FFFFFF
  360. DATA &FFFFFF
  361. DATA &FFFFFF
  362. DATA &FFFFFF
  363. DATA &FFFFFF
  364. DATA &FFFFFF
  365. DATA &FFFFFF
  366. DATA &FFFFFF
  367. DATA &FFFFFF
  368. DATA &FFFFFF
  369. DATA &FFFFFF
  370. DATA &FFFFFF
  371. DATA &FFFFFF
  372. DATA &FFFFFF
  373. DATA &FFFFFF
  374. DATA &FFFFFF
  375. DATA &FFFFFF
  376. DATA &FFFFFF
  377. DATA &FFFFFF
  378. DATA &FFFFFF
  379. DATA &FFFFFF
  380. DATA &FFFFFF
  381. DATA &FFFFFF
  382. DATA &FFFFFF
  383. DATA &FFFFFF
  384. DATA &FFFFFF
  385. DATA &FFFFFF
  386. DATA &FFFFFF
  387. DATA &FFFFFF
  388. DATA &FFFFFF
  389. DATA &FFFFFF
  390. DATA &FFFFFF
  391. DATA &FFFFFF
  392. DATA &FFFFFF
  393. DATA &FFFFFF
  394. DATA &FFFFFF
  395. DATA &FFFFFF
  396. DATA &FFFFFF
  397. DATA &FFFFFF
  398. DATA &FFFFFF
  399. DATA &FFFFFF
  400. DATA &FFFFFF
  401. DATA &FFFFFF
  402. DATA &FFFFFF
  403. DATA &FFFFFF
  404. DATA &FFFFFF
  405. DATA &FFFFFF
  406. DATA &FFFFFF
  407. DATA &FFFFFF
  408. DATA &FFFFFF
  409. DATA &FFFFFF
  410. DATA &FFFFFF
  411. DATA &FFFFFF
  412. DATA &FFFFFF
  413. DATA &FFFFFF
  414. DATA &FFFFFF
  415. DATA &FFFFFF
  416. DATA &FFFFFF
  417. DATA &FFFFFF
  418. DATA &FFFFFF
  419. DATA &FFFFFF
  420. DATA &FFFFFF
  421. DATA &FFFFFF
  422. DATA &FFFFFF
  423. DATA &FFFFFF
  424. DATA &FFFFFF
  425. DATA &FFFFFF
  426. DATA &FFFFFF
  427. DATA &FFFFFF
  428. DATA &FFFFFF
  429. DATA &FFFFFF
  430. DATA &FFFFFF
  431. DATA &FFFFFF
  432. DATA &FFFFFF
  433. DATA &FFFFFF
  434. DATA &FFFFFF
  435. DATA &FFFFFF
  436. DATA &FFFFFF
  437. DATA &FFFFFF
  438.  
  439. DATA "clipbitmap_x86"
  440. DATA 96,199,64,28,255,255,255,255,139,120,20,59,120,4,15,141,192,0,0,0,139,112,24,59,112,8,15,141,180,0,0,0,139,72,12,139,80,16,131,249,0,125,3,247,217,144,131,250
  441. DATA 0,125,3,247,218,144,247,217,59,249,15,142,148,0,0,0,247,218,59,242,15,142,138,0,0,0,247,217,247,218,199,64,28,0,0,0,0,199,64,32,0,0,0,0,199,64,36,0
  442. DATA 0,0,0,199,64,40,0,0,0,0,137,72,44,137,80,48,137,120,52,137,112,56,139,239,3,233,59,104,4,126,13,43,104,4,41,104,44,199,64,32,255,255,255,255,131,255,0,125
  443. DATA 20,41,120,40,1,120,44,199,64,52,0,0,0,0,199,64,32,255,255,255,255,139,238,3,234,59,104,8,126,13,43,104,8,41,104,48,199,64,32,255,255,255,255,131,254,0,125,20
  444. DATA 41,112,36,1,112,48,199,64,56,0,0,0,0,199,64,32,255,255,255,255,97,195
  445. DATA -1
  446.  
  447. DATA "clr8_360x640_x86"
  448. DATA 96,139,248,139,195,37,255,0,0,0,139,208,193,226,8,11,194,139,208,193,226,16,11,194,185,0,225,0,0,252,243,171,97,195
  449. DATA -1
  450.  
  451. DATA "plot8_incbgpixels_x86"
  452. DATA 96,131,236,32,139,83,4,139,123,8,137,80,4,137,120,8,139,81,4,139,121,8,137,80,12,137,120,16,139,81,12,139,121,16,137,80,20,137,120,24,255,16,247,64,28,255,255,255
  453. DATA 255,15,133,73,0,0,0,139,27,139,9,139,120,4,137,60,36,15,175,120,56,3,120,52,3,251,139,112,12,137,116,36,4,15,175,112,36,3,112,40,3,241,139,80,44,139,104,48
  454. DATA 51,201,246,4,14,255,116,9,128,60,15,255,116,3,254,4,15,65,59,202,124,236,3,60,36,3,116,36,4,77,117,224,131,196,32,97,195
  455. DATA -1
  456.  
  457. DATA "clipbitmap_arm"
  458. DATA 255,95,45,233,0,192,224,227,28,192,128,229,4,176,128,226,126,0,155,232,1,0,85,225,255,159,189,168,2,0,86,225,255,159,189,168,3,0,117,225,255,159,189,216,4,0,118,225
  459. DATA 255,159,189,216,148,208,143,229,148,224,143,229,0,208,160,227,0,224,224,227,28,208,128,229,32,208,128,229,0,112,160,227,0,128,160,227,3,144,160,225,4,160,160,225,3,176,133,224
  460. DATA 1,0,91,225,1,176,75,192,11,144,73,192,32,224,128,197,0,0,85,227,5,128,72,176,5,144,137,176,0,80,160,179,32,224,128,181,4,176,134,224,2,0,91,225,2,176,75,192
  461. DATA 11,160,74,192,32,224,128,197,0,0,86,227,6,112,71,176,6,160,138,176,0,96,160,179,32,224,128,181,36,112,128,229,40,128,128,229,44,144,128,229,48,160,128,229,52,80,128,229
  462. DATA 56,96,128,229,4,208,159,229,4,224,159,229,255,159,189,232,0,0,0,0,0,0,0,0
  463. DATA -1
  464.  
  465. DATA "clr8_360x640_arm"
  466. DATA 255,95,45,233,116,208,143,229,116,224,143,229,255,16,1,226,1,20,129,225,1,24,129,225,1,32,160,225,2,48,160,225,2,64,160,225,2,80,160,225,2,96,160,225,2,112,160,225
  467. DATA 2,128,160,225,2,144,160,225,2,160,160,225,2,176,160,225,2,192,160,225,2,208,160,225,2,224,160,225,10,29,160,227,252,127,160,232,252,127,160,232,252,127,160,232,252,127,160,232
  468. DATA 252,127,160,232,252,127,160,232,252,63,160,232,1,16,81,226,246,255,255,26,4,208,159,229,4,224,159,229,255,159,189,232,0,0,0,0,0,0,0,0
  469. DATA -1
  470.  
  471. DATA "plot8_incbgpixels_arm"
  472. DATA 255,95,45,233,4,64,145,229,8,80,145,229,4,96,146,229,8,112,146,229,12,128,146,229,16,144,146,229,4,64,128,229,8,80,128,229,12,96,128,229,16,112,128,229,20,128,128,229
  473. DATA 24,144,128,229,0,192,144,229,60,255,47,225,28,192,144,229,0,0,92,227,255,159,189,24,0,16,145,229,0,32,146,229,36,80,144,229,40,112,144,229,44,128,144,229,48,144,144,229
  474. DATA 52,160,144,229,56,176,144,229,88,208,143,229,88,224,143,229,155,164,42,224,10,16,129,224,149,118,39,224,7,32,130,224,0,48,160,227,3,80,210,231,255,0,21,227,3,0,0,10
  475. DATA 3,80,209,231,255,0,85,227,1,80,133,18,3,80,193,23,1,48,131,226,8,0,83,225,245,255,255,186,6,32,130,224,4,16,129,224,1,144,89,226,240,255,255,26,4,208,159,229
  476. DATA 4,224,159,229,255,159,189,232,0,0,0,0,0,0,0,0
  477. DATA -1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement