Help me with my Halloween decoration The Halloween is upon us, and I haven't decorated my house yet, so I gonna need your help to do this task

Input
The input will be a list of 4 digits numbers, where each digit represent a portion of decoration:

EMBU
||||
|||+-upper decoration
||+-bottom decoration
|+-mouth/nose
+-eyes


Eyes:
0 - °
1 - ¯
2 - -
3 - ^
4 - '

Mouth/Nose
0 - v
1 - w
2 - o
3 - _
4 - -

Bottom decoration 
0 - nothing
1 - skeleton
2 - pumpkin

Upper decoration
0 - nothing
1 - flying bat
2 - resting bat
3 - spider

Output

Skeleton:
(EME)
​ _|_ ​
/[|]\
​  | ​ ​
​ / \ ​

Pumpkin
​  ,  ​
(EME)

Flying bat
​     ​
​ ^"^ ​

Resting bat
​ ​ () ​
​ ​ ´` ​

Spider
​  |  ​
​ .|. ​
​ :": ​


Each decoration has a 5 character width
Upper decorations start from the top
Lower decorations start from the bottom
If the spider is over the pumpkin or there is no bottom decoration the web length will be 3, if it's over the skeleton, the web length will be 1
When the bottom decoration is 0 the first 2 digits are irrelevant
Between each decoration there will be an empty column


Example
Input
3123 ??02 1021 0310
Output

   |     ()             ​
​   |     ´`   ^"^       ​
​  .|.              (°_°)
​  :":               _|_ ​
​                   /[|]\
​   ,           ,     |  ​
​ (^w^)       (¯v¯)  / \ ​


Trailing spaces at the end of each line are optional
Trailing newline at the end of the entire output is allowed

Winning criteria
This is code-golf so the shortest answer wins
Java, 829, 798
Yeah. Substantially improved thanks to Kevin Cruijssen and corvus_192.

s-&gt;{String[]e=s.split(&quot; &quot;);char c[][]=new char[8][e.length*6],t,u,h='|';int y,x=2,i=0,j;for(String l:e){y=0;char[]p=l.toCharArray(),z=c[y];int a=p[0],b=p[1],f=p[2],d=p[3],k=x-1,m=x+1;t=a&lt;49?'°':a&lt;50?'¯':a&lt;51?45:a&lt;52?'^':39;u=(char)(b&lt;50?b+70:b&lt;51?111:b&lt;52?95:39);if(d&gt;50){z[x]=h;if(f!=49){y=2;c[1][x]=h;c[2][x]=h;}z=c[y];z[k]=46;z[m]=46;z=c[++y];z[k]=58;z[m]=58;z[x]=34;}if(d==50){z[x]=40;z[m]=41;c[++y][x]='´';c[y][m]=96;}if(d==49){z=c[++y];z[k]=94;z[x]=34;z[m]=94;}if(f&gt;49){y=6;c[y][x]=44;}if(f&gt;48){y=f&gt;49?7:3;z=c[y++];z[x]=u;z[k]=t;z[m]=t;z[x-2]=40;z[x+2]=41;}if(f==49){z=c[y++];z[x]=h;z[k]=95;z[m]=95;z=c[y];z[x]=h;z[k]=91;z[m]=93;z[x-2]=47;c[y++][x+2]=92;c[y++][x]=h;c[y][k]=47;c[y][m]=92;}x+=6;}for(;i&lt;8;i++){s=&quot;&quot;;for(j=0;j&lt;c[0].length;){t=c[i][j++];s+=t&lt;1?' ':t;}System.out.println(s);}};
    

the ungolfed version
static void makeDecorations(String s){
    String[]e=s.split(&quot; &quot;);
    char c[][]=new char[8][e.length*6],t,u,h='|';
    int x=2,i=0,j,y;
    for(String l:e){
        y=0;
        char[]p=l.toCharArray(), z=c[y];
        int a=p[0],b=p[1],f=p[2],d=p[3],k=x-1,m=x+1;
        t=a&lt;49?'°':a&lt;50?'¯':a&lt;51?45:a&lt;52?'^':39;
        u=(char)(b&lt;50?b+70:b&lt;51?111:b&lt;52?95:39);
        if(d&gt;50){z[x]=h;
            if(f!=49){y=2;
                c[1][x]=h;
                c[2][x]=h;
            }
            z=c[y];
            z[k]=46;
            z[m]=46;
            z=c[++y];
            z[k]=58;
            z[m]=58;
            z[x]=34;
        }
        if(d==50){
            z[x]=40;
            z[m]=41;
            c[++y][x]='´';
            c[y][m]=96;
        }
            
        if(d==49){
            z=c[++y];
            z[k]=94;
            z[x]=34;
            z[m]=94;}
        if(f&gt;49){
            y=6;
            c[y][x]=44;
        }
        if(f&gt;48){
            y=f&gt;49?7:3;
            z=c[y++];
            z[x]=u;
            z[k]=t;
            z[m]=t;
            z[x-2]=40;
            z[x+2]=41;
        }
        if(f==49){
            z=c[y++];
            z[x]=h;
            z[k]=95;
            z[m]=95;
            z=c[y];
            z[x]=h;
            z[k]=91;
            z[m]=93;
            z[x-2]=47;
            c[y++][x+2]=92;
            c[y++][x]=h;
            c[y][k]=47;
            c[y][m]=92;
        }
        x+=6;
    }
    for(;i&lt;8;i++){
        s=&quot;&quot;;
        for(j=0;j&lt;c[0].length;){
            t=c[i][j++];s+=t&lt;1?32:t;
        }
        System.out.println(s);
    }
}

Favorite decoration (which apparently looks more evil in my console): terminator skeleton
(-w-) 
 _|_  
/[|]\ 
  |   
 / \