I'd do a closeup of the table, with the pieces on it as objects, and coding so they can be picked up and they'd follow the mouse cursor, and could be droped on a free space. Like, the script would check if there's a piece in the position you're trying to put it, it'll make a sound or blink a red square or something, and to check if the puzzle is solved correctly, just use a series of GetObjectAt()s to check if all pieces are where they should. Though this could only be used for smaller puzzles, as there's an objects per room limit... But a workaround is using characters, or raw drawing and a load of variables to set&check where are the pieces.