Jump to content
genesis92x

Vcom AI V2.0 - AI Overhaul

Recommended Posts

2 minutes ago, celludriel said:

Well here are the benefits of having functions

 

Main benefits:

  1. Automatic compilation upon mission start into a global variable - no need to remember direct paths to files.
  2. Anti-hack protection using compileFinal (see Recompiling for more info)
  3. Listing in the Functions Viewer
  4. Advanced debugging options
  5. Optional immediate execution upon mission start, without need for manual call
  6. Potential performance improvements

 

full information is available here: https://community.bistudio.com/wiki/Functions_Library_(Arma_3)

 

--SNIP--
 

For more information PM me, if I have some spare time maybe we can collaborate

 

That is extremely helpful. For the optimization update I will definitely do this. So it looks like this would work just fine for the script version as well.

  • Like 2

Share this post


Link to post
Share on other sites
Just now, genesis92x said:

 

That is extremely helpful. For the optimization update I will definitely do this. So it looks like this would work just fine for the script version as well.

 

Yes it can be used just in the script version, probably also in the mod version just haven't investigated that one.  It will help keep your code clean and gives you access to all your functions in remoteCalls as well.  I do have to warn it's quite a bit of work though but will make your codebase better maintanable in the end.

  • Like 1

Share this post


Link to post
Share on other sites
9 hours ago, genesis92x said:

Rizla, could you try changing

 


_x setvariable ["VCOM_NOPATHING_Unit",1, false];

to


_x setvariable ["VCOM_NOPATHING_Unit",false];

 

and

 


 (Driver _x) setvariable ["VCOM_NOPATHING_Unit",1, false];

to


 (Driver _x) setvariable ["VCOM_NOPATHING_Unit",false];

 

Let me know if that removes the error - I am not in a position to look directly at the code so I can NOT remember how I had that variable setup anymore :<

 

 

Thanks Genesis, that worked.

 

Share this post


Link to post
Share on other sites

Having a problem.


I am making a mission, and every time i call an artillery strike (M5 sandstorm, on a position on the sea), the Ai retaliate with a extreme accurate mortar fire.

The problem is, no matter what i do, the AI automatically knows my team position and start calling fire on my positions, even if there no enemy close enough to have line of sight on my group.


 

  • Like 1

Share this post


Link to post
Share on other sites
On 1.3.2017 at 2:43 AM, alezil said:

Having a problem.


I am making a mission, and every time i call an artillery strike (M5 sandstorm, on a position on the sea), the Ai retaliate with a extreme accurate mortar fire.

The problem is, no matter what i do, the AI automatically knows my team position and start calling fire on my positions, even if there no enemy close enough to have line of sight on my group.


 

 

I just ran into a similar problem. If you are using the scripted version you could try editing the following file "VCOMAI_ArtilleryCalled.sqf" -> replacing target pos (getPos _Enemy) getHideFrom _Enemy like this:

private _enemyPos = _Unit getHideFrom _Enemy;
if ((_enemyPos isEqualTo [0,0,0])) exitWith {};

And then replace all other occurrences of (getPos _Enemy) with _enemyPos. I just started testing this change, so I'm not sure if it will brake stuff or not, but it seems to work.  getHideFrom  returns the Position where object (_Unit in this case) believes the enemy to be.

 

Share this post


Link to post
Share on other sites

Where all in the scripting are possibilities for static weapon/pack deployment defined? Was trying to see what might be needed to get RHS dshk/spg etc working but no success.

 

