Jump to content
Sign in to follow this  
silola

DAC V2.1 (WIP) discussion

Recommended Posts

or just

"Its done when its done"

I heared this text is "free for use" since Duke is gone loooooooooooool

No it's not!:coop:

Share this post


Link to post
Share on other sites
I crossed all my 12 fingers too :D

Very nice. This means you can code even faster then people with ten fingers. :D

Keep up the good work mate.

Share this post


Link to post
Share on other sites

Hi :)

There are minor news ...

As I had indicated earlier, it is now also possible to create zones

in the form of an ellipse, as it appears on the following image:

ellipse.jpg

Another news is that the DAC can now generate objects within a zone

instead of waypoints.

For example, to place random empty vehicles into a specific area.

Of course there are many other potential applications for this feature.

I made a few extreme attempts, just to illustrate the possibilities a little bit better ;-)

Here the result:

dacobj1.th.jpgdacobj2.th.jpgdacobj3v.th.jpg

Greeting

Silola

Share this post


Link to post
Share on other sites

Cool stuff!

For example, to place random empty vehicles into a specific area.

Of course there are many other potential applications for this feature.

Good feature and will help creating minefields, now I just wish we had some more AP mines types to pick from.

/KC

Share this post


Link to post
Share on other sites

Fantastic news about the new placement functionality Silola. Looks like this iteration is worthy of more than a mere version 0.1 increase :)

As a discussion point, is it at all possible to add in user-defined criteria to object/waypoint placement in the same way that it's already possible to add in AI enhancement to DAC?

For example: say I use the above new functionality to return a position, I might like to add in my own function over the top of that, say find a tree around the point, or find an internal building position or something. Any function that might return a position let's say.

As an example to help visualise this, imagine that I use DAC to return a potential position, then my own function is called. It has a 75% chance of returning the original DAC position, and a 25% chance of returning a new position based on a search for an internal building position (if any), at which point I will place an ammo box, so that there is both a waypoint and an ammo box at this position.

Now, by careful observation of the patrolling group, I can see that there is a "suspicious" building and if I search it, I might find something interesting :)

Edited by DMarkwick

Share this post


Link to post
Share on other sites
-3DE it is blocked ATM :-(

:( .... I was looking forward to it. I hope you release it someday..

I hate Visitor GUI.

as for DAC... :bounce3: .. Great news.

Share this post


Link to post
Share on other sites
:( .... I was looking forward to it. I hope you release it someday..

I hate Visitor GUI.

as for DAC... :bounce3: .. Great news.

How do you mean blocked?

-

Hmm very nice Silola, the concept for the random placement of objects is awesome. :yay: i also see many uses for it, DAC will sure be must have for mission editors, i just keep thinking of creating missions with this :P The configs/triggers/ units patrolling:rolleyes: dream lol

Share this post


Link to post
Share on other sites

Thanks for trying to explain, though I can't seem to get my head around it. Regardless, thanks for contributing.

Share this post


Link to post
Share on other sites

An idea, but perhaps not a good one. :)

This would be an extension of the group-communication/hunting scenario. If a group detects a significantly larger enemy group, and if there are artillery pieces placed (or maybe even if not), then the AI troops could call in an artillery or mortar barrage?

Just thinking out loud.

Share this post


Link to post
Share on other sites

Hrmrmh? For the AI?!

Dammit, this thing needs a manual! :D

(I guess it was a good idea, though!)

Share this post


Link to post
Share on other sites

Just take DAC for ARMA I there you have a Documentation.

Then you only need to speculate about the new features :-)

Share this post


Link to post
Share on other sites

Hi :)

@anfiach

Thanks for trying to explain, though I can't seem to get my head around it. Regardless, thanks for contributing.

Sorry, but what do u mean exactly?

@DMarkwick

As an example to help visualise this, imagine that I use DAC to return a potential position, then my own function is called. It has a 75% chance of returning the original DAC position, and a 25% chance of returning a new position based on a search for an internal building position (if any), at which point I will place an ammo box, so that there is both a waypoint and an ammo box at this position.

Now, by careful observation of the patrolling group, I can see that there is a "suspicious" building and if I search it, I might find something interesting

I like that idea :)

I think the main problem is that the waypoints are unknown, which are used by the groups.

For example, if DAC is generated in a zone 50 waypoints and 2 infantry groups,

and each group gets 10 waypoints at random from the waypoint pool, then it is only known

that minimum 10 and maximum 20 waypoints are used from the pool. Nothing else.

