Jump to content


Photo

Skirmish AI 3.0 Beta 5 - Post Comments In Thread!


27 replies to this topic

#1 ArkhanTheBlack

ArkhanTheBlack

    title available

  • Members
  • 814 posts

Posted 02 April 2008 - 08:55 PM

Changes:

- Fixed at least one Necron crash bug (not sure if it's enough)

- Added SM and Chaos T2 Infantry strategies

- Lots of stuff fixed from smokeskins list

- Adressed some problems with attack movement (not sure if it works 100%)

- Adressed some problems with CheckForDeath dancing (They stop running when there's no threat anymore)

- Reduced harassing army strength limit a bit

- Armouries built earlier and upgrades are more reliably built

- Increased capture plans to three again but all capture plans > 1 will end themselves after 2 min. This should increase capturing speed without forfeiting harassing strength.

- Delayed some T2 SM and CSM researches, so they don't block the sacrifical circle and the sacred artifact so early

- AI's attack superior opponents if army strength > 2500 instead of army strength > 3000 and retreat when army strength < 1500 instead of army strength < 2000. This should make them more aggressive.

- Other changes I can't remember at the moment...


Remark:
I'd like to set a feature stop now since I slowly want to come to an end. So, only bug fixes and five minute changes. No complex code changes anymore.


@Zenoth
Please activate the AI traces in the utility.ai file again and try to play the broken lands map. I'm interested if the game still crashes against Necrons. So, if you get a crash, please post the AI traces again. I've included some more crash checks in the AI traces, so we should get some more info IF it crashes again.

#2 Zenoth

Zenoth

    title available

  • Members
  • 469 posts

Posted 02 April 2008 - 09:33 PM

@Zenoth
Please activate the AI traces in the utility.ai file again and try to play the broken lands map. I'm interested if the game still crashes against Necrons. So, if you get a crash, please post the AI traces again. I've included some more crash checks in the AI traces, so we should get some more info IF it crashes again.


Roger that Arkhan, will do :rolleyes:

That new build certainly sounds like it'll be the best so far, very nice changes, especially the armies strength changes which I believe should not only result in the A.I being more aggressive but overall should result in less gathering behavior right? Well at least gathering but less longer? If that's the case then all I can say is Yay! :ohmy:

#3 LarkinVB

LarkinVB

    title available

  • Members
  • 1,488 posts

Posted 02 April 2008 - 09:45 PM

Is this code in MoveToDisengage() causing the non-jump AI to retreat to next building instead of dancing a short distance ? My original check was checking for a building within mind and maxd, not just for any building. The original dancing code was usually doing the fallback to self.squad_ai:DoMoveToClosestSafePoint(self.safe_point, self.tolerance) if MoveToDisengage() will return false (no position found). Now they will retreat to nearest buildings most of the time, even travelling very great distances.

MoveToDisengage() was once designed just for dancing short distances . Now it is used on different occasions too (retreat tactics). I think it should be splitt up into MoveToDance() and MoveToRetreat() with different distance checks.


if (move_pos == nil) then
	
		-- Get closest strat to retreat
		local vBasePos = cpu_manager:FindClosestFriendlyBaseOrStrategicPoint(squad_pos, cpu_manager.start_pos, true, false)
		if (vBasePos ~= nil) then
			move_pos = Vector3f(vBasePos)
		end
	end


#4 ArkhanTheBlack

ArkhanTheBlack

    title available

  • Members
  • 814 posts

Posted 02 April 2008 - 10:18 PM

Is this code in MoveToDisengage() causing the non-jump AI to retreat to next building instead of dancing a short distance ? My original check was checking for a building within mind and maxd, not just for any building. The original dancing code was usually doing the fallback to self.squad_ai:DoMoveToClosestSafePoint(self.safe_point, self.tolerance) if MoveToDisengage() will return false (no position found). Now they will retreat to nearest buildings most of the time, even travelling very great distances.

MoveToDisengage() was once designed just for dancing short distances . Now it is used on different occasions too (retreat tactics). I think it should be splitt up into MoveToDance() and MoveToRetreat() with different distance checks.

The building only gives the direction. They won't run the full distance if they are not followed. The problem of squads dancing the full distance was the CheckForDeath() code. This code just checked the state of the squad and not for a real threat. Therefore if a squad went into a critical condition, it started to run, and run, and run... until the 'critical condition' was over. Now they will check for a real threat of they won't run. The 'real' dancing code vs melee squads should never have been a problem. If they are not followed, they turn and attack again.

#5 LarkinVB

LarkinVB

    title available

  • Members
  • 1,488 posts

Posted 02 April 2008 - 10:43 PM

The 'real' dancing code vs melee squads should never have been a problem. If they are not followed, they turn and attack again.


I just checked. Guardians vs Big Mek in 1vs1. They did run a very long distance (60+) before turning and he didn't follow at all. I won't call that dancing. I think cpu_manager:FindClosestFriendlyBaseOrStrategicPoint() should get a min/max check and self.squad_ai:DoMoveToClosestSafePoint(self.safe_point, self.tolerance) should do the job if it fails to find a building. If you fear them running into defenses add a check and increase max distance.

#6 ThetaOrion

ThetaOrion

    title available

  • Members
  • 676 posts

Posted 02 April 2008 - 11:03 PM

- Delayed some T2 SM and CSM researches, so they don't block the sacrifical circle and the sacred artifact so early


--

I imagined that to mean earlier production of the Sacred Artifact.

I have been playing the Sisters a lot recently, and I noticed that they are quite similar to the Space Marines.

The Sisters have a Pristine Sanctuary that you want to get made about the same time that the Armory is being made for the Space Marines.

And, the Sisters have another building that's called the Holy Reliquary, and you want that to be made about the same time that the Space Marines make their Sacred Artifact building.

The Holy Reliquary allows you to research those 'angels of light' on the top right, and the Cannoness can then call down angels of light from heaven (they look like bright yellow butterflies), and those angels of light really tear through the Dais of Destruction and buildings for the brief while that they are around.

The Sisters are growing on me, finally, although the toughest game I have ever had I had with them during the campaign. The DE were attacking both my Sister bases, yet, I rethought my strategy and was able to hold my own for an hour, and then I finally got my break.

The Sisters seem to be noticeably harder to win as. But, I found out that the Sisters are pretty good for turtling.

The thing with the sisters when the Dark Elder start with two bases and you only start with one, and the Dark Eldar cover half the map like locusts, is that you have to have a good defense. I found that by making sure I build multiple strongholds, it allows you to build more turrets as the Sisters. Turrets are essential for keeping the Sisters alive, and you get to build more turrets the more strongholds you build. And, eventually around your half of the map, around your strongholds, you can build up a wall of turrets that will keep the enemy at bay, because the Sister turrets seem to have greater range and they work together on one target much of the time. Really cool the way the Sister turrets work, actually!

Of course, beyond a certain point in the game, the enemy no longer fights for strategic points on your side of the map, so make sure you get those up, and then build Strongholds and turrets as fast as you can and eventually everything the DE throw at you dies; and the DE AI does seem to be fixated on taking down your strongholds, so you know where they are going to be. Put your Sister turrets, about six of them between your strongholds and the incoming enemy. Then, like I said, eventually you get your chance.

If I play with it long enough, I eventually figure out how to get the win, even as the Sisters.

#7 ArkhanTheBlack

ArkhanTheBlack

    title available

  • Members
  • 814 posts

Posted 02 April 2008 - 11:37 PM

I just checked. Guardians vs Big Mek in 1vs1. They did run a very long distance (60+) before turning and he didn't follow at all. I won't call that dancing. I think cpu_manager:FindClosestFriendlyBaseOrStrategicPoint() should get a min/max check and self.squad_ai:DoMoveToClosestSafePoint(self.safe_point, self.tolerance) should do the job if it fails to find a building. If you fear them running into defenses add a check and increase max distance.

If they were still running away although the dread wasn't following then it wasn't the dancing code. Depending on the time, it could have been the harassing code sending them back, the attack / defense code initializing a retreat, or a gather move.
I've seen the dancing code working correctly today. A dreadnought charged a CSM squad but got killed by surrounding horrors. The CSM just retreated about 20 until the dreadnought died, turned and attacked again. THAT was the dancing code.
Therefore a dancing check would be useless because the dancing code was not the cause. And if you don't believe me, just have a look at the dancing check:

-- Ranged squads stationary and in combat can try to dance
local bCheckDance = (self.squad_ai:IsRanged() and self.squad_ai:IsInCombat() and
not self.squad_ai:IsBroken() and not self.squad_ai:IsInStateMove())

-- Don't leave if we are in state of disengage
if (self.stateID ~= Tactic.StateID.DoDance and not bCheckDance) then
self.m_iDancing = 0
return false
end

-- Get squad position
local vSquadPos = self.squad_ai:GetPosition()

-- Set scan range
local iScanRange = 10
if (self:IsCommander()) then
iScanRange = 15
elseif (self.squad_ai:CanJump()) then
iScanRange = 5
end

-- Check for a close unit
local oEnemyUnit = cpu_manager.cpu_player:FindFirstEnemy(vSquadPos, iScanRange, 1)
if (oEnemyUnit == nil) then
self.m_iDancing = 0
return false
end


The section marked with "-- Check for a close unit" checks for a close unit. If there's no enemy unit around, it will switch off dancing. Further, all function returns before this part also switch off dancing. Therefore this check can't be avoided.

It was indeed different in the CheckForDeath() dancing part where I had to add the threat check.


If I play with it long enough, I eventually figure out how to get the win, even as the Sisters.

I think their main weakness are vehicles. Maybe you try more celestian squads, it made a huge difference for the AI.

#8 thudo

thudo

    Wacko AI Guy!

  • Division Leaders
  • 12,164 posts
  • Location:Lemonville North, Canada
  • Projects:DoW AI Scripting Project
  • Division:DoW
  • Job:Division Leader

Posted 03 April 2008 - 02:46 AM

Build is up for the testers!
Advanced Skirmish AI Team Lead for the coolest Warhammer40k PC RTS out there:

Dawn of War Advanced AI Headquarters

Latest DoW Advanced AI Download!

#9 Zenoth

Zenoth

    title available

  • Members
  • 469 posts

Posted 03 April 2008 - 04:03 AM

@ Arkhan

I wanted to bring you better news but alas, yes it crashed again. Same settings as you probably know them by heart now, but I'll repeat them just in case: Me as Eldar in Campaign, playing Hard difficulty, against Necrons on Broken Lands.

Here, the last 200 lines for 1001aitrace...

AI1001 12:01	DefendStrategy
AI1001 12:01	   DefendStrategy: Update...
AI1001 12:01	   DefendStrategy: CalculateNewChokepoint...
AI1001 12:01	   DefendStrategy: Check allies...
AI1001 12:01	   DefendStrategy: Get post threat...
AI1001 12:01	DefendStrategy
AI1001 12:01	CpuManager: Update plans...
AI1001 12:01	ResourcePlan: ObtainFlagAndBuilder...
AI1001 12:01	ResourcePlan: Can't find strategic point to build a post on
AI1001 12:01	CapturePlan: Free ressources...
AI1001 12:01	CapturePlan: Find free strategic point...
AI1001 12:01	ResourcePlan: Update...
AI1001 12:01	ResourcePlan: BuildingListeningPost...
AI1001 12:01	ResourcePlan: Update...
AI1001 12:01	BuildBuildingPlan: Update building plan for necron_plasma_generator
AI1001 12:01	BuildBuildingPlan: Building State...
AI1001 12:01	BuildPlan: Currently building a necron_plasma_generator
AI1001 12:01	BuildPlan: Currently building a addon_necron_hq_1
AI1001 12:01	BuildPlan: Update...
AI1001 12:01	BuildPlan: Building completed! End build plan for necron_tomb_spyder_squad
AI1001 12:01	can't build addon_necron_hq_2
AI1001 12:01	this race does not have an addon notify!
AI1001 12:01	AttackPlan: Obtain forces...
AI1001 12:01	AttackPlan: Required: 1500
AI1001 12:01	AttackPlan: Already obtained: 3141.5419921875
AI1001 12:01	Attackplan: Update...
AI1001 12:01	Attackplan: Remove Losses...
AI1001 12:01	AttackPlan: Attacking...
AI1001 12:01	DefendChokePointPlan: Defending...
AI1001 12:01	DefendChokePointPlan: Check harassing mode...
AI1001 12:01	DefendChokePointPlan: Protect choke point!
AI1001 12:01 CpuManager: End AI Think
AI1001 12:01 AI Difficulty Setting
AI1001 12:01	2
AI1001 12:01 
AI1001 12:02 CpuManager: Starting AI Think
AI1001 12:02	Req: 0 | Pow: 376.25677490234 | Pop: 0
AI1001 12:02	CpuManager: Critical range   = 100.84146118164
AI1001 12:02	CpuManager: Critical threat  = 0
AI1001 12:02	CpuManager: Critical support = 54.534225463867
AI1001 12:02	CpuManager: Update unit tactics...
AI1001 12:02	   Tactic: Update necron_lord_squad...
AI1001 12:02	   Tactic: Update necron_destroyer_squad...
AI1001 12:02	   Tactic: Update necron_flayed_one_squad...
AI1001 12:02	   Tactic: Update necron_tomb_spyder_squad...
AI1001 12:02	   Tactic: Update necron_tomb_spyder_squad...
AI1001 12:02	   Tactic: Update necron_immortal_squad...
AI1001 12:02	   Tactic: Update necron_basic_warrior_squad...
AI1001 12:02	   Tactic: Update necron_basic_warrior_squad...
AI1001 12:02	   Tactic: Update necron_basic_warrior_squad...
AI1001 12:02	   Tactic: Update necron_wraith_squad...
AI1001 12:02	   Current repair target = 94, 206
AI1001 12:02	   Tactic: Update necron_builder_scarab_squad...
AI1001 12:02	   HoldState
AI1001 12:02	   Move Engineer to 34, 126
AI1001 12:02	   Tactic: Update necron_builder_scarab_squad...
AI1001 12:02	   Tactic: Update necron_builder_scarab_squad...
AI1001 12:02	   Tactic: Update necron_builder_scarab_squad...
AI1001 12:02	   EngineerTactic: Repairing vehicle...
AI1001 12:02	   Tactic: Update necron_builder_scarab_squad...
AI1001 12:02	CpuManager: Update unit tactics...
AI1001 12:02	CpuManager: Update building tactics...
AI1001 12:02	CpuManager: Update unit tactics...
AI1001 12:02 CpuManager: End AI Think
AI1001 12:02 AI Difficulty Setting
AI1001 12:02	2
AI1001 12:02 
AI1001 12:03 CpuManager: Starting AI Think
AI1001 12:03	Req: 0 | Pow: 389.75677490234 | Pop: 0
AI1001 12:03	CpuManager: Critical range   = 100.84146118164
AI1001 12:03	CpuManager: Critical threat  = 0
AI1001 12:03	CpuManager: Critical support = 54.679149627686
AI1001 12:03	CpuManager: Update strategies...
AI1001 12:03	DesignerStrategy
AI1001 12:03	DesignerStrategy
AI1001 12:03	BuildBaseStrategy
AI1001 12:03	   BuildBaseStrategy: Update...
AI1001 12:03	   BuildController: Compute build program...
AI1001 12:03	   BuildController: Current tier = 2
AI1001 12:03	   BuildController: Current army strength = 3197.6499023438
AI1001 12:03	   BuildController: Restrict reinforcing and unit building!
AI1001 12:03	   BuildController: Check generators...
AI1001 12:03	   BuildController: Finish buildings...
AI1001 12:03	   BuildController: Building units...
AI1001 12:03	   BuildController: No ressources for units available
AI1001 12:03	   BuildController: Compute offensive stance...
AI1001 12:03	   Find common enemy player...
AI1001 12:03	BuildBaseStrategy
AI1001 12:03	AttackStrategy
AI1001 12:03	AttackStrategy
AI1001 12:03	DefendStrategy
AI1001 12:03	   DefendStrategy: Update...
AI1001 12:03	   DefendStrategy: CalculateNewChokepoint...
AI1001 12:03	   DefendStrategy: Check allies...
AI1001 12:03	   DefendStrategy: Get post threat...
AI1001 12:03	DefendStrategy
AI1001 12:03	CpuManager: Update plans...
AI1001 12:03	CapturePlan: Free ressources...
AI1001 12:03	CapturePlan: Find free strategic point...
AI1001 12:03	ResourcePlan: Update...
AI1001 12:03	ResourcePlan: BuildingListeningPost...
AI1001 12:03	ResourcePlan: Update...
AI1001 12:03	BuildBuildingPlan: Update building plan for necron_plasma_generator
AI1001 12:03	BuildBuildingPlan: Building State...
AI1001 12:03	BuildPlan: Currently building a necron_plasma_generator
AI1001 12:03	BuildPlan: Currently building a addon_necron_hq_1
AI1001 12:03	can't build addon_necron_hq_2
AI1001 12:03	BuildPlan: Currently building a addon_necron_list_post_2
AI1001 12:03	AttackPlan: Obtain forces...
AI1001 12:03	AttackPlan: Required: 1500
AI1001 12:03	AttackPlan: Already obtained: 3492.494140625
AI1001 12:03	Attackplan: Update...
AI1001 12:03	Attackplan: Remove Losses...
AI1001 12:03	AttackPlan: Attacking...
AI1001 12:03	DefendChokePointPlan: Defending...
AI1001 12:03	DefendChokePointPlan: Check harassing mode...
AI1001 12:03	DefendChokePointPlan: Protect choke point!
AI1001 12:03 CpuManager: End AI Think
AI1001 12:03 AI Difficulty Setting
AI1001 12:03	2
AI1001 12:03 
AI1001 12:04 CpuManager: Starting AI Think
AI1001 12:04	Req: 0 | Pow: 403.25677490234 | Pop: 0
AI1001 12:04	CpuManager: Critical range   = 100.84146118164
AI1001 12:04	CpuManager: Critical threat  = 0
AI1001 12:04	CpuManager: Critical support = 54.824066162109
AI1001 12:04	CpuManager: Update unit tactics...
AI1001 12:04	   Tactic: Update necron_lord_squad...
AI1001 12:04	   Tactic: Update necron_destroyer_squad...
AI1001 12:04	   Tactic: Update necron_flayed_one_squad...
AI1001 12:04	   Tactic: Update necron_tomb_spyder_squad...
AI1001 12:04	   Tactic: Update necron_tomb_spyder_squad...
AI1001 12:04	   Tactic: Update necron_immortal_squad...
AI1001 12:04	   Tactic: Update necron_basic_warrior_squad...
AI1001 12:04	   Tactic: Update necron_basic_warrior_squad...
AI1001 12:04	   Tactic: Update necron_basic_warrior_squad...
AI1001 12:04	   Crash check 5
AI1001 12:04	   Crash check 7
AI1001 12:04	   Tactic: Update necron_wraith_squad...
AI1001 12:04	   Current repair target = 94, 206
AI1001 12:04	   Tactic: Update necron_builder_scarab_squad...
AI1001 12:04	   EngineerTactic: Repairing vehicle...
AI1001 12:04	   Tactic: Update necron_builder_scarab_squad...
AI1001 12:04	   Tactic: Update necron_builder_scarab_squad...
AI1001 12:04	   Tactic: Update necron_builder_scarab_squad...
AI1001 12:04	   HoldState
AI1001 12:04	   Move Engineer to 34, 126
AI1001 12:04	   Tactic: Update necron_builder_scarab_squad...
AI1001 12:04	CpuManager: Update unit tactics...
AI1001 12:04	CpuManager: Update building tactics...
AI1001 12:04	CpuManager: Update unit tactics...
AI1001 12:04 CpuManager: End AI Think
AI1001 12:04 AI Difficulty Setting
AI1001 12:04	2
AI1001 12:04 
AI1001 12:05 CpuManager: Starting AI Think
AI1001 12:05	Req: 0 | Pow: 416.75677490234 | Pop: 0
AI1001 12:05	CpuManager: Critical range   = 100.84146118164
AI1001 12:05	CpuManager: Critical threat  = 0
AI1001 12:05	CpuManager: Critical support = 54.968990325928
AI1001 12:05	CpuManager: Update strategies...
AI1001 12:05	DesignerStrategy
AI1001 12:05	DesignerStrategy
AI1001 12:05	BuildBaseStrategy
AI1001 12:05	   BuildBaseStrategy: Update...
AI1001 12:05	   BuildController: Compute build program...
AI1001 12:05	   BuildController: Current tier = 2
AI1001 12:05	   BuildController: Current army strength = 3198.8920898438
AI1001 12:05	   BuildController: Restrict reinforcing and unit building!
AI1001 12:05	   BuildController: Building units...
AI1001 12:05	   BuildController: No ressources for units available
AI1001 12:05	   BuildController: Compute offensive stance...
AI1001 12:05	   Find common enemy player...
AI1001 12:05	BuildBaseStrategy
AI1001 12:05	AttackStrategy
AI1001 12:05	AttackStrategy
AI1001 12:05	DefendStrategy
AI1001 12:05	   DefendStrategy: Update...
AI1001 12:05	   DefendStrategy: CalculateNewChokepoint...
AI1001 12:05	   DefendStrategy: Check allies...
AI1001 12:05	   DefendStrategy: Get post threat...
AI1001 12:05	DefendStrategy
AI1001 12:05	CpuManager: Update plans...
AI1001 12:05	CapturePlan: Free ressources...
AI1001 12:05	CapturePlan: Find free strategic point...
AI1001 12:05	ResourcePlan: Update...
AI1001 12:05	ResourcePlan: BuildingListeningPost...
AI1001 12:05	ResourcePlan: Update...
AI1001 12:05	BuildBuildingPlan: Update building plan for necron_plasma_generator
AI1001 12:05	BuildBuildingPlan: Building State...
AI1001 12:05	BuildPlan: Currently building a necron_plasma_generator
AI1001 12:05	BuildPlan: Currently building a addon_necron_hq_1
AI1001 12:05	BuildPlan: Currently building a addon_necron_list_post_2
AI1001 12:05	AttackPlan: Obtain forces...
AI1001 12:05	AttackPlan: Required: 1500
AI1001 12:05	AttackPlan: Already obtained: 3493.4467773438
AI1001 12:05	Attackplan: Update...
AI1001 12:05	Attackplan: Remove Losses...
AI1001 12:05	AttackPlan: Attacking...
AI1001 12:05	DefendChokePointPlan: Defending...
AI1001 12:05	DefendChokePointPlan: Check harassing mode...
AI1001 12:05	DefendChokePointPlan: Protect choke point!
AI1001 12:05 CpuManager: End AI Think
AI1001 12:05 AI Difficulty Setting
AI1001 12:05	2
AI1001 12:05

And the last 200 lines for 1002aitrace...

AI1002 12:00	DesignerStrategy
AI1002 12:00	DesignerStrategy
AI1002 12:00	BuildBaseStrategy
AI1002 12:00	   BuildBaseStrategy: Update...
AI1002 12:00	   BuildController: Compute build program...
AI1002 12:00	   BuildController: Current tier = 2
AI1002 12:00	   BuildController: Current army strength = 1522.1990966797
AI1002 12:00	   BuildController: Force teching!!!
AI1002 12:00	   BuildController: Restrict reinforcing and unit building!
AI1002 12:00	   BuildController: Building units...
AI1002 12:00	   BuildController: No ressources for units available
AI1002 12:00	   BuildController: Compute offensive stance...
AI1002 12:00	   Find common enemy player...
AI1002 12:00	BuildBaseStrategy
AI1002 12:00	AttackStrategy
AI1002 12:00	   AttackStrategy: Update...
AI1002 12:00	   AttackStrategy: Update strategic objective...
AI1002 12:00	   AttackStrategy: Check for allies in need...
AI1002 12:00	   AttackStrategy: Check attack situation...
AI1002 12:00	   AttackStrategy: Check Success...
AI1002 12:00	AttackStrategy
AI1002 12:00	DefendStrategy
AI1002 12:00	   DefendStrategy: Update...
AI1002 12:00	   DefendStrategy: CalculateNewChokepoint...
AI1002 12:00	   DefendStrategy: Check allies...
AI1002 12:00	   DefendStrategy: Get post threat...
AI1002 12:00	DefendStrategy
AI1002 12:00	CpuManager: Update plans...
AI1002 12:00	ResourcePlan: ObtainFlagAndBuilder...
AI1002 12:00	ResourcePlan: Can't find strategic point to build a post on
AI1002 12:00	ResourcePlan: ObtainFlagAndBuilder...
AI1002 12:00	ResourcePlan: Can't find strategic point to build a post on
AI1002 12:00	CapturePlan: Free ressources...
AI1002 12:00	CapturePlan: Find free strategic point...
AI1002 12:00	ResourcePlan: Update...
AI1002 12:00	ResourcePlan: Update...
AI1002 12:00	BuildPlan: Currently building a addon_necron_list_post_1
AI1002 12:00	AttackPlan: Obtain forces...
AI1002 12:00	AttackPlan: Required: 1500
AI1002 12:00	AttackPlan: Already obtained: 1522.1990966797
AI1002 12:00	Attackplan: Update...
AI1002 12:00	Attackplan: Remove Losses...
AI1002 12:00	AttackPlan: Attacking...
AI1002 12:00	DefendChokePointPlan: Defending...
AI1002 12:00	DefendChokePointPlan: Check harassing mode...
AI1002 12:00	DefendChokePointPlan: Protect choke point!
AI1002 12:00 CpuManager: End AI Think
AI1002 12:00 AI Difficulty Setting
AI1002 12:00	0
AI1002 12:00 
AI1002 12:01 CpuManager: Starting AI Think
AI1002 12:01	Req: 0 | Pow: 65.490676879883 | Pop: 0
AI1002 12:01	CpuManager: Critical range   = 102.08329772949
AI1002 12:01	CpuManager: Critical threat  = 0
AI1002 12:01	CpuManager: Critical support = 0
AI1002 12:01	CpuManager: Update unit tactics...
AI1002 12:01	   Tactic: Update necron_lord_squad...
AI1002 12:01	   Tactic: Update necron_basic_warrior_squad...
AI1002 12:01	   Tactic: Update necron_basic_warrior_squad...
AI1002 12:01	   Tactic: Update necron_basic_warrior_squad...
AI1002 12:01	   Tactic: Update necron_wraith_squad...
AI1002 12:01	   Tactic: Update necron_builder_scarab_squad...
AI1002 12:01	   EngineerTactic: Return to home base
AI1002 12:01	   Move Engineer to -84, 206
AI1002 12:01	   Tactic: Update necron_builder_scarab_squad...
AI1002 12:01	   HoldState
AI1002 12:01	   Move Engineer to -32, 128
AI1002 12:01	   Tactic: Update necron_builder_scarab_squad...
AI1002 12:01	   Tactic: Update necron_builder_scarab_squad...
AI1002 12:01	   Tactic: Update necron_builder_scarab_squad...
AI1002 12:01	CpuManager: Update unit tactics...
AI1002 12:01	CpuManager: Update building tactics...
AI1002 12:01	CpuManager: Update unit tactics...
AI1002 12:01 CpuManager: End AI Think
AI1002 12:01 AI Difficulty Setting
AI1002 12:01	0
AI1002 12:01 
AI1002 12:02 CpuManager: Starting AI Think
AI1002 12:02	Req: 0 | Pow: 68.730667114258 | Pop: 0
AI1002 12:02	CpuManager: Critical range   = 102.08329772949
AI1002 12:02	CpuManager: Critical threat  = 0
AI1002 12:02	CpuManager: Critical support = 0
AI1002 12:02	CpuManager: Update strategies...
AI1002 12:02	DesignerStrategy
AI1002 12:02	DesignerStrategy
AI1002 12:02	BuildBaseStrategy
AI1002 12:02	   BuildBaseStrategy: Update...
AI1002 12:02	   BuildController: Compute build program...
AI1002 12:02	   BuildController: Current tier = 2
AI1002 12:02	   BuildController: Current army strength = 1522.1990966797
AI1002 12:02	   BuildController: Force teching!!!
AI1002 12:02	   BuildController: Restrict reinforcing and unit building!
AI1002 12:02	   BuildController: Check generators...
AI1002 12:02	   BuildController: Finish buildings...
AI1002 12:02	   BuildController: Building units...
AI1002 12:02	   BuildController: No ressources for units available
AI1002 12:02	   BuildController: Compute offensive stance...
AI1002 12:02	   Find common enemy player...
AI1002 12:02	BuildBaseStrategy
AI1002 12:02	AttackStrategy
AI1002 12:02	AttackStrategy
AI1002 12:02	DefendStrategy
AI1002 12:02	   DefendStrategy: Update...
AI1002 12:02	   DefendStrategy: CalculateNewChokepoint...
AI1002 12:02	   DefendStrategy: Check allies...
AI1002 12:02	   DefendStrategy: Get post threat...
AI1002 12:02	DefendStrategy
AI1002 12:02	CpuManager: Update plans...
AI1002 12:02	ResourcePlan: Update...
AI1002 12:02	ResourcePlan: Update...
AI1002 12:02	BuildPlan: Building completed! End build plan for addon_necron_list_post_1
AI1002 12:02	AttackPlan: Obtain forces...
AI1002 12:02	AttackPlan: Required: 1500
AI1002 12:02	AttackPlan: Already obtained: 1522.1990966797
AI1002 12:02	Attackplan: Update...
AI1002 12:02	Attackplan: Remove Losses...
AI1002 12:02	AttackPlan: Attacking...
AI1002 12:02	DefendChokePointPlan: Defending...
AI1002 12:02	DefendChokePointPlan: Check harassing mode...
AI1002 12:02	DefendChokePointPlan: Protect choke point!
AI1002 12:02 CpuManager: End AI Think
AI1002 12:02 AI Difficulty Setting
AI1002 12:02	0
AI1002 12:02 
AI1002 12:03 CpuManager: Starting AI Think
AI1002 12:03	Req: 0 | Pow: 71.970657348633 | Pop: 0
AI1002 12:03	CpuManager: Critical range   = 102.08329772949
AI1002 12:03	CpuManager: Critical threat  = 0
AI1002 12:03	CpuManager: Critical support = 0
AI1002 12:03	CpuManager: Update unit tactics...
AI1002 12:03	   Tactic: Update necron_lord_squad...
AI1002 12:03	   Tactic: Update necron_basic_warrior_squad...
AI1002 12:03	   Tactic: Update necron_basic_warrior_squad...
AI1002 12:03	   Tactic: Update necron_basic_warrior_squad...
AI1002 12:03	   Tactic: Update necron_wraith_squad...
AI1002 12:03	   Tactic: Update necron_builder_scarab_squad...
AI1002 12:03	   Tactic: Update necron_builder_scarab_squad...
AI1002 12:03	   Tactic: Update necron_builder_scarab_squad...
AI1002 12:03	   Tactic: Update necron_builder_scarab_squad...
AI1002 12:03	   Tactic: Update necron_builder_scarab_squad...
AI1002 12:03	CpuManager: Update unit tactics...
AI1002 12:03	CpuManager: Update building tactics...
AI1002 12:03	CpuManager: Update unit tactics...
AI1002 12:03 CpuManager: End AI Think
AI1002 12:03 AI Difficulty Setting
AI1002 12:03	0
AI1002 12:03 
AI1002 12:04 CpuManager: Starting AI Think
AI1002 12:04	Req: 0 | Pow: 75.210647583008 | Pop: 0
AI1002 12:04	CpuManager: Critical range   = 102.08329772949
AI1002 12:04	CpuManager: Critical threat  = 0
AI1002 12:04	CpuManager: Critical support = 0
AI1002 12:04	CpuManager: Update strategies...
AI1002 12:04	DesignerStrategy
AI1002 12:04	DesignerStrategy
AI1002 12:04	BuildBaseStrategy
AI1002 12:04	   BuildBaseStrategy: Update...
AI1002 12:04	   BuildController: Compute build program...
AI1002 12:04	   BuildController: Current tier = 2
AI1002 12:04	   BuildController: Current army strength = 1522.1990966797
AI1002 12:04	   BuildController: Force teching!!!
AI1002 12:04	   BuildController: Restrict reinforcing and unit building!
AI1002 12:04	   BuildController: Building units...
AI1002 12:04	   BuildController: No ressources for units available
AI1002 12:04	   BuildController: Compute offensive stance...
AI1002 12:04	   Find common enemy player...
AI1002 12:04	BuildBaseStrategy
AI1002 12:04	AttackStrategy
AI1002 12:04	AttackStrategy
AI1002 12:04	DefendStrategy
AI1002 12:04	   DefendStrategy: Update...
AI1002 12:04	   DefendStrategy: CalculateNewChokepoint...
AI1002 12:04	   DefendStrategy: Check allies...
AI1002 12:04	   DefendStrategy: Get post threat...
AI1002 12:04	DefendStrategy
AI1002 12:04	CpuManager: Update plans...
AI1002 12:04	CapturePlan: Free ressources...
AI1002 12:04	CapturePlan: Find free strategic point...
AI1002 12:04	ResourcePlan: Update...
AI1002 12:04	ResourcePlan: Update...
AI1002 12:04	AttackPlan: Obtain forces...
AI1002 12:04	AttackPlan: Required: 1500
AI1002 12:04	AttackPlan: Already obtained: 1522.1990966797
AI1002 12:04	Attackplan: Update...
AI1002 12:04	Attackplan: Remove Losses...
AI1002 12:04	AttackPlan: Attacking...
AI1002 12:04	DefendChokePointPlan: Defending...
AI1002 12:04	DefendChokePointPlan: Check harassing mode...
AI1002 12:04	DefendChokePointPlan: Protect choke point!
AI1002 12:04 CpuManager: End AI Think
AI1002 12:04 AI Difficulty Setting
AI1002 12:04	0
AI1002 12:04 
AI1002 12:05 CpuManager: Starting AI Think
AI1002 12:05	Req: 0 | Pow: 78.450637817383 | Pop: 0
AI1002 12:05	CpuManager: Critical range   = 102.08329772949
AI1002 12:05	CpuManager: Critical threat  = 0
AI1002 12:05	CpuManager: Critical support = 0
AI1002 12:05	CpuManager: Update unit tactics...
AI1002 12:05	   Tactic: Update necron_lord_squad...
AI1002 12:05	   Tactic: Update necron_basic_warrior_squad...

Again it ends with the Necron Warriors... the C'Tan Gods are after us :rolleyes:

I would like to add perhaps one more observation Arkhan, it's something that I should have mentioned before maybe, or maybe not, but I honestly just thought about it because I just noticed it now... however now that I'm trying to remember all of the tries I've done in that map there's one thing that just got to my attention. Each and every single time that it crashes, and yes, I'm 100% certain of that, it occurs right when the Necrons come to my starting location and are technically shooting at the buildings at my main base located there where I started. It never crashed elsewhere really, I know that. So, maybe, there's a terrain problem at that specific starting location that the A.I just can't stand. A polygons malformation or just the A.I having problems going up hill.

You know when I look at Broken Lands correctly I notice that the entire map, with maybe the exception of its center portion is completely angled, curved, just a little bit, but that map barely has any flat terrain for the A.I to move on. You remember when I said that I noticed a couple of Necron Wraiths getting stuck on top of rock formations and high hills not being able to move at all? Well it's the only map so far where I've noticed that such a thing happens. No other maps I've played in so far, be it for Campaign or Skirmishes made units stuck, and since when can Necron Wraiths go so high on elevated terrain? I mean the only units capable of going there without getting stuck are the new flying vehicles, and the Wraiths are land units. That just shows how bad that map's design is.

So if this information can potentially help you I'd be glad about it, because now that I've noticed it I just found it too strange, or perhaps too good for a mere "coincidence" to leave you or Thudo or Larkin uninformed about it.

Attached Files


Edited by Zenoth, 03 April 2008 - 04:07 AM.


#10 ThetaOrion

ThetaOrion

    title available

  • Members
  • 676 posts

Posted 03 April 2008 - 04:30 AM

If I play with it long enough, I eventually figure out how to get the win, even as the Sisters.

I think their main weakness are vehicles. Maybe you try more celestian squads, it made a huge difference for the AI.


--

Yes, that seems to be an accurate assessment.

I try to get a Celestian Squad in each platoon of infantry that I send out as a group. The Celestian Squad does a nice job of tearing through buildings and tanks with the Melta upgrades. A Celestian Squad needs another person there, though, because the enemy AI always goes after them first because they have such a small squad, and if you aren't watching every second or constantly placing them back on overwatch every second, soon they are all dead.

The Sisters Repentia is probably my favorite Sisters Infantry. Those things sometimes detect the enemy, although didn't seem to detect the DE Mandrakes. And, the Repentia squad can have twice as many in a squad and they sure can absorbe a lot of damage. And, on overwatch, even in a furball, the Sisters Repentia can replenish or regenerate faster than they are killed, or so it seems. I tend to spread them out, but all three of them together can pretty much take down anything else, infantry, in close-combat.

--

With the Sisters, you can get two Penitent Engine vehicles, and they are kind of like a dreadnought but with fewer hitpoints it seems. But, they chew up a lot of cap and the flame they shoot isn't all that impressive. I try to take one in when going into an enemy base, but they just don't last very long. Turrets rip through them like crazy, and they are always the first thing targeted.

The best Sister Tank is the Exorcist Tank, which is kind of like a SM Whirlwind but does less damage, with less accuracy, and those Exorcist tanks are also paper thin. They have great range, though. I found that I have to lead with my infantry, and use the infantry to protect the two Exorcist tanks that you can build. Then the Exorcist tank does knockdown on the enemy infantry, which gives your infantry a definite edge, as long as your infantry is between the Exorcist tank and its target.

I do a lot of those Sisters fliers on overwatch. They aren't any good, but the Sister Flier (Flyer/Fliar) tanks are the first thing the enemy targets, it seems, which leaves your infantry free to fight and get the upperhand.

--

I like those 'angels of light' that the Cannoness can call up later in the game. Those things really tear through buildings and turrets.

I think the best overall Sister unit, though, is the Uber Living Saint. That thing can rip through turrets, periodically shoot a wave of flame, and tear down buildings with great speed, and absorb huge amounts of damage, can jump and fly away if you are watching it carefully, and even at times resurrect right on the spot again to go back at it without having to travel all the way across the map to get back into the battle. Some of the ubers in the past were semi-disappointing and often buffed up in the rebalance mods, but I have been rather pleased with the new Ubers in SS.

Even though the DE Dais of Destruction uber is lacking in flash and show and ordinary firepower, it has a wave that can pass through infantry and wipe them all out in the swath. It was quite impressive. And of course, it has plenty of hit points for an uber.

--

Anyway, it takes awhile for me to figure out what I like and what's good against what. I have actually found the campaign to be useful for teaching me what I like and don't like about the new factions in SS. The Sisters are growing on me, although they still seem to take more stress and work in order to get the win. The Dark Eldar just seemed to come naturally to me, for some unexplained reason, and it never seemed to be as stressful to get the win as the Dark Eldar.

Edited by ThetaOrion, 03 April 2008 - 04:34 AM.


#11 LarkinVB

LarkinVB

    title available

  • Members
  • 1,488 posts

Posted 03 April 2008 - 07:49 AM

The section marked with "-- Check for a close unit" checks for a close unit. If there's no enemy unit around, it will switch off dancing. Further, all function returns before this part also switch off dancing. Therefore this check can't be avoided.

It was indeed different in the CheckForDeath() dancing part where I had to add the threat check.


I'm pretty sure It was the dancing code which drove them back a far distance. What is happening exactly if the CheckForDance() is returning false ? Let us assume they have the nearest building (150 away) as move target postition from MoveToDisengage(). Now they are in full move and the tactic finds that there is no enemy. How far did they already travel between two calls of their tactic ? Will they be immediatly ordered to stop their move or to return ? The old code had a max limit for the move distance so they stopped automatically after a short distance and this dancing was just renewed while the enemy was still near. The new code is giving them a move order to a far destination and my observation is that they travel some distance before stopping. Perhaps your observation of 'good' dancing was while MoveToDisengage() did not find a near building without threat and the fallback code was doing the right stuff.

I think I made my point and will just change the code for SSPro (if I still feel the urge to code for it).

Edited by LarkinVB, 03 April 2008 - 07:50 AM.


#12 ArkhanTheBlack

ArkhanTheBlack

    title available

  • Members
  • 814 posts

Posted 03 April 2008 - 12:10 PM

I wanted to bring you better news but alas, yes it crashed again. Same settings as you probably know them by heart now, but I'll repeat them just in case: Me as Eldar in Campaign, playing Hard difficulty, against Necrons on Broken Lands.

Yes, I expected that. It's very problematic because it's extremely difficult to reproduce the crash on my computer. I think I got the warrior crash only one time, the rest were all Lord crashes. It really seems to be a problem of the map layout. The crash must be caused by basic core code. No Necron specific code involved. I'm thinking about just setting this map on a black list, because the code seems to be stable on other maps.
I will try one last thing. Besides the Necron Lord, the NW seem to be the only unit which has the crash problem. And there's one thing special about NW: They have an invalid jump ability. Therefore they try to use the jump code although it can't work for them. It never crashed before so it wasn't a problem. But maybe it is on this map. I will now deactivate this code just for the Necron Warriors.
However, there's one thing I'd like you to do Zenoth. Just play the map against another race a few times. It's important to know if this is really Necron specific or if we just 'think' that it's Necron specific because we never tried a game against another race. I can't do that test because even the NW crash is too rare on my computer.


I'm pretty sure It was the dancing code which drove them back a far distance. What is happening exactly if the CheckForDance() is returning false ? Let us assume they have the nearest building (150 away) as move target postition from MoveToDisengage(). Now they are in full move and the tactic finds that there is no enemy. How far did they already travel between two calls of their tactic ? Will they be immediatly ordered to stop their move or to return ? The old code had a max limit for the move distance so they stopped automatically after a short distance and this dancing was just renewed while the enemy was still near. The new code is giving them a move order to a far destination and my observation is that they travel some distance before stopping. Perhaps your observation of 'good' dancing was while MoveToDisengage() did not find a near building without threat and the fallback code was doing the right stuff.

The time delay could be indeed a problem. With 6 AI players in mid / late game, it can take up to 12 seconds until the code is checked again. But I think we can try a compromise here. If we use the save point for the first dancing check and the retreat only if the unit was followed to the save point, we could avoid the problem of a unit dancing too far into the enemy territory. I think I'll try that for the next beta. We'll see...

#13 Smokeskin

Smokeskin
  • Members
  • 127 posts
  • Location:Denmark
  • Projects:Soulstorm Advanced AI betatester

Posted 03 April 2008 - 01:19 PM

How about having a global datastructure with pointers to dancing squads? They add themselves when they dance, remove themselves when they stop. Then run dance checks on the units more often, there shouldn't be many off them so it shouldn't have much overhead. Like instead of (this is just made up pseudocode stuff)

function updateUnitTactics
for i=1 to units.size do
 units[i].UpdateTactics()
next

You do

global nextDanceCheck
global units[]
global dancers[]

function updateUnitTactics
for i=1 to units.size do
 units[i].UpdateTactics()
 updateDancers()
next

function updateDancers
 if getCurrentTime()>nextDanceCheck then
   for j=1 to dancers.size
	dancers[i].checkForDance()
   next
  nextDanceCheck = getCurrentTime() + 1 second
 end if


#14 troubadour

troubadour
  • Members
  • 88 posts

Posted 03 April 2008 - 03:05 PM

Minor remark reg CL capping, i had a game on MoM (SM mirror match - std settings vs hard AI). There are 3 CLs on this map, one in the middle and 2 in each player base (actually quite far away from HQ)
AI capped all its points and LP them (ok) and then cap Relic point and LPed it, then 3 scouts squad where idle next to Relic Point, i expect that one of them would go capping the CL closed to their base, eventually it happened but 1 or 2min later

#15 LarkinVB

LarkinVB

    title available

  • Members
  • 1,488 posts

Posted 03 April 2008 - 06:20 PM

Just watched DE vs SM. DE did build very early T1 dark foundry after hall of blood but never used it for units in T1. Wasted.

They should either build hall of blood OR dark foundry for jetbike spam T1, not both. Hall of blood should be removed from BuildOrderStrategyInfo and both should be placed in build orders.

Edited by LarkinVB, 03 April 2008 - 06:23 PM.


#16 dreddnott

dreddnott
  • Members
  • 60 posts

Posted 03 April 2008 - 07:30 PM

Do you want me to cook up a revised darkeldarstrategyinfo.ai file for DE? I've been writing up a new one for every beta just for myself, makes good practice.

#17 ArkhanTheBlack

ArkhanTheBlack

    title available

  • Members
  • 814 posts

Posted 03 April 2008 - 08:52 PM

The hall of blood must be built or the Archon won't get out. If the Archon doesn't get out, they won't harass.

I'll delay the dark foundry in the standard and warrior build after the T1 addon.

Edited by ArkhanTheBlack, 03 April 2008 - 08:53 PM.


#18 Smokeskin

Smokeskin
  • Members
  • 127 posts
  • Location:Denmark
  • Projects:Soulstorm Advanced AI betatester

Posted 03 April 2008 - 09:31 PM

Why do they need the Archon to harass?

#19 ThetaOrion

ThetaOrion

    title available

  • Members
  • 676 posts

Posted 03 April 2008 - 09:33 PM

LONG THIN MAPS ARE KNOWN TO CRASH:

I spent a stint as a map-maker for DC and made a couple of nice maps for the game. While learning the process, one of the rules that I learned is that you never make a long thin map of any kind for DoW or DC, because there is some sort of bug in there that causes crashes.

As far as I know, Relic never fixed it. And nobody at IronLore would ever know about that rule to begin with.

Broken Lands looks like a long thin map to me, and thus it should be prone to crashes according to the old rules that I remember reading. Broken Lands looks like the classic example of the type of map that we were cautioned not to make. And, I suppose there are certain functions in the game that are still 'designed' to crash on those types of maps.

There is a sticky thread in the MapRoom on Relic Forums that touches upon it slightly, although the emphasis there in the beginning is more about the crashes that the bug causes in the old Map Editor, and not what you will necessarily experience during a game. But, Aralez and FinalDeath and others led me to believe that there are also game crashes in skirmish mode waiting to happen as well with those types of maps. You just never make a long thin map in any DoW game -- that's one of the rules of mapmaking, and it looks to me as if IronLore might have broken that rule with Broken Lands, although it has been a year or more since I last had the DC Map Editor loaded, so I can't just pull up the map for a look to see if it is indeed one of those types that we were told to avoid.

http://forums.relicn...ead.php?t=82187

I think FinalDeath would know something more about this issue and whether Broken Lands is in the category of 'long thin maps' that we were told not to make because of crash issues.

--

SHADOW PLAY:

I also noticed that SS turns shadows on High by default. Last night in a Mountain Trails experiment, I was getting the black shadow lines being drawn across the whole map occasionally. In the past, Thud has proven that Shadows on High can cause certain mods to crash. I don't know if that weakness is present in SS or in any of the functions that Arkhan is trying to use for the AI, but some of the other 'bugs' or 'ugliness' resulting from Shadows High is still present in SS. It's time for me to turn Shadows down to low or turn Shadows off in the options.

--

CRASH ISSUES:

Those are two built-in crash issues that I know about from the past, and no amount of AI tweaking would solve the problem if the crashes are hard-coded into the functions themselves. Only by making the AI brain-dead and avoiding the functions that cause the crash would you be able to avoid these crashes -- just like Relic and IronLore did with their AI. If you start using all the functions that work fine on the normal maps but crash on the long thin maps, then you will always get a crash on a long thin map that Arkhan will never be able to fix, unless he stops using those particular functions and makes the AI brain dead.

Instead of fixing the issue that causes the crashes in the functions on the long thin maps, Relic and IronLore take the crash input from the betatesters and then simply stop using those functions in their AI. Problem solved for Relic, and the problem goes eternal for the rest of us who want a decent AI.

With Broken Lands, I think the problem is the map itself, because after I played Broken Lands in the campaign last night I came away with the belief that Broken Lands is one of those long thin maps that we mapmakers were told not to make, unless we wanted it crashing all the time. And, I'm pretty much sure that Arkhan is using lots of functions that work just fine on normal sized maps, but that probably still crash out regularly on the long thin maps.

#20 ArkhanTheBlack

ArkhanTheBlack

    title available

  • Members
  • 814 posts

Posted 03 April 2008 - 09:41 PM

Why do they need the Archon to harass?

They are used as some kind of mobile army center to coordinate the harassing troops. They are also very tough compared to other T1 units and the AI usually is in desparate need of tough troops to compensate his lack of tactical skills.



Reply to this topic



  


0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users