I found a check in one of the scripts for backpack deployment having staticweapon or weapon bag config parents, but the RHS pieces do have these parents same as the stock BIS bags/weapons :( . Is there an explicit class list used?

 

Would be sooo awesome to have Taliban types hauling around and emoloying Dshk and mortars. 

Share this post


Link to post
Share on other sites
4 hours ago, BvB1 said:

Would be sooo awesome to have Taliban types hauling around and emoloying Dshk and mortars. 

 

Careful what you wish for, I've got an ALiVE mission where the Taliban have a couple of static mortar positions for the players to hunt. Those mortars will reach half way across takistan and can certainly ruin your day :scared:

VCOM does a great job of having the AI employ mortars and you really need to kill any enemy around before they'll actually stop 

Share this post


Link to post
Share on other sites

I noticed that when i use VCOM_UseMarkers = true. I got some kind of lag whit Zeus/HAL. It take much longer to HAL create waypoints when its true. Also get about 10 fps lower.

I did not notice much difference with VCOM_AIDEBUG = 1.

 

With default HAL settings. HAL start after 15s has passed ingame.

without Vcom. It take about 45s to HAL finish. About same time when both are off, (Hal did forgot one group for some reason) So lets say it took about ~50s :sigh:. When AIDEBUG was 1, it took about the same 50s to finish.

But when UseMarkers was true, it took about 1min and 4s to finish (and once again Hal did forgot one group for some reason).

 

im bad to explain things. So here is small video.

 

Here is my test mission. More AI groups you add. More "lag" you can notice.

https://www.dropbox.com/s/iu6bjp5csa3mwgb/Testi.Altis.pbo?dl=0

 

I know that these 2 mods conflict with things and stuff. But i love them both so dont make me chose:down:

 

Edited by Tuntematon
Im bad at english

Share this post


Link to post
Share on other sites

Sometimes when playing missions on my server, all (or almost all) of the AI will be stuck in the "dragging" animation state and are therefore unable to move.  Is this a symptom of anything in particular that you are aware of?

 

It's been this way since VCOM 2.7 iirc.

Share this post


Link to post
Share on other sites

Is it possible to only allow units with a certain item or of a certain classname to call in artillery?

Share this post


Link to post
Share on other sites

Is there a simple way to remove the player supression effect/blurring/speed boost?

I tried to go into the userconfig (AIsettingsV2) and set-

 

VCOM_Suppression = false;
//How much should suppression impact both AI and player aiming? Default is 5. Normal ArmA is 1.
VCOM_SuppressionVar = 1;
//Should AI/players be impacted by adrenaline? This provides players and AI with a small speed boost to animations to assist with cover seeking and positioning for a short time. Default = true;
VCOM_Adrenaline = false;
//How much of a speed boost should players/AI recieve? Default = 1.35; (1 is ArmA's normal speed).
VCOM_AdrenalineVar = 1;
//How many AI UNITS can be calculating cover positions at once?
VCOM_CurrentlyMovingLimit = 6;
//How many AI UNITS can be suppressing others at once?
VCOM_CurrentlySuppressingLimit = 12;  (I also tried 0, no change)

 

But that didn't seem to make a difference. 

Share this post


Link to post
Share on other sites

May have a problem with minelaying in the script also; our RPT in our ALiVE is ballooning up to a few hundred MB and a lot of the errors is related to minelaying in the VCOM script. Don't have access to the RPT at the moment but I can put it out here later today for someone to check.

  • Like 1

Share this post


Link to post
Share on other sites
On 4/10/2017 at 0:04 AM, jarrad96 said:

Is there a simple way to remove the player supression effect/blurring/speed boost?

 

Enable Filepatching :f:

  • Like 1

Share this post


Link to post
Share on other sites

@genesis92x

I'm trying to make sure I understand how to AI skill settings work.

 

If I take this line:

_Unit setSkill ["aimingAccuracy",(0.05 + (random 0.05))];

And change it to this:

_Unit setSkill ["aimingAccuracy",(0.01 + (random 0.05))];

That would mean that the AI has an aimingAccuracy randomly assigned to it between 0.01 and 0.06 right?

 

 

Also, if all of these values below are the same, how do the units with higher rank get better skills?

//AI ACCURACY SETTINGS - You can change these numbers below
//Colonel Level AI
AccuracyFunctionRank6 = {
_Unit = _this select 0;

_Unit setSkill ["aimingAccuracy",(0.05 + (random 0.05))];
_Unit setSkill ["aimingShake",(0.05 + (random 0.05))];
_Unit setSkill ["spotDistance",(0.6 + (random 0.1))];
_Unit setSkill ["spotTime",(0.6 + (random 0.1))];
_Unit setSkill ["courage",(0.7 + (random 0.3))];
_Unit setSkill ["commanding",1.0];
_Unit setSkill ["aimingSpeed",(0.5 + (random 0.1))];
_Unit setSkill ["general",1.0];
_Unit setSkill ["endurance",1.0];
_Unit setSkill ["reloadSpeed",(0.7 + (random 0.3))];
};
//Major Level AI
AccuracyFunctionRank5 = {
_Unit = _this select 0;

_Unit setSkill ["aimingAccuracy",(0.05 + (random 0.05))];
_Unit setSkill ["aimingShake",(0.05 + (random 0.05))];
_Unit setSkill ["spotDistance",(0.6 + (random 0.1))];
_Unit setSkill ["spotTime",(0.6 + (random 0.1))];
_Unit setSkill ["courage",(0.7 + (random 0.3))];
_Unit setSkill ["commanding",1.0];
_Unit setSkill ["aimingSpeed",(0.5 + (random 0.1))];
_Unit setSkill ["general",1.0];
_Unit setSkill ["endurance",1.0];
_Unit setSkill ["reloadSpeed",(0.7 + (random 0.3))];
};
//Captain Level AI
AccuracyFunctionRank4 = {
_Unit = _this select 0;

_Unit setSkill ["aimingAccuracy",(0.05 + (random 0.05))];
_Unit setSkill ["aimingShake",(0.05 + (random 0.05))];
_Unit setSkill ["spotDistance",(0.6 + (random 0.1))];
_Unit setSkill ["spotTime",(0.6 + (random 0.1))];
_Unit setSkill ["courage",(0.7 + (random 0.3))];
_Unit setSkill ["commanding",1.0];
_Unit setSkill ["aimingSpeed",(0.5 + (random 0.1))];
_Unit setSkill ["general",1.0];
_Unit setSkill ["endurance",1.0];
_Unit setSkill ["reloadSpeed",(0.7 + (random 0.3))];
};
//Lieutenant Level AI
AccuracyFunctionRank3 = {
_Unit = _this select 0;

_Unit setSkill ["aimingAccuracy",(0.05 + (random 0.05))];
_Unit setSkill ["aimingShake",(0.05 + (random 0.05))];
_Unit setSkill ["spotDistance",(0.6 + (random 0.1))];
_Unit setSkill ["spotTime",(0.6 + (random 0.1))];
_Unit setSkill ["courage",(0.7 + (random 0.3))];
_Unit setSkill ["commanding",1.0];
_Unit setSkill ["aimingSpeed",(0.5 + (random 0.1))];
_Unit setSkill ["general",1.0];
_Unit setSkill ["endurance",1.0];
_Unit setSkill ["reloadSpeed",(0.7 + (random 0.3))];
};
//Sergeant Level AI
AccuracyFunctionRank2 = {
_Unit = _this select 0;

_Unit setSkill ["aimingAccuracy",(0.05 + (random 0.05))];
_Unit setSkill ["aimingShake",(0.05 + (random 0.05))];
_Unit setSkill ["spotDistance",(0.6 + (random 0.1))];
_Unit setSkill ["spotTime",(0.6 + (random 0.1))];
_Unit setSkill ["courage",(0.7 + (random 0.3))];
_Unit setSkill ["commanding",1.0];
_Unit setSkill ["aimingSpeed",(0.5 + (random 0.1))];
_Unit setSkill ["general",1.0];
_Unit setSkill ["endurance",1.0];
_Unit setSkill ["reloadSpeed",(0.7 + (random 0.3))];
};
//Corporal Level AI
AccuracyFunctionRank1 = {
_Unit = _this select 0;

_Unit setSkill ["aimingAccuracy",(0.05 + (random 0.05))];
_Unit setSkill ["aimingShake",(0.05 + (random 0.05))];
_Unit setSkill ["spotDistance",(0.6 + (random 0.1))];
_Unit setSkill ["spotTime",(0.6 + (random 0.1))];
_Unit setSkill ["courage",(0.7 + (random 0.3))];
_Unit setSkill ["commanding",1.0];
_Unit setSkill ["aimingSpeed",(0.5 + (random 0.1))];
_Unit setSkill ["general",1.0];
_Unit setSkill ["endurance",1.0];
_Unit setSkill ["reloadSpeed",(0.7 + (random 0.3))];
};
//Private Level AI
AccuracyFunctionRank0 = {
_Unit = _this select 0;

_Unit setSkill ["aimingAccuracy",(0.05 + (random 0.05))];
_Unit setSkill ["aimingShake",(0.05 + (random 0.05))];
_Unit setSkill ["spotDistance",(0.6 + (random 0.1))];
_Unit setSkill ["spotTime",(0.6 + (random 0.1))];
_Unit setSkill ["courage",(0.7 + (random 0.3))];
_Unit setSkill ["commanding",1.0];
_Unit setSkill ["aimingSpeed",(0.5 + (random 0.1))];
_Unit setSkill ["general",1.0];
_Unit setSkill ["endurance",1.0];
_Unit setSkill ["reloadSpeed",(0.7 + (random 0.3))];
};

 

Thank you!

Share this post


Link to post
Share on other sites

@montgomery you are right that would result in a  skillrange from 0.01 to 0.06

As for

On 4/21/2017 at 8:10 PM, montgomery said:

Also, if all of these values below are the same, how do the units with higher rank get better skills?

this, they don't, but you have the easy possibility to change the values so your enemys have a wider skillset.

  • Like 1

Share this post


Link to post
Share on other sites
On 1/24/2017 at 3:23 PM, genesis92x said:

In late February or March I will sit down and take a look at converting Vcom to use CBA

any news on this?

Share this post


Link to post
Share on other sites
34 minutes ago, Coul said:

any news on this?

 

Hey Coul,


I am currently working 90% on Dissension. I have learned my lesson in never giving out dates anymore :) I have began trying to read up on CBA and I am still trying to figure out how to best approach the project, as converting to CBA is much more difficult than initially expected. 

 