But there is a simple solution to determine the correct waypoints,

if someone knows the internal data of DAC, as I do :D

I have prepared a small example which you can try with the old DAC version.

First you need a global array to save all the waypoints that are actually used

(for example from Zone "Z1"):

WpFromZone1 = [];

The next step is to put a magic string into the "DAC_Config_Events" and load this event with your zone:

_Events_Unit_S = [
		["{if(!(_x in WpFromZone1)) then {WpFromZone1 = WpFromZone1 + [_x]}}foreach _wparray"],
		[],
		[],
		[],
		[],
		[]
	 ];

This entry takes the waypoints from each group and stores them in the global array "WpFromZone1".

You notice the local Var "_wparray"?

Before a group is generated, the waypoints are already chosen and are cached in this array.

After a group is generated, the array is passed along with the group information to the main movement script.

The waypoints are saved as string and the array WpFromZone1 looks like this:

WpFromZone1 = ["DAC_WP_Pool_S select 4","DAC_WP_Pool_S select 12","DAC_WP_Pool_S select 27","DAC_WP_Pool_S select 31"....]

The last step is to start a script that processes all the positions (waypoints).

The following script looks at each position for a building

within a radius of 100 meters (as in your example), and generates (if possible)

a random weaponbox at a random positions, with a probability of 70%

Hint: the script is not tested.

private	["_buildings","_positions","_weaponBoxes","_nextWP","_nextBuilding","_posLogic","_i","_c","_randomPos","_randomUse","_randomBox","_newObj","_countObj"];

_buildings = [];_positions = [];_nextWP = [];_nextBuilding = objNull;_i = 0;_c = 0;_newObj = objNull;
_posLogic = "logic" createvehiclelocal [0,0,0];_randomPos = 1;_randomUse = 70;_countObj = 0;
_weaponBoxes ["USBasicWeaponsBox","USLaunchersBox","USSpecialWeaponsBox"];

while{_i < count WpFromZone1} do
{
_nextWP = call compile (WpFromZone1 select _i);
_posLogic setpos _nextWP;
_nextBuilding = nearestBuilding _posLogic;

if(((!(isNull _nextBuilding))
&& (!(_nextBuilding in _buildings))
&& ((_nextBuilding distance _posLogic) < 100)) then
{
	if(((_nextBuilding buildingpos 1) select 0) == 0) then
	{
		_i = _i + 1;
	}
	else
	{
		_buildings = _buildings + [_nextBuilding];
		if((random 100) < _randomUse) then
		{
			_c = 1;
			while{(((_nextBuilding buildingpos _c) select 0) > 0)} do {_positions = _positions + [_c];_c = _c + 1};
			_randomPos = (random ((count _positions) - 1));_randomBox = (random ((count _weaponBoxes) - 1));
			_newobj = (_weaponBoxes select _randomBox) createvehicle (_nextBuilding buildingpos _randomPos);
			_newobj setpos (_nextBuilding buildingpos _randomPos);_countObj = _countObj + 1;
		};
		_i = _i + 1;
	};
}
else
{
	_i = _i + 1;
};
};
player sidechat format["%1 weaponboxes created.",_countObj];

Maybe u can test this solution and give me some feedback ;-)

Greeting

Silola

---------- Post added at 06:57 PM ---------- Previous post was at 05:32 PM ----------

Hi and sorry,

I found 3 bugs within the script (after my first test @home) :p

Here the final version:

private	["_buildings","_positions","_weaponBoxes","_nextWP","_nextBuilding","_posLogic","_i","_c","_randomPos","_randomUse","_randomBox","_newObj","_countObj"];

_buildings = [];_positions = [];_nextWP = [];_nextBuilding = objNull;_i = 0;_c = 0;_newObj = objNull;
_posLogic = "logic" createvehiclelocal [0,0,0];_randomPos = 1;_randomUse = 70;_countObj = 0;
_weaponBoxes = ["USBasicWeaponsBox","USLaunchersBox","USSpecialWeaponsBox"];

