Game Mechanics A better way to deal with piercing damage

Acamaeda

Terrarian
(Update: I understand the balancing issues with the original suggestions now, so here are some smaller-scale changes that could still help with the biggest issues)

The way piercing damage is handled is one of the biggest problems with Terraria. It's really unintuitive and most players don't even know it exists, but it greatly affects players using summons or piercing ammo, and especially players in multiplayer. Through no fault of their own, they end up doing far less damage than they should be. It originally only existed to stop attacks from hitting an enemy every frame, but it has become a significant part of balance as well, which would be hard to remove entirely. However, there are a few areas that could be improved which are the ones that hurt players most often.

One change would be making Meteor Shots and Chlorophyte Arrows not count as traditional piercing damage. Instead, they just store whatever enemy they hit first so they can't hit it again the second time. (They can only bounce OR pierce, so they can never hit an enemy twice). New players might use these with rapid-fire guns like the Minishark, or multi-shot Arrows like the Tsunami, and unwittingly sabotage their DPS. As it stands, the Chlorophyte Arrows are never a good choice, but new players don't know that.

The other change would be making different damage types have their own i-frames. At the very least, Summons should use separate i-frames from other damage sources, because players often use summons with piercing damage, along with weapons with piercing damage, not realizing how they affect each other. It also means that in order to be a good non-pure Summoner, you need to know what weapons and what summons are piercing. Without that, the Summoner class would have more options and be much more accessible.

The reason that the other 3 damage types should have separate counters is multiplayer. Often, multiple players are using weapons with piercing damage on the same target at once, thus doing less damage than they would otherwise. This doesn't make sense as a balance thing, because if they know, they can mostly use non-piercing attacks to have them all be fully effective. Players in groups tend to use different classes, so the easiest way to help them would be to give each class its own counter. In larger groups, it wouldn't be completely effective, but it would still be an improvement.


Original post:
(Note: Most of this was made by Lady Fira on the Terraria Discord, but she gave me permission to post it here so the devs might see it)

The way piercing damage is handled is one of the biggest problems with Terraria. It's really unintuitive and most players don't even know it exists, but it greatly affects players using summons or piercing ammo, and especially players in multiplayer. Through no fault of their own, they end up doing far less damage than they should be. It exists to stop the same attack from hitting an enemy every frame, but we have figured out a better way to do that.

There are three different types of piercing attacks that need to be handled different ways. There are lingering piercing attacks, multi-hit piercing attacks, and single-hit piercing attacks.

Lingering piercing attacks are attacks like the Rainbow Gun, Nimbus Rod, and the Vilethorn family that are meant to hit enemies in their area of effect multiple times while not moving very much. They should be changed to instead only deal damage to enemies every 10 ticks. This category could also possibly contain spears and the Solar Eruption.

Multi-hit piercing attacks include attacks that are intended to be able to hit the same target more than once. This includes bouncing attacks like the Water Bolt, the Razorblade Typhoon, all piercing summons, and any spears or flails that aren't in the lingering category. These would take far too much memory to deal with properly, so they can continue to use the same invulnerability frames method that is currently in use.

Single-hit piercing attacks includes the remainder of the attacks that do piercing damage, anything that is meant to hit each enemy it hits just once. This includes any piercing attack that moves in a straight line, as well as all piercing ammunition (Chlorophyte Arrows and Meteor Shots can only bounce or pierce). Each attack or projectile stores the id of each enemy that they hit in a linked list so it can check if it's hitting a new enemy or not. Maybe some weapons with unlimited piercing and high fire rate, like the Star Cannon, would take up too much processing power that way, so they could continue to use the current invulnerability frames method like the multi-hit attacks.

By dividing piercing damage up like this, the number of weapons that cause problems is greatly reduced. It especially prevents problems from unknowing players sabotaging themselves with Chlorophyte Arrows or Meteor Shots. It also greatly reduces the chances of other players or summons interfering with your damage. Some things might need to be re-balanced as a result, but this would all be worth it for making the game more intuitive and friendly to new players, and to give all players more options for how they want to play the game.
 
