Thanks Steve, but I did it another way! Instead of using LINE to erase the whole screen to make trails, I made the trails themselves fade! It works!!!!!
The trail graphics actually don't change, but using the 4th color number as 10, the more trails that are together makes it brighter and the more the trail scatters it is less.
Check this out guys. The fireworks themselves aren't as bright, but I like the effect.
Here is also the zip file which includes all the needed files, including the sky, 2 mp3 files, and .bas file.
@bplus
The trail graphics actually don't change, but using the 4th color number as 10, the more trails that are together makes it brighter and the more the trail scatters it is less.
Check this out guys. The fireworks themselves aren't as bright, but I like the effect.
Here is also the zip file which includes all the needed files, including the sky, 2 mp3 files, and .bas file.
@bplus
Code: (Select All)
'Fireworks by SierraKen and Bplus
'December 31, 2024
'Firework sounds from https://pixabay.com/sound-effects/search/fireworks/
'Thanks B+ for the inspiration and help.
Screen _NewImage(1280, 853, 32)
Dim x(200), y(200), xx(200), yy(200)
Dim cx(200), cy(200)
Dim centerx(200), centery(200)
Dim c(200) As _Unsigned Long
_Title "Fireworks by SierraKen and Bplus"
file$ = "firework_single.mp3"
file2$ = "firework_single_small.mp3"
Song = _SndOpen(file$)
song2 = _SndOpen(file2$)
If Song < 1 Then
Print "Failed to load sound file!"
End
End If
GoSub more
Randomize Timer
image& = _LoadImage("sky.jpg", 32)
Screen image&
image2& = _CopyImage(0)
Do
ce = ce + 1
If ce > 200 Then ce = 1
centerx(ce) = (Rnd * 1000) + 200
centery(ce) = (Rnd * 100) + 300
red = (Rnd * 155) + 100: green = (Rnd * 155) + 100: blue = (Rnd * 155) + 100
c(ce) = _RGB32(red, green, blue, 10)
If booms < 20 Then _SndPlay Song
If booms > 19 Then _SndPlay song2
If booms < 20 Then GoSub trajectile
For b = 1 To 300
For e = 1 To 200
x(e) = x(e) + xx(e)
y(e) = y(e) + yy(e)
cx(e) = x(e) + centerx(ce)
cy(e) = y(e) + centery(ce)
fillCircle cx(e), cy(e), 1, c(ce)
Next e
If booms < 20 Then _Limit (300 - b) + 60 Else _Limit 500
Next b
If booms < 19 Then _Delay 2.5
_PutImage (0, 0), image&
booms = booms + 1
_Title "Explosions: " + Str$(booms)
t = 1
GoSub more
If booms = 19 Then
_SndStop Song
End If
If booms = 50 Then
For ending = 1 To 8
_Delay 2.5
_PutImage (0, 0), image&
_Delay .1
Next ending
_SndStop song2
End
End If
Loop Until InKey$ = Chr$(27)
End
more:
For t = 1 To 200
r = Rnd
a = Rnd * _Pi(2)
x(t) = r * Cos(a)
y(t) = r * Sin(a)
xx(t) = r * Cos(a): yy(t) = r * Sin(a)
Next t
Return
trajectile:
For ty = 753 To centery(ce) Step -1
fillCircle centerx(ce), ty, 2, _RGB32(255, 255, 255, 10)
_Delay .002
'Line (0, 0)-(800, 600), _RGB32(0, 0, 0, 10), BF
Screen image2&
Next ty
Return
'from Steve Gold standard
Sub fillCircle (CX As Integer, CY As Integer, R As Integer, C As _Unsigned Long)
Dim Radius As Integer, RadiusError As Integer
Dim X As Integer, Y As Integer
Radius = Abs(R): RadiusError = -Radius: X = Radius: Y = 0
If Radius = 0 Then PSet (CX, CY), C: Exit Sub
Line (CX - X, CY)-(CX + X, CY), C, BF
While X > Y
RadiusError = RadiusError + Y * 2 + 1
If RadiusError >= 0 Then
If X <> Y + 1 Then
Line (CX - Y, CY - X)-(CX + Y, CY - X), C, BF
Line (CX - Y, CY + X)-(CX + Y, CY + X), C, BF
End If
X = X - 1
RadiusError = RadiusError - X * 2
End If
Y = Y + 1
Line (CX - X, CY - Y)-(CX + X, CY - Y), C, BF
Line (CX - X, CY + Y)-(CX + X, CY + Y), C, BF
Wend
End Sub