From 11b2e75e3286e9ac34d308affc254f1c7c6b7ba5 Mon Sep 17 00:00:00 2001 From: AcyForsythe Date: Sun, 1 Oct 2006 06:52:06 +0000 Subject: [PATCH] - Added INI Setting and ability to manually train mobile militia at a cost - Added INI setting and ability to train veteran militia git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@586 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- GameSettings.cpp | 3 + GameSettings.h | 4 +- JA2.opt | Bin 124928 -> 176640 bytes JA2.plg | 96 +++++------ Strategic/Assignments.cpp | 52 ++++-- Strategic/MilitiaSquads.cpp | 150 +++++++++++++--- Strategic/MilitiaSquads.h | 1 + Strategic/Strategic.dsp | 24 ++- Strategic/Town Militia.cpp | 330 +++++++++++++++++++++++++----------- builddefines.h | 8 +- 10 files changed, 477 insertions(+), 191 deletions(-) diff --git a/GameSettings.cpp b/GameSettings.cpp index 63c474ed..1d8a4e06 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -478,7 +478,9 @@ void LoadGameExternalOptions() gGameExternalOptions.gfUseAutoSave = iniReader.ReadBoolean("JA2 Gameplay Settings","USE_AUTO_SAVE",FALSE); // Militia settings + gGameExternalOptions.gfTrainVeteranMilitia = iniReader.ReadBoolean("JA2 Gameplay Settings","TRAIN_VETERAN_MILITIA",FALSE); gGameExternalOptions.gfAllowMilitiaGroups = iniReader.ReadBoolean("JA2 Gameplay Settings","ALLOW_MILITIA_MOBILE_GROUPS",FALSE); + gGameExternalOptions.gfmusttrainroaming = iniReader.ReadBoolean("JA2 Gameplay Settings","MUST_TRAIN_MOBILE_MILITIA",FALSE); gGameExternalOptions.gfAllowReinforcements = iniReader.ReadBoolean("JA2 Gameplay Settings","ALLOW_REINFORCEMENTS",FALSE); gGameExternalOptions.gfAllowReinforcementsOnlyInCity = iniReader.ReadBoolean("JA2 Gameplay Settings","ALLOW_REINFORCEMENTS_ONLY_IN_CITIES",FALSE); gGameExternalOptions.guiBaseQueenPoolIncrement = iniReader.ReadInteger("JA2 Gameplay Settings","QUEEN_POOL_INCREMENT_PER_DIFFICULTY_LEVEL",60); @@ -492,6 +494,7 @@ void LoadGameExternalOptions() gGameExternalOptions.iMaxMilitiaPerSector = iniReader.ReadInteger("JA2 Gameplay Settings","MAX_MILITIA_PER_SECTOR",20); gGameExternalOptions.iTrainingSquadSize = iniReader.ReadInteger("JA2 Gameplay Settings","MAX_TRAINING_SQUAD_SIZE",10); gGameExternalOptions.iMilitiaTrainingCost = iniReader.ReadInteger("JA2 Gameplay Settings","MILITIA_TRAINING_COST",750); + gGameExternalOptions.iMilitiaCostModifier = iniReader.ReadInteger("JA2 Gameplay Settings","MILITIA_COST_MODIFIER",3); gGameExternalOptions.iMinLoyaltyToTrain = iniReader.ReadInteger("JA2 Gameplay Settings","MIN_LOYALTY_TO_TRAIN",20); //Assignment Settings (training, repairing, doctoring, etc) diff --git a/GameSettings.h b/GameSettings.h index 6a585808..f286bbd5 100644 --- a/GameSettings.h +++ b/GameSettings.h @@ -154,6 +154,7 @@ typedef struct INT32 iMaxMilitiaPerSector; INT32 iTrainingSquadSize; INT32 iMilitiaTrainingCost; + INT32 iMilitiaCostModifier; INT32 iMinLoyaltyToTrain; INT32 iMaxEnemyGroupSize; @@ -212,8 +213,9 @@ typedef struct // Militia Settings BOOLEAN fAllowTacticalMilitiaCommand; - + BOOLEAN gfTrainVeteranMilitia; BOOLEAN gfAllowMilitiaGroups; + BOOLEAN gfmusttrainroaming; BOOLEAN gfAllowReinforcements; BOOLEAN gfAllowReinforcementsOnlyInCity; UINT32 guiBaseQueenPoolIncrement; diff --git a/JA2.opt b/JA2.opt index ac1e1a2a7e7bf5c94414e4da74251e7de701f7da..a37e8d819ab58c3b68f339bc4d8d2e396006cefe 100644 GIT binary patch literal 176640 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

