Path-of-Terraria / PathOfTerraria

GNU General Public License v3.0
1 stars 3 forks source link

Unique Copper Broadsword - Blood Oath #218

Closed CollinHerber closed 4 months ago

CollinHerber commented 4 months ago

With this unique comes some Updated Sprites for the Copper Broadsword and Rusted Battleaxe

BloodOath CopperBroadsword RustedBattleaxe

For the Blood Oath - Seeing as this is one of the very first uniques you can acquire we don't want it to be too strong. The stats should mimic that of the Copper Broadsword

I'm thinking the blood oath could introduce a new system where you "Toggle" the alt use and during the "On" state each enemy hit is given a "Blood Oath" Stack and the player then takes 1 damage per hit. When they they toggle it off each enemy within a x range has that stack removed and for each stack removed the player is healed for 5 health.

Then the weapon would have a 10 second cooldown to prevent infinite healing.

Something simple but cool

GabeHasWon commented 4 months ago

Instead of a toggle, it'd just be always on - right clicking uses alt & sets cooldown, disabling blood oath stacks for 10 seconds. That might be what you meant already, but it's a bit unclear.

CollinHerber commented 4 months ago

Instead of a toggle, it'd just be always on - right clicking uses alt & sets cooldown, disabling blood oath stacks for 10 seconds. That might be what you meant already, but it's a bit unclear.

I wouldn't want the use to constantly take 1 damage per enemy hit and instead only when they actually wanted the ability on. In the "Off" state it would be just like a normal copper broadsword (aside from the alt use)

When the person right clicks, and if there is a blood oath stack on a nearby enemy it would then set the toggled state to "Off" and then the alt use cooldown of 10 seconds would take effect before they could toggle it back on.

Happy to think about alternatives to the alt use though. That was just my first idea.

CollinHerber commented 4 months ago

Could re-use the guardian angel effect but instead of yellow it's a red ring to signify the stack.

GabeHasWon commented 4 months ago

Oh! Missed the player taking one damage per hit. Nevermind then. I'll probably make a unique visual effect since that's easier, more fun and more diverse.

GabeHasWon commented 4 months ago

PlaceHolder How's this for a stack indicator? It's fully functional already - at the moment, it only shows the stacks of oath per character, so if both you and I hit the same enemy, only my stack will be visible on my screen and only your stack is visible on yours. This makes it less crowded, more clear how many stacks you specifically have and worked nicely with the backend. I also edited Blood Oath's sprite a bit, the guard was really large: BloodOath

CollinHerber commented 4 months ago

I think it's a little busy. Maybe reducing the amount of those floating dagger slightly? Less of the further away ones? Just might get a bit crazy with many mobs

GabeHasWon commented 4 months ago

I want to show all of the stacks, so there is a stack cap - 15. I could lower this to 10, it's definitely a lot.

CollinHerber commented 4 months ago

Ahh I had originally planned on each mob only having a max of 1 stack. What would each stack do?

GabeHasWon commented 4 months ago

Oh. ""Blood Oath" Stack" implies to me that it can apply more than one. This is reinforced with

and for each stack removed the player is healed for 5 health.

I could make it 3 stacks or something low then. It just heals additional health, nothing crazy.

GabeHasWon commented 4 months ago

PlaceHolder Much less busy. 15 health also isn't nothing in early game, especially when you can hit a lot of enemies at the same time. Should anything happen if the NPC dies with stacks on it?

CollinHerber commented 4 months ago

I imagine the stacks would just go away when the npc dies.

With stacks maybe it should be 2hp per stack?

CollinHerber commented 4 months ago

Or perhaps 3 since it's 1 hp per hit when you hit them

GabeHasWon commented 4 months ago

Alright, done. 9 health is pretty solid; I also gave it a +max life affix since that seems thematic. I'll be doing all the resprites now.

GabeHasWon commented 4 months ago

IronBattleaxe RustedBattleaxe SteelBattleaxe CorruptedBattleaxe All battleaxe resprites insofar. Iron, Rusted, Steel, and Corrupt.

benj7126 commented 4 months ago

Could add an affix that increases max stack size, in general, ofc (Though that should like it might get out of hand, seems neat none the less)

CollinHerber commented 4 months ago

I think that would be a great addition to the influenced affix lists

benj7126 commented 4 months ago

Oh, right, that was a thing... being able to limit it like that would probably make it easier/possible to balance, true.

GabeHasWon commented 4 months ago

So, one last question: I know we should be setting unique's affix's MaxValue and MinValue, but I still have to set Value in order to set it at all. Is this intentional? This seems weird.

Otherwise, all resprites are in, Blood Oath should be good to go (aside from multiplayer), and I've also made Guardian Angel's and Blood Oath's alt uses not use the item itself, since it feels weird to swing the item when not using a melee attack.

CollinHerber commented 4 months ago

I don't remember needing to set the value, nor do I think the value is being set on any of the other uniques. I would imagine you shouldn't need to set the value if you're setting min and max.

GabeHasWon commented 4 months ago

I thought so too, but setting Value is the only thing that would modify the affix's (in this case, a +max life% affix) power. Without setting Value directly, it was always +1%. With this: lifeAffix.MinValue = lifeAffix.MaxValue = lifeAffix.Value = 10f; It's always 10%. I'm unsure if I'm using Min/MaxValue right, but I set that range to anything from 1 to 10000 and it never made a difference.

CollinHerber commented 4 months ago

Something in the data driven affixes may have affected this although I'm unsure what. I'm going to guess the rolling of the item? Although thought uniques were handled individually.

GabeHasWon commented 4 months ago

Ah, Affix.Value defaults to 1, with a hardcoded check to roll only when Value == 0. Is there a reason Value is initialized to 1? Don't know if that's intentional or not.

CollinHerber commented 4 months ago

Naw I think that would be wrong and that check is wrong. Good catch.

GabeHasWon commented 4 months ago

Ok...with further research, I checked the call order for unique affixes. The issue was the setup:

Affix affix = Affix.CreateAffix<T>(...);
affix.MinValue = min;
affix.MaxValue = max;

Due to call order, and due to Affix.CreateAffix's call of Roll, the Min/Max value there are completely ignored since Roll is called in CreateAffix, setting Value to something other than 0, thus skipping the re-roll after. Affix.CreateAffix takes parameters for Value, Min, Max, using those fixes the problem (and is much nicer). Unsure if this was related to data-driven affixes, but this is completely against the format all unique affixes are done in, and presumably persist in every unique.