@Override
	public void setupSurface(Surface surface, Face direction) {

		//set bounds for the surface
		surfaceX = surface.roomView.boundX;
		surfaceWidth = surface.roomView.width;

		if (surface.roomView.sidePassage){
			/*
			 * override for sidepassages.
			 * when using the skew feature of javaxt, we must only use coordinates
			 * within the bounds of the original image file, so here we have to
			 * scale the width up so that we can move one edge past the other
			 * and maintain the correct ratio:
			 *  ___________________________
			 *  |      /                  /
			 *  |     /                  /|
			 *  |    /                  / |
			 *  |   /  transformed     /  |
			 *  |  /     image        /   |
			 *  | /                  /    |
			 *  |/__________________/_____|
			 *      original image bounds
			 *
			 */
			surfaceWidth = (int) (surface.roomView.width * 1.25);
			if (!surface.roomView.sidePassageLeft){
				surfaceX = (int) (surface.roomView.boundX - (surface.roomView.width * 0.25));
			}
		}

		surfaceHeight = surface.roomView.height/4;
		if (ceiling){
			surfaceY = surface.roomView.boundY;
		} else {
			surfaceY = surface.roomView.boundY + ((surface.roomView.height * 3) / 4);
		}

		//load and warp the image
		this.surface = surface;
		if (ceiling){
			surfaceTexture = warpImage("/texture/" + surface.roomView.room.getCeilingTexture() + ".png");
		} else {
			surfaceTexture = warpImage("/texture/" + surface.roomView.room.getFloorTexture() + ".png");
		}

		//create object list for surface
		createGameObjects(surface.roomView.room, direction);

		//load shadow for objects if on floor
		if (!ceiling){
			try {
				shadow = ImageIO.read(this.getClass().getResource("/object/shadow.png"));
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}