gpdn#j1cyms~? zRdU%>4Q#Jwq^B6?T_J+Ay01+30RazHslTN=H$7(qay0`wMe7DtYky^~R$Cw7L?8cpwmb$Q{cjs}S?ndA$ z{(`Dmr<;sXV{IY(>4=k=6ZQOms@vNeH>p15JpZ3u)$#m)L?iP2e}bWCXMVThsvr0K zf8@sgp8rpeWAG){leEA2{y!Jrc*7W)bHteY<{QRjP@n#^UJI-Q9eM02eFc!blLz+b zYk=gXUq7vH0Frm{-c`mHAbI;fSZbtzybDh~VYC3rJGJYK-T@?U@Nd%kRv>v7{ywco zfaFz9UTpLM$ve7vkACo@j~e6+9baTd}$hb3w~OJPtbl{yq9RAbIhbi;W9F@=m;&)-M6c^Zh)n`~Ds0 z#eUn~VZ9prm;#amToJc)hs_T7I*A0m>_pS}nrkL{5O3Ex4xeLAlk zls)?G)B0&3W&1vU*fb4hG8O{K zJCWX_*8|C`{l*i<1|WItpGp@rt@>A#V@qB+C>wwD2_p!k?BK%1MjW^WbpEwP#x5Xv zCx0}or-9@h|I(20IFP)yb9?kbAbCf>vqyghNZ!yV4xnGd@j&VC9WY)2k~j2`!v-=l z)(xW^t$F33?5U@pHC_W!_C$4=aS?bHH1PDWKKZAp|JZMvIjmP=pFH!bv_2R645dKajk1#}VTokUT!~jsVHqTHa(F1Cqyn^8}DQUn;7f1ClrJ z(U{(Z2J<}1@laklD0_7ETlys+WzYX`k>UFp>MOs0IIUM>pS%;RQ2(({-pS{N^(8>^ z&ToE8UkN0y_JOC3W*~Wd4zvNuJ3eQz5do5SVSZF+2D~q#9CP!^Vaa}Jz}O8L%AVhU z7?cpFIG z{y&Ua{n!DNV|rdWC~G|re~$W({e4@@j2i4~po{bI`~#MQYBvq*^+56l%cJ^gAbDof z<3Z$?=u_ta_qaUf++ zTo~2|foV|fsRPC{K=S&Adi0|}^15%_qrV6wukGJX>nDNaZTTkJKajkO{brt-*^Q`Uiz;~jk7@V zwtRV&@fwi4HMMB}K=Ou$o;9j}f%cDmj&&NA`y1~=Io?1yOq65bUthCi*BA}@639_D zzHnGy2{b`%-^Tb4NZwKXjNS$$um0&$!w)2{=6z@MZXkJspNZ)yAbIA;4jThN@{Zq$ z`VJ(|oL^=j8l9ix%x8%`zqUfO`kLk zf|EfQS6XQWoPPIZ3ed>~n>hb{$V$c%WW20xro#Vf82na2ZVE{C{Qr~3UCn>F^FOEs zwB`0!uKriz{5-GNRDS$_D74a+6xXlvyYXa7FXQ|r$oqiK+1hgU-cWz9W&|}Ob!BS<$E8^1C{0cVPLAu}F3oq;OyWl+ahHSxR=1nBt^2KH6HPFR zb%++`dP-W=@N9D|5eb@hVmHZkWeu;9m1a9SYgurgX$pqd>XsIYAz#%}pQu}vDfqIe zThlum7pR-rRHUGOGufM9)sfu>*GA!rR#z%kL(bO9SrZg1R+aQZ+(ct`W6a=cU9pOx z+gcgj%6a|Boe7_UO`uDk5*6Fr=^{_AgPpIl4X?WSinH^S577w`@?BP~E82UJc_Gnn z-3*zaic^?7LmfqzBd193j&3??7P43Ew7PC~2gy*%3`Kk80T5jWbW}`&rIH^-Is1dp zIl7&b$CQG%fr>AWiich%{Iq#rG$@TdubjQ+np`-3E6Ta45SUTH#PteuTvgdoww3ZB zxUhS52=T0B!s_hEHD~1avi*OVPQ>+(;cpw^z zNP~r{`Lrtd3@aPFEBntlds;bX6Pl5U`yYsNNG5A2O4&%vo{GPin*=;Af)6XWWGfl|XWvN`oPkyS9+e{Tx^j%^2?e4% zyB)goY`^d1)TkDSK`B86UMlbw$t0gjISAb44huxX_Ir|ZBzwo)e=b~+XYRP1yyvfp0+t0U56ad(nBRU zK1`S&qLI?XLq@kb(v+eTxX6U#oPV(d(YIt5>MqmfSbvuB2GVZ&d*$~BFaLwW9H#S( zk@Cudm;WKpQ|mIGKgwNOiI@Ljr2mSS|6$D3gqQyzKvtA zm)*YZwx!FKHP+Wb?``!<0+LFwncmiQobqPC+XHVWL&_8B0 zQCnR^YTB~dKmdXrsAP9*Vg>b_Xh)kOz3>>Okl`A{!Qc$ z#=A}YUhPIu(#7>s-1&+q<=N|3=Ub0(B^60NLy3%D9G8+@nM7bApfk}QPlbY}lMS)6 zU5|pbiHaShO7LP|GJ@==((Je@;e%D30-Q}Ql@`fVy#Wf;~ zV3my4E_2wbnM^v{VJo;!*d}@AeXUYOJQ%PSjHS!PN@fo3P5*lW@m?&;!i`r}L9ifDDc~W_KxFp`$C%Y(T(;Fp^52bMRrIznRb3l4!s-c0LE#_f1 z6Yp5xAiH`clSwybGp%tQo;!RD$*zh6QdGP+rqsR_Y0uk9EkgFsbqM2@|^ex4WPogCLuS*=&eNugP5+ zqpS1Yvs*$D%P<| zMp{Fa{6R_s;e?6EgVKSM3n%BQjhu)L2W%fJdBvJ89z#&C?0Kl1Oi>|-iJRaWC4sPf z8YLJ`!bP#aGltQD>;hcnF;Vd6S5F$F8ur3flDCRnC4^0$B#O?QWVW`ZVmqT|B7}*0 z$8hw{PBG4TM=JtsP}^wx&?Rk9&c3&*`IgEf%;hvBg z4B>4_esG0YD(*sv<&Ca4V(is}YA-9Rdg3v6Ih1GRRhxTzV=1{7ls#pAjj=w5#_Phx zc&y8>?K~u0hlDG{k74jeC#r=-b{(RX8Y5>{<{`i1R!t|WXjd=Bbchg~sdrfis^%+j zpz`ehZ8y3-r~wO#TmwA&f7bPTeKy^Y*(Zw4tn+tdV&wS60E$Bn(;A%=%BfJeSJJ8Q zJ2gCMW0)>>C{eOu*X-b2(yu`QWP2;%nh;eytxuOLk4&H3c5ZI`5m{b z>iqZdt;*keck8B5fU~iM>PW=Hl|u}wVeY#?4faKk{hw6>;;uYkhlwtf8b;TKIqzaM z%+GtmP!kP3Ju%GsVOW|hShWy6Dc$#3Ev_xHK0c4yFa%-?`Pih7PN~+kl7Zw~#>HTx zF>jPUHUxU3o!xd}bP(kGdZTdL!lBCF#P%20~3a1&^M(zNMyeoU-zzO!JL zKf05sDe~pNj>|_98G93$`FIU#1Kz0ZgfD(8E-_w%3#N+E4ddz}t0GmdX}=HRCeZ#Q zA9(G67fGz(TKNQS23@pg7g;O+fHHial?0nW`;(^4#BelYV!@fBg6Tj!Ld1~#sv_%v zeZ+L!52m>y&J+p&%A8M=UGakHq!H)J?>DQ9tP?gA($#s0U2D6x&TmI@%>ZWItbneC zdWMMlAqJeYimZz=Ty;(6+687lYO}=P(f#2h7u;> zcRI)bO$PlElV($ZQ$aq^G*Bt13{(!94ypjn09AsjKr=!79qB6U&jwu$ssUXCx)wAC zG#4}vM7isLCg^(50?>Ov3qgxOi$OPlD0d_9CeY2GC7`9CI?yekdJsbqEeG8SVkn~9 zK<@?J4q6Gi1GEbCKG15=`#~Q7eGs$;)BtJ(HG!HzYeDNk>p=*?t+j&g1lM{!wH; z;Is1uC-MNV$rlo38teaEn=j_p`HmH!wOv_rgNX3j`2!Um#-sJYuOCbeanenTn11Orq`%E`J25QN! z3gjWL9(cMyzVwdyasDqm(ihS}{y%{0`>(%KdzsY!*EkZrr zUNM~W=Wpzdq{3#_TyQ;7>~zCx${Om*F3Yu7zj{8{BKrTUImuRS2yaUu*DPW@1sVfM zsndzG+d~M>_Wj{hs3(|+#iiEAF5F1mIKV0UDV3@?e5$!zlyZ_W65b}g-aL;=Rqs_5 z2mNfMD+OnY>53NYs?P7O4ak)|!QF&nQ1w)B;{oWxay;jpg7|MvqgYj2e?`}DH8-)U z9kFek;8n>L=gtsb$>~_pf!&SEiyL3M%L+K5>ZhaXBRI1i*)-vfLBk>IQ6zg3sXMHz z`-7@Dqq_^gknOt_Jgr0$IJ2WaE_aqt^fhyel;O(p)}0TEa$a@?U#C2O78P%CMNd-) zrzZtBlbN|r%{c{c-bJW5Ev) z<>bz+<_D_mre1Ch*BoO=x$|6h<@E0qwnZgSkaMgs#YAat^L9=_gbV4*tWtClg}^^$ zIqP{zT!hN*P$X`5XHMbO7Fh4G5g1HjRQe>I~*+Yl|fiy}}{VmK&e+>G_%8B(p{JsT> z2IKjE=X_^8|L+OhgZ#h7{@=p?uUyNx6|v?UScU;inqsfF^Q#GcqsYv867f^kA&PIr zucgr}ZmAN5aFUr!;n!TctrKuGXS^fl9 zJa>X(BM4qk%pA)cd725FFmDlO&nutodTNCH=+eG_BLBdwpzN^OTb5T0p$7ggd)hp{ zb=1~nrrhw`(vM8Q&HsA4656>I7l8WnH zIF8Ctfks~ByitvHB)57L*V6goQI{a@-I^F9b^}eI?)8jTrld?mZnD* z`MPm*B92D!c|t3B#j-BTsv}DUSE)8H8rvAhDbf6~Quzg1sanm% zvADJoS3agj%$eX;@XD0EvL!y_k`&-I#z-rP8`3P&krsj@bCJvWcKR_pGGn=|Uj zbH-Pxr{E*2|M)9^nDE*DepzHbn zg`y+8*u0dx!BHA1Xv$sB|IhB;J^#O^amNTQa#Un}NRR|L5tF*kdH#PBCsFqN|B#$A z%plb=KLyYKFP;eRKoUurl05%EYv}Iz|2ev{X8Z2nDF44EEusaqB>wK#!dgh%shJ2e z9M+;*P>bP{)3yMi!}DXDI?0n?&2>Noo#)n!b8gdmwJ!XHG#J^s+-4$rZ3TYAfXre! z(CHA&{**g^OzXt?dvNxsmVzGKZPk}?{k1&*R(I!-NxRj5{;?)$CDv@;JMT==%Cx4Y zNOD~y*dB>(%UcefG?2FtJZWIUsXrcf(m-yq(EgmAGPFPD%>#-rvJvL(FLLXl@W6)C~#}_x;TmM}?YHiC~|IMv3c!0`QP+PHxI!ADma)z~Mm`@kZ@#6EfT zpE+zS0g|`%`v;7bK=KA(P3z4-^7b!I>uo^te5t6u@R2YR%)6m&D2*tz6S1AzGJPrZQC|XGoO;!uEcI6YOxmC<^;Uy@4MaUH1d>NR)dR_+ zo>l|Nqn=uTjp97tK}ZIB4s z|JlRFGeGiA26r1rf#eN+;(+lYki3D<9X3t^$vbuXA^kLvyxMO(VVnn&=lj?b#^h(y z26_8xpVkqwFL@uz@iNL`q73`iyk*ID-@Qkl3pvW3-+$Ps1y+Kzjr)xiK=O`!c#*LN zNZyGz)A|M=d2Q$R=v#o~wLoVTlu8{qjW*js%DhqEXuLp zFf`xrs|IEF{p_G|5J=fI?>wa+0qzG4eDew87?8XcEv=sbl6UrNhxAu~sNd^_S8XZ|L)f^k~Sx=~k5E(kp#LsQ;iNj~~*Tf#mgFcvNo#lGiuXqx*s6U3lsVqZ>%xiS!=5RI@@CU|MYs zr`EJdYo=v_lP_)JWE-a{efV~|__i?-3Opn@Xi5WDF^Fmkaqi5G;bb5Z?qUqH6n{r5 z(X`{04V|5#WYWAp9K#?H{it9f{m}90tx>a$dG6OH60wBf%mZguYa|ltLNK7#Xfl=P z?acq>UhuDKNF)ONV&ZFUUuP&33msp03h%g4_TUloo;X4YMYAHGgh+Kp zBupP3b6dapTcJcu9OF|tf!1iK4@TW^^hhG!t`OJO)g^OX04K^yJ)-p-uiO|5_F}X><`5qNa~5L8c7}qziE;QomP@F{ z9{)BQsY?WqAG{<4j0-{vYsmW9{(#KRB+6q1YkIV7@@aF%#`9E*|??3MR-xSP2Y~ZwoaaWP!K)!&vkkgzL!6wlDq-nG3 z{K7HYpIJ)1ueGjw@$W5fSiAi8hFhDLF1vl*ZA+IeYp!3~ux?r7()#*_`ldVT*WJ;) z_Prn0G)Dg9#`%_fYe`{1NL~PwncslGoki9I%fh_u+yvU6G;JRAkhPY~+qF~L7DOGh zaW2fhYCALPXf3ijZYb5XTS43e+MkeDKCfD|cgNy)g^GwS^9SUX$~8{PolTe1qcl1386p)rxIy_`|N z`XVdfhiDnEXIh6q`|@GgUFWxw-}yJk62Z+#hgYy_AkHAVigiWS0y=J(?c19`QN{(R z2J(1ig{c{%`-`#EJsx)mm2rCd- z6iS&@=eI+__#<}en?iM(TX2RH=xdoiqp8SBxDoxut)P`ClR%*aS+LwpHo1aT4slM= zi!>HlFQPo-;T+MIK5%DX`EBb%SVoO<#^#EZaS21OAAm$lIgzO(4MkQ4mW{PP2Hlv4 zLNS$f{;ohzD3hM+N}Gw$fH?YxG8$M@WDTTIAZme|K>L%Xp|8k}!#4$xX{b<25Koc6 zgA$&>**;igB`ic47=|6@3l_3`V!L+4AUqVM8INW2aD`*7(G}tlbb&>0?E^*D#Uzwr zI*6M<`;(?Y7uhga{=C#(g{~LJGP-zwk#+IiGEMs@5I2GLC!~|e*TucPp(HI&7?BXe zaU=&WSX<%C>?#o33hT$}BJ1P}D8pe;Im$$Y;X`(tJ7HTXR1F!ejrSE<8}o5j7J;}4 zv_EOuLdp1ZV=}ok76}%(4`I9c4o<(S$Xen1V;_jGY{Y9pV!I~qp>khqHmg>lDo7*F z!*};~7`lBN)$@)btKuH$fW%Fp{RvT)^Hh3FR~W?5Ov{mnff45Xo2&6nNYHRktQz_exT6m_-#~* z&p{pUEwVap#*We5R2>nc^Z%JC%8DYZICT3#HSYIrW zjJ+Fs;RY8i^n04IhTHYJ6sEu!D}G0JcO zC$1~9KBiz5t%56Q*aX_2u&|c*V5N&fHx`$D~oSK861u;DY7zHhHqt*Ay6nIe>mO{4cktkCjFlZRyXn+$=7k- zn~SWD7L;LA=K2K+bznF?YVt3Wn>-eKs9*|d#M$`zejfFs5%=Y$A}eG+#-4x7`1sfa z+Mh5)&n~6)gc6;}g6TkX7=I2O%!dwcEV2%kp$scBZA75Z0j4lA%Zd3};0x7Th~~kr zlbWb4wkA-H_kp+xv_Dz%!6P)$6Nl*z-c|z%ywbx(yiht3wc|;YgT2=cMb=3J%5hgl zCjx~|Fdv-jG8%eQ^ifF0B0K0Ber2XQqhH@S%3uvyTx4zhGcNtdnadYAt~RoIF&kP7 zu8r?N8|$ErMMc(zxbpE3^T2kd7=LCw-W=K3O+~pz9LYl1uyR# z0@1Es`b8I33t|f63@QXWi}w^+3ts+r`<`#5<8a=F8qglt5!w(71lv0kp-|zL+QlQ3 z9VC~Ay!`Lt0m?xIHDVUIP1K_djhVV2F!NEmgxI{c@xJv1dvu6;^1ILqr}?fcvR3#e z(gC7rhCrbenX#j-m6n1``-z&usTAsDevx(Z0u=CaMhOCiPGlx+n?hX-s!_1IBJ}bs z^s)!~&qc#kI*g}Z;)8zS6 zT-3*gKyS3On~`J+)=C<2O3vu;aZ7bvQ)G2qLK#HfcY!FLwR!p9^Zbo=#uAZWFtoj3 zHDPqaxVp$SAyuwvzYpRj(EcR1-TF1o|BlOhxL;gjKGuhSl(awp1KP*;LEHq|pR5^A z@tQ*G&w|wq@dyz^@~etmGuTH=M}Nh)G$M^L#3mbjCcCcO`)Kq8hUhn|i>wni6cX2- z1qz+OE;uunW5dQkoRL`yUO&Wub5@acL6hK`%*6{7x`5HV?T^O)2whgN8LcHa15Knj zuJ|2P(3wS60*&QoWv*Ia=A*Tsn)6(RXI>~Qa^(dD>p$B;EJ{YjQiVFYIA*?MbimU*(g&Cl_JQND3s*IYGP2H85 z_ZBGhk#FkTETUZhsuc1)DC9j*NLi5;!uG*-!U`f#CHt`VAj7pl8x#L4)`_zUQQA$q43Sr@eEtpsrsXn(Q- zfn?W<{VlQHM5N!mFCJvF%R;F`^qw?vrInhm$m;kSO!dAFqDBM?b>#P++2|jcY#W8v z2hE=U6ACf4$okOHRK5ZQ;DKV{LZJ*GCU-NYCs;ubL=kyZ-QH1p_N<+!n6}n zHIUsyYlki-6F!kUxOhE`;4{3&Yaiy%&1 z2^?1&9kHEJq_^PgoqJPnoWM%5!C-UT#C-1GV*dv4UWdRS>PAtvCrc)A8L-6ncW)Rc se|`Zs#@jp%cpC6D;Az0qfTsaZ1D*yv4R{*xG~j8#(}1Ue-!u*U|Iw&lY5)KL literal 124928 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 diff --git a/JA2.plg b/JA2.plg index cdd30165..2dbe4381 100644 --- a/JA2.plg +++ b/JA2.plg @@ -6,7 +6,7 @@ --------------------Configuration: TileEngine - Win32 Release--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP2B.tmp" with contents +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP213.tmp" with contents [ /nologo /MT /W3 /GX /O2 /I "..\Standard Gaming Platform" /I "..\\" /I "..\Tactical" /I "..\Utils" /I "..\tacticalai" /I "..\Editor" /I "..\strategic" /I "..\Laptop" /I ".\\" /D "CALLBACKTIMER" /D "PRECOMPILEDHEADERS" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /D "CINTERFACE" /FR"Release/" /Fp"Release/TileEngine.pch" /YX"TileEngine All.h" /Fo"Release/" /Fd"Release/" /FD /O2b2 /c "C:\JA2\Build\TileEngine\Ambient Control.cpp" @@ -46,8 +46,8 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP2B.tmp" with content "C:\JA2\Build\TileEngine\worldman.cpp" "C:\JA2\Build\TileEngine\XML_ExplosionData.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP2B.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP2C.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP213.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP214.tmp" with contents [ /nologo /out:"Release\TileEngine.lib" ".\Release\Ambient Control.obj" @@ -87,7 +87,7 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP2C.tmp" with content .\Release\worldman.obj .\Release\XML_ExplosionData.obj ] -Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP2C.tmp" +Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP214.tmp"

