Jump to: Board index » General » Fusion

Creating muzzle flashes

Learn about 3D compositing, animation, broadcast design and VFX workflows.
  • Author
  • Message
Offline

Harold Chattaway

  • Posts: 4
  • Joined: Thu Jan 08, 2015 5:52 pm

Creating muzzle flashes

PostSat Jan 10, 2015 4:33 am

hello!
This weekend i am going to be experimenting with Fusion and using it for adding muzzle flashes. When i was doing this in Hitfilm, it had built in 3D muzzle flashes for a number of different guns. It doesn't look like those are built into Fusion... which is ok. is the Fusion way of doing this using something like the "Action Pack" from Video Copilot? This contains the muzzle flashes that are already keyed...

Any other technique that would be better?
Thanks
Harold
Offline
User avatar

Rony Soussan

  • Posts: 727
  • Joined: Tue Nov 11, 2014 5:33 pm

Re: Creating muzzle flashes

PostMon Jan 12, 2015 7:16 pm

Are you looking at making a 3D muzzle flash via 2D textures or do you want a particle system type setup?
Offline
User avatar

michael vorberg

  • Posts: 943
  • Joined: Wed Nov 12, 2014 8:47 pm
  • Location: stuttgart, germany

Re: Creating muzzle flashes

PostMon Jan 12, 2015 7:37 pm

for 2D solution: you could use videofootage (like the action pack from videocopilot) or because muzzle flashes are just 1-2 frames: make a shape and use it as muzzle flash or look for photoshop brushes

when your happy with your work you can copy that nodes into your bin and then you have a collection of own mmuzzle flashes for the future
Offline

Harold Chattaway

  • Posts: 4
  • Joined: Thu Jan 08, 2015 5:52 pm

Re: Creating muzzle flashes

PostTue Jan 13, 2015 3:06 am

ok, I had seen the video co-pilot resources... great stuff..

I had been creating the muzzle flashes before in Hitfilm and they have a large collection of them for different types of guns... they can be oriented in 3d what ever way is needed...

But Ive been enjoying using Fusion and I'll try the co-pilot approach.. I know that's how its' done! :)

Thanks
Harold
Offline

Ivan Ivanov

  • Posts: 86
  • Joined: Tue Nov 11, 2014 11:16 am

Re: Creating muzzle flashes

PostTue Jan 13, 2015 10:18 pm

Offline
User avatar

Eric Westphal

  • Posts: 215
  • Joined: Thu Nov 20, 2014 1:59 pm

Re: Creating muzzle flashes

PostWed Jan 14, 2015 7:42 am

I just realized that the Comp on Pigsfly had a little issue,
which made it not looking like a MuzzleFlash at all...:-)

Here's an updated version.