Last edited:
There actually already is a fix for this try using luminite bullets in a shotgun. 1.3 added Local NPC Immunity basically each projectile keeps track of its own immunity it. The thing is it's only used on some of the projectiles 1.3 added and some later added projectiles. The devs didn't bother going back and fixing the old projectiles, I'm not sure why if I had to guess maybe they considered it 'unbalanced'. Basically what I'm saying is the solution already exist it just hasn't been implemented...
 
Update: I figured out some smaller-scale suggestions that wouldn't mess with balance as much, but still address the biggest issues.
 
I think the pierce limit should be more obvious summoners don't even need to use extra piercing weapons to get messed up the the twin minions will reach the max hits per second with just a few pairs.

Or they could just make every piercing projectile use local immunity and adjust damage, but yeah chloropyte arrows are useless the only non multishot bow you get after that is the pulse bow and that doesn't even shoot them
 
There actually already is a fix for this try using luminite bullets in a shotgun. 1.3 added Local NPC Immunity basically each projectile keeps track of its own immunity it. The thing is it's only used on some of the projectiles 1.3 added and some later added projectiles. The devs didn't bother going back and fixing the old projectiles, I'm not sure why if I had to guess maybe they considered it 'unbalanced'. Basically what I'm saying is the solution already exist it just hasn't been implemented...
This is super interesting. I can't think of a reason why the devs wouldn't put this in for other guns, but it's worth asking some modders what they think of the fix.
 
This is super interesting. I can't think of a reason why the devs wouldn't put this in for other guns, but it's worth asking some modders what they think of the fix.
I'd guess it's mostly for balance. Lots of weapons produce multiple piercing projectiles at a time and are designed for only one to deal damage at a time, especially some summons. Rebalancing by lowering the damage would be hard, because enemies with higher defense will be harder to kill even if the base DPS is unchanged. The change also just wouldn't work for weapons that hit the same enemy multiple times with one projectile (summons, Razorblade Typhoon, Water Bolt...).

That's why I think focusing on getting rid of the really bad issues piercing damage can cause might be the best way to go.
 
The change also just wouldn't work for weapons that hit the same enemy multiple times with one projectile (summons, Razorblade Typhoon, Water Bolt...).

Actually it could still work. The nebula arcanum uses Local Immunity.

I'm a modder and I've looked at the code, and used local Immunity a lot.
Basicly how it works is that when a projectile uses local immunity it will have an array projectile.localNPCImmunity[] (list of numbers) with each number corresponding to an npc and its immunity time for that projectile.
So let's say a projectile hits Main.npc[4]. It will then do projectile.localNPCImmunity[4] = number
if the number isn't 0 it will be unable to hit Main.npc[4] again. If the number is greater than 0 it will count down.
 
Actually it could still work. The nebula arcanum uses Local Immunity.

I'm a modder and I've looked at the code, and used local Immunity a lot.
Basicly how it works is that when a projectile uses local immunity it will have an array projectile.localNPCImmunity[] (list of numbers) with each number corresponding to an npc and its immunity time for that projectile.
So let's say a projectile hits Main.npc[4]. It will then do projectile.localNPCImmunity[4] = number
if the number isn't 0 it will be unable to hit Main.npc[4] again. If the number is greater than 0 it will count down.
Huh, I guess it's just about balance then.
 
I'm pretty confident that if someone makes a direct request they'll consider and probably implement it. Meteor shots are close to useless with MGs and Shotguns although they are the most used guns.
 
You mentioning multiple players with piercing weapons causing issues. This isn't an issues since Iframes of non local immunity projectile are stored per player. And projectiles with local immunity store it on the projectile itself so either way players won't butcher each other's dps with piercing only their own.
 
Back
Top Bottom