From 46bc9baab86a9b0e283fd060d26c26e8d16d4d98 Mon Sep 17 00:00:00 2001 From: ForeverPyrite Date: Tue, 12 Aug 2025 00:01:48 -0500 Subject: [PATCH] first commit, even though I've been "done" with the mod for like ever --- Buffs/Parasitism.cs | 85 ++++++ Buffs/Parasitism.png | Bin 0 -> 1232 bytes Items/OutbreakCatalyst.cs | 19 ++ Items/OutbreakCatalyst.png | Bin 0 -> 1682 bytes Localization/en-US_Mods.Siva.hjson | 46 +++ Projectiles/SIVANanite.cs | 212 ++++++++++++++ Projectiles/SIVANanite.png | Bin 0 -> 1112 bytes Projectiles/SIVANanite_Glow.png | Bin 0 -> 921 bytes Properties/launchSettings.json | 16 ++ README.md | 0 Siva.cs | 261 ++++++++++++++++++ Siva.csproj | 10 + Siva.sln | 25 ++ Sounds/Pew.wav | Bin 0 -> 38622 bytes Weapons/MasterworkedOutbreak.cs | 69 +++++ Weapons/MasterworkedOutbreak.png | Bin 0 -> 14240 bytes Weapons/Outbreak.cs | 115 ++++++++ Weapons/Outbreak.png | Bin 0 -> 6685 bytes build.txt | 3 + description.txt | 7 + icon.png | Bin 0 -> 4303 bytes ...CoreApp,Version=v8.0.AssemblyAttributes.cs | 4 + obj/Debug/net8.0/Siva.AssemblyInfo.cs | 22 ++ .../net8.0/Siva.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 15 + obj/Debug/net8.0/Siva.assets.cache | Bin 0 -> 579 bytes .../Siva.csproj.AssemblyReference.cache | Bin 0 -> 31162 bytes obj/Siva.csproj.nuget.dgspec.json | 87 ++++++ obj/Siva.csproj.nuget.g.props | 18 ++ obj/Siva.csproj.nuget.g.targets | 2 + obj/project.assets.json | 115 ++++++++ obj/project.nuget.cache | 13 + 32 files changed, 1145 insertions(+) create mode 100644 Buffs/Parasitism.cs create mode 100644 Buffs/Parasitism.png create mode 100644 Items/OutbreakCatalyst.cs create mode 100644 Items/OutbreakCatalyst.png create mode 100644 Localization/en-US_Mods.Siva.hjson create mode 100644 Projectiles/SIVANanite.cs create mode 100644 Projectiles/SIVANanite.png create mode 100644 Projectiles/SIVANanite_Glow.png create mode 100644 Properties/launchSettings.json create mode 100644 README.md create mode 100644 Siva.cs create mode 100644 Siva.csproj create mode 100644 Siva.sln create mode 100644 Sounds/Pew.wav create mode 100644 Weapons/MasterworkedOutbreak.cs create mode 100644 Weapons/MasterworkedOutbreak.png create mode 100644 Weapons/Outbreak.cs create mode 100644 Weapons/Outbreak.png create mode 100644 build.txt create mode 100644 description.txt create mode 100644 icon.png create mode 100644 obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs create mode 100644 obj/Debug/net8.0/Siva.AssemblyInfo.cs create mode 100644 obj/Debug/net8.0/Siva.AssemblyInfoInputs.cache create mode 100644 obj/Debug/net8.0/Siva.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 obj/Debug/net8.0/Siva.assets.cache create mode 100644 obj/Debug/net8.0/Siva.csproj.AssemblyReference.cache create mode 100644 obj/Siva.csproj.nuget.dgspec.json create mode 100644 obj/Siva.csproj.nuget.g.props create mode 100644 obj/Siva.csproj.nuget.g.targets create mode 100644 obj/project.assets.json create mode 100644 obj/project.nuget.cache diff --git a/Buffs/Parasitism.cs b/Buffs/Parasitism.cs new file mode 100644 index 0000000..ce1e3ef --- /dev/null +++ b/Buffs/Parasitism.cs @@ -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(); + + 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 + } + } + } + } + } +} + diff --git a/Buffs/Parasitism.png b/Buffs/Parasitism.png new file mode 100644 index 0000000000000000000000000000000000000000..b2893a01a2e8e49e85108c0de1753eef7a275ff4 GIT binary patch literal 1232 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 + + // These properties wrap the usual ai arrays for cleaner and easier to understand code. + // Are we sticking to a target? + public bool IsStickingToTarget { + get => Projectile.ai[0] == 1f; + set => Projectile.ai[0] = value ? 1f : 0f; + } + + // Index of the current target + public int TargetWhoAmI { + get => (int)Projectile.ai[1]; + set => Projectile.ai[1] = value; + } + + public float TimeAttached { + get => Projectile.localAI[0]; + set => Projectile.localAI[0] = value; + } + + public float Damage + { + get => Projectile.localAI[1]; + set => Projectile.localAI[1] = value; + } + + public override void SetStaticDefaults() { + ProjectileID.Sets.CultistIsResistantTo[Projectile.type] = true; // Make the cultist resistant to this projectile, as it's resistant to all homing projectiles. + Main.projFrames[Projectile.type] = 4; + } + + // Setting the default parameters of the projectile + // You can check most of Fields and Properties here https://github.com/tModLoader/tModLoader/wiki/Projectile-Class-Documentation + public override void SetDefaults() { + + Projectile.width = 16; // The width of projectile hitbox + Projectile.height = 16; // The height of projectile hitbox + Projectile.scale = .8f; + Projectile.aiStyle = 0; // The ai style of the projectile (0 means custom AI). For more please reference the source code of Terraria + Projectile.DamageType = DamageClass.Ranged; // What type of damage does this projectile affect? + Projectile.friendly = true; // Can the projectile deal damage to enemies? + Projectile.hostile = false; // Can the projectile deal damage to the player? + Projectile.ignoreWater = true; // Does the projectile's speed be influenced by water? + Projectile.tileCollide = false; // Can the projectile collide with tiles? + Projectile.timeLeft = 180; // The live time for the projectile (60 = 1 second, so 420 is 7 seconds) + Projectile.penetrate = -1; + Projectile.CritChance = 0; + } + + public override void PostDraw(Color lightColor) + { + Texture2D NaniteGlow = new Texture2D() + Main.EntitySpriteDraw() + base.PostDraw(lightColor); + } + public override void AI() + { + Projectile.ai[2] += 1f; + if (++Projectile.frameCounter >= 5) { + Projectile.frameCounter = 0; + // Or more compactly Projectile.frame = ++Projectile.frame % Main.projFrames[Projectile.type]; + if (++Projectile.frame >= Main.projFrames[Projectile.type]) + Projectile.frame = 0; + } + Lighting.AddLight(Projectile.position, Color.Red.ToVector3() * 0.7f); + // Run either the Sticky AI or Normal AI + // Separating into different methods helps keeps your AI clean + // Main.NewText($"IsStickingToTarget = {IsStickingToTarget}"); // + if (IsStickingToTarget) + { + // Main.NewText("Calling StickyAI()"); // debug text + StickyAI(); + } + else { + NormalAI(); + } + } + + public void NormalAI() + { + float maxDetectRadius = 400f; // The maximum radius at which a projectile can detect a target + float projSpeed = 7f; // The speed at which the projectile moves towards the target + Projectile.damage = (int)Damage; // Sets the damage of the projectile to the damage it was created with. + // Trying to find NPC closest to the projectile + NPC closestNPC = FindClosestNPC(maxDetectRadius); + if (closestNPC != null) + { + // If a target is found, change the velocity of the projectile and rotate it in the direction of the target + Projectile.velocity = (closestNPC.Center - Projectile.Center).SafeNormalize(Vector2.Zero) * projSpeed; + Projectile.rotation = Projectile.velocity.ToRotation(); + } + else + { + Projectile.velocity = Vector2.Zero; + } + } + + private const int MaxTimeAttached = 540; + public void StickyAI() + { + TimeAttached += 1f; + // Main.NewText($"TimeAttached: {TimeAttached}"); // debug text + int npcTarget = TargetWhoAmI; + if (TimeAttached >= MaxTimeAttached) { // If the nanite has stuck for 9 seconds (or more) + Projectile.Kill(); + } + else if (Main.npc[npcTarget].active && !Main.npc[npcTarget].dontTakeDamage) { + // If the target is active and can take damage + // Set the projectile's position relative to the target's center + Projectile.Center = Main.npc[npcTarget].Center - Projectile.velocity * 2f; + Projectile.gfxOffY = Main.npc[npcTarget].gfxOffY; + } + else + { + Projectile.Kill(); + } + /* Very fun but a bit OP + else { // Otherwise, reset the timer to 3 seconds and unstick it + Projectile.timeLeft = 180; + IsStickingToTarget = false; + } + */ + + + } + + public NPC FindClosestNPC(float maxDetectDistance) + { + NPC closestNPC = null; + float sqrMaxDetectDistance = maxDetectDistance * maxDetectDistance; + + foreach (NPC target in Main.npc) + { + if (target.CanBeChasedBy()) + { + float sqrDistanceToTarget = Vector2.DistanceSquared(target.Center, Projectile.Center); + if (sqrDistanceToTarget < sqrMaxDetectDistance) + { + sqrMaxDetectDistance = sqrDistanceToTarget; + closestNPC = target; + } + } + } + return closestNPC; + } + + public override void OnSpawn(IEntitySource source) + { + Damage = Projectile.damage; + } + + public const int maxNanites = 100; + private readonly Point[] attachedNanites = new Point[maxNanites]; + public override void OnHitNPC(NPC target, NPC.HitInfo hit, int damageDone) + { + // Main.NewText($"{damageDone}"); // debug text + IsStickingToTarget = true; // we are sticking to a target + Projectile.damage = 0; // Makes sure it can't deal damage, this is reset when NormalAI() is called again. + TargetWhoAmI = target.whoAmI; // Set the target whoAmI + Projectile.velocity = (target.Center - Projectile.Center) * 0.75f; // Change velocity based on delta center of targets (difference between entity centers) + Projectile.netUpdate = true; // netUpdate this javelin + int na = 0; + foreach (var p in Main.ActiveProjectiles) // Refreses the duration of all of the nanites on the npc. + { + if (p.type == ProjectileType && p.ai[0] == 1f && p.ai[1] == TargetWhoAmI) + { + // Main.NewText("Refreshing duration of nanite"); // debug text + p.timeLeft = 540; + na++; + } + } + // Main.NewText(na); // debug text + // ExampleJavelinBuff handles the damage over time (DoT) + target.AddBuff(Parasitism.BuffType, 540); + } + + public static void Create(int naniteCount, NPC target, int projDamage) + { + // Main.NewText($"naniteCount = {naniteCount}"); //debug text + int i = 0; + while(i < naniteCount) // I'm proud of this basic function, draws the amount of nanites in a parabola above the target + { + float k = naniteCount/2; + // Main.NewText($"k = {k}"); //debug text + int x = (i - ((int)Math.Floor(k)))*4; + float y = 1.0f / 6.0f * x * x; + y -= target.height; + x *= 4; + y *= 2; + Projectile.NewProjectile(target.GetSource_FromThis(), Vector2.Add(target.Center, new Vector2(x, y)), Vector2.Zero, ProjectileType, projDamage, 0f, Main.myPlayer); // Might want to use Target.Top and make it not as high above them, big bosses have nanites spawn on them I think + // Main.NewText($"({x},{y})"); //debug text + i += 1; + } + // Main.NewText($"made {i} nanites off of {naniteCount}"); //debug text + } + } +} diff --git a/Projectiles/SIVANanite.png b/Projectiles/SIVANanite.png new file mode 100644 index 0000000000000000000000000000000000000000..590b93d21185c5ecd10f18643ed8974ad7840e48 GIT binary patch literal 1112 zcmV-e1gHCnP)EX>4Tx04R}tkv&MmKpe$iQ)@*k9V{r~kfA!+MMWH?ibb$c+6t{Ym|Xe=O&XFE z7e~Rh;NZt%)xpJCR|i)?5c~jfc5qU3krMxx6k5c1aNLh~_a1le0HIlBs@XFKsG4P@ z6LB$@UloI|2p|lg7ef*=^<-u-3(xU&4LYkeQevU6TtrrTxlJDtqIJ2lHTZO z(IX(d4P0DzGIO`ldWEcnkEexxKabaryvcsjKB1;NTD# zFH!co$GiKwd;9lHyT2beH*$|AK=)q&000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rj1rGog4=QH_F8}}nR!KxbR9M5+mpzW#Fc5`588#uP zSwT+0Mh#u%1`BMn2gw0b*J~vV(Zq@59GoS#Mg-*hp>>O61}N}ry!MjwI6J6m9o~_Dy1&w zZvvV11f|ru?z;rYWN=xQR%>nRx{iW`+BnyN1gWZu&1M6@m$$dGAD-ONg~vNO#=h^f z{eI6d3;;aW^~jlG#k7hLi3b^mfhVmwI7c>1j?zojbF#<}QhzS-gP)U+kMq7S)?WZD z4gS4;u+++=ADoZT7!&n;Po(#QZQvcVr%;xqO^Iw&NIS^dw#5iDsj7-R&zBR@h|VM? zszsmqyMw)?V{%SOI%+Cma9!8)rV`p(EO=7RveEJe@}xDxFmOB``R?3#(p0U;S4w)8 z%#_wcPND#lMlsVv+%2a6tUvhk_l3}zXWP8kg~Jz8s?l8eT>K{t(WSihJ$ar}RTb}* zy8XT|rNk`7aQIbzuIsa?`o7O@G8C=#w4qG-Vd^Fq%^&x+5Tv=L-RD=_7s4Ll>ia^h eNBH;d3qJr%u*VE)Nf{3S0000EX>4Tx04R}tkv&MmKp2MKrk09SJJ>e3JS*T8GTa`7`_DtR^7gJ&T;wxJfVb<8VApK{o@=xvdw`gT+v;6pe?QiGN>BA>`yvnh&&KY9!($u3N5*gMx0Z61r2H zaFG7Jsg>ioSlYT~B&Xb!G94Rh4GC)ojir^JVx+Hi;myJaduXfiLG|J=pVyRky4_Q9QUAC(tQ4=p5 z;)0s;?(M7xtsIp}2y2&AV;NJSY9$T<$-)Jt8RBp=z1e*5n(qa(f$GI#HB!BqTFK+Z v=7T*xG`|-_37O}ET=JUcgQo%MJ>LtzUb{UUg5;3Z00000NkvXXu0mjfZi<{) literal 0 HcmV?d00001 diff --git a/Properties/launchSettings.json b/Properties/launchSettings.json new file mode 100644 index 0000000..ab8c14e --- /dev/null +++ b/Properties/launchSettings.json @@ -0,0 +1,16 @@ +{ + "profiles": { + "Terraria": { + "commandName": "Executable", + "executablePath": "$(DotNetName)", + "commandLineArgs": "$(tMLPath)", + "workingDirectory": "$(tMLSteamPath)" + }, + "TerrariaServer": { + "commandName": "Executable", + "executablePath": "$(DotNetName)", + "commandLineArgs": "$(tMLServerPath)", + "workingDirectory": "$(tMLSteamPath)" + } + } +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/Siva.cs b/Siva.cs new file mode 100644 index 0000000..092a0c1 --- /dev/null +++ b/Siva.cs @@ -0,0 +1,261 @@ +using System; +using System.Timers; +using System.Collections.Generic; +using MonoMod.RuntimeDetour; +using Terraria; +using Terraria.ModLoader; +using Terraria.GameContent.ItemDropRules; +using Terraria.ID; +using Terraria.ModLoader.Default; +using Terraria.ModLoader.UI; +using Terraria.DataStructures; +using Siva; +using Siva.Weapons; +using Siva.Buffs; +using Siva.Projectiles; + + + + +// only thing that really needs to be active mod wide is the drop chance and reduced crit, so here it is +namespace Siva +{ + public class Siva : Mod + { + public class ReducedCritMulti : GlobalNPC // Modifies the crit multiplier on NPCs so it doesn't do insane damage with it's high crit chance + { + + // Alters the base behavior of what happens when an NPC is hit by a projectile. + public override void ModifyHitByProjectile(NPC npc, Projectile projectile, ref NPC.HitModifiers modifiers) + { + if(LogicPerfected.HeldIsNorm() && LogicPerfected.Bullet(projectile)) + { + modifiers.CritDamage = new(1.6f, 1f); // Modifies Outbreak's bullets crit damage to 60% to match in game + } + else if(LogicPerfected.HeldIsMaster() && LogicPerfected.Bullet(projectile)) + { + modifiers.CritDamage = new(1.55f, 1f); // Modifies Outbreak's bullets crit damage to 55% as a little terraria bonus + } + } + } + public class OutbreakDrop : GlobalNPC + { + public override void ModifyNPCLoot(NPC npc, NPCLoot npcLoot) + { + if (npc.type == NPCID.MossHornet) + { + + npcLoot.Add(new ConditionalNormalvsExpertDropRule(Outbreak.ItemType, 350, 250, new Conditions.DownedAllMechBosses())); + } + } + } + } + public class LogicPerfected // I got so fed up with typing the same long ass hard to read conditionals, so I made this class. + { + public static bool HeldIsNorm() + { + return Main.LocalPlayer.HeldItem.type == Outbreak.ItemType; + } + public static bool HeldIsMaster() + { + return Main.LocalPlayer.HeldItem.type == MasterworkedOutbreak.ItemType; + } + public static bool Bullet(Projectile projectile) // Really it just checks that it's a projectile that acts like a bullet while you are holding Outbreak, best way I could find to do it :/. This means hypothetically someone can shoot bullets from any other gun then quickswap. Probably not useful but I'll see.. + { + return projectile.aiStyle == 1; + } + public static bool Nanite(Projectile projectile) + { + return projectile.type == SIVANanite.ProjectileType; + } + public static bool NormBullet(Projectile projectile) + { + return HeldIsNorm() && Bullet(projectile); + } + public static bool MasterBulletOrNanite(Projectile projectile) + { + return HeldIsMaster() && (Bullet(projectile) || Nanite(projectile)); + } + public static bool ParasitismOnTarget(NPC npc) + { + return npc.FindBuffIndex(Parasitism.BuffType) != -1; // FindBuffIndex returns -1 if the buff isn't found + } + } +} + +// none of the base game drops have a condition for the state of the game you are in and also have different chances based on expert vs master +public class ConditionalNormalvsExpertDropRule : IItemDropRule +{ + private int itemId; + private int normalModeChance; + private int expertModeChance; + private IItemDropRuleCondition condition; + + public ConditionalNormalvsExpertDropRule(int itemId, int normalModeChance, int expertModeChance, IItemDropRuleCondition condition) + { + this.itemId = itemId; + this.normalModeChance = normalModeChance; + this.expertModeChance = expertModeChance; + this.condition = condition; + } + + public bool CanDrop(DropAttemptInfo info) + { + return condition.CanDrop(info); + } + + public ItemDropAttemptResult TryDroppingItem(DropAttemptInfo info) + { + ItemDropAttemptResult result = new ItemDropAttemptResult(); + if (CanDrop(info)) + { + int chance = info.IsExpertMode ? expertModeChance : normalModeChance; + if (info.player.RollLuck(chance) == 0) + { + CommonCode.DropItem(info, itemId, 1, true); + result.State = ItemDropAttemptResultState.Success; + } + else + { + result.State = ItemDropAttemptResultState.FailedRandomRoll; + } + } + else + { + result.State = ItemDropAttemptResultState.DoesntFillConditions; + } + return result; + } + + public void ReportDroprates(List drops, DropRateInfoChainFeed ratesInfo) + { + DropRateInfoChainFeed ratesInfo2 = ratesInfo.With(1f); + ratesInfo2.AddCondition(condition); + float chance = ratesInfo2.parentDroprateChance != 0 && ratesInfo2.parentDroprateChance != 1f ? ratesInfo2.parentDroprateChance : (ratesInfo2.parentDroprateChance == 1f ? expertModeChance : normalModeChance); + float dropRate = 1f / chance * ratesInfo2.parentDroprateChance; + drops.Add(new DropRateInfo(itemId, 1, 1, dropRate, ratesInfo2.conditions)); + } + + public List ChainedRules => new List(); +} + + +// A timer to make sure the nanite hits are consecutive +public class RapidHitTimer +{ + private Timer hitTimer; + + public RapidHitTimer() + { + hitTimer = new Timer + { + AutoReset = false, + }; + hitTimer.Elapsed += NaniteCreation.ResetHits; + } + + public void Start() + { + hitTimer.Interval = 2000; + hitTimer.Enabled = true; + } + + public void Stop() + { + hitTimer.Enabled = false; + } +} + + + +/* +Nanite creation about to go crazy +I used to have one class in each of them that was copied and pasted, and I think it might still make more sense to put them in there +Deriving them off of each other isn't too important, I just wanted to try more programming things. +I also just wanted it to be a lot more readable, hence all the extra functions like OutbreakBullet and OutbreakNanite, as well as overriding OutbreakBullet instead of making a new class just to try it. +*/ + +public class NaniteCreation : GlobalProjectile // Creates Nanites on sustained fire and critical kills. +{ + + // Alters the base behavior of what happens when a projectile hits an NPC + protected static int outbreakHits = 0; + + protected static RapidHitTimer hitTimer = new RapidHitTimer(); + protected static void ResetHits() + { + outbreakHits = 0; + hitTimer.Stop(); + } + public static void ResetHits(Object ph, ElapsedEventArgs ph2) // Have to cater to Timer.Elapsed so I made an overload for it + { + outbreakHits = 0; + hitTimer.Stop(); + } + + + public override void OnHitNPC(Projectile projectile, NPC target, NPC.HitInfo hit, int damage) + { + // Checks to make sure the player is holding Outbreak and the projectile was a bullet, as well as making sure that the life of the target is more than 5 (ie not magic or a critter). + if (LogicPerfected.NormBullet(projectile) && target.lifeMax > 5) + { + outbreakHits++; + hitTimer.Start(); + // Main.NewText($"{outbreakHits}"); //debug text + if(outbreakHits >= 12) + { + int naniteCount = new Random().Next(2, 5); // It's just how ranges work in this function, I didn't make it, go yell at Microsoft + SIVANanite.Create(naniteCount, target, (int)(hit.SourceDamage*2.21)); + ResetHits(); + } + if(hit.Crit & target.life <= 0) // On critical kills make 9 nanites + { + // Main.NewText("Critical Kill!"); // debug text + SIVANanite.Create(9, target, (int)(hit.SourceDamage*1.38)); + } + } + } +} + + +public class MasterworkedNaniteCreation : NaniteCreation +{ + private new static int outbreakHits = 0; + + public override void OnHitNPC(Projectile projectile, NPC target, NPC.HitInfo hit, int damage) + { + + + + // Checks to make sure the player is holding MasterworkedOutbreak, and that the targets max life is more than 5 (ie. not magic/critters), as well as making sure the projectile is either a bullet or a siva nanite. + if (LogicPerfected.MasterBulletOrNanite(projectile) && target.lifeMax > 5) + { + // Checks to make sure that it was a bullet and not a nanite or anything + if(LogicPerfected.Bullet(projectile)) + { + outbreakHits++; + hitTimer.Start(); + if(outbreakHits >= 12) + { + int naniteCount = new Random().Next(2, 5); // It's just how ranges work in this function, I didn't make it, go yell at Microsoft + SIVANanite.Create(naniteCount, target, (int)(hit.SourceDamage*2.21)); + outbreakHits = 0; + ResetHits(); + } + + } + if(target.life <= 0) // On kill + { + if(target.FindBuffIndex(Parasitism.BuffType) != -1) // If parasitism is in the buff list of the target + { + SIVANanite.Create(4, target, (int)(damage*0.6)); // It's actually 15% (46.8 vs 7) of the normal ones in game according to the Destiny Data Compendium spreedsheets and I forgot to check it myself. Maybe it was pvp or something. Idk. But they also scale damage so that might be why. + } + + if(hit.Crit) // If the final blow was a crit + { + SIVANanite.Create(9, target, (int)(hit.SourceDamage*1.38)); + } + } + } + } +} \ No newline at end of file diff --git a/Siva.csproj b/Siva.csproj new file mode 100644 index 0000000..7853017 --- /dev/null +++ b/Siva.csproj @@ -0,0 +1,10 @@ + + + + + Siva + latest + + + + \ No newline at end of file diff --git a/Siva.sln b/Siva.sln new file mode 100644 index 0000000..02eb6a2 --- /dev/null +++ b/Siva.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.002.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Siva", "Siva.csproj", "{94357A29-B3C2-4A40-A301-4C495F984AA8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {94357A29-B3C2-4A40-A301-4C495F984AA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {94357A29-B3C2-4A40-A301-4C495F984AA8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {94357A29-B3C2-4A40-A301-4C495F984AA8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {94357A29-B3C2-4A40-A301-4C495F984AA8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {13B26FFE-7FBA-4AD1-8598-C8797B82D8C1} + EndGlobalSection +EndGlobal diff --git a/Sounds/Pew.wav b/Sounds/Pew.wav new file mode 100644 index 0000000000000000000000000000000000000000..0289b781adec5e806d20239af6a8d7f778c9b627 GIT binary patch literal 38622 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 RJaj#@)V~gQ#xTsB{U4P{vqk^_ literal 0 HcmV?d00001 diff --git a/Weapons/MasterworkedOutbreak.cs b/Weapons/MasterworkedOutbreak.cs new file mode 100644 index 0000000..0b3224d --- /dev/null +++ b/Weapons/MasterworkedOutbreak.cs @@ -0,0 +1,69 @@ +using Microsoft.Xna.Framework; +using Siva.Items; +using Terraria; +using Terraria.Audio; +using Terraria.ID; +using Terraria.ModLoader; + +namespace Siva.Weapons +{ + public class MasterworkedOutbreak : ModItem + { + public static readonly int ItemType = ModContent.ItemType(); + + public override void SetDefaults() + { + // Modders can use Item.DefaultToRangedWeapon to quickly set many common properties, such as: useTime, useAnimation, useStyle, autoReuse, DamageType, shoot, shootSpeed, useAmmo, and noMelee. These are all shown individually here for teaching purposes. + + // Common Properties + Item.width = 22; // Hitbox width of the item. + Item.height = 10; // Hitbox height of the item. + Item.scale = 0.75f; + Item.rare = ItemRarityID.Yellow; // The color that the item's name will be in-game. + + + // Use Properties + Item.useTime = 4; // one third of useAnimation for three burst effect I think + Item.useAnimation = 12; // The length of the item's use animation in ticks + Item.reuseDelay = 12; // The delay before you can shoot again, crazy I know + Item.useStyle = ItemUseStyleID.Shoot; // How you use the item (swinging, holding out, etc.) + Item.autoReuse = true; // Whether or not you can hold click to automatically use it again + + // Weapon Properties + Item.consumeAmmoOnLastShotOnly = true; + Item.DamageType = DamageClass.Ranged; // Sets the damage type to ranged. + Item.damage = 22; // Sets the item's damage. Note that projectiles shot by this weapon will use its and the used ammunition's damage added together. + Item.knockBack = 5f; // Sets the item's knockback. Note that projectiles shot by this weapon will use its and the used ammunition's knockback added together. + Item.noMelee = true; // So the item's animation doesn't do damage. + Item.crit = 34; // Sets the item's crit chance. Note that the player's base crit chance is 4% and will be added to the item's crit chance. + + // Gun Properties + Item.shoot = ProjectileID.PurificationPowder; // For some reason, all the guns in the vanilla source have this. + Item.shootSpeed = 20f; // The speed of the projectile (measured in pixels per frame.) + Item.useAmmo = AmmoID.Bullet; // The "ammo Id" of the ammo item that this weapon uses. Ammo IDs are magic numbers that usually correspond to the item id of one item that most commonly represent the ammo type. + + // The sound that this item plays when used. + Item.UseSound = new SoundStyle($"{nameof(Siva)}/Sounds/Pew") { + Volume = 1f, + PitchVariance = 0, + MaxInstances = 3, + }; + + } + + // This method lets you adjust position of the gun in the player's hands. Play with these values until it looks good with your graphics. + public override Vector2? HoldoutOffset() { + return new Vector2(2f, 0f); + } + + public override void AddRecipes() + { + CreateRecipe() + .AddIngredient() + .AddIngredient() + .AddTile(TileID.MythrilAnvil) + .Register(); + } + + } +} \ No newline at end of file diff --git a/Weapons/MasterworkedOutbreak.png b/Weapons/MasterworkedOutbreak.png new file mode 100644 index 0000000000000000000000000000000000000000..206b7589c7e3e0fd919430715184a38f6dcaf9c8 GIT binary patch literal 14240 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 b2xR9j+*E%24fop>*I)Cl4d1!yBX|BUuYXDj literal 0 HcmV?d00001 diff --git a/Weapons/Outbreak.cs b/Weapons/Outbreak.cs new file mode 100644 index 0000000..0ab042a --- /dev/null +++ b/Weapons/Outbreak.cs @@ -0,0 +1,115 @@ +using System; +using Microsoft.Xna.Framework; +using Terraria; +using Terraria.Audio; +using Terraria.ID; +using Terraria.ModLoader; +using Siva.Items; + +namespace Siva.Weapons +{ + public class Outbreak : ModItem + { + public static readonly int ItemType = ModContent.ItemType(); + + public override void SetDefaults() + { + // Modders can use Item.DefaultToRangedWeapon to quickly set many common properties, such as: useTime, useAnimation, useStyle, autoReuse, DamageType, shoot, shootSpeed, useAmmo, and noMelee. These are all shown individually here for teaching purposes. + + // Common Properties + Item.width = 22; // Hitbox width of the item. + Item.height = 10; // Hitbox height of the item. + Item.scale = 0.75f; + Item.rare = ItemRarityID.Red; // The color that the item's name will be in-game. + + + // Use Properties + Item.useTime = 4; // one third of useAnimation for three burst effect I think + Item.useAnimation = 12; // The length of the item's use animation in ticks + Item.reuseDelay = 12; // The delay before you can shoot again, crazy I know + Item.useStyle = ItemUseStyleID.Shoot; // How you use the item (swinging, holding out, etc.) + Item.autoReuse = true; // Whether or not you can hold click to automatically use it again + + // Weapon Properties + Item.consumeAmmoOnLastShotOnly = true; + Item.DamageType = DamageClass.Ranged; // Sets the damage type to ranged. + Item.damage = 22; // Sets the item's damage. Note that projectiles shot by this weapon will use its and the used ammunition's damage added together. + Item.knockBack = 3f; // Sets the item's knockback. Note that projectiles shot by this weapon will use its and the used ammunition's knockback added together. + Item.noMelee = true; // So the item's animation doesn't do damage. + Item.crit = 29; // Sets the item's crit chance. Note that the player's base crit chance is 4% and will be added to the item's crit chance. + + // Gun Properties + Item.shoot = ProjectileID.PurificationPowder; // For some reason, all the guns in the vanilla source have this. + Item.shootSpeed = 20f; // The speed of the projectile (measured in pixels per frame.) + Item.useAmmo = AmmoID.Bullet; // The "ammo Id" of the ammo item that this weapon uses. Ammo IDs are magic numbers that usually correspond to the item id of one item that most commonly represent the ammo type. + + // The sound that this item plays when used. + Item.UseSound = new SoundStyle($"{nameof(Siva)}/Sounds/Pew") { + Volume = 1f, + PitchVariance = 0, + MaxInstances = 3, + }; + + } + + // This method lets you adjust position of the gun in the player's hands. Play with these values until it looks good with your graphics. + public override Vector2? HoldoutOffset() { + return new Vector2(2f, 0f); + } + } + + public class CatalystDropChance : GlobalNPC + { + private static readonly Random Random = new Random(); + public override void OnHitByProjectile(NPC npc, Projectile projectile, NPC.HitInfo hit, int damageDone) + { + Player player = Main.player[projectile.owner]; + if(!player.HasItemInAnyInventory(ModContent.ItemType()) && player.HeldItem.type == Outbreak.ItemType && projectile.aiStyle == 1 && hit.Crit && npc.life <= 0 && !npc.SpawnedFromStatue && npc.lifeMax > 5) + { + int randomNumber = Random.Next(350); + + // Main.NewText($"Rolled Catty drop chance, randint is {randomNumber}"); // debug text + if(randomNumber == 77) + { + player.QuickSpawnItem(player.GetSource_FromThis(), ModContent.ItemType()); + } + } + } + } +} + + // Old nanite creation method. + /* + public class NaniteCreation : GlobalProjectile // Creates 1-3 Nanites on critical hits + { + // Alters the base behavior of what happens when a projectile hits an NPC + public override void OnHitNPC(Projectile projectile, NPC target, NPC.HitInfo hit, int damage) + { + // Accessing the player who shot the projectile + Player player = Main.player[projectile.owner]; + // Checks to make sure the player is holding MasterworkedOutbreak and the projectile was not a SIVA Nanite so they don't spawn more nanites. + if (player.HeldItem.type == ModContent.ItemType() & projectile.type != ModContent.ProjectileType()) + { + if(hit.Crit) // On critical hits + { + int randomNumber = new Random().Next(101); // Random number 0-10 + if (randomNumber <= 60) // 60% chance to make a nanite + { + SIVANanite.Create(1, projectile, target, damage/2); + } + else if (60 < randomNumber & randomNumber <= 90) // 30% chance to make a nanite twice + { + SIVANanite.Create(2, projectile, target, damage/2); + } + else if (90 < randomNumber & randomNumber <= 100) // 10% chance to make a nanite thrice + { + SIVANanite.Create(3, projectile, target, damage/2); + } + + } + } + } + + }*/ + + diff --git a/Weapons/Outbreak.png b/Weapons/Outbreak.png new file mode 100644 index 0000000000000000000000000000000000000000..7b81d683aa2f09e7b95ccbfc445108c598c2414a GIT binary patch literal 6685 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 KlP_9tkNqF_Dz6p* literal 0 HcmV?d00001 diff --git a/build.txt b/build.txt new file mode 100644 index 0000000..64fda52 --- /dev/null +++ b/build.txt @@ -0,0 +1,3 @@ +displayName = Outbreak Perfected +author = ForeverPyrite +version = 0.9.8 \ No newline at end of file diff --git a/description.txt b/description.txt new file mode 100644 index 0000000..4861aca --- /dev/null +++ b/description.txt @@ -0,0 +1,7 @@ +This mod introduces Outbreak Perfected, the iconic pulse rifle from the Destiny francise, into Terraria. + +This mod includes: + - Outbreak Perfected (Obtainable by defeating Moss Hornets in the Jungle, might change this, but I was inspired by the Uzi or something...) + - Outbreak Perfected Catalyst (Rarely found from getting Critical Kills. Since it's already rare I didn't add an extra 700 kills to match Destiny lol) + +This one is very accurate to the game, yeah. Not much to say. Just adds the one weapon. \ No newline at end of file diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2f85fe3a60949818d0b3dcc4f2d526b0916eba78 GIT binary patch literal 4303 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 literal 0 HcmV?d00001 diff --git a/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs new file mode 100644 index 0000000..678fc5f --- /dev/null +++ b/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")] diff --git a/obj/Debug/net8.0/Siva.AssemblyInfo.cs b/obj/Debug/net8.0/Siva.AssemblyInfo.cs new file mode 100644 index 0000000..d7878ce --- /dev/null +++ b/obj/Debug/net8.0/Siva.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Siva")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("Siva")] +[assembly: System.Reflection.AssemblyTitleAttribute("Siva")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/obj/Debug/net8.0/Siva.AssemblyInfoInputs.cache b/obj/Debug/net8.0/Siva.AssemblyInfoInputs.cache new file mode 100644 index 0000000..eba20e0 --- /dev/null +++ b/obj/Debug/net8.0/Siva.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +47b2cfa54c9c9d42493b9726e8ede67436d64078f36f1068b1efa251fb950172 diff --git a/obj/Debug/net8.0/Siva.GeneratedMSBuildEditorConfig.editorconfig b/obj/Debug/net8.0/Siva.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..98ca99c --- /dev/null +++ b/obj/Debug/net8.0/Siva.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,15 @@ +is_global = true +build_property.TargetFramework = net8.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = Siva +build_property.ProjectDir = C:\Users\ForeverPyrite\Documents\My Games\Terraria\tModLoader\ModSources\Siva\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 8.0 +build_property.EnableCodeStyleSeverity = diff --git a/obj/Debug/net8.0/Siva.assets.cache b/obj/Debug/net8.0/Siva.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..6cb9993724b30eaca735d57cccb50b1c1c7991f5 GIT binary patch literal 579 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 + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\ForeverPyrite\.nuget\packages\ + PackageReference + 6.13.0 + + + + + + C:\Users\ForeverPyrite\.nuget\packages\tmodloader.codeassist\0.1.5 + + \ No newline at end of file diff --git a/obj/Siva.csproj.nuget.g.targets b/obj/Siva.csproj.nuget.g.targets new file mode 100644 index 0000000..35a7576 --- /dev/null +++ b/obj/Siva.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/obj/project.assets.json b/obj/project.assets.json new file mode 100644 index 0000000..55c9e0b --- /dev/null +++ b/obj/project.assets.json @@ -0,0 +1,115 @@ +{ + "version": 3, + "targets": { + "net8.0": { + "tModLoader.CodeAssist/0.1.5": { + "type": "package" + } + } + }, + "libraries": { + "tModLoader.CodeAssist/0.1.5": { + "sha512": "Sg/jKEg/z5eN+Cdi3/9CU4JfJwvXHVH+UDJf4Lipo26uTa+guLLJXH1XDJNPShTFwKK8jMUYbthINP4QhsgHSA==", + "type": "package", + "path": "tmodloader.codeassist/0.1.5", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "NugetIcon.png", + "analyzers/dotnet/cs/tModLoader.CodeAssist.dll", + "tmodloader.codeassist.0.1.5.nupkg.sha512", + "tmodloader.codeassist.nuspec", + "tools/install.ps1", + "tools/uninstall.ps1" + ] + } + }, + "projectFileDependencyGroups": { + "net8.0": [ + "tModLoader.CodeAssist >= 0.1.*" + ] + }, + "packageFolders": { + "C:\\Users\\ForeverPyrite\\.nuget\\packages\\": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\ForeverPyrite\\Documents\\My Games\\Terraria\\tModLoader\\ModSources\\Siva\\Siva.csproj", + "projectName": "Siva", + "projectPath": "C:\\Users\\ForeverPyrite\\Documents\\My Games\\Terraria\\tModLoader\\ModSources\\Siva\\Siva.csproj", + "packagesPath": "C:\\Users\\ForeverPyrite\\.nuget\\packages\\", + "outputPath": "C:\\Users\\ForeverPyrite\\Documents\\My Games\\Terraria\\tModLoader\\ModSources\\Siva\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\ForeverPyrite\\AppData\\Roaming\\NuGet\\NuGet.Config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "9.0.200" + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "dependencies": { + "tModLoader.CodeAssist": { + "target": "Package", + "version": "[0.1.*, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[8.0.13, 8.0.13]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[8.0.13, 8.0.13]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[8.0.13, 8.0.13]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.200/PortableRuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/obj/project.nuget.cache b/obj/project.nuget.cache new file mode 100644 index 0000000..6ca90db --- /dev/null +++ b/obj/project.nuget.cache @@ -0,0 +1,13 @@ +{ + "version": 2, + "dgSpecHash": "xoCv9EvyOl0=", + "success": true, + "projectFilePath": "C:\\Users\\ForeverPyrite\\Documents\\My Games\\Terraria\\tModLoader\\ModSources\\Siva\\Siva.csproj", + "expectedPackageFiles": [ + "C:\\Users\\ForeverPyrite\\.nuget\\packages\\tmodloader.codeassist\\0.1.5\\tmodloader.codeassist.0.1.5.nupkg.sha512", + "C:\\Users\\ForeverPyrite\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.13\\microsoft.netcore.app.ref.8.0.13.nupkg.sha512", + "C:\\Users\\ForeverPyrite\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.13\\microsoft.windowsdesktop.app.ref.8.0.13.nupkg.sha512", + "C:\\Users\\ForeverPyrite\\.nuget\\packages\\microsoft.aspnetcore.app.ref\\8.0.13\\microsoft.aspnetcore.app.ref.8.0.13.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file