Code: Select all
{
   Tools = ordered() {
      CreateBumpMap1 = CreateBumpMap {
         Inputs = {
            Input = Input {
               SourceOp = "FastNoise1",
               Source = "Output",
            },
            HeightScale = Input { Value = 100, },
            BumpmapTextureDepth = Input { Value = 4, },
         },
         ViewInfo = OperatorInfo { Pos = { -495, -544.5, }, },
      },
      Background1 = Background {
         CustomData = {
            Settings = {
               [1] = {
                  Tools = ordered() {
                     Background1 = Background {
                        Inputs = {
                           Height = Input { Value = 720, },
                           Gradient = Input {
                              Value = Gradient {
                                 Colors = {
                                    [0] = { 0, 0, 0, 1, },
                                    [1] = { 1, 1, 1, 1, },
                                 },
                              },
                           },
                           TopLeftAlpha = Input { Value = 0, },
                           Width = Input { Value = 1280, },
                        },
                        Name = "Background1",
                        CtrlWZoom = false,
                        ViewInfo = OperatorInfo { Pos = { 259, 256, }, },
                        CustomData = {
                        },
                     },
                  },
               },
               [2] = {
                  Tools = ordered() {
                     Background1 = Background {
                        Inputs = {
                           TopLeftRed = Input { Value = 1, },
                           TopLeftGreen = Input { Value = 0.760784387588501, },
                           Height = Input { Value = 720, },
                           Gradient = Input {
                              Value = Gradient {
                                 Colors = {
                                    [0] = { 0, 0, 0, 1, },
                                    [1] = { 1, 1, 1, 1, },
                                 },
                              },
                           },
                           TopLeftBlue = Input { Value = 0.0588235333561897, },
                           Width = Input { Value = 1280, },
                        },
                        CtrlWZoom = false,
                        ViewInfo = OperatorInfo { Pos = { 259, 256, }, },
                        CustomData = {
                        },
                     },
                  },
               },
            },
         },
         Inputs = {
            Width = Input { Value = 256, },
            Height = Input { Value = 256, },
            TopLeftRed = Input { Value = 0.246666666666667, },
            TopLeftGreen = Input { Value = 0.246666666666667, },
            TopLeftBlue = Input { Value = 0.246666666666667, },
            Gradient = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 0, 0, 0, 1, },
                     [1] = { 1, 1, 1, 1, },
                  },
               },
            },
            EffectMask = Input {
               SourceOp = "Ellipse1",
               Source = "Mask",
            },
         },
         ViewInfo = OperatorInfo { Pos = { -385, -445.5, }, },
      },
      NumberFlares = Fuse.Duplicate {
         NameSet = true,
         Inputs = {
            Copies = Input { Value = 4, },
            Angle = Input {
               Value = 90,
               Expression = "360/Copies",
            },
            RandomSeed = Input { Value = 26024, },
            Background = Input {
               SourceOp = "Background1",
               Source = "Output",
            },
            Comments = Input { Value = "How many flares should be there?", },
         },
         ViewInfo = OperatorInfo { Pos = { -275, -445.5, }, },
      },
      Ellipse1 = EllipseMask {
         Inputs = {
            MaskWidth = Input { Value = 1280, },
            MaskHeight = Input { Value = 720, },
            PixelAspect = Input { Value = { 1, 1, }, },
            ClippingMode = Input { Value = FuID { "None", }, },
            Center = Input {
               SourceOp = "XYPath1",
               Source = "Value",
            },
            Width = Input {
               Value = 0.0144032921810706,
               Expression = "0.5/Center.Y-0.5",
            },
            Height = Input {
               Value = 0.0144032921810706,
               Expression = "Width",
            },
            Comments = Input { Value = "The Y-Animation Spline controls the shape of the side-flares", },
         },
         ViewInfo = OperatorInfo { Pos = { -495, -445.5, }, },
      },
      XYPath1 = XYPath {
         ShowKeyPoints = false,
         DrawMode = "ModifyOnly",
         Inputs = {
            X = Input {
               SourceOp = "XYPath1X",
               Source = "Value",
            },
            Y = Input {
               SourceOp = "XYPath1Y",
               Source = "Value",
            },
         },
      },
      XYPath1X = BezierSpline {
         SplineColor = { Red = 255, Green = 0, Blue = 0, },
         NameSet = true,
         KeyFrames = {
            [0] = { 0.5, RH = { 8.33333333333333, 0.5, }, Flags = { Linear = true, }, },
            [25] = { 0.5, LH = { 16.6666666666667, 0.5, }, Flags = { Linear = true, }, },
         },
      },
      XYPath1Y = BezierSpline {
         SplineColor = { Red = 0, Green = 255, Blue = 0, },
         NameSet = true,
         KeyFrames = {
            [0] = { 0.916, RH = { 2.33333333333333, 0.877333333333333, }, Flags = { Linear = true, }, },
            [7] = { 0.8, LH = { 4.66666666666667, 0.838666666666667, }, RH = { 13, 0.857333333333333, }, Flags = { Linear = true, }, },
            [25] = { 0.971999999999999, LH = { 19, 0.914666666666666, }, Flags = { Linear = true, }, },
         },
      },
      BrightnessContrast5 = BrightnessContrast {
         Inputs = {
            ApplyMaskInverted = Input { Value = 1, },
            Alpha = Input { Value = 1, },
            Contrast = Input { Value = 10.8333333, },
            Input = Input {
               SourceOp = "CreateBumpMap1",
               Source = "Output",
            },
            EffectMask = Input {
               SourceOp = "Bitmap1",
               Source = "Mask",
            },
         },
         ViewInfo = OperatorInfo { Pos = { -110, -544.5, }, },
      },
      FastNoise1 = FastNoise {
         Inputs = {
            Width = Input { Value = 256, },
            Height = Input { Value = 256, },
            Depth = Input { Value = 4, },
            Discontinuous = Input { Value = 1, },
            XScale = Input { Value = 2.513089, },
            SeetheRate = Input { Value = 1, },
            Type = Input { Value = 1, },
            Gradient = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 0.966666666666667, 0.451656502695806, 0, 1, },
                     [1] = { 1, 0.867865291029152, 0.386844444444444, 1, },
                  },
               },
            },
            Comments = Input { Value = "Controls the overall Colors of the Blast", },
         },
         ViewInfo = OperatorInfo { Pos = { -715, -412.5, }, },
      },
      Bitmap1 = BitmapMask {
         Inputs = {
            MaskWidth = Input { Value = 1280, },
            MaskHeight = Input { Value = 720, },
            PixelAspect = Input { Value = { 1, 1, }, },
            ClippingMode = Input { Value = FuID { "None", }, },
            Image = Input {
               SourceOp = "NumberFlares",
               Source = "Output",
            },
            Comments = Input { Value = "Level controls the overall strength of the flares", },
            EffectMask = Input {
               SourceOp = "Center",
               Source = "Mask",
            },
         },
         ViewInfo = OperatorInfo { Pos = { -275, -379.5, }, },
      },
      Center = EllipseMask {
         NameSet = true,
         Inputs = {
            Level = Input { Value = 0.460733, },
            PaintMode = Input { Value = FuID { "Add", }, },
            MaskWidth = Input { Value = 1280, },
            MaskHeight = Input { Value = 720, },
            PixelAspect = Input { Value = { 1, 1, }, },
            ClippingMode = Input { Value = FuID { "None", }, },
            Width = Input {
               SourceOp = "GradientColorModifier2",
               Source = "Color1",
            },
            Height = Input {
               Value = 0,
               Expression = "Width",
            },
            Comments = Input { Value = "Level controls intensity of CenterBlast.\r\nThe Gradient on Width controls shape of CenterBlast.\r\nTimeSettings on Gradient control length of Blast.", },
            EffectMask = Input {
               SourceOp = "Main",
               Source = "Mask",
            },
         },
         ViewInfo = OperatorInfo { Pos = { -385, -379.5, }, },
      },
      GradientColorModifier2 = GradientColorModifier {
         CtrlWZoom = false,
         Inputs = {
            Gradient = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 0, 0, 0, 1, },
                     [0.803921568627451] = { 0.253333333333333, 0.253333333333333, 0.253333333333333, 1, },
                     [1] = { 0, 0, 0, 1, },
                  },
               },
            },
            TimeNest = Input { Value = 1, },
            EndTime = Input { Value = 60, },
         },
      },
      Main = EllipseMask {
         NameSet = true,
         Inputs = {
            Level = Input { Value = 0.2879581, },
            MaskWidth = Input { Value = 1280, },
            MaskHeight = Input { Value = 720, },
            PixelAspect = Input { Value = { 1, 1, }, },
            ClippingMode = Input { Value = FuID { "None", }, },
            Width = Input {
               SourceOp = "GradientColorModifier1",
               Source = "Color1",
            },
            Height = Input {
               Value = 0.4,
               Expression = "Width",
            },
            Comments = Input { Value = "Level controls intensity of MainBlast.\r\nThe Gradient on Width controls shape of MainBlast.\r\nTimeSettings on Gradient control length of Blast.", },
         },
         ViewInfo = OperatorInfo { Pos = { -495, -379.5, }, },
      },
      GradientColorModifier1 = GradientColorModifier {
         CtrlWZoom = false,
         Inputs = {
            Gradient = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 0, 0, 0, 1, },
                     [0.36078431372549] = { 0.573333333333333, 0.573333333333333, 0.573333333333333, 1, },
                     [0.490196078431373] = { 0.66, 0.66, 0.66, 1, },
                     [0.588235294117647] = { 0.4, 0.4, 0.4, 1, },
                  },
               },
            },
            TimeNest = Input { Value = 1, },
            EndTime = Input { Value = 60, },
         },
      },
      BrightnessContrast2 = BrightnessContrast {
         Inputs = {
            Brightness = Input { Value = -0.5, },
            Input = Input {
               SourceOp = "BrightnessContrast5",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 220, -544.5, }, },
      },
      Displace1 = Displace {
         Inputs = {
            Type = Input { Value = 1, },
            XRefraction = Input { Value = 0.0635417, },
            YRefraction = Input { Value = 0.02, },
            Input = Input {
               SourceOp = "Transform1",
               Source = "Output",
            },
            Foreground = Input {
               SourceOp = "BrightnessContrast2",
               Source = "Output",
            },
            Comments = Input { Value = "X and Y Refraction controls irregularity of Blast", },
         },
         ViewInfo = OperatorInfo { Pos = { 220.844, -314.344, }, },
      },
      Transform1 = Transform {
         Inputs = {
            Size = Input { Value = 0.5578947, },
            Input = Input {
               SourceOp = "BrightnessContrast4",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 55, -313.5, }, },
      },
      BrightnessContrast4 = BrightnessContrast {
         Inputs = {
            Gain = Input { Value = 2.875, },
            Input = Input {
               SourceOp = "BrightnessContrast3",
               Source = "Output",
            },
            EffectMask = Input {
               SourceOp = "Bitmap1",
               Source = "Mask",
            },
         },
         ViewInfo = OperatorInfo { Pos = { -55, -313.5, }, },
      },
      BrightnessContrast3 = BrightnessContrast {
         Inputs = {
            ApplyMaskInverted = Input { Value = 1, },
            Alpha = Input { Value = 1, },
            Gain = Input { Value = 0, },
            Input = Input {
               SourceOp = "Merge1",
               Source = "Output",
            },
            EffectMask = Input {
               SourceOp = "Bitmap1",
               Source = "Mask",
            },
         },
         ViewInfo = OperatorInfo { Pos = { -165, -313.5, }, },
      },
      Merge1 = Merge {
         Inputs = {
            Background = Input {
               SourceOp = "FastNoise1",
               Source = "Output",
            },
            Foreground = Input {
               SourceOp = "pRender1",
               Source = "Output",
            },
            PerformDepthMerge = Input { Value = 0, },
         },
         ViewInfo = OperatorInfo { Pos = { -495, -313.5, }, },
      },
      pRender1 = pRender {
         Inputs = {
            ["_MotionBlurWarning"] = Input { Disabled = true, },
            Width = Input { Value = 256, },
            Height = Input { Value = 256, },
            OutputMode = Input {
               Value = FuID { "TwoD", },
               Disabled = true,
            },
            IntegrationMethod = Input { Value = FuID { "RK4", }, },
            ["MaterialID.MaterialID"] = Input { Value = 1, },
            ["ObjectID.ObjectID"] = Input { Value = 1, },
            Input = Input {
               SourceOp = "pEmitter1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { -495, -280.5, }, },
      },
      pEmitter1 = pEmitter {
         ID = 29,
         Inputs = {
            Number = Input { Value = 93.7172775, },
            Lifespan = Input { Value = 1, },
            Style = Input { Value = FuID { "ParticleStyleBlob", }, },
            Region = Input { Value = FuID { "AllRgn", }, },
            ["ParticleStyle.ColorOverLife"] = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 1, 1, 1, 1, },
                  },
               },
            },
            ["ParticleStyle.SizeControls"] = Input { Value = 1, },
            ["ParticleStyle.Size"] = Input { Value = 1, },
            ["ParticleStyle.SizeOverLife"] = Input {
               SourceOp = "pEmitter1SizeoverLife",
               Source = "Value",
            },
            ["ParticleStyle.BlurOverLife"] = Input {
               SourceOp = "pEmitter1BluroverLife2D",
               Source = "Value",
            },
         },
         ViewInfo = OperatorInfo { Pos = { -495, -247.5, }, },
      },
      pEmitter1SizeoverLife = LUTBezier {
         KeyColorSplines = {
            [0] = {
               [0] = { 0.5, RH = { 0.333333333333333, 0.5, }, Flags = { Linear = true, }, },
               [1] = { 0.5, LH = { 0.666666666666667, 0.5, }, Flags = { Linear = true, }, },
            },
         },
         SplineColor = { Red = 192, Green = 128, Blue = 64, },
      },
      pEmitter1BluroverLife2D = LUTBezier {
         KeyColorSplines = {
            [0] = {
               [0] = { 0.5, RH = { 0.333333333333333, 0.5, }, Flags = { Linear = true, }, },
               [1] = { 0.5, LH = { 0.666666666666667, 0.5, }, Flags = { Linear = true, }, },
            },
         },
         SplineColor = { Red = 192, Green = 128, Blue = 64, },
      },
      FastNoise2 = FastNoise {
         Inputs = {
            Width = Input { Value = 1280, },
            Height = Input { Value = 720, },
            Depth = Input { Value = 3, },
            XScale = Input { Value = 9.5287958, },
            SeetheRate = Input { Value = 1, },
            Gradient = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 0, 0, 0, 1, },
                     [1] = { 1, 1, 1, 1, },
                  },
               },
            },
            Comments = Input { Value = "This Fastnoise is full of eels", },
         },
         ViewInfo = OperatorInfo { Pos = { 605, -280.5, }, },
      },
      Renderer3D1 = Renderer3D {
         Inputs = {
            Width = Input { Value = 1280, },
            Height = Input { Value = 720, },
            Depth = Input { Value = 3, },
            SceneInput = Input {
               SourceOp = "Merge3D1",
               Source = "Output",
            },
            RendererType = Input { Value = FuID { "RendererOpenGL", }, },
            ["RendererOpenGL.Channels.Nest"] = Input { Value = 1, },
            ["RendererOpenGL.Channels.WorldCoord"] = Input { Value = 1, },
         },
         ViewInfo = OperatorInfo { Pos = { 332.395, -148.784, }, },
      },
      VolumeFog1 = VolumeFog {
         CtrlWZoom = false,
         Inputs = {
            Shape = Input { Value = FuID { "Sphere", }, },
            Rotation = Input { Value = 1, },
            ["Rotate.RotOrder"] = Input { Value = FuID { "XYZ", }, },
            ["Rotate.Y"] = Input { Value = 90, },
            ScaleLock = Input { Value = 1, },
            Size = Input { Value = 3, },
            Samples = Input { Value = 60, },
            ZSlices = Input { Value = 60, },
            Gain = Input { Value = 4.9583333, },
            Image = Input {
               SourceOp = "Renderer3D1",
               Source = "Output",
            },
            FogImage = Input {
               SourceOp = "Displace1",
               Source = "Output",
            },
            SceneInput = Input {
               SourceOp = "Camera3D1",
               Source = "Output",
            },
            Comments = Input { Value = "Use Y-Rotation to rotate the Blast", },
         },
         ViewInfo = OperatorInfo { Pos = { 550.844, -149.483, }, },
      },
      Merge2 = Merge {
         Inputs = {
            Blend = Input { Value = 0.0418848, },
            Background = Input {
               SourceOp = "FastNoise2",
               Source = "Output",
            },
            Foreground = Input {
               SourceOp = "VolumeFog1",
               Source = "Output",
            },
            PerformDepthMerge = Input { Value = 0, },
         },
         ViewInfo = OperatorInfo { Pos = { 715, -280.5, }, },
      },
      Merge3D1 = Merge3D {
         Inputs = {
            SceneInput2 = Input {
               SourceOp = "Camera3D1",
               Source = "Output",
            },
            SceneInput3 = Input {
               SourceOp = "World",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 110, -148.5, }, },
      },
      World = Shape3D {
         NameSet = true,
         Inputs = {
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 4, },
            Shape = Input { Value = FuID { "SurfaceSphereInputs", }, },
            ["MtlStdInputs.Diffuse.Color.Red"] = Input { Value = 0, },
            ["MtlStdInputs.Diffuse.Color.Green"] = Input { Value = 0, },
            ["MtlStdInputs.Diffuse.Color.Blue"] = Input { Value = 0, },
            ["MtlStdInputs.Diffuse.Opacity"] = Input { Value = 0, },
            ["MtlStdInputs.ReceivesLighting"] = Input { Value = 0, },
            ["MtlStdInputs.ReceivesShadows"] = Input { Value = 0, },
            ["MtlStdInputs.UseTwoSidedLighting"] = Input { Value = 1, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 3, },
            ["SurfaceSphereInputs.Radius"] = Input { Value = 10, },
            ["SurfaceSphereInputs.Visibility.Nest"] = Input { Value = 1, },
            ["SurfaceSphereInputs.Visibility.IgnoreTransparentPixelsInAuxChannels"] = Input { Value = 0, },
            ["SurfaceSphereInputs.Matte.Nest"] = Input { Value = 1, },
            ["SurfaceSphereInputs.ObjectID.ObjectID"] = Input { Value = 5, },
         },
         ViewInfo = OperatorInfo { Pos = { -17.3628, -149.414, }, },
      },
      CreateBumpMap2 = CreateBumpMap {
         Inputs = {
            Input = Input {
               SourceOp = "Merge2",
               Source = "Output",
            },
            HeightScale = Input { Value = 57.0681058, },
         },
         ViewInfo = OperatorInfo { Pos = { 825, -280.5, }, },
      },
      Camera3D1 = Camera3D {
         Inputs = {
            ["Transform3DOp.Translate.Z"] = Input { Value = 8.0518679, },
            FLength = Input { Value = 18.2123442718302, },
            ["Stereo.Mode"] = Input { Value = FuID { "OffAxis", }, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 3, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 2, },
         },
         ViewInfo = OperatorInfo { Pos = { -32.3777, -82.5, }, },
      },
      BrightnessContrast6 = BrightnessContrast {
         Inputs = {
            Brightness = Input { Value = -0.5, },
            Input = Input {
               SourceOp = "CreateBumpMap2",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 935, -280.5, }, },
      },
      Displace2 = Displace {
         Inputs = {
            Type = Input { Value = 1, },
            XRefraction = Input { Value = 0.1, },
            YRefraction = Input { Value = 0.1, },
            Input = Input {
               SourceOp = "VolumeFog1",
               Source = "Output",
            },
            Foreground = Input {
               SourceOp = "BrightnessContrast6",
               Source = "Output",
            },
            Comments = Input { Value = "Some more Displacement", },
         },
         ViewInfo = OperatorInfo { Pos = { 936.551, -149.344, }, },
      },
      BrightnessContrast1 = BrightnessContrast {
         Inputs = {
            Alpha = Input { Value = 1, },
            Gain = Input {
               SourceOp = "BrightnessContrast1Gain",
               Source = "Value",
            },
            Input = Input {
               SourceOp = "Displace2",
               Source = "Output",
            },
            Comments = Input { Value = "On-Off-On-Off....well...you know...;-)", },
         },
         ViewInfo = OperatorInfo { Pos = { 1084.33, -151.522, }, },
      },
      BrightnessContrast1Gain = BezierSpline {
         SplineColor = { Red = 104, Green = 144, Blue = 233, },
         NameSet = true,
         KeyFrames = {
            [0] = { 0, RH = { 0.333333333333333, 0.333333333333333, }, Flags = { Linear = true, Loop = true, }, },
            [1] = { 1, LH = { 0.666666666666667, 0.666666666666667, }, RH = { 1.33333333333333, 0.666666666666667, }, Flags = { Linear = true, }, },
            [2] = { 0, LH = { 1.66666666666667, 0.333333333333333, }, RH = { 2.66666666666667, 0, }, Flags = { Linear = true, }, },
            [4] = { 0, LH = { 3.33333333333333, 0, }, Flags = { Linear = true, Loop = true, }, },
         },
      },
   },
}
my hovercraft is full of eels.

Return to Fusion

Who is online

Users browsing this forum: MrNielsson and 20 guests