Jump to content


  • Content Count

  • Joined

  • Last visited

  • Medals

  • Medals

Everything posted by Rydygier

  1. About defensive HAC tactics... In the first is determined a central point and direction of defense perimeter. HAC tries to put the defenders between the commander and the front of known enemy units or their last stored position (the last 100 positions are memorized). If enemy is too close to the commander or in the event, if the commander does not know the location of any enemy, his position becomes the center of perimeter. If do not see the enemy perimeter direction is randomized. HAC then scans surroundings in search of points of a good field of view in the direction of the enemy. Some of these positions occupy scouts and snipers. Positions for the rest of the units may be selected in two ways: either by "selectBestPalces" units are placed per type in a favorable ground or are placed in ambush on the reverse slope, wait for attackers to attack them from near and sides, by surprise. Aerial units will (re)direct to provide cover from above. ---------- Post added at 15:28 ---------- Previous post was at 15:25 ---------- Yes. It may become easier in next verison, if I will manage to add a code for deleting waypoints for such units.
  2. Info about excluded array is refreshed every cycle, so you can change this variable during the game, or set it empty, you should't only remove this (and any other) variable with "nil". However HAC does not remove waypoints already (earlier) assigned to just (during the game) excluded units.
  3. @Mjolnir66 Yes, I think, such code is good or even optimal idea. Real tactics is also very good idea, if not quite as sophisticated HAC algorithm will be able to reproduce them properly. @Taro8 To make certain groups untouchable by HAC you may use RydHQ_Excuded arrays and make they empty under certain circumstations, then, after action, re-exclude those units. But every group will keep it's last position after fight as tactical reserve. Will think, if optional returning on start positions, like recon units and choppers do, is worth introducing. Yours comments on logistical support tactics are valuable. I'll see if I can make it. ---------- Post added at 14:26 ---------- Previous post was at 14:19 ---------- In fact HAC algorithm isn't so sophisticated, as you think, but I agree, effect is rewarding. Testers and bughunters are always welcome. :)
  4. It's a big problem. HAC checks to see of what kind is each unit in the group to properly classify a given group. HAC would have to first do this analysis, then preserve the result in the variable assigned to the group, and only then it could be cached. In addition, HAC would have to refresh value of this assigned variable each time the group would be un-cached, because at that time there may occurs changes in that group.
  5. One note: currently, RHQ and RHQB arrays should contain classnames of the same units, and all of them, regardless of which side uses them. In fact, currently you can itself ease task, and after entering RHQ arrays can, instead of copying (repeat) the same content for RHQB you can just use this shortcut: RHQB_CertainCategory = RHQ_CertainCategory;. Nevertheless, for now I intend to keep separate category arrays for each side, since such a division may be needed in the future.
  6. Commander makes decisions based on the status of all their forces and based on the status of all known enemies, not just leaders (number of groups). While enemies are unknown, may be safely 'cached', but I'm afraid that will also be cached allied units. In that case, HAC considers that they "died" and will adjust behavior for such circumstances, if alive remaining only leaders of such groups, and this is bad ... ---------- Post added at 12:38 ---------- Previous post was at 12:36 ---------- This is very good idea and should work just fine. :) EDIT: There may be a difference compared to the occupation of the first objective. HAC may not send scout ahead, and immediately send other units, because from his point of view, continues to keep the same objective, and yet it has already been under recon units attention. However, HAC should "feel the need" to renew reconnaissance once every 10 minutes.
  7. This is the formula: _delay = (((22.5 + (count RydHQ_Friends))/(0.5 + RydHQ_Reflex)) * RydHQ_CommDelay); (count RydHQ_Friends) is equal to actual number of group under HAC control, RydHQ_Reflex is leaders attribute with value from 0 to 1. CommDeay is equal to 1 until manually changed. So it gives from about 15, when there is a few groups and high Reflex to about 180 seconds, when 100 groups under control and with lowest Reflex. But you should also remember that with the normal settings cycle of one side does not begin until the cycle other side continues, sometimes also time of issuing commands is longer than this interval, so in total cycle may be longer ... ---------- Post added at 21:38 ---------- Previous post was at 21:32 ---------- Tried, in fact. Was designing this addon so that it worked well with the "Fire at Will" and I think they work very well together. I prepared myself a little, simple mission, where I was just a private and impression gained from the battlefield resulting from cooperation FAW with HAC has proved very satisfactory. It is worth in the FAW to reduce a length interval between salvos to about 30 seconds. @SteveJA360 Thanks a lot for your presentation!
  8. Well, yes. Recklessly in RydHQInit.sqf I used "if (isNil (" leaderHQ ")) exitwith {};" instead waituntil ... In the next version this will be changed, but for now there are two possibilities: To stop initialization script to the appearance of the commander and / or its objective, using a variable RydHQ_Wait (eg RydHQ_Wait = 300 gives 5 minutes), or use a script version of the HAC and init script RydHQInit.sqf by "nul = [] execVM "RydHQInit.sqf" only when everything is ready. You can even automate this with a separate init code: waituntil {sleep 1;not ((isNil ("leaderHQ")) or (isNil ("leaderHQB")))}; nul = [] execVM "RydHQInit.sqf; or something similar. In each cycle, commander checks to see if and what allied and known enemy units are on the map, so will discover new units in the next cycle. ---------- Post added at 16:44 ---------- Previous post was at 16:40 ---------- Indeed. This is exactly my goal. :) EDIT: @Kremator: "(commanders, HQs, forces etc)" In this addon leader and HQ is the same. You need one unit named leaderHQ and that's it. However, objective very enlivens a simulation (object, eg the empty trigger, named RydHQ_Obj). Similarly for the other side of the conflict, if necessary, and that's all.
  9. You mean detection of dead body? It probably is to be done via command selectBestPlaces. Even will not need much change. I must only consider whether the presence of dead bodies should in some way affect the decisions of the commander ... Separate thread for arrays with classnames? If this addon proves popular enough - why not? I will also add prepared arrays to new versions of HAC.
  10. I have prepared for my own needs something, that can also be useful to others - complete RHQ/RHQB category arrays for afrenian and molatian units from great Icebreakr's Duala Isle. You may just copy and paste it wherever you want to initialize them. RHQ_Recon = ["MOL_Soldier_Spotter","AFR_Soldier_Spotter"]; RHQ_Snipers = ["AFR_Guard_Marksman","AFR_Soldier_Sniper","MOL_Soldier_Marksman","MOL_Soldier_Sniper","ibr_rebel132"]; RHQ_ATInf = ["AFR_Soldier_AT","AFR_Soldier_LAT","AFR_Soldier_HAT","MOL_Soldier_AT","MOL_Soldier_LAT","MOL_Soldier_HAT","ibr_rebel102","ibr_rebel83","ibr_rebel95"]; RHQ_AAInf = ["AFR_Soldier_Igla","AFR_Soldier_Stinger","MOL_Soldier_AA","ibr_rebel111"]; RHQ_Inf = ["AFR_Guard_AK","AFR_Guard_M1014","AFR_Guard_M16","AFR_Soldier_Officer","AFR_Soldier_Medic","AFR_Soldier_Engineer","AFR_Soldier_Rifleman","AFR_Soldier_GL","AFR_Guard_Marksman","AFR_Soldier_Sniper","AFR_Soldier_Spotter","AFR_Guard_AR","AFR_Soldier_MG","AFR_Soldier_AT","AFR_Soldier_LAT","AFR_Soldier_HAT","AFR_Guard_AA","AFR_Soldier_Crew","AFR_Soldier_Pilot","AFR_Guard_M9","AFR_Officer","AFR_Rifleman","AFR_Soldier_Igla","AFR_Soldier_Stinger","AFR_Medic","MOL_Soldier_Officer","MOL_Soldier_Medic","MOL_Soldier_Engineer","MOL_Soldier_Rifleman","MOL_Soldier_GL","MOL_Soldier_Marksman","MOL_Soldier_Sniper","MOL_Soldier_Spotter","MOL_Soldier_AR","MOL_Soldier_MG","MOL_Soldier_AT","MOL_Soldier_LAT","MOL_Soldier_HAT","MOL_Soldier_AA","MOL_Soldier_Crew","MOL_Soldier_Pilot","MOL_Soldier_Commando","ibr_rebel11","ibr_rebel22","ibr_rebel33","ibr_rebel44","ibr_rebel55","ibr_rebel66","ibr_rebel77","ibr_rebel83","ibr_rebel95","ibr_rebel102","ibr_rebel111","ibr_rebel125","ibr_rebel132","ibr_rebel145","ibr_rebel151","ibr_rebel162","ibr_rebel173","ibr_rebel184","ibr_rebel195","ibr_rebel206","ibr_rebel217","ibr_mutant"]; RHQ_HArmor = ["ibr_LEO1A5","ibr_T55","T72_MOL"]; RHQ_LArmor = ["BMP2_MOL"]; RHQ_LarmorAT = ["BMP2_MOL"]; RHQ_Cars = ["AFR_Pinz","AFR_Pinz_police","ibr_datsun_afr","ibr_datsun_afrblk","ibr_datsun_afrpol","ibr_datsun_mol","ibr_datsun_molblk","Ural_MOL"]; RHQ_Air = ["ibr_as350","ibr_as350_armed","ibr_as350_specops","ibr_as350_jungle","ibr_viggen1","ibr_viggen2","ibr_viggen3","ibr_viggen4","ibr_gazelle","ibr_gazelle_armed","ibrPRACS_MiG21mol","ibrPRACS_MiG21_AGmol","PRACS_Su24Fencer"]; RHQ_Cargo = ["AFR_Pinz","AFR_Pinz_police","ibr_as350","ibr_as350_specops","ibr_as350_jungle","Ural_MOL","ibr_gazelle","ibr_as350_armed","BMP2_MOL","ibr_datsun_afr","ibr_datsun_afrblk","ibr_datsun_afrpol","ibr_datsun_mol","ibr_datsun_molblk"]; RHQ_NCCargo = ["AFR_Pinz","AFR_Pinz_police","ibr_as350","ibr_as350_specops","ibr_as350_jungle","Ural_MOL","ibr_gazelle"]; RHQ_Crew = ["AFR_Soldier_Crew","AFR_Soldier_Pilot","MOL_Soldier_Crew","MOL_Soldier_Pilot"]; RHQB_Recon = ["MOL_Soldier_Spotter","AFR_Soldier_Spotter"]; RHQB_Snipers = ["AFR_Guard_Marksman","AFR_Soldier_Sniper","MOL_Soldier_Marksman","MOL_Soldier_Sniper","ibr_rebel132"]; RHQB_ATInf = ["AFR_Soldier_AT","AFR_Soldier_LAT","AFR_Soldier_HAT","MOL_Soldier_AT","MOL_Soldier_LAT","MOL_Soldier_HAT","ibr_rebel102","ibr_rebel83","ibr_rebel95"]; RHQB_AAInf = ["AFR_Soldier_Igla","AFR_Soldier_Stinger","MOL_Soldier_AA","ibr_rebel111"]; RHQB_Inf = ["AFR_Guard_AK","AFR_Guard_M1014","AFR_Guard_M16","AFR_Soldier_Officer","AFR_Soldier_Medic","AFR_Soldier_Engineer","AFR_Soldier_Rifleman","AFR_Soldier_GL","AFR_Guard_Marksman","AFR_Soldier_Sniper","AFR_Soldier_Spotter","AFR_Guard_AR","AFR_Soldier_MG","AFR_Soldier_AT","AFR_Soldier_LAT","AFR_Soldier_HAT","AFR_Guard_AA","AFR_Soldier_Crew","AFR_Soldier_Pilot","AFR_Guard_M9","AFR_Officer","AFR_Rifleman","AFR_Soldier_Igla","AFR_Soldier_Stinger","AFR_Medic","MOL_Soldier_Officer","MOL_Soldier_Medic","MOL_Soldier_Engineer","MOL_Soldier_Rifleman","MOL_Soldier_GL","MOL_Soldier_Marksman","MOL_Soldier_Sniper","MOL_Soldier_Spotter","MOL_Soldier_AR","MOL_Soldier_MG","MOL_Soldier_AT","MOL_Soldier_LAT","MOL_Soldier_HAT","MOL_Soldier_AA","MOL_Soldier_Crew","MOL_Soldier_Pilot","MOL_Soldier_Commando","ibr_rebel11","ibr_rebel22","ibr_rebel33","ibr_rebel44","ibr_rebel55","ibr_rebel66","ibr_rebel77","ibr_rebel83","ibr_rebel95","ibr_rebel102","ibr_rebel111","ibr_rebel125","ibr_rebel132","ibr_rebel145","ibr_rebel151","ibr_rebel162","ibr_rebel173","ibr_rebel184","ibr_rebel195","ibr_rebel206","ibr_rebel217","ibr_mutant"]; RHQB_HArmor = ["ibr_LEO1A5","ibr_T55","T72_MOL"]; RHQB_LArmor = ["BMP2_MOL"]; RHQB_LarmorAT = ["BMP2_MOL"]; RHQB_Cars = ["AFR_Pinz","AFR_Pinz_police","ibr_datsun_afr","ibr_datsun_afrblk","ibr_datsun_afrpol","ibr_datsun_mol","ibr_datsun_molblk","Ural_MOL"]; RHQB_Air = ["ibr_as350","ibr_as350_armed","ibr_as350_specops","ibr_as350_jungle","ibr_viggen1","ibr_viggen2","ibr_viggen3","ibr_viggen4","ibr_gazelle","ibr_gazelle_armed","ibrPRACS_MiG21mol","ibrPRACS_MiG21_AGmol","PRACS_Su24Fencer"]; RHQB_Cargo = ["AFR_Pinz","AFR_Pinz_police","ibr_as350","ibr_as350_specops","ibr_as350_jungle","Ural_MOL","ibr_gazelle","ibr_as350_armed","BMP2_MOL","ibr_datsun_afr","ibr_datsun_afrblk","ibr_datsun_afrpol","ibr_datsun_mol","ibr_datsun_molblk"]; RHQB_NCCargo = ["AFR_Pinz","AFR_Pinz_police","ibr_as350","ibr_as350_specops","ibr_as350_jungle","Ural_MOL","ibr_gazelle"]; RHQB_Crew = ["AFR_Soldier_Crew","AFR_Soldier_Pilot","MOL_Soldier_Crew","MOL_Soldier_Pilot"]; To do: separate category for unarmed aerial units, make the script does not use such units as air support.
  11. Try without addon version with that demo: HAC Demo or add following to western comannder's or any other unit's init field: I am afraid that I put the demo without additional parameters. : / I do not know how it happened.
  12. Hetman was created about three weeks, on 6-10 hours a day. The longest lasted, it dealt with the trigonometric problems. School geometry lessons were forgotten years ago. :) Just how long does the implementation depends on many factors. What is concerns, how well hidden there are errors (almost always there are errors to hunt), how much have time for this ... This time, will delay me last issue. We know, Christmas, New Year, family, etc. ... Also simply need a short rest break. Otherwise, currently proposed changes, if I would not stuck somewhere, would be introduced in a few days, maybe a week, if you count tests. But it's still worth a little wait, it can gather more comments, observations and ideas. Better one big update than a few small ones. Thanks for info about Mechanized Infantry Tactics Addon. Will check this.
  13. To do: Make surrender the army actually ended the fight. Currently, infantry properly surrenders, but for example tanks continue to fight (probably other vehicles as well). Also victorious army continues shooting at captives (cruel bastards, interesting, why they do it, maybe setCaptive did not work well)...
  14. Added to my list "good ideas to think about". Thanks. Hmm. I will do this: to end of the year will wait for comments and ideas, and, let's say, in January I will gather all together and prepare a new version with those, that I deem good and that I manage to introduce. However, serious bugs, if any will be found, I will try to fix up as quick as possible. OK, folks? :) ---------- Post added at 20:33 ---------- Previous post was at 20:24 ---------- All air units after its attack receive from HAC a command "to land" at the point, from which were started (command "land"), but, so far as I know, it works only with helicopters. Script can not bring a plane at landing site, because the appropriate command "landAT" requires a specific airport ID. So I think, that behaviour does not come from HAC.
  15. @Mjolnir66 :) yep. I decided to use a simple prescription for victory by Napoleon B. Bind the enemy from the front, then outflank and kill him, or something. You mean the normal chain of command? Theoretically, is probably possible, although this would require very fundamental changes in the code. Would have to write it in large parts from scratch. Technically, I have concerns that any system able to carry as many iterations for so many commanders. Will think, but, to be honest, small chances for that. ---------- Post added at 17:50 ---------- Previous post was at 16:49 ---------- For now - very small update, to beta2. Fixed some stupid error with cars and demo mission added to a package.
  16. OK. It should also be simple. In fact, even in this version personality is randomized, if not specified separately, but by randomize each attribute separately. Impatient could, moreover, to prepare a simple code that will do it and put it eg to init.sqf. Something like: _rnd = random 100; if (_rnd < 20) then {RydHQ_Personality = "GENIUS"}; if ((_rnd >= 20) and (_rnd < 40)) then {RydHQ_Personality = "IDIOT"}; if... and so on.
  17. Multiple objecitves should be easy to implement, so - in next version perhaps, but need to consider how commander chooses the objective to deal with at the time. Well. I will think about this too. :) Thanks for idea.
  18. Ha ha, you see? I did not know even that about multi. :). Hmm. So, who knows, maybe in next year will study all this MP scripting. Thanks for info!
  19. Yes. Script will remove previously added waypoints for all units under HAC control when will give the first command to them. Only, you can do with this is use an RyHQ(B)_Excluded array for some units to bring them out of HAC control.
  20. Well. Theoretically, should be possible to reconfigure the scripts accordingly, but maximum number of leaders probably will be always strictly set. I promise nothing, but I will think...
  21. @Mikey74 RydHQ_Debug is simply a global variable. The script periodically checks its value. To set this (and any other variable specified in the manual), you need to place the code that defines a particular variable with properly value, where will be executed in the appropriate time. So if you want to have debug mode from the beginning, you have to put "RydHQ_Debug = true" in a place where it will be executed at the start of the mission, that is, for example in the "init" of any unit/object. Placed in the "act" trigger code will work in a time, when trigger conditions are met. Here is a small demo on Utes for script version: HACDemo There isn't enouhg space for proer maneuvers, but you can see, how mission with debug and personalities is set. Other variables shall be defined similarly. For addon you shall simply remove following code: nul = [] execVM "RydHQInit.sqf" and some screen (sorry for poor res...) I hope, this will be helpful. About support... HAC by assumption operates on waypoints. Probably would be possible to make the commander to send an ambulance near the wounded or repair truck to damaged vehicle, but rather nothing more. I would prefer not to intervene directly in the activity of individual units. It should only assign them waypoints. I will think about that. ---------- Post added at 12:13 ---------- Previous post was at 11:41 ---------- 1. Commander will send up to three groups of infantry and up to two vehicles and no more, than one chopper/plane to destroy one enemy group. It reflects, I think, a reasonable preferred ratio. On type of enemy group depends the type of units that commander try to send in the first place. Then, among the units of a given type chooses those, tha are closer target. Then determines if there are no circumstances which would make risky to send the unit (terrain, presence on the battlefield enemy anti-tank weapons (if present, decides not to send more armored vehicles) etc, with some random factor multiplied by attributes of leaders personality). At the end verifies that the target is already attacked by a sufficient number of units. If not, reaches for another unit, if so, go to the next kind of targets (one target of given kind will be attacked per cycle, but given target can belong to several kinds). 2. Yes. Leader will keep recon and attack reserves (how numerous - depends on leader personality). Those unit will be gradually used by time. To keep some units in reserve for moment of your choose you can put its leaders names into RydHQ_Excluded or, for "B" side, into RydHQB_Excluded array (example in manual) and next to empty this array, when those units shall be used in battle. 3. I'm glad you asking. HAC should works great with this: Fire at Will addon 4. I think that while he does not see a lot of enemies, the commander will be gradually sent to the area of its objective combat units until it sends all. If you want to stop sending, you have to remove the object from the map RydHQ_Obj (RydHQB_Obj for "B" side) or to use RdHQ_Excluded array. I will think, how to make this more user friendly. 5. See my above post about support. Currently there are no units sent into battle without ammunition. ---------- Post added at 12:16 ---------- Previous post was at 12:13 ---------- See just added demo mission. I hope it will help. ---------- Post added at 12:24 ---------- Previous post was at 12:16 ---------- HAC,I guess, will work fine with ACE if you add under HAC control classnames of ACE's units. See manual (RHQ and RHQB category arrays) to learn, how achieve this. Drones are in air units category, so no, leader rather not send them into area with AA's. In fact HAC control of drones is not tested, I'm not sure, how drone putted flying over map will behave with HAC control... ---------- Post added at 12:32 ---------- Previous post was at 12:24 ---------- You can add also AO units under HAC control, as I mentioned just above (same way as ACE units) This is one of the possibilities. You can define these variables for any effective manner. For example, in the init field of some unit (see demo mission). Only that (bolded in manual) you should input: RydHQ_Personality = „GENIUSâ€; The rest is just a description of the effects (with how values "genius" will set attributes). Yes, thats it. RydHQ_ variables are for "A" side only, analogously RydHQB_ variables are for "B" side.
  22. Thanks a lot, Foxhound! I wish I could say that it works in MP, but I can not. I know not enough to design scripts to make them work in MP. You can try, but I have no idea whether the addon will work in multiplayer. Even if one day I will know the ins and outs of this knowledge, I have virtually no possibility of testing scripts in MP. Sorry. For patient and ambitious remains possibility of adapting scripts on their own, but it's in total several thousands lines of code. ---------- Post added at 23:43 ---------- Previous post was at 23:35 ---------- I think addon creates many interesting possibilities. Beginning with mission "the hunt for an enemy commander." I am counting on unlimited imagination of Arma maniacs. :)
  23. Addon itself does not change position of "RydHQ_Obj" but mission maker can do it via script (and it may be mobile object). Addon will "notice" this change and take it into account with next cycle. Yes, leaderHQB knows nothing about "RydHQ_Obj". His interest in his own objective - object named "RydHQB_Obj". Yes, units that appear on the map during the game will be taken into consideration during next cycle. EDIT: It should be noted that because almost every team has infantry anti-tank weapons, tanks will be sent with care. I hope that not too carefully. I really wanted to do something like that for Arma. Ambitions nearly outgrown me, code is not perfect and certainly not optimal, but it does its job. I'm also going to use it often.
  24. I'm glad you like it, Katipo66. LeaderHQ will hold its position if is AI-controlled (script assigns him a waypoint "hold" on his position). Yes, you better hide him somewhere behind and keep well guarded. :)