Ooops
November 28, 2020, 10:22:01 AM

Author Topic: [bb] Nice Fire FX for B+ using Blit's by Richard Betson [ 1+ years ago ]  (Read 541 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
Title : Nice Fire FX for B+ using Blit's
Author : Richard Betson
Posted : 1+ years ago

Description : Nice Fire FX for B+ using Blit's. Runs at 640 x 480 x 16. Fire FX uses lower 240 x 480.

You can change the speed (see source). I get as high as 190 FPS.

L8r,
R. Betson


Code :
Code: BlitzBasic
  1. ;Fire Demo for B+
  2. ;Copyright 2003, Richard R Betson
  3. ;www.redeyeware.50megs.com
  4. ;vidiot@getgoin.net
  5.  
  6. ;Blur/Fade Fire... Blit Method
  7.  
  8. Global fpsl=True ;<------------ Change this to False for Fastest Diplay
  9.                                                         ;   May result in some scree errors.
  10.                                                         ;default = true
  11.  
  12. Const width=640
  13. Const height=480
  14. Const depth=16
  15. Global fade_clr=2       ;"                         "
  16. Global fade#=7.58       ;<=- Adjust for fade control
  17. Global blur=4
  18. Global height1=height-1
  19. Global width1=(width/2)-1
  20. Global f_step=3         ;<=- Adjust for flame rise
  21. Global yy=474
  22.  
  23. If fpsl=True
  24.         timer=CreateTimer(32)
  25.         fade_clr=2
  26.         fade#=7.57
  27. EndIf
  28.  
  29.  
  30.  
  31.  
  32.  
  33. Graphics width,height,depth,1
  34. Global blockbank=CreateBank(500*500*4)
  35. Global clrbank=CreateBank(width*height*4)
  36. SetBuffer BackBuffer()
  37.  
  38.  
  39.  
  40.  
  41. LockBuffer
  42.        
  43. For y=0 To 49
  44.         offset=y*LockedPitch()
  45.        
  46.         For x= 0 To 24
  47.                 PokeInt blockbank,offset+x*4,clr;
  48.         Next
  49. Next
  50. UnlockBuffer
  51.  
  52. While  Not KeyHit(1)
  53.                 If ct1<=tm
  54.                         ct1=tm+Rnd(30)
  55.                         LockBuffer
  56.                 For i= 0 To 120+Rnd(50)
  57.                
  58.                         xx=Rnd(345)+1
  59.                         gr=Rnd(112)+30
  60.                         clrt=((254/8 Shl 27) Or((gr/4) Shl 21) Or((40/8) Shl 16) Or ((254/8) Shl 11) Or ((gr/4) Shl 5) Or (40/8))  
  61.  
  62.                         For y=yy To yy+5
  63.                                 offset=y*LockedPitch()
  64.                                 For x=xx To Rnd(15)+xx
  65.                                         PokeInt clrbank,offset+x*4,clrt
  66.                                 Next
  67.                         Next
  68.                 Next
  69.                         UnlockBuffer           
  70.                 EndIf
  71.  
  72.  
  73.  
  74. ;Adjust this for fire speed
  75. ;               If ct<tm
  76.                         ;ct=tm+32
  77. ;                       blur_fade()
  78.         If fpsl=True
  79.                 blur_fade()
  80.                 WaitTimer(timer)
  81.         Else
  82.                 If ct<tm
  83.                         ct=tm+32
  84.                         blur_fade()
  85.                 EndIf
  86.         EndIf
  87.                 ;EndIf
  88.  
  89. ;       If fpsl=True
  90. ;               WaitTimer(timer)
  91. ;       EndIf
  92.  
  93.        
  94.         tm=MilliSecs()
  95.         fps=fps+1
  96.         If fps_t<MilliSecs()
  97.         fp$=" "+Str$(fps)
  98.         fps2=fps
  99.         fps_t=1000+MilliSecs()
  100.         fps=0
  101.         EndIf
  102.         Text 10,465,"FPS: "+fp$
  103.        
  104.         Flip False
  105.  
  106. Wend
  107.  
  108. End
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115. Function blur_fade()
  116.  
  117.  
  118. LockBuffer
  119.                 bank=LockedPixels()
  120. For y=240 To height
  121.  
  122.         offset=y*LockedPitch()
  123.         offsetn=(y-1)*LockedPitch()
  124.         offsets=(y+1)*LockedPitch()
  125.         offsetz=(y-f_step)*LockedPitch()
  126.  
  127.         For x= 1 To width1
  128.  
  129.                 tmpa=PeekShort(clrbank,(offset+2)+x*4) ;And 255
  130.                 c1=PeekShort(clrbank,(offsetn+2)+x*4) ;And 255
  131.                 c2=PeekShort(clrbank,(offsets+2)+x*4) ;And 255
  132.                 c3=PeekShort(clrbank,(offset+2)+(x-1)*4) ;And 255
  133.                 c4=PeekShort(clrbank,(offset+2)+(x+1)*4) ;And 255
  134.  
  135.  
  136. csa=(tmpa+c1+c2+c3+c4)
  137.  
  138. If csa>0
  139.                 tc=tc4
  140.                 tc2=tc5
  141.                 tc3=tc6
  142.  
  143.                 lc=((tc Shl 11) Or (tc2 Shl 5) Or (tc3))
  144.  
  145.  
  146.         tmp=((tmpa Shr 11) ) And $1F; And 255
  147.         tc4=((tmp *blur)+(c1 Shr 11 And $1F) +(c2 Shr 11 And $1F) +(c3 Shr 11 And $1F) +(c4 Shr 11 And $1F))/fade; Shr 3
  148.         tmp=(tmpa Shr 5 ) And $3F;And$FF;And 255
  149.         tc5=((tmp*blur)+(c1 Shr 5 And $3F) +(c2 Shr 5 And $3F) +(c3 Shr 5 And $3F) +(c4 Shr 5 And $3F) )/fade
  150.         tmp=(tmpa ) And $1F;And$FF
  151.         tc6=((tmp*blur)+(c1 And $1F)  + (c2 And $1F) + (c3 And $1F) + (c4 And $1F)) /fade
  152. ;EndIf
  153.  
  154.  
  155. tc4=(tc4-fade_clr)
  156. tc5=(tc5-fade_clr)
  157. tc6=(tc6-fade_clr)
  158.  
  159. If tc4<0 Then tc4=0
  160. If tc5<0 Then tc5=0
  161. If tc6<0 Then tc6=0
  162.  
  163. hc=((tc4 Shl 11) Or (tc5 Shl 5) Or (tc6))
  164.  
  165. PokeInt clrbank,offsetz+x*4,(hc Shl 16 Or lc);
  166.  
  167.  
  168. EndIf
  169.  
  170.  
  171. PokeInt bank,(offset)+x*4,(hc Shl 16 Or lc)
  172.  
  173.                
  174.         Next
  175. Next
  176.  
  177. UnlockBuffer
  178.  
  179. End Function


Comments :


Clyde(Posted 1+ years ago)

 I really love this fire routine. Bang on! :)


mag.(Posted 1+ years ago)

 Very slow on my mechine


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal