ASCII art 3D StreetView Input:


You get a series of integers (fed via stdin or prompt).
Every pair of integers in this series represents a building's
WIDTH [valid range: 1..10] and HEIGHT [valid range: 0..10]
Assume input to be well-formed.


Sample input (the second line is for demonstration purposes only):


1 2 1 1 1 0 2 4 1 3 1 2 2 1
W H W H W H W H W H W H W H


Corresponding sample output:



                 ______
               /______ /|
              |       | |__
              |       |/__ /|
     __       |       |   | |__
   /__ /|     |       |   |/__ /|  
  |   | |__   |       |   |   | |______
  |   |/__ /| |       |   |   |/______ /|
  |   |   | |_|       |   |   |       | |
  |_o_|_o_|/__|_o_____|_o_|_o_|_o_____|/
  -------------------------------------  
 -  -  -  -  -  -  -  -  -  -  -  -  - 
-------------------------------------



Rules:

The buildings


A basic building block looks like this (1 W, 1H)



   __
 /__ /| (base cube is borrowed from the one at this question:
|   | |  http://stackoverflow.com/questions/1609702/code-golf-playing-cubes)
|___|/



Our view is (ahum) ~3D so neighbouring buildings may hide parts of others.
Buildings are 'logically' rendered from left to right.
The first building is preceded by two spaces to it's left.
You render every building by applying the WIDTH and HEIGHT 
to the dimensions of the base cube (do have a look at the sample output provided!). 
For reference: number of characters from the left to the right 'wall' (for a building with W > 1): (W*5)-(W-1).
Buildings with Height > 0 have ONE door (which is depicted by the character o and is
located at two characters from the 'left' wall on the 'bottom' row ).


The road:


The road consists of three parts which we'll call 'top', 'middle' and 'bottom'.
The 'top' part and 'bottom' part are identical apart from the fact that
the 'top' part is preceded by two spaces.
The middle part is preceded by one space and consists of a repetition of the
following pattern: '-  '
Length is to be determined by the total width of the combined buildings: the most rightmost part of the road corresponds with the position of the 'right' wall of the 'last' building.


Winners:

This is code-golf! The winner is the qualifying contestant with the shortest solution (by source code count). The source must consist solely of printable ASCII characters. Have fun!

Imaginary bonus points for (random) windows, cars or pedestrians.

Feel free to comment if the specifications are not clear!
Haskell, 396 characters

w&amp;h=take h((3," /|"++(w-3)#'_'++"o_|"):c[(3,"| |"++(w-1)#s++"|")])++[(2,"|/ "++(w-2)#'_'++"/"),(0,"  "++(w-2)#'_')]++c[(0,w#s)]
p(w,h)=r.z take[sum w+k|k&lt;-[1..]]$([c"-",s:c"-  ","  "++c"-"]++).map r.foldl(z(%))((2+maximum h)#(5#s))$z(&amp;)w h
main=interact$unlines.p.q.map read.words;y%(d,x)=x++drop d y;q(x:y:z)=(4*x:a,2*y:b)where(a,b)=q z
q x=(x,x);(#)=replicate;c=cycle;r=reverse;z=zipWith;s=' '


Example output:

$ runghc Streetview.hs &lt;&lt;&lt; "1 1 1 3 1 2 1 0 2 4 2 2 1 3 3 1"
                     ______                          
                   /______ /|                        
         __       |       | |        __              
       /__ /|     |       | |      /__ /|            
      |   | |__   |       | |_____|   | |            
      |   |/__ /| |       |/______|   | |            
     _|   |   | | |       |       |   | |__________  
   /__|   |   | | |       |       |   |/__________ /|
  |   |   |   | |_|       |       |   |           | |
  |_o_|_o_|_o_|/__|_o_____|_o_____|_o_|_o_________|/
  -------------------------------------------------
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
-------------------------------------------------