My issue is, the CPU's units reach a waypoint, but get waiting in there for a while before heading to the next one, when they should IMMEDIATELY be getting there, non-stop. How do I fix that?
The tug-of-war segment I'm creating is to use streams, kind of like the Zerg rushes from the LotV final mission (The Keystone defense mission), to differentiate the Zerg waves from Terran/Protoss, which walk in pack.
Normally, you'd just need to set up/copy the triggers from that mission. But the thing is, I wished to use the AI for that. In other words, I want the AI to build the units (Bullies already got that covered), or use those already available in his base, instead of just spawning them off corners, giving the impression of a real tug-of-war segment.
If I understand correctly, you're sending units using the attack wave function. In my experience, the units in attack waves will stick together. Your problem might be coming from having differing speeds among your units. If that's the case, they'll walk for a bit, then pause so everyone can catch up, then resume.
And now as for the unit building part: You an just use the issue order trigger so that buildings are ordered build the units you want... Then have that trigger on a timer that repeats forever, so that the buidlings endlesssly create units every the timer action expires...
Quite impossible, as there's separate waves per unit type, so speed shouldn't be a problem, especially between Zerg units. The issue is, they wait a bit on each waypoint, when they should be moving, and then when the other units catch up, it clumps up and screws everything. That's the issue here, the delay the units have, moping in the waypoint, something you'll notice doesn't happen in either WoL/HotS/LotV campaign missions.
Already tried that, didn't budge much. An alternative would be to do the AI version of issuing order, but there's no queue ability to it (Replace Existing Order/After Existing Order). And as I said, it'd be pretty easy to either cut corners and do off-map/burrowed spawning or do as you say and make it twice as masochistic, but it wouldn't sell either way. I WANT to make sure the AI *IS* building and sending units on it's own, or at least an illusion of it, with as little to no gimmick to it as possible.
Quite impossible, as there's separate waves per unit type, so speed shouldn't be a problem, especially between Zerg units. The issue is, they wait a bit on each waypoint, when they should be moving, and then when the other units catch up, it clumps up and screws everything.
Are you using an AI personality with waves you built, or are you simply picking each unit, adding them to the next attack wave, and then sending the attack wave? And how many waypoints are you using in the attack waves? Is there a way you can remove a waypoint or two, so that the meetings aren't in choke points?
Well, I won't do that, because it's simply too big and too messy to understand, despite my efforts to organize it. That's because it encompasses, at least, SIX Zerg AIs and the respective, single unit types, mostly base units like Lings, Banes, Roaches, Hydras and Mutas. It's mostly ran on variable calculations on Random Integer for both unit quantity (per difficulty), lane selection (per stage progress), timing and even the number of individual 'waves' sent. Yeah, it's kind of a giant math monster for a simple tug-of-war segment.
What I can do is summarize what I attempted thus far. First was the simple 'pocket' stuff, copied mostly from WoL's 'Breakout' mission to begin with, but it kind of ran stale by the 13th test run. It wasn't fast or intense enough, and didn't feel zergy, hence why I changed it to 'streaming', it makes sense with them. Pocket/balls are more Terran/Protoss stuff.
Of course I tried insisting on individual AI waves, based on the repetition count of how many times it'd be done, each lane individually configured. The BIGGEST problem is exactly the delay between waypoints. While you can argue it's the quantity I've put, it's that I don't want them to wander off the tracks because of some battle or anything. The delays are between 3-7 seconds ingame and thus, as the units are sitting around, doing nothing, traffic clutters up, and I consider it fatal. You can't factor different speeds into this because it's a single type of unit, all have the same speed and all reach the point at the same time, but somehow they get stuck up because... reasons!
As an alternative, I've tried going the 'manual' way, aka 'Pick units, order them, etc.' Now, it'd save a lot of AI use, it'd just need to rebuild bullies, as well as it'd be ideal, weren't for THREE problems, exactly with 'lassoing' the units. First of all, as you use the 'pick units' trigger and set the max count, there's a BIG chance it'd pick up the same unit, already doing it, over and over. Now, the solution would be assigning it to a unit group dedicated to the attack wave, but it'd only solve THAT problem. Second, I don't know why they didn't do it, but Blizzard DIDN'T put a 'Unit is Idle' condition, which'd make this task IMMEASURABLY for the better, as separating the chaff from the wheat (idle from busy units), would allow me to put new pairs of units or a single new unit, not the same over and over. And finally, and this is a big one, somehow they mostly won't go for it unless I try what I tried below, the third thing.
The third was an attempted hybrid of both mentioned above. The procedure is this, it'd mount the attack wave, launch it, add it to a particular group, then cancel the wave and use the units lassoed in the unit group to order manually. Would sound brilliant, except the AI overrides stuff and just sends them home, staying still, save for some exception which are more a glitch, as the AI pathing delay is still there.
I'm literally on the verge of cancelling this work here because of this one thing. Note: It's the first mission, and terrain and script for virtually the whole campaign was done virtually THREE MONTHS AGO!
It seems I found the solution, after all, after MONTHS of headache. I think I should share it, if anyone else would wish to make a streaming attack of their own too.
My attack systems mostly run on random variables of multiple sorts - One for the type of attack wave, one for the quantity and type of units in the wave, one for the direction selected. As this one covers the streaming type, here's how it is - For each type and quantity of variable added, a trigger runs on a periodic timer (With a 'boolean' lock to prevent overlapping) in which each idle unit is selected, and then runs on a 'If-Then' procedure - If the unit is the type I want, it's added to a local 'idle' group.
Then, I pick the supposed quantity (Qty) out of the 'idle' group, take it OFF that group and add to an exterior unit group (Non-local) which then runs on a waypoint pattern I wish. Of course, according to a bit of delay to avoid issues.
It's not so perfect, but it's my best shot and I believe it works. Guess I can now continue work and the campaign won't die, it seems.
Here's an image of the example I mentioned.
ATTACHMENTS
Solution.jpg
Rollback Post to RevisionRollBack
The Light will blind you. Step away from it!!!
To post a comment, please login or register a new account.
My issue is, the CPU's units reach a waypoint, but get waiting in there for a while before heading to the next one, when they should IMMEDIATELY be getting there, non-stop. How do I fix that?
Are you talking attack wave waypoints?
The same. Let me be more specific.
The tug-of-war segment I'm creating is to use streams, kind of like the Zerg rushes from the LotV final mission (The Keystone defense mission), to differentiate the Zerg waves from Terran/Protoss, which walk in pack.
Normally, you'd just need to set up/copy the triggers from that mission. But the thing is, I wished to use the AI for that. In other words, I want the AI to build the units (Bullies already got that covered), or use those already available in his base, instead of just spawning them off corners, giving the impression of a real tug-of-war segment.
Too much confusing an explanation, isn't it?
If I understand correctly, you're sending units using the attack wave function. In my experience, the units in attack waves will stick together. Your problem might be coming from having differing speeds among your units. If that's the case, they'll walk for a bit, then pause so everyone can catch up, then resume.
have a region that encases each point, then have a trigger simelar to this one for each point:
-Events
Any unit enters "Region around Point A"
-Conditions
-Variables
-Actions
Pick each unit in "Region around Point A" excluding "Missile, Dead, etc." and do actions:
-Actions
Order "picked Unit" to move targeting point "Point B"
And now as for the unit building part: You an just use the issue order trigger so that buildings are ordered build the units you want... Then have that trigger on a timer that repeats forever, so that the buidlings endlesssly create units every the timer action expires...
Sorry for the delay, I was frying some frenchies for dinner. Tasty... ;)
@LucidIguana: Go
Quite impossible, as there's separate waves per unit type, so speed shouldn't be a problem, especially between Zerg units. The issue is, they wait a bit on each waypoint, when they should be moving, and then when the other units catch up, it clumps up and screws everything. That's the issue here, the delay the units have, moping in the waypoint, something you'll notice doesn't happen in either WoL/HotS/LotV campaign missions.
@AlexanderNova: Go
Already tried that, didn't budge much. An alternative would be to do the AI version of issuing order, but there's no queue ability to it (Replace Existing Order/After Existing Order). And as I said, it'd be pretty easy to either cut corners and do off-map/burrowed spawning or do as you say and make it twice as masochistic, but it wouldn't sell either way. I WANT to make sure the AI *IS* building and sending units on it's own, or at least an illusion of it, with as little to no gimmick to it as possible.
Can you post the trigger code?
My off the cuff guess is that somehow, the wave believes not all its members have arrived at the point.
How large are the waves, both in count and in collision size (roughly).
Are you using an AI personality with waves you built, or are you simply picking each unit, adding them to the next attack wave, and then sending the attack wave? And how many waypoints are you using in the attack waves? Is there a way you can remove a waypoint or two, so that the meetings aren't in choke points?
@ArcaneDurandel: Go
Well, I won't do that, because it's simply too big and too messy to understand, despite my efforts to organize it. That's because it encompasses, at least, SIX Zerg AIs and the respective, single unit types, mostly base units like Lings, Banes, Roaches, Hydras and Mutas. It's mostly ran on variable calculations on Random Integer for both unit quantity (per difficulty), lane selection (per stage progress), timing and even the number of individual 'waves' sent. Yeah, it's kind of a giant math monster for a simple tug-of-war segment.
What I can do is summarize what I attempted thus far. First was the simple 'pocket' stuff, copied mostly from WoL's 'Breakout' mission to begin with, but it kind of ran stale by the 13th test run. It wasn't fast or intense enough, and didn't feel zergy, hence why I changed it to 'streaming', it makes sense with them. Pocket/balls are more Terran/Protoss stuff.
Of course I tried insisting on individual AI waves, based on the repetition count of how many times it'd be done, each lane individually configured. The BIGGEST problem is exactly the delay between waypoints. While you can argue it's the quantity I've put, it's that I don't want them to wander off the tracks because of some battle or anything. The delays are between 3-7 seconds ingame and thus, as the units are sitting around, doing nothing, traffic clutters up, and I consider it fatal. You can't factor different speeds into this because it's a single type of unit, all have the same speed and all reach the point at the same time, but somehow they get stuck up because... reasons!
As an alternative, I've tried going the 'manual' way, aka 'Pick units, order them, etc.' Now, it'd save a lot of AI use, it'd just need to rebuild bullies, as well as it'd be ideal, weren't for THREE problems, exactly with 'lassoing' the units. First of all, as you use the 'pick units' trigger and set the max count, there's a BIG chance it'd pick up the same unit, already doing it, over and over. Now, the solution would be assigning it to a unit group dedicated to the attack wave, but it'd only solve THAT problem. Second, I don't know why they didn't do it, but Blizzard DIDN'T put a 'Unit is Idle' condition, which'd make this task IMMEASURABLY for the better, as separating the chaff from the wheat (idle from busy units), would allow me to put new pairs of units or a single new unit, not the same over and over. And finally, and this is a big one, somehow they mostly won't go for it unless I try what I tried below, the third thing.
The third was an attempted hybrid of both mentioned above. The procedure is this, it'd mount the attack wave, launch it, add it to a particular group, then cancel the wave and use the units lassoed in the unit group to order manually. Would sound brilliant, except the AI overrides stuff and just sends them home, staying still, save for some exception which are more a glitch, as the AI pathing delay is still there.
I'm literally on the verge of cancelling this work here because of this one thing. Note: It's the first mission, and terrain and script for virtually the whole campaign was done virtually THREE MONTHS AGO!
SOLVED
It seems I found the solution, after all, after MONTHS of headache. I think I should share it, if anyone else would wish to make a streaming attack of their own too.
My attack systems mostly run on random variables of multiple sorts - One for the type of attack wave, one for the quantity and type of units in the wave, one for the direction selected. As this one covers the streaming type, here's how it is - For each type and quantity of variable added, a trigger runs on a periodic timer (With a 'boolean' lock to prevent overlapping) in which each idle unit is selected, and then runs on a 'If-Then' procedure - If the unit is the type I want, it's added to a local 'idle' group.
Then, I pick the supposed quantity (Qty) out of the 'idle' group, take it OFF that group and add to an exterior unit group (Non-local) which then runs on a waypoint pattern I wish. Of course, according to a bit of delay to avoid issues.
It's not so perfect, but it's my best shot and I believe it works. Guess I can now continue work and the campaign won't die, it seems.
Here's an image of the example I mentioned.