first commit, even though I've been "done" with the mod for like ever

This commit is contained in:
ForeverPyrite
2025-08-12 00:01:48 -05:00
commit 46bc9baab8
32 changed files with 1145 additions and 0 deletions

85
Buffs/Parasitism.cs Normal file
View File

@@ -0,0 +1,85 @@
using Siva.Projectiles;
using Terraria;
using Terraria.ModLoader;
namespace Siva.Buffs
{
public class Parasitism : ModBuff
{
public static readonly int BuffType = ModContent.BuffType<Parasitism>();
public override void SetStaticDefaults()
{
Main.debuff[Type] = true; // Indicates this is a negative effect.
Main.buffNoSave[Type] = true; // Indicates that the buff won't save when exiting the game.
Main.buffNoTimeDisplay[Type] = false; // Shows the duration on the buff icon.
}
// What happens while the debuff is a applied
public override void Update(NPC npc, ref int buffIndex)
{
// Do I make them glow red or anything?
}
public static int AttachedNaniteCount(NPC npc)
{
int attachedNanites = 0;
foreach (var p in Main.ActiveProjectiles)
{
if (p.type == SIVANanite.ProjectileType && p.ai[0] == 1f && p.ai[1] == npc.whoAmI) {
attachedNanites++;
// Main.NewText($"{attachedNanites}"); // Debug text
}
}
return attachedNanites;
}
public static float GetParasitismScaleFactor(int attachedNanites)
{
if(attachedNanites <= 5)
{
return attachedNanites*0.3f;
}
else if(attachedNanites > 5 && attachedNanites < 100)
{
return (attachedNanites-5)*0.021f+1.5f;
}
else if(attachedNanites >= 100)
{
return 3.5f;
}
else
{
return 0f;
}
}
public class ParasitismScaling : GlobalNPC
{
public override bool InstancePerEntity => true;
public override void ModifyHitByProjectile(NPC npc, Projectile projectile, ref NPC.HitModifiers modifiers)
{
if(LogicPerfected.ParasitismOnTarget(npc) && projectile.owner == Main.myPlayer) // Check to make sure the projectile is the local players rather than any other projectils from any other gun. Trying to prevent hypothetical exploits.
{
if(LogicPerfected.NormBullet(projectile))
{
float scaleFactor = GetParasitismScaleFactor(AttachedNaniteCount(npc));
AddableFloat addableScaleFactor = AddableFloat.Zero + scaleFactor;
modifiers.ScalingBonusDamage = addableScaleFactor;
Main.NewText($"norm {scaleFactor}"); // debug text
}
else if(LogicPerfected.MasterBulletOrNanite(projectile))
{
float scaleFactor = GetParasitismScaleFactor(AttachedNaniteCount(npc));
AddableFloat addableScaleFactor = AddableFloat.Zero + scaleFactor;
modifiers.ScalingBonusDamage = addableScaleFactor;
Main.NewText($"master {scaleFactor}"); // debug text
}
}
}
}
}
}