% egameps.sty
% <title>LaTeX style file for typesetting extensive games (using Postscript)</title>
% Macros to draw extensive games, using the PSTricks package
% macros (but retaining TeX's integer arithmetic).
%
% See egameps.pdf for documentation.
% By Martin J. Osborne
% martin.osborne@utoronto.ca
% http://www.economics.utoronto.ca/osborne
% Version 1.1, 2004/6/19
%
% Defaults. (Changes made here will be global.  To change locally, use
% optional arguments of functions.)
\def\@branchcolor{black} % color of branches
\def\@branchstyle{solid} % style of branches
\def\@branchwidth{0.8pt} % width of branches
%
% Style of arcs in \ctmbarc
\def\egarclinestyle{solid}
\def\egarclinewidth{0.6pt}
\def\egarclinecolor{black}
%
\newgray{verylightgray}{.9}
\def\ctmfillcolor{verylightgray} % color of triangle for continuum of branches
\def\egnode{\pscircle*{5}} % node
\def\eginode{\pscircle[linewidth=0.4pt]{5}} % initial node
\def\infosetdot{\pscircle*{2.5}}
\def\infosetdotsep{20} % dot spacing (n means: n times unitlength)
\newdimen\egplayerlabelsep
\egplayerlabelsep=1mm
\newdimen\egplayerboxsep
\egplayerboxsep=0mm
\newdimen\egactionlabelsep
\egactionlabelsep=0.7mm
\newdimen\egactionboxsep
\egactionboxsep=0mm
\newdimen\egpayoffboxsep
\egpayoffboxsep=0mm
\newdimen\egpayofflabelsep
\egpayofflabelsep=2mm
\def\egalboxlinestyle{none}
\def\egalboxlinecolor{black}
\def\egalboxfillstyle{none}
\def\egalboxfillcolor{white}
\def\egpayboxlinestyle{none}
\def\egpayboxlinecolor{black}
\def\egpayboxfillstyle{none}
\def\egpayboxfillcolor{white}
\def\egplboxlinestyle{none}
\def\egplboxlinecolor{black}
\def\egplboxfillstyle{none}
\def\egplboxfillcolor{white}

\def\egalpos{o} % position of action labels: offset
\def\egalbox{f}  % box for action labels: framebox
\def\egpaybox{f}  % box for payoff labels: framebox
\def\egplbox{f}  % box for player labels: framebox
\def\egarrowstyle{n} % style of arrows on branches: none

\newif\ifinitial

\newpsobject{branchline}{psline}%
   {linecolor=\@branchcolor,linestyle=\@branchstyle,linewidth=\@branchwidth}

\newcount\@egxnum
\newcount\@egxxnum
\newcount\@egxxxnum
\newcount\@egxxxxnum
\newcount\@egynum
\newcount\@egyynum
\newcount\@egyyynum
\newcount\@egyyyynum
\newdimen\@egrad
\newdimen\@egxdim
\newdimen\@egydim
\newcount\@@egxnum
\newcount\@@egxxnum
\newcount\@@egxxxnum
\newcount\@@egynum
\newcount\@@egyynum
\newcount\@@egyyynum
\newcount\@eghnum
\newcount\@egvnum
\newcount\@egabshnum
\newcount\@egabsvnum
\newcount\@eghdistance
\newcount\@tempcntx
\newcount\@tempcnty
\newcount\egalhshift
\newcount\egalvshift
 
% Command to change default direction
\newcommand{\egdirection}[1]{%
	\if#1d\def\@egdefdirection{d}
	\else\if#1u\def\@egdefdirection{u}
	\else\if#1r\def\@egdefdirection{r}
	\else\if#1l\def\@egdefdirection{l}
	\else\@egame@warning{egdirection '#1' undefined; using 'd'}
	   \def\@egdefdirection{d}
	\fi\fi\fi\fi%
}
% Default direction is down
\def\@egdefdirection{d}

\def\@egame@warning#1{%
   \GenericWarning{%
      \space\space\space\@spaces\@spaces\@spaces
   }{%
      egameps warning: #1%
   }%
}

%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%   Draw a branch
%%%%%%%%%%%%%%%%%%%%%%%%
%
% draw a branch in PSTricks style #1 from (#2,#3) to (#4,#5), putting the 
% action label #6 above the branch if #7 is u (to the right if vertical
% branch) and below it if #7 is d (to the left if vertical branch), and the
% payoff label #8 according in the appropriate position given \egdirection