Output Window

Compiling... Ambient Control.cpp @@ -132,7 +132,7 @@ Creating library... --------------------Configuration: Standard Gaming Platform - Win32 Release--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP2D.tmp" with contents +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP215.tmp" with contents [ /nologo /MT /W3 /GX /O2 /I "..\\" /I "..\TileEngine" /I "..\Tactical" /I "..\Utils" /I "..\strategic" /I ".\\" /D "NO_ZLIB" /D "JA2_PRECOMPILED_HEADERS" /D "NO_ZLIB_COMPRESSION" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /D "CINTERFACE" /FR".\Release/" /Fp".\Release/Standard Gaming Platform.pch" /YX"JA2 SGP ALL.H" /Fo".\Release/" /Fd".\Release/" /FD /c "C:\JA2\Build\Standard Gaming Platform\Button Sound Control.cpp" @@ -172,14 +172,14 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP2D.tmp" with content "C:\JA2\Build\Standard Gaming Platform\vsurface.cpp" "C:\JA2\Build\Standard Gaming Platform\WinFont.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP2D.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP2E.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP215.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP216.tmp" with contents [ /nologo /MT /W3 /GX /O2 /I "..\\" /I "..\TileEngine" /I "..\Tactical" /I "..\Utils" /I "..\strategic" /I ".\\" /D "NO_ZLIB" /D "JA2_PRECOMPILED_HEADERS" /D "NO_ZLIB_COMPRESSION" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /D "CINTERFACE" /D "_DEBUG" /FR".\Release/" /Fp".\Release/Standard Gaming Platform.pch" /YX"JA2 SGP ALL.H" /Fo".\Release/" /Fd".\Release/" /FD /c "C:\JA2\Build\Standard Gaming Platform\DEBUG.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP2E.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP2F.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP216.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP217.tmp" with contents [ /nologo /out:".\Release\Standard Gaming Platform.lib" ".\Release\Button Sound Control.obj" @@ -221,7 +221,7 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP2F.tmp" with content ".\Release\WinFont.obj" ".\ddraw.lib" ] -Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP2F.tmp" +Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP217.tmp"

