From bb28f7ffa7d179dce187ae6a2a27ccb686738db7 Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Fri, 23 May 2025 18:01:20 -0700 Subject: [PATCH 01/43] AdventureItem.cs: Spectre Pickaxe can break Temple brick --- AdventureItem.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/AdventureItem.cs b/AdventureItem.cs index aeb57c7c..8ba468ab 100644 --- a/AdventureItem.cs +++ b/AdventureItem.cs @@ -16,6 +16,17 @@ public class AdventureItem : GlobalItem ItemID.Sets.Factory.CreateBoolSet(ItemID.MagicMirror, ItemID.CellPhone, ItemID.IceMirror, ItemID.Shellphone, ItemID.ShellphoneSpawn); + public class PickaxeAdjustments : GlobalItem + { + public override void SetDefaults(Item item) + { + if (item.type == ItemID.SpectrePickaxe || item.type == ItemID.ShroomiteDiggingClaw) + { + item.pick = 210; + } + } + } + public override void SetDefaults(Item item) { var adventureConfig = ModContent.GetInstance(); From aaeaf6477430f47d6f16c273567989f4f871fc4e Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Fri, 23 May 2025 18:02:46 -0700 Subject: [PATCH 02/43] AdventurePlayer.cs: Added Shiny stone switch penalty --- AdventurePlayer.cs | 57 ++++++++++++++++++++++++++++++ Assets/Buff/ShinyStoneHotswap.png | Bin 0 -> 1253 bytes 2 files changed, 57 insertions(+) create mode 100644 Assets/Buff/ShinyStoneHotswap.png diff --git a/AdventurePlayer.cs b/AdventurePlayer.cs index e622aef4..679325e6 100644 --- a/AdventurePlayer.cs +++ b/AdventurePlayer.cs @@ -590,6 +590,52 @@ public override bool PreKill(double damage, int hitDirection, bool pvp, ref bool return true; } + private bool hadShinyStoneLastFrame; + + public override void PostUpdateEquips() + { + // Check if Shiny Stone is equipped + bool hasShinyStone = IsShinyStoneEquipped(); + + // Apply debuff when first equipped or after respawn + if (hasShinyStone && !hadShinyStoneLastFrame) + { + Player.AddBuff(ModContent.BuffType(), 3600); // 60 seconds + } + + // Disable Shiny Stone effects while debuffed + if (Player.HasBuff(ModContent.BuffType())) + { + Player.shinyStone = false; + } + + hadShinyStoneLastFrame = hasShinyStone; + + // Check if wearing full Tiki Armor + + } + public override void OnRespawn() + { + // Re-apply debuff if equipped during respawn + if (IsShinyStoneEquipped()) + { + Player.AddBuff(ModContent.BuffType(), 900); + } + } + + private bool IsShinyStoneEquipped() + { + for (int i = 3; i < 10; i++) // Check all accessory slots + { + if (Player.armor[i].type == ItemID.ShinyStone && + (i < 7 || !Player.hideVisibleAccessory[i - 3])) + { + return true; + } + } + return false; + } + public override void Kill(double damage, int hitDirection, bool pvp, PlayerDeathReason damageSource) { // Only play kill markers on clients that we hurt that aren't ourselves @@ -957,4 +1003,15 @@ public override string ToString() { return $"{Player.whoAmI}/{Player.name}/{DiscordUser?.Id}"; } +} +public class ShinyStoneHotswap : ModBuff +{ + public override string Texture => $"PvPAdventure/Assets/Buff/ShinyStoneHotswap"; + + public override void SetStaticDefaults() + { + Main.debuff[Type] = true; + Main.buffNoSave[Type] = true; + Main.buffNoTimeDisplay[Type] = false; // Show timer + } } \ No newline at end of file diff --git a/Assets/Buff/ShinyStoneHotswap.png b/Assets/Buff/ShinyStoneHotswap.png new file mode 100644 index 0000000000000000000000000000000000000000..e18d0f432eb900f533369f1c190e7a5f9748976e GIT binary patch literal 1253 zcmV#dBtE(XoR>JmOeS?cH=`Hg4jzO=bJh z?B_rn006p@gYpG5?SKwYXJURPXxb)@&#m4FfrZGs-|$D28#KBW1${n7XN$SKGy(ZQ z)jr9MqB1(uG7}#cgzxi8ZQVAlSOMdVz(5g*83v0fg*7Okg1s!t$>>~+$Xl#!kmm)& z+;%L>ZQSRv1c*SBz!E0$IxZcCRMO~@i!dzO3&`S^!g$`5jmBObzDX(<FAM11Qy*{H^kx^&K`uZr;>zrYAA%|0-b$ym=VO%1_k z7l}ksbp6=SIkOMsAX4TOewogFITDMCJ<h#G7WD19z z!ZHfDQA~$|ZnV?s%dd;jp)MnEwGjAue#ujrPQ9saQ1*WNWCU^$DI*F`e44hNtG8F% z>KA@2l=TAmof9LFDI8J?<54y}(vL^QIa*tN?u6ss;{}^d*oDsNa9f@A{N_W(M&aC? zDj0z!&qQis0)aXw(qR`mmzvmeHgK{JWiFmeD#CQ#pF9|Mj%tTj413T zO}kTh(VEg;75R!Gl#29>4^LredK%mUYThZpVt_#W*KBmrqvvh(8Ieg*p>v|_RoC>q zk58mIh^%o6BQ@&C3p*G%yf|l_6sed($4p;7GNC>rkSQE;3ez(_Ox5UlpqovYM3!pO zJtMlHytnl6HzWKzkyS?E(CuBevXsaDlFSwW;N+<~m zm$T!h58j4=@sC$irCCdxGx|40s=y zU17W@8E>n#-RP|;g*W|#RmR?p=k4>X`A(_Ufe{$255)hSfQ3(ER#pB30%Ga Date: Fri, 23 May 2025 18:04:16 -0700 Subject: [PATCH 03/43] AdventurePlayer.cs: Tiki armor KB immunity buff --- AdventurePlayer.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/AdventurePlayer.cs b/AdventurePlayer.cs index 679325e6..f4bddba2 100644 --- a/AdventurePlayer.cs +++ b/AdventurePlayer.cs @@ -612,6 +612,12 @@ public override void PostUpdateEquips() hadShinyStoneLastFrame = hasShinyStone; // Check if wearing full Tiki Armor + if (Player.armor[0].type == ItemID.TikiMask && + Player.armor[1].type == ItemID.TikiShirt && + Player.armor[2].type == ItemID.TikiPants) + { + Player.noKnockback = true; + } } public override void OnRespawn() From 7d7928502573fdf336564c9652407a91af03d7ae Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Fri, 23 May 2025 20:10:17 -0700 Subject: [PATCH 04/43] added psudo terra blade --- System/RecipeManager.cs | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/System/RecipeManager.cs b/System/RecipeManager.cs index 2db8ccb4..6899c4a2 100644 --- a/System/RecipeManager.cs +++ b/System/RecipeManager.cs @@ -1,13 +1,16 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using Terraria; using Terraria.ID; using Terraria.ModLoader; +using System.Linq; namespace PvPAdventure.System; [Autoload(Side = ModSide.Both)] public class RecipeManager : ModSystem { + public override void AddRecipes() { CreateDuplicateDropRecipe([ @@ -79,6 +82,37 @@ public override void AddRecipes() .AddIngredient(ItemID.StoneBlock, 50) .AddTile(TileID.HeavyWorkBench) .Register(); + + + + + int[] itemsToRemove = new int[] + { + ItemID.TrueNightsEdge, + ItemID.MoonlordArrow + }; + + for (int i = 0; i < Main.recipe.Length; i++) + { + Recipe recipe = Main.recipe[i]; + if (recipe.createItem.type != ItemID.None && itemsToRemove.Contains(recipe.createItem.type)) + { + recipe.DisableRecipe(); + } + } + + //temp sudo terrablade + Recipe.Create(ItemID.TrueNightsEdge) + .AddIngredient(ItemID.SoulofFright, 20) + .AddIngredient(ItemID.SoulofMight, 20) + .AddIngredient(ItemID.SoulofSight, 20) + .AddIngredient(ItemID.NightsEdge) + .AddIngredient(ItemID.TrueExcalibur) + .AddIngredient(ItemID.BrokenHeroSword) + .AddTile(TileID.MythrilAnvil) + .Register(); + + } private static void CreateDuplicateDropRecipe(List lootTable, int amountOfMaterial) From e78cb7b977924ecfb445fd6fd2b51073affa1e6f Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Fri, 23 May 2025 20:12:47 -0700 Subject: [PATCH 05/43] updated shiny stone localization --- Localization/en-US.hjson | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Localization/en-US.hjson b/Localization/en-US.hjson index 6c2953dc..72a598c1 100644 --- a/Localization/en-US.hjson +++ b/Localization/en-US.hjson @@ -685,6 +685,13 @@ Mods: { True: "[c/FF0000:The game has been paused.]" False: "[c/00FF00:The game has been resumed.]" } + + Buffs: { + ShinyStoneHotswap: { + DisplayName: Shiny Stone Hotswap + Description: Shiny Stone is charging up! + } + } } } From cb091b7f81be5109e0a2c6a94e92d28337b8a282 Mon Sep 17 00:00:00 2001 From: EJCrispy Date: Fri, 23 May 2025 20:03:43 -0700 Subject: [PATCH 06/43] Replaced garmon's SHITTY ASS code with my COOL SHIT that makes it so that you can craft 3 of any item in a pool into any other item from that pool at shimmer. Also has some qol that can be worked on later. --- System/RecipeManager.cs | 373 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 371 insertions(+), 2 deletions(-) diff --git a/System/RecipeManager.cs b/System/RecipeManager.cs index 6899c4a2..a42430b1 100644 --- a/System/RecipeManager.cs +++ b/System/RecipeManager.cs @@ -1,9 +1,9 @@ -using System; using System.Collections.Generic; +using System.Linq; using Terraria; using Terraria.ID; +using Terraria.Localization; using Terraria.ModLoader; -using System.Linq; namespace PvPAdventure.System; @@ -131,4 +131,373 @@ private static void CreateDuplicateDropRecipe(List lootTable, int amountOfM } } } + + public class AnyGolem1 : ModSystem + { + public static RecipeGroup AnyGolemPrimary; + public static int[] PrimaryItems => new int[] { + ItemID.GolemMasterTrophy, + ItemID.Stynger, + ItemID.PossessedHatchet, + ItemID.HeatRay, + ItemID.GolemFist, + ItemID.StaffofEarth + }; + + public override void AddRecipeGroups() + { + // Main group with trophy as first item (for icon) + AnyGolemPrimary = new RecipeGroup(() => Language.GetTextValue("Any Golem Primary"), PrimaryItems); + RecipeGroup.RegisterGroup("PvPAdventure:AnyGolemPrimary", AnyGolemPrimary); + + // Create exclude subgroups while maintaining trophy as first item + foreach (int itemID in PrimaryItems.Where(id => id != ItemID.GolemMasterTrophy)) + { + var validItems = PrimaryItems + .Where(id => id != itemID && id != ItemID.GolemMasterTrophy) + .Prepend(ItemID.GolemMasterTrophy) // Keep trophy first for icon + .ToArray(); + + RecipeGroup group = new RecipeGroup( + () => Language.GetTextValue("Any Golem Primary"), + validItems + ); + RecipeGroup.RegisterGroup($"PvPAdventure:AnyGolemPrimaryExclude{itemID}", group); + } + } + } + + public class AnyGolem2 : ModSystem + { + public static RecipeGroup AnyGolemSecondary; + public static int[] SecondaryItems => new int[] { + ItemID.GolemBossBag, + ItemID.SunStone, + ItemID.ShinyStone, + ItemID.EyeoftheGolem, + ItemID.Picksaw + }; + + public override void AddRecipeGroups() + { + // Main group with boss bag as first item (for icon) + AnyGolemSecondary = new RecipeGroup(() => Language.GetTextValue("Any Golem Secondary"), SecondaryItems); + RecipeGroup.RegisterGroup("PvPAdventure:AnyGolemSecondary", AnyGolemSecondary); + + // Create exclude subgroups while maintaining boss bag as first item + foreach (int itemID in SecondaryItems.Where(id => id != ItemID.GolemBossBag)) + { + var validItems = SecondaryItems + .Where(id => id != itemID && id != ItemID.GolemBossBag) + .Prepend(ItemID.GolemBossBag) // Keep boss bag first for icon + .ToArray(); + + RecipeGroup group = new RecipeGroup( + () => Language.GetTextValue("Any Golem Secondary"), + validItems + ); + RecipeGroup.RegisterGroup($"PvPAdventure:AnyGolemSecondaryExclude{itemID}", group); + } + } + } + + public class AnyQueenSlime1 : ModSystem + { + public static RecipeGroup AnyQueenSlimePrimary; + public static int[] PrimaryItems => new int[] { + ItemID.QueenSlimeMasterTrophy, + ItemID.Smolstar, + ItemID.QueenSlimeHook, + ItemID.QueenSlimeMountSaddle, + }; + + public override void AddRecipeGroups() + { + // Main group with trophy as first item (for icon) + AnyQueenSlimePrimary = new RecipeGroup(() => Language.GetTextValue("Any Queen Slime Primary"), PrimaryItems); + RecipeGroup.RegisterGroup("PvPAdventure:AnyQueenSlimePrimary", AnyQueenSlimePrimary); + + // Create exclude subgroups while maintaining icon as first item + foreach (int itemID in PrimaryItems.Where(id => id != ItemID.QueenSlimeMasterTrophy)) + { + var validItems = PrimaryItems + .Where(id => id != itemID && id != ItemID.QueenSlimeMasterTrophy) + .Prepend(ItemID.QueenSlimeMasterTrophy) // Keep item first for icon + .ToArray(); + + RecipeGroup group = new RecipeGroup( + () => Language.GetTextValue("Any Queen Slime Primary"), + validItems + ); + RecipeGroup.RegisterGroup($"PvPAdventure:AnyQueenSlimePrimaryExclude{itemID}", group); + } + } + } + + public class AnyPlantera1 : ModSystem + { + public static RecipeGroup AnyPlanteraPrimary; + public static int[] PrimaryItems => new int[] { + ItemID.PlanteraMasterTrophy, + ItemID.GrenadeLauncher, + ItemID.LeafBlower, + ItemID.WaspGun, + ItemID.NettleBurst, + ItemID.FlowerPow, + ItemID.VenusMagnum, + ItemID.Seedler, + }; + + public override void AddRecipeGroups() + { + // Main group with trophy as first item (for icon) + AnyPlanteraPrimary = new RecipeGroup(() => Language.GetTextValue("Any Plantera Drop"), PrimaryItems); + RecipeGroup.RegisterGroup("PvPAdventure:AnyPlanteraPrimary", AnyPlanteraPrimary); + + // Create exclude subgroups while maintaining icon as first item + foreach (int itemID in PrimaryItems.Where(id => id != ItemID.PlanteraMasterTrophy)) + { + var validItems = PrimaryItems + .Where(id => id != itemID && id != ItemID.PlanteraMasterTrophy) + .Prepend(ItemID.PlanteraMasterTrophy) // Keep item first for icon + .ToArray(); + + RecipeGroup group = new RecipeGroup( + () => Language.GetTextValue("Any Plantera Drop"), + validItems + ); + RecipeGroup.RegisterGroup($"PvPAdventure:AnyPlanteraPrimaryExclude{itemID}", group); + } + } + } + + public class AnyDuke1 : ModSystem + { + public static RecipeGroup AnyDukePrimary; + public static int[] PrimaryItems => new int[] { + ItemID.DukeFishronMasterTrophy, + ItemID.RazorbladeTyphoon, + ItemID.BubbleGun, + ItemID.Flairon, + ItemID.Tsunami, + ItemID.TempestStaff, + }; + + public override void AddRecipeGroups() + { + // Main group with trophy as first item (for icon) + AnyDukePrimary = new RecipeGroup(() => Language.GetTextValue("Any Duke Primary"), PrimaryItems); + RecipeGroup.RegisterGroup("PvPAdventure:AnyDukePrimary", AnyDukePrimary); + + // Create exclude subgroups while maintaining icon as first item + foreach (int itemID in PrimaryItems.Where(id => id != ItemID.DukeFishronMasterTrophy)) + { + var validItems = PrimaryItems + .Where(id => id != itemID && id != ItemID.DukeFishronMasterTrophy) + .Prepend(ItemID.DukeFishronMasterTrophy) // Keep item first for icon + .ToArray(); + + RecipeGroup group = new RecipeGroup( + () => Language.GetTextValue("Any Duke Primary"), + validItems + ); + RecipeGroup.RegisterGroup($"PvPAdventure:AnyDukePrimaryExclude{itemID}", group); + } + } + } + + public class AnyEmpress1 : ModSystem + { + public static RecipeGroup AnyEmpressPrimary; + public static int[] PrimaryItems => new int[] { + ItemID.FairyQueenMasterTrophy, + ItemID.FairyQueenMagicItem, + ItemID.FairyQueenRangedItem, + ItemID.PiercingStarlight, + ItemID.RainbowWhip, + ItemID.EmpressBlade, + }; + + public override void AddRecipeGroups() + { + // Main group with trophy as first item (for icon) + AnyEmpressPrimary = new RecipeGroup(() => Language.GetTextValue("Any Empress Primary"), PrimaryItems); + RecipeGroup.RegisterGroup("PvPAdventure:AnyEmpressPrimary", AnyEmpressPrimary); + + // Create exclude subgroups while maintaining icon as first item + foreach (int itemID in PrimaryItems.Where(id => id != ItemID.FairyQueenMasterTrophy)) + { + var validItems = PrimaryItems + .Where(id => id != itemID && id != ItemID.FairyQueenMasterTrophy) + .Prepend(ItemID.FairyQueenMasterTrophy) // Keep item first for icon + .ToArray(); + + RecipeGroup group = new RecipeGroup( + () => Language.GetTextValue("Any Empress Primary"), + validItems + ); + RecipeGroup.RegisterGroup($"PvPAdventure:AnyEmpressPrimaryExclude{itemID}", group); + } + } + } + + public class AnyWall1 : ModSystem + { + public static RecipeGroup AnyWallPrimary; + public static int[] PrimaryItems => new int[] { + ItemID.WallofFleshMasterTrophy, + ItemID.FireWhip, + ItemID.ClockworkAssaultRifle, + ItemID.BreakerBlade, + ItemID.LaserRifle, + }; + + public override void AddRecipeGroups() + { + // Main group with trophy as first item (for icon) + AnyWallPrimary = new RecipeGroup(() => Language.GetTextValue("Any Wall of Flesh Primary"), PrimaryItems); + RecipeGroup.RegisterGroup("PvPAdventure:AnyWallPrimary", AnyWallPrimary); + + // Create exclude subgroups while maintaining icon as first item + foreach (int itemID in PrimaryItems.Where(id => id != ItemID.WallofFleshMasterTrophy)) + { + var validItems = PrimaryItems + .Where(id => id != itemID && id != ItemID.WallofFleshMasterTrophy) + .Prepend(ItemID.WallofFleshMasterTrophy) // Keep item first for icon + .ToArray(); + + RecipeGroup group = new RecipeGroup( + () => Language.GetTextValue("Any Wall of Flesh Primary"), + validItems + ); + RecipeGroup.RegisterGroup($"PvPAdventure:AnyWallPrimaryExclude{itemID}", group); + } + } + } + + public class AnySaucer1 : ModSystem + { + public static RecipeGroup AnySaucerPrimary; + public static int[] PrimaryItems => new int[] { + ItemID.UFOMasterTrophy, + ItemID.XenoStaff, + ItemID.LaserMachinegun, + ItemID.InfluxWaver, + ItemID.ElectrosphereLauncher, + ItemID.Xenopopper, + }; + + public override void AddRecipeGroups() + { + // Main group with trophy as first item (for icon) + AnySaucerPrimary = new RecipeGroup(() => Language.GetTextValue("Any Saucer Primary"), PrimaryItems); + RecipeGroup.RegisterGroup("PvPAdventure:AnySaucerPrimary", AnySaucerPrimary); + + // Create exclude subgroups while maintaining icon as first item + foreach (int itemID in PrimaryItems.Where(id => id != ItemID.UFOMasterTrophy)) + { + var validItems = PrimaryItems + .Where(id => id != itemID && id != ItemID.UFOMasterTrophy) + .Prepend(ItemID.UFOMasterTrophy) // Keep item first for icon + .ToArray(); + + RecipeGroup group = new RecipeGroup( + () => Language.GetTextValue("Any Saucer Primary"), + validItems + ); + RecipeGroup.RegisterGroup($"PvPAdventure:AnySaucerPrimaryExclude{itemID}", group); + } + } + } + + public class RecipeSystem : ModSystem + { + public override void AddRecipes() + { + var shimmerCondition = new Condition( + Language.GetText("Mods.PvPAdventure.Conditions.NearShimmer"), + () => Main.LocalPlayer.adjShimmer + ); + + // Primary recipes (trophy remains icon) + foreach (int itemID in AnyGolem1.PrimaryItems.Where(id => id != ItemID.GolemMasterTrophy)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnyGolemPrimaryExclude{itemID}", 3) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } + + // Secondary recipes (boss bag remains icon) + foreach (int itemID in AnyGolem2.SecondaryItems.Where(id => id != ItemID.GolemBossBag)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnyGolemSecondaryExclude{itemID}", 3) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } + + // Primary QS recipes (Relic remains icon) + foreach (int itemID in AnyQueenSlime1.PrimaryItems.Where(id => id != ItemID.QueenSlimeMasterTrophy)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnyQueenSlimePrimaryExclude{itemID}", 3) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } + + // Primary Plantera recipes (Relic remains icon) + foreach (int itemID in AnyPlantera1.PrimaryItems.Where(id => id != ItemID.PlanteraMasterTrophy)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnyPlanteraPrimaryExclude{itemID}", 4) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } + + // Primary Duke recipes (Relic remains icon) + foreach (int itemID in AnyDuke1.PrimaryItems.Where(id => id != ItemID.DukeFishronMasterTrophy)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnyDukePrimaryExclude{itemID}", 3) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } + + // Primary Empress recipes (Relic remains icon) + foreach (int itemID in AnyEmpress1.PrimaryItems.Where(id => id != ItemID.FairyQueenMasterTrophy)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnyEmpressPrimaryExclude{itemID}", 2) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } + + // Primary Wall recipes (Relic remains icon) + foreach (int itemID in AnyWall1.PrimaryItems.Where(id => id != ItemID.WallofFleshMasterTrophy)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnyWallPrimaryExclude{itemID}", 2) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } + + // Primary UFO recipes (Relic remains icon) + foreach (int itemID in AnySaucer1.PrimaryItems.Where(id => id != ItemID.UFOMasterTrophy)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnySaucerPrimaryExclude{itemID}", 3) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } + } + } } \ No newline at end of file From 00b1bbd9cbb61072002eddc9536e93d5047c4ec0 Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Fri, 23 May 2025 20:26:27 -0700 Subject: [PATCH 07/43] AdventureItem.cs: No Underground QS --- AdventureItem.cs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/AdventureItem.cs b/AdventureItem.cs index 8ba468ab..4a8a36f8 100644 --- a/AdventureItem.cs +++ b/AdventureItem.cs @@ -26,6 +26,30 @@ public override void SetDefaults(Item item) } } } + public class GelatinCrystalRestriction : GlobalItem + { + public override bool CanUseItem(Item item, Player player) + { + if (item.type == ItemID.QueenSlimeCrystal) + { + bool isUnderground = player.position.Y > Main.worldSurface * 16; + bool inUndergroundHallow = isUnderground && player.ZoneHallow; + + if (inUndergroundHallow) + { + Main.NewText("Queen Slime refuses to emerge in the corrupted crystals here!", 255, 50, 50); + return false; + } + + // Still block summon in other underground areas but without message + if (isUnderground) + { + return false; + } + } + return base.CanUseItem(item, player); + } + } public override void SetDefaults(Item item) { From 2a25d027b6913f6dcd0fda7d363937e05e848063 Mon Sep 17 00:00:00 2001 From: EJCrispy Date: Mon, 26 May 2025 15:18:39 -0700 Subject: [PATCH 08/43] Makes first wof drop 2 emblems --- AdventureDropDatabase.cs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/AdventureDropDatabase.cs b/AdventureDropDatabase.cs index 5f90b018..a5808956 100644 --- a/AdventureDropDatabase.cs +++ b/AdventureDropDatabase.cs @@ -37,7 +37,12 @@ private static void ModifyDropRate(IItemDropRule rule, int type, int numerator, foreach (var ruleChainAttempt in rule.ChainedRules) ModifyDropRate(ruleChainAttempt.RuleToChain, type, numerator, denominator); } - + public class NotInHardmodeCondition : IItemDropRuleCondition + { + public bool CanDrop(DropAttemptInfo info) => !Main.hardMode; + public bool CanShowItemDropInUI() => true; + public string GetConditionDescription() => "Drops in pre-Hardmode"; + } public static void ModifyNPCLoot(NPC npc, NPCLoot npcLoot) { var drops = npcLoot.Get(); @@ -272,6 +277,16 @@ public static void ModifyNPCLoot(NPC npc, NPCLoot npcLoot) foreach (var drop in drops) ModifyDropRate(drop, ItemID.ShadowJoustingLance, 1, 12); break; + + case NPCID.WallofFlesh: + npcLoot.Add(new LeadingConditionRule(new NotInHardmodeCondition())) + .OnSuccess(ItemDropRule.OneFromOptions(1, + ItemID.SummonerEmblem, + ItemID.RangerEmblem, + ItemID.WarriorEmblem, + ItemID.SorcererEmblem + )); + break; } } } \ No newline at end of file From 2eb139331705cc76504d62194c51c21fcfc1e865 Mon Sep 17 00:00:00 2001 From: EJCrispy Date: Mon, 26 May 2025 15:36:52 -0700 Subject: [PATCH 09/43] Updating this to account for Biome mimics --- System/RecipeManager.cs | 89 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/System/RecipeManager.cs b/System/RecipeManager.cs index a42430b1..e8e4cb26 100644 --- a/System/RecipeManager.cs +++ b/System/RecipeManager.cs @@ -410,6 +410,75 @@ public override void AddRecipeGroups() } } + public class AnyCorruptionMimic1 : ModSystem + { + public static RecipeGroup AnyCorruptionMimicPrimary; + public static int[] PrimaryItems => new int[] { + ItemID.Fake_CorruptionChest, + ItemID.PutridScent, + ItemID.DartRifle, + ItemID.ClingerStaff, + ItemID.ChainGuillotines, + ItemID.WormHook, + }; + + public override void AddRecipeGroups() + { + // Main group with trophy as first item (for icon) + AnyCorruptionMimicPrimary = new RecipeGroup(() => Language.GetTextValue("Any Corrupt Mimic Primary"), PrimaryItems); + RecipeGroup.RegisterGroup("PvPAdventure:AnyCorruptionMimicPrimary", AnyCorruptionMimicPrimary); + + // Create exclude subgroups while maintaining icon as first item + foreach (int itemID in PrimaryItems.Where(id => id != ItemID.Fake_CorruptionChest)) + { + var validItems = PrimaryItems + .Where(id => id != itemID && id != ItemID.Fake_CorruptionChest) + .Prepend(ItemID.Fake_CorruptionChest) // Keep item first for icon + .ToArray(); + + RecipeGroup group = new RecipeGroup( + () => Language.GetTextValue("Any Corrupt Mimic Primary"), + validItems + ); + RecipeGroup.RegisterGroup($"PvPAdventure:AnyCorruptionMimicPrimaryExclude{itemID}", group); + } + } + } + + public class AnyHallowedMimic1 : ModSystem + { + public static RecipeGroup AnyHallowedMimicPrimary; + public static int[] PrimaryItems => new int[] { + ItemID.Fake_HallowedChest, + ItemID.DaedalusStormbow, + ItemID.CrystalVileShard, + ItemID.FlyingKnife, + ItemID.IlluminantHook, + }; + + public override void AddRecipeGroups() + { + // Main group with trophy as first item (for icon) + AnyHallowedMimicPrimary = new RecipeGroup(() => Language.GetTextValue("Any Hallowed Mimic Primary"), PrimaryItems); + RecipeGroup.RegisterGroup("PvPAdventure:AnyHallowedMimicPrimary", AnyHallowedMimicPrimary); + + // Create exclude subgroups while maintaining icon as first item + foreach (int itemID in PrimaryItems.Where(id => id != ItemID.Fake_HallowedChest)) + { + var validItems = PrimaryItems + .Where(id => id != itemID && id != ItemID.Fake_HallowedChest) + .Prepend(ItemID.Fake_HallowedChest) // Keep item first for icon + .ToArray(); + + RecipeGroup group = new RecipeGroup( + () => Language.GetTextValue("Any Hallowed Mimic Primary"), + validItems + ); + RecipeGroup.RegisterGroup($"PvPAdventure:AnyHallowedMimicPrimaryExclude{itemID}", group); + } + } + } + public class RecipeSystem : ModSystem { public override void AddRecipes() @@ -498,6 +567,26 @@ public override void AddRecipes() .DisableDecraft() .Register(); } + + // Primary Corro mimic recipes (Relic remains icon) + foreach (int itemID in AnyCorruptionMimic1.PrimaryItems.Where(id => id != ItemID.Fake_CorruptionChest)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnyCorruptionMimicPrimaryExclude{itemID}", 3) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } + + // Primary Hallow mimic recipes (Relic remains icon) + foreach (int itemID in AnyHallowedMimic1.PrimaryItems.Where(id => id != ItemID.Fake_HallowedChest)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnyHallowedMimicPrimaryExclude{itemID}", 2) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } } } } \ No newline at end of file From ece09e26e4cf26b5e21854a2846056897bf89276 Mon Sep 17 00:00:00 2001 From: EJCrispy Date: Mon, 26 May 2025 16:41:33 -0700 Subject: [PATCH 10/43] Makes all summons* dissapear when not in invetory to prevent sharing --- AdventureProjectile.cs | 294 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 294 insertions(+) diff --git a/AdventureProjectile.cs b/AdventureProjectile.cs index 5385b1be..3dc32d3d 100644 --- a/AdventureProjectile.cs +++ b/AdventureProjectile.cs @@ -88,6 +88,7 @@ public override void PostAI(Projectile projectile) projectile.netSpam = 0; } + private void OnProjectileghostHeal(On_Projectile.orig_ghostHeal orig, Projectile self, int dmg, Vector2 position, Entity victim) { @@ -152,4 +153,297 @@ private void OnProjectileghostHeal(On_Projectile.orig_ghostHeal orig, Projectile ); } } + + public class SpiderStaffGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.VenomSpider || + entity.type == ProjectileID.JumperSpider || // Note: Fix typo here + entity.type == ProjectileID.DangerousSpider; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.SpiderStaff); + bool mouseHasStaff = owner.inventory[58].type == ItemID.SpiderStaff && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class ClingerStaffGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.ClingerStaff; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.ClingerStaff); + bool mouseHasStaff = owner.inventory[58].type == ItemID.ClingerStaff && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class QueenSpiderStaffGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.SpiderHiver; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.QueenSpiderStaff); + bool mouseHasStaff = owner.inventory[58].type == ItemID.QueenSpiderStaff && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class NimbusRodGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.RainNimbus; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.NimbusRod); + bool mouseHasStaff = owner.inventory[58].type == ItemID.NimbusRod && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class XenoStaffGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.UFOMinion; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.XenoStaff); + bool mouseHasStaff = owner.inventory[58].type == ItemID.XenoStaff && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class BladeStaffGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.Smolstar; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.Smolstar); + bool mouseHasStaff = owner.inventory[58].type == ItemID.Smolstar && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class HornetStaffGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.Hornet; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.HornetStaff); + bool mouseHasStaff = owner.inventory[58].type == ItemID.HornetStaff && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class ImpStaffGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.FlyingImp; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.ImpStaff); + bool mouseHasStaff = owner.inventory[58].type == ItemID.ImpStaff && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class PygmyStaffGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.Pygmy || + entity.type == ProjectileID.Pygmy2 || + entity.type == ProjectileID.Pygmy3 || + entity.type == ProjectileID.Pygmy4; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.PygmyStaff); + bool mouseHasStaff = owner.inventory[58].type == ItemID.PygmyStaff && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class DeadlySphereGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.DeadlySphere; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.DeadlySphereStaff); + bool mouseHasStaff = owner.inventory[58].type == ItemID.DeadlySphereStaff && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class PirateStaffGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.OneEyedPirate || + entity.type == ProjectileID.SoulscourgePirate || + entity.type == ProjectileID.PirateCaptain; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.PirateStaff); + bool mouseHasStaff = owner.inventory[58].type == ItemID.PirateStaff && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class TempestStaffGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.Tempest; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.TempestStaff); + bool mouseHasStaff = owner.inventory[58].type == ItemID.TempestStaff && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class TerraprismaGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.EmpressBlade; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.EmpressBlade); + bool mouseHasStaff = owner.inventory[58].type == ItemID.EmpressBlade && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } } \ No newline at end of file From 3bd2f22866bd5640e9d4d171ed792dcd2ef3da45 Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Wed, 28 May 2025 17:27:23 -0700 Subject: [PATCH 11/43] skeletron hand garenteed --- AdventureDropDatabase.cs | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/AdventureDropDatabase.cs b/AdventureDropDatabase.cs index a5808956..0e969ca2 100644 --- a/AdventureDropDatabase.cs +++ b/AdventureDropDatabase.cs @@ -37,12 +37,7 @@ private static void ModifyDropRate(IItemDropRule rule, int type, int numerator, foreach (var ruleChainAttempt in rule.ChainedRules) ModifyDropRate(ruleChainAttempt.RuleToChain, type, numerator, denominator); } - public class NotInHardmodeCondition : IItemDropRuleCondition - { - public bool CanDrop(DropAttemptInfo info) => !Main.hardMode; - public bool CanShowItemDropInUI() => true; - public string GetConditionDescription() => "Drops in pre-Hardmode"; - } + public static void ModifyNPCLoot(NPC npc, NPCLoot npcLoot) { var drops = npcLoot.Get(); @@ -270,7 +265,7 @@ public static void ModifyNPCLoot(NPC npc, NPCLoot npcLoot) case NPCID.GiantTortoise: foreach (var drop in drops) - ModifyDropRate(drop, ItemID.TurtleShell, 1, 5); + ModifyDropRate(drop, ItemID.TurtleShell, 1, 4); break; case NPCID.GiantCursedSkull: @@ -278,15 +273,7 @@ public static void ModifyNPCLoot(NPC npc, NPCLoot npcLoot) ModifyDropRate(drop, ItemID.ShadowJoustingLance, 1, 12); break; - case NPCID.WallofFlesh: - npcLoot.Add(new LeadingConditionRule(new NotInHardmodeCondition())) - .OnSuccess(ItemDropRule.OneFromOptions(1, - ItemID.SummonerEmblem, - ItemID.RangerEmblem, - ItemID.WarriorEmblem, - ItemID.SorcererEmblem - )); - break; + } } } \ No newline at end of file From 8d62979c342b83273f1ebd81864d9a7990370ac3 Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Wed, 28 May 2025 17:27:45 -0700 Subject: [PATCH 12/43] no empress underground --- AdventureItem.cs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/AdventureItem.cs b/AdventureItem.cs index 4a8a36f8..4afe3251 100644 --- a/AdventureItem.cs +++ b/AdventureItem.cs @@ -50,6 +50,26 @@ public override bool CanUseItem(Item item, Player player) return base.CanUseItem(item, player); } } + public class PrismaticLacewingRestriction : GlobalItem + { + public override bool CanUseItem(Item item, Player player) + { + // Target Prismatic Lacewing (Empress summon item) + if (item.type == ItemID.EmpressButterfly) + { + // Check if player is below surface level + bool isUnderground = player.position.Y > Main.worldSurface * 16; + bool inUndergroundHallow = isUnderground && player.ZoneHallow; + + if (isUnderground) + { + Main.NewText("The sacred light refuses to manifest in these corrupted depths!", 200, 150, 255); + return false; + } + } + return base.CanUseItem(item, player); + } + } public override void SetDefaults(Item item) { From 2922e72d6c5f4e51ed56eb0bb71d256aa09568b3 Mon Sep 17 00:00:00 2001 From: EJCrispy Date: Wed, 28 May 2025 16:50:11 -0700 Subject: [PATCH 13/43] Makes the spac and claff projectiles disappear on dead --- AdventureProjectile.cs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/AdventureProjectile.cs b/AdventureProjectile.cs index 3dc32d3d..25d174c8 100644 --- a/AdventureProjectile.cs +++ b/AdventureProjectile.cs @@ -446,4 +446,32 @@ public override void PostAI(Projectile projectile) } } } + + public class DeadProjectileList : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.ClingerStaff || + entity.type == ProjectileID.SporeTrap || + entity.type == ProjectileID.SporeTrap2 || + entity.type == ProjectileID.SporeGas || + entity.type == ProjectileID.SporeGas2 || + entity.type == ProjectileID.SporeGas3; + } + + public override void PostAI(Projectile projectile) + { + // Ensure owner index is valid + if (projectile.owner < 0 || projectile.owner >= Main.maxPlayers) + return; + + Player owner = Main.player[projectile.owner]; + + // Kill projectile if owner is dead or inactive + if (owner.dead || !owner.active) + { + projectile.Kill(); + } + } + } } \ No newline at end of file From 4a6479d0c1c0a082cfc4c5d17ff833a527fb8bd8 Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Sat, 31 May 2025 11:12:40 -0700 Subject: [PATCH 14/43] updated shiny stone cooldown bebuff icon --- Assets/Buff/ShinyStoneHotswap.png | Bin 1253 -> 321 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Assets/Buff/ShinyStoneHotswap.png b/Assets/Buff/ShinyStoneHotswap.png index e18d0f432eb900f533369f1c190e7a5f9748976e..ec96c433ac82733ea81160e81a711ed7df61bde0 100644 GIT binary patch literal 321 zcmV-H0lxl;P)SiYTGa33}GX0QlQV|FE@p$*QGra%+;&cVoTE-Os007lVL_t(Y$L-TG z3c@fH2H-5>+|dgtuI){{fs3P)h{tg2QJlPtV>c(IAQ4~lXZZC|Ym-#Lz(0iay$@be zW8Pfb+1$R03B962XlTp4NmVv+`(R*nNCjM~)l||O{6oDVZpctwOeDVp0q~%M0MyG| z^1aa0$mj=U;I>~&I)l-nMK-pNT+cfR3ebQd4M08m4G&!og~UTNs-rOy?D=`0HY3UK z5Q8XS&_kaB$sisbE|ozJ&QaI-j)Ft{tg&YpKQ6x08grcolSA4}`CLm|T{7qnTPV}6 TDPy{T00000NkvXXu0mjftx<>R literal 1253 zcmV#dBtE(XoR>JmOeS?cH=`Hg4jzO=bJh z?B_rn006p@gYpG5?SKwYXJURPXxb)@&#m4FfrZGs-|$D28#KBW1${n7XN$SKGy(ZQ z)jr9MqB1(uG7}#cgzxi8ZQVAlSOMdVz(5g*83v0fg*7Okg1s!t$>>~+$Xl#!kmm)& z+;%L>ZQSRv1c*SBz!E0$IxZcCRMO~@i!dzO3&`S^!g$`5jmBObzDX(<FAM11Qy*{H^kx^&K`uZr;>zrYAA%|0-b$ym=VO%1_k z7l}ksbp6=SIkOMsAX4TOewogFITDMCJ<h#G7WD19z z!ZHfDQA~$|ZnV?s%dd;jp)MnEwGjAue#ujrPQ9saQ1*WNWCU^$DI*F`e44hNtG8F% z>KA@2l=TAmof9LFDI8J?<54y}(vL^QIa*tN?u6ss;{}^d*oDsNa9f@A{N_W(M&aC? zDj0z!&qQis0)aXw(qR`mmzvmeHgK{JWiFmeD#CQ#pF9|Mj%tTj413T zO}kTh(VEg;75R!Gl#29>4^LredK%mUYThZpVt_#W*KBmrqvvh(8Ieg*p>v|_RoC>q zk58mIh^%o6BQ@&C3p*G%yf|l_6sed($4p;7GNC>rkSQE;3ez(_Ox5UlpqovYM3!pO zJtMlHytnl6HzWKzkyS?E(CuBevXsaDlFSwW;N+<~m zm$T!h58j4=@sC$irCCdxGx|40s=y zU17W@8E>n#-RP|;g*W|#RmR?p=k4>X`A(_Ufe{$255)hSfQ3(ER#pB30%Ga Date: Sat, 31 May 2025 20:49:43 -0700 Subject: [PATCH 15/43] added config link --- PvPAdventure_AdventureConfig.json | 1176 +++++++++++++++++++++++++++++ 1 file changed, 1176 insertions(+) create mode 100644 PvPAdventure_AdventureConfig.json diff --git a/PvPAdventure_AdventureConfig.json b/PvPAdventure_AdventureConfig.json new file mode 100644 index 00000000..ad383ddc --- /dev/null +++ b/PvPAdventure_AdventureConfig.json @@ -0,0 +1,1176 @@ +{ + "Points": { + "Npc": { + "Terraria/Golem": { + "First": 1, + "Additional": 1, + "Repeatable": true + }, + "Terraria/CultistBoss": { + "First": 4, + "Additional": 4, + "Repeatable": true + }, + "Terraria/DukeFishron": { + "First": 3, + "Additional": 3, + "Repeatable": true + }, + "Terraria/HallowBoss": { + "First": 4, + "Additional": 4, + "Repeatable": true + }, + "Terraria/BigMimicCorruption": { + "First": 1, + "Additional": 1 + }, + "Terraria/BigMimicHallow": { + "First": 1, + "Additional": 1 + }, + "Terraria/BigMimicCrimson": { + "First": 1, + "Additional": 1 + }, + "Terraria/DD2Betsy": { + "First": 10, + "Additional": 8, + "Repeatable": true + }, + "Terraria/EyeofCthulhu": { + "First": 1, + "Additional": 1 + }, + "Terraria/SkeletronHead": { + "First": 1, + "Additional": 1 + }, + "Terraria/KingSlime": { + "First": 1, + "Additional": 1 + }, + "Terraria/MartianSaucerCore": { + "First": 1, + "Additional": 1, + "Repeatable": true + } + }, + "Boss": { + "First": 2, + "Additional": 2 + }, + "PlayerKill": 1 + }, + "Bounties": [ + { + "Items": [ + { + "Item": { + "Name": "GoldWorm", + "DisplayName": "Gold Worm" + }, + "Stack": 3 + } + ], + "Conditions": { + "WorldProgression": 1 + } + }, + { + "Items": [ + { + "Item": { + "Name": "HermesBoots", + "DisplayName": "Hermes Boots" + }, + "Stack": 1 + }, + { + "Item": { + "Name": "CloudinaBottle", + "DisplayName": "Cloud in a Bottle" + }, + "Stack": 1 + }, + { + "Item": { + "Name": "SapphireHook", + "DisplayName": "Sapphire Hook" + }, + "Stack": 1 + } + ], + "Conditions": {} + }, + { + "Items": [ + { + "Item": { + "Name": "LifeCrystal", + "DisplayName": "Life Crystal" + }, + "Stack": 3 + } + ], + "Conditions": {} + }, + { + "Items": [ + { + "Item": { + "Name": "WormholePotion", + "DisplayName": "Wormhole Potion" + }, + "Stack": 3 + } + ], + "Conditions": {} + }, + { + "Items": [ + { + "Item": { + "Name": "GoldWorm", + "DisplayName": "Gold Worm" + }, + "Stack": 5 + } + ], + "Conditions": { + "WorldProgression": 2 + } + }, + { + "Items": [ + { + "Item": { + "Name": "GuideVoodooDoll", + "DisplayName": "Guide Voodoo Doll" + }, + "Stack": 1 + } + ], + "Conditions": { + "WorldProgression": 2 + } + }, + { + "Items": [ + { + "Item": { + "Name": "Hellforge", + "DisplayName": "Hellforge" + }, + "Prefix": { + "Name": "Precise", + "DisplayName": "Precise" + }, + "Stack": 1 + } + ], + "Conditions": { + "WorldProgression": 2 + } + }, + { + "Items": [ + { + "Item": { + "Name": "FallenStar", + "DisplayName": "Fallen Star" + }, + "Stack": 20 + } + ], + "Conditions": { + "WorldProgression": 2 + } + }, + { + "Items": [ + { + "Item": { + "Name": "SoulofFlight", + "DisplayName": "Soul of Flight" + }, + "Stack": 18 + }, + { + "Item": { + "Name": "Feather", + "DisplayName": "Feather" + }, + "Stack": 20 + } + ], + "Conditions": { + "WorldProgression": 2 + } + }, + { + "Items": [ + { + "Item": { + "Name": "SoulofLight", + "DisplayName": "Soul of Light" + }, + "Stack": 6 + }, + { + "Item": { + "Name": "CrystalShard", + "DisplayName": "Crystal Shard" + }, + "Stack": 40 + }, + { + "Item": { + "Name": "LightShard", + "DisplayName": "Light Shard" + }, + "Stack": 2 + } + ], + "Conditions": { + "WorldProgression": 2 + } + }, + { + "Items": [ + { + "Item": { + "Name": "SoulofNight", + "DisplayName": "Soul of Night" + }, + "Stack": 6 + }, + { + "Item": { + "Name": "CursedFlame", + "DisplayName": "Cursed Flame" + }, + "Stack": 40 + }, + { + "Item": { + "Name": "DarkShard", + "DisplayName": "Dark Shard" + }, + "Stack": 2 + } + ], + "Conditions": { + "WorldProgression": 2 + } + }, + { + "Items": [ + { + "Item": { + "Name": "PixieDust", + "DisplayName": "Pixie Dust" + }, + "Stack": 90 + }, + { + "Item": { + "Name": "UnicornHorn", + "DisplayName": "Unicorn Horn" + }, + "Stack": 2 + } + ], + "Conditions": { + "WorldProgression": 2 + } + }, + { + "Items": [ + { + "Item": { + "Name": "Ichor", + "DisplayName": "Ichor" + }, + "Stack": 40 + } + ], + "Conditions": { + "WorldProgression": 2 + } + }, + { + "Items": [ + { + "Item": { + "Name": "TurtleShell", + "DisplayName": "Turtle Shell" + }, + "Stack": 1 + } + ], + "Conditions": { + "WorldProgression": 2 + } + }, + { + "Items": [ + { + "Item": { + "Name": "SoulofSight", + "DisplayName": "Soul of Sight" + }, + "Stack": 6 + } + ], + "Conditions": { + "WorldProgression": 2, + "CollectedAllMechanicalBossSouls": true + } + }, + { + "Items": [ + { + "Item": { + "Name": "SoulofMight", + "DisplayName": "Soul of Might" + }, + "Stack": 26 + } + ], + "Conditions": { + "WorldProgression": 2, + "CollectedAllMechanicalBossSouls": true + } + }, + { + "Items": [ + { + "Item": { + "Name": "SoulofFright", + "DisplayName": "Soul of Fright" + }, + "Stack": 46 + } + ], + "Conditions": { + "WorldProgression": 2, + "CollectedAllMechanicalBossSouls": true + } + }, + { + "Items": [ + { + "Item": { + "Name": "LihzahrdPowerCell", + "DisplayName": "Lihzahrd Power Cell" + }, + "Prefix": { + "Name": "Powerful", + "DisplayName": "Powerful" + }, + "Stack": 1 + } + ], + "Conditions": { + "WorldProgression": 2, + "PlanteraDefeated": true + } + }, + { + "Items": [ + { + "Item": { + "Name": "LifeFruit", + "DisplayName": "Life Fruit" + }, + "Stack": 4 + } + ], + "Conditions": { + "WorldProgression": 2, + "SkeletronPrimeDefeated": true, + "TwinsDefeated": true, + "DestroyerDefeated": true + } + }, + { + "Items": [ + { + "Item": { + "Name": "LockBox", + "DisplayName": "Golden Lock Box" + }, + "Stack": 1 + }, + { + "Item": { + "Name": "ObsidianLockbox", + "DisplayName": "Obsidian Lock Box" + }, + "Stack": 1 + } + ], + "Conditions": { + "SkeletronDefeated": true + } + }, + { + "Items": [ + { + "Item": { + "Name": "RottenChunk", + "DisplayName": "Rotten Chunk" + }, + "Stack": 20 + }, + { + "Item": { + "Name": "VileMushroom", + "DisplayName": "Vile Mushroom" + }, + "Stack": 5 + }, + { + "Item": { + "Name": "Lens", + "DisplayName": "Lens" + }, + "Stack": 3 + }, + { + "Item": { + "Name": "Bone", + "DisplayName": "Bone" + }, + "Stack": 30 + }, + { + "Item": { + "Name": "IronBar", + "DisplayName": "Iron Bar" + }, + "Stack": 15 + } + ], + "Conditions": { + "WorldProgression": 2, + "SkeletronDefeated": true + } + }, + { + "Items": [ + { + "Item": { + "Name": "BottledWater", + "DisplayName": "Bottled Water" + }, + "Stack": 30 + }, + { + "Item": { + "Name": "Blinkroot", + "DisplayName": "Blinkroot" + }, + "Stack": 6 + }, + { + "Item": { + "Name": "Daybloom", + "DisplayName": "Daybloom" + }, + "Stack": 8 + }, + { + "Item": { + "Name": "Moonglow", + "DisplayName": "Moonglow" + }, + "Stack": 4 + }, + { + "Item": { + "Name": "Deathweed", + "DisplayName": "Deathweed" + }, + "Stack": 1 + }, + { + "Item": { + "Name": "Waterleaf", + "DisplayName": "Waterleaf" + }, + "Stack": 4 + }, + { + "Item": { + "Name": "AntlionMandible", + "DisplayName": "Antlion Mandible" + }, + "Stack": 4 + }, + { + "Item": { + "Name": "SharkFin", + "DisplayName": "Shark Fin" + }, + "Stack": 4 + } + ], + "Conditions": { + "WorldProgression": 2 + } + }, + { + "Items": [ + { + "Item": { + "Name": "Blinkroot", + "DisplayName": "Blinkroot" + }, + "Stack": 3 + }, + { + "Item": { + "Name": "Daybloom", + "DisplayName": "Daybloom" + }, + "Stack": 4 + }, + { + "Item": { + "Name": "Moonglow", + "DisplayName": "Moonglow" + }, + "Stack": 1 + }, + { + "Item": { + "Name": "Deathweed", + "DisplayName": "Deathweed" + }, + "Stack": 1 + }, + { + "Item": { + "Name": "Shiverthorn", + "DisplayName": "Shiverthorn" + }, + "Stack": 2 + }, + { + "Item": { + "Name": "AntlionMandible", + "DisplayName": "Antlion Mandible" + }, + "Stack": 2 + }, + { + "Item": { + "Name": "BottledWater", + "DisplayName": "Bottled Water" + }, + "Stack": 15 + }, + { + "Item": { + "Name": "Waterleaf", + "DisplayName": "Waterleaf" + }, + "Stack": 1 + } + ], + "Conditions": { + "WorldProgression": 1 + } + }, + { + "Items": [ + { + "Item": { + "Name": "TruffleWorm", + "DisplayName": "Truffle Worm" + }, + "Prefix": { + "Name": "Nimble", + "DisplayName": "Nimble" + }, + "Stack": 1 + } + ], + "Conditions": { + "WorldProgression": 2, + "GolemDefeated": true + } + }, + { + "Items": [ + { + "Item": { + "Name": "QueenSlimeCrystal", + "DisplayName": "Gelatin Crystal" + }, + "Stack": 2 + } + ], + "Conditions": { + "WorldProgression": 2 + } + } + ], + "Combat": { + "MeleeInvincibilityFrames": 0, + "PlayerDamageBalance": { + "ItemDamageMultipliers": { + "Terraria/Tsunami": 1.0, + "Terraria/StaffofEarth": 0.79999995, + "Terraria/ChlorophyteShotbow": 1.2, + "Terraria/FairyQueenRangedItem": 0.84999996, + "Terraria/MaceWhip": 0.55, + "Terraria/HeatRay": 0.5, + "Terraria/SniperRifle": 0.55, + "Terraria/ShadowbeamStaff": 0.6, + "Terraria/ToxicFlask": 1.0, + "Terraria/LaserMachinegun": 0.79999995, + "Terraria/Xenopopper": 1.75, + "Terraria/ProximityMineLauncher": 0.11, + "Terraria/ChargedBlasterCannon": 0.0, + "Terraria/TheEyeOfCthulhu": 0.7, + "Terraria/Kraken": 0.75, + "Terraria/VenusMagnum": 0.84999996, + "Terraria/PirateStaff": 0.79999995, + "Terraria/DaedalusStormbow": 0.65, + "Terraria/SoulDrain": 0.0, + "Terraria/MeteorStaff": 0.39999998, + "Terraria/DD2SquireBetsySword": 0.0, + "Terraria/StaffoftheFrostHydra": 0.0, + "Terraria/DD2BallistraTowerT3Popper": 0.0, + "Terraria/DD2BallistraTowerT2Popper": 0.0, + "Terraria/DD2BallistraTowerT1Popper": 0.0, + "Terraria/DD2FlameburstTowerT3Popper": 0.0, + "Terraria/DD2FlameburstTowerT2Popper": 0.0, + "Terraria/DD2FlameburstTowerT1Popper": 0.0, + "Terraria/RainbowRod": 1.0, + "Terraria/TempestStaff": 0.61, + "Terraria/DirtRod": 1000.0, + "Terraria/CursedFlames": 1.0, + "Terraria/FlyingKnife": 0.65, + "Terraria/RainbowWhip": 0.5, + "Terraria/TacticalShotgun": 2.0, + "Terraria/VenomStaff": 3.0, + "Terraria/PearlwoodSword": 1.1, + "Terraria/MagicMissile": 0.85999995, + "Terraria/Gungnir": 1.0, + "Terraria/TrueNightsEdge": 0.91999996, + "Terraria/RocketLauncher": 0.79999995, + "Terraria/OnyxBlaster": 1.5, + "Terraria/ScourgeoftheCorruptor": 0.9 + }, + "ProjectileDamageMultipliers": { + "Terraria/TinyEater": 0.5, + "Terraria/ClusterFragmentsI": 1.0, + "Terraria/ClusterFragmentsII": 0.96, + "Terraria/ClusterSnowmanFragmentsI": 1.0, + "Terraria/ClusterSnowmanFragmentsII": 1.0, + "Terraria/StyngerShrapnel": 1.0, + "Terraria/CrystalShard": 1.0, + "Terraria/TerraBlade2Shot": 0.5, + "Terraria/Starfury": 0.0, + "Terraria/SporeCloud": 1.0, + "Terraria/CursedDartFlame": 1.0 + }, + "ItemFalloff": { + "Terraria/SniperRifle": { + "Coefficient": 0.5, + "Forward": 100.0 + }, + "Terraria/ChlorophyteShotbow": { + "Coefficient": 1.5, + "Forward": 40.0 + }, + "Terraria/TacticalShotgun": { + "Coefficient": 1.75, + "Forward": 25.0 + }, + "Terraria/VenomStaff": { + "Coefficient": 1.7321, + "Forward": 8.95 + }, + "Terraria/OnyxBlaster": { + "Coefficient": 1.5, + "Forward": 25.0 + }, + "Terraria/Xenopopper": { + "Coefficient": 1.5, + "Forward": 25.0 + }, + "Terraria/TrueNightsEdge": { + "Coefficient": 1.75, + "Forward": 20.25 + } + }, + "DefaultFalloff": { + "Coefficient": 1.0, + "Forward": 58.350002 + } + } + }, + "PreventUse": [ + { + "Name": "RecallPotion", + "DisplayName": "Recall Potion" + }, + { + "Name": "TeleportationPotion", + "DisplayName": "Teleportation Potion" + }, + { + "Name": "InvisibilityPotion", + "DisplayName": "Invisibility Potion" + }, + { + "Name": "PotionOfReturn", + "DisplayName": "Potion of Return" + }, + { + "Name": "MagicConch", + "DisplayName": "Magic Conch" + }, + { + "Name": "DemonConch", + "DisplayName": "Demon Conch" + }, + { + "Name": "ChlorophyteArrow", + "DisplayName": "Chlorophyte Arrow" + }, + { + "Name": "StrangeBrew", + "DisplayName": "Strange Brew" + }, + { + "Name": "SoulDrain", + "DisplayName": "Life Drain" + }, + { + "Name": "CosmicCarKey", + "DisplayName": "Cosmic Car Key" + }, + { + "Name": "PumpkinMoonMedallion", + "DisplayName": "Pumpkin Moon Medallion" + }, + { + "Name": "NaughtyPresent", + "DisplayName": "Naughty Present" + }, + { + "Name": "FlaskofNanites", + "DisplayName": "Flask of Nanites" + }, + { + "Name": "BorealWoodHammer", + "DisplayName": "Boreal Wood Hammer" + }, + { + "Name": "BeetleShell", + "DisplayName": "Beetle Shell" + }, + { + "Name": "EmpressButterfly", + "DisplayName": "Prismatic Lacewing" + } + ], + "NpcSpawnAnnouncements": [ + { + "Name": "CultistBoss", + "DisplayName": "Lunatic Cultist" + }, + { + "Name": "RuneWizard", + "DisplayName": "Rune Wizard" + }, + { + "Name": "GoldMouse", + "DisplayName": "Gold Mouse" + }, + { + "Name": "MartianSaucer", + "DisplayName": "Martian Saucer" + }, + { + "Name": "CultistTablet", + "DisplayName": "Mysterious Tablet" + }, + { + "Name": "DoctorBones", + "DisplayName": "Doctor Bones" + }, + { + "Name": "SandElemental", + "DisplayName": "Sand Elemental" + }, + { + "Name": "IceGolem", + "DisplayName": "Ice Golem" + } + ], + "BossInvulnerableProjectiles": [ + { + "Name": "Dynamite", + "DisplayName": "Dynamite" + }, + { + "Name": "StickyDynamite", + "DisplayName": "Sticky Dynamite" + }, + { + "Name": "BouncyDynamite", + "DisplayName": "Bouncy Dynamite" + }, + { + "Name": "Bomb", + "DisplayName": "Bomb" + }, + { + "Name": "StickyBomb", + "DisplayName": "Sticky Bomb" + }, + { + "Name": "BouncyBomb", + "DisplayName": "Bouncy Bomb" + } + ], + "InvasionSizes": { + "1": { + "Value": 250 + }, + "3": { + "Value": 150 + }, + "4": { + "Value": 320 + } + }, + "SpawnImmuneFrames": 90, + "ShareWorldMap": false, + "AllowConfigModification": [ + "168209541136121856" + ], + "RemovePrefixes": true, + "ItemStatistics": { + "Terraria/Tsunami": { + "Damage": { + "Value": 45 + } + }, + "Terraria/Flairon": { + "Damage": { + "Value": 60 + } + }, + "Terraria/BubbleGun": { + "Mana": { + "Value": 10 + } + }, + "Terraria/DaedalusStormbow": { + "Damage": { + "Value": 34 + } + }, + "Terraria/TrueNightsEdge": { + "Damage": { + "Value": 150 + }, + "ShootSpeed": { + "Value": 20.85 + }, + "Scale": { + "Value": 1.2 + } + }, + "Terraria/Jetpack": { + "Value": { + "Value": 1000000 + } + }, + "Terraria/Megashark": { + "Damage": { + "Value": 30 + }, + "UseTime": { + "Value": 8 + }, + "UseAnimation": { + "Value": 8 + } + }, + "Terraria/ClockworkAssaultRifle": { + "UseTime": { + "Value": 10 + }, + "UseAnimation": { + "Value": 40 + } + }, + "Terraria/XenoStaff": { + "Damage": { + "Value": 26 + } + } + }, + "WorldGeneration": { + "PlanteraBulbChanceDenominator": 20, + "ChlorophyteSpreadChanceModifier": 15 + }, + "PreventAutoReuse": [ + { + "Name": "MagicMissile", + "DisplayName": "Magic Missile" + }, + { + "Name": "Flamelash", + "DisplayName": "Flamelash" + }, + { + "Name": "RainbowRod", + "DisplayName": "Rainbow Rod" + } + ], + "NpcBalance": { + "LifeMaxMultipliers": { + "Terraria/SkeletronHead": { + "Value": 1.49 + }, + "Terraria/SkeletronHand": { + "Value": 1.52 + }, + "Terraria/WallofFlesh": { + "Value": 1.49 + }, + "Terraria/Plantera": { + "Value": 1.52 + }, + "Terraria/HallowBoss": { + "Value": 1.49 + }, + "Terraria/Golem": { + "Value": 1.31 + }, + "Terraria/GolemFistLeft": { + "Value": 1.31 + }, + "Terraria/GolemFistRight": { + "Value": 1.31 + }, + "Terraria/CultistBoss": { + "Value": 1.49 + }, + "Terraria/MartianSaucerCore": { + "Value": 1.25 + } + } + }, + "ChestItemReplacements": { + "Terraria/MagicMirror": { + "Items": [ + { + "Item": { + "Name": "HermesBoots", + "DisplayName": "Hermes Boots" + }, + "Stack": 1 + }, + { + "Item": { + "Name": "CloudinaBottle", + "DisplayName": "Cloud in a Bottle" + }, + "Stack": 1 + }, + { + "Item": { + "Name": "Mace", + "DisplayName": "Mace" + }, + "Stack": 1 + }, + { + "Item": { + "Name": "BandofRegeneration", + "DisplayName": "Band of Regeneration" + }, + "Stack": 1 + }, + { + "Item": { + "Name": "ShoeSpikes", + "DisplayName": "Shoe Spikes" + }, + "Stack": 1 + } + ] + }, + "Terraria/PiranhaGun": { + "Items": [ + { + "Item": { + "Name": "VenusMagnum", + "DisplayName": "Venus Magnum" + }, + "Stack": 1 + } + ] + }, + "Terraria/StaffoftheFrostHydra": { + "Items": [ + { + "Item": { + "Name": "FrozenShield", + "DisplayName": "Frozen Shield" + }, + "Stack": 1 + } + ] + }, + "Terraria/LihzahrdPowerCell": { + "Items": [ + { + "Item": { + "Name": "LihzahrdPowerCell", + "DisplayName": "Lihzahrd Power Cell" + }, + "Stack": 2 + } + ] + }, + "Terraria/MagicConch": { + "Items": [ + { + "Item": { + "Name": "AncientChisel", + "DisplayName": "Ancient Chisel" + }, + "Stack": 1 + }, + { + "Item": { + "Name": "SandBoots", + "DisplayName": "Dunerider Boots" + }, + "Stack": 1 + } + ] + }, + "Terraria/Seaweed": { + "Items": [ + { + "Item": { + "Name": "FeralClaws", + "DisplayName": "Feral Claws" + }, + "Stack": 1 + } + ] + }, + "Terraria/Fish": { + "Items": [ + { + "Item": { + "Name": "BlizzardinaBottle", + "DisplayName": "Blizzard in a Bottle" + }, + "Stack": 1 + } + ] + }, + "Terraria/CatBast": { + "Items": [ + { + "Item": { + "Name": "SandstorminaBottle", + "DisplayName": "Sandstorm in a Bottle" + }, + "Stack": 1 + } + ] + }, + "Terraria/Extractinator": { + "Items": [ + { + "Item": { + "Name": "HermesBoots", + "DisplayName": "Hermes Boots" + }, + "Stack": 1 + }, + { + "Item": { + "Name": "CloudinaBottle", + "DisplayName": "Cloud in a Bottle" + }, + "Stack": 1 + }, + { + "Item": { + "Name": "Mace", + "DisplayName": "Mace" + }, + "Stack": 1 + }, + { + "Item": { + "Name": "BandofRegeneration", + "DisplayName": "Band of Regeneration" + }, + "Stack": 1 + } + ] + }, + "Terraria/TeleportationPotion": { + "Items": [ + { + "Item": { + "Name": "ThornsPotion", + "DisplayName": "Thorns Potion" + }, + "Stack": 2 + }, + { + "Item": { + "Name": "WaterWalkingPotion", + "DisplayName": "Water Walking Potion" + }, + "Stack": 2 + }, + { + "Item": { + "Name": "HunterPotion", + "DisplayName": "Hunter Potion" + }, + "Stack": 2 + }, + { + "Item": { + "Name": "TrapsightPotion", + "DisplayName": "Dangersense Potion" + }, + "Stack": 2 + } + ] + }, + "Terraria/PotionOfReturn": { + "Items": [ + { + "Item": { + "Name": "RecallPotion", + "DisplayName": "Recall Potion" + }, + "Stack": 1 + } + ] + } + }, + "MinimumDamageReceivedByPlayersFromPlayer": 5 +} \ No newline at end of file From 119a14276f0922002a51ea65be8c9a05a0429537 Mon Sep 17 00:00:00 2001 From: EJCrispy Date: Sat, 31 May 2025 21:06:10 -0700 Subject: [PATCH 16/43] Spectre Hood setbonus works in pvp! --- AdventureProjectile.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/AdventureProjectile.cs b/AdventureProjectile.cs index 25d174c8..fd1239b0 100644 --- a/AdventureProjectile.cs +++ b/AdventureProjectile.cs @@ -1,10 +1,15 @@ +using System; +using System.Reflection; using Microsoft.Xna.Framework; +using MonoMod.Cil; +using MonoMod.RuntimeDetour; using PvPAdventure.System; using Terraria; using Terraria.DataStructures; using Terraria.Enums; using Terraria.ID; using Terraria.ModLoader; +using Mono.Cecil.Cil; namespace PvPAdventure; @@ -88,7 +93,6 @@ public override void PostAI(Projectile projectile) projectile.netSpam = 0; } - private void OnProjectileghostHeal(On_Projectile.orig_ghostHeal orig, Projectile self, int dmg, Vector2 position, Entity victim) { From ee7f6a157d6394bf68a387f5f475e85ebf6ad451 Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Sun, 1 Jun 2025 10:07:21 -0700 Subject: [PATCH 17/43] Revert "Merge branch 'pr/34' into feature/missinginmaster" This reverts commit 09cc7830c4ed74cc9a44b8e780381227fe7f0729, reversing changes made to 350e1d2cb0c8cf7163ec9b1e639e118dd9fb985c. --- AdventureProjectile.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/AdventureProjectile.cs b/AdventureProjectile.cs index fd1239b0..9d3f369b 100644 --- a/AdventureProjectile.cs +++ b/AdventureProjectile.cs @@ -1,15 +1,10 @@ -using System; -using System.Reflection; using Microsoft.Xna.Framework; -using MonoMod.Cil; -using MonoMod.RuntimeDetour; using PvPAdventure.System; using Terraria; using Terraria.DataStructures; using Terraria.Enums; using Terraria.ID; using Terraria.ModLoader; -using Mono.Cecil.Cil; namespace PvPAdventure; From 7d087c119386e7a0e1835ae8843fc7144b1b2a52 Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Mon, 2 Jun 2025 17:11:29 -0700 Subject: [PATCH 18/43] Update PvPAdventure_AdventureConfig.json --- PvPAdventure_AdventureConfig.json | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/PvPAdventure_AdventureConfig.json b/PvPAdventure_AdventureConfig.json index ad383ddc..eff492b3 100644 --- a/PvPAdventure_AdventureConfig.json +++ b/PvPAdventure_AdventureConfig.json @@ -625,7 +625,7 @@ "Terraria/Tsunami": 1.0, "Terraria/StaffofEarth": 0.79999995, "Terraria/ChlorophyteShotbow": 1.2, - "Terraria/FairyQueenRangedItem": 0.84999996, + "Terraria/FairyQueenRangedItem": 0.75, "Terraria/MaceWhip": 0.55, "Terraria/HeatRay": 0.5, "Terraria/SniperRifle": 0.55, @@ -775,10 +775,6 @@ { "Name": "BeetleShell", "DisplayName": "Beetle Shell" - }, - { - "Name": "EmpressButterfly", - "DisplayName": "Prismatic Lacewing" } ], "NpcSpawnAnnouncements": [ From 1064993e306959ed65345de43d7b24ec773c9910 Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Wed, 4 Jun 2025 21:21:03 -0700 Subject: [PATCH 19/43] removed extra code --- AdventureItem.cs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/AdventureItem.cs b/AdventureItem.cs index 4afe3251..fafa1b02 100644 --- a/AdventureItem.cs +++ b/AdventureItem.cs @@ -16,16 +16,6 @@ public class AdventureItem : GlobalItem ItemID.Sets.Factory.CreateBoolSet(ItemID.MagicMirror, ItemID.CellPhone, ItemID.IceMirror, ItemID.Shellphone, ItemID.ShellphoneSpawn); - public class PickaxeAdjustments : GlobalItem - { - public override void SetDefaults(Item item) - { - if (item.type == ItemID.SpectrePickaxe || item.type == ItemID.ShroomiteDiggingClaw) - { - item.pick = 210; - } - } - } public class GelatinCrystalRestriction : GlobalItem { public override bool CanUseItem(Item item, Player player) From ba1f33d9e16e94ec5d39ad7fb7752c213619bb11 Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Sat, 7 Jun 2025 15:32:45 -0700 Subject: [PATCH 20/43] new drop rules --- AdventureDropDatabase.cs | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/AdventureDropDatabase.cs b/AdventureDropDatabase.cs index 0e969ca2..df95e39f 100644 --- a/AdventureDropDatabase.cs +++ b/AdventureDropDatabase.cs @@ -63,6 +63,11 @@ public static void ModifyNPCLoot(NPC npc, NPCLoot npcLoot) ModifyDropRate(drop, ItemID.Stinger, 1, 1); break; + case NPCID.GiantTortoise: + foreach (var drop in drops) + ModifyDropRate(drop, ItemID.TurtleShell, 1, 4); + break; + case NPCID.Necromancer: case NPCID.NecromancerArmored: foreach (var drop in drops) @@ -139,6 +144,11 @@ public static void ModifyNPCLoot(NPC npc, NPCLoot npcLoot) ModifyDropRate(drop, ItemID.ButterflyDust, 1, 1); break; + case NPCID.GiantCursedSkull: + foreach (var drop in drops) + ModifyDropRate(drop, ItemID.ShadowJoustingLance, 1, 12); + break; + case NPCID.Mothron: foreach (var drop in drops) ModifyDropRate(drop, ItemID.BrokenHeroSword, 1, 2); @@ -263,17 +273,6 @@ public static void ModifyNPCLoot(NPC npc, NPCLoot npcLoot) ])); break; - case NPCID.GiantTortoise: - foreach (var drop in drops) - ModifyDropRate(drop, ItemID.TurtleShell, 1, 4); - break; - - case NPCID.GiantCursedSkull: - foreach (var drop in drops) - ModifyDropRate(drop, ItemID.ShadowJoustingLance, 1, 12); - break; - - } } } \ No newline at end of file From fa7e02f27626d7c67211a8c4ba8282b0655e2ad6 Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Mon, 9 Jun 2025 14:36:59 -0700 Subject: [PATCH 21/43] ADDED new money trough shimmer recipe --- AdventureItem.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/AdventureItem.cs b/AdventureItem.cs index fafa1b02..62f9f216 100644 --- a/AdventureItem.cs +++ b/AdventureItem.cs @@ -95,7 +95,6 @@ public override void SetDefaults(Item item) if (statistics.Value != null) item.value = statistics.Value.Value; } - if (item.type == ItemID.SpectrePickaxe || item.type == ItemID.ShroomiteDiggingClaw) item.pick = 210; } From 64cc63ab6d00160927bb67b2ca3496f4485c84e4 Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Mon, 9 Jun 2025 14:37:42 -0700 Subject: [PATCH 22/43] remvoed tikki kb immuinkty --- AdventurePlayer.cs | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/AdventurePlayer.cs b/AdventurePlayer.cs index f4bddba2..59e0beb3 100644 --- a/AdventurePlayer.cs +++ b/AdventurePlayer.cs @@ -611,12 +611,17 @@ public override void PostUpdateEquips() hadShinyStoneLastFrame = hasShinyStone; - // Check if wearing full Tiki Armor - if (Player.armor[0].type == ItemID.TikiMask && - Player.armor[1].type == ItemID.TikiShirt && - Player.armor[2].type == ItemID.TikiPants) + if (Player.beetleOffense) { - Player.noKnockback = true; + Player.GetDamage() += 0.10f; + Player.GetAttackSpeed() += 0.10f; + } + else + { + // If we don't have the beetle offense set bonus, remove all possible buffs. + Player.ClearBuff(BuffID.BeetleMight1); + Player.ClearBuff(BuffID.BeetleMight2); + Player.ClearBuff(BuffID.BeetleMight3); } } @@ -926,16 +931,6 @@ public override void UpdateBadLifeRegen() } } - public override void PostUpdateEquips() - { - if (!Player.beetleOffense) - { - // If we don't have the beetle offense set bonus, remove all possible buffs. - Player.ClearBuff(BuffID.BeetleMight1); - Player.ClearBuff(BuffID.BeetleMight2); - Player.ClearBuff(BuffID.BeetleMight3); - } - } private void SendPingPong() { From 6c742512543097839fc95a76d44823668eaa4f74 Mon Sep 17 00:00:00 2001 From: EJCrispy Date: Sun, 8 Jun 2025 03:20:04 -0700 Subject: [PATCH 23/43] Makes Flask Buffs go away on death --- AdventureBuff.cs | 38 ++++++++++++++++++++++++++++++++++++++ AdventurePlayer.cs | 1 + 2 files changed, 39 insertions(+) diff --git a/AdventureBuff.cs b/AdventureBuff.cs index a97e136d..8d976782 100644 --- a/AdventureBuff.cs +++ b/AdventureBuff.cs @@ -1,4 +1,6 @@ +using System; using Terraria; +using Terraria.DataStructures; using Terraria.ID; using Terraria.ModLoader; @@ -48,4 +50,40 @@ public override bool RightClick(int type, int buffIndex) return true; } + public class ShinyStoneHotswap : ModBuff + { + public override string Texture => $"PvPAdventure/Assets/Buff/ShinyStoneHotswap"; + + public override void SetStaticDefaults() + { + Main.debuff[Type] = true; + Main.buffNoSave[Type] = true; + Main.buffNoTimeDisplay[Type] = false; // Show timer + } + } + public class RemoveFlaskBuffsOnDeath : ModPlayer + { + // Array of buff IDs to remove on death + private readonly int[] buffsToRemove = { 71, 73, 74, 75, 76, 77, 78, 79 }; //Every single Flask buff that doesn't go away on death for some reason + + public override void Kill(double damage, int hitDirection, bool pvp, PlayerDeathReason damageSource) + { + + for (int i = 0; i < Player.MaxBuffs; i++) + { + int buffType = Player.buffType[i]; + + + foreach (int buffId in buffsToRemove) + { + if (buffType == buffId) + { + Player.DelBuff(i); // Remove the buff + i--; // Adjust index since we removed a buff + break; + } + } + } + } + } } \ No newline at end of file diff --git a/AdventurePlayer.cs b/AdventurePlayer.cs index 59e0beb3..2dfb5a44 100644 --- a/AdventurePlayer.cs +++ b/AdventurePlayer.cs @@ -932,6 +932,7 @@ public override void UpdateBadLifeRegen() } + private void SendPingPong() { _pingPongStopwatch = Stopwatch.StartNew(); From 1c14f86f075972f13b4c5756dac1c7a4778f469a Mon Sep 17 00:00:00 2001 From: EJCrispy Date: Sun, 8 Jun 2025 02:17:01 -0700 Subject: [PATCH 24/43] When you have tier 3 beetleoffense you get the glowing eye vanity --- AdventurePlayer.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/AdventurePlayer.cs b/AdventurePlayer.cs index 2dfb5a44..abdc7697 100644 --- a/AdventurePlayer.cs +++ b/AdventurePlayer.cs @@ -624,6 +624,12 @@ public override void PostUpdateEquips() Player.ClearBuff(BuffID.BeetleMight3); } + if (Player.HasBuff(BuffID.BeetleMight3)) + { + // we apply the glowing eye effect from Yoraiz0rsSpell item + Player.yoraiz0rEye = 33; + } + } public override void OnRespawn() { From 65eedde480d6d310cc521234ac3de70a4d8d19a8 Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Mon, 9 Jun 2025 21:26:07 -0700 Subject: [PATCH 25/43] nerfed beetle armor --- AdventurePlayer.cs | 4 ++-- Localization/en-US.hjson | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/AdventurePlayer.cs b/AdventurePlayer.cs index abdc7697..7becd7d7 100644 --- a/AdventurePlayer.cs +++ b/AdventurePlayer.cs @@ -613,8 +613,8 @@ public override void PostUpdateEquips() if (Player.beetleOffense) { - Player.GetDamage() += 0.10f; - Player.GetAttackSpeed() += 0.10f; + Player.GetDamage() += 0; + Player.GetAttackSpeed() += 0; } else { diff --git a/Localization/en-US.hjson b/Localization/en-US.hjson index 72a598c1..7a14ed5a 100644 --- a/Localization/en-US.hjson +++ b/Localization/en-US.hjson @@ -698,11 +698,12 @@ Mods: { BuffDescription: { BeetleMight1: Melee damage and speed increase by 15% BeetleMight2: Melee damage and speed increase by 25% - BeetleMight3: Melee damage increase by 30% and melee speed increase by 50% + BeetleMight3: Melee damage increase by 30% and melee speed increase by 45% } ArmorSetBonus.BeetleDamage: ''' + Gain Beetles from player kills Beetles increase your melee damage and attack speed ''' From 5304b78a754b00afb9e7786a9b41a6d7a0019bac Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Mon, 9 Jun 2025 21:26:20 -0700 Subject: [PATCH 26/43] remvoed lingereing rainclouds on death --- AdventureProjectile.cs | 238 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 237 insertions(+), 1 deletion(-) diff --git a/AdventureProjectile.cs b/AdventureProjectile.cs index 9d3f369b..c5a8ec1c 100644 --- a/AdventureProjectile.cs +++ b/AdventureProjectile.cs @@ -238,6 +238,7 @@ public override void PostAI(Projectile projectile) if (!hasStaff && !mouseHasStaff) { + projectile.Kill(); } } @@ -455,6 +456,8 @@ public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) entity.type == ProjectileID.SporeTrap2 || entity.type == ProjectileID.SporeGas || entity.type == ProjectileID.SporeGas2 || + entity.type == ProjectileID.RainCloudRaining || + entity.type == ProjectileID.BloodCloudRaining || entity.type == ProjectileID.SporeGas3; } @@ -473,4 +476,237 @@ public override void PostAI(Projectile projectile) } } } -} \ No newline at end of file +} + + + public class XenoStaffGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.UFOMinion; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.XenoStaff); + bool mouseHasStaff = owner.inventory[58].type == ItemID.XenoStaff && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class BladeStaffGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.Smolstar; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.Smolstar); + bool mouseHasStaff = owner.inventory[58].type == ItemID.Smolstar && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class HornetStaffGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.Hornet; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.HornetStaff); + bool mouseHasStaff = owner.inventory[58].type == ItemID.HornetStaff && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class ImpStaffGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.FlyingImp; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.ImpStaff); + bool mouseHasStaff = owner.inventory[58].type == ItemID.ImpStaff && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class PygmyStaffGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.Pygmy || + entity.type == ProjectileID.Pygmy2 || + entity.type == ProjectileID.Pygmy3 || + entity.type == ProjectileID.Pygmy4; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.PygmyStaff); + bool mouseHasStaff = owner.inventory[58].type == ItemID.PygmyStaff && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class DeadlySphereGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.DeadlySphere; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.DeadlySphereStaff); + bool mouseHasStaff = owner.inventory[58].type == ItemID.DeadlySphereStaff && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class PirateStaffGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.OneEyedPirate || + entity.type == ProjectileID.SoulscourgePirate || + entity.type == ProjectileID.PirateCaptain; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.PirateStaff); + bool mouseHasStaff = owner.inventory[58].type == ItemID.PirateStaff && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class TempestStaffGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.Tempest; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.TempestStaff); + bool mouseHasStaff = owner.inventory[58].type == ItemID.TempestStaff && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class TerraprismaGlobalProjectile : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.EmpressBlade; + } + + public override void PostAI(Projectile projectile) + { + Player owner = Main.player[projectile.owner]; + + // Check inventory (including equipped items) AND mouse slot + bool hasStaff = owner.HasItem(ItemID.EmpressBlade); + bool mouseHasStaff = owner.inventory[58].type == ItemID.EmpressBlade && owner.inventory[58].stack > 0; + + if (!hasStaff && !mouseHasStaff) + { + projectile.Kill(); + } + } + } + + public class DeadProjectileList : GlobalProjectile + { + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) + { + return entity.type == ProjectileID.ClingerStaff || + entity.type == ProjectileID.SporeTrap || + entity.type == ProjectileID.SporeTrap2 || + entity.type == ProjectileID.SporeGas || + entity.type == ProjectileID.SporeGas2 || + entity.type == ProjectileID.SporeGas3; + } + + public override void PostAI(Projectile projectile) + { + // Ensure owner index is valid + if (projectile.owner < 0 || projectile.owner >= Main.maxPlayers) + return; + + Player owner = Main.player[projectile.owner]; + + // Kill projectile if owner is dead or inactive + if (owner.dead || !owner.active) + { + projectile.Kill(); + } + } + } + From 2e817fa2f76b7eab9eecab9daff8739aef84d49e Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Mon, 9 Jun 2025 21:26:28 -0700 Subject: [PATCH 27/43] config update --- PvPAdventure_AdventureConfig.json | 119 +++++++++++++++++++----------- 1 file changed, 74 insertions(+), 45 deletions(-) diff --git a/PvPAdventure_AdventureConfig.json b/PvPAdventure_AdventureConfig.json index eff492b3..109e5bf0 100644 --- a/PvPAdventure_AdventureConfig.json +++ b/PvPAdventure_AdventureConfig.json @@ -623,8 +623,8 @@ "PlayerDamageBalance": { "ItemDamageMultipliers": { "Terraria/Tsunami": 1.0, - "Terraria/StaffofEarth": 0.79999995, - "Terraria/ChlorophyteShotbow": 1.2, + "Terraria/StaffofEarth": 0.87, + "Terraria/ChlorophyteShotbow": 1.0, "Terraria/FairyQueenRangedItem": 0.75, "Terraria/MaceWhip": 0.55, "Terraria/HeatRay": 0.5, @@ -634,7 +634,7 @@ "Terraria/LaserMachinegun": 0.79999995, "Terraria/Xenopopper": 1.75, "Terraria/ProximityMineLauncher": 0.11, - "Terraria/ChargedBlasterCannon": 0.0, + "Terraria/ChargedBlasterCannon": 0.45, "Terraria/TheEyeOfCthulhu": 0.7, "Terraria/Kraken": 0.75, "Terraria/VenusMagnum": 0.84999996, @@ -642,7 +642,7 @@ "Terraria/DaedalusStormbow": 0.65, "Terraria/SoulDrain": 0.0, "Terraria/MeteorStaff": 0.39999998, - "Terraria/DD2SquireBetsySword": 0.0, + "Terraria/DD2SquireBetsySword": 1.0, "Terraria/StaffoftheFrostHydra": 0.0, "Terraria/DD2BallistraTowerT3Popper": 0.0, "Terraria/DD2BallistraTowerT2Popper": 0.0, @@ -677,7 +677,10 @@ "Terraria/TerraBlade2Shot": 0.5, "Terraria/Starfury": 0.0, "Terraria/SporeCloud": 1.0, - "Terraria/CursedDartFlame": 1.0 + "Terraria/CursedDartFlame": 1.0, + "Terraria/ChlorophyteArrow": 0.0, + "Terraria/DD2SquireSonicBoom": 0.0, + "Terraria/ChargedBlasterLaser": 0.0 }, "ItemFalloff": { "Terraria/SniperRifle": { @@ -713,49 +716,24 @@ "Coefficient": 1.0, "Forward": 58.350002 } - } + }, + "GhostHealMultiplier": 0.79999995, + "GhostHealMultiplierWearers": 0.5, + "GhostHealMaxDistance": 1500.0 }, "PreventUse": [ { "Name": "RecallPotion", "DisplayName": "Recall Potion" }, - { - "Name": "TeleportationPotion", - "DisplayName": "Teleportation Potion" - }, { "Name": "InvisibilityPotion", "DisplayName": "Invisibility Potion" }, - { - "Name": "PotionOfReturn", - "DisplayName": "Potion of Return" - }, - { - "Name": "MagicConch", - "DisplayName": "Magic Conch" - }, - { - "Name": "DemonConch", - "DisplayName": "Demon Conch" - }, { "Name": "ChlorophyteArrow", "DisplayName": "Chlorophyte Arrow" }, - { - "Name": "StrangeBrew", - "DisplayName": "Strange Brew" - }, - { - "Name": "SoulDrain", - "DisplayName": "Life Drain" - }, - { - "Name": "CosmicCarKey", - "DisplayName": "Cosmic Car Key" - }, { "Name": "PumpkinMoonMedallion", "DisplayName": "Pumpkin Moon Medallion" @@ -768,13 +746,21 @@ "Name": "FlaskofNanites", "DisplayName": "Flask of Nanites" }, - { - "Name": "BorealWoodHammer", - "DisplayName": "Boreal Wood Hammer" - }, { "Name": "BeetleShell", "DisplayName": "Beetle Shell" + }, + { + "Name": "PotionOfReturn", + "DisplayName": "Potion of Return" + }, + { + "Name": "TeleportationPotion", + "DisplayName": "Teleportation Potion" + }, + { + "Name": "FrozenShield", + "DisplayName": "Frozen Shield" } ], "NpcSpawnAnnouncements": [ @@ -880,7 +866,7 @@ "Value": 150 }, "ShootSpeed": { - "Value": 20.85 + "Value": 10.7 }, "Scale": { "Value": 1.2 @@ -910,15 +896,16 @@ "Value": 40 } }, - "Terraria/XenoStaff": { - "Damage": { - "Value": 26 + "Terraria/XenoStaff": {}, + "Terraria/MoneyTrough": { + "Value": { + "Value": 10000 } } }, "WorldGeneration": { "PlanteraBulbChanceDenominator": 20, - "ChlorophyteSpreadChanceModifier": 15 + "ChlorophyteSpreadChanceModifier": 100 }, "PreventAutoReuse": [ { @@ -965,6 +952,9 @@ }, "Terraria/MartianSaucerCore": { "Value": 1.25 + }, + "Terraria/DukeFishron": { + "Value": 1.49 } } }, @@ -1023,8 +1013,8 @@ "Items": [ { "Item": { - "Name": "FrozenShield", - "DisplayName": "Frozen Shield" + "Name": "FrozenTurtleShell", + "DisplayName": "Frozen Turtle Shell" }, "Stack": 1 } @@ -1166,6 +1156,45 @@ "Stack": 1 } ] + }, + "Terraria/CordageGuide": { + "Items": [ + { + "Item": { + "Name": "Blowpipe", + "DisplayName": "Blowpipe" + }, + "Stack": 1 + }, + { + "Item": { + "Name": "ClimbingClaws", + "DisplayName": "Climbing Claws" + }, + "Stack": 1 + }, + { + "Item": { + "Name": "Aglet", + "DisplayName": "Aglet" + }, + "Stack": 1 + }, + { + "Item": { + "Name": "Umbrella", + "DisplayName": "Umbrella" + }, + "Stack": 1 + }, + { + "Item": { + "Name": "MoonLordLegs", + "DisplayName": "Moon Lord Legs" + }, + "Stack": 1 + } + ] } }, "MinimumDamageReceivedByPlayersFromPlayer": 5 From 04b6247d94aa5823c6cd67a7e568261c9251149c Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Tue, 10 Jun 2025 09:53:45 -0700 Subject: [PATCH 28/43] config update --- PvPAdventure_AdventureConfig.json | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/PvPAdventure_AdventureConfig.json b/PvPAdventure_AdventureConfig.json index 109e5bf0..4c8401cf 100644 --- a/PvPAdventure_AdventureConfig.json +++ b/PvPAdventure_AdventureConfig.json @@ -661,7 +661,7 @@ "Terraria/PearlwoodSword": 1.1, "Terraria/MagicMissile": 0.85999995, "Terraria/Gungnir": 1.0, - "Terraria/TrueNightsEdge": 0.91999996, + "Terraria/TrueNightsEdge": 1.0, "Terraria/RocketLauncher": 0.79999995, "Terraria/OnyxBlaster": 1.5, "Terraria/ScourgeoftheCorruptor": 0.9 @@ -706,10 +706,6 @@ "Terraria/Xenopopper": { "Coefficient": 1.5, "Forward": 25.0 - }, - "Terraria/TrueNightsEdge": { - "Coefficient": 1.75, - "Forward": 20.25 } }, "DefaultFalloff": { @@ -730,10 +726,6 @@ "Name": "InvisibilityPotion", "DisplayName": "Invisibility Potion" }, - { - "Name": "ChlorophyteArrow", - "DisplayName": "Chlorophyte Arrow" - }, { "Name": "PumpkinMoonMedallion", "DisplayName": "Pumpkin Moon Medallion" @@ -863,13 +855,19 @@ }, "Terraria/TrueNightsEdge": { "Damage": { - "Value": 150 + "Value": 250 + }, + "UseTime": { + "Value": 54 + }, + "UseAnimation": { + "Value": 54 }, "ShootSpeed": { - "Value": 10.7 + "Value": 22.6 }, "Scale": { - "Value": 1.2 + "Value": 0.6 } }, "Terraria/Jetpack": { From 3ae80c2546a73e5dbe6a2e4fca80a1026844dabf Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Sun, 15 Jun 2025 11:24:02 -0700 Subject: [PATCH 29/43] Revert "AdventureInventory: Remove armor vanity slots" This reverts commit bfc8677c8d2d7228d6e9cc57c462072ce06518b1. --- System/AdventureInventory.cs | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/System/AdventureInventory.cs b/System/AdventureInventory.cs index 7dc12a5b..e25905e1 100644 --- a/System/AdventureInventory.cs +++ b/System/AdventureInventory.cs @@ -45,13 +45,10 @@ public override void Load() private static bool IsPlayerDyeContext(int context) => context is ItemSlot.Context.EquipDye or ItemSlot.Context.EquipMiscDye or ItemSlot.Context.ModdedDyeSlot; - private static bool IsUnusableContext(int context) => - IsPlayerDyeContext(context) || context == ItemSlot.Context.EquipArmorVanity; - private void OnAccessorySlotLoaderDrawSlot(AccessorySlotLoaderDrawSlotDelegate orig, AccessorySlotLoader self, Item[] items, int context, int slot, bool flag3, int xLoc, int yLoc, bool skipCheck) { - if (IsUnusableContext(context)) + if (IsPlayerDyeContext(context)) return; orig(self, items, context, slot, flag3, xLoc, yLoc, skipCheck); @@ -60,7 +57,7 @@ private void OnAccessorySlotLoaderDrawSlot(AccessorySlotLoaderDrawSlotDelegate o private void OnItemSlotDraw(On_ItemSlot.orig_Draw_SpriteBatch_ItemArray_int_int_Vector2_Color orig, SpriteBatch spriteBatch, Item[] inv, int context, int slot, Vector2 position, Color lightColor) { - if (IsUnusableContext(context)) + if (IsPlayerDyeContext(context)) return; orig(spriteBatch, inv, context, slot, position, lightColor); @@ -68,7 +65,7 @@ private void OnItemSlotDraw(On_ItemSlot.orig_Draw_SpriteBatch_ItemArray_int_int_ private void OnItemSlotHandle(On_ItemSlot.orig_Handle_ItemArray_int_int orig, Item[] inv, int context, int slot) { - if (IsUnusableContext(context)) + if (IsPlayerDyeContext(context)) return; orig(inv, context, slot); @@ -77,7 +74,7 @@ private void OnItemSlotHandle(On_ItemSlot.orig_Handle_ItemArray_int_int orig, It private void OnItemSlotOverrideHover(On_ItemSlot.orig_OverrideHover_ItemArray_int_int orig, Item[] inv, int context, int slot) { - if (IsUnusableContext(context)) + if (IsPlayerDyeContext(context)) return; orig(inv, context, slot); @@ -86,7 +83,7 @@ private void OnItemSlotOverrideHover(On_ItemSlot.orig_OverrideHover_ItemArray_in private void OnItemSlotRightClick(On_ItemSlot.orig_RightClick_ItemArray_int_int orig, Item[] inv, int context, int slot) { - if (IsUnusableContext(context)) + if (IsPlayerDyeContext(context)) return; orig(inv, context, slot); @@ -95,7 +92,7 @@ private void OnItemSlotRightClick(On_ItemSlot.orig_RightClick_ItemArray_int_int private void OnItemSlotLeftClick(On_ItemSlot.orig_LeftClick_ItemArray_int_int orig, Item[] inv, int context, int slot) { - if (IsUnusableContext(context)) + if (IsPlayerDyeContext(context)) return; orig(inv, context, slot); @@ -104,7 +101,7 @@ private void OnItemSlotLeftClick(On_ItemSlot.orig_LeftClick_ItemArray_int_int or private void OnItemSlotMouseHover(On_ItemSlot.orig_MouseHover_ItemArray_int_int orig, Item[] inv, int context, int slot) { - if (IsUnusableContext(context)) + if (IsPlayerDyeContext(context)) return; orig(inv, context, slot); From 6cd504b8392345845fbdc95624668231eeaf461f Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Wed, 18 Jun 2025 17:21:45 -0700 Subject: [PATCH 30/43] added new chloro rate options --- AdventureConfig.cs | 6 ++++++ Localization/en-US.hjson | 10 ++++++++++ System/DiscordIdentification.cs | 2 +- System/WorldGenerationManager.cs | 33 ++++++++++++++++++++++++++++++++ 4 files changed, 50 insertions(+), 1 deletion(-) diff --git a/AdventureConfig.cs b/AdventureConfig.cs index 5bd789b0..8d5b7715 100644 --- a/AdventureConfig.cs +++ b/AdventureConfig.cs @@ -313,6 +313,12 @@ public class WorldGenerationConfig [DefaultValue(30)] public int PlanteraBulbChanceDenominator { get; set; } = 30; [DefaultValue(8)] public int ChlorophyteSpreadChanceModifier { get; set; } = 8; + + [Range(1, 1000)] + [DefaultValue(300)] public int ChlorophyteGrowChanceModifier { get; set; } = 300; + + [Range(1, 999999)] + [DefaultValue(300)] public int ChlorophyteGrowLimitModifier { get; set; } = 300; } public WorldGenerationConfig WorldGeneration { get; set; } = new(); diff --git a/Localization/en-US.hjson b/Localization/en-US.hjson index 7a14ed5a..5e96a71b 100644 --- a/Localization/en-US.hjson +++ b/Localization/en-US.hjson @@ -599,6 +599,16 @@ Mods: { Label: Chlorophyte Spread Chance Modifier Tooltip: "" } + + ChlorophyteGrowChanceModifier: { + Label: Chlorophyte Grow Chance Modifier + Tooltip: "" + } + + ChlorophyteGrowLimitModifier: { + Label: Chlorophyte Grow Limit Modifier + Tooltip: "" + } } NpcBalanceConfig: { diff --git a/System/DiscordIdentification.cs b/System/DiscordIdentification.cs index 4be689a1..47bb501f 100644 --- a/System/DiscordIdentification.cs +++ b/System/DiscordIdentification.cs @@ -15,7 +15,7 @@ namespace PvPAdventure.System; [Autoload(Side = ModSide.Both)] public class DiscordIdentification : ModSystem { - private const bool Enabled = true; + private const bool Enabled = false; public delegate void PlayerJoinEventHandler(DiscordIdentification source, PlayerJoinArgs args); diff --git a/System/WorldGenerationManager.cs b/System/WorldGenerationManager.cs index 6fa3e1fa..3823ed77 100644 --- a/System/WorldGenerationManager.cs +++ b/System/WorldGenerationManager.cs @@ -12,6 +12,7 @@ public override void Load() IL_WorldGen.UpdateWorld_GrassGrowth += EditWorldGenUpdateWorld_GrassGrowth; IL_WorldGen.hardUpdateWorld += OnWorldGenhardUpdateWorld; IL_WorldGen.AddBuriedChest_int_int_int_bool_int_bool_ushort += EditWorldGenAddBuriedChest; + IL_WorldGen.Chlorophyte += OnWorldGenChlorophyte; } private void EditWorldGenUpdateWorld_GrassGrowth(ILContext il) @@ -66,6 +67,16 @@ private void OnWorldGenhardUpdateWorld(ILContext il) { var cursor = new ILCursor(il); + // Find the call to WorldGen.genRand.Next(300)... + cursor.GotoNext(i => i.MatchCallvirt("Next") && i.Previous.MatchLdcI4(300)); + // ...and go back to the constant load... + cursor.Index -= 1; + // ... to remove it... + cursor.Remove() + // ...and replace it with a delegate that loads from our config instance. + .EmitDelegate(() => + ModContent.GetInstance().WorldGeneration.ChlorophyteGrowChanceModifier); + // Find the call to WorldGen.genRand.Next(3)... cursor.GotoNext(i => i.MatchCallvirt("Next") && i.Previous.MatchLdcI4(3)); // ...and go back to the constant load... @@ -77,6 +88,28 @@ private void OnWorldGenhardUpdateWorld(ILContext il) ModContent.GetInstance().WorldGeneration.ChlorophyteSpreadChanceModifier); } + private void OnWorldGenChlorophyte(ILContext il) + { + var cursor = new ILCursor(il); + + // Find the call to WorldGen.genRand.Next(300)... + cursor.GotoNext(i => i.MatchLdcI4(40)); + // ... to remove it... + cursor.Remove() + // ...and replace it with a delegate that loads from our config instance. + .EmitDelegate(() => + ModContent.GetInstance().WorldGeneration.ChlorophyteGrowLimitModifier); + cursor.Index = 0; + + cursor.GotoNext(i => i.MatchLdcI4(130)); + // ... to remove it... + cursor.Remove() + // ...and replace it with a delegate that loads from our config instance. + .EmitDelegate(() => + ModContent.GetInstance().WorldGeneration.ChlorophyteGrowLimitModifier); + + } + private void EditWorldGenAddBuriedChest(ILContext il) { var cursor = new ILCursor(il); From dab65d8536f6c903302d0508f691d4484483aaab Mon Sep 17 00:00:00 2001 From: EJCrispy Date: Wed, 18 Jun 2025 17:19:34 -0700 Subject: [PATCH 31/43] Added shimmer crafting for regualr ass mimics. Also changed plantera required items from 4 to three. --- System/RecipeManager.cs | 248 ++++++++++++++++++++++++---------------- 1 file changed, 147 insertions(+), 101 deletions(-) diff --git a/System/RecipeManager.cs b/System/RecipeManager.cs index e8e4cb26..51c34d01 100644 --- a/System/RecipeManager.cs +++ b/System/RecipeManager.cs @@ -477,115 +477,161 @@ public override void AddRecipeGroups() RecipeGroup.RegisterGroup($"PvPAdventure:AnyHallowedMimicPrimaryExclude{itemID}", group); } } - } - public class RecipeSystem : ModSystem - { - public override void AddRecipes() + public class AnyMimic1 : ModSystem { - var shimmerCondition = new Condition( - Language.GetText("Mods.PvPAdventure.Conditions.NearShimmer"), - () => Main.LocalPlayer.adjShimmer - ); - - // Primary recipes (trophy remains icon) - foreach (int itemID in AnyGolem1.PrimaryItems.Where(id => id != ItemID.GolemMasterTrophy)) - { - Recipe.Create(itemID) - .AddRecipeGroup($"PvPAdventure:AnyGolemPrimaryExclude{itemID}", 3) - .AddCondition(shimmerCondition) - .DisableDecraft() - .Register(); - } - - // Secondary recipes (boss bag remains icon) - foreach (int itemID in AnyGolem2.SecondaryItems.Where(id => id != ItemID.GolemBossBag)) - { - Recipe.Create(itemID) - .AddRecipeGroup($"PvPAdventure:AnyGolemSecondaryExclude{itemID}", 3) - .AddCondition(shimmerCondition) - .DisableDecraft() - .Register(); - } - - // Primary QS recipes (Relic remains icon) - foreach (int itemID in AnyQueenSlime1.PrimaryItems.Where(id => id != ItemID.QueenSlimeMasterTrophy)) - { - Recipe.Create(itemID) - .AddRecipeGroup($"PvPAdventure:AnyQueenSlimePrimaryExclude{itemID}", 3) - .AddCondition(shimmerCondition) - .DisableDecraft() - .Register(); - } - - // Primary Plantera recipes (Relic remains icon) - foreach (int itemID in AnyPlantera1.PrimaryItems.Where(id => id != ItemID.PlanteraMasterTrophy)) - { - Recipe.Create(itemID) - .AddRecipeGroup($"PvPAdventure:AnyPlanteraPrimaryExclude{itemID}", 4) - .AddCondition(shimmerCondition) - .DisableDecraft() - .Register(); - } - - // Primary Duke recipes (Relic remains icon) - foreach (int itemID in AnyDuke1.PrimaryItems.Where(id => id != ItemID.DukeFishronMasterTrophy)) - { - Recipe.Create(itemID) - .AddRecipeGroup($"PvPAdventure:AnyDukePrimaryExclude{itemID}", 3) - .AddCondition(shimmerCondition) - .DisableDecraft() - .Register(); - } - - // Primary Empress recipes (Relic remains icon) - foreach (int itemID in AnyEmpress1.PrimaryItems.Where(id => id != ItemID.FairyQueenMasterTrophy)) - { - Recipe.Create(itemID) - .AddRecipeGroup($"PvPAdventure:AnyEmpressPrimaryExclude{itemID}", 2) - .AddCondition(shimmerCondition) - .DisableDecraft() - .Register(); - } - - // Primary Wall recipes (Relic remains icon) - foreach (int itemID in AnyWall1.PrimaryItems.Where(id => id != ItemID.WallofFleshMasterTrophy)) - { - Recipe.Create(itemID) - .AddRecipeGroup($"PvPAdventure:AnyWallPrimaryExclude{itemID}", 2) - .AddCondition(shimmerCondition) - .DisableDecraft() - .Register(); - } + public static RecipeGroup AnyMimicPrimary; + public static int[] PrimaryItems => new int[] { + ItemID.DeadMansChest, + ItemID.TitanGlove, + ItemID.CrossNecklace, + ItemID.StarCloak, + ItemID.PhilosophersStone, + ItemID.MagicDagger, + ItemID.DualHook, + }; - // Primary UFO recipes (Relic remains icon) - foreach (int itemID in AnySaucer1.PrimaryItems.Where(id => id != ItemID.UFOMasterTrophy)) + public override void AddRecipeGroups() { - Recipe.Create(itemID) - .AddRecipeGroup($"PvPAdventure:AnySaucerPrimaryExclude{itemID}", 3) - .AddCondition(shimmerCondition) - .DisableDecraft() - .Register(); + // Main group with trophy as first item (for icon) + AnyMimicPrimary = new RecipeGroup(() => Language.GetTextValue("Any Mimic Primary"), PrimaryItems); + RecipeGroup.RegisterGroup("PvPAdventure:AnyMimicPrimary", AnyMimicPrimary); + + // Create exclude subgroups while maintaining icon as first item + foreach (int itemID in PrimaryItems.Where(id => id != ItemID.DeadMansChest)) + { + var validItems = PrimaryItems + .Where(id => id != itemID && id != ItemID.DeadMansChest) + .Prepend(ItemID.DeadMansChest) // Keep item first for icon + .ToArray(); + + RecipeGroup group = new RecipeGroup( + () => Language.GetTextValue("Any Mimic Primary"), + validItems + ); + RecipeGroup.RegisterGroup($"PvPAdventure:AnyMimicPrimaryExclude{itemID}", group); + } } + } - // Primary Corro mimic recipes (Relic remains icon) - foreach (int itemID in AnyCorruptionMimic1.PrimaryItems.Where(id => id != ItemID.Fake_CorruptionChest)) + public class RecipeSystem : ModSystem + { + public override void AddRecipes() { - Recipe.Create(itemID) - .AddRecipeGroup($"PvPAdventure:AnyCorruptionMimicPrimaryExclude{itemID}", 3) - .AddCondition(shimmerCondition) - .DisableDecraft() - .Register(); - } + var shimmerCondition = new Condition( + Language.GetText("Mods.PvPAdventure.Conditions.NearShimmer"), + () => Main.LocalPlayer.adjShimmer + ); - // Primary Hallow mimic recipes (Relic remains icon) - foreach (int itemID in AnyHallowedMimic1.PrimaryItems.Where(id => id != ItemID.Fake_HallowedChest)) - { - Recipe.Create(itemID) - .AddRecipeGroup($"PvPAdventure:AnyHallowedMimicPrimaryExclude{itemID}", 2) - .AddCondition(shimmerCondition) - .DisableDecraft() - .Register(); + // Primary recipes (trophy remains icon) + foreach (int itemID in AnyGolem1.PrimaryItems.Where(id => id != ItemID.GolemMasterTrophy)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnyGolemPrimaryExclude{itemID}", 3) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } + + // Secondary recipes (boss bag remains icon) + foreach (int itemID in AnyGolem2.SecondaryItems.Where(id => id != ItemID.GolemBossBag)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnyGolemSecondaryExclude{itemID}", 3) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } + + // Primary QS recipes (Relic remains icon) + foreach (int itemID in AnyQueenSlime1.PrimaryItems.Where(id => id != ItemID.QueenSlimeMasterTrophy)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnyQueenSlimePrimaryExclude{itemID}", 3) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } + + // Primary Plantera recipes (Relic remains icon) + foreach (int itemID in AnyPlantera1.PrimaryItems.Where(id => id != ItemID.PlanteraMasterTrophy)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnyPlanteraPrimaryExclude{itemID}", 3) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } + + // Primary Duke recipes (Relic remains icon) + foreach (int itemID in AnyDuke1.PrimaryItems.Where(id => id != ItemID.DukeFishronMasterTrophy)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnyDukePrimaryExclude{itemID}", 3) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } + + // Primary Empress recipes (Relic remains icon) + foreach (int itemID in AnyEmpress1.PrimaryItems.Where(id => id != ItemID.FairyQueenMasterTrophy)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnyEmpressPrimaryExclude{itemID}", 2) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } + + // Primary Wall recipes (Relic remains icon) + foreach (int itemID in AnyWall1.PrimaryItems.Where(id => id != ItemID.WallofFleshMasterTrophy)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnyWallPrimaryExclude{itemID}", 2) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } + + // Primary UFO recipes (Relic remains icon) + foreach (int itemID in AnySaucer1.PrimaryItems.Where(id => id != ItemID.UFOMasterTrophy)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnySaucerPrimaryExclude{itemID}", 3) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } + + // Primary Corro mimic recipes (Relic remains icon) + foreach (int itemID in AnyCorruptionMimic1.PrimaryItems.Where(id => id != ItemID.Fake_CorruptionChest)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnyCorruptionMimicPrimaryExclude{itemID}", 3) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } + + // Primary Hallow mimic recipes (Relic remains icon) + foreach (int itemID in AnyHallowedMimic1.PrimaryItems.Where(id => id != ItemID.Fake_HallowedChest)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnyHallowedMimicPrimaryExclude{itemID}", 2) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } + + // Primary Mimic recipes (Relic remains icon) + foreach (int itemID in AnyMimic1.PrimaryItems.Where(id => id != ItemID.DeadMansChest)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnyMimicPrimaryExclude{itemID}", 3) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } } } } From 8088c7ee6f1b63cf05824337ca7667c15d59666c Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Fri, 20 Jun 2025 21:41:11 -0700 Subject: [PATCH 32/43] readded tikki no kb --- AdventurePlayer.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/AdventurePlayer.cs b/AdventurePlayer.cs index 7becd7d7..dd21a1bb 100644 --- a/AdventurePlayer.cs +++ b/AdventurePlayer.cs @@ -630,6 +630,14 @@ public override void PostUpdateEquips() Player.yoraiz0rEye = 33; } + // Check if wearing full Tiki Armor + if (Player.armor[0].type == ItemID.TikiMask && + Player.armor[1].type == ItemID.TikiShirt && + Player.armor[2].type == ItemID.TikiPants) + { + Player.noKnockback = true; + } + } public override void OnRespawn() { From 53cf98646fcbd694ef91e91cb310fd59db778cd8 Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Sun, 22 Jun 2025 11:21:04 -0700 Subject: [PATCH 33/43] remnoved duplicate code --- AdventureBuff.cs | 10 -- AdventureProjectile.cs | 232 +---------------------------------------- 2 files changed, 1 insertion(+), 241 deletions(-) diff --git a/AdventureBuff.cs b/AdventureBuff.cs index 8d976782..4609529c 100644 --- a/AdventureBuff.cs +++ b/AdventureBuff.cs @@ -50,17 +50,7 @@ public override bool RightClick(int type, int buffIndex) return true; } - public class ShinyStoneHotswap : ModBuff - { - public override string Texture => $"PvPAdventure/Assets/Buff/ShinyStoneHotswap"; - public override void SetStaticDefaults() - { - Main.debuff[Type] = true; - Main.buffNoSave[Type] = true; - Main.buffNoTimeDisplay[Type] = false; // Show timer - } - } public class RemoveFlaskBuffsOnDeath : ModPlayer { // Array of buff IDs to remove on death diff --git a/AdventureProjectile.cs b/AdventureProjectile.cs index c5a8ec1c..397fcf83 100644 --- a/AdventureProjectile.cs +++ b/AdventureProjectile.cs @@ -479,234 +479,4 @@ public override void PostAI(Projectile projectile) } - public class XenoStaffGlobalProjectile : GlobalProjectile - { - public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) - { - return entity.type == ProjectileID.UFOMinion; - } - - public override void PostAI(Projectile projectile) - { - Player owner = Main.player[projectile.owner]; - - // Check inventory (including equipped items) AND mouse slot - bool hasStaff = owner.HasItem(ItemID.XenoStaff); - bool mouseHasStaff = owner.inventory[58].type == ItemID.XenoStaff && owner.inventory[58].stack > 0; - - if (!hasStaff && !mouseHasStaff) - { - projectile.Kill(); - } - } - } - - public class BladeStaffGlobalProjectile : GlobalProjectile - { - public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) - { - return entity.type == ProjectileID.Smolstar; - } - - public override void PostAI(Projectile projectile) - { - Player owner = Main.player[projectile.owner]; - - // Check inventory (including equipped items) AND mouse slot - bool hasStaff = owner.HasItem(ItemID.Smolstar); - bool mouseHasStaff = owner.inventory[58].type == ItemID.Smolstar && owner.inventory[58].stack > 0; - - if (!hasStaff && !mouseHasStaff) - { - projectile.Kill(); - } - } - } - - public class HornetStaffGlobalProjectile : GlobalProjectile - { - public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) - { - return entity.type == ProjectileID.Hornet; - } - - public override void PostAI(Projectile projectile) - { - Player owner = Main.player[projectile.owner]; - - // Check inventory (including equipped items) AND mouse slot - bool hasStaff = owner.HasItem(ItemID.HornetStaff); - bool mouseHasStaff = owner.inventory[58].type == ItemID.HornetStaff && owner.inventory[58].stack > 0; - - if (!hasStaff && !mouseHasStaff) - { - projectile.Kill(); - } - } - } - - public class ImpStaffGlobalProjectile : GlobalProjectile - { - public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) - { - return entity.type == ProjectileID.FlyingImp; - } - - public override void PostAI(Projectile projectile) - { - Player owner = Main.player[projectile.owner]; - - // Check inventory (including equipped items) AND mouse slot - bool hasStaff = owner.HasItem(ItemID.ImpStaff); - bool mouseHasStaff = owner.inventory[58].type == ItemID.ImpStaff && owner.inventory[58].stack > 0; - - if (!hasStaff && !mouseHasStaff) - { - projectile.Kill(); - } - } - } - - public class PygmyStaffGlobalProjectile : GlobalProjectile - { - public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) - { - return entity.type == ProjectileID.Pygmy || - entity.type == ProjectileID.Pygmy2 || - entity.type == ProjectileID.Pygmy3 || - entity.type == ProjectileID.Pygmy4; - } - - public override void PostAI(Projectile projectile) - { - Player owner = Main.player[projectile.owner]; - - // Check inventory (including equipped items) AND mouse slot - bool hasStaff = owner.HasItem(ItemID.PygmyStaff); - bool mouseHasStaff = owner.inventory[58].type == ItemID.PygmyStaff && owner.inventory[58].stack > 0; - - if (!hasStaff && !mouseHasStaff) - { - projectile.Kill(); - } - } - } - - public class DeadlySphereGlobalProjectile : GlobalProjectile - { - public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) - { - return entity.type == ProjectileID.DeadlySphere; - } - - public override void PostAI(Projectile projectile) - { - Player owner = Main.player[projectile.owner]; - - // Check inventory (including equipped items) AND mouse slot - bool hasStaff = owner.HasItem(ItemID.DeadlySphereStaff); - bool mouseHasStaff = owner.inventory[58].type == ItemID.DeadlySphereStaff && owner.inventory[58].stack > 0; - - if (!hasStaff && !mouseHasStaff) - { - projectile.Kill(); - } - } - } - - public class PirateStaffGlobalProjectile : GlobalProjectile - { - public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) - { - return entity.type == ProjectileID.OneEyedPirate || - entity.type == ProjectileID.SoulscourgePirate || - entity.type == ProjectileID.PirateCaptain; - } - - public override void PostAI(Projectile projectile) - { - Player owner = Main.player[projectile.owner]; - - // Check inventory (including equipped items) AND mouse slot - bool hasStaff = owner.HasItem(ItemID.PirateStaff); - bool mouseHasStaff = owner.inventory[58].type == ItemID.PirateStaff && owner.inventory[58].stack > 0; - - if (!hasStaff && !mouseHasStaff) - { - projectile.Kill(); - } - } - } - - public class TempestStaffGlobalProjectile : GlobalProjectile - { - public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) - { - return entity.type == ProjectileID.Tempest; - } - - public override void PostAI(Projectile projectile) - { - Player owner = Main.player[projectile.owner]; - - // Check inventory (including equipped items) AND mouse slot - bool hasStaff = owner.HasItem(ItemID.TempestStaff); - bool mouseHasStaff = owner.inventory[58].type == ItemID.TempestStaff && owner.inventory[58].stack > 0; - - if (!hasStaff && !mouseHasStaff) - { - projectile.Kill(); - } - } - } - - public class TerraprismaGlobalProjectile : GlobalProjectile - { - public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) - { - return entity.type == ProjectileID.EmpressBlade; - } - - public override void PostAI(Projectile projectile) - { - Player owner = Main.player[projectile.owner]; - - // Check inventory (including equipped items) AND mouse slot - bool hasStaff = owner.HasItem(ItemID.EmpressBlade); - bool mouseHasStaff = owner.inventory[58].type == ItemID.EmpressBlade && owner.inventory[58].stack > 0; - - if (!hasStaff && !mouseHasStaff) - { - projectile.Kill(); - } - } - } - - public class DeadProjectileList : GlobalProjectile - { - public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) - { - return entity.type == ProjectileID.ClingerStaff || - entity.type == ProjectileID.SporeTrap || - entity.type == ProjectileID.SporeTrap2 || - entity.type == ProjectileID.SporeGas || - entity.type == ProjectileID.SporeGas2 || - entity.type == ProjectileID.SporeGas3; - } - - public override void PostAI(Projectile projectile) - { - // Ensure owner index is valid - if (projectile.owner < 0 || projectile.owner >= Main.maxPlayers) - return; - - Player owner = Main.player[projectile.owner]; - - // Kill projectile if owner is dead or inactive - if (owner.dead || !owner.active) - { - projectile.Kill(); - } - } - } - + \ No newline at end of file From 194f1da182d0f9316bf300f53bf4715b928c0626 Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Wed, 2 Jul 2025 11:46:13 -0700 Subject: [PATCH 34/43] updated icon --- icon.png | Bin 1253 -> 8192 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icon.png b/icon.png index e18d0f432eb900f533369f1c190e7a5f9748976e..2619499b2fe801e9854976de40cf46ee13323ebe 100644 GIT binary patch literal 8192 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 From 81558059bc4492e83ba217b3bdb63cc5371cf03c Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Wed, 2 Jul 2025 11:46:29 -0700 Subject: [PATCH 35/43] nerfged beetle might buff --- AdventureBuff.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/AdventureBuff.cs b/AdventureBuff.cs index 4609529c..2b897438 100644 --- a/AdventureBuff.cs +++ b/AdventureBuff.cs @@ -21,8 +21,8 @@ public override void Update(int type, Player player, ref int buffIndex) if (player.beetleOrbs >= 1) { - damage += 0.15f; - attackSpeed += 0.15f; + damage += 0.10f; + attackSpeed += 0.10f; } if (player.beetleOrbs >= 2) @@ -33,8 +33,8 @@ public override void Update(int type, Player player, ref int buffIndex) if (player.beetleOrbs >= 3) { - damage += 0.05f; - attackSpeed += 0.20f; + damage += 0.10f; + attackSpeed += 0.10f; } player.GetDamage() += damage; From f836cc944aad1c138740a3029c2524fec9280bc1 Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Wed, 2 Jul 2025 11:46:53 -0700 Subject: [PATCH 36/43] upped unholy trident drop rates --- AdventureDropDatabase.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/AdventureDropDatabase.cs b/AdventureDropDatabase.cs index df95e39f..98dde302 100644 --- a/AdventureDropDatabase.cs +++ b/AdventureDropDatabase.cs @@ -159,6 +159,11 @@ public static void ModifyNPCLoot(NPC npc, NPCLoot npcLoot) ModifyDropRate(drop, ItemID.MagicQuiver, 1, 30); break; + case NPCID.RedDevil: + foreach (var drop in drops) + ModifyDropRate(drop, ItemID.UnholyTrident, 1, 10); + break; + case NPCID.Lihzahrd: case NPCID.LihzahrdCrawler: case NPCID.FlyingSnake: From 2dfdde9b36bfd9066c6a14128cfab707dc3c42ce Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Wed, 2 Jul 2025 11:47:48 -0700 Subject: [PATCH 37/43] added bad luck shimmer recipes for dungeon for brick wall dungoen drops --- System/RecipeManager.cs | 43 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/System/RecipeManager.cs b/System/RecipeManager.cs index 51c34d01..28b16e3d 100644 --- a/System/RecipeManager.cs +++ b/System/RecipeManager.cs @@ -514,6 +514,39 @@ public override void AddRecipeGroups() } } + public class AnyBrickwall1: ModSystem + { + public static RecipeGroup AnyBrickwall; + public static int[] PrimaryItems => new int[] { + ItemID.NecromanticSign, + ItemID.ShadowbeamStaff, + ItemID.RocketLauncher, + ItemID.PaladinsHammer + }; + + public override void AddRecipeGroups() + { + // Main group with trophy as first item (for icon) + AnyBrickwall = new RecipeGroup(() => Language.GetTextValue("Any Brick Wall"), PrimaryItems); + RecipeGroup.RegisterGroup("PvPAdventure:AnyBrickWall", AnyBrickwall); + + // Create exclude subgroups while maintaining icon as first item + foreach (int itemID in PrimaryItems.Where(id => id != ItemID.NecromanticSign)) + { + var validItems = PrimaryItems + .Where(id => id != itemID && id != ItemID.NecromanticSign) + .Prepend(ItemID.NecromanticSign) // Keep item first for icon + .ToArray(); + + RecipeGroup group = new RecipeGroup( + () => Language.GetTextValue("Any Brick Wall"), + validItems + ); + RecipeGroup.RegisterGroup($"PvPAdventure:AnyBrickWallExclude{itemID}", group); + } + } + } + public class RecipeSystem : ModSystem { public override void AddRecipes() @@ -632,6 +665,16 @@ public override void AddRecipes() .DisableDecraft() .Register(); } + // Primary Mimic recipes (Relic remains icon) + foreach (int itemID in AnyBrickwall1.PrimaryItems.Where(id => id != ItemID.NecromanticSign)) + { + Recipe.Create(itemID) + .AddRecipeGroup($"PvPAdventure:AnyBrickWallExclude{itemID}", 3) + .AddCondition(shimmerCondition) + .DisableDecraft() + .Register(); + } + } } } From ef8ae4b8d66217cf386d130ce417bd072a88c70c Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Wed, 9 Jul 2025 09:34:03 -0700 Subject: [PATCH 38/43] plant first drop chagned --- AdventureDropDatabase.cs | 43 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/AdventureDropDatabase.cs b/AdventureDropDatabase.cs index 74ee9c79..c78255aa 100644 --- a/AdventureDropDatabase.cs +++ b/AdventureDropDatabase.cs @@ -1,8 +1,12 @@ using System.Linq; +using MonoMod.Cil; +using MonoMod.RuntimeDetour; +using System.Reflection; using Terraria; using Terraria.GameContent.ItemDropRules; using Terraria.ID; using Terraria.ModLoader; +using Mono.Cecil.Cil; namespace PvPAdventure; @@ -301,4 +305,43 @@ public static IItemDropRule OnItemDropDatabaseRegisterToGlobal(On_ItemDropDataba return entry; } + public class PlanteraDropEdit : ModSystem + { + private static ILHook planteraHook; + + public override void PostSetupContent() + { + // Apply the IL edit to change Plantera's first-time drop from item 758 to 1255 + MethodInfo method = typeof(Terraria.GameContent.ItemDropRules.ItemDropDatabase).GetMethod("RegisterBoss_Plantera", + BindingFlags.NonPublic | BindingFlags.Instance); + + planteraHook = new ILHook(method, PlanteraDropILEdit); + } + + public override void Unload() + { + planteraHook?.Dispose(); + } + + private static void PlanteraDropILEdit(ILContext il) + { + ILCursor cursor = new ILCursor(il); + + // Look for the instruction that loads the value 758 (Grenade Launcher ID) + // This should be: ldc.i4 758 (or ldc.i4.s 758 if it's a short form) + if (cursor.TryGotoNext(MoveType.Before, + i => i.MatchLdcI4(758))) // Match loading the constant 758 + { + // Replace the 758 with 1255 + cursor.Remove(); // Remove the ldc.i4 758 instruction + cursor.Emit(OpCodes.Ldc_I4, 1255); // Emit ldc.i4 1255 instead + + ModContent.GetInstance().Logger.Info("Successfully changed Plantera's first-time drop from item 758 to 1255"); + } + else + { + ModContent.GetInstance().Logger.Error("Failed to find item ID 758 in RegisterBoss_Plantera method"); + } + } + } } \ No newline at end of file From fa960e9cb64eed5a12b53a53df5a48820e514b5e Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Wed, 9 Jul 2025 09:36:12 -0700 Subject: [PATCH 39/43] power cell now yellow rarity --- AdventureItem.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/AdventureItem.cs b/AdventureItem.cs index 62f9f216..2616a9a4 100644 --- a/AdventureItem.cs +++ b/AdventureItem.cs @@ -65,6 +65,12 @@ public override void SetDefaults(Item item) { var adventureConfig = ModContent.GetInstance(); + if (item.type == ItemID.LihzahrdPowerCell) + { + + item.rare = ItemRarityID.Yellow; + } + if (RecallItems[item.type]) { var recallTime = adventureConfig.RecallFrames; From 1399db51dd7dd74a57b91df9d578650d02dd94db Mon Sep 17 00:00:00 2001 From: EJCrispy Date: Thu, 10 Jul 2025 20:16:11 -0700 Subject: [PATCH 40/43] Reworked nightblow behavior --- AdventureProjectile.cs | 48 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/AdventureProjectile.cs b/AdventureProjectile.cs index 397fcf83..cadaee70 100644 --- a/AdventureProjectile.cs +++ b/AdventureProjectile.cs @@ -476,6 +476,54 @@ public override void PostAI(Projectile projectile) } } } + public class NightglowMouseHoming : GlobalProjectile + { + public override bool AppliesToEntity(Projectile projectile, bool lateInstantiation) + { + return projectile.type == ProjectileID.FairyQueenMagicItemShot; + } + + // We Initialize timer in SetDefaults + public override void SetDefaults(Projectile projectile) + { + if (projectile.type == ProjectileID.FairyQueenMagicItemShot) + { + projectile.localAI[0] = 0f; // Homing delay timer + projectile.netUpdate = true; + } + } + + public override void AI(Projectile projectile) + { + if (projectile.owner != Main.myPlayer) return; + Player player = Main.player[projectile.owner]; + if (player.dead || !player.active) return; + + // Increment homing delay timer + projectile.localAI[0]++; + + // Only start homing after 60 frames + if (projectile.localAI[0] < 60f) return; + + Vector2 cursorPosition = Main.MouseWorld; + Vector2 toCursor = cursorPosition - projectile.Center; + float distance = toCursor.Length(); + + // Only home when cursor is beyond minimum distance + + + float baseSpeed = 20f; + float accelerationFactor = 1.5f; + float turnStrength = 0.05f; + + Vector2 direction = toCursor.SafeNormalize(Vector2.Zero); + Vector2 targetVelocity = direction * baseSpeed * accelerationFactor; + + projectile.velocity = Vector2.Lerp(projectile.velocity, targetVelocity, turnStrength); + projectile.rotation = projectile.velocity.ToRotation() + MathHelper.PiOver2; + + } + } } From 07c5be5abd0dce3bbdaa10813af66a855a4211fc Mon Sep 17 00:00:00 2001 From: EJCrispy Date: Thu, 10 Jul 2025 20:40:10 -0700 Subject: [PATCH 41/43] Thanks resin! he fixed it! --- AdventureProjectile.cs | 54 ++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/AdventureProjectile.cs b/AdventureProjectile.cs index cadaee70..005f6115 100644 --- a/AdventureProjectile.cs +++ b/AdventureProjectile.cs @@ -476,52 +476,44 @@ public override void PostAI(Projectile projectile) } } } - public class NightglowMouseHoming : GlobalProjectile + public class AdventureNightglow : GlobalProjectile { - public override bool AppliesToEntity(Projectile projectile, bool lateInstantiation) - { - return projectile.type == ProjectileID.FairyQueenMagicItemShot; - } + public override bool AppliesToEntity(Projectile entity, bool lateInstantiation) => + entity.type == ProjectileID.FairyQueenMagicItemShot; - // We Initialize timer in SetDefaults - public override void SetDefaults(Projectile projectile) + public override void SetDefaults(Projectile entity) { - if (projectile.type == ProjectileID.FairyQueenMagicItemShot) - { - projectile.localAI[0] = 0f; // Homing delay timer - projectile.netUpdate = true; - } + entity.localAI[0] = 0; } public override void AI(Projectile projectile) { - if (projectile.owner != Main.myPlayer) return; - Player player = Main.player[projectile.owner]; - if (player.dead || !player.active) return; - - // Increment homing delay timer - projectile.localAI[0]++; + if (projectile.localAI[0] <= 60) + { + projectile.localAI[0]++; + return; + } - // Only start homing after 60 frames - if (projectile.localAI[0] < 60f) return; - Vector2 cursorPosition = Main.MouseWorld; - Vector2 toCursor = cursorPosition - projectile.Center; - float distance = toCursor.Length(); + if (!projectile.TryGetOwner(out var owner)) + return; - // Only home when cursor is beyond minimum distance + if (owner.whoAmI != Main.myPlayer) + return; + var cursorPosition = Main.MouseWorld; + var toCursor = cursorPosition - projectile.Center; - float baseSpeed = 20f; - float accelerationFactor = 1.5f; - float turnStrength = 0.05f; + var baseSpeed = 20.0f; + var accelerationFactor = 1.5f; + var turnStrength = 0.05f; - Vector2 direction = toCursor.SafeNormalize(Vector2.Zero); - Vector2 targetVelocity = direction * baseSpeed * accelerationFactor; + var direction = toCursor.SafeNormalize(Vector2.Zero); + var targetVelocity = direction * baseSpeed * accelerationFactor; projectile.velocity = Vector2.Lerp(projectile.velocity, targetVelocity, turnStrength); - projectile.rotation = projectile.velocity.ToRotation() + MathHelper.PiOver2; - + projectile.rotation = projectile.velocity.ToRotation() * MathHelper.PiOver2; + projectile.netUpdate = true; } } } From e3af842e2105fe40c3c65064b0eb592d0ec1c7ef Mon Sep 17 00:00:00 2001 From: EJCrispy Date: Thu, 10 Jul 2025 21:54:10 -0700 Subject: [PATCH 42/43] Decreased rotation strength and requires usage to home to mouse now --- AdventureProjectile.cs | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/AdventureProjectile.cs b/AdventureProjectile.cs index 005f6115..43f2a1b2 100644 --- a/AdventureProjectile.cs +++ b/AdventureProjectile.cs @@ -494,26 +494,28 @@ public override void AI(Projectile projectile) return; } - if (!projectile.TryGetOwner(out var owner)) return; if (owner.whoAmI != Main.myPlayer) return; - var cursorPosition = Main.MouseWorld; - var toCursor = cursorPosition - projectile.Center; + if (owner.itemAnimation > 0 && owner.HeldItem.type == ItemID.FairyQueenMagicItem) + { + var cursorPosition = Main.MouseWorld; + var toCursor = cursorPosition - projectile.Center; - var baseSpeed = 20.0f; - var accelerationFactor = 1.5f; - var turnStrength = 0.05f; + var baseSpeed = 30.0f; + var accelerationFactor = 2.5f; + var turnStrength = 0.01f; - var direction = toCursor.SafeNormalize(Vector2.Zero); - var targetVelocity = direction * baseSpeed * accelerationFactor; + var direction = toCursor.SafeNormalize(Vector2.Zero); + var targetVelocity = direction * baseSpeed * accelerationFactor; - projectile.velocity = Vector2.Lerp(projectile.velocity, targetVelocity, turnStrength); - projectile.rotation = projectile.velocity.ToRotation() * MathHelper.PiOver2; - projectile.netUpdate = true; + projectile.velocity = Vector2.Lerp(projectile.velocity, targetVelocity, turnStrength); + projectile.rotation = projectile.velocity.ToRotation() * MathHelper.PiOver2; + projectile.netUpdate = true; + } } } } From d711dcfaa1d4d23a8a89cc1d4a5f5f881198e8e5 Mon Sep 17 00:00:00 2001 From: Alex <87573461+MatteSevai@users.noreply.github.com> Date: Fri, 11 Jul 2025 16:58:55 -0700 Subject: [PATCH 43/43] changed some stats --- AdventureProjectile.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AdventureProjectile.cs b/AdventureProjectile.cs index 43f2a1b2..388ace88 100644 --- a/AdventureProjectile.cs +++ b/AdventureProjectile.cs @@ -505,9 +505,9 @@ public override void AI(Projectile projectile) var cursorPosition = Main.MouseWorld; var toCursor = cursorPosition - projectile.Center; - var baseSpeed = 30.0f; - var accelerationFactor = 2.5f; - var turnStrength = 0.01f; + var baseSpeed = 20.0f; + var accelerationFactor = 1.5f; + var turnStrength = 0.035f; var direction = toCursor.SafeNormalize(Vector2.Zero); var targetVelocity = direction * baseSpeed * accelerationFactor;