Should consider giving the doodads the ability to change their appearance randomly ONCE. So once discovered, they can try to get out of sight of the enemy and tap that transform, to try to hide again.
I just hope that submitted maps are quickly noted as winning or not. I don't care so much about all the technical stuff, I more care if they take months to announce a winner and I can't publicly post my map waiting. :/
Well, I haven't delved much into how Blizzard handles the normal AI, but I do know whenever they want specialized tasks they utilize trigger-based issue orders. This may be what you'll end up doing depending on how customized this AI is going to be, and with all the conditions you wrote up there it sounds like you'll be writing a lot of logical code to make it work as you envision it (aka: take a lot of time).
I wrote an AI for a custom map, but mine is entirely done as I explained above. You may be able to set Wave destinations and tactical AI filters to achieve some of the ideas you have, but I haven't delved into this area too much as I haven't needed to use it. Your bet is likely to explore the campaign maps and see if you can find how they handle AI related operations and mimic their systems.
Most people who know how to do these sort of ordeals are likely really busy working on their own maps, and they likely got their knowledge from discovering a Blizz map utilizing the system, anyways.
So, Nova comes packed with a sniper gun, and an animation where she uses a "melee attack" with a light saber. Here's my question:
How difficult is it for a 3d modeler at this time to export this model, remove the gun she is always wielding, along with the light saber, and create it into a format that is easy to re-import?
Then to top this off, how hard would it be to manufacture an arsenal of potential melee/ranged weapons for Nova that would fit well in her hand, as a separate model (In this list also include her default weapon and the light saber).
If this is really easy, I'd love for someone to do this real quick. If not for me, I'd love to create a quick package for players interested in doing an RPG to utilize this model to allow them to hot swap weapons according to items picked up.
That's my inquiry/request. If this is a more complicated task than it seems, then just reply that it'll take some work and I'll be on my way.
Review your actor links and see if it has a starting point and impact point, if you changed models the beam may fail if the attachment points don't exist on the new model, among other potential issues.
This was giving me a lot of aggravation, but I figured it out! I wanted to share in case anyone else ever needs to have an iron grip on their ability charges.
First, I couldn't figure out HOW to edit the charges directly. So I did a hackjob to make it happen. It seems the display number is done by MaxCount, and you can use this to give the illusion of showing the number of charges.
The whole REASON i wanted to do this is that regeneration of charges seems to be additive, e.g. if you have 0 charges on a 10 max capacity charge, with a 2 sec recharge rate, it will take 20 seconds to regenerate 1 charge (wtf?), and if you have 9 charges on a 10 max, it'll take 2 seconds to regenerate 1 charge...
Well, and also charge use is a bit mucked up when you use multiple levels too. So! Here's my trigger-based charge system.
Key action is this:
Catalog - Set value of Abilities "TossGrenade" "Cost[0].Charge.CountMax" for player x to (String(GrenCount))
Here's some snippets from my code I wrote, some variables to note for my example:
the ability is called Nova - Toss Grenade (ID: TossGrenade). This ability has 5 trainable levels, each level the maximum charge amount increses by 5.
This skill can only be learned on one Unit, who is tracked by a xHero[0] variable.
x is my default index counter, usually looping through Player numbers.
GrenadeRegen is a global variable integer that I use to track if it's been the duration I want to regenerate a charge (in my case, 10 seconds)
GrenCount is my global variable integer for tracking how many charges the hero has of the skill.
I set the ability to not cost any charges to use. Also when the ability is learned, I use a catalog set to accurately report the number of charges (all charge information is 0 on this skill's ability data info). Then, I manually track the usage of charges like so:
TossGrenade
Events
Unit - Any Unit uses Nova - Nova - Toss Grenade at Effect3 - Cast stage (Ignore shared abilities)
Local Variables
Conditions
Actions
General - If (Conditions) then do (Actions) else do (Actions)
If
GrenCount > 0
Then
Variable - Modify GrenCount: - 1
Catalog - Set value of Abilities "TossGrenade" "Cost[0].Charge.CountMax" for player (Triggering player) to (String((GrenCount + 0)))
General - If (Conditions) then do (Actions) else do (Actions)
If
GrenCount < 1
Then
Unit - Disable the Nova - Toss Grenade ability for (Triggering unit)
Else
Else
I then have a global timer system that goes off every 1 second (for other reasons, but added this into it). and runs this check: - Increase Grenade Counters
General - If (Conditions) then do (Actions) else do (Actions)
If
(Unit type of xHero[x]) == Nova - Nova (Hero)
GrenCount < (((Current level for ability Nova - Toss Grenade on xHero[x]) + 1) * 2)
Then
Variable - Modify GrenadeRegen: + 1
General - If (Conditions) then do (Actions) else do (Actions)
If
GrenadeRegen > 5
GrenCount < (((Current level for ability Nova - Toss Grenade on xHero[x]) + 1) * 2)
(xHero[x] has Nova - Toss Grenade) == true
Then
Unit - Enable the Nova - Toss Grenade ability for xHero[x]
Variable - Set GrenadeRegen = 0
Variable - Modify GrenCount: + 1
Catalog - Set value of Abilities "TossGrenade" "Cost[0].Charge.CountMax" for player x to (String(GrenCount))
Else
Else
Isn't this going to spam the hell out of your speakers with a hellion attack impact? XD
If nothing else, combine your two loops. you're running two "pick each" units on the same unit group every 0.01 seconds, doubling your thread count. You can write both condition checks within the same 1 loop.
BUT ON TO MY SUGGESTION. heh.
I don't get why you need it to be 0.01 seconds. That's 10 milliseconds, players don't even have that sort of latency. But since you seem adament about it, here's a way I would think to optimize things. First create a loop trigger that has a longer timer a e.g. 200 milliseconds (0.2 seconds ) that checks for units matching the event, and once a unit is found, turn on another event to do the 0.01 periodic effect on the specified unit.
Maybe even considering doing an infinite loop until unit is dead, e.g.
periodic event every 0.2 seconds.
pick each marine, and check if they are in the height/etc. also check if they're not in a counter stack (an array that holds units)
if both pass true, run a custom action with parameter of unit.
action sets unit passed into the counter stack so it isn't ran twice on same unit. make a for (integer) loop that is like,
For Each integer X from 1 to 2 with increment 0, do (actions)
If marine is dead or the height is fixed,
then set integer x to 2
else deal teh damage/etc effects you want.
wait 0.01 seconds.
The 0.01 loop is only occurring when mob meets the criteria and starts a unique custom action to handle the effects you want for the duration of it's stay in the lava/etc, it'll shut itself off the moment that unit stops meeting the status. This is less stress when units aren't meeting the criteria, and when a unit dies it'll lower the threads needed to handle each unit (since the loop only occurs 0.2 seconds instead of 0.01.
In closing, this'll give the same "smoothness" of the illusion of a marine dying etc as you want, but lower the threads significantly to handle all the unit's on screen.
The only caveat is that when a unit first enters the lava it'll take 0.2 seconds for the event to start occurring, but once it starts it'll be as smooth as you always had it.
And you can tweak the 0.2 seconds anyways to a lower amount if you find the threads are handling this well.
0
@Bounty_98:
Should consider giving the doodads the ability to change their appearance randomly ONCE. So once discovered, they can try to get out of sight of the enemy and tap that transform, to try to hide again.
0
Good job. :)
0
Thanks :) Is there a chance to get the weapon as a seperate, no animations, model too? So I can attach it manually?
0
Well, another route is to avoid morphs all together, and use model swaps instead. Depending on what the "stances" do to the unit.
0
I just hope that submitted maps are quickly noted as winning or not. I don't care so much about all the technical stuff, I more care if they take months to announce a winner and I can't publicly post my map waiting. :/
0
Good job nash. :)
0
Quote from Glynn:
When you open a bank, you can't use a variable for the player number, you need to change this line to:
----
Thanks for this. It's absolutely retarded you have to do this, but nothing a switch can't fix.
0
Well, I haven't delved much into how Blizzard handles the normal AI, but I do know whenever they want specialized tasks they utilize trigger-based issue orders. This may be what you'll end up doing depending on how customized this AI is going to be, and with all the conditions you wrote up there it sounds like you'll be writing a lot of logical code to make it work as you envision it (aka: take a lot of time).
I wrote an AI for a custom map, but mine is entirely done as I explained above. You may be able to set Wave destinations and tactical AI filters to achieve some of the ideas you have, but I haven't delved into this area too much as I haven't needed to use it. Your bet is likely to explore the campaign maps and see if you can find how they handle AI related operations and mimic their systems.
Most people who know how to do these sort of ordeals are likely really busy working on their own maps, and they likely got their knowledge from discovering a Blizz map utilizing the system, anyways.
0
So, Nova comes packed with a sniper gun, and an animation where she uses a "melee attack" with a light saber. Here's my question:
How difficult is it for a 3d modeler at this time to export this model, remove the gun she is always wielding, along with the light saber, and create it into a format that is easy to re-import?
Then to top this off, how hard would it be to manufacture an arsenal of potential melee/ranged weapons for Nova that would fit well in her hand, as a separate model (In this list also include her default weapon and the light saber).
If this is really easy, I'd love for someone to do this real quick. If not for me, I'd love to create a quick package for players interested in doing an RPG to utilize this model to allow them to hot swap weapons according to items picked up.
That's my inquiry/request. If this is a more complicated task than it seems, then just reply that it'll take some work and I'll be on my way.
Thanks for your time guys.
0
http://forums.sc2mapster.com/development/map-development/6738-bug-with-raynor-penetrator-round/
0
http://forums.sc2mapster.com/development/tutorials/3939-data-working-with-beams-beginner-difficulty/
Review your actor links and see if it has a starting point and impact point, if you changed models the beam may fail if the attachment points don't exist on the new model, among other potential issues.
0
This was giving me a lot of aggravation, but I figured it out! I wanted to share in case anyone else ever needs to have an iron grip on their ability charges.
First, I couldn't figure out HOW to edit the charges directly. So I did a hackjob to make it happen. It seems the display number is done by MaxCount, and you can use this to give the illusion of showing the number of charges.
The whole REASON i wanted to do this is that regeneration of charges seems to be additive, e.g. if you have 0 charges on a 10 max capacity charge, with a 2 sec recharge rate, it will take 20 seconds to regenerate 1 charge (wtf?), and if you have 9 charges on a 10 max, it'll take 2 seconds to regenerate 1 charge...
Well, and also charge use is a bit mucked up when you use multiple levels too. So! Here's my trigger-based charge system.
Key action is this:
Catalog - Set value of Abilities "TossGrenade" "Cost[0].Charge.CountMax" for player x to (String(GrenCount))
Here's some snippets from my code I wrote, some variables to note for my example:
the ability is called Nova - Toss Grenade (ID: TossGrenade). This ability has 5 trainable levels, each level the maximum charge amount increses by 5.
This skill can only be learned on one Unit, who is tracked by a xHero[0] variable.
x is my default index counter, usually looping through Player numbers.
GrenadeRegen is a global variable integer that I use to track if it's been the duration I want to regenerate a charge (in my case, 10 seconds)
GrenCount is my global variable integer for tracking how many charges the hero has of the skill.
I set the ability to not cost any charges to use. Also when the ability is learned, I use a catalog set to accurately report the number of charges (all charge information is 0 on this skill's ability data info). Then, I manually track the usage of charges like so:
TossGrenade
Events
Unit - Any Unit uses Nova - Nova - Toss Grenade at Effect3 - Cast stage (Ignore shared abilities)
Local Variables
Conditions
Actions
General - If (Conditions) then do (Actions) else do (Actions)
If
GrenCount > 0
Then
Variable - Modify GrenCount: - 1
Catalog - Set value of Abilities "TossGrenade" "Cost[0].Charge.CountMax" for player (Triggering player) to (String((GrenCount + 0)))
General - If (Conditions) then do (Actions) else do (Actions)
If
GrenCount < 1
Then
Unit - Disable the Nova - Toss Grenade ability for (Triggering unit)
Else
Else
I then have a global timer system that goes off every 1 second (for other reasons, but added this into it). and runs this check:
-Increase Grenade Counters
General - If (Conditions) then do (Actions) else do (Actions)
If
(Unit type of xHero[x]) == Nova - Nova (Hero)
GrenCount < (((Current level for ability Nova - Toss Grenade on xHero[x]) + 1) * 2)
Then
Variable - Modify GrenadeRegen: + 1
General - If (Conditions) then do (Actions) else do (Actions)
If
GrenadeRegen > 5
GrenCount < (((Current level for ability Nova - Toss Grenade on xHero[x]) + 1) * 2)
(xHero[x] has Nova - Toss Grenade) == true
Then
Unit - Enable the Nova - Toss Grenade ability for xHero[x]
Variable - Set GrenadeRegen = 0
Variable - Modify GrenCount: + 1
Catalog - Set value of Abilities "TossGrenade" "Cost[0].Charge.CountMax" for player x to (String(GrenCount))
Else
Else
0
Isn't this going to spam the hell out of your speakers with a hellion attack impact? XD
If nothing else, combine your two loops. you're running two "pick each" units on the same unit group every 0.01 seconds, doubling your thread count. You can write both condition checks within the same 1 loop.
BUT ON TO MY SUGGESTION. heh.
I don't get why you need it to be 0.01 seconds. That's 10 milliseconds, players don't even have that sort of latency. But since you seem adament about it, here's a way I would think to optimize things. First create a loop trigger that has a longer timer a e.g. 200 milliseconds (0.2 seconds ) that checks for units matching the event, and once a unit is found, turn on another event to do the 0.01 periodic effect on the specified unit.
Maybe even considering doing an infinite loop until unit is dead, e.g.
periodic event every 0.2 seconds.
pick each marine, and check if they are in the height/etc. also check if they're not in a counter stack (an array that holds units)
if both pass true, run a custom action with parameter of unit.
action sets unit passed into the counter stack so it isn't ran twice on same unit. make a for (integer) loop that is like,
For Each integer X from 1 to 2 with increment 0, do (actions)
If marine is dead or the height is fixed,
then set integer x to 2
else deal teh damage/etc effects you want.
wait 0.01 seconds.
The 0.01 loop is only occurring when mob meets the criteria and starts a unique custom action to handle the effects you want for the duration of it's stay in the lava/etc, it'll shut itself off the moment that unit stops meeting the status. This is less stress when units aren't meeting the criteria, and when a unit dies it'll lower the threads needed to handle each unit (since the loop only occurs 0.2 seconds instead of 0.01.
In closing, this'll give the same "smoothness" of the illusion of a marine dying etc as you want, but lower the threads significantly to handle all the unit's on screen.
The only caveat is that when a unit first enters the lava it'll take 0.2 seconds for the event to start occurring, but once it starts it'll be as smooth as you always had it.
And you can tweak the 0.2 seconds anyways to a lower amount if you find the threads are handling this well.
0
I'd say check out IRC channel http://forums.sc2mapster.com/general/general-chat/2878-sc2mapster-irc/
0
Edit: I wrote a solution in regards to Ability Charges, and misread original topic (item charges), so created a new thread http://forums.sc2mapster.com/development/map-development/7626-setting-ability-charges/ .