Output Window

Compiling... Button Sound Control.cpp @@ -275,7 +275,7 @@ Creating library... --------------------Configuration: Tactical - Win32 Release--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP30.tmp" with contents +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP218.tmp" with contents [ /nologo /MT /W3 /GX /O2 /I "..\Standard Gaming Platform" /I "..\TileEngine" /I "..\\" /I "..\Utils" /I "..\tacticalai" /I "..\Editor" /I "..\strategic" /I "..\Laptop" /I ".\\" /D "CALLBACKTIMER" /D "PRECOMPILEDHEADERS" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /FR"Release/" /Fp"Release/Tactical.pch" /YX"Tactical All.h" /Fo"Release/" /Fd"Release/" /FD /c "C:\JA2\Build\Tactical\Air Raid.cpp" @@ -372,14 +372,14 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP30.tmp" with content "C:\JA2\Build\Tactical\XML_Sounds.cpp" "C:\JA2\Build\Tactical\XML_TonyInventory.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP30.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP31.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP218.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP219.tmp" with contents [ /nologo /MT /W3 /GX /Od /I "..\Standard Gaming Platform" /I "..\TileEngine" /I "..\\" /I "..\Utils" /I "..\tacticalai" /I "..\Editor" /I "..\strategic" /I "..\Laptop" /I ".\\" /D "CALLBACKTIMER" /D "PRECOMPILEDHEADERS" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /FR"Release/" /Fp"Release/Tactical.pch" /YX"Tactical All.h" /Fo"Release/" /Fd"Release/" /FD /c "C:\JA2\Build\Tactical\LOS.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP31.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP32.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP219.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP21A.tmp" with contents [ /nologo /out:"Release\Tactical.lib" ".\Release\Air Raid.obj" @@ -477,7 +477,7 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP32.tmp" with content .\Release\XML_Sounds.obj .\Release\XML_TonyInventory.obj ] -Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP32.tmp" +Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP21A.tmp"

Output Window

Compiling... Air Raid.cpp @@ -586,7 +586,7 @@ Creating library... --------------------Configuration: Utils - Win32 Release--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP33.tmp" with contents +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP21B.tmp" with contents [ /nologo /MT /W3 /GX /O2 /I "..\Standard Gaming Platform" /I "..\TileEngine" /I "..\\" /I "..\Tactical" /I "..\tacticalai" /I "..\Editor" /I "..\strategic" /I "..\Laptop" /I ".\\" /D "CALLBACKTIMER" /D "PRECOMPILEDHEADERS" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /D "CINTERFACE" /FR"Release/" /Fp"Release/Utils.pch" /YX"Utils All.h" /Fo"Release/" /Fd"Release/" /FD /c "C:\JA2\Build\Utils\_DutchText.cpp" @@ -629,8 +629,8 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP33.tmp" with content "C:\JA2\Build\Utils\XML_Strings.cpp" "C:\JA2\Build\Utils\XML_Strings2.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP33.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP34.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP21B.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP21C.tmp" with contents [ /nologo /out:"Release\Utils.lib" .\Release\_DutchText.obj @@ -673,7 +673,7 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP34.tmp" with content .\Release\XML_Strings.obj .\Release\XML_Strings2.obj ] -Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP34.tmp" +Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP21C.tmp"

Output Window

Compiling... _DutchText.cpp @@ -732,7 +732,7 @@ Creating library... --------------------Configuration: TacticalAI - Win32 Release--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP35.tmp" with contents +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP21D.tmp" with contents [ /nologo /MT /W3 /GX /O2 /I "..\Standard Gaming Platform" /I "..\TileEngine" /I "..\\" /I "..\Tactical" /I "..\Utils" /I "..\Editor" /I "..\strategic" /I "..\Laptop" /I ".\\" /D "PRECOMPILEDHEADERS" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /D "CINTERFACE" /FR"Release/" /Fp"Release/TacticalAI.pch" /YX"AI All.h" /Fo"Release/" /Fd"Release/" /FD /c "C:\JA2\Build\TacticalAI\AIList.cpp" @@ -750,8 +750,8 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP35.tmp" with content "C:\JA2\Build\TacticalAI\QuestDebug.cpp" "C:\JA2\Build\TacticalAI\Realtime.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP35.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP36.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP21D.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP21E.tmp" with contents [ /nologo /out:"Release\TacticalAI.lib" .\Release\AIList.obj @@ -769,7 +769,7 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP36.tmp" with content .\Release\QuestDebug.obj .\Release\Realtime.obj ] -Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP36.tmp" +Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP21E.tmp"

Output Window

Compiling... AIList.cpp @@ -792,7 +792,7 @@ Creating library... --------------------Configuration: Editor - Win32 Release--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP37.tmp" with contents +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP21F.tmp" with contents [ /nologo /MT /W3 /GX /O2 /Ob2 /I "..\Standard Gaming Platform" /I "..\TileEngine" /I "..\\" /I "..\Tactical" /I "..\Utils" /I "..\tacticalai" /I "..\strategic" /I "..\Laptop" /I ".\\" /D "PRECOMPILEDHEADERS" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /D "CINTERFACE" /FR"Release/" /Fp"Release/Editor.pch" /YX"Editor All.h" /Fo"Release/" /Fd"Release/" /FD /c "C:\JA2\Build\Editor\Cursor Modes.cpp" @@ -820,8 +820,8 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP37.tmp" with content "C:\JA2\Build\Editor\smooth.cpp" "C:\JA2\Build\Editor\Smoothing Utils.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP37.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP38.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP21F.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP220.tmp" with contents [ /nologo /out:"Release\Editor.lib" ".\Release\Cursor Modes.obj" @@ -849,11 +849,10 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP38.tmp" with content .\Release\smooth.obj ".\Release\Smoothing Utils.obj" ] -Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP38.tmp" +Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP220.tmp"

Output Window

Compiling... Cursor Modes.cpp -GENERATED PCH FOR EDITOR PROJECT. edit_sys.cpp Editor Callbacks.cpp Editor Modes.cpp @@ -882,7 +881,7 @@ Creating library... --------------------Configuration: Laptop - Win32 Release--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP39.tmp" with contents +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP221.tmp" with contents [ /nologo /MT /W3 /GX /O2 /I "..\Standard Gaming Platform" /I "..\TileEngine" /I "..\\" /I "..\Tactical" /I "..\Utils" /I "..\tacticalai" /I "..\Editor" /I "..\strategic" /I ".\\" /D "PRECOMPILEDHEADERS" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /D "CINTERFACE" /FR"Release/" /Fp"Release/Laptop.pch" /YX"Laptop All.h" /Fo"Release/" /Fd"Release/" /FD /c "C:\JA2\Build\Laptop\aim.cpp" @@ -943,8 +942,8 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP39.tmp" with content "C:\JA2\Build\Laptop\sirtech.cpp" "C:\JA2\Build\Laptop\Store Inventory.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP39.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP3A.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP221.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP222.tmp" with contents [ /nologo /out:"Release\Laptop.lib" .\Release\aim.obj @@ -1005,7 +1004,7 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP3A.tmp" with content .\Release\sirtech.obj ".\Release\Store Inventory.obj" ] -Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP3A.tmp" +Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP222.tmp"

Output Window

