There's no such thing as a "passive ability" in StarCraft II. They are behaviors now.
Fortunately, behaviors can easily be given a limited duration, and you can create abilities that add behaviors. The effect/behavior approach should have worked. Can you tell me what exactly went wrong? Did you remember to add a button to the Command card? Did you remember to give the behavior a limited duration?
If the button appears and can be clicked, but nothing happens, then I will have to give it some more thought. However, telling me it just doesn't work is too vague.
I think this has already been made for SC2 (though the current version is not very good). I remember playing it early on after map publishing came out but I can't imagine that it stayed popular for long. You could certainly make a better version!
Beams do not use movers or units because they don't move. They are simply like a "tether" that appear between two points. I recommend you look at the actors and weapons for Disruption Beam, which is much more straight-forward than the Void Ray's beam (the Void Ray has so many effects that it gets confusing). It's probably the simplest example of a "continuous" beam.
As for the z-offset, Riley has it right. You can add site operations to an Action actor, and have the Action actor use the beam.
If you are okay with approximations, you could use a modification close to 1 and do some math to figure out how many stacks you need.
For instance, if the damage is modified by a facotr of .995, and you want to give a damage reduction of 50%, just divide log(.5) by log(.995), round, and apply that many.
In this case, the number is 138.32. Applying 138 stacks of .995 fractional damage yields .50071 fractional damage which is close enough to .5 that nobody will probably notice a difference.
Anyway, is your ability being handled through triggers or through the data editor? It sounds like you are using the former.
One nice effect would be to make the caster constantly loop the animation during the duration. It would probably look better than him being absolutely still for 8 seconds.
This would be a lot easier (in my opinion) through the data editor (though not as intuitive perhaps). You can make a channeled ability that creates an 8 second persistent effect which applies another effect when it expires (the heal). Then, you can use the unit's actor and add event responses for the ability starting and stopping, which apply certain animations to the unit. You can look at the SCV, for example, whose actor starts a timer when he begins using his Harvest or Repair abilities. Every time the timer runs out, the worker plays the "Work" animation. When he stops using the ability, the timer is killed (so it won't cause him to keep playing the animation). You could do the same with your unit and just have it loop it's casting animation, or whatever.
I didn't read through the whole thread. Anyway, the number of digits or characters in the object being loaded shouldn't matter. A data object takes up a certain amount of memory regardless of what it contains. Storing the number "1" as a 32-bit Integer takes just as much memory as storing "2147483647" as a 32-bit Integer.
Trying to test the max number of String characters you can load is silly. Taking characters off of a String doesn't make the string take up less memory. You can load TWO STRINGS regardless of how "long" the strings are.
So the next question is, if the quoted number of 80 Integers isn't correct, then what is correct? Two strings should take up a lot more memory than 80 Integers, so is the number higher than 80 or lower?
Edit - Forget what I said about Strings, but I'm pretty sure that it should apply to Integers. It makes sense for them to segregate Strings into "long" or "short" for efficiency. What we really need to figure out is how much memory can be loaded? Not how many strings or how many integers but how much memory.
1: I don't know a lot about this in particular, but I think if you open the Action actor and find the "Launch Attachment Query - Methods" it has parameters that the actor uses to determine what attachment point the launch occurs at. The parameters here reference the IDs of "Attach Methods" data objects. Just choose a method that will return an attachment point for the model you are using. "AMFilterWeapon" will probably work because most models have at least one attachment point with the weapon keyword. As long as you aren't picky about WHICH weapon attachment point gets used, it will do.
2: I think you mean "Create Persistent" effect. You change the effect of the weapon to anything you want, so if you want an effect like you describe, just make a Create Persistent that does it, and change the weapon's effect to that. Look at the banshee for an example.
3: I think it has to do with Host Site Operations, but I really don't have a clue. Hopefully that gives you some place to start.
4: Beams a little confusing, but like any actor, they are just set up to respond to certain events. The sentry's beam is a lot simpler than the void ray's, because the latter has a LOT of effects. The weapon is Disruption Beam. If you look at it, you see it has a Create Persistent effect, and that this effect is channeled. Now look at the disruption beam Action actor, and you will see that it has an event response for Effect.Disruptor.Start, which says Create, and Effect.Disruptor.Stop, which says destroy. Essentially, the beam appears when the effect starts, and disappears when it stops. Since the beam is channeled, it won't stop until the Sentry stops attacking. The Action actor is linked to the beam actor, so when the action actor is created, it automatically adds the beam, handles the attachment points, etc.
Actors aren't really my strong point, so any of this info could be inaccurate. Hopefully it's enough to get you started though and playing around with it until you get it.
Ah, the ring that shows the range is controlled by the PsiStormRange actor. Just add events to it for your custom ability. If you changed the range, you need a different range actor though. The Range actor links to an ability, behavior, or weapon to determine the radius that it should show.
The second issue seems unusual. Do either of the abilities in question have a cooldown? It may be an issue with the cooldowns having the same Link, although in that case I think they would both show the cooldown instead of letting you try and then just failing.
I'm trying to make an ability that triggers every .5 seconds, but what I need is for it to remove the buff each time before triggering the next pulse.
To explain further, think Psionic Storm that also stuns, but I only want the stun to last .5 seconds, then wait 1 second before stunning again (while also dealing damage). I've got the damage part down, the stun and it triggers 5 times like I want. I just can't figure out how to remove the buff for .5 seconds before it triggers the effect again.
Also, as an addendum.. how the HELL do you add cooldowns to abilities? I can't find the part in Psionic Storm to see where the hell the cooldown was added.
EDIT: And one last thing.. I made a copy of Psi Storm from scratch (created each effect myself, no actual copypasta), but the ring around the unit to show the range doesn't show up. Where can you add this?
I would use a dummy behavior that is applied when the "Stun" behavior is removed. Call it "Stun Immunity" or something. Then just add a validator to the stun effect that checks that the unit doesn't have the immunity behavior. I believe behavior validator is the same way they made the stun immunity for the Infestor's Frenzy, but I'm not sure.
The cooldown is very easy, check out the "Cost - Cooldown" field in the ability data.
The targeting ring is called a "Splat." Splats are a type of actor object. Just like any other actor, they have particular events which they respond to. Check out MassRecallCursorSplat and PsiStormCursorSplat. Both of these use the same UI splat, but at a different scale. You can just open the events fields on the PsiStorm one and add in your own psi storm event. I'm not completely sure what makes these splats scale differently, because their data looks the same, but if you aren't changing the size of the effect, then the splat doesn't need to change either.
You probably mean -2147483647, but I get your point. It's 32-bit.
And we've got 80 of them to work with, so that's 2560 bits. You can do a lot with that if you optimize.
We can store a lot of information with this. Suppose your character's attributes have a max of 256. Each one takes up only 8 bits. Each quest, assuming it has two states (complete, incomplete) takes up 1 bit. Suppose your map has 512 unique items. Each item slot takes up 9 bits.
So if we want to save 6 attributes, 20 items, and 128 quests of a character, it will only take 356 bits. And this is pretty ambitious for an ORPG (are there really going to be 128 quests and 512 items?) and we still have enough room in the bank to store seven characters and still have room for checksums and such. If someone has to have more than this, they can just swap out the XML manually.
ORPGs have to be somewhat limited anyway, since any system that allows you to trade items would also allow you to dupe them if you backed up the XML and then made a trade. If a project is so ambitious that it need more than 2560 bits to store a player's data, I think SC2 would probably be the wrong media. But that's just opinion.
Yeah, it could be implemented better. I'm just saying we can probably cope with it even if it isn't changed.
Awesome, I see... I just wish there was a way to copy an actor without copying the models and sounds within. Also, is there a way to make a doodad that has the model of a unit?
You CAN copy an actor without copying any models or sounds, and it will still work just fine. The actor REFERENCES models and sounds that need to be used. It is perfectly allowable for two different actors to contain a reference to the same model/sound, in fact many actors do this by default.
As for a doodad that looks like a unit, this is very easy to do. You can give them any model you want.
What are the maximum and minimum values you can use for a bank integer?
You can encode a lot of information in an integer if it is allowed to be big enough.
I'm not saying that the way it works right now is okay, I'm just trying to come up with viable solutions.
There are some shortcuts to adding the ability to all of the units.
You can select multiple objects in the data editor and modify multiple fields at once. The problem is that any fields you modify will all end up the same. You can't just add an ability to every unit's field, you end up replacing the whole field with that ability.
In my tower defense, I actually ended up giving every ability to every runner. Since the use of the abilities is handled by triggers, it didn't matter if a Zealot had cloak or whatever because the trigger that causes cloak to be used doesn't run for Zealots.
It also is generally a lot quicker when working with a lot of data to view raw data and copy and paste. So I can just copy the string "Personal Cloaking|" then go through each of the units, highlight the abilities field, and paste it in there right after the first parenthesis. You still have to go back and edit the command card to make the button appear, but it's a start.
What I always do when I have abilities that add buffs, is I have it execute a set that does every "Apply Behavior" effect for each buff, and then set validators for each one to make sure that only the correct one gets applied. I don't know about heroes, so I'm not sure how you would go about making a validator that checks the ability level. I always do it with upgrades though.
0
There's no such thing as a "passive ability" in StarCraft II. They are behaviors now.
Fortunately, behaviors can easily be given a limited duration, and you can create abilities that add behaviors. The effect/behavior approach should have worked. Can you tell me what exactly went wrong? Did you remember to add a button to the Command card? Did you remember to give the behavior a limited duration?
If the button appears and can be clicked, but nothing happens, then I will have to give it some more thought. However, telling me it just doesn't work is too vague.
0
@ctccromer: Go
I think this has already been made for SC2 (though the current version is not very good). I remember playing it early on after map publishing came out but I can't imagine that it stayed popular for long. You could certainly make a better version!
0
Beams do not use movers or units because they don't move. They are simply like a "tether" that appear between two points. I recommend you look at the actors and weapons for Disruption Beam, which is much more straight-forward than the Void Ray's beam (the Void Ray has so many effects that it gets confusing). It's probably the simplest example of a "continuous" beam.
As for the z-offset, Riley has it right. You can add site operations to an Action actor, and have the Action actor use the beam.
0
If you are okay with approximations, you could use a modification close to 1 and do some math to figure out how many stacks you need.
For instance, if the damage is modified by a facotr of .995, and you want to give a damage reduction of 50%, just divide log(.5) by log(.995), round, and apply that many.
In this case, the number is 138.32. Applying 138 stacks of .995 fractional damage yields .50071 fractional damage which is close enough to .5 that nobody will probably notice a difference.
0
That's a long cast time!
Anyway, is your ability being handled through triggers or through the data editor? It sounds like you are using the former.
One nice effect would be to make the caster constantly loop the animation during the duration. It would probably look better than him being absolutely still for 8 seconds.
This would be a lot easier (in my opinion) through the data editor (though not as intuitive perhaps). You can make a channeled ability that creates an 8 second persistent effect which applies another effect when it expires (the heal). Then, you can use the unit's actor and add event responses for the ability starting and stopping, which apply certain animations to the unit. You can look at the SCV, for example, whose actor starts a timer when he begins using his Harvest or Repair abilities. Every time the timer runs out, the worker plays the "Work" animation. When he stops using the ability, the timer is killed (so it won't cause him to keep playing the animation). You could do the same with your unit and just have it loop it's casting animation, or whatever.
0
I didn't read through the whole thread. Anyway, the number of digits or characters in the object being loaded shouldn't matter. A data object takes up a certain amount of memory regardless of what it contains. Storing the number "1" as a 32-bit Integer takes just as much memory as storing "2147483647" as a 32-bit Integer.
Trying to test the max number of String characters you can load is silly. Taking characters off of a String doesn't make the string take up less memory. You can load TWO STRINGS regardless of how "long" the strings are.
So the next question is, if the quoted number of 80 Integers isn't correct, then what is correct? Two strings should take up a lot more memory than 80 Integers, so is the number higher than 80 or lower?
Edit - Forget what I said about Strings, but I'm pretty sure that it should apply to Integers. It makes sense for them to segregate Strings into "long" or "short" for efficiency. What we really need to figure out is how much memory can be loaded? Not how many strings or how many integers but how much memory.
0
@Colt556: Go
1: I don't know a lot about this in particular, but I think if you open the Action actor and find the "Launch Attachment Query - Methods" it has parameters that the actor uses to determine what attachment point the launch occurs at. The parameters here reference the IDs of "Attach Methods" data objects. Just choose a method that will return an attachment point for the model you are using. "AMFilterWeapon" will probably work because most models have at least one attachment point with the weapon keyword. As long as you aren't picky about WHICH weapon attachment point gets used, it will do.
2: I think you mean "Create Persistent" effect. You change the effect of the weapon to anything you want, so if you want an effect like you describe, just make a Create Persistent that does it, and change the weapon's effect to that. Look at the banshee for an example.
3: I think it has to do with Host Site Operations, but I really don't have a clue. Hopefully that gives you some place to start.
4: Beams a little confusing, but like any actor, they are just set up to respond to certain events. The sentry's beam is a lot simpler than the void ray's, because the latter has a LOT of effects. The weapon is Disruption Beam. If you look at it, you see it has a Create Persistent effect, and that this effect is channeled. Now look at the disruption beam Action actor, and you will see that it has an event response for Effect.Disruptor.Start, which says Create, and Effect.Disruptor.Stop, which says destroy. Essentially, the beam appears when the effect starts, and disappears when it stops. Since the beam is channeled, it won't stop until the Sentry stops attacking. The Action actor is linked to the beam actor, so when the action actor is created, it automatically adds the beam, handles the attachment points, etc.
Actors aren't really my strong point, so any of this info could be inaccurate. Hopefully it's enough to get you started though and playing around with it until you get it.
0
@Kildare88: Go
You have to be more specific. Rotation is simply a change in angle, so if you constantly change the angle then you are making it rotate.
Unless you are referring to Pitch or Roll, in which case I have no idea.
0
@Psiclone01: Go
Ah, the ring that shows the range is controlled by the PsiStormRange actor. Just add events to it for your custom ability. If you changed the range, you need a different range actor though. The Range actor links to an ability, behavior, or weapon to determine the radius that it should show.
The second issue seems unusual. Do either of the abilities in question have a cooldown? It may be an issue with the cooldowns having the same Link, although in that case I think they would both show the cooldown instead of letting you try and then just failing.
0
I would use a dummy behavior that is applied when the "Stun" behavior is removed. Call it "Stun Immunity" or something. Then just add a validator to the stun effect that checks that the unit doesn't have the immunity behavior. I believe behavior validator is the same way they made the stun immunity for the Infestor's Frenzy, but I'm not sure.
The cooldown is very easy, check out the "Cost - Cooldown" field in the ability data.
The targeting ring is called a "Splat." Splats are a type of actor object. Just like any other actor, they have particular events which they respond to. Check out MassRecallCursorSplat and PsiStormCursorSplat. Both of these use the same UI splat, but at a different scale. You can just open the events fields on the PsiStorm one and add in your own psi storm event. I'm not completely sure what makes these splats scale differently, because their data looks the same, but if you aren't changing the size of the effect, then the splat doesn't need to change either.
0
You probably mean -2147483647, but I get your point. It's 32-bit.
And we've got 80 of them to work with, so that's 2560 bits. You can do a lot with that if you optimize.
We can store a lot of information with this. Suppose your character's attributes have a max of 256. Each one takes up only 8 bits. Each quest, assuming it has two states (complete, incomplete) takes up 1 bit. Suppose your map has 512 unique items. Each item slot takes up 9 bits.
So if we want to save 6 attributes, 20 items, and 128 quests of a character, it will only take 356 bits. And this is pretty ambitious for an ORPG (are there really going to be 128 quests and 512 items?) and we still have enough room in the bank to store seven characters and still have room for checksums and such. If someone has to have more than this, they can just swap out the XML manually.
ORPGs have to be somewhat limited anyway, since any system that allows you to trade items would also allow you to dupe them if you backed up the XML and then made a trade. If a project is so ambitious that it need more than 2560 bits to store a player's data, I think SC2 would probably be the wrong media. But that's just opinion.
Yeah, it could be implemented better. I'm just saying we can probably cope with it even if it isn't changed.
0
You CAN copy an actor without copying any models or sounds, and it will still work just fine. The actor REFERENCES models and sounds that need to be used. It is perfectly allowable for two different actors to contain a reference to the same model/sound, in fact many actors do this by default.
As for a doodad that looks like a unit, this is very easy to do. You can give them any model you want.
0
What are the maximum and minimum values you can use for a bank integer? You can encode a lot of information in an integer if it is allowed to be big enough.
I'm not saying that the way it works right now is okay, I'm just trying to come up with viable solutions.
0
@xytor: Go
There are some shortcuts to adding the ability to all of the units. You can select multiple objects in the data editor and modify multiple fields at once. The problem is that any fields you modify will all end up the same. You can't just add an ability to every unit's field, you end up replacing the whole field with that ability. In my tower defense, I actually ended up giving every ability to every runner. Since the use of the abilities is handled by triggers, it didn't matter if a Zealot had cloak or whatever because the trigger that causes cloak to be used doesn't run for Zealots.
It also is generally a lot quicker when working with a lot of data to view raw data and copy and paste. So I can just copy the string "Personal Cloaking|" then go through each of the units, highlight the abilities field, and paste it in there right after the first parenthesis. You still have to go back and edit the command card to make the button appear, but it's a start.
0
@zifoon: Go
What I always do when I have abilities that add buffs, is I have it execute a set that does every "Apply Behavior" effect for each buff, and then set validators for each one to make sure that only the correct one gets applied. I don't know about heroes, so I'm not sure how you would go about making a validator that checks the ability level. I always do it with upgrades though.