I would need to ask someone to help me at first and possibly provide an example of converting a function to CBA. Dissension has taken most of my free time.

  • Like 3

Share this post


Link to post
Share on other sites

Not sure if I've asked this before, but is there any chance you could add a way to change skill levels via faction?

 

That way if I make an ALiVE mission I can for instance have Russian OPFOR who are higher skilled and more dangerous than the Independent rebel forces.

 

Even if it's a case of a multiplier, eg
West = 1

East = 1

Independant = 0.8

 

or something like that
 

  • Like 1

Share this post


Link to post
Share on other sites
11 hours ago, JD Wang said:

Even if it's a case of a multiplier, eg

@JD WangYou could easily change a 'few' lines of code for that specific purpose: 

(In the spoiler, that way it's not getting out of hand)

Spoiler

in the init you can define a global variable for easy adjustment, like... VOM_sidespecskill = [1,1,0.8]; That could stand for [east, east, resistance]

Later in the file mentioned above, with the AI Skill:


AccuracyFunctionRank6 = {
	private _Unit = _this select 0;
	private _multi = switch (side _unit) do { 
		case west : { VOM_sidespecskill select 0 }; 
		case east : { VOM_sidespecskill select 1 }; 
		case independent : { VOM_sidespecskill select 2 }; 
		default { 1 }; 
	};
	_Unit setSkill ["aimingAccuracy", ((0.3 + random 0.2) * _multi) min 1];
	_Unit setSkill ["aimingShake", ((0.2 + random 0.1) * _multi) min 1];
	_Unit setSkill ["spotDistance", ((0.6 + random 0.1) * _multi) min 1];
	_Unit setSkill ["spotTime", ((0.6 + random 0.1) * _multi) min 1];
	_Unit setSkill ["courage", (1 * _multi) min 1];
	_Unit setSkill ["commanding", (1 * _multi) min 1];
	_Unit setSkill ["aimingSpeed", ((0.5 + random 0.1) * _multi) min 1];
	_Unit setSkill ["general", (1 * _multi) min 1];
	_Unit setSkill ["endurance", (1 * _multi) min 1];
	_Unit setSkill ["reloadSpeed", (1 * _multi) min 1];
};

 

Keep in mind that this way It gets kind of hard to track what skill they acc have. additionally It seems wise to me that you would have to forget values higher than 1. 

  • Like 1

Share this post


Link to post
Share on other sites

Im prity sure there is a line about not using the values in the vcom ai skills, so you could use alive module to divie the skills to units (i cannot remember if you can do this for different sides or if its a blanket module).

 

Also i see if you use the line Player controlled AI it disable the auto combat, is this used for High command aswell ??

Share this post


Link to post
Share on other sites
On 4/23/2017 at 3:14 PM, crewt said:

@genesis92x What do you need? a specific function? And what exactly is your Goal?

Initially I would just need a good example. So let's say, converting the most hefty function (The finding cover function) into a CBA environment. I have not read enough about it quite yet, but the goal would be to optimize and lessen the impact of such a hefty function.

  • Like 1

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

×