Compiling... aim.cpp @@ -1071,7 +1070,7 @@ Creating library... --------------------Configuration: Strategic - Win32 Release--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP3B.tmp" with contents +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP223.tmp" with contents [ /nologo /MT /W3 /GX /O2 /I "..\Standard Gaming Platform" /I "..\TileEngine" /I "..\\" /I "..\Tactical" /I "..\Utils" /I "..\tacticalai" /I "..\Editor" /I "..\Laptop" /I ".\\" /D "PRECOMPILEDHEADERS" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /D "CINTERFACE" /FR"Release/" /Fp"Release/Strategic.pch" /YX"Strategic All.h" /Fo"Release/" /Fd"Release/" /FD /c "C:\JA2\Build\Strategic\AI Viewer.cpp" @@ -1094,12 +1093,14 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP3B.tmp" with content "C:\JA2\Build\Strategic\mapscreen.cpp" "C:\JA2\Build\Strategic\Meanwhile.cpp" "C:\JA2\Build\Strategic\Merc Contract.cpp" +"C:\JA2\Build\Strategic\MilitiaSquads.cpp" "C:\JA2\Build\Strategic\Player Command.cpp" "C:\JA2\Build\Strategic\PreBattle Interface.cpp" "C:\JA2\Build\Strategic\Queen Command.cpp" "C:\JA2\Build\Strategic\Quest Debug System.cpp" "C:\JA2\Build\Strategic\Quests.cpp" "C:\JA2\Build\Strategic\QuestText.cpp" +"C:\JA2\Build\Strategic\Reinforcement.cpp" "C:\JA2\Build\Strategic\Scheduling.cpp" "C:\JA2\Build\Strategic\Strategic AI.cpp" "C:\JA2\Build\Strategic\Strategic Event Handler.cpp" @@ -1115,11 +1116,9 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP3B.tmp" with content "C:\JA2\Build\Strategic\strategic.cpp" "C:\JA2\Build\Strategic\strategicmap.cpp" "C:\JA2\Build\Strategic\Town Militia.cpp" -"C:\JA2\Build\Strategic\MilitiaSquads.cpp" -"C:\JA2\Build\Strategic\Reinforcement.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP3B.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP3C.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP223.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP224.tmp" with contents [ /nologo /out:"Release\Strategic.lib" ".\Release\AI Viewer.obj" @@ -1142,12 +1141,14 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP3C.tmp" with content .\Release\mapscreen.obj .\Release\Meanwhile.obj ".\Release\Merc Contract.obj" +.\Release\MilitiaSquads.obj ".\Release\Player Command.obj" ".\Release\PreBattle Interface.obj" ".\Release\Queen Command.obj" ".\Release\Quest Debug System.obj" .\Release\Quests.obj .\Release\QuestText.obj +.\Release\Reinforcement.obj .\Release\Scheduling.obj ".\Release\Strategic AI.obj" ".\Release\Strategic Event Handler.obj" @@ -1163,10 +1164,8 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP3C.tmp" with content .\Release\strategic.obj .\Release\strategicmap.obj ".\Release\Town Militia.obj" -.\Release\MilitiaSquads.obj -.\Release\Reinforcement.obj ] -Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP3C.tmp" +Creating command line "link.exe -lib @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP224.tmp"

Output Window

Compiling... AI Viewer.cpp @@ -1190,12 +1189,14 @@ Map Screen Interface.cpp mapscreen.cpp Meanwhile.cpp Merc Contract.cpp +MilitiaSquads.cpp Player Command.cpp PreBattle Interface.cpp Queen Command.cpp Quest Debug System.cpp Quests.cpp QuestText.cpp +Reinforcement.cpp Scheduling.cpp Strategic AI.cpp Strategic Event Handler.cpp @@ -1211,15 +1212,13 @@ Strategic Turns.cpp strategic.cpp strategicmap.cpp Town Militia.cpp -MilitiaSquads.cpp -Reinforcement.cpp Creating library...

--------------------Configuration: ja2 - Win32 Release--------------------

Command Lines

Creating command line "rc.exe /l 0x409 /fo"Release/ja2.res" /i "Res" /i ".\Res" /d "NDEBUG" "C:\JA2\Build\Res\ja2.rc"" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP3D.tmp" with contents +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP225.tmp" with contents [ /nologo /G5 /MT /W3 /GX /Zi /O2 /Ob2 /I ".\Standard Gaming Platform" /I ".\TileEngine" /I ".\Tactical" /I ".\Utils" /I ".\TacticalAI" /I ".\Editor" /I ".\Strategic" /I ".\laptop" /I ".\\" /D "CALLBACKTIMER" /D "PRECOMPILEDHEADERS" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "JA2" /D "XML_STATIC" /D "CINTERFACE" /FR"Release/" /Fp"Release/JA2.pch" /YX"JA2 All.h" /Fo"Release/" /Fd"Release/" /FD /O2b2 /c "C:\JA2\Build\Utils\_Ja25GermanText.cpp" @@ -1246,8 +1245,8 @@ Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP3D.tmp" with content "C:\JA2\Build\SCREENS.cpp" "C:\JA2\Build\Sys Globals.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP3D.tmp" -Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP3E.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP225.tmp" +Creating temporary file "C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP226.tmp" with contents [ libexpatMT.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib winmm.lib smackw32.lib mss32.lib /nologo /subsystem:windows /profile /map:"Release/ja2_cvs.map" /machine:I386 /out:"..\ja2_cvs.exe" .\Release\_Ja25GermanText.obj @@ -1284,7 +1283,7 @@ libexpatMT.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advap .\Laptop\Release\Laptop.lib .\Strategic\Release\Strategic.lib ] -Creating command line "link.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP3E.tmp" +Creating command line "link.exe @C:\DOCUME~1\Owner\LOCALS~1\Temp\RSP226.tmp"

Output Window

Compiling resources... Compiling... @@ -1307,7 +1306,6 @@ Init.cpp Intro.cpp JA2 Splash.cpp jascreens.cpp -C:\JA2\Build\jascreens.cpp(269) : warning C4101: 'str' : unreferenced local variable Loading Screen.cpp MainMenuScreen.cpp MessageBoxScreen.cpp @@ -1322,7 +1320,7 @@ LINK : warning LNK4089: all references to "ADVAPI32.dll" discarded by /OPT:REF

Results

-ja2_cvs.exe - 0 error(s), 2 warning(s) +ja2_cvs.exe - 0 error(s), 1 warning(s) diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index 8787d04e..2bf0d88b 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -1092,21 +1092,43 @@ BOOLEAN BasicCanCharacterTrainMilitia( SOLDIERTYPE *pSoldier ) return( TRUE ); } - +// Kaiden: Roaming Militia Training: +// Commenting out the check for: +// IsMilitiaTrainableFromSoldiersSectorMaxed( +// At this point, we don't care if it's full yet BOOLEAN CanCharacterTrainMilitia( SOLDIERTYPE *pSoldier ) { - if( BasicCanCharacterTrainMilitia( pSoldier ) && + + if (gGameExternalOptions.gfmusttrainroaming) + { + if( BasicCanCharacterTrainMilitia( pSoldier ) && + MilitiaTrainingAllowedInSector( pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ ) && + DoesSectorMercIsInHaveSufficientLoyaltyToTrainMilitia( pSoldier ) && + /*( IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier ) == FALSE ) && */ + ( CountMilitiaTrainersInSoldiersSector( pSoldier ) < gGameExternalOptions.ubMaxMilitiaTrainersPerSector ) ) + { + return( TRUE ); + } + else + { + return( FALSE ); + } + } + else + { + if( BasicCanCharacterTrainMilitia( pSoldier ) && MilitiaTrainingAllowedInSector( pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ ) && DoesSectorMercIsInHaveSufficientLoyaltyToTrainMilitia( pSoldier ) && ( IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier ) == FALSE ) && ( CountMilitiaTrainersInSoldiersSector( pSoldier ) < gGameExternalOptions.ubMaxMilitiaTrainersPerSector ) ) - { - return( TRUE ); - } - else - { - return( FALSE ); + { + return( TRUE ); + } + else + { + return( FALSE ); + } } } @@ -7372,7 +7394,12 @@ void TrainingMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason ) } } - if( IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier ) ) + + // Kaiden: Roaming Militia Training: + // Added to the if test here: + // && (!gGameExternalOptions.gfmusttrainroaming) + + if( IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier ) && (!gGameExternalOptions.gfmusttrainroaming)) { if( bTownId == BLANK_SECTOR ) { @@ -7388,7 +7415,12 @@ void TrainingMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason ) DoScreenIndependantMessageBox( sString, MSG_BOX_FLAG_OK, NULL ); break; - } + } + + + + + if ( CountMilitiaTrainersInSoldiersSector( pSoldier ) >= gGameExternalOptions.ubMaxMilitiaTrainersPerSector ) { diff --git a/Strategic/MilitiaSquads.cpp b/Strategic/MilitiaSquads.cpp index 783cdeda..260ea5b2 100644 --- a/Strategic/MilitiaSquads.cpp +++ b/Strategic/MilitiaSquads.cpp @@ -456,7 +456,9 @@ void UpdateMilitiaSquads(INT16 sMapX, INT16 sMapY ) if( !uiMilitiaCount )return; - // new squad + + //new squad + if( GetTownIdForSector( sMapX, sMapY ) != BLANK_SECTOR ) { if( GetWorldHour() % gGameExternalOptions.guiCreateEachNHours )return; @@ -481,35 +483,41 @@ void UpdateMilitiaSquads(INT16 sMapX, INT16 sMapY ) //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%ld,%ld:Dir count %ld, Rand %ld. Go to %ld,%ld", sMapX, sMapY, uiDirNumber, iRandomRes, SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0] )); - GenerateMilitiaSquad( sMapX, sMapY, SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0] ) ); - AddToBlockMoveList( SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0] ) ); + + // Kaiden: Roaming Militia Training: + // If we're training roaming militia, + // We'll get our new squad elsewhere. + if(!gGameExternalOptions.gfmusttrainroaming) + { + GenerateMilitiaSquad( sMapX, sMapY, SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0] ) ); + AddToBlockMoveList( SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0] ) ); - if( NumEnemiesInSector( SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0] ) ) && CountAllMilitiaInSector( SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0] ) ) ) - { -/* GROUP* pEnemyGroup = GetGroup( GetEnemyGroupIdInSector( SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0] ) ) ); - - if(pEnemyGroup && pEnemyGroup->ubGroupID) + if( NumEnemiesInSector( SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0] ) ) && CountAllMilitiaInSector( SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0] ) ) ) { - //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Attacking from %ld,%ld to %ld,%ld - enemy's group id %ld", sMapX, sMapY, SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0], pEnemyGroup->ubGroupID )); - //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Arrival 1, Arrival 2"); + /* GROUP* pEnemyGroup = GetGroup( GetEnemyGroupIdInSector( SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0] ) ) ); + + if(pEnemyGroup && pEnemyGroup->ubGroupID) + { + //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Attacking from %ld,%ld to %ld,%ld - enemy's group id %ld", sMapX, sMapY, SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0], pEnemyGroup->ubGroupID )); + //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Arrival 1, Arrival 2"); - pEnemyGroup->ubPrevX = sMapX; - pEnemyGroup->ubPrevY = sMapY; + pEnemyGroup->ubPrevX = sMapX; + pEnemyGroup->ubPrevY = sMapY; - pEnemyGroup->ubNextX = SECTORX( pMoveDir[ iRandomRes ][0] ); - pEnemyGroup->ubNextY = SECTORY( pMoveDir[ iRandomRes ][0] ); -*/ - gfMSBattle = TRUE; -// GroupArrivedAtSector( pEnemyGroup->ubGroupID , TRUE, FALSE ); - - EnterAutoResolveMode( SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0] ) ); -// } + pEnemyGroup->ubNextX = SECTORX( pMoveDir[ iRandomRes ][0] ); + pEnemyGroup->ubNextY = SECTORY( pMoveDir[ iRandomRes ][0] ); + */ + gfMSBattle = TRUE; + // GroupArrivedAtSector( pEnemyGroup->ubGroupID , TRUE, FALSE ); + + EnterAutoResolveMode( SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0] ) ); + // } + } } - } - else return; - + else return; } + // moving squad, if it is not a SAM site else if(!IsThisSectorASAMSector( sMapX, sMapY, 0 )) if( !PlayerMercsInSector_MSE( (UINT8)sMapX, (UINT8)sMapY, FALSE ) ) // and there's no player's mercs in the sector @@ -581,6 +589,102 @@ void UpdateMilitiaSquads(INT16 sMapX, INT16 sMapY ) } + // Kaiden: Roaming Militia Training: + // If we're training roaming militia, + // we'll get our squad from here: + +void CreateMilitiaSquads(INT16 sMapX, INT16 sMapY ) +{ + UINT16 pMoveDir[4][3]; + UINT8 uiDirNumber = 0; + UINT32 iRandomRes = 0, iRandom = 0; + UINT8 x;//,y; + SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( sMapX, sMapY ) ] ); + UINT8 uiMilitiaCount; + + if( !gGameExternalOptions.gfAllowMilitiaGroups ) + return; + + if( sMapX == 1 && sMapY == 1 ) + { + ClearBlockMoveList(); + gfMSBattle = FALSE; + } + + if( CheckInBlockMoveList( sMapX, sMapY ) )return; + + uiMilitiaCount = CountMilitia(pSectorInfo); + + if( !uiMilitiaCount )return; + + // new squad + + if(gGameExternalOptions.gfmusttrainroaming) + { + if( GetTownIdForSector( sMapX, sMapY ) != BLANK_SECTOR ) + { + GenerateDirectionInfos( sMapX, sMapY, &uiDirNumber, pMoveDir, FALSE, FALSE, FALSE ); + + if(uiDirNumber)// && Random(100) < CHANCE_TO_GENERATE_A_SQUAD) + { + for( x = 1; x < uiDirNumber ; ++x )pMoveDir[x][1] += pMoveDir[x-1][1]; + + iRandomRes = Random( pMoveDir[ uiDirNumber - 1 ][1] ); + + for( x = 0; x < uiDirNumber; ++x) + if( iRandomRes < pMoveDir[x][1] ) + { + iRandomRes = x; + break; + } + + // shouldn't be! + if(iRandomRes >= uiDirNumber)iRandomRes = 0; + + //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%ld,%ld:Dir count %ld, Rand %ld. Go to %ld,%ld", sMapX, sMapY, uiDirNumber, iRandomRes, SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0] )); + + GenerateMilitiaSquad( sMapX, sMapY, SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0] ) ); + AddToBlockMoveList( SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0] ) ); + + if( NumEnemiesInSector( SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0] ) ) && CountAllMilitiaInSector( SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0] ) ) ) + { + /* GROUP* pEnemyGroup = GetGroup( GetEnemyGroupIdInSector( SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0] ) ) ); + + if(pEnemyGroup && pEnemyGroup->ubGroupID) + { + //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Attacking from %ld,%ld to %ld,%ld - enemy's group id %ld", sMapX, sMapY, SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0], pEnemyGroup->ubGroupID )); + //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Arrival 1, Arrival 2"); + + pEnemyGroup->ubPrevX = sMapX; + pEnemyGroup->ubPrevY = sMapY; + + pEnemyGroup->ubNextX = SECTORX( pMoveDir[ iRandomRes ][0] ); + pEnemyGroup->ubNextY = SECTORY( pMoveDir[ iRandomRes ][0] ); + */ + gfMSBattle = TRUE; + // GroupArrivedAtSector( pEnemyGroup->ubGroupID , TRUE, FALSE ); + + EnterAutoResolveMode( SECTORX( pMoveDir[ iRandomRes ][0] ), SECTORY( pMoveDir[ iRandomRes ][0] ) ); + // } + } + + } + else return; + } + } + + return; +} + + + + + + + + + + extern BOOLEAN gfMSResetMilitia; void DoMilitiaHelpFromAdjacentSectors( INT16 sMapX, INT16 sMapY ) diff --git a/Strategic/MilitiaSquads.h b/Strategic/MilitiaSquads.h index c7d3b314..297fef6e 100644 --- a/Strategic/MilitiaSquads.h +++ b/Strategic/MilitiaSquads.h @@ -12,6 +12,7 @@ extern UINT8 gpAttackDirs[5][4]; extern UINT8 guiDirNumber; void UpdateMilitiaSquads(INT16 sMapX, INT16 sMapY ); +void CreateMilitiaSquads(INT16 sMapX, INT16 sMapY ); void MilitiaHelpFromAdjacentSectors( INT16 sMapX, INT16 sMapY ); void GenerateDirectionInfos( INT16 sMapX, INT16 sMapY, UINT8* uiDirNumber, UINT16 pMoveDir[4][3], BOOLEAN fWithCities, BOOLEAN fForBattle, BOOLEAN fOnlyCitySectors ); diff --git a/Strategic/Strategic.dsp b/Strategic/Strategic.dsp index d7fdea14..4084a487 100644 --- a/Strategic/Strategic.dsp +++ b/Strategic/Strategic.dsp @@ -315,6 +315,10 @@ SOURCE=".\Merc Contract.cpp" # End Source File # Begin Source File +SOURCE=.\MilitiaSquads.cpp +# End Source File +# Begin Source File + SOURCE=".\Player Command.cpp" # End Source File # Begin Source File @@ -339,6 +343,10 @@ SOURCE=.\QuestText.cpp # End Source File # Begin Source File +SOURCE=.\Reinforcement.cpp +# End Source File +# Begin Source File + SOURCE=.\Scheduling.cpp # End Source File # Begin Source File @@ -475,6 +483,10 @@ SOURCE=".\Merc Contract.h" # End Source File # Begin Source File +SOURCE=.\MilitiaSquads.h +# End Source File +# Begin Source File + SOURCE=".\Player Command.h" # End Source File # Begin Source File @@ -491,6 +503,10 @@ SOURCE=.\Quests.h # End Source File # Begin Source File +SOURCE=.\Reinforcement.h +# End Source File +# Begin Source File + SOURCE=.\Scheduling.h # End Source File # Begin Source File @@ -546,13 +562,5 @@ SOURCE=.\strategicmap.h SOURCE=".\Town Militia.h" # End Source File # End Group -# Begin Source File - -SOURCE=.\MilitiaSquads.cpp -# End Source File -# Begin Source File - -SOURCE=.\Reinforcement.cpp -# End Source File # End Target # End Project diff --git a/Strategic/Town Militia.cpp b/Strategic/Town Militia.cpp index a31c4d56..ef522bac 100644 --- a/Strategic/Town Militia.cpp +++ b/Strategic/Town Militia.cpp @@ -24,6 +24,7 @@ #include "GameSettings.h" #endif +#include "MilitiaSquads.h" #define SIZE_OF_MILITIA_COMPLETED_TRAINING_LIST 50 // temporary local global variables @@ -33,6 +34,7 @@ INT16 gsTownSectorServerSkipY = -1; UINT8 gubTownSectorServerIndex = 0; BOOLEAN gfYesNoPromptIsForContinue = FALSE; // this flag remembers whether we're starting new training, or continuing INT32 giTotalCostOfTraining = 0; +BOOLEAN gfAreWeTrainingMobile = FALSE; //the completed list of sector soldiers for training militia @@ -81,7 +83,7 @@ void TownMilitiaTrainingCompleted( SOLDIERTYPE *pTrainer, INT16 sMapX, INT16 sMa INT32 iMaxMilitiaPerSector = gGameExternalOptions.iMaxMilitiaPerSector; INT32 iTrainingSquadSize = gGameExternalOptions.iTrainingSquadSize; -DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Militia1"); + DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Militia1"); // get town index ubTownId = StrategicMap[ sMapX + sMapY * MAP_WORLD_X ].bNameId; @@ -101,101 +103,149 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Militia1"); // 4) If not enough GREENS there to promote, promote GREENs in other sectors. // 5) If all friendly sectors of this town are completely filled with REGULAR militia, then training effect is wasted - while (ubMilitiaTrained < iTrainingSquadSize) + + // Kaiden: Roaming Militia Training: + // If we're not training roaming militia, + // then we will handle everything as normal. + + if( (IsMilitiaTrainableFromSoldiersSectorMaxed( pTrainer )) && (gGameExternalOptions.gfmusttrainroaming)) { - // is there room for another militia in the training sector itself? - if (CountAllMilitiaInSector(sMapX, sMapY) < iMaxMilitiaPerSector) + CreateMilitiaSquads(sMapX, sMapY ); + } + else + { + while (ubMilitiaTrained < iTrainingSquadSize) { - // great! Create a new GREEN militia guy in the training sector - StrategicAddMilitiaToSector(sMapX, sMapY, GREEN_MILITIA, 1); + // is there room for another militia in the training sector itself? + if (CountAllMilitiaInSector(sMapX, sMapY) < iMaxMilitiaPerSector) + { + // great! Create a new GREEN militia guy in the training sector + StrategicAddMilitiaToSector(sMapX, sMapY, GREEN_MILITIA, 1); + } + else + { + fFoundOne = FALSE; + + if( ubTownId != BLANK_SECTOR ) + { + InitFriendlyTownSectorServer(ubTownId, sMapX, sMapY); + + // check other eligible sectors in this town for room for another militia + while( ServeNextFriendlySectorInTown( &sNeighbourX, &sNeighbourY ) ) + { + // is there room for another militia in this neighbouring sector ? + if (CountAllMilitiaInSector(sNeighbourX, sNeighbourY) < iMaxMilitiaPerSector) + { + // great! Create a new GREEN militia guy in the neighbouring sector + StrategicAddMilitiaToSector(sNeighbourX, sNeighbourY, GREEN_MILITIA, 1); + + fFoundOne = TRUE; + break; + } + } + } + + // if we still haven't been able to train anyone + if (!fFoundOne) + { + // alrighty, then. We'll have to *promote* guys instead. + + // are there any GREEN militia men in the training sector itself? + if (MilitiaInSectorOfRank(sMapX, sMapY, GREEN_MILITIA) > 0) + { + // great! Promote a GREEN militia guy in the training sector to a REGULAR + StrategicPromoteMilitiaInSector(sMapX, sMapY, GREEN_MILITIA, 1); + fFoundOne = TRUE; + } + else + { + if( ubTownId != BLANK_SECTOR ) + { + // dammit! Last chance - try to find other eligible sectors in the same town with a Green guy to be promoted + InitFriendlyTownSectorServer(ubTownId, sMapX, sMapY); + + // check other eligible sectors in this town for room for another militia + while( ServeNextFriendlySectorInTown( &sNeighbourX, &sNeighbourY ) ) + { + // are there any GREEN militia men in the neighbouring sector ? + if (MilitiaInSectorOfRank(sNeighbourX, sNeighbourY, GREEN_MILITIA) > 0) + { + // great! Promote a GREEN militia guy in the neighbouring sector to a REGULAR + StrategicPromoteMilitiaInSector(sNeighbourX, sNeighbourY, GREEN_MILITIA, 1); + + fFoundOne = TRUE; + break; + } + } + } + + // Kaiden: Veteran militia training + // This is essentially copy/pasted from above + // But the names have been changed to protect the innocent + if ((!fFoundOne) && (gGameExternalOptions.gfTrainVeteranMilitia)) + { + // are there any REGULAR militia men in the training sector itself? + if (MilitiaInSectorOfRank(sMapX, sMapY, REGULAR_MILITIA) > 0) + { + // great! Promote a REGULAR militia guy in the training sector to a REGULAR + StrategicPromoteMilitiaInSector(sMapX, sMapY, REGULAR_MILITIA, 1); + fFoundOne = TRUE; + } + else + { + if( ubTownId != BLANK_SECTOR ) + { + // dammit! Last chance - try to find other eligible sectors in the same town with a Green guy to be promoted + InitFriendlyTownSectorServer(ubTownId, sMapX, sMapY); + + // check other eligible sectors in this town for room for another militia + while( ServeNextFriendlySectorInTown( &sNeighbourX, &sNeighbourY ) ) + { + // are there any REGULAR militia men in the neighbouring sector ? + if (MilitiaInSectorOfRank(sNeighbourX, sNeighbourY, REGULAR_MILITIA) > 0) + { + // great! Promote a GREEN militia guy in the neighbouring sector to a REGULAR + StrategicPromoteMilitiaInSector(sNeighbourX, sNeighbourY, REGULAR_MILITIA, 1); + + fFoundOne = TRUE; + break; + } + } + } + } + } + + // if we still haven't been able to train anyone + if (!fFoundOne) + { + // Well, that's it. All eligible sectors of this town are full of REGULARs or ELITEs. + // The training goes to waste in this situation. + break; // the main while loop + } + } + } + } + + // next, please! + ubMilitiaTrained++; } - else + + + // if anyone actually got trained + if (ubMilitiaTrained > 0) { - fFoundOne = FALSE; + // update the screen display + fMapPanelDirty = TRUE; if( ubTownId != BLANK_SECTOR ) { - InitFriendlyTownSectorServer(ubTownId, sMapX, sMapY); - - // check other eligible sectors in this town for room for another militia - while( ServeNextFriendlySectorInTown( &sNeighbourX, &sNeighbourY ) ) - { - // is there room for another militia in this neighbouring sector ? - if (CountAllMilitiaInSector(sNeighbourX, sNeighbourY) < iMaxMilitiaPerSector) - { - // great! Create a new GREEN militia guy in the neighbouring sector - StrategicAddMilitiaToSector(sNeighbourX, sNeighbourY, GREEN_MILITIA, 1); - - fFoundOne = TRUE; - break; - } - } + // loyalty in this town increases a bit because we obviously care about them... + IncrementTownLoyalty( ubTownId, LOYALTY_BONUS_FOR_TOWN_TRAINING ); } - // if we still haven't been able to train anyone - if (!fFoundOne) - { - // alrighty, then. We'll have to *promote* guys instead. - - // are there any GREEN militia men in the training sector itself? - if (MilitiaInSectorOfRank(sMapX, sMapY, GREEN_MILITIA) > 0) - { - // great! Promote a GREEN militia guy in the training sector to a REGULAR - StrategicPromoteMilitiaInSector(sMapX, sMapY, GREEN_MILITIA, 1); - } - else - { - if( ubTownId != BLANK_SECTOR ) - { - // dammit! Last chance - try to find other eligible sectors in the same town with a Green guy to be promoted - InitFriendlyTownSectorServer(ubTownId, sMapX, sMapY); - - // check other eligible sectors in this town for room for another militia - while( ServeNextFriendlySectorInTown( &sNeighbourX, &sNeighbourY ) ) - { - // are there any GREEN militia men in the neighbouring sector ? - if (MilitiaInSectorOfRank(sNeighbourX, sNeighbourY, GREEN_MILITIA) > 0) - { - // great! Promote a GREEN militia guy in the neighbouring sector to a REGULAR - StrategicPromoteMilitiaInSector(sNeighbourX, sNeighbourY, GREEN_MILITIA, 1); - - fFoundOne = TRUE; - break; - } - } - } - - // if we still haven't been able to train anyone - if (!fFoundOne) - { - // Well, that's it. All eligible sectors of this town are full of REGULARs or ELITEs. - // The training goes to waste in this situation. - break; // the main while loop - } - } - } } - - // next, please! - ubMilitiaTrained++; } - - // if anyone actually got trained - if (ubMilitiaTrained > 0) - { - // update the screen display - fMapPanelDirty = TRUE; - - if( ubTownId != BLANK_SECTOR ) - { - // loyalty in this town increases a bit because we obviously care about them... - IncrementTownLoyalty( ubTownId, LOYALTY_BONUS_FOR_TOWN_TRAINING ); - } - - } - - // the trainer announces to player that he's finished his assignment. Make his sector flash! AssignmentDone( pTrainer, TRUE, FALSE ); @@ -519,9 +569,21 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Militia2"); iNumberOfSectors = GetNumberOfUnpaidTrainableSectors( ); Assert( iNumberOfSectors > 0 ); + // Kaiden: Roaming Militia Training: + // We want to charge more for Roaming + // get total cost - giTotalCostOfTraining = iMilitiaTrainingCost * iNumberOfSectors; - Assert( giTotalCostOfTraining > 0 ); + if( IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier ) && (gGameExternalOptions.gfmusttrainroaming)) + { + giTotalCostOfTraining = (iMilitiaTrainingCost*gGameExternalOptions.iMilitiaCostModifier) * iNumberOfSectors; + Assert( giTotalCostOfTraining > 0 ); + gfAreWeTrainingMobile = TRUE; + } + else + { + giTotalCostOfTraining = iMilitiaTrainingCost * iNumberOfSectors; + Assert( giTotalCostOfTraining > 0 ); + } gfYesNoPromptIsForContinue = FALSE; @@ -579,6 +641,7 @@ void HandleInterfaceMessageForContinuingTrainingMilitia( SOLDIERTYPE *pSoldier ) INT32 iMinLoyaltyToTrain = gGameExternalOptions.iMinLoyaltyToTrain; INT32 iMilitiaTrainingCost = gGameExternalOptions.iMilitiaTrainingCost; + DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Militia3"); sSectorX = pSoldier->sSectorX; @@ -599,7 +662,12 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Militia3"); return; } - if ( IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier ) ) + // Kaiden: Roaming Militia Training: + // Changed the if condition from + // if ( IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier ) ) + // And we're not training mobile militia from a SAM Site + + if (( IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier )) && (IsThisSectorASAMSector(sSectorX,sSectorY,0 ))) { // we're full!!! go home! bTownId = GetTownIdForSector( sSectorX, sSectorY ); @@ -618,10 +686,47 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Militia3"); DoContinueMilitiaTrainingMessageBox( sSectorX, sSectorY, sString, MSG_BOX_FLAG_OK, CantTrainMilitiaOkBoxCallback ); return; } + else + { + if (( IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier )) && (!gGameExternalOptions.gfmusttrainroaming)) + { + // we're full!!! go home! + bTownId = GetTownIdForSector( sSectorX, sSectorY ); + if ( bTownId == BLANK_SECTOR ) + { + // wilderness SAM site + GetSectorIDString( sSectorX, sSectorY, 0, sStringB, TRUE ); + void (*tempFptr)(INT16 , INT16 , INT8 , CHAR16 *, BOOLEAN) = GetSectorIDString; + swprintf( (wchar_t *)sString, (wchar_t *)pMilitiaConfirmStrings[ 10 ], sStringB, tempFptr, iMinLoyaltyToTrain ); + } + else + { + // town + swprintf( (wchar_t *)sString, (wchar_t *)pMilitiaConfirmStrings[ 10 ], pTownNames[ bTownId ], iMinLoyaltyToTrain ); + } + DoContinueMilitiaTrainingMessageBox( sSectorX, sSectorY, sString, MSG_BOX_FLAG_OK, CantTrainMilitiaOkBoxCallback ); + return; + } + } - // continue training always handles just one sector at a time - giTotalCostOfTraining = iMilitiaTrainingCost; + + + + + + // Kaiden: Roaming Militia Training: + // Charging more to train Roaming Militia + if ( IsMilitiaTrainableFromSoldiersSectorMaxed( pSoldier ) && (gGameExternalOptions.gfmusttrainroaming)) + { + giTotalCostOfTraining = (iMilitiaTrainingCost*gGameExternalOptions.iMilitiaCostModifier); + gfAreWeTrainingMobile = TRUE; + } + else + { + // continue training always handles just one sector at a time + giTotalCostOfTraining = iMilitiaTrainingCost; + } // can player afford to continue training? if( LaptopSaveInfo.iCurrentBalance < giTotalCostOfTraining ) { @@ -804,9 +909,19 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Militia4"); if( SectorOursAndPeaceful( sSectorX, sSectorY, 0 ) ) { // don't count GREEN militia, they can be trained into regulars first - iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, REGULAR_MILITIA ); - iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, ELITE_MILITIA ); - iMaxNumber += iMaxMilitiaPerSector; + // Kaiden: Veteran Militia Training: + // And we don't count regulars either if we're training veterans + if (gGameExternalOptions.gfTrainVeteranMilitia) + { + iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, ELITE_MILITIA ); + iMaxNumber += iMaxMilitiaPerSector; + } + else + { + iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, REGULAR_MILITIA ); + iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, ELITE_MILITIA ); + iMaxNumber += iMaxMilitiaPerSector; + } } } @@ -840,11 +955,23 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Militia5"); if( SectorOursAndPeaceful( sSectorX, sSectorY, 0 ) ) { // don't count GREEN militia, they can be trained into regulars first - iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, REGULAR_MILITIA ); - iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, ELITE_MILITIA ); - iMaxNumber += iMaxMilitiaPerSector; + + // Kaiden: Veteran Militia Training: + // And we don't count regulars either if we're training veterans + if (gGameExternalOptions.gfTrainVeteranMilitia) + { + iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, ELITE_MILITIA ); + iMaxNumber += iMaxMilitiaPerSector; + } + else + { + iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, REGULAR_MILITIA ); + iNumberOfMilitia += MilitiaInSectorOfRank( sSectorX, sSectorY, ELITE_MILITIA ); + iMaxNumber += iMaxMilitiaPerSector; + } } + // now check the number of militia if ( iMaxNumber > iNumberOfMilitia ) { @@ -1123,8 +1250,17 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Militia6"); Assert( SectorInfo[ ubSector ].fMilitiaTrainingPaid == FALSE ); // spend the money - AddTransactionToPlayersBook( TRAIN_TOWN_MILITIA, ubSector, GetWorldTotalMin(), -( iMilitiaTrainingCost ) ); - + // Kaiden: Roaming Militia Training: + // Charging more to train Roaming Militia + if ( gfAreWeTrainingMobile) + { + AddTransactionToPlayersBook( TRAIN_TOWN_MILITIA, ubSector, GetWorldTotalMin(), -( iMilitiaTrainingCost*gGameExternalOptions.iMilitiaCostModifier ) ); + gfAreWeTrainingMobile = FALSE; + } + else + { + AddTransactionToPlayersBook( TRAIN_TOWN_MILITIA, ubSector, GetWorldTotalMin(), -( iMilitiaTrainingCost ) ); + } // mark this sector sectors as being paid up SectorInfo[ ubSector ].fMilitiaTrainingPaid = TRUE; diff --git a/builddefines.h b/builddefines.h index 46b8b220..aebb259d 100644 --- a/builddefines.h +++ b/builddefines.h @@ -27,9 +27,11 @@ #ifdef JA2BETAVERSION - #define SGP_DEBUG - #define FORCE_ASSERTS_ON - #define SGP_VIDEO_DEBUGGING + #ifndef JA2EDITOR + #define SGP_DEBUG + #define FORCE_ASSERTS_ON + #define SGP_VIDEO_DEBUGGING + #endif #endif //#define CRIPPLED_VERSION