forked from karadoc/Civ4-K-Mod
/
CvCity.h
1375 lines (1146 loc) · 69.4 KB
/
CvCity.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
#pragma once
// city.h
#ifndef CIV4_CITY_H
#define CIV4_CITY_H
#include "CvDLLEntity.h"
#include "LinkedList.h"
class CvPlot;
class CvPlotGroup;
class CvArea;
class CvGenericBuilding;
class CvArtInfoBuilding;
class CvCityAI; // advc.003: Needed for AI(void) functions
/************************************************************************************************/
/* BETTER_BTS_AI_MOD 02/24/10 EmperorFool */
/* */
/* */
/************************************************************************************************/
// From BUG
void addGoodOrBad(int iValue, int& iGood, int& iBad);
void subtractGoodOrBad(int iValue, int& iGood, int& iBad);
/************************************************************************************************/
/* BETTER_BTS_AI_MOD END */
/************************************************************************************************/
class CvCity : public CvDLLEntity
{
public:
CvCity();
virtual ~CvCity();
void init(int iID, PlayerTypes eOwner, int iX, int iY, bool bBumpUnits, bool bUpdatePlotGroups);
void uninit();
void reset(int iID = 0, PlayerTypes eOwner = NO_PLAYER, int iX = 0, int iY = 0, bool bConstructorCall = false);
void setupGraphical();
void kill(bool bUpdatePlotGroups); // Exposed to Python
void doTurn();
void doRevolt(); // advc.003: previously in CvPlot::doCulture
/* K-Mod. I've made this function public so that I can use it for the "insert culture" espionage mission.
(I've also changed the functionality of it quite a bit.) */
void doPlotCultureTimes100(bool bUpdate, PlayerTypes ePlayer, int iCultureRateTimes100, bool bCityCulture);
bool isCitySelected();
DllExport bool canBeSelected() const;
DllExport void updateSelectedCity(bool bTestProduction);
void updateYield();
void updateVisibility();
void createGreatPeople(UnitTypes eGreatPersonUnit, bool bIncrementThreshold, bool bIncrementExperience); // Exposed to Python
void doTask(TaskTypes eTask, int iData1 = -1, int iData2 = -1, bool bOption = false, bool bAlt = false, bool bShift = false, bool bCtrl = false); // Exposed to Python
void chooseProduction(UnitTypes eTrainUnit = NO_UNIT, BuildingTypes eConstructBuilding = NO_BUILDING, ProjectTypes eCreateProject = NO_PROJECT, bool bFinish = false, bool bFront = false); // Exposed to Python
int getCityPlotIndex(const CvPlot* pPlot) const; // Exposed to Python
CvPlot* getCityIndexPlot(int iIndex) const; // Exposed to Python
bool canWork(CvPlot* pPlot) const; // Exposed to Python
void verifyWorkingPlot(int iIndex);
void verifyWorkingPlots();
void clearWorkingOverride(int iIndex); // Exposed to Python
int countNumImprovedPlots(ImprovementTypes eImprovement = NO_IMPROVEMENT, bool bPotential = false) const; // Exposed to Python
int countNumWaterPlots() const; // Exposed to Python
int countNumRiverPlots() const; // Exposed to Python
int findPopulationRank() const; // Exposed to Python
int findBaseYieldRateRank(YieldTypes eYield) const; // Exposed to Python
int findYieldRateRank(YieldTypes eYield) const; // Exposed to Python
int findCommerceRateRank(CommerceTypes eCommerce) const; // Exposed to Python
UnitTypes allUpgradesAvailable(UnitTypes eUnit, int iUpgradeCount = 0, // Exposed to Python
BonusTypes eAssumeVailable = NO_BONUS) const; // advc.001u
bool isWorldWondersMaxed() const; // Exposed to Python
bool isTeamWondersMaxed() const; // Exposed to Python
bool isNationalWondersMaxed() const; // Exposed to Python
int getNumNationalWondersLeft() const; // advc.004w, advc.131
bool isBuildingsMaxed() const; // Exposed to Python
bool canTrain(UnitTypes eUnit, bool bContinue = false, bool bTestVisible = false, // Exposed to Python
bool bIgnoreCost = false, bool bIgnoreUpgrades = false,
bool bCheckAirUnitCap = true, // advc.001b
BonusTypes eAssumeVailable = NO_BONUS) const; // advc.001u
bool canUpgradeTo(UnitTypes eUnit) const; // advc.001b
bool canTrain(UnitCombatTypes eUnitCombat) const;
bool canConstruct(BuildingTypes eBuilding, bool bContinue = false, bool bTestVisible = false, bool bIgnoreCost = false, bool bIgnoreTech = false) const; // Exposed to Python, K-Mod added bIgnoreTech
bool canCreate(ProjectTypes eProject, bool bContinue = false, bool bTestVisible = false) const; // Exposed to Python
bool canMaintain(ProcessTypes eProcess, bool bContinue = false) const; // Exposed to Python
bool canJoin() const; // Exposed to Python
int getFoodTurnsLeft() const; // Exposed to Python
bool isProduction() const; // Exposed to Python
bool isProductionLimited() const; // Exposed to Python
bool isProductionUnit() const; // Exposed to Python
bool isProductionBuilding() const; // Exposed to Python
bool isProductionProject() const; // Exposed to Python
bool isProductionProcess() const; // Exposed to Python
bool canContinueProduction(OrderData order); // Exposed to Python
int getProductionExperience(UnitTypes eUnit = NO_UNIT) const; // Exposed to Python
void addProductionExperience(CvUnit* pUnit, bool bConscript = false); // Exposed to Python
UnitTypes getProductionUnit() const; // Exposed to Python
UnitAITypes getProductionUnitAI() const; // Exposed to Python
BuildingTypes getProductionBuilding() const; // Exposed to Python
ProjectTypes getProductionProject() const; // Exposed to Python
ProcessTypes getProductionProcess() const; // Exposed to Python
const wchar* getProductionName() const; // Exposed to Python
const wchar* getProductionNameKey() const; // Exposed to Python
int getGeneralProductionTurnsLeft() const; // Exposed to Python
bool isFoodProduction() const; // Exposed to Python
bool isFoodProduction(UnitTypes eUnit) const; // Exposed to Python
int getFirstUnitOrder(UnitTypes eUnit) const; // Exposed to Python
int getFirstBuildingOrder(BuildingTypes eBuilding) const; // Exposed to Python
int getFirstProjectOrder(ProjectTypes eProject) const; // Exposed to Python
int getNumTrainUnitAI(UnitAITypes eUnitAI) const; // Exposed to Python
int getProduction() const; // Exposed to Python
int getProductionNeeded() const; // Exposed to Python
int getProductionNeeded(UnitTypes eUnit) const;
int getProductionNeeded(BuildingTypes eBuilding) const;
int getProductionNeeded(ProjectTypes eProject) const;
int getProductionTurnsLeft() const; // Exposed to Python
int getProductionTurnsLeft(UnitTypes eUnit, int iNum) const; // Exposed to Python
int getProductionTurnsLeft(BuildingTypes eBuilding, int iNum) const; // Exposed to Python
int getProductionTurnsLeft(ProjectTypes eProject, int iNum) const; // Exposed to Python
int getProductionTurnsLeft(int iProductionNeeded, int iProduction, int iFirstProductionDifference, int iProductionDifference) const;
void setProduction(int iNewValue); // Exposed to Python
void changeProduction(int iChange); // Exposed to Python
int getProductionModifier() const; // Exposed to Python
int getProductionModifier(UnitTypes eUnit) const; // Exposed to Python
int getProductionModifier(BuildingTypes eBuilding) const; // Exposed to Python
int getProductionModifier(ProjectTypes eProject) const; // Exposed to Python
int getOverflowProductionDifference(int iProductionNeeded, int iProduction, int iProductionModifier, int iDiff, int iModifiedProduction) const;
int getProductionDifference(int iProductionNeeded, int iProduction, int iProductionModifier, bool bFoodProduction, bool bOverflow) const;
int getCurrentProductionDifference(bool bIgnoreFood, bool bOverflow) const; // Exposed to Python
int getExtraProductionDifference(int iExtra) const; // Exposed to Python
bool canHurry(HurryTypes eHurry, bool bTestVisible = false) const; // Exposed to Python
void hurry(HurryTypes eHurry); // Exposed to Python
// <advc.912d>
bool canPopRush() const;
void changePopRushCount(int iChange);
// </advc.912d>
UnitTypes getConscriptUnit() const; // Exposed to Python
CvUnit* initConscriptedUnit();
int getConscriptPopulation() const; // Exposed to Python
int conscriptMinCityPopulation() const; // Exposed to Python
int flatConscriptAngerLength() const; // Exposed to Python
bool canConscript() const; // Exposed to Python
void conscript(); // Exposed to Python
int getBonusHealth(BonusTypes eBonus) const; // Exposed to Python - getBonusHealth
int getBonusHappiness(BonusTypes eBonus) const; // Exposed to Python - getBonusHappiness
int getBonusPower(BonusTypes eBonus, bool bDirty) const; // Exposed to Python
int getBonusYieldRateModifier(YieldTypes eIndex, BonusTypes eBonus) const; // Exposed to Python
void processBonus(BonusTypes eBonus, int iChange);
void processBuilding(BuildingTypes eBuilding, int iChange, bool bObsolete = false);
void processProcess(ProcessTypes eProcess, int iChange);
void processSpecialist(SpecialistTypes eSpecialist, int iChange);
HandicapTypes getHandicapType() const; // Exposed to Python
CivilizationTypes getCivilizationType() const; // Exposed to Python
LeaderHeadTypes getPersonalityType() const; // Exposed to Python
DllExport ArtStyleTypes getArtStyleType() const; // Exposed to Python
DllExport CitySizeTypes getCitySizeType() const; // Exposed to Python
DllExport const CvArtInfoBuilding* getBuildingArtInfo(BuildingTypes eBuilding) const;
DllExport float getBuildingVisibilityPriority(BuildingTypes eBuilding) const;
bool hasTrait(TraitTypes eTrait) const; // Exposed to Python
bool isBarbarian() const; // Exposed to Python
bool isHuman() const; // Exposed to Python
DllExport bool isVisible(TeamTypes eTeam, bool bDebug) const; // Exposed to Python
bool isCapital() const; // Exposed to Python
bool isPrereqBonusSea() const; // advc.041
/* advc.003: -1 means use MIN_WATER_SIZE_FOR_OCEAN. Removed MIN_WATER_SIZE_FOR_OCEAN
from all calls to this function (except those from Python). */
bool isCoastal(int iMinWaterSize = -1) const; // Exposed to Python
bool isDisorder() const; // Exposed to Python
bool isHolyCity(ReligionTypes eIndex) const; // Exposed to Python
bool isHolyCity() const; // Exposed to Python
bool isHeadquarters(CorporationTypes eIndex) const; // Exposed to Python
bool isHeadquarters() const; // Exposed to Python
void setHeadquarters(CorporationTypes eIndex);
int getOvercrowdingPercentAnger(int iExtra = 0) const; // Exposed to Python
int getNoMilitaryPercentAnger() const; // Exposed to Python
int getCulturePercentAnger() const; // Exposed to Python
int getReligionPercentAnger() const; // Exposed to Python
/* advc.104: Moved parts of getReligionPercentAnger() into a subroutine.
getReligionPercentAnger(PlayerTypes) doesn't check if the city owner is
at war with civId; can be used for predicting anger caused by a DoW. */
double getReligionPercentAnger(PlayerTypes civId) const;
int getHurryPercentAnger(int iExtra = 0) const; // Exposed to Python
int getConscriptPercentAnger(int iExtra = 0) const; // Exposed to Python
int getDefyResolutionPercentAnger(int iExtra = 0) const;
int getWarWearinessPercentAnger() const; // Exposed to Python
int getLargestCityHappiness() const; // Exposed to Python
int getVassalHappiness() const; // Exposed to Python
int getVassalUnhappiness() const; // Exposed to Python
int unhappyLevel(int iExtra = 0) const; // Exposed to Python
int happyLevel() const; // Exposed to Python
int angryPopulation(int iExtra = 0, // Exposed to Python
bool bIgnoreCultureRate = false) const; // advc.104
int visiblePopulation() const;
int totalFreeSpecialists() const; // Exposed to Python
int extraPopulation() const; // Exposed to Python
int extraSpecialists() const; // Exposed to Python
int extraFreeSpecialists() const; // Exposed to Python
int unhealthyPopulation(bool bNoAngry = false, int iExtra = 0) const; // Exposed to Python
int totalGoodBuildingHealth() const; // Exposed to Python
int totalBadBuildingHealth() const; // Exposed to Python
int goodHealth() const; // Exposed to Python
int badHealth(bool bNoAngry = false, int iExtra = 0) const; // Exposed to Python
int healthRate(bool bNoAngry = false, int iExtra = 0) const; // Exposed to Python
int foodConsumption(bool bNoAngry = false, int iExtra = 0) const; // Exposed to Python
int foodDifference(bool bBottom = true, bool bIgnoreProduction = false) const; // Exposed to Python, K-Mod added bIgnoreProduction
int growthThreshold() const; // Exposed to Python
int productionLeft() const; // Exposed to Python
int hurryCost(bool bExtra) const; // Exposed to Python
int getHurryCostModifier(bool bIgnoreNew = false) const;
int hurryGold(HurryTypes eHurry) const; // Exposed to Python
int hurryPopulation(HurryTypes eHurry) const; // Exposed to Python
int hurryProduction(HurryTypes eHurry) const; // Exposed to Python
int flatHurryAngerLength() const; // Exposed to Python
int hurryAngerLength(HurryTypes eHurry) const; // Exposed to Python
int maxHurryPopulation() const; // Exposed to Python
int cultureDistance(int iDX, int iDY) const; // Exposed to Python
int cultureStrength(PlayerTypes ePlayer) const; // Exposed to Python
int cultureGarrison(PlayerTypes ePlayer) const; // Exposed to Python
PlayerTypes calculateCulturalOwner() const; // advc.099c
int getNumBuilding(BuildingTypes eIndex) const; // Exposed to Python
int getNumActiveBuilding(BuildingTypes eIndex) const; // Exposed to Python
bool hasActiveWorldWonder() const; // Exposed to Python
/************************************************************************************************/
/* UNOFFICIAL_PATCH 03/04/10 Mongoose & jdog5000 */
/* */
/* Bugfix */
/************************************************************************************************/
int getNumActiveWorldWonders(
PlayerTypes ownerId = NO_PLAYER) const; // advc.104d: Hypothetical owner
/************************************************************************************************/
/* UNOFFICIAL_PATCH END */
/************************************************************************************************/
int getReligionCount() const; // Exposed to Python
int getCorporationCount() const; // Exposed to Python
DllExport int getID() const; // Exposed to Python
DllExport int getIndex() const;
DllExport IDInfo getIDInfo() const;
void setID(int iID);
int plotNum() const; // advc.104
DllExport int getX() const; // Exposed to Python
#ifdef _USRDLL
inline int getX_INLINE() const
{
return m_iX;
}
#endif
DllExport int getY() const; // Exposed to Python
#ifdef _USRDLL
inline int getY_INLINE() const
{
return m_iY;
}
#endif
bool at(int iX, int iY) const; // Exposed to Python
bool at(CvPlot* pPlot) const; // Exposed to Python - atPlot
DllExport CvPlot* plot() const; // Exposed to Python
CvPlotGroup* plotGroup(PlayerTypes ePlayer) const;
bool isConnectedTo(CvCity* pCity) const; // Exposed to Python
bool isConnectedToCapital(PlayerTypes ePlayer = NO_PLAYER) const; // Exposed to Python
int getArea() const;
CvArea* area() const; // Exposed to Python
/************************************************************************************************/
/* BETTER_BTS_AI_MOD 01/02/09 jdog5000 */
/* */
/* */
/************************************************************************************************/
CvArea* waterArea(bool bNoImpassable = false) const; // Exposed to Python
CvArea* secondWaterArea() const;
CvArea* sharedWaterArea(CvCity* pCity) const;
bool isBlockaded() const;
/************************************************************************************************/
/* BETTER_BTS_AI_MOD END */
/************************************************************************************************/
CvPlot* getRallyPlot() const; // Exposed to Python
void setRallyPlot(CvPlot* pPlot);
int getGameTurnFounded() const; // Exposed to Python
void setGameTurnFounded(int iNewValue);
int getGameTurnAcquired() const; // Exposed to Python
void setGameTurnAcquired(int iNewValue);
int getPopulation() const; // Exposed to Python
void setPopulation(int iNewValue); // Exposed to Python
void changePopulation(int iChange); // Exposed to Python
long getRealPopulation() const; // Exposed to Python
int getHighestPopulation() const; // Exposed to Python
void setHighestPopulation(int iNewValue);
int getWorkingPopulation() const; // Exposed to Python
void changeWorkingPopulation(int iChange);
int getSpecialistPopulation() const; // Exposed to Python
void changeSpecialistPopulation(int iChange);
int getNumGreatPeople() const; // Exposed to Python
void changeNumGreatPeople(int iChange);
int getBaseGreatPeopleRate() const; // Exposed to Python
int getGreatPeopleRate() const; // Exposed to Python
int getTotalGreatPeopleRateModifier() const; // Exposed to Python
void changeBaseGreatPeopleRate(int iChange); // Exposed to Python
int getGreatPeopleRateModifier() const; // Exposed to Python
void changeGreatPeopleRateModifier(int iChange);
// BUG - Building Additional Great People - start
int getAdditionalGreatPeopleRateByBuilding(BuildingTypes eBuilding) const;
int getAdditionalBaseGreatPeopleRateByBuilding(BuildingTypes eBuilding) const;
int getAdditionalGreatPeopleRateModifierByBuilding(BuildingTypes eBuilding) const;
// BUG - Building Additional Great People - end
// BUG - Specialist Additional Great People - start
int getAdditionalGreatPeopleRateBySpecialist(SpecialistTypes eSpecialist, int iChange = 1) const;
int getAdditionalBaseGreatPeopleRateBySpecialist(SpecialistTypes eSpecialist, int iChange = 1) const;
// BUG - Specialist Additional Great People - end
int getGreatPeopleProgress() const; // Exposed to Python
void changeGreatPeopleProgress(int iChange); // Exposed to Python
int getNumWorldWonders() const; // Exposed to Python
void changeNumWorldWonders(int iChange);
int getNumTeamWonders() const; // Exposed to Python
void changeNumTeamWonders(int iChange);
int getNumNationalWonders() const; // Exposed to Python
void changeNumNationalWonders(int iChange);
int getNumBuildings() const; // Exposed to Python
void changeNumBuildings(int iChange);
int getGovernmentCenterCount() const;
bool isGovernmentCenter() const; // Exposed to Python
void changeGovernmentCenterCount(int iChange);
// BUG - Building Saved Maintenance - start
int getSavedMaintenanceTimes100ByBuilding(BuildingTypes eBuilding) const;
// BUG - Building Saved Maintenance - end
int getMaintenance() const; // Exposed to Python
int getMaintenanceTimes100() const; // Exposed to Python
void updateMaintenance();
int calculateDistanceMaintenance() const; // Exposed to Python
int calculateNumCitiesMaintenance() const; // Exposed to Python
int calculateColonyMaintenance() const; // Exposed to Python
int calculateCorporationMaintenance() const; // Exposed to Python
/* <advc.104> Added an optional parameter to allow the computation of
projected maintenance for cities yet to be conquered. */
int calculateDistanceMaintenanceTimes100(PlayerTypes owner = NO_PLAYER) const; // Exposed to Python
int calculateColonyMaintenanceTimes100(PlayerTypes owner = NO_PLAYER) const;
int calculateNumCitiesMaintenanceTimes100(PlayerTypes owner = NO_PLAYER) const; // Exposed to Python // Exposed to Python
// </advc.104>
// <advc.004b> A projection for cities yet to be founded
static int calculateDistanceMaintenanceTimes100(CvPlot* pCityPlot,
PlayerTypes eOwner, int iPopulation = -1);
static int calculateNumCitiesMaintenanceTimes100(CvPlot* pCityPlot,
PlayerTypes eOwner, int iPopulation = -1, int iExtraCities = 0);
static int calculateColonyMaintenanceTimes100(CvPlot* pCityPlot,
PlayerTypes eOwner, int iPopulation = -1, int iExtraCities = 0);
static int initialPopulation();
// </advc.004b>
int calculateCorporationMaintenanceTimes100(CorporationTypes eCorporation) const; // Exposed to Python
int calculateCorporationMaintenanceTimes100() const; // Exposed to Python
int calculateBaseMaintenanceTimes100() const;
int getMaintenanceModifier() const; // Exposed to Python
void changeMaintenanceModifier(int iChange);
int getWarWearinessModifier() const; // Exposed to Python
void changeWarWearinessModifier(int iChange);
int getHurryAngerModifier() const; // Exposed to Python
void changeHurryAngerModifier(int iChange);
int getHealRate() const; // Exposed to Python
void changeHealRate(int iChange);
int getEspionageHealthCounter() const; // Exposed to Python
void changeEspionageHealthCounter(int iChange); // Exposed to Python
int getEspionageHappinessCounter() const; // Exposed to Python
void changeEspionageHappinessCounter(int iChange); // Exposed to Python
int getFreshWaterGoodHealth() const; // Exposed to Python
int getFreshWaterBadHealth() const; // Exposed to Python
void updateFreshWaterHealth();
int getFeatureGoodHealth() const; // Exposed to Python
int getFeatureBadHealth() const; // Exposed to Python
void updateFeatureHealth();
// BUG - Actual Effects - start
int getAdditionalAngryPopuplation(int iGood, int iBad) const;
int getAdditionalSpoiledFood(int iGood, int iBad) const;
int getAdditionalStarvation(int iSpoiledFood) const;
// BUG - Actual Effects - end
// <advc.001c>
int GPTurnsLeft() const;
void GPProjection(std::vector<std::pair<UnitTypes,int> >& r) const; // (exposed to Python)
// </advc.001c>
int getBuildingGoodHealth() const; // Exposed to Python
int getBuildingBadHealth() const; // Exposed to Python
int getBuildingHealth(BuildingTypes eBuilding) const; // Exposed to Python
int getBuildingGoodHealth(BuildingTypes eBuilding) const;
int getBuildingBadHealth(BuildingTypes eBuilding) const;
void changeBuildingGoodHealth(int iChange);
void changeBuildingBadHealth(int iChange);
int getPowerGoodHealth() const; // Exposed to Python
int getPowerBadHealth() const; // Exposed to Python
void updatePowerHealth();
int getBonusGoodHealth() const; // Exposed to Python
int getBonusBadHealth() const; // Exposed to Python
void changeBonusGoodHealth(int iChange);
void changeBonusBadHealth(int iChange);
int getMilitaryHappiness() const; // Exposed to Python
int getMilitaryHappinessUnits() const; // Exposed to Python
void changeMilitaryHappinessUnits(int iChange);
int getBuildingGoodHappiness() const; // Exposed to Python
int getBuildingBadHappiness() const; // Exposed to Python
int getBuildingHappiness(BuildingTypes eBuilding) const; // Exposed to Python
void changeBuildingGoodHappiness(int iChange);
void changeBuildingBadHappiness(int iChange);
int getExtraBuildingGoodHappiness() const; // Exposed to Python
int getExtraBuildingBadHappiness() const; // Exposed to Python
void updateExtraBuildingHappiness();
/************************************************************************************************/
/* BETTER_BTS_AI_MOD 02/24/10 EmperorFool */
/* */
/* */
/************************************************************************************************/
// From BUG
int getAdditionalHappinessByBuilding(BuildingTypes eBuilding, int& iGood, int& iBad) const;
/************************************************************************************************/
/* BETTER_BTS_AI_MOD END */
/************************************************************************************************/
int getExtraBuildingGoodHealth() const; // Exposed to Python
int getExtraBuildingBadHealth() const; // Exposed to Python
void updateExtraBuildingHealth();
/************************************************************************************************/
/* BETTER_BTS_AI_MOD 02/24/10 EmperorFool */
/* */
/* */
/************************************************************************************************/
// From BUG
int getAdditionalHealthByBuilding(BuildingTypes eBuilding, int& iGood, int& iBad,
bool bAssumeStrategicBonuses = false) const; // advc.001h
/************************************************************************************************/
/* BETTER_BTS_AI_MOD END */
/************************************************************************************************/
int getFeatureGoodHappiness() const; // Exposed to Python
int getFeatureBadHappiness() const; // Exposed to Python
void updateFeatureHappiness();
int getBonusGoodHappiness( // Exposed to Python
bool bIgnoreModifier = false) const; // advc.912c
int getBonusBadHappiness() const; // Exposed to Python
void changeBonusGoodHappiness(int iChange);
void changeBonusBadHappiness(int iChange);
int getReligionGoodHappiness() const; // Exposed to Python
int getReligionBadHappiness() const; // Exposed to Python
int getReligionHappiness(ReligionTypes eReligion) const; // Exposed to Python
void updateReligionHappiness();
int getExtraHappiness() const; // Exposed to Python
void changeExtraHappiness(int iChange); // Exposed to Python
int getExtraHealth() const; // Exposed to Python
void changeExtraHealth(int iChange); // Exposed to Python
int getHurryAngerTimer() const; // Exposed to Python
void changeHurryAngerTimer(int iChange); // Exposed to Python
int getConscriptAngerTimer() const; // Exposed to Python
void changeConscriptAngerTimer(int iChange); // Exposed to Python
int getDefyResolutionAngerTimer() const; // Exposed to Python
void changeDefyResolutionAngerTimer(int iChange); // Exposed to Python
int flatDefyResolutionAngerLength() const; // Exposed to Python
int getHappinessTimer() const; // Exposed to Python
void changeHappinessTimer(int iChange); // Exposed to Python
int getNoUnhappinessCount() const;
bool isNoUnhappiness() const; // Exposed to Python
void changeNoUnhappinessCount(int iChange);
/*
** K-Mod, 27/dec/10, karadoc
** replaced NoUnhealthyPopulation with UnhealthyPopulationModifier
*/
/* original bts code
int getNoUnhealthyPopulationCount() const;
bool isNoUnhealthyPopulation() const; // Exposed to Python
void changeNoUnhealthyPopulationCount(int iChange); */
int getUnhealthyPopulationModifier() const; // Exposed to Python
void changeUnhealthyPopulationModifier(int iChange);
/*
** K-Mod end
*/
int getBuildingOnlyHealthyCount() const;
bool isBuildingOnlyHealthy() const; // Exposed to Python
void changeBuildingOnlyHealthyCount(int iChange);
int getFood() const; // Exposed to Python
void setFood(int iNewValue); // Exposed to Python
void changeFood(int iChange); // Exposed to Python
int getFoodKept() const; // Exposed to Python
void setFoodKept(int iNewValue);
void changeFoodKept(int iChange);
int getMaxFoodKeptPercent() const; // Exposed to Python
void changeMaxFoodKeptPercent(int iChange);
int getOverflowProduction() const; // Exposed to Python
void setOverflowProduction(int iNewValue); // Exposed to Python
void changeOverflowProduction(int iChange, int iProductionModifier);
int getFeatureProduction()const; // Exposed to Python
void setFeatureProduction(int iNewValue); // Exposed to Python
void changeFeatureProduction(int iChange);
int getMilitaryProductionModifier() const; // Exposed to Python
void changeMilitaryProductionModifier(int iChange);
int getSpaceProductionModifier() const; // Exposed to Python
void changeSpaceProductionModifier(int iChange);
int getExtraTradeRoutes() const; // Exposed to Python
void changeExtraTradeRoutes(int iChange); // Exposed to Python
int getTradeRouteModifier() const; // Exposed to Python
void changeTradeRouteModifier(int iChange);
int getForeignTradeRouteModifier() const; // Exposed to Python
void changeForeignTradeRouteModifier(int iChange);
/***
**** K-Mod, 26/sep/10, Karadoc
**** Trade culture calculation
***/
int getTradeCultureRateTimes100(int iLevel) const; // Exposed to Python
/*** end */
int getBuildingDefense() const; // Exposed to Python
void changeBuildingDefense(int iChange);
// BUG - Building Additional Defense - start
int getAdditionalDefenseByBuilding(BuildingTypes eBuilding) const;
// BUG - Building Additional Defense - start
int getBuildingBombardDefense() const; // Exposed to Python
void changeBuildingBombardDefense(int iChange);
int getFreeExperience() const; // Exposed to Python
void changeFreeExperience(int iChange);
int getCurrAirlift() const; // Exposed to Python
void setCurrAirlift(int iNewValue);
void changeCurrAirlift(int iChange);
int getMaxAirlift() const; // Exposed to Python
void changeMaxAirlift(int iChange);
int getAirModifier() const; // Exposed to Python
void changeAirModifier(int iChange);
int getAirUnitCapacity(TeamTypes eTeam) const; // Exposed to Python
void changeAirUnitCapacity(int iChange); // Exposed to Python
int getNukeModifier() const; // Exposed to Python
void changeNukeModifier(int iChange);
int getFreeSpecialist() const; // Exposed to Python
void changeFreeSpecialist(int iChange);
int getPowerCount() const;
bool isPower() const; // Exposed to Python
bool isAreaCleanPower() const; // Exposed to Python
int getDirtyPowerCount() const;
bool isDirtyPower() const; // Exposed to Python
void changePowerCount(int iChange, bool bDirty);
bool isAreaBorderObstacle() const; // Exposed to Python
int getDefenseDamage() const; // Exposed to Python
void changeDefenseDamage(int iChange); // Exposed to Python
void changeDefenseModifier(int iChange); // Exposed to Python
int getLastDefenseDamage() const; // Exposed to Python
void setLastDefenseDamage(int iNewValue);
bool isBombardable(const CvUnit* pUnit) const; // Exposed to Python
int getNaturalDefense() const; // Exposed to Python
int getTotalDefense(bool bIgnoreBuilding) const; // Exposed to Python
int getDefenseModifier(bool bIgnoreBuilding) const; // Exposed to Python
int getOccupationTimer() const; // Exposed to Python
bool isOccupation() const; // Exposed to Python
void setOccupationTimer(int iNewValue); // Exposed to Python
void changeOccupationTimer(int iChange); // Exposed to Python
int getCultureUpdateTimer() const; // Exposed to Python
void setCultureUpdateTimer(int iNewValue);
void changeCultureUpdateTimer(int iChange); // Exposed to Python
int getCitySizeBoost() const;
void setCitySizeBoost(int iBoost);
bool isNeverLost() const; // Exposed to Python
void setNeverLost(bool bNewValue); // Exposed to Python
bool isBombarded() const; // Exposed to Python
void setBombarded(bool bNewValue); // Exposed to Python
bool isDrafted() const; // Exposed to Python
void setDrafted(bool bNewValue); // Exposed to Python
bool isAirliftTargeted() const; // Exposed to Python
void setAirliftTargeted(bool bNewValue); // Exposed to Python
bool isWeLoveTheKingDay() const; // Exposed to Python
void setWeLoveTheKingDay(bool bNewValue);
bool isCitizensAutomated() const; // Exposed to Python
void setCitizensAutomated(bool bNewValue); // Exposed to Python
bool isProductionAutomated() const; // Exposed to Python
void setProductionAutomated(bool bNewValue, bool bClear); // Exposed to Python
/* allows you to programmatically specify a cities walls rather than having them be generated automagically */
DllExport bool isWallOverride() const;
void setWallOverride(bool bOverride);
DllExport bool isInfoDirty() const;
DllExport void setInfoDirty(bool bNewValue);
DllExport bool isLayoutDirty() const;
DllExport void setLayoutDirty(bool bNewValue);
bool isPlundered() const; // Exposed to Python
void setPlundered(bool bNewValue); // Exposed to Python
DllExport PlayerTypes getOwner() const; // Exposed to Python
#ifdef _USRDLL
inline PlayerTypes getOwnerINLINE() const
{
return m_eOwner;
}
#endif
DllExport TeamTypes getTeam() const; // Exposed to Python
PlayerTypes getPreviousOwner() const; // Exposed to Python
void setPreviousOwner(PlayerTypes eNewValue);
PlayerTypes getOriginalOwner() const; // Exposed to Python
void setOriginalOwner(PlayerTypes eNewValue);
CultureLevelTypes getCultureLevel() const; // Exposed to Python
int getCultureThreshold() const; // Exposed to Python
static int getCultureThreshold(CultureLevelTypes eLevel);
void setCultureLevel(CultureLevelTypes eNewValue, bool bUpdatePlotGroups);
void updateCultureLevel(bool bUpdatePlotGroups);
int getSeaPlotYield(YieldTypes eIndex) const; // Exposed to Python
void changeSeaPlotYield(YieldTypes eIndex, int iChange);
int getRiverPlotYield(YieldTypes eIndex) const; // Exposed to Python
void changeRiverPlotYield(YieldTypes eIndex, int iChange);
// BUG - Building Additional Yield - start
int getAdditionalYieldByBuilding(YieldTypes eIndex, BuildingTypes eBuilding) const;
int getAdditionalBaseYieldRateByBuilding(YieldTypes eIndex, BuildingTypes eBuilding) const;
int getAdditionalYieldRateModifierByBuilding(YieldTypes eIndex, BuildingTypes eBuilding) const;
// BUG - Building Additional Yield - end
// BUG - Specialist Additional Yield - start
int getAdditionalYieldBySpecialist(YieldTypes eIndex, SpecialistTypes eSpecialist, int iChange = 1) const;
int getAdditionalBaseYieldRateBySpecialist(YieldTypes eIndex, SpecialistTypes eSpecialist, int iChange = 1) const;
// BUG - Specialist Additional Yield - end
int getBaseYieldRate(YieldTypes eIndex) const; // Exposed to Python
int getBaseYieldRateModifier(YieldTypes eIndex, int iExtra = 0) const; // Exposed to Python
int getYieldRate(YieldTypes eIndex) const; // Exposed to Python
void setBaseYieldRate(YieldTypes eIndex, int iNewValue); // Exposed to Python
void changeBaseYieldRate(YieldTypes eIndex, int iChange); // Exposed to Python
int calculateBaseYieldRate(YieldTypes eIndex); // advc.104u
int getYieldRateModifier(YieldTypes eIndex) const; // Exposed to Python
void changeYieldRateModifier(YieldTypes eIndex, int iChange);
int getPowerYieldRateModifier(YieldTypes eIndex) const; // Exposed to Python
void changePowerYieldRateModifier(YieldTypes eIndex, int iChange);
int getBonusYieldRateModifier(YieldTypes eIndex) const; // Exposed to Python
void changeBonusYieldRateModifier(YieldTypes eIndex, int iChange);
int getTradeYield(YieldTypes eIndex) const; // Exposed to Python
int totalTradeModifier(CvCity* pOtherCity = NULL) const; // Exposed to Python
int getPopulationTradeModifier() const;
int getPeaceTradeModifier(TeamTypes eTeam) const;
int getBaseTradeProfit(CvCity* pCity) const;
int calculateTradeProfit(CvCity* pCity) const; // Exposed to Python
int calculateTradeYield(YieldTypes eIndex, int iTradeProfit) const; // Exposed to Python
void setTradeYield(YieldTypes eIndex, int iNewValue);
int getExtraSpecialistYield(YieldTypes eIndex) const; // Exposed to Python
int getExtraSpecialistYield(YieldTypes eIndex, SpecialistTypes eSpecialist) const;// Exposed to Python
void updateExtraSpecialistYield(YieldTypes eYield);
void updateExtraSpecialistYield();
int getCommerceRate(CommerceTypes eIndex) const; // Exposed to Python
int getCommerceRateTimes100(CommerceTypes eIndex) const; // Exposed to Python
int getCommerceFromPercent(CommerceTypes eIndex, int iYieldRate) const; // Exposed to Python
int getBaseCommerceRate(CommerceTypes eIndex) const; // Exposed to Python
int getBaseCommerceRateTimes100(CommerceTypes eIndex) const; // Exposed to Python
int getTotalCommerceRateModifier(CommerceTypes eIndex) const; // Exposed to Python
void updateCommerce(CommerceTypes eIndex);
void updateCommerce();
int getProductionToCommerceModifier(CommerceTypes eIndex) const; // Exposed to Python
void changeProductionToCommerceModifier(CommerceTypes eIndex, int iChange);
int getBuildingCommerce(CommerceTypes eIndex) const; // Exposed to Python
int getBuildingCommerceByBuilding(CommerceTypes eIndex, BuildingTypes eBuilding) const; // Exposed to Python
void updateBuildingCommerce();
// BUG - Building Additional Commerce - start
int getAdditionalCommerceByBuilding(CommerceTypes eIndex, BuildingTypes eBuilding) const;
int getAdditionalCommerceTimes100ByBuilding(CommerceTypes eIndex, BuildingTypes eBuilding) const;
int getAdditionalBaseCommerceRateByBuilding(CommerceTypes eIndex, BuildingTypes eBuilding) const;
int getAdditionalBaseCommerceRateByBuildingImpl(CommerceTypes eIndex, BuildingTypes eBuilding) const;
int getAdditionalCommerceRateModifierByBuilding(CommerceTypes eIndex, BuildingTypes eBuilding) const;
int getAdditionalCommerceRateModifierByBuildingImpl(CommerceTypes eIndex, BuildingTypes eBuilding) const;
// BUG - Building Additional Commerce - end
int getSpecialistCommerce(CommerceTypes eIndex) const; // Exposed to Python
void changeSpecialistCommerce(CommerceTypes eIndex, int iChange); // Exposed to Python
// BUG - Specialist Additional Commerce - start
int getAdditionalCommerceBySpecialist(CommerceTypes eIndex, SpecialistTypes eSpecialist, int iChange = 1) const; // Exposed to Python
int getAdditionalCommerceTimes100BySpecialist(CommerceTypes eIndex, SpecialistTypes eSpecialist, int iChange = 1) const; // Exposed to Python
int getAdditionalBaseCommerceRateBySpecialist(CommerceTypes eIndex, SpecialistTypes eSpecialist, int iChange = 1) const; // Exposed to Python
int getAdditionalBaseCommerceRateBySpecialistImpl(CommerceTypes eIndex, SpecialistTypes eSpecialist, int iChange = 1) const;
// BUG - Specialist Additional Commerce - end
int getReligionCommerce(CommerceTypes eIndex) const; // Exposed to Python
int getReligionCommerceByReligion(CommerceTypes eIndex, ReligionTypes eReligion) const; // Exposed to Python
void updateReligionCommerce(CommerceTypes eIndex);
void updateReligionCommerce();
void setCorporationYield(YieldTypes eIndex, int iNewValue);
int getCorporationCommerce(CommerceTypes eIndex) const; // Exposed to Python
int getCorporationCommerceByCorporation(CommerceTypes eIndex, CorporationTypes eCorporation) const; // Exposed to Python
int getCorporationYield(YieldTypes eIndex) const; // Exposed to Python
int getCorporationYieldByCorporation(YieldTypes eIndex, CorporationTypes eCorporation) const; // Exposed to Python
void updateCorporation();
void updateCorporationCommerce(CommerceTypes eIndex);
void updateCorporationYield(YieldTypes eIndex);
void updateCorporationBonus();
int getCommerceRateModifier(CommerceTypes eIndex) const; // Exposed to Python
void changeCommerceRateModifier(CommerceTypes eIndex, int iChange);
int getCommerceHappinessPer(CommerceTypes eIndex) const; // Exposed to Python
int getCommerceHappinessByType(CommerceTypes eIndex) const; // Exposed to Python
int getCommerceHappiness() const; // Exposed to Python
void changeCommerceHappinessPer(CommerceTypes eIndex, int iChange);
int getDomainFreeExperience(DomainTypes eIndex) const; // Exposed to Python
void changeDomainFreeExperience(DomainTypes eIndex, int iChange);
int getDomainProductionModifier(DomainTypes eIndex) const; // Exposed to Python
void changeDomainProductionModifier(DomainTypes eIndex, int iChange);
int getCulture(PlayerTypes eIndex) const; // Exposed to Python
int getCultureTimes100(PlayerTypes eIndex) const; // Exposed to Python
int countTotalCultureTimes100() const; // Exposed to Python
PlayerTypes findHighestCulture() const; // Exposed to Python
// advc.101:
double revoltProbability( // <advc.023>
bool bIgnoreWar = false, bool biIgnoreGarrison = false,
bool bIgnoreOccupation = false) const;
double probabilityOccupationDecrement() const; // </advc.023>
bool canCultureFlip(PlayerTypes eToPlayer, // K-Mod
bool bCheckPriorRevolts = true) const; // advc.101
int calculateCulturePercent(PlayerTypes eIndex) const; // Exposed to Python
int calculateTeamCulturePercent(TeamTypes eIndex) const; // Exposed to Python
void setCulture(PlayerTypes eIndex, int iNewValue, bool bPlots, bool bUpdatePlotGroups); // Exposed to Python
void setCultureTimes100(PlayerTypes eIndex, int iNewValue, bool bPlots, bool bUpdatePlotGroups); // Exposed to Python
void changeCulture(PlayerTypes eIndex, int iChange, bool bPlots, bool bUpdatePlotGroups); // Exposed to Python
void changeCultureTimes100(PlayerTypes eIndex, int iChange, bool bPlots, bool bUpdatePlotGroups); // Exposed to Python
int getNumRevolts(PlayerTypes eIndex) const;
int getNumRevolts() const; // advc.099c: To the current cultural owner
void changeNumRevolts(PlayerTypes eIndex, int iChange);
double getRevoltTestProbability() const; // advc.101: Now between 0 and 1
bool isTradeRoute(PlayerTypes eIndex) const; // Exposed to Python
void setTradeRoute(PlayerTypes eIndex, bool bNewValue);
bool isEverOwned(PlayerTypes eIndex) const; // Exposed to Python
void setEverOwned(PlayerTypes eIndex, bool bNewValue);
DllExport bool isRevealed(TeamTypes eIndex, bool bDebug) const; // Exposed to Python
void setRevealed(TeamTypes eIndex, bool bNewValue); // Exposed to Python
bool getEspionageVisibility(TeamTypes eTeam) const; // Exposed to Python
void setEspionageVisibility(TeamTypes eTeam, bool bVisible, bool bUpdatePlotGroups);
void updateEspionageVisibility(bool bUpdatePlotGroups);
DllExport const CvWString getName(uint uiForm = 0) const; // Exposed to Python
DllExport const wchar* getNameKey() const; // Exposed to Python
void setName(const wchar* szNewValue, bool bFound = false); // Exposed to Python
void doFoundMessage();
// Script data needs to be a narrow string for pickling in Python
std::string getScriptData() const; // Exposed to Python
void setScriptData(std::string szNewValue); // Exposed to Python
int getFreeBonus(BonusTypes eIndex) const; // Exposed to Python
void changeFreeBonus(BonusTypes eIndex, int iChange); // Exposed to Python
int getNumBonuses(BonusTypes eIndex) const; // Exposed to Python
bool hasBonus(BonusTypes eIndex) const; // Exposed to Python
void changeNumBonuses(BonusTypes eIndex, int iChange);
int countUniqueBonuses() const; // advc.149
int getNumCorpProducedBonuses(BonusTypes eIndex) const;
bool isCorporationBonus(BonusTypes eBonus) const;
bool isActiveCorporation(CorporationTypes eCorporation) const;
int getBuildingProduction(BuildingTypes eIndex) const; // Exposed to Python
void setBuildingProduction(BuildingTypes eIndex, int iNewValue); // Exposed to Python
void changeBuildingProduction(BuildingTypes eIndex, int iChange); // Exposed to Python
int getBuildingProductionTime(BuildingTypes eIndex) const; // Exposed to Python
void setBuildingProductionTime(BuildingTypes eIndex, int iNewValue); // Exposed to Python
void changeBuildingProductionTime(BuildingTypes eIndex, int iChange); // Exposed to Python
int getProjectProduction(ProjectTypes eIndex) const; // Exposed to Python
void setProjectProduction(ProjectTypes eIndex, int iNewValue); // Exposed to Python
void changeProjectProduction(ProjectTypes eIndex, int iChange); // Exposed to Python
int getBuildingOriginalOwner(BuildingTypes eIndex) const; // Exposed to Python
int getBuildingOriginalTime(BuildingTypes eIndex) const; // Exposed to Python
int getUnitProduction(UnitTypes eIndex) const; // Exposed to Python
void setUnitProduction(UnitTypes eIndex, int iNewValue); // Exposed to Python
void changeUnitProduction(UnitTypes eIndex, int iChange); // Exposed to Python
int getUnitProductionTime(UnitTypes eIndex) const; // Exposed to Python
void setUnitProductionTime(UnitTypes eIndex, int iNewValue); // Exposed to Python
void changeUnitProductionTime(UnitTypes eIndex, int iChange); // Exposed to Python
int getGreatPeopleUnitRate(UnitTypes eIndex) const; // Exposed to Python
void setGreatPeopleUnitRate(UnitTypes eIndex, int iNewValue);
void changeGreatPeopleUnitRate(UnitTypes eIndex, int iChange);
int getGreatPeopleUnitProgress(UnitTypes eIndex) const; // Exposed to Python
void setGreatPeopleUnitProgress(UnitTypes eIndex, int iNewValue); // Exposed to Python
void changeGreatPeopleUnitProgress(UnitTypes eIndex, int iChange); // Exposed to Python
int getSpecialistCount(SpecialistTypes eIndex) const; // Exposed to Python
void setSpecialistCount(SpecialistTypes eIndex, int iNewValue);
void changeSpecialistCount(SpecialistTypes eIndex, int iChange);
void alterSpecialistCount(SpecialistTypes eIndex, int iChange); // Exposed to Python
int getMaxSpecialistCount(SpecialistTypes eIndex) const; // Exposed to Python
bool isSpecialistValid(SpecialistTypes eIndex, int iExtra = 0) const; // Exposed to Python
void changeMaxSpecialistCount(SpecialistTypes eIndex, int iChange);
int getForceSpecialistCount(SpecialistTypes eIndex) const; // Exposed to Python
bool isSpecialistForced() const; // Exposed to Python
void setForceSpecialistCount(SpecialistTypes eIndex, int iNewValue); // Exposed to Python
void changeForceSpecialistCount(SpecialistTypes eIndex, int iChange); // Exposed to Python
int getFreeSpecialistCount(SpecialistTypes eIndex) const; // Exposed to Python
void setFreeSpecialistCount(SpecialistTypes eIndex, int iNewValue); // Exposed to Python
void changeFreeSpecialistCount(SpecialistTypes eIndex, int iChange); // Exposed to Python
int getAddedFreeSpecialistCount(SpecialistTypes eIndex) const; // Exposed to Python
int getImprovementFreeSpecialists(ImprovementTypes eIndex) const; // Exposed to Python
void changeImprovementFreeSpecialists(ImprovementTypes eIndex, int iChange); // Exposed to Python
int getReligionInfluence(ReligionTypes eIndex) const; // Exposed to Python
void changeReligionInfluence(ReligionTypes eIndex, int iChange); // Exposed to Python
int getCurrentStateReligionHappiness() const; // Exposed to Python
int getStateReligionHappiness(ReligionTypes eIndex) const; // Exposed to Python
void changeStateReligionHappiness(ReligionTypes eIndex, int iChange); // Exposed to Python
int getUnitCombatFreeExperience(UnitCombatTypes eIndex) const; // Exposed to Python
void changeUnitCombatFreeExperience(UnitCombatTypes eIndex, int iChange);
int getFreePromotionCount(PromotionTypes eIndex) const; // Exposed to Python
bool isFreePromotion(PromotionTypes eIndex) const; // Exposed to Python
void changeFreePromotionCount(PromotionTypes eIndex, int iChange);
int getSpecialistFreeExperience() const; // Exposed to Python
void changeSpecialistFreeExperience(int iChange);
int getEspionageDefenseModifier() const; // Exposed to Python
void changeEspionageDefenseModifier(int iChange);
bool isWorkingPlot(int iIndex) const; // Exposed to Python
bool isWorkingPlot(const CvPlot* pPlot) const; // Exposed to Python
void setWorkingPlot(int iIndex, bool bNewValue);
void setWorkingPlot(CvPlot* pPlot, bool bNewValue);
void alterWorkingPlot(int iIndex); // Exposed to Python
int getNumRealBuilding(BuildingTypes eIndex) const; // Exposed to Python
void setNumRealBuilding(BuildingTypes eIndex, int iNewValue); // Exposed to Python
void setNumRealBuildingTimed(BuildingTypes eIndex, int iNewValue, bool bFirst, PlayerTypes eOriginalOwner, int iOriginalTime);
bool isValidBuildingLocation(BuildingTypes eIndex) const;
int getNumFreeBuilding(BuildingTypes eIndex) const; // Exposed to Python
void setNumFreeBuilding(BuildingTypes eIndex, int iNewValue);
bool isHasReligion(ReligionTypes eIndex) const;
void setHasReligion(ReligionTypes eIndex, bool bNewValue, bool bAnnounce, bool bArrows = true,
PlayerTypes eSpreadPlayer = NO_PLAYER); // advc.106e
int getReligionGrip(ReligionTypes eReligion) const; // K-Mod
bool isHasCorporation(CorporationTypes eIndex) const;
void setHasCorporation(CorporationTypes eIndex, bool bNewValue, bool bAnnounce, bool bArrows = true);
CvCity* getTradeCity(int iIndex) const; // Exposed to Python
int getTradeRoutes() const; // Exposed to Python
void clearTradeRoutes();
void updateTradeRoutes();
void clearOrderQueue(); // Exposed to Python
//void pushOrder(OrderTypes eOrder, int iData1, int iData2, bool bSave, bool bPop, bool bAppend, bool bForce = false); // Exposed to Python
// K-Mod. (the old version is still exposed to Python)
void pushOrder(OrderTypes eOrder, int iData1, int iData2 = -1, bool bSave = false, bool bPop = false, int iPosition = 0, bool bForce = false);
void popOrder(int iNum, bool bFinish = false, bool bChoose = false); // Exposed to Python
void startHeadOrder();
void stopHeadOrder();
int getOrderQueueLength(); // Exposed to Python
OrderData* getOrderFromQueue(int iIndex); // Exposed to Python
CLLNode<OrderData>* nextOrderQueueNode(CLLNode<OrderData>* pNode) const;
CLLNode<OrderData>* headOrderQueueNode() const;
DllExport int getNumOrdersQueued() const;
DllExport OrderData getOrderData(int iIndex) const;
// fill the kVisible array with buildings that you want shown in city, as well as the number of generics
// This function is called whenever CvCity::setLayoutDirty() is called
DllExport void getVisibleBuildings(std::list<BuildingTypes>& kVisible, int& iNumGenerics);
// Fill the kEffectNames array with references to effects in the CIV4EffectInfos.xml to have a
// city play a given set of effects. This is called whenever the interface updates the city billboard
// or when the zoom level changes
DllExport void getVisibleEffects(ZoomLevelTypes eCurrentZoom, std::vector<const TCHAR*>& kEffectNames);