public Particle(ParticleEmitter pm, Registry rg, Actor as, String im, int x, int y, float vx, float vy, float a, float av, float s, int t, boolean f, boolean p, boolean dt, int d, boolean vbr) {
        particleEmitter = pm;
        registry = rg;
        source = as;
        mapX = x;
        mapY = y;
        velocityX = vx;
        velocityY = vy;
        angle = a;
        angularVelocity = av;
        size = s;
        ttl = t;
        friendly = f;
        placeable = p;
        disregardTerrain = dt;
        damage = d;
        isNew = true;
        
        image = registry.getImageLoader().getImage(im);
        
        if(vbr) {
            double angle = getAngleFromVelocity();
            AffineTransform at = new AffineTransform();
            at.rotate(angle, image.getWidth() / 2, image.getHeight() / 2);
            AffineTransformOp atop = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);
            image = atop.filter(image, null);
        }
        
        width = (int) ((float) image.getWidth() * size);
        height = (int) ((float) image.getHeight() * size);
        
        /*BufferedImage tmpImage = registry.getImageLoader().getImage(im);
        image = registry.getImageLoader().changeColor(tmpImage, (short)color.getRed(), (short)color.getGreen(), (short)color.getBlue());
        width = (int) ((float) image.getWidth() * size);
        height = (int) ((float) image.getHeight() * size);*/

       /* BufferedImage tmpImage = registry.getImageLoader().getImage(im);
        if (tmpImage != null) {
            image = colorImage(tmpImage, color.getRed(), color.getGreen(), color.getBlue());
            width = (int) ((float) image.getWidth() * size);
            height = (int) ((float) image.getHeight() * size);
        }*/
    }