Advertisement
Guest User

Fire effect (BB4W & BBCSDL x86/ARM)

a guest
Dec 27th, 2017
179
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. a = 2*PI*RND(1)
  143. r = 48*RND(1)
  144. x%(I%) = WinW%/2 + r*SINa
  145. y(I%) = 32+r*COSa
  146. Y%(I%) = 64+RND(WinH%-64)
  147. ya(I%) = 0.0001 + 0.00075*RND(1)
  148. yv(I%) = ya(I%)*RND(100)
  149. ENDPROC
  150.  
  151. DEF FNmalloc( N% )
  152. LOCAL A%
  153. DIM A% N%+15
  154. A% = (A% + 7) AND -8
  155. = A%
  156.  
  157. DEF FNread_data( r$ )
  158. LOCAL I%, data%, byte%, s$
  159. data% = FNmalloc( 1024 )
  160. RESTORE
  161. REPEAT : READ s$ : UNTIL s$ = r$
  162. I% = 0
  163. REPEAT
  164. READ byte%
  165. IF byte% <> -1 THEN
  166. data%?I% = byte%
  167. I% += 1
  168. ENDIF
  169. UNTIL byte% = -1
  170. = data%
  171.  
  172. DEF PROCerror
  173. BB4W% += 0
  174. IF ERR=17 AND BB4W%=FALSE THEN CHAIN @lib$+"../examples/tools/touchide"
  175. OSCLI "REFRESH ON" : CLS : ON : SOUND 1, -15, 200, 3
  176. COLOUR 15, 255, 255, 255 : COLOUR 15
  177. PRINT '" " + REPORT$ + " at line " + STR$ERL
  178. COLOUR 15, 200, 200, 200
  179. PRINT ''" Closing in 3 seconds...";
  180. WAIT 300
  181. QUIT
  182. ENDPROC
  183.  
  184. DATA &60000
  185. DATA &E0000
  186. DATA &170000
  187. DATA &210000
  188. DATA &2C0000
  189. DATA &380000
  190. DATA &440000
  191. DATA &510000
  192. DATA &5F0000
  193. DATA &6D0000
  194. DATA &7B0000
  195. DATA &880000
  196. DATA &940000
  197. DATA &A00000
  198. DATA &AD0000
  199. DATA &B80000
  200. DATA &C40000
  201. DATA &CF0000
  202. DATA &D90000
  203. DATA &E20000
  204. DATA &EA0000
  205. DATA &F20000
  206. DATA &F90000
  207. DATA &FF0000
  208. DATA &FF0500
  209. DATA &FF0A00
  210. DATA &FF1100
  211. DATA &FF1800
  212. DATA &FF1F00
  213. DATA &FF2800
  214. DATA &FF3100
  215. DATA &FF3A00
  216. DATA &FF4400
  217. DATA &FF4E00
  218. DATA &FF5900
  219. DATA &FF6300
  220. DATA &FF6E00
  221. DATA &FF7900
  222. DATA &FF8200
  223. DATA &FF8800
  224. DATA &FF8E00
  225. DATA &FF9400
  226. DATA &FF9900
  227. DATA &FF9F00
  228. DATA &FFA500
  229. DATA &FFAA00
  230. DATA &FFB000
  231. DATA &FFB600
  232. DATA &FFBB00
  233. DATA &FFC000
  234. DATA &FFC600
  235. DATA &FFCB00
  236. DATA &FFD000
  237. DATA &FFD400
  238. DATA &FFD900
  239. DATA &FFDE00
  240. DATA &FFE200
  241. DATA &FFE600
  242. DATA &FFEA00
  243. DATA &FFEE00
  244. DATA &FFF200
  245. DATA &FFF500
  246. DATA &FFF800
  247. DATA &FFFB00
  248. DATA &FFFE00
  249. DATA &FFFF02
  250. DATA &FFFF05
  251. DATA &FFFF0A
  252. DATA &FFFF0E
  253. DATA &FFFF13
  254. DATA &FFFF19
  255. DATA &FFFF1F
  256. DATA &FFFF25
  257. DATA &FFFF2C
  258. DATA &FFFF33
  259. DATA &FFFF3A
  260. DATA &FFFF41
  261. DATA &FFFF48
  262. DATA &FFFF50
  263. DATA &FFFF58
  264. DATA &FFFF60
  265. DATA &FFFF69
  266. DATA &FFFF71
  267. DATA &FFFF79
  268. DATA &FFFF82
  269. DATA &FFFF8C
  270. DATA &FFFF97
  271. DATA &FFFFA1
  272. DATA &FFFFAB
  273. DATA &FFFFB6
  274. DATA &FFFFBF
  275. DATA &FFFFC9
  276. DATA &FFFFD1
  277. DATA &FFFFDA
  278. DATA &FFFFE2
  279. DATA &FFFFE9
  280. DATA &FFFFF0
  281. DATA &FFFFF6
  282. DATA &FFFFFB
  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. DATA &FFFFFF
  439. DATA &FFFFFF
  440.  
  441. DATA "clipbitmap_x86"
  442. 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
  443. 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
  444. 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
  445. 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
  446. DATA 41,112,36,1,112,48,199,64,56,0,0,0,0,199,64,32,255,255,255,255,97,195
  447. DATA -1
  448.  
  449. DATA "clr8_360x640_x86"
  450. 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
  451. DATA -1
  452.  
  453. DATA "plot8_incbgpixels_x86"
  454. 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
  455. 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
  456. 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
  457. DATA -1
  458.  
  459. DATA "clipbitmap_arm"
  460. 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
  461. 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
  462. 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
  463. 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
  464. 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
  465. DATA -1
  466.  
  467. DATA "clr8_360x640_arm"
  468. 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
  469. 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
  470. 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
  471. DATA -1
  472.  
  473. DATA "plot8_incbgpixels_arm"
  474. 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
  475. 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
  476. 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
  477. 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
  478. DATA 4,224,159,229,255,159,189,232,0,0,0,0,0,0,0,0
  479. DATA -1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement