- yq@cEsddZdkZdkTdZ1eddddded d f3d d 4d d5ddf6ddddddddf7df8dhdd df<ddd f<:dfd f;d!e<d"ed#d$d%d&fd'ed(d&>d)eed*@d+d,d)d-ded dfAed.Bd+d,d)d-dedd fCed/Dd+d0d)d1ed2d$d3d&fd'eFd)eed*Hd+d4d)d-ded dfIed.Jd+d5d)d-dedd fKed/Ld+d6d)d1ed7Nd+d8d$d3d9fd)d1ded dfed:Pd+d5d$d3d9fd)d-dedd fed;d+d<d$d8d6fd)d=ed>d+d8d$d3d&fd)d?ed@d+d9d$dAdBfd)dCedDd+d<d$d3d8fd)dEedFd+d9d$d9d4fd)dGedHd$d3d6fd+dId)dJf YdKdLZ ^eddMddNded dOf`d dPad dQbddRfcddddddfddfedhfdfd fgd!e hd"edSd$d%d'ejd)eed;d+d0d)d1kedTd+dUd)dVledWd+dXd)dYedZd$d3d%fd'eod)eed;d+d[d)d\pedTd+dUd)dVed2d$d3dIfd'erd)eed;d+d6d)d1sed]d+d^d)d\tedTd+d_d)dVedWd+d4d$d3dIfd)dYed]d+d<d$d5d4fd)d\ed`yd+dad$d3d%fd)dbedcd+d&d$dddefd)dVedfd+d&d$d3d9fd)dgedhd$didef}d)eedjd+dId)dk~edld+d&d)dmednd+d9d)dCedod+d9d$d3d4fd)dGf dKdpZ dqZ eddrddsded dOfd dtd dddfddddudddddfddve fdwed dxffdyedzd{fffdhd|d d}f<dwd dxf<d~ddf<dydzd{f<dfd fd!e d"ed#d'ed$d%dIfddvfd)eedd+dXd)dYedd+dAd)ded.d+d,d)d-ded d}fedd+d4d)d1ded d{fddvdyfed;d+d0d)d1edd'ed$dId&fddwfd)eedd+dXd)dYedd+dAd)dedd+dd)ded;d+dd)dedddyfd'ed$dId&fd)eedd+dXd)dYedd+dAd)dedd+dd)dedd+dd)dedd'ed$d3dIfddvfd)eedd+d,d)dYedd+did)ded.d+d4d)d-ded d}fedd+d5d)d1ded d{fedd+d6d)d1edWd$d9d^fd)e edd+d4d)dYedd+dd)ded:d+d5d$d3d_fd)d-ded d}fedd+d8d$d3d_fd)d1ded d{fed;ddvdyfd+d<d$dIdfd)d=ed;ddwfd+d8d$dIdfd)dedddyfd+dd$d%d9fd)ded`d+dad$d3d%fd)dbed>d+d8d$d3dIfd)d?edd$d9d^fd)eedhddvdyfded dxfd+d<d$d&d)dEedhddwfd+dad$d&d)dedhddvdyfdedxd{fd+d&d$d&d)dCedFddvdyfd+d9d$d%d)dGedFddwfd+d<d$d%d)dedd+d%d$dId)dedd+dId$d3dIfd)dkedd$d3d%fd)eedd+d^d)dedd+d_d)dedd+d9d)dedd+d_d$d3d_fd)dedd+dad$d3dIfd)dedd$d3d6fd+d%d)dJedd+d8d$d3dIfd)d ded d}fedddwf d+d&d$d3d9fd)dmedddwf d+d<d$d3dIfd)d\edddwfd+d&d$d3d9fd)dVedddwfd+dId$d3d9fd)dedd$d3d%fded dfd)eedTd+d<d)ded;d+d_d)deddeddfd+d9d$d3d&fd)dedd$d3d&fdeddfd)eedd+d<d)dedd+d<d)dedddyfd+d9d$d%dIfd)dfdKdZ!dZ1dZEdZMdZUedddddeddfWd eXd dYdeZde[ddeddffdeddffdeddffdeddffde fdeddffde fdeddffdeddffdeddfff edfd fdhfd!egd"edSd'eid)e edd+dd)dkddfledd+dd)dmddfnedd+dd)doddfpedd+dd)dqddredd+dsd)dtedd+dXud)dvedd+diddfwd)ddeddfxedd+diyd)dzedd+ddd)d{dddf|edd+d[}d)d edd'ed+dd$d3dIfd)ddddfedd$d3d&fd'ed)e edvd+dd)dedd+d0d)dddddfedd+d0d)dddedd+d[ddfd)ddeddfedd+d[d)ddeddfedd+dd)dddfedd+dd)dddfedd+dd)ddddfedd$dd)eedd+d9d)dedd+d9d)dedd+d<d$d3dfd)dedddfdeddfd+d<d$d3dfd)dedddfdeddfd+d<d$d3dfd)dedd+dad$d3d9fd)deddddfd+d<d$d3dfd)deddddfd+dad$d3ddfd)dedd$d3d4fd)eedjd+d&d)ddeddfedd+d9d)ddeddfedd+d9d$d3d8fd)ddeddfedDd$d3d8fd)eedjd+dId)dedld+d&d)dedd+dId$d3d6fd)dkedFd+d%d$dd)ded;d$dd)eedd+d8d)dedd+d_d)ddddddfedd+d_d)ddddeddfedddfdeddfd+d^d$d3d%fd)dedd+d<d)ddddfedd$d3d_fd)eedd+d&d)dgedd+d9d)dedd+d&d$d3d8fd)dddedd+d%d$d3d8fd)dedd+d<d$d3dIfd)d\dddfdedd fedd+d9d$d3dIfd)d ddfdedd fed d+d<d$d3d_fd)d\ddfed d+d&d$d3d8fd)dgddfed d+dd$d3d%fd)dddfedddfdeddfd+d<d$d3d%fd)dedddddddfdeddfd+d%d$d3dUfd)dedd+d9d$d3d8fd)ddeddfddfedd$d%deddfddfd)e edd+d<d)dedd+d_d)dedd+d9d$dId8fd)ddeddfddfedd+d<d$dId8fd)ddeddfddffdKdZedddddedd fd d!d ddfddddRdudd"dddf dd#e fd$ed%d fffdhd&dd'f<d(dd)f<d*d+d+f<d,d-d%f<d.d/df<d0dd f<ded1d1ded+d+ff d f d!e  d"ed#d$dId&fd'e d)e ed#d+d0d)d1dd#fed$d+dd)dded/d fed;d$d%d9fd)e ed#d+dad)d1dd#fed$d+d_d)dded/d fed2d+d<d$d<d_fd)d\edd+d&d$dAd3fd)dgedFd+d&d$d_dfd)d4edhd+dId$d9d^fd)dked5d+dad$d3d9fd)d1dedd'fed6d+d<d$d3d8fd)ded7d$d8d6fded/d f dd$f!d)eed8d+d<d)d"ed9d+d&d)d:ed;d$d3d6fded/d f$d)eedd+d&d)dg%edd+d9d)ded<'d+d&d$d3d8fd)ddd=ed>d$d3d%fded)d)f)d)eed2d+d^d)d\*edd+d<d$dId8fd)d+edd+d&d$d9d6fd)df -dKdp.d?d@Z1dAZ@eddBdddedCdDfBd dICd dDddEdddRdudd"dEdddf Gddve fdFedGdHfffHdhdIdCdf<dJdKdf<dLdMdDf<KdedNLdOded/dDfedPNdQOddRfedSQdTddRfedUSdVddRffUd fVd!eWd"edSd'eYd)e ed;d+dd)d[edd+did)d\edWd+dd)dedZd$d%dIfd'e_d)e ed;d+dd)daedd+did)dbedd+ddd)dedXed+d8d$d3d8fd)dedYgd+d<d$d6dfd)dedZid+d9d$d6dfd)ded[dedCdfkd+d9d$d3d9fd)ded\ddvfmd+d<d$d3d8fd)ded]d$d3d8fod)eedd+d<d)dpedd+d9d)d^ed_d`erd+d<d$d3d9fd)dedatd+d&d$d3d8fd)dgddvfedbd`evd+d9d$d3d8fd)dddvfedcd+dId$d9d4fd)dedFd$d3d^fyd)eedd+d%d)dzedd+d&d)deddd$d9d^fddvf|d)e edd+d_d)d~eded+d<d)dedfddvfd+d_d$d3d&fd)dedd+d&d$d3d9fd)dddgedhd+dId$d3d%fd)diddjedkd+d_d$d3d9fd)ddedKdDfddvfedld+d&d$d3dIfd)dmddgednd+d%d$d3d_fd)dedod+d<d$d3d9fd)ddedMdDffdKdpZeddpddqdeddfd drd ddfddddRdud"dEddddf dfdhdeddsdtdsdduffd fd!e d"edSd'ed$d%d+dd)dedvd'ed$d3d%fd+dd)dedwd'ed$d3dIfd+dd)dedxd$dId8fd+d_d)dedyd$ddzfd)eed{d+d%d$d%d)ded|d+dad$d%d)dbed}d+d<d$d%d)ded~d+dad$d%d)dedd$d3d^fd+d&d)dedd$d3d^fd+d%d)dedd$d3d6fd+d&d)dedd$d3d%fd+d&d)dddedd$d3d8fd+dad)dedd$d3dfd+d%d)dJedd$d3d&fd+d9d)df dKdpZdZedddddeddfd dd dQddfddddRdud"dEddddf ddve fdeddffdedfffdhdddf<dddf<d~ddf<dddf<d0ddf<deddddfedddffd ddfd!ed"ed#d'ed$d%dIfd)eedd+d[d)dedd+dUd)dedd+dUd)dedd+d4d)d1ed/d+d0d)d1ed2d'e d$d%dIf d)eedd+d^d)dedd+d_d)dedd+d_d)dedd+d5d)d1ed/d+d6d)d1edd$d3d&fd+d<d)dedd$d9ddfd)eedd+d8d)d1ed;d+dad)d1edd$d3d^fd+dad)d1eddd$ddfd)e edd+d&d)dedd+d&d)dedFd$d&d8fd+d&d)d4edd$d3d8fd+dId)dked!d$d3d6fd+d%d)dedd$d3d6f#d)eedd+d%d)dJ%edd+dId)dJedd$d3d%fdeddf'd)eed(d$d%d+d[d)d)ed*d$d5dfd+d<d)ded,d$d3d8fd+d&deddf-d)dddf /dKdpZ2dZCedddddeddfEd dFd dGdfHddddRdudd"dEdddf Jddve fdeddffdeddffdeddfffNdhdddf<d~ddf<d0ddf<QdedRdSdddffTd fUd!eVd"edSd'eXd)eedd+dd)dZed[d+dd)ddeddf\ed]d+did)ddeddf^ed_d+did)ddeddfedZd$d%dIfd+dd'ebd)eedd)dded;d)dedd+d5d$dId8fd)dedd+d<d$d%d&fd)dedd+d<d$d%d&fd)d\edid+d8d$d3dIfd)dedd+d9d$d6dfd)d^edd+d9d$d3d4fd)dedmd$dId_fd+d&d)d4edod$d3d%fd+dId)dkedrd$d3d9fd+d&d)dedtd$dId9fd+dId)dedd$d3d4fvd)eedd+d9d)dwedd+d9d)dedyd+d9d$d3d^fd)dedd$d3d6f{d)eedd+d&d)dg|edd+d9d)dedkd+d_d$d3dIfd)dedd+d&d$d3dIfd)dddedd+d_d$d&d9fddvddfd)dedd$d3d6fddvddfd)eedd+dad)ded8d+d<d)ded9d+d<d)dedd+d^d$d3d%fd)dded'dfdddfedd+d9d$d3d%fd)dmddded'dfdddfedd+d8d$d3d%fd)dddded'dfdddfedd+d<d$d3d&fd)d\ded'dfddffdKdZeddsdddeddfd dd dddRdfddud"dddfdfdhdeddpeddeddeddeddedded_dfd dddfddd_ffd!e d"ed#d$d%d&fd'ed)eed;d+dd)dedTd+did)ded;d+d_d$dId<fd)dedTd+d<d$didfd)dedd+dId$d3d6fd)dJfdKdpZdZ edddddeddfd dd ddfddddRdudd"dEdddf dfdhdddf<d~ddf<d0d}d f<deddrd}d ffd fd!e d"ed#d+dd$d%d&fd)dd'eedd+d5d$d&dafd)dedd+d_d$d3d%fd)dedd+d<d$d9d8fd)d\edd+d<d$d3d_fd)ddeddfedd+d9d$d6ddfd)d^deddfedd+d&d$dId_fd)dedd+dId$dId9fd)dedYd+d<d$d3d9fd)dedd+d9d$d3d_fd)dedd$d3d_fd)eedd+d&d)dgedd+d9d)dedkd+d_d$d3dIfd)dedWd+d4d$d3d&fd)dYedd+d9d$dId&fd)ddeddfedd+dad$d3d&fd)ddeddfed d+dId$d3d&fd)didddeddfed d+dId$d3d&fd)d dddeddfed d+d5d$d%dIfd)ddddeddfed d+d5d$d3d<fd)ddddeddfedd$d6ddfdeddfd)eedd+dad)dedld+d&d)dedd$d9d5fdeddfd)eedd+d<d$d%d)dedd+d9d$dId)d^edd+dId$d3d_fd)dkdd=deddfedd+d9d$d3d&fd)dmdd=deddffdKdZ! dZ"dZ#dZ$&edd(dddeddf)d d*d d+de",de#-ddve fdeddffd ed!dffd"edd#ffd$edd%fff2dhd&ddf<d'd%d#f<d(d)d!f<d0d*df<6df7d f8d!e$9d"ed#d$d%d&fd'e;d)e ed;d+dd)d=edTd+dd)d^ed+d+did$d%d)d?dd"fd'eed,d+d5d$dId9fd)ded-Bd+d5d$d3d8fd)d1ed.Dd+d<d$d3d<fd)d\edd+d9d$d_dfd)d^ed/d$d_dfGd)eed0d+d9d)d^Ied8d+d9d)ded1d+dId$d3d9fd)ded2Ld+dId$d_ddfd)dkedFd+d&d$d3d8fd)d4edWd+d4d$d3dIfd)dYedkd+d_d$d3dIfd)d3ed4Qd+d9d$d3d9fd)dmdd=Rddvdd d$fed5Ud+d<d$d3d8fd)dVdedd!fddfed6Xd+d<d$d3d9fd)d Ydedd!fddfed7[d+d9d$d9d_fd)d^\dedd!fddfed8^d+d&d$d3d8fd)dg_dedd!fddfed9ad+d&d$d3dIfd)dbdedd!fddd fed:d$d3d4fdded)dfdd fed)eedd+d<d)dgedd+d9d)ded;d$d3dIfided)dfdd fjd)eed<d+dd)d=led>d+d8d)dmdd?ed@d+d^d$d3dIfd)doded)dfdd fedAd+d8d$d3d%fqd)dddBrded)dfdd fedCd$d3d9ftded)dfdd fud)eedDd$d%d+dId)d4wedhd$d%d+d&d)dixddjedEd+d&d$d3dIfzd)dddF{ded)dfdd fedGd+dId$d3dIf}d)dHddI~ded)dfdd fedJd+d<d$d&dafd)ddd"fedKd+d4d$d3d&fd)dYdd"fedLd$d6ddfdd"fd)e ed8d+d&d)dgedjd+d&d)d4fdKdpZ%dMZ&eddNddOdeddPfd dQd dQdfddddRdudd"dRdddf dfdhdSddTf<dUdVdVf<dWd!d!f<dXd*dYf<d0dZdPf<ded[d[e ed\d\d!d!ffd fd!e&d"ed#d+dd$d%d&fd)dd'eed]d+d5d$dId9fd)deddd$d3dIfd)e edd+d_d)dedd+d<d)ded^d+dad$d3d%fd)d1ed_d+d<d$d<d_fd)d\ed`d+d9d$d6ddfd)d^edd+d9d$d3d8fd)dedad+d9d$d3d6fd)dedYd+d<d$d3dIfd)dedbd+dId$d3d9fd)dkedcd+d&d$d3d8fd)dedd$d3d6fd)eedd+d&d)dgedd+d9d)dedkd+d_d$d3dIfd)deddd+d&d$d3dIfd)dddeded+dId$d3d&fd)dfdedVdVfedgd+d&d$d3d&fd)dgded!dPfedWd+d4d$d3d%fd)dYdedYdPffdKdpZ'dhZ(eddiddjdeddfd d%dfddddRdudd"dRdddf d dddve fdke fdle fdme fdne ffdfdedoddpdddkfdedGfedqdrdpdddnfdedfedsdrdpdvddnfdedffd fd!e(d"edSd'ed)e ed;d+dd)dedWd+dXd)dYddmfded)fed#d+dd$d%d&fd'ed)dedtd+d5d$d3d&fd)dedud$dId&fd)eedd+d8d)dedd$d3dIfd+d_d)dedvd$dId&fd)eedd+d<d)d\edd+d<d)dedd$d_ddf d)eedw d+d<d$d3d6fd)d ed d+d9d)d^edxd$d6ddfd)e edd+d9d)dedod+d9d)dddnfdedydzfed{d$d3d_fd)eedd+d&d)dgedd+d9d)dedcd+dId$d8d^fd)dedFd+d&d$d8dfd)d4edWd+d4d$d3d&fd)dYedkd+d_d$d3dIfd)d3ed@d+d^d$d3dIfd)dedd+d9d$d3dIfd)dmdd=ed|d$d3d8fddlfded}dVfd)e edd+d9d)d!edd+d9d)ded~d+d<d$d3d8fd)d#ddnfdedydzff%dKdZ)*dZ*:eddddded*df<d d=d d>ddRf?ddddd"dEdddf@dfAdhdd*dPf<d~ddf<d0dMdf<Ddfd fEd!e Fd"ed#d$d%d&fd'eHd)eedd+dd)dIed;d+dd)dedd$dId&fKd)eedd+d5d)dded*dfMedd+d_d)ddedMdfedd$dId<fOd)eed;d+d_d)dQedd+d8d)dRded*dfedTd+d<d$d%d&fd)d\edVd+d9d$d6dfd)d^edd$d3d4fXd)eedd+d9d)dYedd+d9d)ded[d+dId$d_d4fd)ded]d+d&d$d3d6fd)d4ed_d+d%d$d3d6fd)dJedad+d9d$d3d%fd)dmbddeddd+d&d$d3dIfd)deddedWjd+d4d$d3dIfd)dYdeddfed5ld+d<d$d3d9fd)ddeddfednd+d&d$d3ddfd)d:deddfedd$dId6fdeddfpd)eedd+d<d)dqedd+d&d)ded~sd+d<d$d3d_fd)ddedMdffudKdZ+ydZ,dZ-edd1dddeddfd dd ddfde,dfdhdddf<dd)d)f<dd+dMf<dddf<dddf<dddf<dddf<dddf<dddf<dedddd)fd fd!e-d"ed#d$dId&fd'ed)eedd+d0d)d1edd+d4d)d1edd+d[d)ded;d+dad$d8d4fd)d1edd$ddBfd)e edd+d<d)ddeddfedd+d<d)ddeddfedd+d&d$d3d8fd)d4edd+d8d$d3d8fd)d1deddfedd$d3d%fded)d)fd)eedd+dd)dedd+d_d$d%dIfd)dedd+d<d$d%dIfd)dedd+d&d$dId9fd)dedd+d9d$dId9fd)dedd+d9d$dId9fd)dedd+dId$dId&fd)dedd+d8d$d3d&fd)d1dedfedd+d&d$d3d8fd)dgdedfedd+d%d$d3d6fd)dJdedfedd+d%d$d3d4fd)ddeddff dKdZ.dZ/edddddeddfd d3d dddddddRdudd"dEfdde fde fde fdeddfffdfdfd fd!e/d"edSd$d%d)e edd+d0d'ed)d1ddddfedd+did'ed)dddfed2d+d6d$d%d&fd'ed)d1edZd$d%d&fddfd)eed;d+dd)dd'eedTd+dd)dbd'eedd+dad$d3d&fd)d1edd+d<d$d<d^fd)d\edd+dId$d3d^fd)dkedd+dad$d3d&fd)dedddf d+d9d$ddfd)ded ddf d+d&d$d4dfd)d4edddddfd+d&d$d3d4fd)dedddfd+d&d$dXdfd)dedddfd+d&d$ddfd)d4edd$ddfdddfd)eedd+d&d)d4edd+d9d)dedd+dad$d3d8fd)dbddfedd+d_d$d3d&fd)d ddfedd+d<d$d3dfd)d"ddff$dKdpZ0'e e eeeeeeeee!e%e'e)e+e.e0fZ1;xe1D;]Z2?hZ3@dZ4Ee4e2i5e Fe2i6o4Gx*e2i6DG]\Z7Z5He4e5e7q*\WnIe2i8o1Jx'e2i8DJ]Z9Ke4e9i5e9qk\WnLe2i:dMe3e2_;Ue<e2_=Xhe2_>Yxe2i?DY]Z@Ze e@_A[de@i7e@_B\e@e2i>e@iB<]e2e@_2^e@i6oeCe@i6eCdpjo_e@i6ge@_6n`eCe@iDeiEjoaee2_=ndeCe@iFeCdpjoeeGe@iFe oe@iHo-fx#e@iFiIDf]ZJgeeJ_Hq]Wnixe@iFiIDi]ZJje@eJ_Ake@iBdeJi7eJ_BleJe2i>eJiB<me2eJ_2neJi6oeCeJi6eCdpjooeJi6geJ_6npeCeJiDeiEjoqee2_=nq^Wnq\Wq[Wyxe1Dy]Z2ze2i;Z3{xe2i8D{]Z9|e9i5e jo%}e2i5iKe2i5iLf\ZMZNn"e9i5iKe9i5iLf\ZMZNxe1D]ZOeOi7e9i7jocxYeOi;D]KZPePeMjo ePeNjo(e3iQePgeOi;ePe3ePe2i;iWeeSeVeSeVd%d%e3eSeVfnq.`Wq^We1eX_1eYdjohdkZZZxe1D]yZ2hZ[xde2i?D]VZ@e@i7e[joe@i6e[e@i7joe\e@i7ne@i6e[e@i73ssclimatestropicalsrequired_terrainsWdsoptional_terrainsWWsRvsEsRGosMsRdsBUAsvariantssepochssLight chariotsiosHeavy chariotsipsalliess ally_cliquessvalidatesitemssGeneralsrangeiisgeneralsdefaultsunits4-horse 2-crew chariotscostis Irr Kn (S)s4-horse 6-crew chariots Horse-mountedis Irr Cv (O)s Ally-generaliii i s2-horse 2-crew chariotsiis4-horse 6-crew chariotssCavalryis Irr Cv (I)sClubmens Irr Bd (X)sCitizen archersii`s Irr Bw (O)sMercenary archerss Irr Bw (S)s Javelinmens Irr Bd (I)s Wagon laagerisTFsremarkssGThis doesn't include the option to double-base javelinmen and archers. sMountain Indians DBMAL2, #2iVcs`dS(Ni((sx((s ./armylist.pys`sscoldsH(S)sC-in-CsInfantryi s Irr Ax (X)s Elephantsis Irr El (O)s Sub-generalis Irr LH (O)s Light horsei isGuardsmen with 2-handed swordis Reg Bd (O)sSpearmenii6sElite Spearmens Irr Ax (O)sArchersisPsilois Irr Ps (O)sBowmens Irr Bw (I)s Elite bowmensMercenary Javelinmenscsg}g}|idddf}|i|djo!|id||7}n|iddf}|i|djo!|id ||7}n||fSdS( NsCamelslephantshariotis6Total of elephants, camelry and carts can't exceed 18.sCavalrysLancersis)Only 4 Cavalry can be upgraded to lancers(serrorssfieldssarmysselectsanimalsssumsappendshorsed(sarmysfieldsshorsedserrorssanimals((s ./armylist.pysvalidate_classical_indians  sClassical Indians DBMAL2, #3csdS(Ni((sx((s ./armylist.pysssH(G)sGenericsMauryaiLsGuptaiAi!sArchaicis Middle periodiMi@sElephantsElephants with infantry escorts Irr El (S)sChariotsMaurya generalsChariot regularsis Reg Cv (O)is Gupta generalsChariotssLancersis Irr Cv (S)s Ally generalsHorsesUnescorted elephantsis4-horse 3-crew chariotsi s Reg Cv (I)s!Hereditary and mercenary warriorss Reg Bw (S)s Reg Bd (I)sPoor quality foot and followerss Irr Hd (O)s'Wild tribes archers or peasant slingerssYantrasSuperiors Reg Art (S)sOrdinarys Reg Art (O)sInferiors Reg Art (I)sCamel or bullock cartss Irr Wwg (O)s Stampeding cattle or camel herdss Irr Exp (O)sPalisade to protect camps Rathamasaulas Irr Wwg (X)s Guild troopssMountain Indian cavalrysMountain Indian spearmensMountain Indian foots Irr Ps (X)s Maiden guardsSaka mercenariess Irr LH (F)s!Bactrian Geek mercenary guardsmensFoots Reg Sp (O)s Skirmisherss Reg Ax (S)s Horse archerssNThe double-basing option for hereditary and mercenary troops is not supported.cs!"|iddf}#g}$g}%xk|D%]`}&|iddjo'|i|n(|iddjo)|i|nq7W*|i||i|jo +dSn5,|i||i|jo -dSn/dSdS( Nseneral:sC-in-C:sSpartanisAthenianiii( sarmysselectsgeneralssspartan_generalssathenian_generalssxsfindsappendssum(sarmysathenian_generalssgeneralssxsspartan_generals((s ./armylist.pysaggression_later_hoplite_greek!s   " " csd12g}3g}4|idddf}6|i|djo$7|tdf8||7}n9|id}:|id};|i|d|i|d jo%<|id =|||7}n>|id }?|id }@|i|d|i|d jo%A|id B|||7}nC||fSdS(NsMercenary hoplitessAthenian hoplitessSpartan perioikoii(s:Total count of 5-point upgraded hoplites may not exceed 40sAthenian rowerssTriremesiis5At most 2/3rds of the trireme rowers may be Athenian.sThracian cavalrys Thracian foots5At most 2 Thracian cavalry for every 3 Thracian foot.( serrorssfieldssarmysselects fivepointssumsappendsathenian_rowersstriremessthracian_cavalrys thracian_foot(sarmyserrorssathenian_rowerssthracian_cavalrystriremessfieldss fivepoints thracian_foot((s ./armylist.pysvalidate_later_hoplite_greek1s"  **cshEF|idjoGdddfSn;H|iddfjoIdddfSnKddfSdS(NsAitoliansH(S)sOsVsItaliotsSiciliotsWW(sarmysvariant(sarmy((s ./armylist.pys$required_terrain_later_hoplite_greekEs csMN|iddfjo Oddddddd fSnMP|id joQdddddd fSnSddd dddd fSdS( NsItaliotsSiciliotsWWsWdsRvsH(G)sRGosRdsBUAs ThessaliansH(S)(sarmysvariant(sarmy((s ./armylist.pys$optional_terrain_later_hoplite_greekMs  sLater Hoplite Greeks DBMAL2, #5i>iswarmsAthenianisSpartansAitolians AkarnaniansItaliotsPhokiansSiciliotsThebans ThessaliansAgesilaus in Asiaitivs Reg Sp (S)s AgesilaussTyrant and infantrysTyrant and cavalrys Late Athenianis MercenarysSiciliot or Italiots Reg Sp (I)sOthers Irr Sp (O)sSpartan sub-generalsSuperior ThessalianisSuperior ThebanisHoplitescs,ddfddff|iddfjS(Ni$i`ii0sAitoliansPhokian(sxsvariant(sx((s ./armylist.pysssIrregular hoplitess Irr Sp (I)sItaliot or Siciliot hoplitessMercenary hoplitesi(sAthenian hoplitesisTheban hoplitesisElite hoplitessSpartan perioikoisSpartan citizen hoplitessPeltastss Reg Ps (S)sAuxilas Reg Ax (O)iqs Iphikrateans Reg Ax (X)is Reg Ps (O)s Reg Bw (I)sSlingerscs,ddfddff|iddfjS(Ni$i`ii0sAitoliansPhokian(sxsvariant(sx((s ./armylist.pysss Irr Ps (I)cs/ddfddff|idddfjS(Niiii sThebans ThessaliansItaliot(sxsvariant(sx((s ./armylist.pyssiisReaders of Xenophons Reg Cv (S)sLights Irr LH (O)s Thracian foots Irr Ax (S)sTriremess Reg Gal (O)scarriessSp, Ps (O) or Ps (I)sAthenian rowerssThracian cavalryis Reg LH (F)sPaphlagonian cavalrysPaphlagonian foots Spithridates's Persian deserterss Prodromoiis Reg LH (O)sHamippoii^s Reg Ps (I)s10-mina stone throwersSyracusan cavalryiisHeavysSyracusan SpaniardssSyracusan Gaulss Irr Wb (S)s Consult DBMAL#2 page 8 when using this list; the factional rules are complex and our implementation does not try to capture them all. The variants corresponds to the city-state of origin of the C-in-C, except that Agesilaus is treated as a Spartan. The restriction that only one Thessalian or Theban ally-general may be upgraded is not enforced; nore are the complex date restrictions on hamippoi. Treat Xenophon as a Thessalian C-in-C. Elite hoplites include Theban sacred band, Argive epilektoi, or a tyrant's bodyguard. s Bithynians DBMAL2, #6iMicsdS(Ni((sx((s ./armylist.pysssOsTribals HellenizedisEarly isMiddle isGalatian allianceisGalatian migrationis Hellenizationis Late periodsGalatians Light cavalryihs Irr Ps (S)sPersian cavalrysGalatian mercenariess Citizen footsAuxiliasPikess Reg Pk (I)sEuropean Thracian mercenariessTriremes or QuadriremessAxsPaphlagonian alliessurlsahttp://www.barca.fsnet.co.uk/bithynia.htmcs12g}3g}4|id}5|id}6|i||i|jo%7|id8|||7}n9|id}:|id};|i djo|i|o|i| o%<|id=|||7}n>||fSdS(Ns:Heavy:s Tarantines&Only half the cavalry can be Tarantines QuadriremessTriremesis=After 399 at least one ship must be a quadrireme/quinquireme.( serrorssfieldssarmysselectslights tarantinessumsappends quadriremesstriremessera(sarmys quadriremesserrorsslightstriremessfieldss tarantine((s ./armylist.pysvalidate_syracusan1s  "4s Syracusanifi.sVsAgathocles in AfricaiisEasrly period.sMiddle period.irs Late period.is CarthaginianssLater CarthaginianssNumidiansNumidian or Early MoorishsAgathokles in AfricasLibyans Early LibyansKyreneansKyreanean GreeksElitesMercenary bodyguardsGreek mercenary hoplitessSyracusan and allied hoplitessMercenary peltastssCampanian mercenary hoplitessOther Campanian or Samnite foots Reg Pk (O)sGaulss exportablesLigurian or Sikelss SpaniardssArchers or slingerss Greek cavalrys TarantinesCampanian cavalrysSp or PssLembis Irr Bts (O)sPs (S)s Bolt-shooterssQuadriremes/Quinquiremess Reg Gal (S)s.Camp followers or rowers disguised as hoplitess ThureophoroisCamillan Romans DBMAL2, #10csdS(Ni((sx((s ./armylist.pysssSamnitesdbmtypeisRoman ally-generalsRoman sub-generalsItalian ally cavalrysRoman Legion/Latin AlaiPsLevessHastatis PrincipessTriariisNon-Latin Italian infantrys Reg Ax (I)sRorariisAccensisItalian Greek alliessPs (I)sAnti-elephant wagonss Reg Wwg (X)sDitch and palisade for camp(s)sIncendiary pigsc s:g}g}|id}|id}|i|}|i|}|i i |i i djo3|o%|i d|||7}nn|i i |i i djoR||djp|d|djo%|i d|||7}nn|i |i i |i i jo d jno=||djo%|i d |||7}nn0|o%|i d |||7}n|id }|id }|i||i|jo!|i d||7}n||fSdS(NsCavalry and chariots:CavalrysCavalry and chariots:Chariotsis=Gauls must use only chariots in line of battle before 295BCE.i iis:Proportion of horse to chariots is wrong for 295BCE-225BC.isCThe proportion of horse to chariots is wrong for the 224BCE-100BCE.s+The Gauls had abandoned chariots by 100BCE.sFootsSolduriis;At most one soldurii bodyguard unit for each foot commander(serrorssfieldssarmysselectshorsesschariotsssums horse_counts chariot_countsdbmtypeserasserasearliestsappendsfootssoldurii( sarmyshorsesserrorss horse_countschariotssfootsfieldss chariot_countssoldurii((s ./armylist.pysvalidate_gallics6     )4 "sGallics DBMAL2, #11i2csddf|idjS(Nii(sxsera(sx((s ./armylist.pysssArverni and Sequaniiis AcquitaniansisArchaic periodisExpansion periodiii i7i8iis Ariovistuss Early GermansIberianssAncient Spanishs O Warriorss Irr Wb (O)s F Warriorss Irr Wb (F)sChariot-mountedsSoldurii bodyguardssCavalry and chariotss Flank cavalrysWarriorsi-iFs Warriors (O)s Warriors (F)sArchers or Slingerss%Elderly, slaves, unwilling, and unfitsFortificationssWagon laager for campsPlashed wood edgesGaesati mercenary warbandsGaesati mercenary sub-generals Naked Gaesatis Veneti shipsijs Irr Shp (O)sWbcs 23g}4g}5|id}6|i|djo!7|id8||7}n9|id}:|i|djo!;tid<||7}n=|id}>|i dd fjo|i|d jo!?|id @||7}nA||fSdS( Ns Pezetaroii0s!Total Pezetaroi cannot exceed 48.s Agrianiansi s!Total Agrianians cannot exceed 9.s Hypaspistss Alexanders Philip IIisMAlexander and Philip II must be accompanied by at least 4 units of Hypaspists( sfieldsserrorssarmysselects pezetaroissumsappends agrianiansserror_messagess hypaspistssvariant(sarmys hypaspistss agrianiansserrorss pezetaroisfields((s ./armylist.pysvalidate_alexandrian_macedonian2s  /sAlexandrian Macedonians DBMAL2, #12iicsEdS(Ni((sx((s ./armylist.pysEss Philip IIis Alexanderis Antipateris Early periodis ThessalianssKnightsis Reg Kn (F)sHypaspist SpearssHypaspist AuxiliasHypaspist Pikess Reg Pk (S)s CompanionssThracians or Paionianss!Greek Allied or Mercenary cavalrysPezetaroi with pikesi0sPezetaroi with javelinss+Agrianian, Illyrian, or Thracian javelinmensAgrianian slingerssAgrianian regular psilois0Cretan or Macedonian archers or Rhodian slingerssGreek allied hoplitessRegulars IrregularsGreek mercenary peltastssThracian peltastssTrieressAx (O)s HypaspistssSpearssStone-ThrowerssPenteres and TetreressArtillery boatss Reg Bts (X)sAsiatic hippokontistaisDoesn't include the forced-march option for pezetaroi. The date restrictions on Thessalian hoplites and Thessalian allies aren't checked.s DBMAL2, #13icsdS(Ni((sx((s ./armylist.pysssRomanss Campanianss)Campanian, Apulian, Lucanian, or BruttiansApulianssVolsci and/or HernicisItalian Hill Tribess EtruscanssEtruscan LeaguesUmbrianss(Early Roman Latin, Etruscan, and Umbriani_s,Ditch and palisade or rocks and felled treescsg}g}|id}|id}|idjoi|i|d|i|}|djp |djo%|i d|||7}nn||fSdS(Ns Hypaspistss Persian guardif1.0f0.40000000000000002f0.59999999999999998s?In 324-323 BCE Persian guard must be in 2/1 ratio withypaspists( sfieldsserrorssarmysselects hypaspistsspersiansserassumsratiosappend(sarmys hypaspistsserrorssratiospersianssfields((s ./armylist.pysvalidate_alexandrian_imperials  #sAlexandrian Imperials DBMAL2, #15icsdS(Ni((sx((s ./armylist.pysssdryiisIndiansThessalians or Thracianss8Thracians, Hippokontistai, Arachosians, or Paropamisidaes Pezetarois AgrianianssCretan and Macedonian archerssSogdians or Skythianss Bactrianss Irr LH (S)s Triakonterss Triemiolaes Reg Gal (F)sPersian Successorss Persian guardsExperimental phalanxsPikemens Reg Bw (X)s Reg Bw (O)s PhalangitessMacedonian Phalangitess PantodapoisPersian slingers and archerssHexeressFThe double-basing option for the Experimental phalanx is not included.cs/  |idjo dfSnfSdS(Ns Demetrios sWW(sarmysvariant(sarmy((s ./armylist.pys(asiatic_early_successor_required_terrain sc s_|idjo#dddddddd fSn#d dddddddd f SdS( NsEumenessRvsH(S)sH(G)sWdsOsRGosRdsBUAsWW(sarmysvariant(sarmy((s ./armylist.pys(asiatic_early_successor_optional_terrains#csg}g}|id}|id}|i||i|jo%|id|||7}n|id} |id}!|i||i|jo%"|id#|||7}n$||fSdS(Nsmercenaries:Pikesmercenaries:Auxilias0At most half the Greek mercenaries may be pikes.sRegulars Irregulars.At most half the Greek allies may be regulars.( serrorssfieldssarmysselectspikesfootssumsappendsregsirr(sarmyspikeserrorssfootsfieldssirrsreg((s ./armylist.pys validate_asiatic_early_successors  ""sAsiatic Early Successors DBMAL2, #16ics)dS(Ni((sx((s ./armylist.pys)ss Antigonoss DemetriosisEumenesisAlketasis First clashessEumenid periodsDemetrian periodiisEumenid sub-generals XystophoroisDAsian colonist, satrapal, Thracian, or other irregular heavy cavalrysPArachosians, Paropamisidae, Pisidian, Thracian, or other irregular light cavalrysGreek mercenariessPikesCretanssPersian archers and slingerss Eeg Art (O)sHepteres, Hexeres and PenteressTarantine cavalrysMede and Parthian horse-archerssMacedonian phalangitessLykians and Pamphylianss"Greek mercenary and allied cavalrys(Athenian and other Greek allied hoplitessSiege or sea towerssTowerss Reg Wwg (S)sShipssSp or PksStone-throwerssArtillery shipssArt (S)sPiratessCrewssAthenian trires and tetreressPss Transportss Irr Shp (I)sBgs ArgyraspidssEudamos's Indian elephantss Pisidianscsg}g}|id}|id}|i||i|djo%|id|||7}n||fSdS(Nsmercenary hoplitesssubject hoplitesi sEOnly two of the subject hoplite units can be upgraded to mercenaries.(serrorssfieldssarmysselectsmercssubjssumsappend(sarmysmercsfieldsserrorsssubj((s ./armylist.pysvalidate_lysimachids  &s Lysimachids DBMAL2, #17icsdS(Ni((sx((s ./armylist.pysssV sSeizure of MacedonisYear of mutinyisAnti-Antigonid alliances Crown periodiisThraciansSeleucidsMacedonian cavalrysThracian noble cavalrys(Thracian, Paionian, or Greek light horses"Macedonian or Thracian phalangitessCoastal Greek subject hoplitessMercenary archers or slingerssMercenary javelinmensTetreress#Disaffected Lykians and Pamphylianss Irr Ax (I)s(Lykians, Pampylians, Mysians, or similarcsg}g}|iddf}|id|id}|i|o |ito%|id|||7}n|id}|i|djo?|i dd fj o!|id ||7}nn||fSdS( NsSpartansArgivesSpartan:HoplitessArgive:Hoplitess0Spartan and Argive allies must include hoplites.slephantsis Antipatross Polyperchons( serrorssfieldssarmysselectsalliesshoplitesssumssubjsappends elephantssvariants(sarmyshoplitesserrorssalliessfieldss elephants((s ./armylist.pys#validate_macedonian_early_successors  #sMacedonian Early Successors DBMAL2, #18s Polyperchons KassandrossPtolemy KeraunossAntigonos GonatassAitolian alliessvariantsSpartan alliessHellenistic Greeks Argive alliessAgema and CompanionssGreek mercenary heavy cavalrysGreek mercenary light cavalrysMacedonian veteranss Mercenariesiis ThracianssAllied hoplitesis Galatianss`Treat Olympias and Antipatros as Generic. The date restrictions on elephants are not enforced. cs *+g},g}-|id}.|id}/|id}0|i||ito |it o)1|i d2||tt 7}n3|id}4|id}5|i||i|jo%6|i d7|||7}n8||fSdS(NsItaliotesOscansGalatians'Galatians and Italian allies don't mix.sSuperior OscansOrdinary Oscans5At most half the Oscan foot may be of superior grade.( serrorssfieldssarmysselects italiotessoscansgalatianssumsoscanss galatianssappendss_oscansso_oscans(sarmyso_oscansserrorss italiotesss_oscanssgalatiansfieldssoscan((s ./armylist.pysvalidate_pyrrhic*s  0"sPyrrhics DBMAL2, #27cs<dS(Ni((sx((s ./armylist.pys<sisEpeirot or Macedonian cavalrysEarlysLates(Thessalian, Oscan, or Greek ally cavalrysInferior cavalrys*Aitolian, Acarnian, and Athamanian cavalrys!Epeirot or Macedonian phalangitessItaliotes Greek allysArchers or slingers.s8Aitolian, Acarnian, Athamanian and/or Italian javelinmensDitch and palisade for campsSuperior GalleysPs (S), Sp, or AxsOrdinary GalleysPs (S), Sp or AxsTarantine phalangitess Oscan footsSuperior OscanssOrdinary OscanssThe requirement that Oscans and Tarantines only operate in Italy, and the troop minima to go with Oscan foot, are not enforced.csSyz|idjo {dddddddfSn}dd ddd dfSdS( NisRvsH(G)sWdsEsRGosMsBUAsH(S)sRd(sarmysera(sarmy((s ./armylist.pysgalatian_terrainys csg}g}|id}|id}|i||i|jo%|id|||7}n|id}|id}|i||i|djo%|id|||7}n|id}|id }|id }|i||i||i|d jo)|id ||||7}n||fSdS( NsLight chariotssScythed chariotss3Only half as many scythed as light chariots alloed.sGreek heavy cavalrysGreek light cavalryis+Total Greek allied cavalry cannot exceed 2.s Greek psiloisGreek ordinary auxiliasGreek superior auxiliais,Total Greek allied infantry cannot exceed 4.( serrorssfieldssarmysselectslchsschssumsappendsi1si2si3(sarmyserrorssschsi1sfieldssi3si2slch((s ./armylist.pysvalidate_galatians&  "&3s DBMAL2, #30icsddf|idjS(Niii(sxsera(sx((s ./armylist.pysss First contactsInvasion of Greeces#Galatians transported to Asia MinorsDefeat by SeleucidsisWars in Asia MinorisDeclineiiBsBattle of Mount MagabaiCsMithridatic warsiDisPre-provincial periodisPaioniansWarbandi$is Greek alliessGreek ally-generalsGreek heavy cavalrysGreek light cavalrys Greek psiloisGreek ordinary auxiliasGreek superior auxiliasGreek slingerssScythed chariotssKappadokians or PaphlagonianssDry stone walls to defend campsImitation legionariessjGreek minima for 279 BCE if Paionians are used aren't enforced. Neither is the maximum of 24 Paioniansc sg}g}|id}|id}|id}|i||i||i|djo%|id|||7}n|id}|id}|i||i|djo%|id|||7}n|id }|i||i|djo%|id |||7}n||fSdS( NsLusitanian caetrati:LightsLusitanian caetrati:heavysSertorian auxiliais*Only 1/3 of Lusitanian caetrati may be Ax.sCavalrysSertorian cavalrys+Only 32 total units of cavalry are allowed.sAuxilias+Only 32 total units of auxilia are allowed.( serrorssfieldssarmysselectslightsheavys sert_auxiliassumsappends tribe_cavalrys sert_cavalrys tribe_auxilia( sarmysheavys sert_cavalrys tribe_auxiliaserrorss tribe_cavalryslightsfieldss sert_auxilia((s ./armylist.pysvalidate_ancient_spanishs$  3&&s DBMAL2, #39iicsfdf|idjS(NsH(S)s Celtiberians(sxsvariant(sx((s ./armylist.pysss Celtiberianss Lusitanianss SertoriusiisNativesLong-shield cavalrysRound-shield cavalrysFlaming ox-wagonssIberian scutariiii@sIberian caetratisMercenary Celtiberian scutariisCeltiberian scutariiiVsCeltiberian caetratisLusitanian caetratii.izsPopulares legionariisSertorian cavalrysSertorian auxiliacsp@A|oXBti|ig|gt|i<Cti|idg|gt|idLss:s__main__cst|tot|itfjo|iddjodti|ifGHn|ioqxg|iD]Y}xMtiD]$\}}||joPnqWd|ti|ifGHqWndt ijodt t iGHnndS(Nis!*** Negative range value in %s%s!s*** Illegal variant %s in %s%s!s's*** Bad single quote in %s( s isinstancesxsItemstypesranges army_typesnamespathsvariantssvariantsperiodsitemsrepr(sxsvariantsnamesperiod((s ./armylist.pys variant_checks3    #sFor army %s %s:s%22s:s s Variant: sUnit s beginss endss?s Alliance s (es__doc__stypess listclassessvalidate_republican_indiansArmyTypesPeriodsItemsTruesSelectsrepublican_indiansNonesmountain_indiansvalidate_classical_indians AlternativesGroupsclassical_indiansaggression_later_hoplite_greeksvalidate_later_hoplite_greeks$required_terrain_later_hoplite_greeks$optional_terrain_later_hoplite_greekslater_hoplite_greeksAlliancesPosses bithyniansvalidate_syracusans syracusanscamillan_romansvalidate_gallicsgallicsvalidate_alexandrian_macedoniansalexandrian_macedonianssamnitesvalidate_alexandrian_imperialsalexandrian_imperials(asiatic_early_successor_required_terrains(asiatic_early_successor_optional_terrains validate_asiatic_early_successorsasiatic_early_successorsvalidate_lysimachids lysimachids#validate_macedonian_early_successorsmacedonian_early_successorsvalidate_pyrrhicspyrrhicsgalatian_terrainsvalidate_galatiansgalatiansvalidate_ancient_spanishsancient_spanishsarmylists army_typeschangess timesplitsperiodsvariantssnamesalliessalliancestraverseserassFalsesvariable_rangessmapsitemssitemsparentspathstypesranges FunctionTypesunits isinstancesgeneralspartsspartsearliestslatestslowersuppersatypesyearsgetskeyssstartsssortslensisappendsArmys__name__ssyss seen_namessKeyErrors variant_checkserasreprs transitionss transitionsstdoutswritesseenit(:suppersalliancesgalatian_terrainsseenitsatypesyearsalexandrian_macedoniansvalidate_gallicslater_hoplite_greeksgallicsgalatiansvalidate_ancient_spanishs army_typessamnitesancient_spanishsvalidate_pyrrhicsmacedonian_early_successorsclassical_indiansvalidate_republican_indians$required_terrain_later_hoplite_greeksaggression_later_hoplite_greeks syracusansalexandrian_imperialsvalidate_classical_indians validate_asiatic_early_successorsarmylistsvalidate_later_hoplite_greeksrepublican_indians(asiatic_early_successor_optional_terrainsvalidate_lysimachids timesplits seen_namessvalidate_syracusans bithynianssysspartspyrrhicsasiatic_early_successorsvalidate_alexandrian_macedonianstypess$optional_terrain_later_hoplite_greekslowersnames transitionsis lysimachidsmountain_indians(asiatic_early_successor_required_terrainsvalidate_galatiansitems variant_checksperiodserasstartss#validate_macedonian_early_successorsvalidate_alexandrian_imperialschangesscamillan_roman((s ./armylist.pys?s    $    ' $$ $ 0$ $ 6 $      66frB $   !<E    $*  3  *   0 *--$$0! ! $$$$E'---B60-!    $          *        6!0K   *$KB'$<-<?$ $   $'c'  0] B$H$-  $   $'6 !  6$$$6-0*$3Z9-$$0'<$   '  $  $*  $   '9T0 *$0Tf0B *' $   'Q6    $ $ Hf$$$0$0E*<<<< $$    ] ! f!    ' 6  T$<6?$$0~66<<<0B $<!        fE   6<$QE!''''60093$*9?*!    ' T-  `$$$$$$$$0W663    ' 6   $ $ !  ~<0 *96<$ $   ! 6 00B$$0$$$$66T$3  $      ! $0$$T      *3333 $   9  !3'$ $ $$ $ 0<--<             )     )    %!  8   F     *