private void addDoorSprite( int centerX, int centerY, int level, ShipLayout.DoorCoordinate doorCoord, SavedGameParser.DoorState doorState ) {
		int offsetX = 0, offsetY = 0, w = 35, h = 35;
		int levelCount = 3;

		// Dom't scale the image, but pass negative size to define the fallback dummy image.
		BufferedImage bigImage = getScaledImage( "img/effects/door_sheet.png", -1*((offsetX+4*w)+w), -1*((offsetY+(levelCount-1)*h)+h) );

		BufferedImage[] closedImages = new BufferedImage[levelCount];
		BufferedImage[] openImages = new BufferedImage[levelCount];

		for (int i=0; i < levelCount; i++) {
			int chop = 10;  // Chop 10 pixels off the sides for skinny doors.
			closedImages[i] = bigImage.getSubimage(offsetX+chop, offsetY+i*h, w-chop*2, h);
			openImages[i] = bigImage.getSubimage(offsetX+4*w+chop, offsetY+i*h, w-chop*2, h);
		}

		DoorSprite doorSprite = new DoorSprite( closedImages, openImages, level, doorCoord, doorState );
		if ( doorCoord.v == 1 )
			doorSprite.setSize( closedImages[level].getWidth(), closedImages[level].getHeight() );
		else
			doorSprite.setSize( closedImages[level].getHeight(), closedImages[level].getWidth() );

		placeSprite( centerX, centerY, doorSprite );
		doorSprites.add( doorSprite );
		shipPanel.add( doorSprite, DOOR_LAYER );
	}