while{_i < count WpFromZone1} do
{
_nextWP = call compile (WpFromZone1 select _i);
_posLogic setpos _nextWP;
_nextBuilding = nearestBuilding _posLogic;

if((!(isNull _nextBuilding))
&& (!(_nextBuilding in _buildings))
&& ((_nextBuilding distance _posLogic) < 100)) then
{
	if(((_nextBuilding buildingpos 1) select 0) == 0) then
	{
		_i = _i + 1;
	}
	else
	{
		_buildings = _buildings + [_nextBuilding];
		if((random 100) < _randomUse) then
		{
			_c = 1;_positions = [];
			while{(((_nextBuilding buildingpos _c) select 0) > 0)} do
			{
				_positions = _positions + [_c];_c = _c + 1;
			};
			player sidechat format["%1",_positions];
			_randomPos = (random ((count _positions) - 1));_randomBox = (random ((count _weaponBoxes) - 1));
			_newobj = (_weaponBoxes select _randomBox) createvehicle (_nextBuilding buildingpos _randomPos);
			_newobj setpos (_nextBuilding buildingpos _randomPos);_countObj = _countObj + 1;
		};
		_i = _i + 1;
	};
}
else
{
	_i = _i + 1;
};
};
player sidechat format["%1 weaponboxes created.",_countObj];

Greeting

Silola

Share this post


Link to post
Share on other sites

wow man u are a genius, god of scripting lol I'm going to have a test of this in Arma 1 although guessing by your last post you already have. I guess one more test wont hurt.

Share this post


Link to post
Share on other sites

Hi :-)

I've made again a small test ...

The initial situation consists of 3 zones and the following area

I have chosen for the test:

setuparea.th.jpg

In the first zone, different types of buildings will be generated.

These buildings should not touch any roads, and should maintain

a certain distance between each other.

The second zone should generate different trees, bushes and rocks.

These objects should also not hit any road.

In addition, they should not come into contact with the buildings.

In the last zone finally some DAC groups will be generated.

These groups should then patrol in this area and the generated

buildings will be recognized by the AI, and can be occupied by them.

Here 2 pictures from the zones configuration:

setupz.th.jpgsetup2.th.jpg

As you can see, there is a road in the middle of the area.

In the small zone, the buildings will be created.

In the polygon zone the natural objects will be generated,

and in the rectangular zone, the units are produced.

The next picture shows you where the buildings were placed:

setup3.th.jpg

You see that the road is untouched and between the buildings

enough distance is remained.

Ok, now the natural objects. The next picture shows you the result:

setup4.th.jpg

Also here you can see that the roads remain unaffected

and no object hits a building.

The last step is to generate some units within this area:

http://yfrog.com/5vsetup5pj

Now consider only whether the units properly recognize these buildings:

http://yfrog.com/5varma22009112122023151j

Another few pics:

http://yfrog.com/j4setup6j

http://yfrog.com/7dsetup7j

http://yfrog.com/j8setup8j

I know, these buildings looks not like as the visitor placed ones, but anyway

the possibilities with the DAC will continue to grow.

I hope u like it :-)

Bye

Share this post


Link to post
Share on other sites

Hi again :-)

I just wanted to give the info, that I have finished the new DAC function

for generating random objects within a zone.

For the object generation, there will be 2 versions. The fast variant

identified a position within the zone, and then placed an object

without further examination.

The slower version, checked each position according to the criteria

of the waypoint generation, and places the object only if the position meets all criteria.

On the next picture you see on the left side a zone that has been generated

with the fast version. The objects were placed without consideration of visitor placed objects...

result1u.jpg

The right zone was generated with the slow version. As you can see there,

the visitor placed objects were taken into account.

In addition, for example, in the forest areas are also no objects placed.

Both versions can be launched within one or two instances.

This means that for one zone the script can starts 2 times,

and generate the objects in parallel mode.

The following picture shows you a zone wich are running in single mode,

and there were 586 objects are generated. The other zone is running

in parallel mode and there were 957 objects are generated in the same time...

result2.jpg

There are also 2 ways to generate no objects at certain positions within a zone.

In the first way, you can simply add some objects with their names

(and a specify radius) in the script call.

The second way is to tell the script call a valid logic which has at least one waypoint.

Then the positions from each waypoint of that logic unit will be taken into account.

The next picture shows you this two methods:

result3v.jpg

Above, the method with the logic and waypoints to keep the railroad free

from some objects.

Below, the method with the objects. Two tanks, whose names were used

in the script call.

Roads are generally free from objects (optional).

result4.jpg

result5.jpg

Greeting

Silola

Share this post


Link to post
Share on other sites

I would like to write something, but I dont know what.. Maybe flabbergastling is the word?

Share this post


Link to post
Share on other sites

why do you not release it as DAC3 with all these features? :D

btw really nice work!

Share this post


Link to post
Share on other sites

Very very very nice work Silola! :eek:

We need DACv2.1 so much... :bounce3:

Share this post


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

×