public void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D) g;
		g2.setStroke(new BasicStroke(2));
		g2.setColor(new Color(40, 40, 40));

		for (Body body : walls)
		{
			drawBox(g2, body);
		}

		for (Body body : doors)
		{
			fillBox(g2, body);
		}

		for (GameSpike spike : spikes)
		{
			spike.drawSpike(g2);
		}

		for (GameFallingObject object : blocks)
		{
			object.drawObject(g2);
		}

		for (GameMovingObject object : platforms)
		{
			object.drawObject(g2);
		}

		AffineTransform tr = new AffineTransform();
		tr.translate(omruX - omruWidth / 2, omruY - omruHeight / 2);
		tr.rotate(omruRotate, omruWidth / 2, omruHeight / 2);
		tr.scale(omruWidth / 160.0, omruHeight / 165.0);
		if (omruWidth != 1)
		{
			if (world.getSaveMap() == frame.getCurMap())
				g2.drawImage(omruBG, tr, null);
			else
				g2.drawImage(omruBG2, tr, null);

			if (world.isDead())
			{
				Image subImg = ((BufferedImage) omru).getSubimage(160 * imgX, 165 * imgY, 160, 165);
				g2.drawImage(subImg, tr, null);
			}
			if (gettingUp)
			{
				Image subImg = ((BufferedImage) omru).getSubimage(160 * imgX, 165 * imgY, 160, 165);
				g2.drawImage(subImg, tr, null);
			}
		}

		if (pcImage != null)
		{
			tr = new AffineTransform();
			tr.translate(pcCoordX - pcWidth / 2, pcCoordY - pcHeight / 2);
			tr.rotate(pcRotate, pcWidth / 2, pcHeight / 2);
			tr.scale(pcWidth / 80.0, pcHeight / 80.0);
			BufferedImage subImg = ((BufferedImage) pcImage).getSubimage(pcX * 80, 0, 80, 80);
			g2.drawImage(subImg, tr, null);
		}

		if (!world.isDead())
			hero.drawHero(g2);

		if (interAct)
		{
			g2.setStroke(new BasicStroke(1));
			g2.setColor(new Color(0, 0, 0, 180));
			g2.fill(new Rectangle2D.Double(interActX, 200, 920, 200));
			g2.setColor(new Color(200, 200, 200, 255));
			Font font = new Font("Monospaced", Font.BOLD, 30);
			g2.setFont(font);
			FontRenderContext frc = g2.getFontRenderContext();
			GlyphVector gv = font.createGlyphVector(frc, "");
			GlyphVector gv2 = font.createGlyphVector(frc, "");
			if (interActMoved <= interActMax && interActMoved > 0)
			{
				gv = font.createGlyphVector(frc, interAct1.get(interActMoved - 1));
				gv2 = font.createGlyphVector(frc, interAct2.get(interActMoved - 1));
			}
			Shape glyph = gv.getOutline(35, 310);
			Shape glyph2 = gv2.getOutline(35, 340);
			g2.setColor(new Color(220, 220, 220, 255));
			g2.fill(glyph);
			g2.fill(glyph2);
			g2.setColor(new Color(0, 0, 0, 255));
			g2.draw(glyph);
			g2.draw(glyph2);

			if (interActMoved <= interActMax && interActX <= 0)
			{
				g2.setColor(new Color(colorN, colorN, colorN, 100));
				g2.fill(new Ellipse2D.Double(875 - str.length() * 5, 365, 25 + str.length() * 5, 30));
				g2.setColor(Color.BLACK);
				g2.draw(new Ellipse2D.Double(875 - str.length() * 5, 365, 25 + str.length() * 5, 30));
				g2.setColor(new Color(30, 30, 30, 150));

				Font font2 = new Font("Serif", Font.BOLD, 14);
				g2.setFont(font2);
				g2.drawString(str, (int) (884 - str.length() * 6), 385);
			}
		}
		if (!seen && show)
		{
			g2.setStroke(new BasicStroke(1));
			g2.setColor(new Color(0, 0, 0, 180));
			g2.fill(new Rectangle2D.Double(0, factY, 920, 85));
			g2.setColor(new Color(200, 200, 200, 255));
			Font font = new Font("Monospaced", Font.BOLD, 30);
			g2.setFont(font);
			FontRenderContext frc = g2.getFontRenderContext();
			GlyphVector gv = font.createGlyphVector(frc, line1);
			GlyphVector gv2 = font.createGlyphVector(frc, line2);
			Shape glyph = gv.getOutline(30, factY + 35);
			Shape glyph2 = gv2.getOutline(30, factY + 65);
			g2.setColor(new Color(220, 220, 220, 255));
			g2.fill(glyph);
			g2.fill(glyph2);
			g2.setColor(new Color(0, 0, 0, 255));
			g2.draw(glyph);
			g2.draw(glyph2);
		}
		g2.setStroke(new BasicStroke(2));
		g2.setColor(new Color(40, 40, 40));
		for (Line2D.Float line : objects.getLines())
			g2.draw(line);
	}