public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2d = (Graphics2D) g;
        timer++;
        g2d.setFont(new Font("Courier", Font.BOLD, 30));
        if (Menu.isSingle()) {
            g2d.drawImage(SingleBG, 0, 0, this);
            g2d.translate(camera.getX(), camera.getY());
            if (timer <= 1000) {
                if (PlayerPick.getPlayer1Type() == 1) {
                    g2d.drawImage(new ImageIcon(Player.PATHWAY + "2D Fighter Quade Folder (Sprites and Shit)\\Random Game Things\\text1.png").getImage(), p.getX() - 300, 0, this);
                } else {
                    g2d.drawImage(new ImageIcon(Player.PATHWAY + "2D Fighter Quade Folder (Sprites and Shit)\\Random Game Things\\text1.png").getImage(), p.getX2() - 300, 0, this);
                }
            } else if (timer <= 2000) {
                if (PlayerPick.getPlayer1Type() == 1) {
                    g2d.drawImage(new ImageIcon(Player.PATHWAY + "2D Fighter Quade Folder (Sprites and Shit)\\Random Game Things\\text2.png").getImage(), p.getX() - 300, 0, this);
                } else {
                    g2d.drawImage(new ImageIcon(Player.PATHWAY + "2D Fighter Quade Folder (Sprites and Shit)\\Random Game Things\\text2.png").getImage(), p.getX2() - 300, 0, this);
                }
            } else if (timer >= 3000 && timer <= 4000) {
                if (PlayerPick.getPlayer1Type() == 1) {
                    g2d.drawImage(new ImageIcon(Player.PATHWAY + "2D Fighter Quade Folder (Sprites and Shit)\\Random Game Things\\text3.png").getImage(), p.getX() - 300, 0, this);
                } else {
                    g2d.drawImage(new ImageIcon(Player.PATHWAY + "2D Fighter Quade Folder (Sprites and Shit)\\Random Game Things\\text3.png").getImage(), p.getX2() - 300, 0, this);
                }
            } else if (timer >= 4500 && timer <= 5500) {
                if (PlayerPick.getPlayer1Type() == 1) {
                    g2d.drawImage(new ImageIcon(Player.PATHWAY + "2D Fighter Quade Folder (Sprites and Shit)\\Random Game Things\\text4.png").getImage(), p.getX() - 300, 0, this);
                } else {
                    g2d.drawImage(new ImageIcon(Player.PATHWAY + "2D Fighter Quade Folder (Sprites and Shit)\\Random Game Things\\text4.png").getImage(), p.getX2() - 300, 0, this);
                }
            }


        } else {
            //pretty obvious, draws different maps and doesnt translate for multiplayer 
            g2d.drawImage(GameBG, 0, 0, this);
        }
        if (bossDead) {
            g2d.drawImage(princess, 8800, 600, this);
        }

        //draw player

        if (p.visible) {
            //gets the image from player with the current frame
            g2d.drawImage(p.getImage(), p.getX(), p.getY(), this);
            AnimationRectPLAYER1 = new Rectangle(p.getX() + p.getImage().getWidth(this) / 2 - 24, (int) (p.getY() + p.getImage().getHeight(this) - 75), p.width, p.height);
            //draw hp
            //draw points
            if (Menu.isSingle()) {
                g2d.drawString("Your HP:", p.getX() + 150, 20);
                g2d.setColor(Color.green);
                g2d.fillRect(p.getX() + 170, 25, (int) p.getHP(), 20);
                g2d.setColor(Color.BLACK);
                g2d.drawString("Points: " + points, p.getX() + 150, 100);
                for (int d = 0; d < lives; d++) {
                    g2d.drawImage(heart, p.getX() + 330 + (d * 50), 70, this);
                }

            } else {
                //draw different hp for multiplayer
                g2d.setColor(Color.green);
                g2d.fillRect(0, 25, (int) p.getHP(), 20);
                g2d.setColor(Color.BLACK);
            }
            g2d.setColor(Color.black);
        } else if (p.getHP() <= 0) {
            //once the plyer dies, this timer goes off and the player changes to an explosion gif until timer hits 50
            timer2++;
            if (timer2 < 50) {
                g2d.drawImage(new ImageIcon(Player.PATHWAY + "explosion.gif").getImage(), p.getX(), p.getY(), this);
                timer2 = 0;
            }
        }
        //same stuff for diff player
        if (p.visible2) {
            g2d.drawImage(p.getImage2(), p.getX2(), p.getY2(), this);
            AnimationRectPLAYER2 = new Rectangle(p.getX2() + p.getImage2().getWidth(this) / 2 - 24, (int) (p.getY2() + p.getImage2().getHeight(this) - 75), p.width2, p.height2);
            if (Menu.isSingle()) {
                g2d.drawString("Your HP:", p.getX2() + 150, 20);
                g2d.fillRect(p.getX2() + 150, 25, (int) p.getHP2(), 20);
                g2d.drawString("Points: " + points, p.getX2() + 150, 100);
                for (int d = 0; d < lives; d++) {
                    g2d.drawImage(heart, p.getX2() + 330 + (d * 50), 70, this);
                }
            } else {
                g2d.setColor(Color.red);
                g2d.fillRect(494, 25, (int) p.getHP2(), 20);
                g2d.setColor(Color.BLACK);
            }
        } else if (p.getHP2() <= 0) {
            timer2++;
            if (timer2 < 50) {
                g2d.drawImage(new ImageIcon(Player.PATHWAY + "explosion.gif").getImage(), p.getX2(), p.getY2(), this);
                timer2 = 0;
            }
        }
        //draw Floors
        for (int d = 0; d < Floors.size(); d++) {
            Image f = (Image) Floors.get(d);
            //casting with (int) doesnt seem to work on previous versions of netbeans, so we had change it to a string then parse it
            int x = Integer.parseInt(FloorsX.get(d).toString());
            int y = Integer.parseInt(FloorsY.get(d).toString());
            FloorsHB.add(new Rectangle(x, y, f.getWidth(this), f.getHeight(this)));
            g2d.drawImage(f, x, y, this);
        }

        //draw Fireballs
        for (int d = 0; d < Fireballs.size(); d++) {
            Fireball f = (Fireball) Fireballs.get(d);
            if (f.getVisible()) {
                g2d.drawImage(f.getImage(), f.getX(), f.getY(), this);
            }
        }
        for (int d = 0; d < Fireballs2.size(); d++) {
            Fireball f = (Fireball) Fireballs2.get(d);
            if (f.getVisible()) {
                g2d.drawImage(f.getImage(), f.getX(), f.getY(), this);
            }
        }

        //draw Enemies
        if (Menu.isSingle()) {
            //draw boss
            if (boss.getVisible()) {
                //   mapLoaded = true;
                g2d.drawImage(boss.getImage(), boss.getX(), (int) boss.gety(), this);
                //draw boss missiles
                for (int d = 0; d < bossMissiles.size(); d++) {
                    Fireball f = (Fireball) bossMissiles.get(d);
                    if (f.getVisible()) {
                        g2d.drawImage(f.getImage(), f.getX(), f.getY(), this);
                    }
                }
                //draw boss hp

                if (PlayerPick.getPlayer1Type() == 1) {
                    g2d.drawString("BOSS HP: ", p.getX() + 125, 150);
                    g2d.fillRect(p.getX() + 150, 150, (int) boss.getHP(), 25);
                } else {
                    g2d.drawString("BOSS HP: ", p.getX2() + 125, 150);
                    g2d.fillRect(p.getX2() + 150, 150, boss.getHP(), 25);
                }
                AnimationRectBOSS = new Rectangle(boss.getX() + boss.getImage().getWidth(this) / 2 - 24, (int) (boss.gety() + boss.getImage().getHeight(this) - 75), boss.getImage().getHeight(this), boss.getImage().getHeight(this));
            }

            for (int i = 0; i < alien.size(); i++) {
                Enemy a = (Enemy) alien.get(i);
                g2d.drawImage(a.getImage(), a.getX(), (int) a.gety(), this);
            }
            for (int i = 0; i < Coins.size(); i++) {
                Coins c = (Coins) Coins.get(i);
                g2d.drawImage(c.getImage(), c.getX(), c.getY(), this);
            }
        }

    }