[BtS] Dales Combat Mod!

Yes. :)
 
I'll second Dale's answer! I've seen the AI's air units do all five air bombing missions. I'm not sure however if the fighters were actually performing fighter engagement missions or bombing missions (and got intercepted in the process).

Dale is there a way (eventually) to add some kind of AIweight tag to the missions to help the AI organized them a little better? Right now, it tends to scatter its efforts, willy-nilly using any of the five bombing missions against the same target. It would be more effective if it could pick one bombing strategy and apply it during at least a single turn.

Yeah, yeah... wishful thinking. :lol:

Out of curiosity, does it make any difference sending bombers one by one or as a stack as regards Civ4 interception mechanics?
 
I find, that this mod dont correctly work with :
; Modular XML Loading
ModularLoading = 1

Correctly works only with:
; Modular XML Loading
ModularLoading = 0

Dale
Have you any ideas how to fix it?
 
Could it be possible to get a MP version of your mod?
 
If you make a server to "Internet games" other players can't see it. :sad:
 
Hi Dale

This is from CvUnit.cpp:

Code:
if(bNoTarget)
			{
				[B]if(pCity->getPopulation() > 1)[/B]
				{
					if(GC.getGameINLINE().getSorenRandNum(5, "Airbomb population") < 2)
					{
						pCity->changePopulation(-1);
						szBuffer = gDLL->getText("TXT_KEY_MISC_YOU_AIRBOMB_POP");
						gDLL->getInterfaceIFace()->addMessage(getOwnerINLINE(), true, GC.getDefineINT("EVENT_MESSAGE_TIME"), szBuffer, "AS2D_BOMBARD", MESSAGE_TYPE_INFO, NULL, (ColorTypes)GC.getInfoTypeForString("COLOR_GREEN"), pCity->getX_INLINE(), pCity->getY_INLINE(), true, true);
						szBuffer = gDLL->getText("TXT_KEY_MISC_ENEMY_AIRBOMB_POP");
						gDLL->getInterfaceIFace()->addMessage(pCity->getOwnerINLINE(), false, GC.getDefineINT("EVENT_MESSAGE_TIME"), szBuffer, "AS2D_BOMBARDED", MESSAGE_TYPE_INFO, GC.getUnitInfo(getUnitType()).getButton(), (ColorTypes)GC.getInfoTypeForString("COLOR_RED"), pCity->getX_INLINE(), pCity->getY_INLINE(), true, true);
					}

If I want to change the code so that cities can't get bombed below, say, a population of 8, is this where I change that?
 
If the suggestion has already been raised, then please accept my apologies. I also think that I have read somewhere that it was Dale's intent to make defensive artillery as uber as they are. However, let me raise an issue that stems from a current game of mine.

Let me set it up for you. Me(Julius Ceasar) vs. Sitting Bull.
  • My army: 4 Praetorians, each promoted with a CR of 1 or 2, 4 Axemen, each promoted with CR 2 or 3, On Axeman with a CS 1 promo, 8 archers all with CS 1, and some with Drill 1 also, 4 Catapults with CR 1, and 2 Chariots with CS 1.
  • Sitting Bull's Capital: 4 Archers, with CG 1, and Drill 1, and I believe that 2 had CS 1. He also had 2 Spearmen with CS 1, 1 Swordsman with CS 2, and 2 Dog Soldiers with CS 2.

    Round 1: I moved to a forested hill near his capital. He Barrages my stack, ok, my top ranked Praetorian takes a hit.
    Round 2: My catapults lower the defenses to 8%. My archers Barrage his defenders, some are hit, but not nearly with the impact that my Praetorian suffered from one of his archers hitting him.
    Round 3: I am barraged again. I have one Praetorian at 6.8 (after two hits), and another Praetorian around 7.2 from one hit. I have on Catapult take his defenses down to 0%. Then I barrage with my archers. After 8 hits over two rounds from 8 Archers, I have only managed to take two his Archers down to 2.4 from 3. Out of frustration, I commence my assault. First in go my Catapults, this works as normal, and I actually get lucky as each of the three come back after withdrawing from the assault. However, one of his archers (maybe all of them?) got a free barage on my stack every time I attacked?
    Keep in mind, I was not using a Stack Attack at the time, trying to maximize the benefit of the collateral damage from the Catapults...Well, then I started attacking with my Axemen, as they had a slightly better chance against the Dog Soldiers than my Praetorians...well, I lost 3 of my CR Axemen...and only took out one of his Dog Soldiers in the process. (Now, here's where I may have made a mystake...I was not Stack Attacking, because I am still not sure what the mechanics of the Stack Attack are), so I got Barraged 4 times by at least one archer over the course of the 4 Axemen attacks. I now have a severely wounded Praetorian (around 3.2?) and another around 5.6?

    So, I'm still facing a Swordsman, an almost dead Dog Soldier, and 4 archers, and 2 Spearmen...I start in with my Praetorians, and lose a CR 2 Praet to a Swordsmen...and then take out two Archers with the remaining Praetorians. I have one Axemen, two chariots left with sufficient strength to assault his armies...I lose all of them...

    Is this a case of the worst luck ever or me not understanding the mechanics of DCM? Do defending archers get a free barrage attack every time you attack their stack? Is this a little over-powering? Am I supposed to be sending in all of my units at once every time?

    Long story short, I went into World Builder to see how large of a force I would need to take out a similar city in the future this quickly (in two rounds). I found that I needed 8 Praetorians with CR 2 promos, and 10 Archers (promos didn't matter for barrage tactics), and 6 Catapults with CR 1. The Axemen stayed the same in my experiment, and I kept the Chariots out of it. Using the same tactics as before, I was still left with 4 badly bruised Praetorians, no chariots, one Axeman, all the Archers and all of my Catapults.

    Those are some pretty serious casualties my friends! DCM really brings the defensive advantage home and raises it to new hights! I'm used to bringing 2-1 odds to a fight, but now, it seems like you need 3 or 4 to one odds.

    Does this experience mirror your results? Keep in mind that Catapults and Praetorians were my most advance units.
 
Hi Dale

This is from CvUnit.cpp:

Code:
if(bNoTarget)
			{
				[B]if(pCity->getPopulation() > 1)[/B]
				{
					if(GC.getGameINLINE().getSorenRandNum(5, "Airbomb population") < 2)
					{
						pCity->changePopulation(-1);
						szBuffer = gDLL->getText("TXT_KEY_MISC_YOU_AIRBOMB_POP");
						gDLL->getInterfaceIFace()->addMessage(getOwnerINLINE(), true, GC.getDefineINT("EVENT_MESSAGE_TIME"), szBuffer, "AS2D_BOMBARD", MESSAGE_TYPE_INFO, NULL, (ColorTypes)GC.getInfoTypeForString("COLOR_GREEN"), pCity->getX_INLINE(), pCity->getY_INLINE(), true, true);
						szBuffer = gDLL->getText("TXT_KEY_MISC_ENEMY_AIRBOMB_POP");
						gDLL->getInterfaceIFace()->addMessage(pCity->getOwnerINLINE(), false, GC.getDefineINT("EVENT_MESSAGE_TIME"), szBuffer, "AS2D_BOMBARDED", MESSAGE_TYPE_INFO, GC.getUnitInfo(getUnitType()).getButton(), (ColorTypes)GC.getInfoTypeForString("COLOR_RED"), pCity->getX_INLINE(), pCity->getY_INLINE(), true, true);
					}

If I want to change the code so that cities can't get bombed below, say, a population of 8, is this where I change that?
I would probably add an extra if statement right before "pCity->changePopulation(-1);"

Code:
if(pCity->getPopulation() > 1)[/B]
				{
					if(GC.getGameINLINE().getSorenRandNum(5, "Airbomb population") < 2)
					{
						if(pCity->getPopulation() > 8)
						{
							pCity->changePopulation(-1);
							szBuffer = gDLL->getText("TXT_KEY_MISC_YOU_AIRBOMB_POP");
							gDLL->getInterfaceIFace()->addMessage(getOwnerINLINE(), true, GC.getDefineINT("EVENT_MESSAGE_TIME"), szBuffer, "AS2D_BOMBARD", MESSAGE_TYPE_INFO, NULL, (ColorTypes)GC.getInfoTypeForString("COLOR_GREEN"), pCity->getX_INLINE(), pCity->getY_INLINE(), true, true);
							szBuffer = gDLL->getText("TXT_KEY_MISC_ENEMY_AIRBOMB_POP");
							gDLL->getInterfaceIFace()->addMessage(pCity->getOwnerINLINE(), false, GC.getDefineINT("EVENT_MESSAGE_TIME"), szBuffer, "AS2D_BOMBARDED", MESSAGE_TYPE_INFO, GC.getUnitInfo(getUnitType()).getButton(), (ColorTypes)GC.getInfoTypeForString("COLOR_RED"), pCity->getX_INLINE(), pCity->getY_INLINE(), true, true);
						}
					}
Anyone want to verify this?
 
I would probably add an extra if statement right before "pCity->changePopulation(-1);"

Code:
if(pCity->getPopulation() > 1)[/B]
				{
					if(GC.getGameINLINE().getSorenRandNum(5, "Airbomb population") < 2)
					{
						if(pCity->getPopulation() > 1)
						{
							pCity->changePopulation(-1);
							szBuffer = gDLL->getText("TXT_KEY_MISC_YOU_AIRBOMB_POP");
							gDLL->getInterfaceIFace()->addMessage(getOwnerINLINE(), true, GC.getDefineINT("EVENT_MESSAGE_TIME"), szBuffer, "AS2D_BOMBARD", MESSAGE_TYPE_INFO, NULL, (ColorTypes)GC.getInfoTypeForString("COLOR_GREEN"), pCity->getX_INLINE(), pCity->getY_INLINE(), true, true);
							szBuffer = gDLL->getText("TXT_KEY_MISC_ENEMY_AIRBOMB_POP");
							gDLL->getInterfaceIFace()->addMessage(pCity->getOwnerINLINE(), false, GC.getDefineINT("EVENT_MESSAGE_TIME"), szBuffer, "AS2D_BOMBARDED", MESSAGE_TYPE_INFO, GC.getUnitInfo(getUnitType()).getButton(), (ColorTypes)GC.getInfoTypeForString("COLOR_RED"), pCity->getX_INLINE(), pCity->getY_INLINE(), true, true);
						}
					}
Anyone want to verify this?

You don't need the if statement you added. It does the exact same thing on the same variable which hasn't changed.
 
So... would that be a 'yea' or 'nay' to my question? :)
 
Woops, I meant to change my added statement to "8" and not leave it as "1".
Anyway, care to give a stab at my question?

Open CvEventManager.py and find onGameStart and modify to be the following:

Code:
	def onGameStart(self, argsList):
		'Called at the start of the game'
##### DCM Status Popup START
#                for iPlayer in range(gc.getMAX_PLAYERS()):
#                        player = gc.getPlayer(iPlayer)
#                        if (player.isAlive() and player.isHuman()):
#                                self.DisplayDCMStatus()
##### DCM Status Popup END
 
Open CvEventManager.py and find onGameStart and modify to be the following:

Code:
	def onGameStart(self, argsList):
		'Called at the start of the game'
##### DCM Status Popup START
#                for iPlayer in range(gc.getMAX_PLAYERS()):
#                        player = gc.getPlayer(iPlayer)
#                        if (player.isAlive() and player.isHuman()):
#                                self.DisplayDCMStatus()
##### DCM Status Popup END
I think you misunderstand what I want to do. That's what is in your CvEventManager.py by default. I want to keep the "4000 BC" popup, but remove the popup that tells what Dale's Combat Mod features are enabled.
 
I think you misunderstand what I want to do. That's what is in your CvEventManager.py by default. I want to keep the "4000 BC" popup, but remove the popup that tells what Dale's Combat Mod features are enabled.


He's telling you what you need to do. Note the added "#"s. They will comment out the code that makes the popup, hereby removing it.

Cheers,
ripple01
 
Back
Top Bottom