From 8a58a3668c4efcd68b289169f7ff9d8585755cee Mon Sep 17 00:00:00 2001 From: bobfishkins23 Date: Sun, 12 Jan 2025 21:54:09 -0500 Subject: [PATCH 1/6] Various balance tuning --- .../SquidBoss/NPCs.SquidBoss.Attacks.cs | 69 ++++++++++--------- .../VitricBoss/NPCs.VitricBoss.Attacks.cs | 44 ++++++------ .../VitricBoss/Projectiles.FinalLaser.cs | 2 +- .../VitricBoss/Projectiles.SpikeMine.cs | 2 +- .../VitricBoss/Projectiles.VitricBomb.cs | 2 +- .../Items/Jungle/Accessories.Corpseflower.cs | 6 +- Content/Items/Jungle/Weapons.ManEaterPot.cs | 1 + Content/Items/Manabonds/AquaticManabond.cs | 5 +- Content/Items/Manabonds/BasicManabond.cs | 1 + Content/Items/Manabonds/DruidicManabond.cs | 2 + Content/Items/Manabonds/InfernalManabond.cs | 1 + Content/Items/Manabonds/ShockingManabond.cs | 1 + Content/Items/Potions/BarrierPotions.cs | 8 +-- .../Snow/Accessories.AquamarinePendant.cs | 5 +- ...Projectiles.StarwoodBoomerangProjectile.cs | 2 +- Content/Items/Vitric/Weapons.Coalescence.cs | 2 +- Content/Items/Vitric/Weapons.PhoenixStorm.cs | 4 +- .../Items/Vitric/Weapons.RefractiveBlade.cs | 2 +- Core/Systems/BarrierSystem/BarrierPlayer.cs | 2 +- Helpers/Helper.cs | 14 ++++ 20 files changed, 102 insertions(+), 73 deletions(-) diff --git a/Content/Bosses/SquidBoss/NPCs.SquidBoss.Attacks.cs b/Content/Bosses/SquidBoss/NPCs.SquidBoss.Attacks.cs index 7a9005794..06c4354ec 100644 --- a/Content/Bosses/SquidBoss/NPCs.SquidBoss.Attacks.cs +++ b/Content/Bosses/SquidBoss/NPCs.SquidBoss.Attacks.cs @@ -8,6 +8,9 @@ namespace StarlightRiver.Content.Bosses.SquidBoss { public partial class SquidBoss : ModNPC { + public static int BlobDamage => Helpers.Helper.GetProjectileDamage(30, 60, 90); + public static int LaserDamage => Helpers.Helper.GetProjectileDamage(150, 200, 999999); + private void RandomizeTarget() { if (Main.netMode == NetmodeID.MultiplayerClient) @@ -137,7 +140,7 @@ private void TentacleSpike() { for (int i = 0; i < 2; i++) { - Projectile.NewProjectile(NPC.GetSource_FromAI(), tentacle.NPC.Center + new Vector2(0, -150), new Vector2(i == 0 ? -4 : 4, -20), ModContent.ProjectileType(), 30, 1, Main.myPlayer); + Projectile.NewProjectile(NPC.GetSource_FromAI(), tentacle.NPC.Center + new Vector2(0, -150), new Vector2(i == 0 ? -4 : 4, -20), ModContent.ProjectileType(), BlobDamage, 1, Main.myPlayer); } } @@ -145,7 +148,7 @@ private void TentacleSpike() { for (int i = 0; i < 2; i++) { - Projectile.NewProjectile(NPC.GetSource_FromAI(), tentacle.NPC.Center + new Vector2(0, -150), new Vector2(i == 0 ? -15 : 15, 0), ModContent.ProjectileType(), 30, 1, Main.myPlayer); + Projectile.NewProjectile(NPC.GetSource_FromAI(), tentacle.NPC.Center + new Vector2(0, -150), new Vector2(i == 0 ? -15 : 15, 0), ModContent.ProjectileType(), BlobDamage, 1, Main.myPlayer); } } @@ -153,7 +156,7 @@ private void TentacleSpike() { for (int i = 0; i < 2; i++) { - Projectile.NewProjectile(NPC.GetSource_FromAI(), tentacle.NPC.Center + new Vector2(0, -150), new Vector2(i == 0 ? -24 : 24, 0), ModContent.ProjectileType(), 30, 1, Main.myPlayer); + Projectile.NewProjectile(NPC.GetSource_FromAI(), tentacle.NPC.Center + new Vector2(0, -150), new Vector2(i == 0 ? -24 : 24, 0), ModContent.ProjectileType(), BlobDamage, 1, Main.myPlayer); } } } @@ -248,7 +251,7 @@ private void InkBurst() if (AttackTimer % delay == 0 && Main.netMode != NetmodeID.MultiplayerClient) { Vector2 speed = new Vector2(Main.masterMode ? 12 : 8, 0).RotatedBy(angle + Main.rand.NextFloat(-0.5f, 0.5f)); - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), speed, ModContent.ProjectileType(), 13, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), speed, ModContent.ProjectileType(), BlobDamage, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); } if (AttackTimer % delay == 0) @@ -273,11 +276,11 @@ private void InkBurstAlt() { if (Main.netMode != NetmodeID.MultiplayerClient) { - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(0, -15).RotatedBy(-0.5f), ModContent.ProjectileType(), 20, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(0, -15).RotatedBy(-0.25f), ModContent.ProjectileType(), 20, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(0, -15).RotatedBy(-0.5f), ModContent.ProjectileType(), BlobDamage, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(0, -15).RotatedBy(-0.25f), ModContent.ProjectileType(), BlobDamage, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(0, -15).RotatedBy(0.5f), ModContent.ProjectileType(), 20, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(0, -15).RotatedBy(0.25f), ModContent.ProjectileType(), 20, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(0, -15).RotatedBy(0.5f), ModContent.ProjectileType(), BlobDamage, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(0, -15).RotatedBy(0.25f), ModContent.ProjectileType(), BlobDamage, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); } Helpers.Helper.PlayPitched("SquidBoss/MagicSplash", 1.5f, 0f, NPC.Center); @@ -298,18 +301,18 @@ private void InkBurstAlt() { if (Main.netMode != NetmodeID.MultiplayerClient) { - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, -150), new Vector2(0, -20).RotatedBy(-0.25f), ModContent.ProjectileType(), 20, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, -150), new Vector2(0, -20).RotatedBy(-0.125f), ModContent.ProjectileType(), 20, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, -150), new Vector2(0, -20).RotatedBy(-0.25f), ModContent.ProjectileType(), BlobDamage, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, -150), new Vector2(0, -20).RotatedBy(-0.125f), ModContent.ProjectileType(), BlobDamage, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, -150), new Vector2(0, -20).RotatedBy(0.25f), ModContent.ProjectileType(), 20, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, -150), new Vector2(0, -20).RotatedBy(0.125f), ModContent.ProjectileType(), 20, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, -150), new Vector2(0, -20).RotatedBy(0.25f), ModContent.ProjectileType(), BlobDamage, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, -150), new Vector2(0, -20).RotatedBy(0.125f), ModContent.ProjectileType(), BlobDamage, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); if (Main.masterMode) { for (int i = 0; i < 2; i++) { - Projectile.NewProjectile(NPC.GetSource_FromAI(), NPC.Center + new Vector2(0, -150), new Vector2(i == 0 ? -10 : 10, 0), ModContent.ProjectileType(), 30, 1, Main.myPlayer); - Projectile.NewProjectile(NPC.GetSource_FromAI(), NPC.Center + new Vector2(0, -150), new Vector2(i == 0 ? -40 : 40, 0), ModContent.ProjectileType(), 30, 1, Main.myPlayer); + Projectile.NewProjectile(NPC.GetSource_FromAI(), NPC.Center + new Vector2(0, -150), new Vector2(i == 0 ? -10 : 10, 0), ModContent.ProjectileType(), BlobDamage, 1, Main.myPlayer); + Projectile.NewProjectile(NPC.GetSource_FromAI(), NPC.Center + new Vector2(0, -150), new Vector2(i == 0 ? -40 : 40, 0), ModContent.ProjectileType(), BlobDamage, 1, Main.myPlayer); } } } @@ -498,12 +501,12 @@ private void PlatformSweep() if (Main.netMode != NetmodeID.MultiplayerClient) { if (Main.rand.NextBool()) - Projectile.NewProjectile(NPC.GetSource_FromAI(), savedPoint + new Vector2(0, 10), new Vector2(0, -5), ModContent.ProjectileType(), 40, 1, Main.myPlayer); + Projectile.NewProjectile(NPC.GetSource_FromAI(), savedPoint + new Vector2(0, 10), new Vector2(0, -5), ModContent.ProjectileType(), BlobDamage, 1, Main.myPlayer); else - Projectile.NewProjectile(NPC.GetSource_FromAI(), savedPoint + new Vector2(0, 10), new Vector2(0, -5), ModContent.ProjectileType(), 40, 1, Main.myPlayer, 3.14f); + Projectile.NewProjectile(NPC.GetSource_FromAI(), savedPoint + new Vector2(0, 10), new Vector2(0, -5), ModContent.ProjectileType(), BlobDamage, 1, Main.myPlayer, 3.14f); - Projectile.NewProjectile(NPC.GetSource_FromAI(), savedPoint + new Vector2(0, 30), new Vector2(0, -10), ModContent.ProjectileType(), 40, 1, Main.myPlayer); - Projectile.NewProjectile(NPC.GetSource_FromAI(), savedPoint + new Vector2(0, 30), new Vector2(0, -10), ModContent.ProjectileType(), 40, 1, Main.myPlayer, 3.14f); + Projectile.NewProjectile(NPC.GetSource_FromAI(), savedPoint + new Vector2(0, 30), new Vector2(0, -10), ModContent.ProjectileType(), BlobDamage, 1, Main.myPlayer); + Projectile.NewProjectile(NPC.GetSource_FromAI(), savedPoint + new Vector2(0, 30), new Vector2(0, -10), ModContent.ProjectileType(), BlobDamage, 1, Main.myPlayer, 3.14f); } Terraria.Audio.SoundEngine.PlaySound(SoundID.Item9, NPC.Center); @@ -600,8 +603,8 @@ private void ArenaSweep() if (AttackTimer == 201 + k * 20 && Main.masterMode && Main.netMode != NetmodeID.MultiplayerClient) { - Projectile.NewProjectile(NPC.GetSource_FromThis(), tentacle.NPC.Center, new Vector2(0, -6).RotatedBy(-0.55f), ModContent.ProjectileType(), 24, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); - Projectile.NewProjectile(NPC.GetSource_FromThis(), tentacle.NPC.Center, new Vector2(0, -6).RotatedBy(0.55f), ModContent.ProjectileType(), 24, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); + Projectile.NewProjectile(NPC.GetSource_FromThis(), tentacle.NPC.Center, new Vector2(0, -6).RotatedBy(-0.55f), ModContent.ProjectileType(), BlobDamage, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); + Projectile.NewProjectile(NPC.GetSource_FromThis(), tentacle.NPC.Center, new Vector2(0, -6).RotatedBy(0.55f), ModContent.ProjectileType(), BlobDamage, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); } if (AttackTimer > 360 + k * 20 && AttackTimer < 390 + k * 20) @@ -675,26 +678,26 @@ private void Spew() { for (int k = 0; k < 14; k++) { - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(-100 + k * 14, 0), ModContent.ProjectileType(), 24, 0.2f, Main.myPlayer); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(-100 + k * 14, 0), ModContent.ProjectileType(), BlobDamage, 0.2f, Main.myPlayer); } for (int k = 0; k < 14; k++) { - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(-107 + k * 14, 2), ModContent.ProjectileType(), 24, 0.2f, Main.myPlayer); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(-107 + k * 14, 2), ModContent.ProjectileType(), BlobDamage, 0.2f, Main.myPlayer); } } else if (Main.expertMode) //spawn more + closer together on expert { for (int k = 0; k < 14; k++) { - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(-100 + k * 14, 0), ModContent.ProjectileType(), 24, 0.2f, Main.myPlayer); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(-100 + k * 14, 0), ModContent.ProjectileType(), BlobDamage, 0.2f, Main.myPlayer); } } else { for (int k = 0; k < 10; k++) { - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(-100 + k * 20, 0), ModContent.ProjectileType(), 24, 0.2f, Main.myPlayer); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(-100 + k * 20, 0), ModContent.ProjectileType(), BlobDamage, 0.2f, Main.myPlayer); } } } @@ -728,14 +731,14 @@ private void SpewAlternate() { for (int k = 0; k < 5; k++) { - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 200), new Vector2(-10 + k * 5, -6), ModContent.ProjectileType(), 15, 0.2f, Main.myPlayer, k == 2 ? 1.57f : k > 2 ? 3.14f : 0); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 200), new Vector2(-10 + k * 5, -6), ModContent.ProjectileType(), BlobDamage, 0.2f, Main.myPlayer, k == 2 ? 1.57f : k > 2 ? 3.14f : 0); } } else { for (int k = 0; k < 6; k++) { - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 200), new Vector2(-10 + k * 4, -6), ModContent.ProjectileType(), 15, 0.2f, Main.myPlayer, k > 2 ? 3.14f : 0); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 200), new Vector2(-10 + k * 4, -6), ModContent.ProjectileType(), BlobDamage, 0.2f, Main.myPlayer, k > 2 ? 3.14f : 0); } } @@ -743,7 +746,7 @@ private void SpewAlternate() { for (int k = -1; k <= 1; k += 2) { - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 200), new Vector2(k * 2, -12), ModContent.ProjectileType(), 15, 0.2f, Main.myPlayer, k == -1 ? 0 : 3.14f); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 200), new Vector2(k * 2, -12), ModContent.ProjectileType(), BlobDamage, 0.2f, Main.myPlayer, k == -1 ? 0 : 3.14f); } } } @@ -788,7 +791,7 @@ private void Laser() if (Main.netMode != NetmodeID.MultiplayerClient) { Bosses.SquidBoss.Laser.ParentWhoAmIToAssign = NPC.whoAmI; - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, -200), Vector2.Zero, ModContent.ProjectileType(), 150, 0.2f, 255, 0, AttackTimer * 0.1f); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, -200), Vector2.Zero, ModContent.ProjectileType(), LaserDamage, 0.2f, 255, 0, AttackTimer * 0.1f); } } @@ -898,7 +901,7 @@ private void Leap() { for (float k = -3.14f / 4; k <= 3.14f; k += 3.14f / 4f) { - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(-10, 0).RotatedBy(k), ModContent.ProjectileType(), 24, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(-10, 0).RotatedBy(k), ModContent.ProjectileType(), BlobDamage, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); } } } @@ -911,7 +914,7 @@ private void Leap() { for (float k = -3.14f / 4; k <= 3.14f; k += 3.14f / 4f) { - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(-10, 0).RotatedBy(k), ModContent.ProjectileType(), 24, 0.2f, 255, 3.14f, Main.rand.NextFloat(6.28f)); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(-10, 0).RotatedBy(k), ModContent.ProjectileType(), BlobDamage, 0.2f, 255, 3.14f, Main.rand.NextFloat(6.28f)); } } } @@ -995,7 +998,7 @@ private void LeapHard() if (Main.netMode != NetmodeID.MultiplayerClient) { for (float k = 0; k <= 3.14f; k += 3.14f / 6f) - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(-10, 0).RotatedBy(k), ModContent.ProjectileType(), 10, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(-10, 0).RotatedBy(k), ModContent.ProjectileType(), BlobDamage, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); } } @@ -1075,7 +1078,7 @@ private void TentacleSpike2() } if (Main.masterMode && AttackTimer == k * 80 + 130 && Main.netMode != NetmodeID.MultiplayerClient) - Projectile.NewProjectile(NPC.GetSource_FromThis(), tentacle.basePoint, Vector2.Normalize(tentacle.movementTarget - tentacle.basePoint) * 8, ModContent.ProjectileType(), 24, 0.2f, Main.myPlayer, k == -1 ? 0 : 3.14f); + Projectile.NewProjectile(NPC.GetSource_FromThis(), tentacle.basePoint, Vector2.Normalize(tentacle.movementTarget - tentacle.basePoint) * 8, ModContent.ProjectileType(), BlobDamage, 0.2f, Main.myPlayer, k == -1 ? 0 : 3.14f); if (AttackTimer > k * 80 + 90 && AttackTimer < k * 80 + 150) //retracting { @@ -1220,7 +1223,7 @@ private void InkBurst2() if (Main.netMode != NetmodeID.MultiplayerClient) { int speed = Main.masterMode ? 15 : 10; - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(speed, 0).RotatedBy(k), ModContent.ProjectileType(), 13, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 100), new Vector2(speed, 0).RotatedBy(k), ModContent.ProjectileType(), BlobDamage, 0.2f, 255, 0, Main.rand.NextFloat(6.28f)); } } } diff --git a/Content/Bosses/VitricBoss/NPCs.VitricBoss.Attacks.cs b/Content/Bosses/VitricBoss/NPCs.VitricBoss.Attacks.cs index 8ef8d3399..01b253c3a 100644 --- a/Content/Bosses/VitricBoss/NPCs.VitricBoss.Attacks.cs +++ b/Content/Bosses/VitricBoss/NPCs.VitricBoss.Attacks.cs @@ -10,6 +10,10 @@ namespace StarlightRiver.Content.Bosses.VitricBoss { public sealed partial class VitricBoss : ModNPC { + public static int ShardSpitDamage => Helpers.Helper.GetProjectileDamage(35, 70, 100); + public static int ConeRingDamage => Helpers.Helper.GetProjectileDamage(40, 80, 120); + public static int LaserDamage => Helpers.Helper.GetProjectileDamage(60, 120, 999999); + public int BrokenCount => crystals.Count(n => n.ai[0] == 3); public void ResetAttack() @@ -110,10 +114,10 @@ private void MakeCrystalVulnerable() if (AttackTimer > 180 && AttackTimer % 25 == 0 && Main.netMode != NetmodeID.MultiplayerClient) { - Projectile.NewProjectile(NPC.GetSource_FromThis(), homePos + new Vector2(Main.rand.Next(-700, 700), -460), new Vector2(0, 18), ProjectileType(), 15, 0); + Projectile.NewProjectile(NPC.GetSource_FromThis(), homePos + new Vector2(Main.rand.Next(-700, 700), -460), new Vector2(0, 18), ProjectileType(), ShardSpitDamage, 0); if (Main.masterMode) - Projectile.NewProjectile(NPC.GetSource_FromThis(), homePos + new Vector2(Main.rand.Next(-700, 700), 420), new Vector2(0, -18), ProjectileType(), 15, 0); + Projectile.NewProjectile(NPC.GetSource_FromThis(), homePos + new Vector2(Main.rand.Next(-700, 700), 420), new Vector2(0, -18), ProjectileType(), ShardSpitDamage, 0); } if (AttackTimer >= 720) @@ -128,7 +132,7 @@ private void FireCage() { float rot = (NPC.Center - Main.player[NPC.target].Center).ToRotation() + Main.rand.NextFloat(-0.5f, 0.5f); - int index = Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 30), Vector2.Zero, ProjectileType(), 25, 0, Main.myPlayer, 0, rot); //fire cone + int index = Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 30), Vector2.Zero, ProjectileType(), ConeRingDamage, 0, Main.myPlayer, 0, rot); //fire cone (Main.projectile[index].ModProjectile as FireCone).extraShots = BrokenCount >= 1; @@ -359,7 +363,7 @@ private void CrystalSmashSpaced() fireRate -= 10; if (AttackTimer % fireRate == 0 && Main.netMode != NetmodeID.MultiplayerClient) - Projectile.NewProjectile(NPC.GetSource_FromThis(), crystal.Center + new Vector2(0, -32), Vector2.Normalize(crystal.Center - Player.Center).RotatedByRandom(variance) * -10, ProjectileType(), 26, 0, Main.myPlayer); + Projectile.NewProjectile(NPC.GetSource_FromThis(), crystal.Center + new Vector2(0, -32), Vector2.Normalize(crystal.Center - Player.Center).RotatedByRandom(variance) * -10, ProjectileType(), ShardSpitDamage, 0, Main.myPlayer); if (AttackTimer % 10 == 0) Dust.NewDustPerfect(crystal.Center, DustType()); @@ -380,7 +384,7 @@ private void SpikeMines() for (int k = 0; k < 1 + crystals.Count(n => n.ai[0] == 3) + (Main.expertMode ? 1 : 0); k++) { if (k < points.Count && Main.netMode != NetmodeID.MultiplayerClient) - Projectile.NewProjectile(NPC.GetSource_FromThis(), points[k] + Vector2.UnitY * 64, Vector2.Zero, ProjectileType(), 25, 0); + Projectile.NewProjectile(NPC.GetSource_FromThis(), points[k] + Vector2.UnitY * 64, Vector2.Zero, ProjectileType(), ConeRingDamage, 0); } ResetAttack(); @@ -446,7 +450,7 @@ private void PlatformDash() Vector2 vel = Vector2.Normalize(NPC.Center - Main.player[NPC.target].Center) * -13; Vector2 spewPos = NPC.Center + new Vector2(0, 30) + Vector2.One.RotatedBy(vel.ToRotation() - MathHelper.PiOver4) * 40; if (Main.netMode != NetmodeID.MultiplayerClient) - Projectile.NewProjectile(NPC.GetSource_FromThis(), spewPos, vel.RotatedBy(sin), ProjectileType(), 15, 0); + Projectile.NewProjectile(NPC.GetSource_FromThis(), spewPos, vel.RotatedBy(sin), ProjectileType(), ShardSpitDamage, 0); Dust.NewDustPerfect(spewPos, DustType(), -Vector2.UnitX.RotatedBy(vel.ToRotation()), 0, default, Main.rand.NextFloat(0.8f, 1.2f)); } } @@ -459,7 +463,7 @@ private void PlatformDash() Vector2 vel = Vector2.Normalize(NPC.Center - Main.player[NPC.target].Center) * -8; Vector2 spewPos = NPC.Center + new Vector2(0, 30) + Vector2.One.RotatedBy(vel.ToRotation() - MathHelper.PiOver4) * 40; if (Main.netMode != NetmodeID.MultiplayerClient) - Projectile.NewProjectile(NPC.GetSource_FromThis(), spewPos, vel, ProjectileType(), 15, 0); + Projectile.NewProjectile(NPC.GetSource_FromThis(), spewPos, vel, ProjectileType(), ShardSpitDamage, 0); Dust.NewDustPerfect(spewPos, DustType(), -Vector2.UnitX.RotatedBy(vel.ToRotation()), 0, default, Main.rand.NextFloat(0.8f, 1.2f)); } } @@ -476,7 +480,7 @@ private void PlatformDash() { float rot = (NPC.Center - Main.player[NPC.target].Center).ToRotation(); - int index = Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 30), Vector2.Zero, ProjectileType(), 25, 0, Main.myPlayer, 0, rot); //fire cone + int index = Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(0, 30), Vector2.Zero, ProjectileType(), ConeRingDamage, 0, Main.myPlayer, 0, rot); //fire cone (Main.projectile[index].ModProjectile as FireCone).extraShots = BrokenCount >= 1; @@ -574,7 +578,7 @@ private void PlatformDashRain() Vector2 spewPos = NPC.Center + new Vector2(0, 30) + Vector2.One.RotatedBy(vel.ToRotation() - MathHelper.PiOver4) * 40; if (Main.netMode != NetmodeID.MultiplayerClient) - Projectile.NewProjectile(NPC.GetSource_FromThis(), spewPos, vel.RotatedBy(sin), ProjectileType(), 15, 0); + Projectile.NewProjectile(NPC.GetSource_FromThis(), spewPos, vel.RotatedBy(sin), ProjectileType(), ShardSpitDamage, 0); Dust.NewDustPerfect(spewPos, DustType(), -Vector2.UnitX.RotatedBy(vel.ToRotation()), 0, default, Main.rand.NextFloat(0.8f, 1.2f)); } @@ -589,7 +593,7 @@ private void PlatformDashRain() Vector2 spewPos = NPC.Center + new Vector2(0, 30) + Vector2.One.RotatedBy(vel.ToRotation() - MathHelper.PiOver4) * 40; if (Main.netMode != NetmodeID.MultiplayerClient) - Projectile.NewProjectile(NPC.GetSource_FromThis(), spewPos, vel, ProjectileType(), 15, 0); + Projectile.NewProjectile(NPC.GetSource_FromThis(), spewPos, vel, ProjectileType(), ShardSpitDamage, 0); Dust.NewDustPerfect(spewPos, DustType(), -Vector2.UnitX.RotatedBy(vel.ToRotation()), 0, default, Main.rand.NextFloat(0.8f, 1.2f)); } @@ -743,7 +747,7 @@ private void WhirlAndSmash() Terraria.Audio.SoundEngine.PlaySound(SoundID.DD2_WitherBeastCrystalImpact, NPC.Center); if (Main.netMode != NetmodeID.MultiplayerClient) - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center, Vector2.Normalize(NPC.Center - Main.player[NPC.target].Center) * -2, ProjectileType(), 12, 1); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center, Vector2.Normalize(NPC.Center - Main.player[NPC.target].Center) * -2, ProjectileType(), ShardSpitDamage, 1); } } @@ -775,14 +779,14 @@ private void WhirlAndSmash() { for (int k = 1; k < 12; k++) { - Projectile.NewProjectile(NPC.GetSource_FromThis(), homePos + new Vector2(-700 + k * 120, -460), new Vector2(0, bossRand.NextFloat(7, 8)), ProjectileType(), 15, 0); + Projectile.NewProjectile(NPC.GetSource_FromThis(), homePos + new Vector2(-700 + k * 120, -460), new Vector2(0, bossRand.NextFloat(7, 8)), ProjectileType(), ShardSpitDamage, 0); } if (Main.expertMode) { for (int k = 0; k < 4; k++) { - Projectile.NewProjectile(NPC.GetSource_FromThis(), homePos + new Vector2(-700 + bossRand.Next(1, 12) * 120 + 60, -460), new Vector2(0, bossRand.NextFloat(5, 6)), ProjectileType(), 15, 0); + Projectile.NewProjectile(NPC.GetSource_FromThis(), homePos + new Vector2(-700 + bossRand.Next(1, 12) * 120 + 60, -460), new Vector2(0, bossRand.NextFloat(5, 6)), ProjectileType(), ShardSpitDamage, 0); } } } @@ -792,14 +796,14 @@ private void WhirlAndSmash() { for (int k = 1; k < 8; k++) { - Projectile.NewProjectile(NPC.GetSource_FromThis(), homePos + new Vector2(-700 + k * 175, -460), new Vector2(0, bossRand.NextFloat(3, 16)), ProjectileType(), 10, 1); + Projectile.NewProjectile(NPC.GetSource_FromThis(), homePos + new Vector2(-700 + k * 175, -460), new Vector2(0, bossRand.NextFloat(3, 16)), ProjectileType(), ShardSpitDamage, 1); } } else { for (int k = 1; k < 6; k++) { - Projectile.NewProjectile(NPC.GetSource_FromThis(), homePos + new Vector2(-700 + k * 233, -460), new Vector2(0, bossRand.NextFloat(3, 16)), ProjectileType(), 10, 1); + Projectile.NewProjectile(NPC.GetSource_FromThis(), homePos + new Vector2(-700 + k * 233, -460), new Vector2(0, bossRand.NextFloat(3, 16)), ProjectileType(), ShardSpitDamage, 1); } } } @@ -816,7 +820,7 @@ private void SpawnMine(Vector2 velocity) { for (int k = -1; k <= 1; k++) { - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center, Vector2.Normalize(velocity).RotatedBy(k * 0.5f) * 8, ProjectileType(), 50, 1); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center, Vector2.Normalize(velocity).RotatedBy(k * 0.5f) * 8, ProjectileType(), ShardSpitDamage, 1); } } } @@ -960,7 +964,7 @@ public void SpawnDart(Vector2 start, Vector2 mid, Vector2 end, int duration) { LavaDart.midPointToAssign = mid; LavaDart.endPointToAssign = end; - Projectile.NewProjectile(NPC.GetSource_FromThis(), start, Vector2.Zero, ProjectileType(), 25, 0, Main.myPlayer, ai0: duration); + Projectile.NewProjectile(NPC.GetSource_FromThis(), start, Vector2.Zero, ProjectileType(), ShardSpitDamage, 0, Main.myPlayer, ai0: duration); } private void Laser() @@ -994,7 +998,7 @@ private void Laser() { if (Main.netMode != NetmodeID.MultiplayerClient) { - int i2 = Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(4, 0), Vector2.Zero, ProjectileType(), 45, 0, Main.myPlayer, 0, 0); + int i2 = Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(4, 0), Vector2.Zero, ProjectileType(), LaserDamage, 0, Main.myPlayer, 0, 0); Projectile laserCore = Main.projectile[i2]; if (laserCore.ModProjectile is FinalLaser) @@ -1004,7 +1008,7 @@ private void Laser() { for (int k = 1; k <= 2; k++) { - int i3 = Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(4, 0), Vector2.Zero, ProjectileType(), 45, 0, Main.myPlayer, 0, 0); + int i3 = Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center + new Vector2(4, 0), Vector2.Zero, ProjectileType(), LaserDamage, 0, Main.myPlayer, 0, 0); Projectile laserCore2 = Main.projectile[i3]; if (laserCore2.ModProjectile is FinalLaser) @@ -1054,7 +1058,7 @@ private void AngerAttack() { for (float k = 0; k < 6.28f; k += 6.28f / 12) //ring of glass spikes { - Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center, Vector2.One.RotatedBy(k + (i % 2 == 0 ? 6.28f / 24 : 0)) * 5.5f, ProjectileType(), 15, 0.2f); + Projectile.NewProjectile(NPC.GetSource_FromThis(), NPC.Center, Vector2.One.RotatedBy(k + (i % 2 == 0 ? 6.28f / 24 : 0)) * 5.5f, ProjectileType(), ShardSpitDamage, 0.2f); } } } diff --git a/Content/Bosses/VitricBoss/Projectiles.FinalLaser.cs b/Content/Bosses/VitricBoss/Projectiles.FinalLaser.cs index 9b995f6a9..15f3369e0 100644 --- a/Content/Bosses/VitricBoss/Projectiles.FinalLaser.cs +++ b/Content/Bosses/VitricBoss/Projectiles.FinalLaser.cs @@ -138,7 +138,7 @@ public override void AI() if (Player.active && !Player.dead && Helpers.Helper.CheckLinearCollision(Projectile.Center, endpoint, Player.Hitbox, out Vector2 point)) { - Player.Hurt(Terraria.DataStructures.PlayerDeathReason.ByCustomReason(Player.name + " was reduced to ash"), Main.masterMode ? 9999999 : Main.expertMode ? 65 : 45, 0, false, false, -1, false); + Player.Hurt(Terraria.DataStructures.PlayerDeathReason.ByCustomReason(Player.name + " was reduced to ash"), Projectile.damage, 0, false, false, -1, false); endpoint = point; break; } diff --git a/Content/Bosses/VitricBoss/Projectiles.SpikeMine.cs b/Content/Bosses/VitricBoss/Projectiles.SpikeMine.cs index 20ba7b0bf..22c04d568 100644 --- a/Content/Bosses/VitricBoss/Projectiles.SpikeMine.cs +++ b/Content/Bosses/VitricBoss/Projectiles.SpikeMine.cs @@ -44,7 +44,7 @@ public override void AI() } if (Main.masterMode) - Projectile.NewProjectile(Projectile.GetSource_FromThis(), Projectile.Center, Vector2.Zero, ProjectileType(), Projectile.damage, 1, Projectile.owner); + Projectile.NewProjectile(Projectile.GetSource_FromThis(), Projectile.Center, Vector2.Zero, ProjectileType(), VitricBoss.ShardSpitDamage, 1, Projectile.owner); } } diff --git a/Content/Bosses/VitricBoss/Projectiles.VitricBomb.cs b/Content/Bosses/VitricBoss/Projectiles.VitricBomb.cs index 551639104..0a8de95f8 100644 --- a/Content/Bosses/VitricBoss/Projectiles.VitricBomb.cs +++ b/Content/Bosses/VitricBoss/Projectiles.VitricBomb.cs @@ -155,7 +155,7 @@ public override void OnKill(int timeLeft) if (Main.masterMode && Main.netMode != NetmodeID.MultiplayerClient) { for (int k = 0; k < 8; k++) - Projectile.NewProjectile(Projectile.GetSource_FromThis(), Projectile.Center, Vector2.UnitX.RotatedBy(k / 8f * 6.28f) * 18, ProjectileType(), 20, 1, Main.myPlayer); + Projectile.NewProjectile(Projectile.GetSource_FromThis(), Projectile.Center, Vector2.UnitX.RotatedBy(k / 8f * 6.28f) * 18, ProjectileType(), VitricBoss.ShardSpitDamage, 1, Main.myPlayer); } } } diff --git a/Content/Items/Jungle/Accessories.Corpseflower.cs b/Content/Items/Jungle/Accessories.Corpseflower.cs index 7dffcc951..190ff8332 100644 --- a/Content/Items/Jungle/Accessories.Corpseflower.cs +++ b/Content/Items/Jungle/Accessories.Corpseflower.cs @@ -44,7 +44,7 @@ public override void Unload() public override void SetStaticDefaults() { - Tooltip.SetDefault("All damage dealt is converted into stacks of {{BUFF:CorpseflowerBuff}}\nBase damage is decreased\nYou are unable to critically strike"); + Tooltip.SetDefault("All damage dealt is converted into stacks of {{BUFF:CorpseflowerBuff}}\nBase damage is decreased by 65%\nYou are unable to critically strike"); ItemID.Sets.ShimmerTransformToItem[Type] = ItemID.NaturesGift; ItemID.Sets.ShimmerTransformToItem[ItemID.NaturesGift] = Type; @@ -171,7 +171,7 @@ private void PostHitItems(Player player, Item Item, NPC target, NPC.HitInfo hit, { if (Equipped(player)) { - BuffInflictor.InflictStack(target, 600, new CorpseflowerStack() { duration = 600, damage = Utils.Clamp((int)(damageDone * 0.45f), 1, damageDone) }); + BuffInflictor.InflictStack(target, 600, new CorpseflowerStack() { duration = 600, damage = Utils.Clamp((int)(damageDone * 0.35f), 1, damageDone) }); if (Main.myPlayer == player.whoAmI) { @@ -188,7 +188,7 @@ private void PostHitProjectiles(Player player, Projectile proj, NPC target, NPC. { if (Equipped(player)) { - BuffInflictor.InflictStack(target, 600, new CorpseflowerStack() { duration = 600, damage = Utils.Clamp((int)(damageDone * 0.45f), 1, damageDone) }); + BuffInflictor.InflictStack(target, 600, new CorpseflowerStack() { duration = 600, damage = Utils.Clamp((int)(damageDone * 0.35f), 1, damageDone) }); if (Main.myPlayer == player.whoAmI) { diff --git a/Content/Items/Jungle/Weapons.ManEaterPot.cs b/Content/Items/Jungle/Weapons.ManEaterPot.cs index 5caf18b17..fa6c5630f 100644 --- a/Content/Items/Jungle/Weapons.ManEaterPot.cs +++ b/Content/Items/Jungle/Weapons.ManEaterPot.cs @@ -114,6 +114,7 @@ public override void SetDefaults() Projectile.penetrate = -1; Projectile.DamageType = DamageClass.Summon; Projectile.timeLeft = 2; + Projectile.usesLocalNPCImmunity = true; } public override void AI() diff --git a/Content/Items/Manabonds/AquaticManabond.cs b/Content/Items/Manabonds/AquaticManabond.cs index 4dbc4786a..b9921914b 100644 --- a/Content/Items/Manabonds/AquaticManabond.cs +++ b/Content/Items/Manabonds/AquaticManabond.cs @@ -19,12 +19,12 @@ public override void SafeSetDefaults() public override void MinionAI(Projectile minion, ManabondProjectile mp) { - if (mp.timer % 50 == 0 && mp.mana >= 8 && mp.target != null) + if (mp.timer % 40 == 0 && mp.mana >= 8 && mp.target != null) { mp.mana -= 8; if (Main.myPlayer == minion.owner) - Projectile.NewProjectile(minion.GetSource_FromThis(), minion.Center, minion.Center.DirectionTo(mp.target.Center) * 6, ModContent.ProjectileType(), 24, 1f, minion.owner); + Projectile.NewProjectile(minion.GetSource_FromThis(), minion.Center, minion.Center.DirectionTo(mp.target.Center) * 6, ModContent.ProjectileType(), 26, 1f, minion.owner); } } @@ -63,6 +63,7 @@ public override void SetDefaults() Projectile.timeLeft = 600; Projectile.penetrate = 4; Projectile.hostile = false; + Projectile.usesLocalNPCImmunity = true; } public override void AI() diff --git a/Content/Items/Manabonds/BasicManabond.cs b/Content/Items/Manabonds/BasicManabond.cs index e435053c3..e09dd3b3d 100644 --- a/Content/Items/Manabonds/BasicManabond.cs +++ b/Content/Items/Manabonds/BasicManabond.cs @@ -63,6 +63,7 @@ public override void SetDefaults() Projectile.tileCollide = false; Projectile.penetrate = -1; Projectile.hostile = false; + Projectile.usesLocalNPCImmunity = true; } public override void OnSpawn(IEntitySource source) diff --git a/Content/Items/Manabonds/DruidicManabond.cs b/Content/Items/Manabonds/DruidicManabond.cs index 239e9a02f..fc4de7fc3 100644 --- a/Content/Items/Manabonds/DruidicManabond.cs +++ b/Content/Items/Manabonds/DruidicManabond.cs @@ -36,6 +36,7 @@ public override void AddRecipes() recipe.AddIngredient(ModContent.ItemType(), 1); recipe.AddIngredient(ItemID.JungleSpores, 15); recipe.AddIngredient(ItemID.Stinger, 5); + recipe.AddIngredient(ItemID.BeeWax, 5); recipe.AddTile(TileID.Bookcases); recipe.Register(); } @@ -60,6 +61,7 @@ public override void SetDefaults() Projectile.friendly = true; Projectile.DamageType = DamageClass.Summon; Projectile.hostile = false; + Projectile.usesLocalNPCImmunity = true; } public override void AI() diff --git a/Content/Items/Manabonds/InfernalManabond.cs b/Content/Items/Manabonds/InfernalManabond.cs index 18cf41ce0..cfe81914b 100644 --- a/Content/Items/Manabonds/InfernalManabond.cs +++ b/Content/Items/Manabonds/InfernalManabond.cs @@ -64,6 +64,7 @@ public override void SetDefaults() Projectile.tileCollide = true; Projectile.penetrate = -1; Projectile.hostile = false; + Projectile.usesLocalNPCImmunity = true; } public override void AI() diff --git a/Content/Items/Manabonds/ShockingManabond.cs b/Content/Items/Manabonds/ShockingManabond.cs index 1cde0e2c3..ef61f3369 100644 --- a/Content/Items/Manabonds/ShockingManabond.cs +++ b/Content/Items/Manabonds/ShockingManabond.cs @@ -68,6 +68,7 @@ public override void SetDefaults() Projectile.timeLeft = 15; Projectile.tileCollide = false; Projectile.hostile = false; + Projectile.usesLocalNPCImmunity = true; } public override void SetStaticDefaults() diff --git a/Content/Items/Potions/BarrierPotions.cs b/Content/Items/Potions/BarrierPotions.cs index 178cadbaa..886898230 100644 --- a/Content/Items/Potions/BarrierPotions.cs +++ b/Content/Items/Potions/BarrierPotions.cs @@ -59,7 +59,7 @@ public override bool CanUseItem(Player Player) public class LesserBarrierPotion : BarrierPotion { - public LesserBarrierPotion() : base(40, 180, "Lesser") { } + public LesserBarrierPotion() : base(100, 300, "Lesser") { } public override void AddRecipes() { @@ -74,7 +74,7 @@ public override void AddRecipes() public class RegularBarrierPotion : BarrierPotion { - public RegularBarrierPotion() : base(80, 240, "") { } + public RegularBarrierPotion() : base(150, 420, "") { } public override void AddRecipes() { @@ -89,7 +89,7 @@ public override void AddRecipes() public class GreaterBarrierPotion : BarrierPotion { - public GreaterBarrierPotion() : base(120, 300, "Greater") { } + public GreaterBarrierPotion() : base(200, 600, "Greater") { } public override void AddRecipes() { @@ -125,7 +125,7 @@ public ShieldDegenReduction() : base("Barrier Affinity", "Barrier over your maxi public override void Update(Player Player, ref int buffIndex) { - Player.GetModPlayer().overchargeDrainRate -= 50; + Player.GetModPlayer().overchargeDrainRate -= 55; } } } \ No newline at end of file diff --git a/Content/Items/Snow/Accessories.AquamarinePendant.cs b/Content/Items/Snow/Accessories.AquamarinePendant.cs index b91e27648..442bd4a99 100644 --- a/Content/Items/Snow/Accessories.AquamarinePendant.cs +++ b/Content/Items/Snow/Accessories.AquamarinePendant.cs @@ -12,12 +12,13 @@ public class AquamarinePendant : SmartAccessory public override string Texture => AssetDirectory.SnowItem + Name; - public AquamarinePendant() : base("Aquamarine Pendant", "+15 {{Barrier}} \nLosing all of your {{barrier}} releases ice shards") { } + public AquamarinePendant() : base("Aquamarine Pendant", "+20 max {{barrier}}\n+4 {{Barrier}} recharge per second\nLosing all of your {{barrier}} releases ice shards") { } public override void UpdateAccessory(Player player, bool hideVisual) { BarrierPlayer bPlayer = player.GetModPlayer(); - bPlayer.maxBarrier += 15; + bPlayer.maxBarrier += 20; + bPlayer.rechargeRate += 4; if (Main.myPlayer != player.whoAmI) return; //other clients shouldn't fire extra shards diff --git a/Content/Items/Starwood/Projectiles.StarwoodBoomerangProjectile.cs b/Content/Items/Starwood/Projectiles.StarwoodBoomerangProjectile.cs index 646d404c3..232f6c1f1 100644 --- a/Content/Items/Starwood/Projectiles.StarwoodBoomerangProjectile.cs +++ b/Content/Items/Starwood/Projectiles.StarwoodBoomerangProjectile.cs @@ -7,7 +7,7 @@ namespace StarlightRiver.Content.Items.Starwood { public class StarwoodBoomerangProjectile : ModProjectile, IDrawAdditive { - private const int CHARGE_TIME = 50; //how long it takes to charge up + private const int CHARGE_TIME = 30; //how long it takes to charge up private float chargeMult; //multiplier used during charge up, used both in ai and for drawing (goes from 0 to 1) diff --git a/Content/Items/Vitric/Weapons.Coalescence.cs b/Content/Items/Vitric/Weapons.Coalescence.cs index b48aa2db0..fc3ace007 100644 --- a/Content/Items/Vitric/Weapons.Coalescence.cs +++ b/Content/Items/Vitric/Weapons.Coalescence.cs @@ -24,7 +24,7 @@ public override void SetStaticDefaults() public override void SetDefaults() { - Item.damage = 44; + Item.damage = 50; Item.DamageType = DamageClass.Magic; Item.width = 16; Item.height = 64; diff --git a/Content/Items/Vitric/Weapons.PhoenixStorm.cs b/Content/Items/Vitric/Weapons.PhoenixStorm.cs index 42873c0f2..3ef6feb93 100644 --- a/Content/Items/Vitric/Weapons.PhoenixStorm.cs +++ b/Content/Items/Vitric/Weapons.PhoenixStorm.cs @@ -19,14 +19,14 @@ public class PhoenixStorm : ModItem public override void SetStaticDefaults() { DisplayName.SetDefault("Phoenix Storm"); - Tooltip.SetDefault("Summons a storm of phoenixes that periodically swoop in on enemies"); + Tooltip.SetDefault("Summons a storm of phoenixes that periodically swoop in on enemies\nInflicts {{BUFF:OnFire}}"); ItemID.Sets.GamepadWholeScreenUseRange[Item.type] = true; ItemID.Sets.LockOnIgnoresCollision[Item.type] = true; } public override void SetDefaults() { - Item.damage = 40; + Item.damage = 60; Item.knockBack = 3f; Item.mana = 10; Item.width = 32; diff --git a/Content/Items/Vitric/Weapons.RefractiveBlade.cs b/Content/Items/Vitric/Weapons.RefractiveBlade.cs index e74f8fe4d..ad32b249f 100644 --- a/Content/Items/Vitric/Weapons.RefractiveBlade.cs +++ b/Content/Items/Vitric/Weapons.RefractiveBlade.cs @@ -66,7 +66,7 @@ public override bool Shoot(Player player, EntitySource_ItemUse_WithAmmo source, if (player.altFunctionUse == 2) { if (!Main.projectile.Any(n => n.active && n.type == ProjectileType() && n.owner == player.whoAmI)) - Projectile.NewProjectile(source, position, velocity, ProjectileType(), (int)(damage * 0.05f), knockback, player.whoAmI, 0, 120); + Projectile.NewProjectile(source, position, velocity, ProjectileType(), (int)(damage * 0.25f), knockback, player.whoAmI, 0, 120); return false; } diff --git a/Core/Systems/BarrierSystem/BarrierPlayer.cs b/Core/Systems/BarrierSystem/BarrierPlayer.cs index 16ae988b6..11420cf9b 100644 --- a/Core/Systems/BarrierSystem/BarrierPlayer.cs +++ b/Core/Systems/BarrierSystem/BarrierPlayer.cs @@ -20,7 +20,7 @@ public class BarrierPlayer : ModPlayer //yay we have to duplicate a ton of code public int timeSinceLastHit = 1; public int rechargeDelay = 300; - public int rechargeRate = 6; + public int rechargeRate = 10; public float barrierDamageReduction = 0.5f; diff --git a/Helpers/Helper.cs b/Helpers/Helper.cs index d058866c2..2fb455ae1 100644 --- a/Helpers/Helper.cs +++ b/Helpers/Helper.cs @@ -592,5 +592,19 @@ public static bool ClearPath(Vector2 point1, Vector2 point2) return true; } + + /// + /// Helper to get the desired number to pass as projectile damage for the resultant values for + /// each difficulty. Normally the game applies multipliers to projectile values making them hard + /// to predict for a given difficulty. + /// + /// The desired final damage on master mode + /// The desired final damage on expert mode + /// The desired final damage on normal mode + /// + public static int GetProjectileDamage(int master, int expert, int normal) + { + return Main.masterMode ? master / 6 : Main.expertMode ? expert / 4 : normal; + } } } \ No newline at end of file From 7e5316d2b475de1aa89b40e1b66da4af1e42bcbd Mon Sep 17 00:00:00 2001 From: bobfishkins23 Date: Sun, 12 Jan 2025 22:09:37 -0500 Subject: [PATCH 2/6] Made tooltips for barrier max more consistent --- Content/Items/Desert/Accessories.DefiledAnkh.cs | 2 +- Content/Items/Dungeon/Accessories.AquaSapphire.cs | 2 +- Content/Items/Dungeon/Accessories.StoneOfTheDrowned.cs | 2 +- Content/Items/Dungeon/Accessories.WardedMail.cs | 2 +- Content/Items/Geomancer/Armors.GeomancerArmor.cs | 2 +- Content/Items/Misc/Accessories.BloodlessAmulet.cs | 2 +- Content/Items/Misc/Accessories.SpikedMail.cs | 2 +- Content/Items/Moonstone/Accessories.DianesPendant.cs | 2 +- Content/Items/Moonstone/Armors.MoonstoneArmor.cs | 6 +++--- Content/Items/Snow/Accessories.AquamarinePendant.cs | 2 +- Content/Items/UndergroundTemple/Accessories.TempleRune.cs | 2 +- Content/Prefixes/Accessory/BarrierPrefixes.cs | 8 ++++---- Content/Prefixes/Accessory/Cursed/Eldritch.cs | 2 +- 13 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Content/Items/Desert/Accessories.DefiledAnkh.cs b/Content/Items/Desert/Accessories.DefiledAnkh.cs index 374ff8e9f..144a2b5e8 100644 --- a/Content/Items/Desert/Accessories.DefiledAnkh.cs +++ b/Content/Items/Desert/Accessories.DefiledAnkh.cs @@ -11,7 +11,7 @@ public class DefiledAnkh : CursedAccessory public override void SetStaticDefaults() { Tooltip.SetDefault("Your {{Barrier}} protects against 25% less damage\n+100% {{Inoculation}} and immunity to most debuffs while {{Barrier}} is active" + - "\n+40 max {{Barrier}}"); + "\n+40 maximum {{Barrier}}"); } public override void SafeSetDefaults() diff --git a/Content/Items/Dungeon/Accessories.AquaSapphire.cs b/Content/Items/Dungeon/Accessories.AquaSapphire.cs index 860e8f3f1..ad001c1a5 100644 --- a/Content/Items/Dungeon/Accessories.AquaSapphire.cs +++ b/Content/Items/Dungeon/Accessories.AquaSapphire.cs @@ -8,7 +8,7 @@ public class AquaSapphire : SmartAccessory { public override string Texture => AssetDirectory.DungeonItem + Name; - public AquaSapphire() : base("Aqua Sapphire", "{{Barrier}} negates 15% more damage \n+20 {{Barrier}} \n'Its depths shimmer like waves'") { } + public AquaSapphire() : base("Aqua Sapphire", "{{Barrier}} negates 15% more damage \n+20 maximum {{Barrier}} \n'Its depths shimmer like waves'") { } public override void SafeSetDefaults() { diff --git a/Content/Items/Dungeon/Accessories.StoneOfTheDrowned.cs b/Content/Items/Dungeon/Accessories.StoneOfTheDrowned.cs index 2758ce344..7707f9319 100644 --- a/Content/Items/Dungeon/Accessories.StoneOfTheDrowned.cs +++ b/Content/Items/Dungeon/Accessories.StoneOfTheDrowned.cs @@ -18,7 +18,7 @@ public class StoneOfTheDrowned : SmartAccessory public override string Texture => AssetDirectory.JungleItem + Name; public StoneOfTheDrowned() : base("Stone of the Drowned", - "+30 {{barrier}}\n" + + "+30 maximum {{barrier}}\n" + "Increases your max minions by 2 when you have no {{barrier}}\n" + "Re-summons two slots worth of minions when you reach 0 {{barrier}}") { } diff --git a/Content/Items/Dungeon/Accessories.WardedMail.cs b/Content/Items/Dungeon/Accessories.WardedMail.cs index 096a4b722..5ce74cc55 100644 --- a/Content/Items/Dungeon/Accessories.WardedMail.cs +++ b/Content/Items/Dungeon/Accessories.WardedMail.cs @@ -10,7 +10,7 @@ public class WardedMail : SmartAccessory { public override string Texture => AssetDirectory.DungeonItem + Name; - public WardedMail() : base("Warded Mail", "{{Barrier}} damage is applied to attackers as thorns \n+{{Barrier}} negates 10% more damage \n+40 {{barrier}}") { } + public WardedMail() : base("Warded Mail", "{{Barrier}} damage is applied to attackers as thorns\n+40 maximum {{barrier}}\n+{{Barrier}} negates 10% more damage") { } public override List ChildTypes => new() { diff --git a/Content/Items/Geomancer/Armors.GeomancerArmor.cs b/Content/Items/Geomancer/Armors.GeomancerArmor.cs index 7392ce18e..35d2162b9 100644 --- a/Content/Items/Geomancer/Armors.GeomancerArmor.cs +++ b/Content/Items/Geomancer/Armors.GeomancerArmor.cs @@ -217,7 +217,7 @@ public override void SetStaticDefaults() Tooltip.SetDefault( "[i/s1:" + ItemType() + "]: Critical strikes partially ignore armor, with increased chance for missing enemy HP \n" + - "[i/s1:" + ItemType() + "]: +100 barrier. Gain a shield that points to your cursor and blocks attacks, consuming {{barrier}} \n" + + "[i/s1:" + ItemType() + "]: +100 maximum barrier. Gain a shield that points to your cursor and blocks attacks, consuming {{barrier}} \n" + "[i/s1:" + ItemType() + "]: Immediately heal 20 hp. Hits have a chance to create a 5 HP life heart \n" + "[i/s1:" + ItemType() + "]: Immediately refill mana. Hits have a chance to create 1 to 3 mana stars \n" + "[i/s1:" + ItemType() + "]: All strikes inflict Toxic Amethyst, a stacking poison debuff \n" + diff --git a/Content/Items/Misc/Accessories.BloodlessAmulet.cs b/Content/Items/Misc/Accessories.BloodlessAmulet.cs index 0a500ee89..db077a5e3 100644 --- a/Content/Items/Misc/Accessories.BloodlessAmulet.cs +++ b/Content/Items/Misc/Accessories.BloodlessAmulet.cs @@ -42,7 +42,7 @@ private void GrantRage(On_Player.orig_HealEffect orig, Player self, int healAmou public override void SetStaticDefaults() { DisplayName.SetDefault("Amulet of the Bloodless Warrior"); - Tooltip.SetDefault("+100 {{Barrier}}" + + Tooltip.SetDefault("+100 maximum {{Barrier}}" + "\n{{Barrier}} absorbs ALL damage, but recharges slower" + "\nYou are unaffected by damage over time" + "\nYou have 0 life. Healing grants a decaying damage boost instead of life" + diff --git a/Content/Items/Misc/Accessories.SpikedMail.cs b/Content/Items/Misc/Accessories.SpikedMail.cs index e46388de3..820ef6bc9 100644 --- a/Content/Items/Misc/Accessories.SpikedMail.cs +++ b/Content/Items/Misc/Accessories.SpikedMail.cs @@ -11,7 +11,7 @@ public class SpikedMail : SmartAccessory private int oldBarrier; - public SpikedMail() : base("Spiked Mail", "{{Barrier}} damage is applied to attackers as thorns \n+20 {{barrier}}") { } + public SpikedMail() : base("Spiked Mail", "{{Barrier}} damage is applied to attackers as thorns \n+20 maximum {{barrier}}") { } public override void Load() { diff --git a/Content/Items/Moonstone/Accessories.DianesPendant.cs b/Content/Items/Moonstone/Accessories.DianesPendant.cs index 3275646db..c97652995 100644 --- a/Content/Items/Moonstone/Accessories.DianesPendant.cs +++ b/Content/Items/Moonstone/Accessories.DianesPendant.cs @@ -20,7 +20,7 @@ public class DianesPendant : ModItem public override void SetStaticDefaults() { DisplayName.SetDefault("Diane's Pendant"); - Tooltip.SetDefault("Consuming mana charges a Crescent Guardian, blitzing nearby enemies when fully charged\n+20 {{barrier}}"); + Tooltip.SetDefault("Consuming mana charges a Crescent Guardian, blitzing nearby enemies when fully charged\n+20 maximum {{barrier}}"); } public override void SetDefaults() diff --git a/Content/Items/Moonstone/Armors.MoonstoneArmor.cs b/Content/Items/Moonstone/Armors.MoonstoneArmor.cs index eb4fbd0ad..2a09cd695 100644 --- a/Content/Items/Moonstone/Armors.MoonstoneArmor.cs +++ b/Content/Items/Moonstone/Armors.MoonstoneArmor.cs @@ -74,7 +74,7 @@ private void AddCharge(Player Player, int damage) public override void SetStaticDefaults() { DisplayName.SetDefault("Moonstone Helmet"); - Tooltip.SetDefault("2% increased melee critical strike chance\n+20 {{Barrier}}"); + Tooltip.SetDefault("2% increased melee critical strike chance\n+20 maximum {{Barrier}}"); } public override void SetDefaults() @@ -258,7 +258,7 @@ public class MoonstoneChest : ModItem public override void SetStaticDefaults() { DisplayName.SetDefault("Moonstone Chestpiece"); - Tooltip.SetDefault("+35 {{Barrier}}"); + Tooltip.SetDefault("+35 maximum {{Barrier}}"); } public override void SetDefaults() @@ -315,7 +315,7 @@ public class MoonstoneLegs : ModItem public override void SetStaticDefaults() { DisplayName.SetDefault("Moonstone Greaves"); - Tooltip.SetDefault("Improved acceleration\n +25 {{Barrier}}"); + Tooltip.SetDefault("Improved acceleration\n +25 maximum {{Barrier}}"); } public override void SetDefaults() diff --git a/Content/Items/Snow/Accessories.AquamarinePendant.cs b/Content/Items/Snow/Accessories.AquamarinePendant.cs index 442bd4a99..5f6d6d59b 100644 --- a/Content/Items/Snow/Accessories.AquamarinePendant.cs +++ b/Content/Items/Snow/Accessories.AquamarinePendant.cs @@ -12,7 +12,7 @@ public class AquamarinePendant : SmartAccessory public override string Texture => AssetDirectory.SnowItem + Name; - public AquamarinePendant() : base("Aquamarine Pendant", "+20 max {{barrier}}\n+4 {{Barrier}} recharge per second\nLosing all of your {{barrier}} releases ice shards") { } + public AquamarinePendant() : base("Aquamarine Pendant", "+20 maximum {{barrier}}\n+4 {{Barrier}} recharge per second\nLosing all of your {{barrier}} releases ice shards") { } public override void UpdateAccessory(Player player, bool hideVisual) { diff --git a/Content/Items/UndergroundTemple/Accessories.TempleRune.cs b/Content/Items/UndergroundTemple/Accessories.TempleRune.cs index 46eeac022..7d7f12a30 100644 --- a/Content/Items/UndergroundTemple/Accessories.TempleRune.cs +++ b/Content/Items/UndergroundTemple/Accessories.TempleRune.cs @@ -8,7 +8,7 @@ class TempleRune : SmartAccessory { public override string Texture => AssetDirectory.CaveTempleItem + Name; - public TempleRune() : base("Rune of Warding", "+50 {{barrier}}") { } + public TempleRune() : base("Rune of Warding", "+50 maximum {{barrier}}") { } public override void SafeSetDefaults() { diff --git a/Content/Prefixes/Accessory/BarrierPrefixes.cs b/Content/Prefixes/Accessory/BarrierPrefixes.cs index 92bce440f..6e15e98c4 100644 --- a/Content/Prefixes/Accessory/BarrierPrefixes.cs +++ b/Content/Prefixes/Accessory/BarrierPrefixes.cs @@ -51,21 +51,21 @@ public override void ModifyTooltips(Item item, List tooltips) internal class LayeredPrefix : BarrierPrefix { - public LayeredPrefix() : base(4, "Layered", "+4 {{Barrier}}") { } + public LayeredPrefix() : base(4, "Layered", "+4 maximum {{Barrier}}") { } } internal class DefensivePrefix : BarrierPrefix { - public DefensivePrefix() : base(8, "Defensive", "+8 {{Barrier}}") { } + public DefensivePrefix() : base(8, "Defensive", "+8 maximum {{Barrier}}") { } } internal class PlatedPrefix : BarrierPrefix { - public PlatedPrefix() : base(12, "Plated", "+12 {{Barrier}}") { } + public PlatedPrefix() : base(12, "Plated", "+12 maximum {{Barrier}}") { } } internal class ReinforcedPrefix : BarrierPrefix { - public ReinforcedPrefix() : base(16, "Reinforced", "+16 {{Barrier}}") { } + public ReinforcedPrefix() : base(16, "Reinforced", "+16 maximum {{Barrier}}") { } } } \ No newline at end of file diff --git a/Content/Prefixes/Accessory/Cursed/Eldritch.cs b/Content/Prefixes/Accessory/Cursed/Eldritch.cs index 99d39dcc6..629738cf2 100644 --- a/Content/Prefixes/Accessory/Cursed/Eldritch.cs +++ b/Content/Prefixes/Accessory/Cursed/Eldritch.cs @@ -37,7 +37,7 @@ public override void Update(Item Item, Player Player) public override void ModifyTooltips(Item item, List tooltips) { - tooltips.Add(new TooltipLine(StarlightRiver.Instance, "EldritchTip1", "+40 {{Barrier}}") + tooltips.Add(new TooltipLine(StarlightRiver.Instance, "EldritchTip1", "+40 maximum {{Barrier}}") { IsModifier = true }); From 2ca46a26c55db6ac801934b4084506fe524fae81 Mon Sep 17 00:00:00 2001 From: bobfishkins23 Date: Sun, 12 Jan 2025 22:53:28 -0500 Subject: [PATCH 3/6] Fix NPC barrier FX, add barrier to vanilla NPCs --- .../Items/Beach/Accessories.SeaglassRing.cs | 2 +- .../Items/Vitric/Weapons.FacetAndLattice.cs | 6 +- Content/VanillaTweaks/NpcBarrierAdditions.cs | 58 + Core/Systems/BarrierSystem/NPCBarrierGlow.cs | 15 +- Localization/en-US_Mods.StarlightRiver.hjson | 4020 +++++++++++++++++ 5 files changed, 4091 insertions(+), 10 deletions(-) create mode 100644 Content/VanillaTweaks/NpcBarrierAdditions.cs diff --git a/Content/Items/Beach/Accessories.SeaglassRing.cs b/Content/Items/Beach/Accessories.SeaglassRing.cs index 8fb61eb29..b67d0078e 100644 --- a/Content/Items/Beach/Accessories.SeaglassRing.cs +++ b/Content/Items/Beach/Accessories.SeaglassRing.cs @@ -9,7 +9,7 @@ class SeaglassRing : SmartAccessory { public override string Texture => AssetDirectory.Assets + "Items/Beach/" + Name; - public SeaglassRing() : base("Seaglass Ring", "+30 {{barrier}}\n{{Barrier}} recharge starts slightly faster\n'The battering waves have not diminished its shine'") { } + public SeaglassRing() : base("Seaglass Ring", "+30 maximum {{barrier}}\n{{Barrier}} recharge starts slightly faster\n'The battering waves have not diminished its shine'") { } public override void SafeSetDefaults() { diff --git a/Content/Items/Vitric/Weapons.FacetAndLattice.cs b/Content/Items/Vitric/Weapons.FacetAndLattice.cs index 8dcd382a3..1770a5bdd 100644 --- a/Content/Items/Vitric/Weapons.FacetAndLattice.cs +++ b/Content/Items/Vitric/Weapons.FacetAndLattice.cs @@ -26,8 +26,8 @@ public override void SetStaticDefaults() public override void SetDefaults() { Item.DamageType = DamageClass.Melee; - Item.damage = 37; - Item.crit = 6; + Item.damage = 45; + Item.crit = 15; Item.useTime = 30; Item.useAnimation = 30; Item.width = 32; @@ -198,7 +198,7 @@ public override void ModifyHitNPC(NPC target, ref NPC.HitModifiers modifiers) Terraria.Audio.SoundEngine.PlaySound(slot2, Projectile.Center); - modifiers.FinalDamage *= 1 + BuffPower / 25f; + modifiers.FinalDamage *= 1 + BuffPower / 20f; modifiers.Knockback *= 3; for (int k = 0; k < 20; k++) diff --git a/Content/VanillaTweaks/NpcBarrierAdditions.cs b/Content/VanillaTweaks/NpcBarrierAdditions.cs new file mode 100644 index 000000000..2a2b7956f --- /dev/null +++ b/Content/VanillaTweaks/NpcBarrierAdditions.cs @@ -0,0 +1,58 @@ +using StarlightRiver.Core.Systems.BarrierSystem; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Terraria.ID; + +namespace StarlightRiver.Content.VanillaTweaks +{ + internal class NpcBarrierAdditions : GlobalNPC + { + public void AddBarrier(NPC entity, int type, int normal, int expert, int master) + { + if (entity.type == type) + { + var barrierGlobal = entity.GetGlobalNPC(); + barrierGlobal.maxBarrier = Main.masterMode ? master : Main.expertMode ? expert : normal; + barrierGlobal.barrier = barrierGlobal.maxBarrier; + + // Automatic adjustments to lower other defenses to compensate + entity.defense = entity.defense / 2; + entity.lifeMax = (int)(entity.lifeMax * 0.8f); + } + } + + public override void SetDefaults(NPC entity) + { + AddBarrier(entity, NPCID.DarkCaster, 30, 60, 90); + AddBarrier(entity, NPCID.Demon, 50, 100, 150); + AddBarrier(entity, NPCID.VoodooDemon, 50, 100, 150); + AddBarrier(entity, NPCID.Tim, 50, 100, 150); + AddBarrier(entity, NPCID.GraniteFlyer, 40, 80, 120); + AddBarrier(entity, NPCID.GoblinSorcerer, 20, 40, 60); + + AddBarrier(entity, NPCID.CrimsonAxe, 100, 200, 300); + AddBarrier(entity, NPCID.CursedHammer, 100, 200, 300); + AddBarrier(entity, NPCID.EnchantedSword, 100, 200, 300); + AddBarrier(entity, NPCID.IceElemental, 100, 200, 300); + AddBarrier(entity, NPCID.Necromancer, 200, 400, 600); + AddBarrier(entity, NPCID.DiabolistRed, 150, 300, 450); + AddBarrier(entity, NPCID.DiabolistWhite, 150, 300, 450); + AddBarrier(entity, NPCID.RedDevil, 200, 400, 600); + AddBarrier(entity, NPCID.RuneWizard, 300, 600, 900); + AddBarrier(entity, NPCID.Pixie, 50, 100, 150); + AddBarrier(entity, NPCID.GoblinSummoner, 200, 400, 600); + AddBarrier(entity, NPCID.Reaper, 150, 300, 450); + AddBarrier(entity, NPCID.NebulaBeast, 200, 400, 600); + AddBarrier(entity, NPCID.NebulaBrain, 200, 400, 600); + AddBarrier(entity, NPCID.NebulaHeadcrab, 100, 200, 300); + AddBarrier(entity, NPCID.NebulaSoldier, 200, 400, 600); + AddBarrier(entity, NPCID.DD2DarkMageT1, 100, 200, 300); + AddBarrier(entity, NPCID.DD2DarkMageT3, 200, 400, 600); + AddBarrier(entity, NPCID.LunarTowerNebula, 2000, 4000, 6000); + AddBarrier(entity, NPCID.CultistBoss, 500, 1000, 1500); + } + } +} diff --git a/Core/Systems/BarrierSystem/NPCBarrierGlow.cs b/Core/Systems/BarrierSystem/NPCBarrierGlow.cs index 11eea50a7..00bf7cc17 100644 --- a/Core/Systems/BarrierSystem/NPCBarrierGlow.cs +++ b/Core/Systems/BarrierSystem/NPCBarrierGlow.cs @@ -1,4 +1,5 @@ -using StarlightRiver.Core.Systems.LightingSystem; +using Microsoft.Xna.Framework.Graphics; +using StarlightRiver.Core.Systems.LightingSystem; using StarlightRiver.Core.Systems.ScreenTargetSystem; using System; using Terraria.Graphics.Effects; @@ -65,12 +66,12 @@ private static void DrawAllNPCS(SpriteBatch spriteBatch, bool behindTiles) private void DrawBarrierOverlay(On_Main.orig_DrawNPCs orig, Main self, bool behindTiles) { - if (anyEnemiesWithBarrier) - DrawNPCTarget(behindTiles ? NPCTargetBehindTiles.RenderTarget : NPCTarget.RenderTarget); - if (!behindTiles) oldScreenPos = Main.screenPosition; + if (anyEnemiesWithBarrier) + DrawNPCTarget(behindTiles ? NPCTargetBehindTiles.RenderTarget : NPCTarget.RenderTarget); + orig(self, behindTiles); } @@ -82,6 +83,8 @@ private static void DrawNPCTarget(Texture2D target) if (Main.dedServ || spriteBatch == null || target == null || gd == null) return; + LightingBuffer.bufferNeedsPopulated = true; + Vector2 translation = Main.screenPosition - oldScreenPos; translation *= Main.GameViewMatrix.Zoom; @@ -91,7 +94,7 @@ private static void DrawNPCTarget(Texture2D target) spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Additive, SamplerState.LinearClamp, DepthStencilState.Default, RasterizerState.CullNone, null, translationMatrix); float sin = (float)Math.Sin(Main.timeForVisualEffects * 0.06f); - float opacity = (1.5f - sin * 0.5f) * 0.3f; + float opacity = (1.3f - sin * 0.3f) * 0.25f; Effect effect = Filters.Scene["NPCBarrier"].GetShader().Shader; effect.Parameters["barrierColor"].SetValue(BarrierColor.ToVector4() * opacity); @@ -102,7 +105,7 @@ private static void DrawNPCTarget(Texture2D target) for (int i = 0; i < 8; i++) { float angle = i / 8f * MathHelper.TwoPi; - float distance = 4 + 2 * sin; + float distance = 4 + 1 * sin; Vector2 offset = angle.ToRotationVector2() * distance; spriteBatch.Draw(target, new Rectangle((int)offset.X, (int)offset.Y, Main.screenWidth, Main.screenHeight), Color.White); diff --git a/Localization/en-US_Mods.StarlightRiver.hjson b/Localization/en-US_Mods.StarlightRiver.hjson index e69de29bb..bb166586d 100644 --- a/Localization/en-US_Mods.StarlightRiver.hjson +++ b/Localization/en-US_Mods.StarlightRiver.hjson @@ -0,0 +1,4020 @@ +Keybinds: { + Starsight.DisplayName: Starsight + "Forbidden Winds.DisplayName": Forbidden Winds + Faeflame.DisplayName: Faeflame +} + +Items: { + GatheringWindsItem: { + DisplayName: Gathering Winds + Tooltip: + ''' + Forbidden Winds Infusion + Hold the dash key to hover and charge up a dash + Charged dashes shatter enemy defense on contact + Drain 2 starlight/s while charging + Must spend atleast 1 starlight to activate + ''' + } + + StellarRushItem: { + DisplayName: Stellar Rush + Tooltip: + ''' + Forbidden Winds Infusion + Dash farther and carry more speed + Increases starlight cost to 1.5 + ''' + } + + WellspringItem: { + DisplayName: Wellspring + Tooltip: + ''' + Starsight Infusion + Creates a restorative wellspring when using starsight on the air + Spend 2 starlight to do this + ''' + } + + BasicInfusion: { + DisplayName: Blank Slate + Tooltip: Used to create infusions + } + + CauldronItem.Tooltip: Places an Alchemic Cauldron + MixingStick.Tooltip: + ''' + Mixing Stick + Use this to finalize alchemy recipes to craft them. + ''' + + ArtilleryLicense: { + DisplayName: Artillery License + Tooltip: + ''' + Increases your max number of sentries by 1 + `Totally not forged` + ''' + } + + DefenseSystem: { + DisplayName: Arms Dealer's Defense System + Tooltip: + ''' + Summons a gun-toting turret + Right click to cycle between different guns + [i/s1:95] Modest damage with good range + [i/s1:964] Great damage with short range + [i/s1:98] Light damage with great fire rate + + ''' + } + + MoonstoneBarrierDye: { + DisplayName: Moonstone Tincture + Tooltip: + ''' + Causes {{barrier}} to reflect the light of the moon + Equipable + Vanity Item + ''' + } + + VitricBossBarrierDye: { + DisplayName: Sentinel's Tincture + Tooltip: + ''' + Causes {{barrier}} to mimic the shield of the Shattered Sentinel + Equipable + Vanity Item + ''' + } + + ExoticTimepiece: { + DisplayName: Exotic Timepiece + Tooltip: + ''' + Your sentries fire faster and shock nearby enemies when placed + Your minions and sentries occasionally critically strike + 200% increased sentry placement speed + 'So complicated that you're not even sure how you built it' + ''' + } + + SaltCogs: { + DisplayName: Salt Cogs + Tooltip: + ''' + Your sentries fire twice as fast for two seconds after being placed + 100% increased sentry placement speed + 'Not edible. Probably.' + ''' + } + + SeaglassLens: { + DisplayName: Seaglass Lens + Tooltip: Your minions and sentries occasionally critically strike + } + + SeaglassRing: { + DisplayName: Seaglass Ring + Tooltip: + ''' + +30 maximum {{barrier}} + {{Barrier}} recharge starts slightly faster + 'The battering waves have not diminished its shine' + ''' + } + + BreachCannon: { + DisplayName: Breach Cannon + Tooltip: + ''' + Summons a sentry that shoots a laser towards the cursor + Colliding lasers from multiple cannons can combine + ''' + } + + BreacherChest: { + DisplayName: Breacher Chestplate + Tooltip: 10% increased ranged damage + } + + BreacherHead: { + DisplayName: Breacher Visor + Tooltip: 15% increased ranged critical strike damage + } + + BreacherLegs: { + DisplayName: Breacher Leggings + Tooltip: up to 20% ranged critical strike damage based on speed + } + + FlareBreacher: { + DisplayName: Flare Breacher + Tooltip: Fires explosive flares that embed in enemies, blasting shrapnel through and behind them + } + + ReactivePlating: { + DisplayName: Reactive Plating + Tooltip: + ''' + Gain brief damage resistance after taking several hits + 'The shielding activates, but only after... repeated triggers.' + ''' + } + + ScrappodItem: { + DisplayName: Scrap Pod + Tooltip: Shatters into scrapnel after reaching your cursor + } + + Scrapshot: { + DisplayName: Scrapshot + Tooltip: + ''' + to hook your enemies and pull closer + Fire while hooked to reduce spread and go flying + ''' + } + + SupplyBeacon: { + DisplayName: Supply Beacon + Tooltip: + ''' + Taking over 50 damage summons a supply drop + Stand near the supply drop to gain {{BUFF:SupplyBeaconDefense, {{BUFF:SupplyBeaconHeal}}, or {{BUFF:SupplyBeaconDamage}} + 10 second cooldown + ''' + } + + PotionForest: { + DisplayName: Forest Tonic + Tooltip: Provides regeneration and immunity to poison + } + + ArchaeologistsWhip: { + DisplayName: Archaeologist's Whip + Tooltip: + ''' + Strike enemies to make them drop treasure + Collect treasure to empower your minions + ''' + } + + AWhip_BlueGem: { + DisplayName: Treasure + Tooltip: You shouldn't see this + } + + AWhip_Cloud: { + DisplayName: Treasure + Tooltip: You shouldn't see this + } + + AWhip_Coin: { + DisplayName: Treasure + Tooltip: You shouldn't see this + } + + AWhip_GreenGem: { + DisplayName: Treasure + Tooltip: You shouldn't see this + } + + AWhip_Necklace: { + DisplayName: Treasure + Tooltip: You shouldn't see this + } + + AWhip_RedGem: { + DisplayName: Treasure + Tooltip: You shouldn't see this + } + + AztecDeathSaxophone: { + DisplayName: Death Saxophone + Tooltip: + ''' + Take damage and kill foes with other weapons to charge the saxophone + Once charged, use it to unleash a high-damage death roar + ''' + } + + DesertArtifact1Item: { + DisplayName: Ancient Fossil + Tooltip: Would fetch a nice price! + } + + DesertArtifact2Item: { + DisplayName: Ancient Fossil + Tooltip: Would fetch a nice price! + } + + DesertArtifact3Item: { + DisplayName: Ancient Fossil + Tooltip: Would fetch a nice price! + } + + DesertArtifact4Item: { + DisplayName: Ancient Fossil + Tooltip: Would fetch a nice price! + } + + DesertArtifact5Item: { + DisplayName: Ancient Fossil + Tooltip: Would fetch a nice price! + } + + DesertArtifact6Item: { + DisplayName: Ancient Fossil + Tooltip: Would fetch a nice price! + } + + DesertArtifact7Item: { + DisplayName: Ancient Fossil + Tooltip: Would fetch a nice price! + } + + ExoticGeodeArtifactItem: { + DisplayName: Exotic Geode + Tooltip: + ''' + 'Incredibly shiny' + An Extractinator might be able to break it apart... + ''' + } + + PerfectlyGenericArtifactItem: { + DisplayName: Perfectly Generic Object + Tooltip: Alchemizes a Perfectly Generic Pet + } + + PirateChestArtifactItem: { + DisplayName: Pirate Chest + Tooltip: + ''' + to open + 'Sought after for centuries' + ''' + } + + RainTotemArtifactItem: { + DisplayName: Rain Totem + Tooltip: Summons or banishes a great storm + } + + WarriorKingsCrown: { + DisplayName: Warrior King's Crown + Tooltip: + ''' + All summon slots convert to +2% summoning critical strike chance per slot + All sentry slots convert to +30% summoning damage per slot + Summoning damage increased by 40% + Combat mount cooldowns reduced by 30% + ''' + } + + WindTotemArtifactItem: { + DisplayName: Wind Totem + Tooltip: Summons or banishes a great wind + } + + DebugModerEnabler: { + DisplayName: Debug Mode + Tooltip: + ''' + {{Inoculation}} is a keyword + {{Barrier}} is too + Here is a really long line so that we can test the wrapping logic of the tooltip panels! I hope this is long enough. + {{BUFF:OnFire}} {{BUFF:PlexusChaliceBuff}} {{BUFF:BarbedKnifeBleed}} + ''' + } + + DebugStick: { + DisplayName: Debug Stick + Tooltip: Has whatever effects are needed + } + + DefiledAnkh.Tooltip: + ''' + Your {{Barrier}} protects against 25% less damage + +100% {{Inoculation}} and immunity to most debuffs while {{Barrier}} is active + +40 maximum {{Barrier}} + ''' + + Sandscript: { + DisplayName: Sandscript + Tooltip: + ''' + Manifests a blade of sand + `The actual words are lost to time...` + ''' + } + + AquaSapphire: { + DisplayName: Aqua Sapphire + Tooltip: + ''' + {{Barrier}} negates 15% more damage + +20 maximum {{Barrier}} + 'Its depths shimmer like waves' + ''' + } + + Cloudstrike: { + DisplayName: Cloudstrike + Tooltip: + ''' + Accumulate electrical charge while not firing + Damage and range of your next shot increases with charge + 'Meet this storm of sound and fury, till thunder-clashes fade to silence' + ''' + } + + InertStaff: { + DisplayName: Inert Crescent Staff + Tooltip: "'Still holds some latent lightning...'" + } + + SkullBuster: { + DisplayName: Skullbuster + Tooltip: + ''' + to throw 4 skullbombs + Release to shoot them all in quick succession + ''' + } + + StarlightPendant: { + DisplayName: Starlight Pendant + Tooltip: + ''' + Boosts mana regen based on your current {{barrier}} + Consuming mana boosts {{barrier}} regen + -10 {{barrier}} + ''' + } + + StoneOfTheDrowned: { + DisplayName: Stone of the Drowned + Tooltip: + ''' + +30 maximum {{barrier}} + Increases your max minions by 2 when you have no {{barrier}} + Re-summons two slots worth of minions when you reach 0 {{barrier}} + ''' + } + + ThousandthDegree.Tooltip: + ''' + Melts through enemies to build up heat + Releasing launches the blazing wheel + 'Rip and tear' + ''' + + TwistSword: { + DisplayName: Twisted Greatsword + Tooltip: + ''' + Hold to unleash a whirling slash + Hold jump while slashing to accelerate upward + ''' + } + + WardedMail: { + DisplayName: Warded Mail + Tooltip: + ''' + {{Barrier}} damage is applied to attackers as thorns + +40 maximum {{barrier}} + +{{Barrier}} negates 10% more damage + ''' + } + + ReplicantCells: { + DisplayName: Replicant Cells + Tooltip: + ''' + +15% {{Inoculation}} + Health regeneration starts slightly faster + ''' + } + + BlackPepper.Tooltip: "\n\n" + BrusselSprouts.Tooltip: "\n\n" + Butter.Tooltip: "\n\n" + Cabbage.Tooltip: "\n\n" + Carrot.Tooltip: "\n\n" + Cashews.Tooltip: "\n\n" + Cherry.Tooltip: "\n\n" + ChocolateGlaze.Tooltip: "\n\n" + CoffeeBeans.Tooltip: "\n\n" + CrimsonSteak.Tooltip: "\n\n" + DicedMushrooms.Tooltip: "\n\n" + Dough.Tooltip: "\n\n" + Dressing.Tooltip: "\n\n" + EaterSteak.Tooltip: "\n\n" + Entrails.Tooltip: "\n\n" + Eye.Tooltip: "\n\n" + FaceSteak.Tooltip: "\n\n" + Flour.Tooltip: "\n\n" + Gelatine.Tooltip: "\n\n" + GelBerry.Tooltip: "\n\n" + GiantMushroom.Tooltip: "\n\n" + HealthExtract.Tooltip: "\n\n" + HoneySyrup.Tooltip: "\n\n" + IvySalad.Tooltip: "\n\n" + JumboShrimp.Tooltip: "\n\n" + Lettuce.Tooltip: "\n\n" + MahoganyRoot.Tooltip: "\n\n" + ManaExtract.Tooltip: "\n\n" + + Meal: { + DisplayName: Meal + Tooltip: Rich food that provides these buffs: + } + + Milk.Tooltip: "\n\n" + Rabbit.Tooltip: "\n\n" + RocketFuel.Tooltip: "\n\n" + SeaSalt.Tooltip: "\n\n" + SkySprinkles.Tooltip: "\n\n" + BlastoffShake.Tooltip: "\n\n" + BrandedCoffee.Tooltip: "\n\n" + ButterPancakes.Tooltip: "\n\n" + CherryBrownie.Tooltip: "\n\n" + CreamySoup.Tooltip: "\n\n" + CrimsonKebab.Tooltip: "\n\n" + JungleSalad.Tooltip: "\n\n" + MushroomSteak.Tooltip: "\n\n" + Salad.Tooltip: "\n\n" + ShrimpSandwich.Tooltip: "\n\n" + Slimejelly.Tooltip: "\n\n" + SupportCookies.Tooltip: "\n\n" + StarlightWater.Tooltip: "\n\n" + Sugar.Tooltip: "\n\n" + TableSalt.Tooltip: "\n\n" + Toast.Tooltip: "\n\n" + VertebrateNuggets.Tooltip: "\n\n" + Vinegar.Tooltip: "\n\n" + WhippedCream.Tooltip: "\n\n" + + AcornSprout: { + DisplayName: Acorn Sprout + Tooltip: Killing summon tagged enemies creates acorns to fall on nearby enemies + } + + BricklayersMallet: { + DisplayName: Bricklayer's Mallet + Tooltip: + ''' + Doubles block placement and tool range + Decreases mining speed by 33% for blocks outside your original range + ''' + } + + DustyAmulet: { + DisplayName: Dusty Amulet + Tooltip: + ''' + +20 maximum life + +20 maximum mana + 0.8x critical strike chance + 'An old heirloom with an inscription lost to time' + ''' + } + + FeralWolfMountItem: { + DisplayName: Juicy Steak + Tooltip: + ''' + Combat Mount: Summons a Feral Wolf + Inflicts bleeding with powerful bites + to howl and boost the speed of minions + ''' + } + + HeavyFlail: { + DisplayName: Heavy Flail + Tooltip: + ''' + Hold to swing a monstrous ball of metal + `We've got the biggest balls of them all!` + ''' + } + + OldWhetstone: { + DisplayName: Old Whetstone + Tooltip: + ''' + +1 to all damage + 'Why in tarnation are you sharpening your wand?!' + ''' + } + + SlimePrinceChest: { + DisplayName: Slime Prince's Curiass + Tooltip: + ''' + 5% increased summoning damage + You can summon an additional minion + ''' + } + + SlimePrinceHead: { + DisplayName: Slime Prince's Crown + Tooltip: 10% increased summoning damage + } + + SlimePrinceLegs: { + DisplayName: Slime Prince's Tassets + Tooltip: Minions inflict 5% {{exposure}} + } + + Trowel: { + DisplayName: Bricklayer's Trowel + Tooltip: + ''' + Extends blocks in a straight line + Direction is based on your position + for reverse direction + 30 block range + ''' + } + + Trowel2: { + DisplayName: Autotrowel 9000 + Tooltip: + ''' + Extends blocks in a straight line extremely quickly + Direction is based on your position + for reverse direction + 40 block range + 'The perfect tool for every esteemed bridgebuilder!' + ''' + } + + EmeraldHeart: { + DisplayName: Emerald Heart + Tooltip: You shouldn't see this + } + + GeoAmethyst: { + DisplayName: Amethyst + Tooltip: You shouldn't see this + } + + GeoDiamond: { + DisplayName: Diamond + Tooltip: You shouldn't see this + } + + GeoEmerald: { + DisplayName: Emerald + Tooltip: You shouldn't see this + } + + GeomancerHood.DisplayName: Geomancer's Hood + + GeomancerItemDummy: { + DisplayName: Effects of different gems: + Tooltip: + ''' + [i/s1:5674]: Critical strikes partially ignore armor, with increased chance for missing enemy HP + [i/s1:5682]: +100 maximum barrier. Gain a shield that points to your cursor and blocks attacks, consuming {{barrier}} + [i/s1:5675]: Immediately heal 20 hp. Hits have a chance to create a 5 HP life heart + [i/s1:5681]: Immediately refill mana. Hits have a chance to create 1 to 3 mana stars + [i/s1:5673]: All strikes inflict Toxic Amethyst, a stacking poison debuff + [i/s1:5680]: Hits have a chance to summon a Ruby Dagger to seek the struck enemy for 20% of the hit's damage + ''' + } + + GeomancerPants.DisplayName: Geomancer's Greaves + GeomancerRobe.DisplayName: Geomancer's Cowl + + GeoRuby: { + DisplayName: Ruby + Tooltip: You shouldn't see this + } + + GeoSapphire: { + DisplayName: Sapphire + Tooltip: You shouldn't see this + } + + GeoTopaz: { + DisplayName: Topaz + Tooltip: You shouldn't see this + } + + SapphireStar: { + DisplayName: Sapphire Star + Tooltip: You shouldn't see this + } + + SparklingBullet: { + DisplayName: Sparkling Bullet + Tooltip: Restored on a successful hit + } + + BloodAmulet: { + DisplayName: Blood Amulet + Tooltip: + ''' + Every 25 damage taken releases a homing bloodbolt + These bolts damage enemies and guarantee they drop life hearts on death + ''' + } + + BloodBolter: { + DisplayName: Bloodbolter + Tooltip: + ''' + Converts wooden arrows into bloodbolts + Bloodbolts impale dead fleshy enemies, exploding them on surfaces + ''' + } + + Gluttony: { + DisplayName: Gluttony + Tooltip: Sucks the souls out of your enemies, turning them against their former brethren + } + + GravediggerItem: { + DisplayName: Tombsmasher + Tooltip: + ''' + Strikes enemies up into the air when holding W and slams them down with S + Hit enemies in the air for more damage + ''' + } + + LivingBlood: { + DisplayName: Living Blood + Tooltip: "'Unnaturally pulses with the light of the Blood Moon'" + } + + RadculasRapier: { + DisplayName: Radcula's Rapier + Tooltip: + ''' + Rapidly stabs enemies, inflicting {{BUFF:RadculasRapierBleed}} + Press to dash towards the cursor + dashing through bleeding enemies consumes the bleed to deal extra damage and heal you + Striking multiple enemies with the teleport lowers its cooldown + ''' + } + + StaffOfSelfDisassembly: { + DisplayName: Staff of Self-Disassembly + Tooltip: + ''' + {{Reserve}} 40 life to summon a Flesh Horror + Horrors grant increased life regeneration + Life regeneration boost is increased when Horrors strike an enemy + ''' + } + + EchochainWhip: { + DisplayName: Echochain + Tooltip: + ''' + Chains enemies together, sharing summon damage between them + Hold and release to snare enemies near your mouse to the ground, chaining all effected enemies + ''' + } + + HauntedAmethyst: { + DisplayName: Haunted Amethyst + Tooltip: + ''' + Increases your number of max minions by 1 when below 50% life + Automatically summons a minion if there is a valid weapon in your inventory + ''' + } + + HauntedDaggerStaff: { + DisplayName: Haunted Dagger Staff + Tooltip: + ''' + Summons haunted daggers, embedding themselves in your foes + Change summon targets or whip them to violently tear the daggers from their flesh + 'These aren't enchanted... they're haunted!' + 'It's different?' + 'It's different.' + ''' + } + + PoltergeistChest: { + DisplayName: Haunting Breastplate + Tooltip: + ''' + 5% increased magic damage + +15% {{Inoculation}} + ''' + } + + PoltergeistHead: { + DisplayName: Haunting Hood + Tooltip: 15% increased magic critical strike damage + } + + PoltergeistLegs: { + DisplayName: Haunting Robes + Tooltip: +40 maximum mana + } + + TaintedGreataxe.Tooltip: + ''' + Landing a Critical Strike will inflict {{Focused}} on a new, different enemy + on the Greataxe whilst it is Embedded to release it + ''' + + VengefulSpirit: { + DisplayName: Vengeful Spirit + Tooltip: "'I don't think it likes you'" + "Drop Rule": Dropped after beating either King Slime, Eye of Cthulhu, or Auroracle + } + + CharonsObol: { + DisplayName: Charon's Obol + Tooltip: + ''' + Converts all dropped money to ancient coins, which ricochet projectiles off themselves + Coins lose their power when they contact any surface + 'Soon, may the Ferryman come...' + ''' + } + + FuryInABottle: { + DisplayName: Fury in a Bottle + Tooltip: + ''' + Allows a short double jump + Recharges for every 100 damage dealt + ''' + } + + GlowingObsidian: { + DisplayName: Glowing Obsidian + Tooltip: + ''' + Inflicts stacking burning + [RIGHT] to skewer nearby enemies, increasing burning damage taken + ''' + } + + InfernalCatalyst: { + DisplayName: Infernal Catalyst + Tooltip: + ''' + Primes the lavas of hell for transmutation + Requires a large body of lava + Items that can be transmuted will glow in your inventory + ''' + } + + InfernalHarvest: { + DisplayName: Infernal Harvest + Tooltip: + ''' + Swing a huge harvesting scythe to gather mana from enemies + to spend 90 mana to throw the scythe, leaving a burning trail + ''' + } + + Corpseflower.Tooltip: + ''' + All damage dealt is converted into stacks of {{BUFF:CorpseflowerBuff}} + Base damage is decreased by 65% + You are unable to critically strike + ''' + + ManEaterPot: { + DisplayName: Man Eater Pot + Tooltip: + ''' + Causes Man Eaters to sprout from your head + These Man Eaters will consume heart pickups to empower themselves + Consumed heart pickups are delayed and heal you for less + ''' + } + + Slitherring: { + DisplayName: Slitherring + Tooltip: A small snake occasionally attacks with you when you use a whip + } + + ChargedMagnet: { + DisplayName: Charged Magnet + Tooltip: "'Pulsing with magnetic power'" + } + + GrayGoo: { + DisplayName: Gray Goo + Tooltip: + ''' + Summons a swarm of nanomachines to devour your enemies + 'Say the line, Armstrong!' + ''' + } + + ThunderBeads: { + DisplayName: Magnet Beads + Tooltip: + ''' + Whip enemies to stick the beads to them + Repeatedly click to shock affected enemies + ''' + } + + Thunderbuss: { + DisplayName: Thunderbuss + Tooltip: + ''' + Fires powerful lightning at enemies in a cone + to fire an explosive lightning orb, attracting and boosting your lightning + 'Crush the path of most resistance' + ''' + } + + UnchargedMagnet: { + DisplayName: Uncharged Magnet + Tooltip: + ''' + Charged enemies are attracted with this in your inventory + Charged enemies are stronger than normal, but charge this item on death + ''' + } + + WatchBattery: { + DisplayName: Watch Battery + Tooltip: Your sentries shock nearby enemies when placed + } + + AquaticManabond: { + DisplayName: Aquatic Manabond + Tooltip: + ''' + Your minions can store 40 mana + Your minions siphon 6 mana per second from you untill full + Your minions spend 8 mana to attack with a bouncing waterbolt occasionally + ''' + } + + BasicManabond: { + DisplayName: Manabond + Tooltip: + ''' + Your minions can store 40 mana + Your minions siphon 6 mana per second from you untill full + Your minions spend 6 mana to attack with a magic bolt occasionally + ''' + } + + DruidicManabond: { + DisplayName: Druidic Manabond + Tooltip: + ''' + Your minions can store 40 mana + Your minions siphon 6 mana per second from you untill full + Your minions spend 15 mana to attack with a burst of poison thorns + ''' + } + + InfernalManabond: { + DisplayName: Infernal Manabond + Tooltip: + ''' + Your minions can store 40 mana + Your minions siphon 6 mana per second from you untill full + Your minions spend 20 mana to attack with an exploding fireball occasionally + ''' + } + + ShockingManabond: { + DisplayName: Shocking Manabond + Tooltip: + ''' + Your minions can store 40 mana + Your minions siphon 6 mana per second from you untill full + Your minions spend 12 mana to attack with chain lightning occasionally + Chain lightning inflicts {{BUFF:Overcharge}} + ''' + } + + AlchemistShackles: { + DisplayName: Alchemist's Shackles + Tooltip: + ''' + Resource potions are more effective when their respective resource is lower + Potion sickness effects last 15 seconds longer + ''' + } + + ArchaeologistsMap: { + DisplayName: Archaeologist's Map + Tooltip: Reveals the location of a nearby Artifact + } + + AxeBook: { + DisplayName: Tiger Technique + Tooltip: + ''' + Teaches you the Art of Axes, granting all axe weapons a new combo attack + The final strike will {{rend}} 1 defense + to throw your axe + ''' + } + + BalloonGun: { + DisplayName: Balloon Gun + Tooltip: Attach balloons to enemies to make them float away + } + + BalloonInABalloon: { + DisplayName: Balloon In A Balloon + Tooltip: + ''' + Increases jump height + Increases mid-air maneuverability + Hold UP to fall slower + ''' + } + + BarbedKnife: { + DisplayName: Barbed Knife + Tooltip: Critical strikes apply {{BUFF:BarbedKnifeBleed}} + } + + BizarrePotion: { + DisplayName: Bizarre Potion + Tooltip: + ''' + Throws a random volatile potion with random effects + May inflict {{BUFF:BizarrePotionPoisonDebuff}} + ''' + } + + Bladesaw: { + DisplayName: Bladesaw + Tooltip: + ''' + Shreds through enemies + Repeated hits overheat the saw, increasing damage + to use as a tool + ''' + } + + BloodlessAmulet: { + DisplayName: Amulet of the Bloodless Warrior + Tooltip: + ''' + +100 maximum {{Barrier}} + {{Barrier}} absorbs ALL damage, but recharges slower + You are unaffected by damage over time + You have 0 life. Healing grants a decaying damage boost instead of life + 'Leave your flesh behind, for your rage is all you need' + ''' + } + + BrokenGlasses: { + DisplayName: Broken Glasses + Tooltip: Damage over time effects are able to critically strike + } + + BuffChalice: { + DisplayName: Plexus Chalice + Tooltip: + ''' + Inflicting debuffs temporarily increases your {{Inoculation}} + Grants {{BUFF:PlexusChaliceBuff}} + ''' + } + + CasualMirror: { + DisplayName: Causal Mirror + Tooltip: + ''' + Your DoT and regeneration effects are inverted. + Regenerate life when you would take damage-over-time. + Take damage-over-time when you would regenerate life. + This includes natural regeneration! + ''' + } + + Cheapskates: { + DisplayName: Cheapskates + Tooltip: + ''' + Maximum movement speed is doubled + Take up to 25% more damage while moving over your previous max speed + Acceleration is reduced by 75% when over your previous max speed + ''' + } + + CoachGun: { + DisplayName: Coach Gun + Tooltip: + ''' + to throw out an exploding bundle of dynamite + Shoot it to detonate it early + 'My business, my rules' + ''' + } + + CopperCoil: { + DisplayName: Copper Coil + Tooltip: + ''' + Strikes nearby enemies with static electricity + Inflicts {{BUFF:StaticShock}} + ''' + } + + CoughDrops: { + DisplayName: Cough Drops + Tooltip: When debuffs wear off, gain {{BUFF:CoughDropsBuff}} + } + + DiceAmmo: { + DisplayName: Dice + Tooltip: Every shot has randomized stats + } + + DisinfectantKit: { + DisplayName: Disinfectant Kit + Tooltip: + ''' + Combined effects of the Disinfectant Wipes and Sanitizer Spray + 10% increased critical strike chance when a debuff is active + ''' + } + + DisinfectantWipes: { + DisplayName: Disinfectant Wipes + Tooltip: + ''' + Critical strikes have a 10% chance to reduce your debuff durations by 3 seconds + Does not affect Potion Sickness debuffs + ''' + } + + DualCross: { + DisplayName: Double Cross + Tooltip: Shoots arrows from your highest two ammo slots at once + } + + DullBlade: { + DisplayName: Dull Blade + Tooltip: Ancient and heavily worn, but still solid. You could forge this into something useful... + } + + Earthduster.Tooltip: + ''' + Hold to fire a rapid stream of earth + Can use many different blocks as ammo, each with unique effects + 33% chance to not consume ammo + ''' + + ElectroArrow: { + DisplayName: Electro Arrow + Tooltip: + ''' + Chains to nearby enemies + Inflicts {{BUFF:Overcharge}} + ''' + } + + EnchantedWateringCan: { + DisplayName: Enchanted Watering Can + Tooltip: + ''' + Grows saplings into large saplings + Speeds up the growth of large saplings + ''' + } + + FiletGiblet1: { + DisplayName: Giblet + Tooltip: You shouldn't see this + } + + FiletGiblet2: { + DisplayName: Giblet + Tooltip: You shouldn't see this + } + + FiletGiblet3: { + DisplayName: Giblet + Tooltip: You shouldn't see this + } + + FiletKnife: { + DisplayName: Filet Knife + Tooltip: + ''' + Critical strikes carve chunks of flesh from enemies + Devour chunks to heal and gain {{BUFF:FiletFrenzyBuff}} + ''' + } + + FryingPan: { + DisplayName: Frying Pan + Tooltip: + ''' + Attacks in close-range melee before being thrown to ring some chrome domes + 'Evil-looking runes are inscribed on the bottom' + ''' + } + + GeodeBow: { + DisplayName: Geode Bow + Tooltip: + ''' + Hit enemies to create crystal growths + Shoot these growths to deal massive damage + ''' + } + + GraveBuster: { + DisplayName: Gravebuster + Tooltip: + ''' + Destroys nearby graves + 'You like the taste of brains, we don't like zombies' + ''' + } + + Guillotine: { + DisplayName: Golden Guillotine + Tooltip: + ''' + Critical strikes gain power as your foes lose health + Executes normal enemies on low health + ''' + } + + Gunchucks.DisplayName: Gunchucks + + GunstrapBoots: { + DisplayName: Gunstrap Boots + Tooltip: + ''' + All double jumps now shoot out a shotgun blast of bullets below you + Using wings fires constant rounds of machine gun fire + 'Smells like steak and fries' + ''' + } + + HeartStatueSentryItem: { + DisplayName: Heart Statue? + Tooltip: Summons a heart statue powered by your enemie's souls + } + + HermesVow: { + DisplayName: Hermes' Vow + Tooltip: + ''' + Cursed + Massively increased acceleration and movement speed + Increased jump height and max movement speed + Works with boots + You are unable to use wings + ''' + } + + HolyAmulet: { + DisplayName: Holy Amulet + Tooltip: Releases bursts of homing holy energy for every 25 life you heal + } + + HungryStomach: { + Tooltip: + ''' + Restore {{Starlight}} by damaging foes + Melee weapons restore twice as much + Disables natural {{Starlight}} regeneration + ''' + DisplayName: Hungry Stomach + } + + ImpactSMG: { + DisplayName: Impact SMG + Tooltip: + ''' + Hold to rapidly fire high impact bullets, heating up over time + Release to boomerang the gun + Boomeranging while not overheated grants a stacking buff to the Impact SMG's damage + Boomeranging while overheated will consume all stacks for a deadly explosion + ''' + } + + ImpulseThruster: { + DisplayName: Impulse Thruster + Tooltip: + ''' + Converts all wingtime into a burst of energy + 'At least 30 OSHA violations, in the palm of your hand' + ''' + } + + Ironheart: { + DisplayName: Ironheart + Tooltip: Melee damage generates decaying {{barrier}} and defense + } + + JadeStopwatch: { + DisplayName: Jade Stopwatch + Tooltip: + ''' + Time moves more quickly for you + Time briefly moves more slowly for you after being hit + Reduces your damage + ''' + } + + LostCollar: { + DisplayName: Lost Collar + Tooltip: + ''' + +40% {{Inoculation}} + Debuffs you inflict are inflicted on yourself + +5% movement and attack speed per debuff affecting you + Lose all debuff immunities + ''' + } + + Magebane.Tooltip: + ''' + You can not drink mana potions or other mana-replenishing items + Magic attacks have a 25% chance to leech a large portion of their damage as mana + ''' + + MagmaGun: { + DisplayName: Pyroclastic Flow + Tooltip: Blasts a torrential stream of magma that sticks to tiles and enemies + } + + MartialBook: { + DisplayName: Martial Encyclopedia + Tooltip: + ''' + Combined effects of Tiger, Snake, and Mantis Techniques + +10% melee critical strike damage + 'Quit, don't quit... Noodles, don't noodles.' + ''' + } + + PandorasDagger: { + DisplayName: Pandora's Dagger + Tooltip: When you {{Graze}} projectiles, you release Discordant Bolts, inflicting stacks of Volatile + } + + PandorasShield: { + DisplayName: Pandora's Shield + Tooltip: When you {{Graze}} a projectile, gain a portion of the damage as {{barrier}} + } + + PhilosophersMortar: { + DisplayName: Philosopher's Mortar + Tooltip: Life hearts decrease duration of Potion Sickness by 10 seconds, but heal half as much + } + + PowerCell: { + DisplayName: Power Cell + Tooltip: NaN + } + + PulseBoots: { + DisplayName: Pulse Boots + Tooltip: Grants a directionally boosted double jump + } + + RhythmicResonator: { + DisplayName: Rhythmic Resonator + Tooltip: + ''' + Attack in rhythm with your weapon to gradually increase damage and knockback + Disables autoswing + ''' + } + + SanitizerSpray: { + DisplayName: Sanitizer Spray + Tooltip: Critical strikes have a 25% chance to transfer parts of your debuffs to nearby enemies + } + + ShockAbsorber: { + DisplayName: Shock Absorber + Tooltip: + ''' + Dropping from great heights creates a shockwave + Nullifies fall damage + ''' + } + + Sling.Tooltip: + ''' + Sling seeds, stones, and mushrooms at your enemies + Seeds have increased velocity + Stones have less velocity but deal more damage and knockback + Mushrooms deal less damage but inflict Poisoned + 75% chance to not consume ammo + ''' + + Soilgun: { + DisplayName: Soilgun + Tooltip: + ''' + Hold to charge up a volley of soil + Release to fire the soil at high velocities + Can use many different types of soils + 'Soiled it! SOILED IT!' + ''' + } + + SojournersScarf: { + DisplayName: Sojourner's Scarf + Tooltip: + ''' + 20% increased movement speed + 50% decreased life regeneration while stationary + ''' + } + + Sorcerwrench: { + DisplayName: Sorcerwrench + Tooltip: + ''' + Select an area of blocks to be broken + Consumes 2 mana per block broken + ''' + } + + SoulOfFrog: { + DisplayName: Soul Of Frog + Tooltip: + ''' + Frogs are resurrected on death, growing stronger with each return from the brink. + Killing other critters has a chance to reveal them as actually being a frog the whole time + They will then be resurrected as if they were a frog the whole time, because they were + I'm telling you, don't fuck with the frogs, please, they are stronger than you know + ''' + } + + SpearBook: { + DisplayName: Snake Technique + Tooltip: + ''' + Teaches you the Art of the Spear, granting all normal spear weapons a new combo attack + The last strike in the combo deals increased damage and knockback + to deter enemies with a flurry of stabs + ''' + } + + SpikedMail: { + DisplayName: Spiked Mail + Tooltip: + ''' + {{Barrier}} damage is applied to attackers as thorns + +20 maximum {{barrier}} + ''' + } + + StaminaGel: { + DisplayName: Starlight Gel + Tooltip: "" + } + + StaminaRing: { + DisplayName: Band of Starlight + Tooltip: +2 {{Starlight}} regeneration + } + + SwordBook: { + DisplayName: Mantis Technique + Tooltip: + ''' + Teaches you the Art of the Sword, granting all sword weapons a new combo attack + to parry, reflecting projectiles + ''' + } + + TarnishedRing: { + DisplayName: Tarnished Ring + Tooltip: "'Ancient and heavily tarnished, but still solid. You could sculpt this into something useful..." + } + + TinCoil: { + DisplayName: Tin Coil + Tooltip: Strikes nearby enemies with static electricity + } + + Ultrapills: { + DisplayName: ULTRAPILLS + Tooltip: + ''' + Cursed: You cannot restore health by normal means + Striking enemies occasionally leeches life + Killing enemies causes them to explode into healing blood + ''' + } + + CrescentQuarterstaff: { + DisplayName: Crescent Quarterstaff + Tooltip: + ''' + Striking enemies charges the staff with lunar energy + Condenses collected energy into a lunar orb when the final slam hits the ground + ''' + } + + Datsuzei: { + DisplayName: Datsuzei + Tooltip: Unleash the moon + } + + DianesPendant: { + DisplayName: Diane's Pendant + Tooltip: + ''' + Consuming mana charges a Crescent Guardian, blitzing nearby enemies when fully charged + +20 maximum {{barrier}} + ''' + } + + Moonfury: { + DisplayName: Moonfury + Tooltip: Call down a shard of moonstone, inflicting {{BUFF:MoonfuryDebuff}} + } + + MoonstoneArrow: { + DisplayName: Moonlit Arrow + Tooltip: Gains speed and power as it travels + } + + MoonstoneBarItem: { + DisplayName: Moonstone Bar + Tooltip: "'Shimmering with twisted starlight'" + } + + MoonstoneChest: { + DisplayName: Moonstone Chestpiece + Tooltip: +35 maximum {{Barrier}} + } + + MoonstoneHamaxe.Tooltip: Press to charge up a slam that destroys a large area of walls + + MoonstoneHead: { + DisplayName: Moonstone Helmet + Tooltip: + ''' + 2% increased melee critical strike chance + +20 maximum {{Barrier}} + ''' + } + + MoonstoneLegs: { + DisplayName: Moonstone Greaves + Tooltip: + ''' + Improved acceleration + +25 maximum {{Barrier}} + ''' + } + + MoonstoneOreItem: { + DisplayName: Moonstone + Tooltip: "" + } + + StarlightShuriken: { + DisplayName: Starlight Shuriken + Tooltip: + ''' + Toss a volley of magical shurikens + Landing every shuriken decreases the amount thrown by 1 + Throw a powerful glaive when you would throw only 1 shuriken + ''' + } + + Shaker.DisplayName: The Shaker + + PalestoneNail: { + DisplayName: Palenail + Tooltip: Summons the Pale Knight + } + + AuroraBell: { + DisplayName: Aurora Bell + Tooltip: + ''' + Summons a bell sentry + Hit the bell with a whip to ring it + ''' + } + + AuroraIceBar: { + DisplayName: Frozen Aurora Bar + Tooltip: A preserved selection of the night sky + } + + AuroraIceItem: { + DisplayName: Frozen Aurora Chunk + Tooltip: A preserved piece of the night sky + } + + AuroraThroneMountItem: { + DisplayName: Aurora Crown + Tooltip: + ''' + Combat Mount: Summons an Aurora Throne + Lashes out with whip-like appendages + to summon explosive Auroralings + ''' + } + + BookOfFrost: { + DisplayName: Book Of Frost + Tooltip: Melee critical strikes cause an icy explosion + } + + Frostball: { + DisplayName: Frostball + Tooltip: + ''' + Strike enemies to build aurora power + Heals players near the yoyo based on aurora power + Gives you regeneration when retrieved based on aurora power + ''' + } + + Octogun: { + DisplayName: Glocktopus + Tooltip: + ''' + Converts Musket Balls into Aurora Ink + Critical hits and kills cause Tentapistols to sprout from your back + ''' + } + + OverflowingUrn: { + DisplayName: Overflowing Urn + Tooltip: + ''' + Unleashes a torrent of chilling winds + Prolonged use will cause it to go out of control + ''' + } + + SquidBossBag.DisplayName: Treasure Bag (Auroracle) + + SquidBossSpawn: { + DisplayName: Suspicious Looking Offering + Tooltip: Drop in prismatic waters to summon the one the Squiddites worship + } + + SquidBossSpawnEndless: { + DisplayName: Gilded Suspicious Looking Offering + Tooltip: + ''' + Drop in prismatic waters to summon the one the Squiddites worship + Infinite uses + ''' + } + + SquidFins: { + DisplayName: Squid Fins + Tooltip: Allows you to swim like a jellysquid + } + + TentacleHook: { + DisplayName: Tentacle Hook + Tooltip: Move your mouse to hook around objects + } + + Tentalance.Tooltip: + ''' + Launches a shimmering tentacle lance + Charge to fire up to 4 more lances at once + ''' + + WaterStaff: { + DisplayName: Staff of the Waves + Tooltip: + ''' + Places and removes aurora water + to place + to remove + ''' + } + + GreaterBarrierPotion: { + DisplayName: Greater Barrier Potion + Tooltip: + ''' + Grants 200 {barrier} + Grants {BUFF:ShieldDegenReduction} for 10 seconds + Inflicts {Buff:PotionSickness} for 20 seconds + Inflicts {BUFF:NoShieldPot} for 60 seconds + ''' + } + + InoculationPotion: { + DisplayName: Inoculation Potion + Tooltip: +30% {{Inoculation}} + } + + LesserBarrierPotion: { + DisplayName: Lesser Barrier Potion + Tooltip: + ''' + Grants 100 {barrier} + Grants {BUFF:ShieldDegenReduction} for 5 seconds + Inflicts {Buff:PotionSickness} for 20 seconds + Inflicts {BUFF:NoShieldPot} for 60 seconds + ''' + } + + RegularBarrierPotion: { + DisplayName: " Barrier Potion" + Tooltip: + ''' + Grants 150 {barrier} + Grants {BUFF:ShieldDegenReduction} for 7 seconds + Inflicts {Buff:PotionSickness} for 20 seconds + Inflicts {BUFF:NoShieldPot} for 60 seconds + ''' + } + + BloodCrystal: { + DisplayName: Blood Crystal + Tooltip: + ''' + Debuffs you inflict are also inflicted onto you + All debuffs you inflict stack and last longer + ''' + } + + AquamarinePendant: { + DisplayName: Aquamarine Pendant + Tooltip: + ''' + +20 maximum {{barrier}} + +4 {{Barrier}} recharge per second + Losing all of your {{barrier}} releases ice shards + ''' + } + + FrostFlail: { + DisplayName: Frost Flail + Tooltip: + ''' + Hold to swing a monstrous ball of ice + Creates icy shards on impact, inflicting frostburn + ''' + } + + MeadHorn: { + DisplayName: Mead Horn + Tooltip: Potions last 50% longer + } + + Astroscrap: { + DisplayName: Astroscrap + Tooltip: ‘Alloy salvaged from enigmatic wreckage’ + } + + DormantScepter: { + DisplayName: Dormant Scepter + Tooltip: The scepter lies dormant, waning for mystical energy + } + + StarwoodBoomerang: { + DisplayName: Starwood Boomerang + Tooltip: Hold to channel the boomerang, causing it to release an explosion + } + + StarwoodBoots: { + DisplayName: Starwood Leggings + Tooltip: 5% increased magic critial strike chance + } + + StarwoodCharm: { + DisplayName: Starwood Charm + Tooltip: + ''' + Critical strikes generate mana stars + -3% critical strike chance + +3% critical strike chance when empowered by Starwood Armor + ''' + } + + StarwoodChest: { + DisplayName: Starwood Robes + Tooltip: Increases max mana by 20 + } + + StarwoodHat: { + DisplayName: Starwood Hat + Tooltip: 5% increased magic damage + } + + StarwoodScepter: { + DisplayName: Starwood Scepter + Tooltip: + ''' + Summons two halves of a sentient star + The stars inflict {{BUFF:StarstruckDebuff}} + The stars drop mana stars when hitting summon tagged enemies + ''' + } + + StarwoodSlingshot: { + DisplayName: Starwood Slingshot + Tooltip: + ''' + Weaves together fallen stars + Consumes ammo every 50 shots + ''' + } + + StarwoodStaff: { + DisplayName: Starwood Staff + Tooltip: + ''' + Creates a burst of small stars + Striking an enemy with every star causes a larger star to drop on them + ''' + } + + AncientGear: { + DisplayName: Ancient Gear + Tooltip: "" + } + + Buzzsaw: { + DisplayName: Steamsaw + Tooltip: + ''' + Strike enemies to build up pressure + Release to vent the pressure, launching the sawblade + 'The right tool for the wrong job' + ''' + } + + CogAmmoItem: { + DisplayName: Cogshot + Tooltip: + ''' + Bounces between enemies up to five times + Halves damage with each bounce + ''' + } + + Cogwheel: { + DisplayName: Cogwheel + Tooltip: Summons a ridable Cogwheel mount + } + + Jetwelder: { + DisplayName: Jetwelder + Tooltip: + ''' + Collect scrap from damaging enemies + to use the scrap in order to build robots + ''' + } + + JetwelderScrap1: { + DisplayName: Scrap + Tooltip: You shouldn't see this + } + + JetwelderScrap2: { + DisplayName: Scrap + Tooltip: You shouldn't see this + } + + JetwelderScrap3: { + DisplayName: Scrap + Tooltip: You shouldn't see this + } + + JetwelderScrap4: { + DisplayName: Scrap + Tooltip: You shouldn't see this + } + + RebarLauncher: { + DisplayName: Rebar Launcher + Tooltip: + ''' + Impales enemies + Shoot impaled rebar to drive it even deeper into enemies + ''' + } + + GloomGauntlet: { + DisplayName: Gloom Gauntlet + Tooltip: + ''' + Gain melee damage based on the speed of your held weapon + Slower weapons grant more damage + ''' + } + + GloomGel: { + DisplayName: Gloom Gel + Tooltip: "" + } + + RuneStaff: { + DisplayName: Shine Staff + Tooltip: + ''' + Hold to search for treasure + Release to fire stars toward the cursor + ''' + } + + TempleLens: { + DisplayName: Ancient Lens + Tooltip: + ''' + Critical strikes cause enemies around the struck enemy to glow, revealing other enemies + +2% critical strike chance + +15% critical strike damage + ''' + } + + TempleLensUpgrade: { + DisplayName: Truestrike Lens + Tooltip: + ''' + Critical strikes inflict {{BUFF:Exposed}} on nearby enemies, increasing their {{Exposure}} + +2% critical strike chance + +20% critical strike damage + ''' + } + + TemplePick: { + DisplayName: Whirlwind Pickaxe + Tooltip: Hold to charge up a spinning pickaxe dash, breaking anything in your way + } + + TempleRune: { + DisplayName: Rune of Warding + Tooltip: +50 maximum {{barrier}} + } + + TempleSpear: { + DisplayName: Point of Light + Tooltip: + ''' + Hold to charge a powerful spear + Fires a laser when fully charged + ''' + } + + ArmorBag: { + DisplayName: Armor Bag + Tooltip: + ''' + Stores armor for quick use + Contains: + ''' + } + + ChefBag: { + DisplayName: Chef's Bag + Tooltip: Stores lots of every food ingredient + } + + CursedDrop: { + DisplayName: Drop of darkness + Tooltip: + ''' + Reforges an accessory with a {{cursed}} prefix + Right Click an accessory while holding this on your cursor to use + Reforge the item at the goblin tinkerer to remove it + ''' + } + + CurseRemover: { + DisplayName: Scroll of Undoing + Tooltip: + ''' + Place over an equipped Cursed item to destroy it + 'There's no turning back, most of the time' + ''' + } + + MeteorForcer: { + DisplayName: Prayer for Meteorite + Tooltip: Guarantees a meteorite will be the next celestial object to fall + } + + MoonstoneForcer: { + DisplayName: Prayer for Moonstone + Tooltip: Guarantees a moonstone will be the next celestial object to fall + } + + AncientStarwoodBoots.DisplayName: Ancient Starwood Leggings + AncientStarwoodChest.DisplayName: Ancient Starwood Robes + AncientStarwoodHat.DisplayName: Ancient Starwood Hat + MechaChest.DisplayName: Mecha Chest + MechaHead.DisplayName: Mecha Helmet + MechaLegs.DisplayName: Mecha Legs + + WardenHat: { + DisplayName: Warden Hat + Tooltip: "[c/198E12:???]" + } + + WardenRobe: { + DisplayName: Warden Robe + Tooltip: "[c/198E12:???]" + } + + CoachGunUpgrade: { + DisplayName: Magmatic Coach Gun + Tooltip: + ''' + Press to throw out crystal bombs, which explode in chain reactions + Firing at a bomb detonates it and inflicts {{BUFF:SwelteredDeBuff}} + 'How does he manage to corenuke like that?' + ''' + } + + Coalescence: { + DisplayName: Coalescence + Tooltip: + ''' + Charge for a volley of brilliant magic + Fully charged shots leech mana where their arrows meet + ''' + } + + FacetAndLattice: { + DisplayName: Facet & Lattice + Tooltip: + ''' + to guard, blocking damage depending on timing + Attacks are empowered after a guard, also depending on your guard timing + ''' + } + + ForgeMap: { + DisplayName: Glassweaver's Map + Tooltip: + ''' + Quite a self-explanatory exquisite piece of art isn't it? + Right click on the item to view the map. + ''' + } + + GlassArrowhead: { + DisplayName: Glass Arrowhead + Tooltip: Critical strikes cause arrows to shatter into glass shards + } + + GlassIdol.Tooltip: Used to worship a powerful guardian. + + GlassIdolEndless: { + DisplayName: Gilded Glass Idol + Tooltip: + ''' + Used to worship a powerful guardian. + Infinite uses + ''' + } + + IgnitionGauntlets: { + DisplayName: Ignition Gauntlets + Tooltip: + ''' + Rapidly barrages enemies with your fists while building Ignition Charge + Hold to consume charge, propelling yourself forward at escape velocity + Attack while still flying to vent remaining charge in a large blast cone + 'Heroes always arrive from the skies' + ''' + } + + MagmaArrow: { + DisplayName: Magma Arrow + Tooltip: Cools down as it travels, applying less fire but dealing more damage and knockback + } + + MagmaCore: { + DisplayName: Magmatic Core + Tooltip: A sample of the hot stuff. + } + + MagmiteBomb: { + DisplayName: Magmite Bomb + Tooltip: + ''' + A ball of cuteness turned into an instrument of destruction + You monster... + ''' + } + + MagmiteBottle: { + DisplayName: Magmite in a Bottle + Tooltip: Why would you do this to him?! + } + + MagmiteVacpack.Tooltip: Blasts out Magmites that stick to enemies and increase summon tag damage + + Needler: { + DisplayName: Needler + Tooltip: + ''' + Stick spikes to enemies to build up heat + Overheated enemies explode, dealing massive damage + ''' + } + + PhoenixStorm: { + DisplayName: Phoenix Storm + Tooltip: + ''' + Summons a storm of phoenixes that periodically swoop in on enemies + Inflicts {{BUFF:OnFire}} + ''' + } + + RecursiveFocus.Tooltip: + ''' + Summons an infernal crystal + The infernal crystal locks onto enemies, ramping up damage over time + Press to cause the crystal to target multiple enemies, at the cost of causing all beams to not ramp up, dealing less damage + ''' + + RefractiveBlade: { + DisplayName: Refractive Blade + Tooltip: + ''' + Hold to charge a laser + The laser inflicts {{BUFF:RefractiveBladeBuff}}, increasing their melee {{Exposure}} + ''' + } + + SandstoneChunk: { + DisplayName: Ancient Ceramic + Tooltip: "" + } + + ShatteredAegis: { + DisplayName: Shattered Aegis + Tooltip: + ''' + Releases a burning ring when damaged + 'Meet your foes head-on, and give them a scorching embrace' + ''' + } + + StaminaUp: { + DisplayName: Glass Starlight Vessel + Tooltip: Increased maximum {{Starlight}} by 1 + } + + TempleEntranceKey: { + DisplayName: Forge Key + Tooltip: Opens a door to the Vitric Forge. + } + + TempleKey: { + DisplayName: Small Forge Key + Tooltip: Opens a door inside the Vitric Forge. + } + + VitricBossBag.DisplayName: Treasure Bag (Ceiros) + + VitricBow: { + DisplayName: Ancient Vitric Bow + Tooltip: Fires additional smaller arrows + } + + VitricBulletItem: { + DisplayName: Vitric Bullet + Tooltip: + ''' + Causes crystals to grow out of hit enemies + Strike crystals to shatter them, dealing damage + ''' + } + + VitricChest: { + DisplayName: Vitric Chestpiece + Tooltip: 5% increased ranged critical strike chance + } + + VitricHamaxe: { + DisplayName: Vitric Hamaxe + Tooltip: + ''' + to charge heat + Heat increases speed + Heat dissipates over time + ''' + } + + VitricHead: { + DisplayName: Vitric Headgear + Tooltip: 10% increased ranged damage + } + + VitricLegs: { + DisplayName: Vitric Greaves + Tooltip: + 2 Starlight regeneration + } + + VitricMagicBook: { + DisplayName: Vitric Book + Tooltip: Summons spikes to stab enemies above them + } + + VitricOre: { + DisplayName: Vitric Shard + Tooltip: "" + } + + VitricPick: { + DisplayName: Vitric Pickaxe + Tooltip: + ''' + Hellstone does not drop lava + Mining hellstone generates heat + Heat increases speed + ''' + } + + VitricSword: { + DisplayName: Ancient Vitric Blade + Tooltip: + ''' + Shatters into enchanted glass shards + Unable to be used while shattered + ''' + } + + CoolmiteLargeItem: { + DisplayName: Coolmismer + Tooltip: High intensity beauty! Avoid eye and skin exposure. + } + + CoolmitePassiveItem: { + DisplayName: Coolmite + Tooltip: Fragile! Please handle with care. + } + + CoolmiteSmolItem: { + DisplayName: Coolmini + Tooltip: Sharp edges! Watch your fingers. + } + + MagmiteLargeItem: { + DisplayName: Magmificent + Tooltip: Admire him! + } + + MagmitePassiveItem: { + DisplayName: Magmite + Tooltip: Release him! + } + + MagmiteSmolItem: { + DisplayName: Magmini + Tooltip: Nurture him! + } + + FaeflameTileItem: { + DisplayName: Faeflame + Tooltip: "{{Debug}} placer for ability pickup" + } + + StaminaShardTileItem: { + DisplayName: Starlight Shard + Tooltip: "{{Debug}} Item" + } + + WindsTileItem: { + DisplayName: Forbidden Winds + Tooltip: "{{Debug}} placer for ability pickup" + } + + CookStationItem: { + DisplayName: Prep Station + Tooltip: to prepare meals + } + + AnkhChestItem: { + DisplayName: Ankh Chest + Tooltip: "" + } + + DesertMonolithFlippedItem: { + DisplayName: Flipped Desert Monolith + Tooltip: + ''' + Places a section of flipped desert monolith + 'Even the text is flipped!' + ''' + } + + DesertMonolithItem: { + DisplayName: Desert Monolith + Tooltip: Places a section of desert monolith + } + + CommonVegetablesItem: { + DisplayName: Common Vegetable Seeds + Tooltip: Plant to grow your own veggies + } + + ForestBerryBushItem: { + DisplayName: Berry Bush + Tooltip: Plant to grow your own berries + } + + LeafWallItem: { + DisplayName: Flowing leaf wall + Tooltip: "" + } + + Slimeberry: { + DisplayName: Slimeberry + Tooltip: Ew. + } + + SlimeberryBushItem: { + DisplayName: Slimeberry Bush + Tooltip: Places a slimeberry bush + } + + ThickTreeAcorn: { + DisplayName: Large Acorn + Tooltip: "" + } + + AncientFruit: { + DisplayName: Ancient Fruit + Tooltip: " " + } + + GoldenRice: { + DisplayName: Golden Rice + Tooltip: " " + } + + Rice: { + DisplayName: Rice + Tooltip: " " + } + + GreenhouseGlassItem: { + DisplayName: Greenhouse Glass + Tooltip: + ''' + Speeds up the growth of any plant below it + Needs a 10 blocks of clear area or transparent blocks above it + ''' + } + + GreenhouseWallItem: { + DisplayName: Greenhouse Glass Wall + Tooltip: Fancy! + } + + BouncerItem: { + DisplayName: Vitric Bouncer + Tooltip: + ''' + Dash into this to go flying! + Resets jump accessories + ''' + } + + StaminaGemItem: { + DisplayName: Starlight Gem + Tooltip: Restores starlight when hit with an ability + } + + StaminaOrbItem: { + DisplayName: Starlight Orb + Tooltip: + ''' + Pass through this to gain starlight! + 5 second cooldown + ''' + } + + DisplayCaseFriendlyItem: { + DisplayName: Display Case + Tooltip: Can hold an Item for glamorous display + } + + RatTentItem: { + DisplayName: Strange Tent + Tooltip: Whats inside?... + } + + MoonstoneMonolithItem: { + DisplayName: Moonstone Monolith + Tooltip: "'Dreamifies the skies'" + } + + JellyShroomItem: { + DisplayName: Blue Jellyshroom + Tooltip: Boing! + } + + LumishroomItem: { + DisplayName: Lumishroom + Tooltip: Glowy... + } + + VibeshroomItem: { + DisplayName: Vibeshroom + Tooltip: Vibin' + } + + BlueTorchOvergrowItem: { + DisplayName: Blue Faerie Torch + Tooltip: Sparkly! and Blue! + } + + CrusherOvergrowItem: { + DisplayName: Crusher Trap + Tooltip: "" + } + + NoxiousNodeItem: { + DisplayName: Noxious Node + Tooltip: "{{Debug}} item" + } + + OvergrowthLivingWoodItem: { + DisplayName: Overgrown Living Wood + Tooltip: "[PH] make this a wand and stuffs" + } + + Rock2x2Item: { + DisplayName: 2x2 rock placer + Tooltip: It places... Rocks + } + + SkeletonBrickItem: { + DisplayName: Skeletal Brick + Tooltip: "" + } + + TorchOvergrowItem: { + DisplayName: Faerie Torch + Tooltip: Sparkly! + } + + WallOvergrowBrickItem: { + DisplayName: Runic Brick Wall + Tooltip: "" + } + + WallOvergrowGrassItem: { + DisplayName: Overgrowth Grass Wall + Tooltip: "" + } + + WindowSmallItem: { + DisplayName: Smol Window + Tooltip: "{{Debug}} Item" + } + + WispAltarLItem: { + DisplayName: Wisp Altar L Placer + Tooltip: "{{Debug}} Item" + } + + WispAltarRItem: { + DisplayName: Wisp Altar R Placer + Tooltip: "{{Debug}} Item" + } + + AuroraclePaintingItem: { + DisplayName: Prismatic Waters + Tooltip: "'K. Ra'" + } + + EggCodexPaintingItem: { + DisplayName: Codex Genesis + Tooltip: "'K. Ra'" + } + + EndOfTimePaintingItem: { + DisplayName: End of Time + Tooltip: "'K. Ra'" + } + + RatKingPaintingItem: { + DisplayName: Majestic Hoarder + Tooltip: "'K. Ra'" + } + + PalestoneItem: { + DisplayName: Palestone Block + Tooltip: "" + } + + AuroraBrickDoorItem: { + DisplayName: "{{Debug}} Brick Placer" + Tooltip: "" + } + + AuroraBrickItem: { + DisplayName: Aurora Brick + Tooltip: Oooh... Preeetttyyy + } + + AuroraBrickWallFriendlyItem: { + DisplayName: Aurora Brick Wall + Tooltip: Oooh... Preeetttyyy + } + + AuroraBrickWallItem: { + DisplayName: Aurora Brick Wall Dangerous + Tooltip: Oooh... Preeetttyyy + } + + DoorBombShooterItem: { + DisplayName: "{{Debug}} Shooter Placer" + Tooltip: "" + } + + PermafrostIceItem: { + DisplayName: Permafrost Ice + Tooltip: "" + } + + TouchstoneItem: { + DisplayName: Touchstone + Tooltip: A guiding light + } + + TouchstoneLootboxItem: { + DisplayName: Touchstone Chest Placer + Tooltip: "" + } + + AuroracleTrophyItem: { + DisplayName: Auroracle Trophy + Tooltip: "" + } + + CeirosTrophyItem: { + DisplayName: Ceiros Trophy + Tooltip: "" + } + + CombatShrineItem: { + DisplayName: Combat shrine placer + Tooltip: "{{Debug}} item" + } + + GlorchItem: { + DisplayName: Glorch + Tooltip: + ''' + Does a lamp give off light... or suck up the dark? + Reduces light nearby + ''' + } + + HotspringFountainItem: { + DisplayName: Hotspring Source + Tooltip: Transforms nearby water into a hotspring! + } + + MagmiteShrineItem: { + DisplayName: The Boi + Tooltip: It's him! + } + + DashBarrierItem: { + DisplayName: Dash Barrier + Tooltip: "{{Debug}} Item" + } + + JarTallItem: { + DisplayName: Stamina Jar Placer (Tall) + Tooltip: "{{Debug}} Item" + } + + TempleChestPlacer: { + DisplayName: Temple Chest Placer + Tooltip: "" + } + + TempleWallBigItem: { + DisplayName: Large Ancient Temple Brick Wall + Tooltip: "" + } + + TempleWallItem: { + DisplayName: Ancient Temple Brick Wall + Tooltip: "" + } + + TestBubble: { + DisplayName: Bubble + Tooltip: "{{Debug}} Item" + } + + VerletBannerItem: { + DisplayName: Verlet banner + Tooltip: "{{Debug}} Item" + } + + AncientSandstonePillarWallItem: { + DisplayName: Ancient Sandstone Wall + Tooltip: "" + } + + AncientSandstonePlatformItem: { + DisplayName: Ancient Sandstone Platform + Tooltip: "" + } + + AncientSandstoneTorchItem: { + DisplayName: Ancient Vitric Illuminator + Tooltip: It has an entrancing glow + } + + AncientSandstoneWallItem: { + DisplayName: Ancient Sandstone Wall + Tooltip: "" + } + + DestructableGlassItem: { + DisplayName: Breakable vitric crystal + Tooltip: A chunk of vitric crystal susceptible to the force of forbidden winds + } + + ForgeDoorItem: { + DisplayName: Forge Door + Tooltip: "{{Debug}} Item" + } + + ForgeInnerDoorItem: { + DisplayName: Forge Inner Door + Tooltip: "{{Debug}} Item" + } + + RedBannerShortItem: { + DisplayName: Short Flowing Banner + Tooltip: "{{Debug}} Item" + } + + CrystalSlimeSpawnerItem: { + DisplayName: NPC Spawner + Tooltip: "" + } + + DashableDoorItem: { + DisplayName: DashableDoor + Tooltip: "{{Debug}} Item" + } + + DoorGearsItem: { + DisplayName: Gear Puzzle Temple Door + Tooltip: Temple Door, Opens if gear puzzle is solved + } + + DoorLasersItem: { + DisplayName: Laser Puzzle Temple Door + Tooltip: Temple Door, Opens if laser puzzle is solved + } + + DoorVerticalItem: { + DisplayName: Vertical Temple Door + Tooltip: Temple Door, But what if it was vertical? + } + + EntranceDoorItem: { + DisplayName: EntranceDoor + Tooltip: "{{Debug}} Item" + } + + GearPuzzleOriginPlacer: { + DisplayName: Gear puzzle origin + Tooltip: "{{Debug}} Item" + } + + GearTilePlacer: { + DisplayName: Gear puzzle + Tooltip: "{{Debug}} Item" + } + + ObjectiveGearItem: { + DisplayName: Gear puzzle Point + Tooltip: "{{Debug}} Item" + } + + LightActorItem: { + DisplayName: Light actor placer + Tooltip: "{{Debug}} item" + } + + LensItem: { + DisplayName: Reflector Lens + Tooltip: "{{Debug}} Item" + } + + ReflectorItem: { + DisplayName: Reflector + Tooltip: "{{Debug}} Item" + } + + LowWindBannerItem: { + DisplayName: Rectangular Flowing Banner + Tooltip: "" + } + + MainForgeItem: { + DisplayName: Main forge + Tooltip: "{{Debug}} item" + } + + NPCSpawnerItem: { + DisplayName: NPC Spawner + Tooltip: "" + } + + OldCeirosShrineItem: { + DisplayName: Old Ceiros Shrine + Tooltip: "{{Debug}} Item" + } + + SoundPuzzleDoorItem: { + DisplayName: Sound Puzzle Temple Door + Tooltip: Temple Door, Opens if sound puzzle is solved + } + + TallWindowCrystalItem: { + DisplayName: Crystal Window Actor + Tooltip: "{{Debug}} Item" + } + + TallWindowItem: { + DisplayName: Window Actor + Tooltip: "{{Debug}} Item" + } + + TallWindowLavaItem: { + DisplayName: Lava Window Actor + Tooltip: "{{Debug}} Item" + } + + TempleCandleCrystalItem: { + DisplayName: Temple Crystal Candle + Tooltip: "" + } + + TempleCandleItem: { + DisplayName: Temple Candle + Tooltip: "" + } + + TempleCeirosFountainItem: { + DisplayName: Temple Sentinel Fountain + Tooltip: "" + } + + TempleWallCandleItem: { + DisplayName: Temple Wall Candle + Tooltip: "" + } + + TutorialDoor1Item: { + DisplayName: TutorialDoor1 + Tooltip: "{{Debug}} Item" + } + + TutorialDoor2Item: { + DisplayName: TutorialDoor2 + Tooltip: "{{Debug}} Item" + } + + VitricPillarWallCrystalItem: { + DisplayName: Crystal Vitric Forge Pillar + Tooltip: Sturdy + } + + VitricPillarWallItem: { + DisplayName: Vitric Forge Pillar + Tooltip: Sturdy + } + + VitricPillarWallLavaItem: { + DisplayName: Lava Vitric Forge Pillar + Tooltip: Sturdy + } + + VitricPillarWallShortItem: { + DisplayName: Short Vitric Forge Pillar + Tooltip: Sturdy + } + + VitricTempleWallItem: { + DisplayName: Vitric Forge Brick Wall (Danger) + Tooltip: "{{Debug}} item" + } + + VitricTempleWallSafeItem: { + DisplayName: Vitric Forge Brick Wall (Safe) + Tooltip: Sturdy + } + + WindsRoomActorItem: { + DisplayName: Winds Room Actor + Tooltip: "{{Debug}} Item" + } + + VitricBannerSmallItem: { + DisplayName: Short Flowing Banner + Tooltip: "" + } + + VitricBossAltarItem: { + DisplayName: Vitric Boss Altar Item + Tooltip: "{{{{Debug}}}} Item" + } + + VitricBreakableVaseItem: { + DisplayName: Vitric Vase Placer + Tooltip: "{{Debug}} Item" + } + + VitricFountainItem: { + DisplayName: Vitric Fountain + Tooltip: "{{Debug}} Item" + } + + VitricGiantCrystalItem: { + DisplayName: Vitric Giant crystal + Tooltip: The slot this Item is in changes the type placed + } + + VitricLargeCrystalItem: { + DisplayName: Large vitric crystal + Tooltip: The slot this Item is in changes the type placed + } + + VitricLargeFountainItem: { + DisplayName: Vitric Large Fountain + Tooltip: "{{Debug}} Item" + } + + VitricLootBoxItem: { + DisplayName: Vitric Loot Box Item + Tooltip: "" + } + + VitricMediumCrystalItem: { + DisplayName: Medium vitric crystal + Tooltip: The slot this Item is in changes the type placed + } + + VitricOreFloatItem: { + DisplayName: Floating Vitric Ore Crystal Item + Tooltip: "" + } + + VitricOreItem: { + DisplayName: Vitric Ore Crystal Item + Tooltip: "" + } + + VitricPylonItem: { + DisplayName: Vitric Pylon + Tooltip: You shouldn't have this! + } + + VitricRockItem: { + DisplayName: Vitric Rock + Tooltip: "" + } + + VitricSandWallItem: { + DisplayName: Vitric Sand Wall + Tooltip: "" + } + + VitricSmallCrystalItem: { + DisplayName: Small vitric crystal + Tooltip: The slot this Item is in changes the type placed + } + + VitricSpikeItem: { + DisplayName: Vitric Spikes + Tooltip: Ouch! + } + + VitricBannerItem: { + DisplayName: Long Flowing Banner + Tooltip: "" + } + + CombatShrineBarrierItem: { + DisplayName: CombatShrineBarrierItem + Tooltip: "{{Debug}} item" + } + + EvasionShrineBarrierItem: { + DisplayName: EvasionShrineBarrierItem + Tooltip: "{{Debug}} item" + } + + VitricBathtub: { + DisplayName: Vitric Bathtub + Tooltip: "" + } + + VitricBed: { + DisplayName: Vitric Bed + Tooltip: "" + } + + VitricBookcase: { + DisplayName: Vitric Bookcase + Tooltip: "" + } + + VitricCandelabra: { + DisplayName: Vitric Candelabra + Tooltip: "" + } + + VitricCandle: { + DisplayName: Vitric Candle + Tooltip: "" + } + + VitricChair: { + DisplayName: Vitric Chair + Tooltip: "" + } + + VitricChandelier: { + DisplayName: Vitric Chandelier + Tooltip: "" + } + + VitricClock: { + DisplayName: Vitric Clock + Tooltip: "" + } + + VitricDresser: { + DisplayName: Vitric Dresser + Tooltip: "" + } + + VitricLamp: { + DisplayName: Vitric Lamp + Tooltip: "" + } + + VitricLantern: { + DisplayName: Vitric Lantern + Tooltip: "" + } + + VitricPiano: { + DisplayName: Vitric Piano + Tooltip: "" + } + + VitricSink: { + DisplayName: Vitric Sink + Tooltip: "" + } + + VitricSofa: { + DisplayName: Vitric Sofa + Tooltip: "" + } + + VitricTable: { + DisplayName: Vitric Table + Tooltip: "" + } + + VitricWorkbench: { + DisplayName: Vitric Workbench + Tooltip: "" + } + + VitricDoorClosed: { + DisplayName: Vitric Door + Tooltip: "" + } + + VitricBossBarrierItem: { + DisplayName: VitricBossBarrierItem + Tooltip: "{{Debug}} item" + } + + GlassweaverBossBarrierItem: { + DisplayName: GlassweaverBossBarrierItem + Tooltip: "{{Debug}} item" + } + + AuroracleRelicItem: { + DisplayName: Auroracle Relic + Tooltip: "" + } + + CeirosRelicItem: { + DisplayName: Ceiros Relic + Tooltip: "" + } + + TempleChairItem: { + DisplayName: Temple Chair + Tooltip: "" + } + + TempleLargeVaseItem: { + DisplayName: Temple Large Vase + Tooltip: "" + } + + TempleLargeVaseCrystalItem: { + DisplayName: Temple Large Crystal Vase + Tooltip: "" + } + + TempleWorkbenchItem: { + DisplayName: Temple Workbench + Tooltip: "" + } + + TempleThroneItem: { + DisplayName: Temple Throne + Tooltip: "" + } + + TempleFloorWeaponRackItem: { + DisplayName: Temple Floor Weapon Rack + Tooltip: "" + } + + TempleTableItem: { + DisplayName: Temple Table + Tooltip: "" + } + + TempleTableCrystalItem: { + DisplayName: Temple Crystal Table + Tooltip: "" + } + + TempleWeaponRack0Item: { + DisplayName: Temple Weapon Rack A + Tooltip: "" + } + + TempleWeaponRack1Item: { + DisplayName: Temple Weapon Rack B + Tooltip: "" + } + + TempleWeaponRack2Item: { + DisplayName: Temple Weapon Rack C + Tooltip: "" + } + + TempleWeaponRack3Item: { + DisplayName: Temple Weapon Rack D + Tooltip: "" + } + + TempleThingamajigItem: { + DisplayName: Temple Large Weapon Rack + Tooltip: "" + } + + VitricBoss1Item: { + DisplayName: Music Box (Ceiros P1) + Tooltip: "" + } + + VitricBoss2Item: { + DisplayName: Music Box (Ceiros P2) + Tooltip: "" + } + + VitricPassiveItem: { + DisplayName: Music Box (Vitric Desert) + Tooltip: "" + } + + VitricTempleItem: { + DisplayName: Music Box (Vitric Temple) + Tooltip: "" + } + + MinibossItem: { + DisplayName: Music Box (GlassWeaver) + Tooltip: "" + } + + AuroracleItem: { + DisplayName: Music Box (Auroracle) + Tooltip: "" + } + + TempleBrickItem: { + DisplayName: Ancient Bricks + Tooltip: "" + } + + LeafOvergrowItem: { + DisplayName: Faerie Leaves + Tooltip: "" + } + + BrickOvergrowItem: { + DisplayName: Runic Bricks + Tooltip: "" + } + + StoneOvergrowItem: { + DisplayName: Runic Stone + Tooltip: "" + } + + SpringstoneItem: { + DisplayName: Springstone + Tooltip: "" + } + + ShrineBrazierItem: { + DisplayName: Mysterious Brazier + Tooltip: "" + } + + WitTileItem: { + DisplayName: Tile of Wit + Tooltip: "" + } + + AncientSandstoneItem: { + DisplayName: Ancient Sandstone + Tooltip: "" + } + + AncientSandstoneTileItem: { + DisplayName: Ancient Sandstone Tile + Tooltip: "" + } + + VitricBrickItem: { + DisplayName: Vitric Bricks + Tooltip: "" + } + + VitricCactusItem: { + DisplayName: Crystal Cactus + Tooltip: "" + } + + VitricGlassItem: { + DisplayName: Vitric Glass + Tooltip: "" + } + + VitricSandItem: { + DisplayName: Glassy Sand + Tooltip: "" + } + + VitricSoftSandItem: { + DisplayName: Soft Glassy Sand + Tooltip: "" + } + + VitricSandPlainItem: { + DisplayName: Soft Sand + Tooltip: "" + } +} + +Tiles: { + CauldronTile.MapEntry: Alchemic Cauldron + SeaglassRingTile.MapEntry: "" + CookStation.MapEntry: Cooking Station + CrashPod.MapEntry: Crashed Pod + AnkhChest.MapEntry: Ankh Chest + DesertMonolith.MapEntry: "" + DesertMonolithFlipped.MapEntry: "" + TwistSwordTile.MapEntry: Twisted Greatsword + PinkSeaSalt.MapEntry: "" + TableSalt.MapEntry: "" + CommonVegetables.MapEntry: "" + ForestBerryBush.MapEntry: "" + MonkSpear.MapEntry: Monk's Spade + SlimeberryBush.MapEntry: "" + ThickTree.MapEntry: Large Tree + ThickTreeBase.MapEntry: "" + ThickTreeSapling.MapEntry: Large sapling + TallAncientFruit.MapEntry: Ancient Fruit + TallGoldenRice.MapEntry: Golden Rice + TallRice.MapEntry: Rice + GreenhouseGlass.MapEntry: Greenhouse Glass + Bouncer.MapEntry: "" + StaminaGem.MapEntry: "" + DisplayCase.MapEntry: Relic Case + DisplayCaseFriendly.MapEntry: Relic Case + PatreonPlaque.MapEntry: "" + RatTent.MapEntry: Strange Tent + MoonstoneBar.MapEntry: Metal Bar + MoonstoneMonolith.MapEntry: Moonstone Monolith + MoonstoneOre.MapEntry: Moonstone Ore + JellyShroom.MapEntry: Jelly Shroom + Lumishroom.MapEntry: "" + Vibeshroom.MapEntry: "" + BlueTorchOvergrow.MapEntry: "" + OvergrowthLivingWoodTile.MapEntry: Overgrown Living Wood + Rock2x2.MapEntry: "" + SetpieceAltar.MapEntry: "" + SkeletonBrickTile.MapEntry: Skeleton Brick + TorchOvergrow.MapEntry: "" + WindowSmall.MapEntry: "" + WispAltarL.MapEntry: "" + WispAltarR.MapEntry: "" + AuroraclePainting.MapEntry: Painting + EggCodexPainting.MapEntry: Painting + EndOfTimePainting.MapEntry: Painting + RatKingPainting.MapEntry: Painting + AuroraBrick.MapEntry: "" + AuroraBrickDoor.MapEntry: "" + AuroraIce.MapEntry: "" + DoorBombShooter.MapEntry: "" + PermafrostIce.MapEntry: "" + Touchstone.MapEntry: Touchstone + TouchstoneLootbox.MapEntry: "" + AuroracleTrophy.MapEntry: Trophy + Auroracle.MapEntry: Music Box + CeirosTrophy.MapEntry: Trophy + CombatShrine.MapEntry: Mysterious Shrine + EvasionShrine.MapEntry: Mysterious Shrine + HotspringFountain.MapEntry: "" + MagmiteShrine.MapEntry: The Boi + WitShrine.MapEntry: Mysterious Shrine + DashBarrier.MapEntry: "" + JarTall.MapEntry: Stamina Jar + ManabondTile.MapEntry: Manabond + TempleChestSimple.MapEntry: "" + TempleLootBubble.MapEntry: "" + VerletBanner.MapEntry: "" + DestructableGlass.MapEntry: "" + ForgeActor.MapEntry: "" + ForgeDoor.MapEntry: Forge Door + ForgeInnerDoor.MapEntry: Forge Door + RedBannerShort.MapEntry: "" + SandstoneDoor.MapEntry: "" + CrystalSlimeSpawner.MapEntry: "" + DashableDoor.MapEntry: "" + DoorGears.MapEntry: "" + DoorLasers.MapEntry: "" + DoorVertical.MapEntry: "" + EntranceDoor.MapEntry: Vitric Temple Door + DynamicGear.MapEntry: "" + GearPuzzleOrigin.MapEntry: "" + ObjectiveGear.MapEntry: "" + LightActor.MapEntry: "" + EmptyHolder.MapEntry: "" + Lens.MapEntry: "" + LightBlocker.MapEntry: "" + LightGoal.MapEntry: "" + Reflector.MapEntry: "" + LowWindBanner.MapEntry: "" + MainForge.MapEntry: Vitric Forgeheart + NPCSpawner.MapEntry: "" + OldCeirosShrine.MapEntry: "" + SoundPuzzleDoor.MapEntry: "" + TallWindow.MapEntry: "" + TallWindowCrystal.MapEntry: "" + TallWindowLava.MapEntry: "" + TempleCandle.MapEntry: Candle + TempleCandleCrystal.MapEntry: Candle + TempleCeirosFountain.MapEntry: Fountain + TempleWallCandle.MapEntry: Candle + TutorialDoor1.MapEntry: "" + TutorialDoor2.MapEntry: "" + VitricPillarWall.MapEntry: "" + VitricPillarWallCrystal.MapEntry: "" + VitricPillarWallLava.MapEntry: "" + VitricPillarWallShort.MapEntry: "" + WindsRoomActor.MapEntry: "" + VitricBannerSmall.MapEntry: "" + VitricBanner.MapEntry: "" + VitricBossAltar.MapEntry: Ceiro's Altar + VitricBreakableVases.MapEntry: Pot + VitricDecor1x1.MapEntry: "" + VitricDecor1x1Inverted.MapEntry: "" + VitricDecor1x2.MapEntry: "" + VitricDecor1x2Inverted.MapEntry: "" + VitricDecor2x1.MapEntry: "" + VitricDecor2x1Inverted.MapEntry: "" + VitricDecor2x2.MapEntry: "" + VitricDecor2x2Inverted.MapEntry: "" + // VitricGiantCrystal.MapEntry: "" + // VitricLargeCrystal.MapEntry: "" + VitricLootBox.MapEntry: "" + // VitricMediumCrystal.MapEntry: "" + VitricOre.MapEntry: Vitric Ore + VitricOreFloat.MapEntry: Vitric Ore + VitricPylon.MapEntry: Vitric Pylon + VitricRoundCactus.MapEntry: "" + VitricSmallCactus.MapEntry: "" + // VitricSmallCrystal.MapEntry: "" + VitricSpike.MapEntry: "" + VitricBathtub.MapEntry: "" + VitricBed.MapEntry: "" + VitricBookcase.MapEntry: "" + VitricCandelabra.MapEntry: "" + VitricCandle.MapEntry: "" + VitricChair.MapEntry: "" + VitricChandelier.MapEntry: "" + VitricClock.MapEntry: "" + VitricDresser.MapEntry: "" + VitricLamp.MapEntry: "" + VitricLantern.MapEntry: "" + VitricPiano.MapEntry: "" + VitricSink.MapEntry: "" + VitricSofa.MapEntry: "" + VitricTable.MapEntry: "" + VitricWorkbench.MapEntry: "" + VitricDoorClosed.MapEntry: "" + VitricDoorOpen.MapEntry: "" + TempleChair.MapEntry: Chair + TempleLargeVase.MapEntry: Large Vase + TempleLargeVaseCrystal.MapEntry: Large Vase + TempleWorkbench.MapEntry: Workbench + TempleThrone.MapEntry: Throne + TempleFloorWeaponRack.MapEntry: Weapon Rack + TempleTable.MapEntry: Table + TempleTableCrystal.MapEntry: Table + TempleWeaponRack0.MapEntry: Weapon Rack + TempleWeaponRack1.MapEntry: Weapon Rack + TempleWeaponRack2.MapEntry: Weapon Rack + TempleWeaponRack3.MapEntry: Weapon Rack + TempleThingamajig.MapEntry: Weapon Rack + VitricBoss1.MapEntry: Music Box + VitricBoss2.MapEntry: Music Box + VitricPassive.MapEntry: Music Box + VitricTemple.MapEntry: Music Box + Miniboss.MapEntry: Music Box + TempleBrick.MapEntry: "" + LeafOvergrow.MapEntry: "" + BrickOvergrow.MapEntry: "" + StoneOvergrow.MapEntry: "" + Springstone.MapEntry: "" + ShrineBrazier.MapEntry: "" + WitTile.MapEntry: "" + AncientSandstone.MapEntry: "" + AncientSandstoneTile.MapEntry: "" + VitricBrick.MapEntry: "" + VitricCactus.MapEntry: "" + VitricGlass.MapEntry: "" + VitricSand.MapEntry: "" + VitricSoftSand.MapEntry: "" + VitricSandPlain.MapEntry: "" +} + +Projectiles: { + ArtifactItemProj.DisplayName: Artifact + GlassBubble.DisplayName: Volatile Bubble + GlassBubbleFragment.DisplayName: Glass Shard + GlassHammer.DisplayName: Woven Hammer + GlassRaiseSpike.DisplayName: Raised Glass Structure + GlassSpear.DisplayName: Woven Hammer + GlassSword.DisplayName: Glass Sword + LavaLob.DisplayName: Hot Lob + Whirlwind.DisplayName: Spinning Blades + InkBlob.DisplayName: Rainbow Ink + InkBlobGravity.DisplayName: Rainbow Ink + SpewBlob.DisplayName: Aurora Shard + SqueezeTell.DisplayName: Tentacle Warning + TentacleTell.DisplayName: Tentacle Warning + TentacleTrail.DisplayName: Trail + FinalLaser.DisplayName: Raging Fire + GlassSpike.DisplayName: Glass Spike + LavaDart.DisplayName: Magma Shot + TelegraphedGlassSpike.DisplayName: Glass Spike + MinigunTurret.DisplayName: Gun turret + PistolTurret.DisplayName: Gun turret + ShotgunTurret.DisplayName: Gun turret + BreachCannonSentry.DisplayName: Breach Cannon + ExplosiveFlare.DisplayName: Explosive Flare + FlareShrapnel.DisplayName: Explosive Shrapnel + OrbitalStrike.DisplayName: Orbital Strike + OrbitalStrikeRing.DisplayName: Orbital Strike + ScrappodProjectile.DisplayName: Scrappod + ScrappodScrapnel.DisplayName: Scrapnel + ScrapshotShrapnel.DisplayName: Explosive Shrapnel + SpotterDrone.DisplayName: Breacher Drone + SupplyBeaconProj.DisplayName: Supply Beacon + ArchaeologistsWhip_Whip.DisplayName: Archaeologist's Whip + AztecDeathSaxophoneHoldout.DisplayName: Aztec Death Saxophone + PerfectlyGenericPet.DisplayName: Perfectly Generic Object + SandscriptBook.DisplayName: Sandscript + CloudstrikeShot.DisplayName: Electro Shock + SkullBomb.DisplayName: Skull Bomb + SkullBusterBullet.DisplayName: Bullet + SkullBusterProj.DisplayName: Skull Buster + SkullBusterReload.DisplayName: Skull Buster + SkullbusterSkull.DisplayName: Skullbomb + ThousandthDegreeProjectile.DisplayName: Thousandth Degree + ThousandthDegreeProjectileFired.DisplayName: Blazing Wheel + FeralWolfMountBite.DisplayName: Crushing Jaws + SlimePrinceMinion.DisplayName: Slime Prince + AmethystShard.DisplayName: Amethyst Shard + RubyDagger.DisplayName: Ruby Dagger + SparklingBulletProj.DisplayName: Sparkling Bullet + TopazShard.DisplayName: Topaz Shard + TopazShield.DisplayName: Topaz Shield + TopazShieldFade.DisplayName: Topaz Shield + BloodAmuletBolt.DisplayName: Ghoul + BloodBolt.DisplayName: Blood Bolt + BloodBolterExplosion.DisplayName: Blood Bolter + BloodBolterHeldProj.DisplayName: Blood bolter + FleshApparation.DisplayName: Flesh apparation + GluttonyGhoul.DisplayName: Ghoul + GluttonyHandle.DisplayName: Gluttony + GravediggerSlam.DisplayName: Grave digger + GravediggerSwing.DisplayName: Grave digger + RadculasRapierSwungBlade.DisplayName: Radculas Rapier + RadculasRapierTeleport.DisplayName: Radculas Rapier + EchochainWhipAltProjectile.DisplayName: Echochain Aura + EchochainWhipAltProjectileChain.DisplayName: Echo Chain + EchochainWhipProjectile.DisplayName: Echochain + HauntedDaggerProjectile.DisplayName: Haunted Dagger + PoltergeistMinion.DisplayName: Haunted Weapon + TaintedGreataxeProjectile.DisplayName: Ethereal Greataxe + CopperObol.DisplayName: Obol + GoldObol.DisplayName: Obol + ObolImpact.DisplayName: Obol Star + PlatinumObol.DisplayName: Obol + SilverObol.DisplayName: Obol + ManEaterPotMinion.DisplayName: Tamed Man Eater + SlitherringWhip.DisplayName: Slither Whip + GrayGooProj.DisplayName: Gray Goo + ThunderBeadsProj.DisplayName: Thunder Beads + ThunderbussShot.DisplayName: Electro Shock + AquaticBolt.DisplayName: Waterbolt + DruidThorn.DisplayName: Enchanted Thorn + Fireball.DisplayName: Fireball + MagicBolt.DisplayName: Magical bolt + Shock.DisplayName: Shock Bolt + BalloonGunBalloon.DisplayName: Balloon + BizarreIce.DisplayName: Bizarre Potion + BizarrePotionProj.DisplayName: Bizarre Potion + BladesawSwungBlade.DisplayName: Bladesaw + CoachGunBomb.DisplayName: Dynamite + CoachGunEmber.DisplayName: Ember + CoachGunMuzzleFlash.DisplayName: Muzzle Flash + CoachGunRing.DisplayName: Coach Bomb + CoilStaticShock.DisplayName: Static Shock + CopperCoilWhip.DisplayName: Copper Coil + DiceProj.DisplayName: Dice + DiscordantBolt.DisplayName: Discordant Bolt + DualCrossHeld.DisplayName: Double Cross + EarthdusterHoldout.DisplayName: Earthduster + EarthdusterRing.DisplayName: Ring + ElectroArrowProjectile.DisplayName: Electro Arrow + EnchantedWateringCanProj.DisplayName: Enchanted Watering Can + FiletSlash.DisplayName: Slash + FryingPanBonk.DisplayName: Frying Pan + FryingPanProj.DisplayName: Frying Pan + GeodeBowExplosion.DisplayName: Geode Explosion + GeodeBowGrowth.DisplayName: Geode Growth + GeodeBowProj.DisplayName: Geode Bow + GeodeBowShrapnel.DisplayName: Geode Shrapnel + GraveBusterHeld.DisplayName: Grave Buster + GraveSlash.DisplayName: Slash + GunchuckProj.DisplayName: Sanguine Flayer + HeartStatueSentry.DisplayName: Heart Statue? + ImpactSMGExplosion.DisplayName: Explosion + ImpactSMGHoldout.DisplayName: Impact SMG + ImpactSMGShot.DisplayName: Impact SMG Shot + MagmaGunPhantomProj.DisplayName: Magma Glob + SlingHeldProjectile.DisplayName: Sling + SlingMushroomProjectile.DisplayName: Shroom + SlingSeedProjectile.DisplayName: Seed + SlingStoneProjectile.DisplayName: Stone + HauntedSoul.DisplayName: Soul + SoilgunCoinsProjectile.DisplayName: Coin + SoilgunCrimsandSoil.DisplayName: Soil + SoilgunDirtSoil.DisplayName: Soil + SoilgunEbonsandSoil.DisplayName: Soil + SoilgunExplosion.DisplayName: Explosion + SoilgunHoldout.DisplayName: Soilgun + SoilgunIcicleProj.DisplayName: Icicle + SoilgunLifeSteal.DisplayName: Lifesteal Orb + SoilgunMudSoil.DisplayName: Soil + SoilgunPearlsandSoil.DisplayName: Soil + SoilgunSandGrain.DisplayName: Sand Grain + SoilgunSandSoil.DisplayName: Soil + SoilgunSiltSoil.DisplayName: Soil + SoilgunSlushSoil.DisplayName: Soil + SoilgunVitricCrystals.DisplayName: Volatile Crystal + SoilgunVitricSandSoil.DisplayName: Soil + ThrusterEmber.DisplayName: Thruster + TinCoilWhip.DisplayName: Tin Coil + CrescentOrb.DisplayName: Lunar Orb + CrescentQuarterstaffProj.DisplayName: Crescent Quarterstaff + DianeCrescant.DisplayName: Crescant + MoonfuryProj.DisplayName: Moonfury Spike + MoonfuryRing.DisplayName: Orbital Strike + MoonstoneArrowProj.DisplayName: Moonlit Arrow + MoonstoneArrowRing.DisplayName: Orbital Strike + MoonstoneHamaxeHoldout.DisplayName: Moonstone Hamaxe + MoonstoneHamaxeRing.DisplayName: Explosion + ShakerBall.DisplayName: Shaker + PaleKnight.DisplayName: Pale Knight + PalestoneDummy.DisplayName: Pale Slash + PalestoneSlash.DisplayName: Pale Slash + AuroraBellProj.DisplayName: Aurora Bell + AuroraBellRing.DisplayName: Aurora Bell + AuroraBellRingSmall.DisplayName: Aurora Bell + AuroracleInkBullet.DisplayName: Auroracle Ink + AuroraThroneMountWhip.DisplayName: Tentacle + OctogunTentapistol.DisplayName: Tentapistol + OverflowingUrnProj.DisplayName: Overflowing Urn + TentacleHookProj.DisplayName: Tentacle Hook + StarwoodBoomerangProjectile.DisplayName: Starwood Boomerang + StarwoodScepterSummonEmpowered.DisplayName: Empowered Star + StarwoodScepterSummonSplit.DisplayName: Split Star + StarwoodSlingshotFragment.DisplayName: Star Fragment + StarwoodSlingshotStar.DisplayName: Shooting Star + StarwoodStaffFallingStar.DisplayName: Falling Star + StarwoodStaffProjectile.DisplayName: Starshot + BuzzsawBlood1.DisplayName: Buzzsaw + BuzzsawProj.DisplayName: Steamsaw + BuzzsawProj2.DisplayName: Buzzsaw + CogAmmoProjectile.DisplayName: Cog + CogwheelHitbox.DisplayName: Cogwheel + JetwelderCrawler.DisplayName: Crawler + JetwelderFinal.DisplayName: Bomber + JetwelderFinalMissle.DisplayName: Rocket + JetwelderFlame.DisplayName: Jetwelder + JetwelderGatler.DisplayName: Gatler + JetwelderJumper.DisplayName: Jumper + JetwelderJumperExplosion.DisplayName: Rocket + JetwelderJumperMissle.DisplayName: Grenade + JetwelderSelector.DisplayName: Jetwelder + PhantomBuzzsaw.DisplayName: Buzzsaw + RebarProj.DisplayName: Rebar + RuneStaffHoldout.DisplayName: Shine Staff + RuneStaffHoldoutFlash.DisplayName: Shine Staff + RuneStaffProjectile.DisplayName: Shine Star + TempleSpearLaser.DisplayName: Point of Light + TempleSpearProjectile.DisplayName: Point of Light + ArrowMagma.DisplayName: Magma Arrow + CoachGunUpgradeBomb.DisplayName: Crystal Bomb + CoachGunUpgradeShards.DisplayName: Crystal Shards + FacetProjectile.DisplayName: Facet + GlassShard.DisplayName: Glass Spike + IgnitionGauntletCharge.DisplayName: Ignition Gauntlets + IgnitionGauntletCone.DisplayName: Ignition Gauntlets + IgnitionGauntletLaunch.DisplayName: Ignition Gauntlets + IgnitionGauntletsImpactRing.DisplayName: Ignition Gauntlets + IgnitionPunch.DisplayName: Ignition Gauntlets + IgnitionPunchPhantom.DisplayName: Ignition Gauntlets + LatticeProjectile.DisplayName: Lattice + MagmaArrowProj.DisplayName: Magma Arrow + MagmiteVacpackHoldout.DisplayName: Magmite Vacpack + MagmiteVacpackProjectile.DisplayName: Bouncy Magmite + NeedlerEmber.DisplayName: Needle + NeedlerExplosion.DisplayName: Needle + NeedlerProj.DisplayName: Needle + PhoenixStormMinion.DisplayName: Phoenix + RecursiveFocusLaser.DisplayName: Infernal Laser + RecursiveFocusProjectile.DisplayName: Infernal Crystal + VitricArmorProjectile.DisplayName: Enchanted Glass + VitricArmorProjectileIdle.DisplayName: Enchanted Glass + VitricBookProjectile.DisplayName: Vitric Book 1 + VitricBookProjectiletileCheck.DisplayName: Vitric Book 2 + VitricBookSpikeTrap.DisplayName: Vitric Spike Trap + VitricBulletCrystalExplosion.DisplayName: Explosion + VitricBulletCrystalProjectile.DisplayName: Vitric Crystal + VitricBulletProjectile.DisplayName: Vitric Bullet + VitricSwordProjectile.DisplayName: Enchanted Glass + EnemyMagnetShot.DisplayName: Electro Shock + AngryCrescentDeathProjectile.DisplayName: Crescent Shard + DreambeastProj.DisplayName: Dream Shard + DreambeastProjHome.DisplayName: Dream Essence + DreamprismSlam.DisplayName: Slam + SnoobelCollider.DisplayName: Snoobel + FirebugMagma.DisplayName: Molten glass + ConstructRing.DisplayName: Explosion + PelterConstructArrow.DisplayName: Glass Arrow + PelterConstructArrowLarge.DisplayName: Glass Arrow + KettleMortar.DisplayName: Magma Shot + SnakeSpit.DisplayName: Molten glass + PinkSeaSaltProjectile.DisplayName: Sea Salt + TableSaltProjectile.DisplayName: Table Salt + Dart.DisplayName: Cursed Dart + SawbladeSmall.DisplayName: Cursed Sawblade + Spear.DisplayName: Cursed Spear +} + +Biomes: { + HotspringBiome: { + DisplayName: Hotsprings + TownNPCDialogueName: the Hotspring Biome + } + + MoonstoneBiome: { + DisplayName: Moonstone + TownNPCDialogueName: the Moonstone Biome + } + + OvergrowBiome: { + DisplayName: "[PH]Overgrowth" + TownNPCDialogueName: the Overgrow Biome + } + + PermafrostTempleBiome: { + DisplayName: Auroracle Temple + TownNPCDialogueName: the Permafrost Temple Biome + } + + VitricDesertBiome: { + DisplayName: Vitric Desert + TownNPCDialogueName: the Vitric Desert Biome + } + + VitricTempleBiome: { + DisplayName: Vitric Forge + TownNPCDialogueName: the Vitric Temple Biome + } + + CombatShrineBiome: { + DisplayName: Combat Shrine Biome + TownNPCDialogueName: the Combat Shrine Biome + } + + EvasionShrineBiome: { + DisplayName: Evasion Shrine Biome + TownNPCDialogueName: the Evasion Shrine Biome + } +} + +NPCs: { + Glassweaver.DisplayName: Glassweaver + GlassweaverWaiting.DisplayName: Glassweaver + ArenaActor.DisplayName: "" + EscapePlatform.DisplayName: "" + GoldPlatform.DisplayName: "" + IcePlatform.DisplayName: "" + IcePlatformSmall.DisplayName: "" + SquidBoss.DisplayName: Auroracle + ArenaBottom.DisplayName: "" + VitricBackdropLeft.DisplayName: "" + VitricBackdropRight.DisplayName: "" + VitricBoss.DisplayName: Ceiros + VitricBossCrystal.DisplayName: Resonant Crystal + VitricBossPlatformDown.DisplayName: "" + VitricBossPlatformDownSmall.DisplayName: "" + VitricBossPlatformUp.DisplayName: "" + VitricBossPlatformUpSmall.DisplayName: "" + BossRushOrb.DisplayName: ??? + SoulNibbler.DisplayName: Soul Nibbler + CrescentCaster.DisplayName: Crescent Caster + Blover.DisplayName: Blover + TreeBat.DisplayName: Tree Bat + Warbanner.DisplayName: Haunted Warbanner + Fogbinder.DisplayName: Fogbinder + LootWraith.DisplayName: Loot Wraith + AngryCrescent.DisplayName: Angry Crescent + Dreamprism.DisplayName: Dreamprism + Crusher.DisplayName: Masher + Snoobel.DisplayName: Snoobel + SwordEnemy.DisplayName: Sky Splicer + Crow.DisplayName: ??? + GloomSlime.DisplayName: Gloom Slime + BoomBug.DisplayName: Firebug + CoolmiteLarge.DisplayName: Coolmismer + CoolmitePassive.DisplayName: Coolmite + CoolmiteSmol.DisplayName: Coolmini + CrystalPopper.DisplayName: Sand Bat + CrystalSlime.DisplayName: Crystal Slime + DesertWisp.DisplayName: Desert Wisp + FlyingGruntConstruct.DisplayName: Flying Grunt Construct + FlyingPelterConstruct.DisplayName: Flying Pelter Construct + GruntConstruct.DisplayName: Grunt Construct + JuggernautConstruct.DisplayName: Juggernaut Construct + PelterConstruct.DisplayName: Pelter Construct + ShieldConstruct.DisplayName: Shield Construct + SupporterConstruct.DisplayName: Supporter Construct + KettleCreature.DisplayName: Magmortar + LesserFirebug.DisplayName: Lesser Firebug + MagmiteLarge.DisplayName: Magmificent + MagmitePassive.DisplayName: Magmite + MagmiteSmol.DisplayName: Magmini + Snake.DisplayName: Sandviper + BerrySlime.DisplayName: Slimeberry + TouchstoneWisp.DisplayName: Aurora Spirit +} + +Buffs: { + GlassweaverDot: { + DisplayName: Incineration + Description: Burning incredibly fast! + } + + Claustrophobia: { + DisplayName: Claustrophobia + Description: Stuck in wisp form! + } + + CoughDropsBuff: { + DisplayName: Cough Drops + Description: Your speed and damage are increased + } + + Dreamwarp: { + DisplayName: Dreamwarp + Description: You are going insane! + } + + FerrofluidDraftBuff: { + DisplayName: Ferrofluid Draft + Description: Nearby Items gravitate towards you + } + + FoodBuff: { + DisplayName: Nourished + Description: + ''' + Nourised by rich food, granting: + + ''' + } + + ForestTonic: { + DisplayName: Forest Tonic + Description: + ''' + Immunity to poison + Slowly regenerate life + ''' + } + + HotspringHeal: { + DisplayName: Refreshing Dip + Description: The hot springs restore your body and mind + } + + Illuminant: { + DisplayName: Illuminant + Description: You glow brightly! + } + + MossRegen: { + DisplayName: Mending Moss + Description: +10 life regeneration + } + + Overcharge: { + DisplayName: Overcharge + Description: Reduces defense by 75% + } + + PrismaticDrown: { + DisplayName: Prismatic Drown + Description: You are drowning in prismatic waters! + } + + ProtectiveShard: { + DisplayName: Protective Shards + Description: Incoming damage reduced by 25% + } + + Rage: { + DisplayName: Rage + Description: Increased damage and greatly increased knockback + } + + Slimed: { + DisplayName: Slimed + Description: eww + } + + Squash: { + DisplayName: Pancaked + Description: You're flat now. + } + + StaticShock: { + DisplayName: Static Shock + Description: Decreases defense by 4 + } + + GrayGooSummonBuff: { + DisplayName: Gray Goo + Description: Nanomachines, son! + } + + HauntedDaggerSummonBuff: { + DisplayName: Haunted Daggers + Description: Death by a hundred cuts + } + + PalestoneSummonBuff: { + DisplayName: Pale Knight + Description: No cost too great. + } + + StarwoodSummonBuff: { + DisplayName: Starwood Minion + Description: The sentient stars shall protect you! + } + + SupplyBeaconDamage: { + DisplayName: Supplied Damage + Description: Damage increased by 20% + } + + SupplyBeaconDefense: { + DisplayName: Supplied Defense + Description: Defense increased by 15 + } + + SupplyBeaconHeal: { + DisplayName: Supplied Healing + Description: Life and mana regeneration increased by 10 + } + + ArchaeologistsBuff: { + DisplayName: Treasure buff + Description: Your minions do more contact damage + } + + PerfectlyGenericPetBuff: { + DisplayName: Perfectly Generic Pet + Description: Made of grist + } + + WolfBleeding: { + DisplayName: Gored + Description: Deals 10 damage per second + } + + FleshApparationBuff: { + DisplayName: Flesh apparation + Description: A chunk of your flesh is following you! + } + + RadculasRapierBleed: { + DisplayName: Vampiric Bleeding + Description: Deals 1 damage per second + } + + RadculasRapierCooldown: { + DisplayName: Radcula's Teleport Cooldown + Description: The rapier's energy seems deminished + } + + ShovelQuickFall: { + DisplayName: Quick fall + Description: You slammin + } + + ShovelSlowFall: { + DisplayName: Slow fall + Description: Falling Speed Reduced + } + + SoulSuck: { + DisplayName: Soul Suck + Description: You getting sucked + } + + GlowingObsidianFire: { + DisplayName: Infernal flames + Description: Burning up! + } + + CorpseflowerBuff: { + DisplayName: Corpseflower Curse + Description: Deals damage over time based on the damage of the hit inflicting it + } + + ManEaterPotBuff: { + DisplayName: Man Eaters + Description: Quite the hairdo you have! + } + + BarbedKnifeBleed: { + DisplayName: Deep gash + Description: Deals 8 damage per second + } + + BizarrePotionPoisonDebuff: { + DisplayName: Bizarre Poison + Description: Deals 12 damage per second + } + + BrokenGlassesBuff: { + DisplayName: Broken Glasses + Description: You cant see, loser! + } + + CoachDebuff: { + DisplayName: Coach Debuff + Description: 10% increased damage + } + + FiletFrenzyBuff: { + DisplayName: Blood Frenzy + Description: + ''' + Increased melee speed + the Filet Knife cannot critically hit enemies + ''' + } + + HeartStatueDrain: { + DisplayName: Heart Siphon + Description: "" + } + + ImpactSMGBuff: { + DisplayName: Heated Up! + Description: "" + } + + IronheartBuff: { + DisplayName: Ironheart + Description: you have decaying extra barrier and defense + } + + PlexusChaliceBuff: { + DisplayName: Plexus Resistance + Description: +30% Inoculation + } + + MoonfuryDebuff: { + DisplayName: Dreamfire + Description: The next Moonfury hit has increased damage + } + + AuroraThroneMountMinionDebuff: { + DisplayName: Inked + Description: You take increased damage + } + + UrnFreeze: { + DisplayName: Urn Freeze + Description: The pot is out of control! + } + + InoculationPotionBuff: { + DisplayName: Inoculated + Description: +30% Inoculation + } + + NoShieldPot: { + DisplayName: Barrier Sickness + Description: Cannot consume more barrier potions + } + + ShieldDegenReduction: { + DisplayName: Barrier Affinity + Description: Barrier over your maximum drains much slower + } + + StarstruckDebuff: { + DisplayName: Starstruck + Description: Deals 8 damage per second + } + + CogwheelBuff: { + DisplayName: Cogwheel + Description: They see me rollin' + } + + Exposed: { + DisplayName: Exposed + Description: Effected entities have 20% exposure to all damage + } + + MagmaBurn: { + DisplayName: Magma burn + Description: Liquid glass melts away at you! + } + + PhoenixStormSummonBuff: { + DisplayName: Phoenix Minion + Description: A fiery bird follows you + } + + RefractiveBladeBuff: { + DisplayName: Melting + Description: Effected entities have 25% exposure to melee damage, and take an additional 50% more damage from the refractive blade + } + + SwelteredDeBuff: { + DisplayName: Sweltered + Description: + ''' + Deals 10 damage per second + Damage taken increased by 35% + ''' + } + + Fogbinded: { + DisplayName: Fogbound + Description: Bound to the Fogbinder + } + + TouchstoneWispBuff: { + DisplayName: Aurora Curiosity + Description: + ''' + What lies below? + Increased mining speed + ''' + } +} + +Prefixes: { + Carnal.DisplayName: Carnal + Crystalline.DisplayName: Crystalline + Eldritch.DisplayName: Eldritch + Ephemeral.DisplayName: Ephemeral + Occult.DisplayName: Occult + Reckless.DisplayName: Reckless + Sapping.DisplayName: Sapping + Unfaithful.DisplayName: Unfaithful + DefensivePrefix.DisplayName: Defensive + DoTResistPrefix1.DisplayName: Healthy + DoTResistPrefix2.DisplayName: Protected + DoTResistPrefix3.DisplayName: Blessed + LayeredPrefix.DisplayName: Layered + PlatedPrefix.DisplayName: Plated + ReinforcedPrefix.DisplayName: Reinforced + StaminaPrefix1.DisplayName: Sparkling + StaminaPrefix2.DisplayName: Shining + StaminaPrefix3.DisplayName: Glowing + StaminaPrefix4.DisplayName: Radiant +} From 1eca0ee840c7968ad793a6142d19813c04e2877c Mon Sep 17 00:00:00 2001 From: bobfishkins23 Date: Sun, 12 Jan 2025 23:02:40 -0500 Subject: [PATCH 4/6] Fix to make barrier buff apply --- Core/Systems/BarrierSystem/BarrierPlayer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/Systems/BarrierSystem/BarrierPlayer.cs b/Core/Systems/BarrierSystem/BarrierPlayer.cs index 11420cf9b..f1595d371 100644 --- a/Core/Systems/BarrierSystem/BarrierPlayer.cs +++ b/Core/Systems/BarrierSystem/BarrierPlayer.cs @@ -225,7 +225,7 @@ public override void ResetEffects() overchargeDrainRate = 60; rechargeDelay = 300; - rechargeRate = 6; + rechargeRate = 10; barrierDamageReduction = 0.5f; From cdf9f589330ef40c087495fb7827ddeedd5c5e99 Mon Sep 17 00:00:00 2001 From: bobfishkins23 Date: Tue, 21 Jan 2025 22:06:13 -0500 Subject: [PATCH 5/6] Barrier toggle --- Content/GUI/BarrierDyeSlot.cs | 25 ++++++++++++++++++++ Content/Items/BarrierDye/BaseBarrierDye.cs | 4 ++-- Core/Systems/BarrierSystem/BarrierPlayer.cs | 7 ++++-- Localization/en-US_Mods.StarlightRiver.hjson | 4 ++++ 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/Content/GUI/BarrierDyeSlot.cs b/Content/GUI/BarrierDyeSlot.cs index 8500bc660..6d03661da 100644 --- a/Content/GUI/BarrierDyeSlot.cs +++ b/Content/GUI/BarrierDyeSlot.cs @@ -4,6 +4,7 @@ using StarlightRiver.Helpers; using System.Collections.Generic; using Terraria.GameContent; +using Terraria.GameContent.UI.Elements; using Terraria.GameInput; using Terraria.ID; using Terraria.UI; @@ -16,6 +17,7 @@ class BarrierDyeSlot : SmartUIState private int topPos = 430; private readonly BarrierDyeSlotElement slot = new(); + private readonly UIImageButton visibility = new(Terraria.GameContent.TextureAssets.InventoryTickOn); public override bool Visible => Main.playerInventory && Main.EquipPageSelected == 2; @@ -29,6 +31,16 @@ public override void OnInitialize() slot.Left.Set(leftPos, 1); slot.Top.Set(topPos, 0); Append(slot); + + visibility.Left.Set(leftPos + 33, 1); + visibility.Top.Set(topPos - 2, 0); + visibility.SetVisibility(0.7f, 0.7f); + visibility.OnLeftClick += (a, b) => + { + var mp = Main.LocalPlayer.GetModPlayer(); + mp.hideBarrierEffects = !mp.hideBarrierEffects; + }; + Append(visibility); } public override void Draw(SpriteBatch spriteBatch) @@ -54,6 +66,19 @@ private void recalculateSlotPosition() Recalculate(); } } + + public override void SafeUpdate(GameTime gameTime) + { + if (slot.IsMouseHovering || visibility.IsMouseHovering) + Main.LocalPlayer.mouseInterface = true; + + var mp = Main.LocalPlayer.GetModPlayer(); + + if (mp.hideBarrierEffects) + visibility.SetImage(TextureAssets.InventoryTickOff); + else + visibility.SetImage(TextureAssets.InventoryTickOn); + } } public class BarrierDyeSlotElement : SmartUIElement diff --git a/Content/Items/BarrierDye/BaseBarrierDye.cs b/Content/Items/BarrierDye/BaseBarrierDye.cs index f4092dcff..397ffadbc 100644 --- a/Content/Items/BarrierDye/BaseBarrierDye.cs +++ b/Content/Items/BarrierDye/BaseBarrierDye.cs @@ -70,9 +70,9 @@ public override void PreDrawEffects(SpriteBatch spriteBatch, Player player) float sin = (float)Math.Sin(Main.GameUpdateCount / 10f); - for (int k = 0; k < 8; k++) + for (int k = 0; k < 4; k++) { - Vector2 dir = Vector2.UnitX.RotatedBy(k / 8f * 6.28f) * (5.5f + sin * 3.2f); + Vector2 dir = Vector2.UnitX.RotatedBy(k / 4f * 6.28f) * (3.5f + sin * 1f); Color color = new Color(100, 255, 255) * (opacity - sin * 0.1f) * 0.9f; spriteBatch.Draw(CustomHooks.PlayerTarget.Target, CustomHooks.PlayerTarget.getPlayerTargetPosition(player.whoAmI) + Vector2.UnitY * player.gfxOffY + dir, CustomHooks.PlayerTarget.getPlayerTargetSourceRectangle(player.whoAmI), color); diff --git a/Core/Systems/BarrierSystem/BarrierPlayer.cs b/Core/Systems/BarrierSystem/BarrierPlayer.cs index f1595d371..7acfb7f2f 100644 --- a/Core/Systems/BarrierSystem/BarrierPlayer.cs +++ b/Core/Systems/BarrierSystem/BarrierPlayer.cs @@ -26,6 +26,7 @@ public class BarrierPlayer : ModPlayer //yay we have to duplicate a ton of code public float rechargeAnimationTimer; public Item barrierDyeItem; + public bool hideBarrierEffects; public bool sendUpdatePacket = false; // set this to true whenever something else happens that would desync shield values, for example: onhit effects @@ -53,13 +54,13 @@ public override void Load() private void PostDrawBarrierFX(Player Player, SpriteBatch spriteBatch) { - if (!Main.gameMenu) + if (!Main.gameMenu && !Player.GetModPlayer().hideBarrierEffects) Player.GetModPlayer().Dye?.PostDrawEffects(spriteBatch, Player); } private void PreDrawBarrierFX(Player Player, SpriteBatch spriteBatch) { - if (!Main.gameMenu) + if (!Main.gameMenu && !Player.GetModPlayer().hideBarrierEffects) Player.GetModPlayer().Dye?.PreDrawEffects(spriteBatch, Player); } @@ -209,11 +210,13 @@ public override bool PreKill(double damage, int hitDirection, bool pvp, ref bool public override void SaveData(TagCompound tag) { tag["DyeItem"] = barrierDyeItem; + tag["Hide"] = hideBarrierEffects; } public override void LoadData(TagCompound tag) { barrierDyeItem = tag.Get("DyeItem"); + hideBarrierEffects = tag.GetBool("Hide"); } public override void ResetEffects() diff --git a/Localization/en-US_Mods.StarlightRiver.hjson b/Localization/en-US_Mods.StarlightRiver.hjson index bb166586d..f2e4506bf 100644 --- a/Localization/en-US_Mods.StarlightRiver.hjson +++ b/Localization/en-US_Mods.StarlightRiver.hjson @@ -3336,6 +3336,10 @@ Tiles: { VitricSand.MapEntry: "" VitricSoftSand.MapEntry: "" VitricSandPlain.MapEntry: "" + // VitricGiantCrystal.MapEntry: "" + // VitricLargeCrystal.MapEntry: "" + // VitricMediumCrystal.MapEntry: "" + // VitricSmallCrystal.MapEntry: "" } Projectiles: { From b913857b1604b161c93c560b263298e5fa47c47f Mon Sep 17 00:00:00 2001 From: bobfishkins23 Date: Wed, 22 Jan 2025 21:24:31 -0500 Subject: [PATCH 6/6] Doubled rate of magnetized enemy spawns --- Content/NPCs/Misc/MagnetizedEnemy.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content/NPCs/Misc/MagnetizedEnemy.cs b/Content/NPCs/Misc/MagnetizedEnemy.cs index a7120c4a4..656022e66 100644 --- a/Content/NPCs/Misc/MagnetizedEnemy.cs +++ b/Content/NPCs/Misc/MagnetizedEnemy.cs @@ -48,7 +48,7 @@ public override void OnSpawn(NPC npc, IEntitySource source) if (npc.boss || npc.immortal || npc.dontTakeDamage || npc.friendly || npc.townNPC) return; - if (!Main.rand.NextBool(30)) + if (!Main.rand.NextBool(15)) return; if (source is EntitySource_SpawnNPC spawnSource)