\def\@egdrawbranch{%
	\@ifnextchar[{\@drawbrancho}{\@drawbranchn}
}

% #1: PSTricks style (linestyle, linecolor, etc.)
% (#2,#3): starting point
% (#4,#5): ending point
% #6: action label
% #7: action label position (c (center), o (outside), i (inside))
% #8: payoff label
\def\@drawbrancho[#1](#2,#3)(#4,#5)#6#7{%
	\@@egxnum=#2\@@egynum=#3
	\@@egxxnum=#4\@@egyynum=#5
	\if\egarrowstyle e
	   \branchline[#1]{->}(\@@egxnum,\@@egynum)(\@@egxxnum,\@@egyynum)
	\else
	   \branchline[#1](\@@egxnum,\@@egynum)(\@@egxxnum,\@@egyynum)
	   \if\egarrowstyle m
	      \@@egxxxnum=\@@egxnum
	      \advance\@@egxxxnum by\@@egxxnum
	      \divide\@@egxxxnum by2
	      \@@egyyynum=\@@egynum
	      \advance\@@egyyynum by\@@egyynum
	      \divide\@@egyyynum by2
	      \branchline[#1]{->}(\@@egxnum,\@@egynum)(\@@egxxxnum,\@@egyyynum)
	   \fi
	\fi
	\@drawactionlabel{#6}{#7}
	\@ifnextchar[{\@drawpayoffs}{}
}

\def\@drawbranchn(#1,#2)(#3,#4)#5#6{%
	\@@egxnum=#1\@@egynum=#2
	\@@egxxnum=#3\@@egyynum=#4
	\if\egarrowstyle e
	   \branchline{->}(\@@egxnum,\@@egynum)(\@@egxxnum,\@@egyynum)
	\else
	   \branchline(\@@egxnum,\@@egynum)(\@@egxxnum,\@@egyynum)
	   \if\egarrowstyle m
	      \@@egxxxnum=\@@egxnum
	      \advance\@@egxxxnum by\@@egxxnum
	      \divide\@@egxxxnum by2
	      \@@egyyynum=\@@egynum
	      \advance\@@egyyynum by\@@egyynum
	      \divide\@@egyyynum by2
	      \branchline{->}(\@@egxnum,\@@egynum)(\@@egxxxnum,\@@egyyynum)
	   \fi
	\fi
	\@drawactionlabel{#5}{#6}
	\@ifnextchar[{\@drawpayoffs}{}
}

% #1: action label
% #2: action label position
% position action label relative to reference point (\@@egxnum, \@@egynum)
\def\@drawactionlabel#1#2{%
     \psset{framesep=\egactionboxsep}
     \fboxrule 0pt\fboxsep\egactionlabelsep
	\advance\@@egxnum by\@@egxxnum
	\divide\@@egxnum by2
	\advance\@@egynum by\@@egyynum
	\divide\@@egynum by2
% shifts
	\@tempcntx=\@@egxnum% procedure changes \@@egxnum and \@@egynum, so
	\@tempcnty=\@@egynum% save their original values
	\ifnum\egalvshift=0
	   \ifnum\@@egxxnum=\@tempcntx
	   \else\ifnum\@@egxxnum>\@tempcntx
	      \advance\@@egxnum by\egalhshift
	      \@tempcnta=\egalhshift
	      \multiply\@tempcnta by\@egabsvnum
	      \divide\@tempcnta by\@egabshnum
	      \ifnum\@@egyynum>\@tempcnty
	         \advance\@@egynum by\@tempcnta
	      \else
	         \advance\@@egynum by-\@tempcnta
	      \fi
	   \else\ifnum\@@egxxnum<\@tempcntx
	      \if\@egdirection l
	         \advance\@@egxnum by\egalhshift
	      \else
	         \advance\@@egxnum by-\egalhshift
	      \fi
	      \@tempcnta=\egalhshift
	      \multiply\@tempcnta by\@egabsvnum
	      \divide\@tempcnta by\@egabshnum
	      \if\@egdirection l
	         \ifnum\@@egyynum>\@tempcnty
	            \advance\@@egynum by-\@tempcnta
	         \else
	            \advance\@@egynum by\@tempcnta
	         \fi
	      \else
	         \ifnum\@@egyynum>\@tempcnty
	            \advance\@@egynum by\@tempcnta
	         \else
	            \advance\@@egynum by-\@tempcnta
	         \fi
	      \fi
	   \fi\fi\fi
	\else\ifnum\egalhshift=0
	   \ifnum\@@egyynum=\@tempcnty
	   \else\ifnum\@@egyynum>\@tempcnty
	      \advance\@@egynum by\egalvshift
	      \@tempcnta=\egalvshift
	      \multiply\@tempcnta by\@eghnum
	      \divide\@tempcnta by\@egvnum
	      \ifnum\@@egxxnum>\@tempcntx
	         \advance\@@egxnum by\@tempcnta
	      \else
	         \advance\@@egxnum by-\@tempcnta
	      \fi
	   \else\ifnum\@@egyynum<\@tempcnty
	      \if\@egdirection d
	         \advance\@@egynum by\egalvshift
	      \else
	         \advance\@@egynum by-\egalvshift
	      \fi
	      \@tempcnta=\egalvshift
	      \multiply\@tempcnta by\@eghnum
	      \divide\@tempcnta by\@egvnum
	      \if\@egdirection d
	         \ifnum\@@egxxnum>\@tempcntx
	            \advance\@@egxnum by-\@tempcnta
	         \else
	            \advance\@@egxnum by\@tempcnta
	         \fi
	      \else
	         \ifnum\@@egxxnum>\@tempcntx
	            \advance\@@egxnum by\@tempcnta
	         \else
	            \advance\@@egxnum by-\@tempcnta
	         \fi
	      \fi
	   \fi\fi\fi
	\else
	   \if\@egdirection d
	      \ifnum\@@egxxnum>\@tempcntx
	         \advance\@@egxnum by\egalhshift
	      \else
	         \advance\@@egxnum by-\egalhshift
	      \fi
	   \else\if\@egdirection u
	      \ifnum\@@egxxnum>\@tempcntx
	         \advance\@@egxnum by\egalhshift
	      \else
	         \advance\@@egxnum by-\egalhshift
	      \fi
	   \else\if\@egdirection r
	      \advance\@@egxnum by\egalhshift
	   \else\if\@egdirection l
	      \advance\@@egxnum by\egalhshift
	   \fi\fi\fi\fi
	   \if\@egdirection d
	      \advance\@@egynum by\egalvshift
	   \else\if\@egdirection u
	      \advance\@@egynum by\egalvshift
	   \else\if\@egdirection r
	      \ifnum\@@egyynum>\@tempcnty
	         \advance\@@egynum by\egalvshift
	      \else
	         \advance\@@egynum by-\egalvshift
	      \fi
	   \else\if\@egdirection l
	      \ifnum\@@egyynum>\@tempcnty
	         \advance\@@egynum by\egalvshift
	      \else
	         \advance\@@egynum by-\egalvshift
	      \fi
	   \fi\fi\fi\fi
	\fi\fi
%
	\if\egalbox f
	   \def\@egalbox{\psframebox[linestyle=\egalboxlinestyle,%
                  linecolor=\egalboxlinecolor,fillstyle=\egalboxfillstyle,%
	             fillcolor=\egalboxfillcolor]}
	\else\if\egalbox c
	   \def\@egalbox{\pscirclebox[linestyle=\egalboxlinestyle,%
                  linecolor=\egalboxlinecolor,fillstyle=\egalboxfillstyle,%
	             fillcolor=\egalboxfillcolor]}
	\fi\fi
	\if#2c
	   \setbox0\hbox{\fbox{\@egalbox{#1}}}
	   \psset{framesep=\egactionlabelsep}
	   \rput*(\@@egxnum,\@@egynum){\box0}
	\else\if#2o % outside
	   \if\@egdirection d
	      \ifnum\@tempcntx<\@@egxxnum
		\ifnum\@tempcnty=\@@egyynum
		   \rput[b](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\else
		   \rput[bl](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\fi
	      \else\ifnum\@tempcntx>\@@egxxnum
		\ifnum\@tempcnty=\@@egyynum
		   \rput[b](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\else
		   \rput[br](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\fi
	      \else\ifnum\@tempcntx=\@@egxxnum
		\rput[l](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
	      \fi\fi\fi
	   \else\if\@egdirection u
	      \ifnum\@tempcntx<\@@egxxnum
		\ifnum\@tempcnty=\@@egyynum
		   \rput[t](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\else
		   \rput[tl](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\fi
	      \else\ifnum\@tempcntx>\@@egxxnum
		\ifnum\@tempcnty=\@@egyynum
		   \rput[t](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\else
		   \rput[tr](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\fi
	      \else\ifnum\@tempcntx=\@@egxxnum
		\rput[l](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
	      \fi\fi\fi
	   \else\if\@egdirection r
	      \ifnum\@tempcnty<\@@egyynum
		\ifnum\@tempcntx=\@@egxxnum
		   \rput[r](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\else
		   \rput[br](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\fi
	      \else\ifnum\@tempcnty>\@@egyynum
		\ifnum\@tempcntx=\@@egxxnum
		   \rput[r](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\else
		   \rput[tr](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\fi
	      \else\ifnum\@tempcnty=\@@egyynum
		\rput[b](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
	      \fi\fi\fi
	   \else\if\@egdirection l
	      \ifnum\@tempcnty<\@@egyynum
		\ifnum\@tempcntx=\@@egxxnum
		   \rput[l](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\else
		   \rput[bl](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\fi
	      \else\ifnum\@tempcnty>\@@egyynum
		\ifnum\@tempcntx=\@@egxxnum
		   \rput[l](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\else
		   \rput[tl](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\fi
	      \else\ifnum\@tempcnty=\@@egyynum
		\rput[b](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
	      \fi\fi\fi
	   \fi\fi\fi\fi
	\else\if#2i % inside
	   \if\@egdirection d
	      \ifnum\@tempcntx<\@@egxxnum
		\ifnum\@tempcnty=\@@egyynum
		   \rput[t](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\else
		   \rput[tr](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\fi
	      \else\ifnum\@tempcntx>\@@egxxnum
		\ifnum\@tempcnty=\@@egyynum
		   \rput[t](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\else
		   \rput[tl](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\fi
	      \else\ifnum\@tempcntx=\@@egxxnum
		\rput[r](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
	      \fi\fi\fi
	   \else\if\@egdirection u
	      \ifnum\@tempcntx<\@@egxxnum
		\ifnum\@tempcnty=\@@egyynum
		   \rput[b](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\else
		   \rput[br](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\fi
	      \else\ifnum\@tempcntx>\@@egxxnum
		\ifnum\@tempcnty=\@@egyynum
		   \rput[b](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\else
		   \rput[bl](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\fi
	      \else\ifnum\@tempcntx=\@@egxxnum
		\rput[r](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
	      \fi\fi\fi
	   \else\if\@egdirection r
	      \ifnum\@tempcnty<\@@egyynum
		\ifnum\@tempcntx=\@@egxxnum
		   \rput[l](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\else
		   \rput[tl](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\fi
	      \else\ifnum\@tempcnty>\@@egyynum
		\ifnum\@tempcntx=\@@egxxnum
		   \rput[l](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\else
		   \rput[bl](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\fi
	      \else\ifnum\@tempcnty=\@@egyynum
		\rput[t](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
	      \fi\fi\fi
	   \else\if\@egdirection l
	      \ifnum\@tempcnty<\@@egyynum
		\ifnum\@tempcntx=\@@egxxnum
		   \rput[r](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\else
		   \rput[tr](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\fi
	      \else\ifnum\@tempcnty>\@@egyynum
		\ifnum\@tempcntx=\@@egxxnum
		   \rput[r](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\else
		   \rput[br](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
		\fi
	      \else\ifnum\@tempcnty=\@@egyynum
		\rput[t](\@@egxnum,\@@egynum){\fbox{\@egalbox{#1}}}
	      \fi\fi\fi
	   \fi\fi\fi\fi
	\fi\fi\fi
}

\def\@drawpayoffs[#1]{%
	\ifx#1\@empty
	\else
	   \psset{framesep=\egpayoffboxsep}
	   \fboxrule 0pt\fboxsep\egpayofflabelsep
	   \if\egpaybox f
	      \def\@egpaybox{\psframebox[linestyle=\egpayboxlinestyle,%
                  linecolor=\egpayboxlinecolor,fillstyle=\egpayboxfillstyle,%
	             fillcolor=\egpayboxfillcolor]}
	   \else\if\egpaybox c
	      \def\@egpaybox{\pscirclebox[linestyle=\egpayboxlinestyle,%
                  linecolor=\egpayboxlinecolor,fillstyle=\egpayboxfillstyle,%
	             fillcolor=\egpayboxfillcolor]}
	   \fi\fi
	   \if\@egdirection d
	      \rput[t](\@@egxxnum,\@@egyynum){\fbox{\@egpaybox{#1}}}
	   \else\if\@egdirection u
	      \rput[b](\@@egxxnum,\@@egyynum){\fbox{\@egpaybox{#1}}}
	   \else\if\@egdirection r
	      \rput[l](\@@egxxnum,\@@egyynum){\fbox{\@egpaybox{#1}}}
	   \else\if\@egdirection l
	      \rput[r](\@@egxxnum,\@@egyynum){\fbox{\@egpaybox{#1}}}
	   \fi\fi\fi\fi
	\fi
}

\def\@egdrawnode#1{
	\psset{framesep=1pt}
	\ifinitial\rput*(\@egxnum,\@egynum){\eginode}\initialfalse
	\else\rput*(\@egxnum,\@egynum){\egnode}%
	\fi
	\psset{framesep=\egplayerboxsep}
	\fboxrule 0pt\fboxsep\egplayerlabelsep
	\if\@branchplp o
	   \rput*(\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
	\else\if\@egdirection d
        \if\@branchplp l
           \rput[br](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
        \else\if\@branchplp r
           \rput[bl](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
        \else
           \rput[b](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
        \fi\fi
     \else\if\@egdirection u
        \if\@branchplp l
           \rput[tr](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
        \else\if\@branchplp r
           \rput[tl](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
        \else
           \rput[t](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
        \fi\fi
     \else\if\@egdirection r
        \if\@branchplp u
           \rput[br](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
        \else\if\@branchplp d
           \rput[tr](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
        \else
           \rput[r](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
        \fi\fi
     \else\if\@egdirection l
        \if\@branchplp u
           \rput[bl](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
        \else\if\@branchplp d
           \rput[tl](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
        \else
           \rput[l](\@egxnum,\@egynum){\fbox{\@egplbox{#1}}}
        \fi\fi
     \fi\fi\fi\fi\fi
}

%%%%%%%%%%%%%%%%%%%%%
%%%%%%   \putbranch
%%%%%%%%%%%%%%%%%%%%%

% \putbranch and the two macros it calls define the parameters
%	\@egxnum
%	\@egynum
%	\@eghnum
%	\@egvnum
%	\@egabshnum (absolute value of \@eghnum)
%	\@egabsvnum (absolute value of \@egvnum)
%	\@egdirection
%	\@eghdistance (for direction d, horizontal distance from node to outer
%	   branch (the single branch in the case of one, and either branch in
%	   the case of two))
% to be used by \ib, \iib, \iiib, and \ctmb.

\def\putbranch(#1,#2)(#3,#4){%
	\egalhshift=0%
	\egalvshift=0%
	\@egxnum=#1\@egynum=#2\@eghnum=#3\@egvnum=#4%
% define absolute values of \@eghnum and \@egvnum
	\ifnum\@eghnum<0
	   \@egabshnum=-\@eghnum
	\else\@egabshnum=\@eghnum\fi
	\ifnum\@egvnum<0
	   \@egabsvnum=-\@egvnum
	\else\@egabsvnum=\@egvnum\fi
%% player label box
	\if\egplbox f
	   \gdef\@egplbox{\psframebox[linestyle=\egplboxlinestyle,%
                  linecolor=\egplboxlinecolor,fillstyle=\egplboxfillstyle,%
	             fillcolor=\egplboxfillcolor]}
	\else\if\egplbox c
	   \gdef\@egplbox{\pscirclebox[linestyle=\egplboxlinestyle,%
                  linecolor=\egplboxlinecolor,fillstyle=\egplboxfillstyle,%
	             fillcolor=\egplboxfillcolor]}
	\else
	   \@egame@warning{egplbox style '\egplbox' undefined; using c}
	   \gdef\@egplbox{\pscirclebox[linestyle=\egplboxlinestyle,%
                  linecolor=\egplboxlinecolor,fillstyle=\egplboxfillstyle,%
	             fillcolor=\egplboxfillcolor]}
	\fi\fi
%%
	\@ifnextchar[{\@putbrancho(#1,#2)(#3,#4)}{\@putbranch(#1,#2)(#3,#4)}%
}

\def\@putbrancho(#1,#2)(#3,#4)[#5]#6{%
	\def\@egdirection{#5}\@eghdistance=#6%
}

\def\@putbranch(#1,#2)(#3,#4)#5{%
	\def\@egdirection{\@egdefdirection}\@eghdistance=#5%
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%    ONE BRANCH
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% One branch

\def\ib{%
	\if\@egdirection d
	   \@egvnum=-\@egabsvnum
	\else\if\@egdirection u
	   \@egvnum=\@egabsvnum
	\else\if\@egdirection r
	   \@eghnum=\@egabshnum
	\else\if\@egdirection l
	   \@eghnum=-\@egabshnum
	\fi\fi\fi\fi
	\@egxxnum=\@egxnum
	\ifnum\@eghnum=0
	   \@egyynum=\@egynum
	   \ifnum\@egvnum<0
	      \advance\@egyynum by-\@eghdistance
	   \else
	      \advance\@egyynum by\@eghdistance
	   \fi
	\else
	   \@egyynum=\@egabsvnum
	   \multiply\@egyynum by\@eghdistance
	   \divide\@egyynum by\@egabshnum
	   \ifnum\@egvnum<0
	      \advance\@egyynum by-\@egynum
	      \multiply\@egyynum by-1
	   \else
	      \advance\@egyynum by\@egynum
	   \fi
	   \ifnum\@eghnum<0
	      \advance\@egxxnum by-\@eghdistance
	   \else
	      \advance\@egxxnum by\@eghdistance
	   \fi
	\fi
	\@ifnextchar[{\@ibpsto}{\@ibpstno}
}

%%% first argument is option list

% #1: list of options to be ultimately passed to \psline (via \branchline)
% #2: player label
\def\@ibpsto[#1]#2{%
	\@ifnextchar[{\@ibo{#1}{#2}}{\@ib{#1}{#2}}%
}

% #1: list of options
% #2: player label
% #3: player label position
% #4: action label
\def\@ibo#1#2[#3]#4{%
	\def\@branchplp{#3}
	\@ifnextchar[{\@ibot{#1}{#2}{#4}}{\@ibotn{#1}{#2}{#4}}%
}

% #1: list of options
% #2: player label
% #3: action label
\def\@ib#1#2#3{%
	\def\@branchplp{t}
	\@ifnextchar[{\@ibot{#1}{#2}{#3}}{\@ibotn{#1}{#2}{#3}}%
}

% #1: list of options
% #2: player label
% #3: action label
\def\@ibotn#1#2#3{%
	\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#3}{\egalpos}
	\@egdrawnode{#2}%
}

% #1: list of options
% #2: player label
% #3: action label
% #4: action label position OR payoffs
\def\@ibot#1#2#3[#4]{%
	\if#4c\def\@tempegalpos{1}
	\else\if#4o\def\@tempegalpos{1}
	\else\if#4i\def\@tempegalpos{1}
	\else\def\@tempegalpos{0} % last argument is payoffs, not label position
	\fi\fi\fi
	\@ifnextchar[{\@ibt{#1}{#2}{#3}{#4}}{\@ibtn{#1}{#2}{#3}{#4}}%
}

% #1: list of options
% #2: player label
% #3: action label
% #4: action label position
% #5: payoffs
\def\@ibt#1#2#3#4[#5]{%
	\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#3}%
	     {#4}[#5]
	\@egdrawnode{#2}%
}

% #1: list of options
% #2: player label
% #3: action label
% #4: action label position if \@tempalpos=1, otherwise payoff
\def\@ibtn#1#2#3#4{%
	\if\@tempegalpos 0
	   \@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#3}%
            {\egalpos}[#4]
	   \@egdrawnode{#2}%
	\else
	   \@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#3}{#4}
	   \@egdrawnode{#2}%
	\fi
}

%%% first argument not an option list

% #1: player label
\def\@ibpstno#1{%
	\@ifnextchar[{\@ibox{#1}}{\@ibx{#1}}%
}

% #1: player label
% #2: player label position
% #3: action label
\def\@ibox#1[#2]#3{%
	\def\@branchplp{#2}
	\@ifnextchar[{\@ibotx{#1}{#3}}{\@ibotnx{#1}{#3}}%
}

% #1: player label
% #2: action label
\def\@ibx#1#2{%
	\def\@branchplp{t}
	\@ifnextchar[{\@ibotx{#1}{#2}}{\@ibotnx{#1}{#2}}%
}

% #1: player label
% #2: action label
\def\@ibotnx#1#2{%
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#2}{\egalpos}
	\@egdrawnode{#1}%
}

% #1: player label
% #2: action label
% #3: action label position OR payoffs
\def\@ibotx#1#2[#3]{%
	\if#3c\def\@tempegalpos{1}
	\else\if#3o\def\@tempegalpos{1}
	\else\if#3i\def\@tempegalpos{1}
	\else\def\@tempegalpos{0} % last argument is payoffs, not label position
	\fi\fi\fi
	\@ifnextchar[{\@ibtx{#1}{#2}{#3}}{\@ibtnx{#1}{#2}{#3}}%
}

% #1: player label
% #2: action label
% #3: action label position
% #4: payoffs
\def\@ibtx#1#2#3[#4]{%
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#2}%
	     {#3}[#4]
	\@egdrawnode{#1}%
}

% #1: player label
% #2: action label
% #3: payoff
\def\@ibtnx#1#2#3{%
	\if\@tempegalpos 0
	   \@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#2}%
            {\egalpos}[#3]
	   \@egdrawnode{#1}%
	\else
	   \@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#2}{#3}
	   \@egdrawnode{#1}%
	\fi
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%    TWO BRANCHES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Two branches

% calculate \@egxxnum, \@egxxxnum, \@egyynum, and \@egyyynum from \@egxnum etc.
% (used also in \ctmb)
\def\@egxyiicalc{
	\@eghnum=\@egabshnum
	\@egvnum=\@egabsvnum
	\@egxxnum=\@egxnum
	\@egxxxnum=\@egxnum
	\ifnum\@eghnum=0
	   \@egyynum=\@egynum
	   \@egyyynum=\@egynum
	   \if\@egdirection d
	      \advance\@egyynum by-\@eghdistance
	      \advance\@egyyynum by-\@eghdistance
	   \else\if\@egdirection u
	      \advance\@egyynum by\@eghdistance
	      \advance\@egyyynum by\@eghdistance
	   \else
	      \advance\@egyynum by-\@eghdistance
	      \advance\@egyyynum by\@eghdistance
	   \fi\fi
	\else
	   \@egyynum=\@egabsvnum
	   \multiply\@egyynum by\@eghdistance
	   \divide\@egyynum by\@egabshnum
	   \if\@egdirection d
	      \advance\@egyynum by-\@egynum
	      \multiply\@egyynum by-1
	      \@egyyynum=\@egyynum
	      \advance\@egxxnum by\@eghdistance
	      \advance\@egxxxnum by-\@eghdistance
	   \else\if\@egdirection u
	      \advance\@egyynum by\@egynum
	      \@egyyynum=\@egyynum
	      \advance\@egxxnum by\@eghdistance
	      \advance\@egxxxnum by-\@eghdistance
	   \else\if\@egdirection r
	      \@egyyynum=\@egyynum
	      \advance\@egyynum by-\@egynum
	      \multiply\@egyynum by-1
	      \advance\@egyyynum by\@egynum
	      \advance\@egxxnum by\@eghdistance
	      \advance\@egxxxnum by\@eghdistance
	   \else\if\@egdirection l
	      \@egyyynum=\@egyynum
	      \advance\@egyynum by-\@egynum
	      \multiply\@egyynum by-1
	      \advance\@egyyynum by\@egynum
	      \advance\@egxxnum by-\@eghdistance
	      \advance\@egxxxnum by-\@eghdistance
	   \fi\fi\fi\fi
	\fi
}

\def\iib{%
	\@egxyiicalc
	\@ifnextchar[{\@iibpsto}{\@iibpstno}
}

%%% options present

% #1: list of options to be ultimately passed to \psline (via \branchline)
\def\@iibpsto[#1]{%
	\@ifnextchar[{\@iibao{#1}}{\@iiba{#1}}%
}

% #1: list of options for one branch
% #2: list of options for other branch
% #3: player label
\def\@iibao#1[#2]#3{%
	\@ifnextchar[{\@iibo{#1}{#2}{#3}}{\@iib{#1}{#2}{#3}}%
}

% #1: list of options for both branches
% #2: player label
\def\@iiba#1#2{%
	\@ifnextchar[{\@iibo{#1}{#1}{#2}}{\@iib{#1}{#1}{#2}}%
}

% #1: list of options for one branch
% #2: list of options for other branch
% #3: player label
% #4: player label position
% #5: action label 1
% #6: action label 2
\def\@iibo#1#2#3[#4]#5#6{%
	\def\@branchplp{#4}
	\@ifnextchar[{\@iibot{#1}{#2}{#3}{#5}{#6}}{\@iibotn{#1}{#2}{#3}{#5}{#6}}%
}

% #1: list of options for one branch
% #2: list of options for other branch
% #3: player label
% #4: action label 1
% #5: action label 2
\def\@iib#1#2#3#4#5{%
	\def\@branchplp{t}
	\@ifnextchar[{\@iibot{#1}{#2}{#3}{#4}{#5}}{\@iibotn{#1}{#2}{#3}{#4}{#5}}%
}

% #1: list of options for one branch
% #2: list of options for other branch
% #3: player label
% #4: action label 1
% #5: action label 2
\def\@iibotn#1#2#3#4#5{%
	\@egdrawbranch[#2](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#5}{\egalpos}
	\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#4}{\egalpos}
	\@egdrawnode{#3}%
}

% #1: list of options
% #2: list of options
% #3: player label
% #4: action label 1
% #5: action label 2
% #6: action label position OR payoffs
\def\@iibot#1#2#3#4#5[#6]{%
	\@ifnextchar[{\@iibt{#1}{#2}{#3}{#4}{#5}{#6}}{\@iibtn{#1}{#2}{#3}{#4}%
{#5}{#6}}%
}

% if at least two optional arguments at end, check for third argument
% #1: list of options for one branch
% #2: list of options for other branch
% #3: player label
% #4: action label 1
% #5: action label 2
% #6: action label position or payoffs
% #7: payoffs
\def\@iibt#1#2#3#4#5#6[#7]{%
	\@ifnextchar[{\@iibtz{#1}{#2}{#3}{#4}{#5}{#6}{#7}}{\@iibtnz{#1}{#2}{#3}%
{#4}{#5}{#6}{#7}}%
}

% 3 arguments at end
% #1: list of options for one branch
% #2: list of options for other branch
% #3: player label
% #4: action label 1
% #5: action label 2
% #6: action label position
% #7: payoffs
% #8: payoffs
\def\@iibtz#1#2#3#4#5#6#7[#8]{%
	\@egdrawbranch[#2](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#5}%
	     {#6}[#8]
	\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#4}%
	     {#6}[#7]
	\@egdrawnode{#3}%
}

% 2 arguments at end, so must be payoffs
% #1: list of options for one branch
% #2: list of options for other branch
% #3: player label
% #4: action label 1
% #5: action label 2
% #6: payoffs
% #7: payoffs
\def\@iibtnz#1#2#3#4#5#6#7{%
	\@egdrawbranch[#2](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#5}%
	     {\egalpos}[#7]
	\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#4}%
	     {\egalpos}[#6]
	\@egdrawnode{#3}%
}

% 1 argument at end, so must be egalpos
% #1: list of options for one branch
% #2: list of options for one branch
% #3: player label
% #4: action label 1
% #5: action label 2
% #6: action label position
\def\@iibtn#1#2#3#4#5#6{%
	\@egdrawbranch[#2](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#5}{#6}
	\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#4}{#6}
	\@egdrawnode{#3}%
}

%%% no options present

% #1: player label
\def\@iibpstno#1{%
	\@ifnextchar[{\@iibox{#1}}{\@iibx{#1}}%
}

% #1: player label
% #2: player label position
% #3: action label 1
% #4: action label 2
\def\@iibox#1[#2]#3#4{%
	\def\@branchplp{#2}
	\@ifnextchar[{\@iibotx{#1}{#3}{#4}}{\@iibotnx{#1}{#3}{#4}}%
}

% #1: player label
% #2: action label 1
% #3: action label 2
\def\@iibx#1#2#3{%
	\def\@branchplp{t}
	\@ifnextchar[{\@iibotx{#1}{#2}{#3}}{\@iibotnx{#1}{#2}{#3}}%
}

% #1: player label
% #2: action label
% #3: action label
\def\@iibotnx#1#2#3{%
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#3}{\egalpos}
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#2}{\egalpos}
	\@egdrawnode{#1}%
}

% #1: player label
% #2: action label 1
% #3: action label 2
% #4: action label position OR payoffs
\def\@iibotx#1#2#3[#4]{%
	\@ifnextchar[{\@iibtx{#1}{#2}{#3}{#4}}{\@iibtnx{#1}{#2}{#3}{#4}}%
}

% at least 2 arguments at end, so check for third
% #1: player label
% #2: action label 1
% #3: action label 2
% #4: action label position or payoffs
% #5: payoffs
\def\@iibtx#1#2#3#4[#5]{%
	\@ifnextchar[{\@iibtxz{#1}{#2}{#3}{#4}{#5}}{\@iibtnxz{#1}{#2}{#3}%
{#4}{#5}}%
}

% 2 arguments at end
% #1: player label
% #2: action label 1
% #3: action label 2
% #4: payoffs
% #5: payoffs
\def\@iibtnxz#1#2#3#4#5{%
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#3}%
	     {\egalpos}[#5]
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#2}%
	     {\egalpos}[#4]
	\@egdrawnode{#1}%
}

% 3 arguments at end
% #1: player label
% #2: action label 1
% #3: action label 2
% #4: action label position
% #5: payoffs
% #6: payoffs
\def\@iibtxz#1#2#3#4#5[#6]{%
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#3}{#4}[#6]
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#2}{#4}[#5]
	\@egdrawnode{#1}%
}

% 1 argument at end, so must be egalpos
% #1: player label
% #2: action label 1
% #3: action label 2
% #4: action label position
\def\@iibtnx#1#2#3#4{%
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#3}%
	       {#4}
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#2}%
	       {#4}
	\@egdrawnode{#1}%
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%    THREE BRANCHES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% calculate coordinates for third (middle) branch
\def\@egxyiiicalc{%
	\if\@egdirection d
	   \@egxxxxnum=\@egxnum
	   \ifnum\@eghnum=0
	      \@egyyyynum=\@egynum
	      \advance\@egyyyynum by-\@eghdistance
	   \else
	      \@egyyyynum=\@eghdistance
	      \multiply\@egyyyynum by\@egabsvnum
	      \divide\@egyyyynum by\@egabshnum
	      \advance\@egyyyynum by-\@egynum
	      \multiply\@egyyyynum by-1
	   \fi
	\else\if\@egdirection u
	   \@egxxxxnum=\@egxnum
	   \ifnum\@eghnum=0
	      \@egyyyynum=\@egynum
	      \advance\@egyyyynum by\@eghdistance
	   \else
	      \@egyyyynum=\@eghdistance
	      \multiply\@egyyyynum by\@egabsvnum
	      \divide\@egyyyynum by\@egabshnum
	      \advance\@egyyyynum by\@egynum
	   \fi
	\else\if\@egdirection r
	   \@egyyyynum=\@egynum
	   \@egxxxxnum=\@egxnum
	   \advance\@egxxxxnum by\@eghdistance
	\else\if\@egdirection l
	   \@egyyyynum=\@egynum
	   \@egxxxxnum=\@egxnum
	   \advance\@egxxxxnum by-\@eghdistance
	\fi\fi\fi\fi
}

\def\iiib{%
	\@egxyiicalc
	\@egxyiiicalc
	\@ifnextchar[{\@iiibpsto}{\@iiibpstno}
}

%%% options present

% #1: list of options to be ultimately passed to \psline (via \branchline)
% #2: player label
\def\@iiibpsto[#1]#2{%
	\@ifnextchar[{\@iiibo{#1}{#2}}{\@iiib{#1}{#2}}%
}

% #1: list of options
% #2: player label
% #3: player label position
% #4: action label 1
% #5: action label 2
% #6: action label 3
\def\@iiibo#1#2[#3]#4#5#6{%
	\def\@branchplp{#3}
	\@ifnextchar[{\@iiibot{#1}{#2}{#4}{#5}{#6}}{\@iiibotn{#1}{#2}{#4}%
{#5}{#6}}%
}

% #1: list of options for one branch
% #2: player label
% #3: action label 1
% #4: action label 2
% #5: action label 3
\def\@iiib#1#2#3#4#5{%
	\def\@branchplp{t}
	\@ifnextchar[{\@iiibot{#1}{#2}{#3}{#4}{#5}}{\@iiibotn{#1}{#2}{#3}%
{#4}{#5}}%
}

% #1: list of options for one branch
% #2: player label
% #3: action label 1
% #4: action label 2
% #5: action label 3
\def\@iiibotn#1#2#3#4#5{%
	\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#5}{\egalpos}
	\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#3}{\egalpos}
	\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxxnum,\@egyyyynum){#4}%
{\egalpos}
	\@egdrawnode{#2}%
}

% #1: list of options
% #2: player label
% #3: action label 1
% #4: action label 2
% #5: action label 3
% #6: action label position OR payoffs
\def\@iiibot#1#2#3#4#5[#6]{%
	\@ifnextchar[{\@iiibt{#1}{#2}{#3}{#4}{#5}{#6}}{\@iiibtn{#1}{#2}{#3}{#4}%
{#5}{#6}}%
}

% if at least two optional arguments at end, check for third argument
% #1: list of options
% #2: player label
% #3: action label 1
% #4: action label 2
% #5: action label 3
% #6: action label position or payoffs
% #7: payoffs
% #8: payoffs
\def\@iiibt#1#2#3#4#5#6[#7][#8]{%
	\@ifnextchar[{\@iiibtz{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}}%
{\@iiibtnz{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}}%
}

% 4 arguments at end
% #1: list of options
% #2: player label
% #3: action label 1
% #4: action label 2
% #5: action label 3
% #6: action label position
% #7: payoffs
% #8: payoffs
% #9: payoffs
\def\@iiibtz#1#2#3#4#5#6#7#8[#9]{%
	\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#5}%
	     {#6}[#9]
	\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#3}%
	     {#6}[#7]
	\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxxnum,\@egyyyynum){#4}%
	     {#6}[#8]
	\@egdrawnode{#2}%
}

% 3 arguments at end, so must be payoffs
% #1: list of options
% #2: player label
% #3: action label 1
% #4: action label 2
% #5: action label 3
% #6: payoffs
% #7: payoffs
% #8: payoffs
\def\@iiibtnz#1#2#3#4#5#6#7#8{%
	\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#5}%
	     {\egalpos}[#8]
	\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#3}%
	     {\egalpos}[#6]
	\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxxnum,\@egyyyynum){#4}%
	     {\egalpos}[#7]
	\@egdrawnode{#2}%
}

% 1 argument at end, so must be egalpos
% #1: list of options for one branch
% #2: player label
% #3: action label 1
% #4: action label 2
% #5: action label 3
% #6: action label position
\def\@iiibtn#1#2#3#4#5#6{%
	\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#5}{#6}
	\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#3}{#6}
	\@egdrawbranch[#1](\@egxnum,\@egynum)(\@egxxxxnum,\@egyyyynum){#4}{#6}
	\@egdrawnode{#1}%
}

%%% no options present

% #1: player label
\def\@iiibpstno#1{%
	\@ifnextchar[{\@iiibox{#1}}{\@iiibx{#1}}%
}

% #1: player label
% #2: player label position
% #3: action label 1
% #4: action label 2
% #5: action label 2
\def\@iiibox#1[#2]#3#4#5{%
	\def\@branchplp{#2}
	\@ifnextchar[{\@iiibotx{#1}{#3}{#4}{#5}}{\@iiibotnx{#1}{#3}{#4}{#5}}%
}

% #1: player label
% #2: action label 1
% #3: action label 2
% #4: action label 3
\def\@iiibx#1#2#3#4{%
	\def\@branchplp{t}
	\@ifnextchar[{\@iiibotx{#1}{#2}{#3}{#4}}{\@iiibotnx{#1}{#2}{#3}{#4}}%
}

% #1: player label
% #2: action label
% #3: action label
% #4: action label
\def\@iiibotnx#1#2#3#4{%
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#4}{\egalpos}
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#2}{\egalpos}
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxxnum,\@egyyyynum){#3}{\egalpos}
	\@egdrawnode{#1}%
}

% #1: player label
% #2: action label 1
% #3: action label 2
% #4: action label 3
% #5: action label position OR payoffs
\def\@iiibotx#1#2#3#4[#5]{%
	\@ifnextchar[{\@iiibtx{#1}{#2}{#3}{#4}{#5}}{\@iiibtnx{#1}{#2}{#3}%
{#4}{#5}}%
}

% at least 2 arguments at end, so check for third
% #1: player label
% #2: action label 1
% #3: action label 2
% #4: action label 3
% #5: action label position or payoffs
% #6: payoffs
% #7: payoffs
\def\@iiibtx#1#2#3#4#5[#6][#7]{%
	\@ifnextchar[{\@iiibtxz{#1}{#2}{#3}{#4}{#5}{#6}{#7}}%
{\@iiibtnxz{#1}{#2}{#3}{#4}{#5}{#6}{#7}}%
}

% 3 arguments at end
% #1: player label
% #2: action label 1
% #3: action label 2
% #4: action label 3
% #5: payoffs
% #6: payoffs
% #7: payoffs
\def\@iiibtnxz#1#2#3#4#5#6#7{%
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#4}%
	     {\egalpos}[#7]
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#2}%
	     {\egalpos}[#5]
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxxnum,\@egyyyynum){#3}%
	     {\egalpos}[#6]
	\@egdrawnode{#1}%
}

% 4 arguments at end
% #1: player label
% #2: action label 1
% #3: action label 2
% #4: action label 3
% #5: action label position
% #6: payoffs
% #7: payoffs
% #8: payoffs
\def\@iiibtxz#1#2#3#4#5#6#7[#8]{%
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#4}{#5}[#8]
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#2}{#5}[#6]
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxxnum,\@egyyyynum){#3}{#5}[#7]
	\@egdrawnode{#1}%
}

% 1 argument at end, so must be egalpos
% #1: player label
% #2: action label 1
% #3: action label 2
% #4: action label 3
% #5: action label position
\def\@iiibtnx#1#2#3#4#5{%
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxnum,\@egyynum){#4}{#5}
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum){#2}{#5}
	\@egdrawbranch(\@egxnum,\@egynum)(\@egxxxxnum,\@egyyyynum){#3}{#5}
	\@egdrawnode{#1}%
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%    CONTINUUM OF BRANCHES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% continuum of branches

% reset \@eghnum and \@egvnum, and for u and d directions, reset \@eghdistance
\def\@egctmsethv#1#2{%
	\if\@egdirection d
	   \multiply\@eghdistance by\@egabsvnum
	   \divide\@eghdistance by\@egabshnum
	\else\if\@egdirection u
	   \multiply\@eghdistance by\@egabsvnum
	   \divide\@eghdistance by\@egabshnum
	\fi\fi
	\@eghnum=#1\@egvnum=#2
	\ifnum\@eghnum<0
	   \@egabshnum=-\@eghnum
	\else\@egabshnum=\@eghnum\fi
	\ifnum\@egvnum<0
	   \@egabsvnum=-\@egvnum
	\else\@egabsvnum=\@egvnum\fi
	\if\@egdirection d
	   \ifnum\@eghnum=0
	   \else
	   \multiply\@eghdistance by\@egabshnum
	   \divide\@eghdistance by\@egabsvnum
	   \fi
	\else\if\@egdirection u
	   \multiply\@eghdistance by\@egabshnum
	   \divide\@eghdistance by\@egabsvnum
	\fi\fi%
}

% Draw shaded triangle (using parameters from \putbranch)
\def\ctmb{%
	\@egxyiicalc
	\psline[linestyle=none,fillstyle=solid,fillcolor=\ctmfillcolor]%
		(\@egxnum,\@egynum)(\@egxxnum,\@egyynum)(\@egxxxnum,\@egyyynum)%
	\@ifnextchar[{\@ctmbpsto}{\@ctmbpstno}
}

\def\ctmbarc{%
	\@egxyiicalc
	\psline(\@egxnum,\@egynum)(\@egxxnum,\@egyynum)%
	\psline(\@egxnum,\@egynum)(\@egxxxnum,\@egyyynum)%
	\@tempcntx=\@egxnum%
	\advance\@tempcntx by-\@egxxnum%
	\divide\@tempcntx by2
	\@tempcnty=\@egynum%
	\advance\@tempcnty by-\@egyynum%
	\divide\@tempcnty by2
	\@egxdim=\@tempcntx\psxunit%
	\@egydim=\@tempcnty\psyunit%
% see pst-3d.tex for \pst@pyth and pstricks.tex for its use
	\pst@pyth\@egxdim\@egydim\@egrad%
	\psclip%
       {\psline[linestyle=none](\@egxnum,\@egynum)(\@egxxnum,\@egyynum)%
			(\@egxxxnum,\@egyyynum)}
	  \pscircle[linestyle=\egarclinestyle,linewidth=\egarclinewidth,%
           linecolor=\egarclinecolor](\@egxnum,\@egynum){\@egrad}
	\endpsclip
	\@ifnextchar[{\@ctmbpsto}{\@ctmbpstno}
}

% first argument is option
%
% #1: list of options
% #2: player name
\def\@ctmbpsto[#1]#2{%
	\@ifnextchar[{\@ctmbo{#1}{#2}}{\@ctmb{#1}{#2}}%
}

% #1 is option list
% #2 is player name
% #3 is player label position
% (#4,#5) is direction of single branch
% #6 is action label
\def\@ctmbo#1#2[#3](#4,#5)#6{%
	\@egctmsethv{#4}{#5}
	\@ifnextchar[{\@ctmbot{#1}{#2}{#3}{#6}}{\@ctmbotn{#1}{#2}{#3}{#6}}%
}

% #1 is option list
% #2 is player name
% (#3,#4) direction of branch
% #5 is action label
\def\@ctmb#1#2(#3,#4)#5{%
	\@egctmsethv{#3}{#4}
	\@ifnextchar[{\@ctmbot{#1}{#2}{t}{#5}}{\@ctmbotn{#1}{#2}{t}{#5}}%
}

% #1: option list
% #2: player name
% #3: player label position
% #4: action label
% #5: action label position OR payoff
\def\@ctmbot#1#2#3#4[#5]{%
	\@ifnextchar[{\@ctmbt{#1}{#2}{#3}{#4}{#5}}{\@ctmbtn{#1}{#2}{#3}%
{#4}{#5}}%
}

% #1: option list
% #2: player name
% #3: player label position
% #4: action label
% #5: action label position
% #6: payoff
\def\@ctmbt#1#2#3#4#5[#6]{
% need to recalculate \@eghdistance for u and d directions
	\ib[#1]{#2}[#3]{#4}[#5][#6]
}

% #1: option list
% #2: player name
% #3: player label position
% #4: action label
% #5: action label position OR payoff
\def\@ctmbtn#1#2#3#4#5{
	\ib[#1]{#2}[#3]{#4}[#5]
}

% #1: option list
% #2: player name
% #3: player label position
% #4: action label
\def\@ctmbotn#1#2#3#4{%
	\ib[#1]{#2}[#3]{#4}
}

% first argument is not option
%
% #1: player name
\def\@ctmbpstno#1{%
	\@ifnextchar[{\@ctmbox{#1}}{\@ctmbx{#1}}%
}

% #1: player name
% #2: player label position
% (#3,#4): direction of branch
% #5: action label
\def\@ctmbox#1[#2](#3,#4)#5{%
	\@egctmsethv{#3}{#4}
	\@ifnextchar[{\@ctmbotx{#1}{#2}{#5}}{\@ctmbotnx{#1}{#2}{#5}}%
}

% #1: player name
% (#2,#3): direction of branch
% #4: action label
\def\@ctmbx#1(#2,#3)#4{%
	\@egctmsethv{#2}{#3}
	\@ifnextchar[{\@ctmbotx{#1}{t}{#4}}{\@ctmbotnx{#1}{t}{#4}}%
}

% #1: player name
% #2: player label position
% #3: action label
% #4: action label position
\def\@ctmbotx#1#2#3[#4]{%
	\@ifnextchar[{\@ctmbtx{#1}{#2}{#3}{#4}}{\@ctmbtnx{#1}{#2}{#3}{#4}}%
}

% #1: player name
% #2: player label position
% #3: action label
\def\@ctmbotnx#1#2#3{%
	\ib{#1}[#2]{#3}
}

% #1: player name
% #2: player label position
% #3: action label
% #4: action label position
% #5: payoffs
\def\@ctmbtx#1#2#3#4[#5]{%
	\ib{#1}[#2]{#3}[#4][#5]
}

% #1: player name
% #2: player label position
% #3: action label
% #4: payoffs
\def\@ctmbtnx#1#2#3#4{%
	\ib{#1}[#2]{#3}[#4]
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%    INFORMATION SETS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Information set
% \infoset(x,y)[direction]{length}{name of player}[player label position]
%
\def\infoset(#1,#2){%
	\def\@egdirection{\@egdefdirection} % in case reset by earlier \putbranch
	\@ifnextchar[{\@infoseto(#1,#2)}{\@infoset(#1,#2)}%
}

\def\@infoseto(#1,#2)[#3]#4#5{%
	\def\@infosetdir{#3}%
	\@ifnextchar[{\@infos(#1,#2){#4}{#5}}{\@infosn(#1,#2){#4}{#5}}%
}

\def\@infoset(#1,#2)#3#4{%
	\if\@egdirection d
	   \def\@infosetdir{h}%
	\else\if\@egdirection u
	   \def\@infosetdir{h}%
	\else\if\@egdirection r
	   \def\@infosetdir{v}%
	\else\if\@egdirection l
	   \def\@infosetdir{v}%
	\fi\fi\fi\fi
	\@ifnextchar[{\@infos(#1,#2){#3}{#4}}{\@infosn(#1,#2){#3}{#4}}%
}

\def\@infos(#1,#2)#3#4[#5]{%
	\def\@branchplp{#5}
	\@infosetx(#1,#2){#3}{#4}%
}

\def\@infosn(#1,#2)#3#4{%
	\if\@egdirection d
	   \if\@infosetdir h
	      \def\@branchplp{u}
	   \else
	      \def\@branchplp{r}
	   \fi
	\else\if\@egdirection u
	   \if\@infosetdir h
	      \def\@branchplp{d}
	   \else
	      \def\@branchplp{r}
	   \fi
	\else\if\@egdirection r
	   \if\@infosetdir v
	      \def\@branchplp{l}
	   \else
	      \def\@branchplp{u}
	   \fi
	\else\if\@egdirection l
	   \if\@infosetdir v
	      \def\@branchplp{r}
	   \else
	      \def\@branchplp{u}
	   \fi
	\fi\fi\fi\fi
	\@infosetx(#1,#2){#3}{#4}%
}

\def\@infosetx(#1,#2)#3#4{%
     \fboxrule 0pt\fboxsep\egplayerlabelsep
	\@egxnum=#1\@egxxnum=#1\@egynum=#2\@egyynum=#2\@eghnum=#3\@egvnum=#3
	\divide\@egvnum by\infosetdotsep% space between dots (not a vnum at all)
	\advance\@egvnum by-1% because won't put dots at nodes
	\if\@infosetdir h
% \multips doesn't start at right point
	   \advance\@egxxnum by\infosetdotsep% put first dot @ next pt after node
	   \multiput(\@egxxnum,\@egynum)(\infosetdotsep,0){\@egvnum}{\infosetdot}
	\else\if\@infosetdir v%
	   \advance\@egyynum by\infosetdotsep
	   \multiput(\@egxnum,\@egyynum)(0,\infosetdotsep){\@egvnum}{\infosetdot}
	\fi\fi
% \psline doesn't allow control of dot style, it seems
%	\psline[linestyle=dotted](\@egxnum,\@egynum)(\@egxxnum,\@egyynum)
     \psset{framesep=\egplayerboxsep}
     \fboxrule 0pt\fboxsep\egplayerlabelsep
	\divide\@eghnum by2
	\if\@infosetdir h
	   \advance\@egxnum by\@eghnum
	   \if\@branchplp o
	      \rput*(\@egxnum,\@egynum){\fbox{\@egplbox{#4}}}
        \else\if\@branchplp u
           \rput[b](\@egxnum,\@egynum){\fbox{\@egplbox{#4}}}
        \else\if\@branchplp d
           \rput[t](\@egxnum,\@egynum){\fbox{\@egplbox{#4}}}
	   \fi\fi\fi
	\else\if\@infosetdir v
	   \advance\@egynum by\@eghnum
	   \if\@branchplp o
	      \rput*(\@egxnum,\@egynum){\fbox{\@egplbox{#4}}}
        \else\if\@branchplp l
           \rput[r](\@egxnum,\@egynum){\fbox{\@egplbox{#4}}}
        \else\if\@branchplp r
           \rput[l](\@egxnum,\@egynum){\fbox{\@egplbox{#4}}}
	   \fi\fi\fi
	\fi\fi
}

%%%%%%%%%%%%%%%%%%%%%%
% egame environment
%%%%%%%%%%%%%%%%%%%%%%

\def\egame(#1,#2){%
	\initialtrue
	\@ifnextchar[{\@egulo(#1,#2)}{\@egul(#1,#2)}%
}

% set unit length for game

\def\@egulo(#1,#2)[#3]{%
	\psset{unit=#3}
	\begin{pspicture}(#1,#2)
}

\def\@egul(#1,#2){%
	\psset{unit=0.1mm}
	\begin{pspicture}(#1,#2)
}

\def\endegame{\end{pspicture}}