summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/egameps/egameps.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-12 23:54:38 +0000
committerKarl Berry <karl@freefriends.org>2006-01-12 23:54:38 +0000
commit2f7cffcb1a4770a3d5f0bac8b13189ef7cd1a8db (patch)
treeedcc9e04511c26639449285dab2712de40ef541e /Master/texmf-dist/tex/latex/egameps/egameps.sty
parentb4286ff7458edba75a5cb8c875079e3d1093686a (diff)
egameps
git-svn-id: svn://tug.org/texlive/trunk@850 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/egameps/egameps.sty')
-rw-r--r--Master/texmf-dist/tex/latex/egameps/egameps.sty1578
1 files changed, 1578 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/egameps/egameps.sty b/Master/texmf-dist/tex/latex/egameps/egameps.sty
new file mode 100644
index 00000000000..182eb5f8592
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/egameps/egameps.sty
@@ -0,0 +1,1578 @@
+% 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.tex for documentation.
+% By Martin J. Osborne
+% martin.osborne@utoronto.ca
+% http://www.economics.utoronto.ca/osborne
+% Version 1.0, 2001/4/9
+%
+% 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
+%
+\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
+\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[l](\@@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
+ \multiply\@eghdistance by\@egabshnum
+ \divide\@eghdistance by\@egabsvnum
+ \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}
+}
+
+% 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}}
+
+ \ No newline at end of file