The wind blows mainly to the right.
Code: Select all
#WinWidth = 1280
#WinHeight = 720
#MaxFlakes = 250
Structure SnowCalculations
SnowX.d
SnowY.d
SnowS.i ; flake size
SnowV.d ; Y velocity
EndStructure
Global Dim Snow.SnowCalculations(#MaxFlakes)
Procedure SnowFlakes()
Static SnowSprite.i, wind.d, windScale.d, bias.i = 31
windScale + Random(64) - bias
If windScale > 2000 : bias = 33 : EndIf
If windScale < -400 : bias = 31 : EndIf
wind = windScale / 4000
For SnowSprite = 1 To #MaxFlakes
With Snow(SnowSprite)
DisplayTransparentSprite(SnowSprite, \SnowX, \SnowY, Random(255, 64)) ;random transparency for twinle effect
RotateSprite(SnowSprite, 0.2 * \SnowS, #PB_Relative)
\SnowX + wind *\SnowS
\SnowY + \SnowV
If \SnowX > #WinWidth : \SnowX = 0 : EndIf
If \SnowX < 0 : \SnowX = #WinWidth : EndIf
If \SnowY > #WinHeight ; if the snow reaches the bottom of the screen, send back to the top
\SnowY = 0
\SnowX = Random(#WinWidth)
\SnowS = Random(14, 2) ;snow size
\SnowV = \SnowS / 6
ZoomSprite(SnowSprite, \SnowS, \SnowS)
EndIf
EndWith
Next SnowSprite
EndProcedure
UsePNGImageDecoder()
InitSprite()
OpenWindow(0, 0, 0,#WinWidth, #WinHeight, "Snow", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
OpenWindowedScreen(WindowID(0), 0, 0, #WinWidth, #WinHeight, 1, 0, 0, 1)
;EnableFullScreenButton(WindowID(0)) ;OS X only using wilberts lib
For Snow = 1 To #MaxFlakes
CatchSprite(Snow, ?flake_png_start, #PB_Sprite_AlphaBlending)
Next Snow
For SnowSprite = 1 To #MaxFlakes
;fill the screen with snow at startup
With Snow(SnowSprite)
\SnowX = Random(#WinWidth)
\SnowY = Random(#WinHeight)
\SnowS = Random(14, 2) ;snow size
ZoomSprite(SnowSprite, \SnowS, \SnowS)
\SnowV = \SnowS / 6 ; velocity proportional to size
EndWith
Next SnowSprite
Quit = #False
Repeat
Repeat
Event = WindowEvent()
If Event = #PB_Event_CloseWindow
Quit = #True
EndIf
Until Event = 0
FlipBuffers()
ClearScreen(RGB(0, 0, 64))
SnowFlakes()
Until Quit
DataSection
flake_png_start:
; size : 1244 bytes
Data.q $0A1A0A0D474E5089,$524448490D000000,$2000000020000000,$7A7A730000000608,$47527301000000F4
Data.q $0000E91CCEAE0042,$FF0044474B620600,$93A7BDA0FF00FF00,$7359487009000000,$130B0000130B0000
Data.q $000000189C9A0001,$0ADA07454D497407,$5EC42DDA3B31121B,$544144495C040000,$55946C4B97BDC358
Data.q $A74ED37EE77FC714,$4829680B16876DF6,$0BA07C42C7C4C134,$2B95C2E267612A35,$85C63136B8905D13
Data.q $00B9DC2E31B1D91B,$1B80D06E00988656,$CC80A89D50242621,$DF5E600FA614B438,$63E96334D4F0BBFD
Data.q $3DEE6E772F937A6A,$1DCFFCE73FF39EE7,$E923DD5AB5587F68,$424A3B59247B4923,$18766CD90A4BB7BB
Data.q $00D857576E180C78,$F98C02D808781102,$69DDCB97280CF37A,$536E40E3E5F84E9A,$6492481D1D1D180D
Data.q $57FF0602EC09D802,$FB9292B292252403,$AFB0FD0EF202E91C,$7AC9A3D1E8E7ABEF,$4971A48769272C93
Data.q $A482E924BE9465B9,$EB1AB7F692F3A4BA,$38B1D56CED25C63A,$E606EC0031D8AB32,$797B2599B3379D25
Data.q $F972DF39F0E80860,$BAEBF02F40D3C083,$1FA01980F7666043,$59492ED25F780778,$92B39D2FCB9013A0
Data.q $7EB9703E02ED24BA,$5666021F5BEB96E0,$64F21C0838117494,$5DC0603F7E33C6FB,$26F002E227BAFE3F
Data.q $C56668B81EF80070,$2DE0305C86B1DEFB,$CF61C5F8026013E0,$1749F98715033F02,$C7E9A69EFC657869
Data.q $C601B133331C9249,$4933E92832A54AB3,$49DF495549529233,$3A48AF4916D24D7A,$753E92D3FBE6A925
Data.q $66F84AACCC9D15B9,$9D63D3406A04EA48,$9179E9B811CA6FF1,$BFDFDFDF303AFDF1,$CE31EB7572CCFEAA
Data.q $01E807BD7AF57D01,$1A606E812603729E,$73D57D7DDB62EED8,$67A69A5CF8C62862,$2A8166079A498D25
Data.q $D4941D7FD2CCCF70,$0EDBFCDB07B9F40D,$377B54E23E318B6C,$397B94EA93D5B084,$09F8137424E33C04
Data.q $8C7CF006F115E5B8,$5702284217202FF1,$5A81173E9FC0EB80,$249367D34D217806,$BA0118146D9DEAD9
Data.q $44210CEC63160842,$ABDA27A4E049C92F,$38027002E6475EC0,$842078C623BA09ED,$E8DC278018C633B0
Data.q $432718C72803702A,$249ABB56AD4CA508,$5B8B74AE6A37CE49,$8C63E60018421C3C,$DEA74DC7B9F4210A
Data.q $87BC8AAF1DE17E3B,$CCBACC0A421081F5,$431400B8C633703C,$66CD9B9708425708,$450F0EC72F0524D9
Data.q $C718C77607901B8F,$A4C48ECBD999CD24,$47218E2CA8E1BD9F,$6CE338A1EA3C01AE,$9D5AB574C00A045A
Data.q $ECFCE6005AEAEAEA,$A48F52428DCECB7F,$92C3A4BCB9B9B9FE,$4B2A486A48AA4BAE,$9A486EBE6373F31A
Data.q $A488D24474925495,$B2D6988F8B3D4901,$EFFA2CCC9D94CB0C,$5015EDEDED9B3305,$643D97CC39F638F2
Data.q $4A4E33AFBACD9B34,$5B33156664065009,$646B329495B17D70,$BA1CF7CF9F6011C2,$1CF21CDFA4B6F02C
Data.q $9798CCE833C3DB70,$E88E23742621BD34,$B7A4E92D7D25119F,$263FE1DD5EB3AAE1,$4973E920BB3F4BE9
Data.q $78F7172ADD122B23,$E7380AFAD1CF7963,$81F79170F80FB015,$EF022F82CE0FC0C3,$8618BB7C017CB57A
Data.q $CF61E00EA4B15335,$017F59C08FC0D3E2,$CF3E24A57B8F0075,$C8DC3FC4670D21BB,$D6359982A4876001
Data.q $84E035E9EE720BD3,$725D24D5EC969599,$F25B56664BE7CD6F,$B892BCE0A9233E62,$A14285241F9AC6AE
Data.q $74717CB96B9C5EE6,$A8AD6E8B49666B7A,$B6F50A142C572392,$7B8E92DD7B0AF15A,$613D6EB29EF71DC2
Data.q $8C6364F952BC5695,$69E8EDB39F698157,$84254CCCCCC17FFB,$BB33250842FA0250,$935D257B490F66CD
Data.q $743683611D5DB7B4,$E144CDC04B96C700,$37FF2BB594D4D4D0,$8A413BB5248ACC71,$444E454900000000
Data.b $AE,$42,$60,$82
flake_png_end:
EndDataSection