From 6e38f720feb31515368669d0818157a1a801ceab Mon Sep 17 00:00:00 2001 From: Niko Date: Sat, 15 Nov 2025 12:30:28 +0000 Subject: [PATCH] Minor changes to Niko AI for more :sparkles: monologue :sparkles: --- Content/Items/Weapons/Magic/BeamAttackWand.cs | 3 +- Content/NPCs/OriginalNiko/Niko.cs | 69 +++++++++++++------ .../en-US_Mods.ForgottenWawiTech.hjson | 6 +- 3 files changed, 54 insertions(+), 24 deletions(-) diff --git a/Content/Items/Weapons/Magic/BeamAttackWand.cs b/Content/Items/Weapons/Magic/BeamAttackWand.cs index 2d8249b..08ac069 100644 --- a/Content/Items/Weapons/Magic/BeamAttackWand.cs +++ b/Content/Items/Weapons/Magic/BeamAttackWand.cs @@ -4,6 +4,7 @@ using Microsoft.Xna.Framework; using Terraria; using Terraria.ID; using Terraria.ModLoader; +using ForgottenWawiTech.Content.Rarities; namespace ForgottenWawiTech.Content.Items.Weapons.Magic { @@ -30,7 +31,7 @@ namespace ForgottenWawiTech.Content.Items.Weapons.Magic Item.damage = 25; Item.knockBack = 4.5f; Item.DamageType = DamageClass.Magic; // treat beams as melee for synergy - Item.rare = ItemRarityID.Blue; // around early game progression + Item.rare = ModContent.RarityType(); Item.value = Item.buyPrice(silver: 50); Item.shoot = ModContent.ProjectileType(); Item.shootSpeed = 12f; // base speed of beams diff --git a/Content/NPCs/OriginalNiko/Niko.cs b/Content/NPCs/OriginalNiko/Niko.cs index d71315e..f2f03ea 100644 --- a/Content/NPCs/OriginalNiko/Niko.cs +++ b/Content/NPCs/OriginalNiko/Niko.cs @@ -12,7 +12,6 @@ namespace ForgottenWawiTech.Content.NPCs.OriginalNiko { public override void SetStaticDefaults() { - // DisplayName.SetDefault("Original Niko"); Main.npcFrameCount[NPC.type] = 1; } @@ -20,8 +19,8 @@ namespace ForgottenWawiTech.Content.NPCs.OriginalNiko { NPC.width = 40; NPC.height = 40; - NPC.damage = 1786; - NPC.defense = 290; + NPC.damage = 2000; + NPC.defense = 300; NPC.lifeMax = 1000000; NPC.HitSound = SoundID.NPCHit1; NPC.DeathSound = SoundID.NPCDeath1; @@ -101,29 +100,46 @@ namespace ForgottenWawiTech.Content.NPCs.OriginalNiko } else if (t == 900) { - string line = "Niko: You think you've seen everything?"; + string line = "Impressive..."; if (Main.netMode != NetmodeID.MultiplayerClient) Main.NewText(line, 220, 160, 255); else ChatHelper.BroadcastChatMessage(NetworkText.FromLiteral(line), new Color(220, 160, 255)); } - else if (t == 2100) + else if (t == 1000) { - string line = "Niko: There's more yet to come..."; + string line = "But this has already gone on long enough."; if (Main.netMode != NetmodeID.MultiplayerClient) - Main.NewText(line, 200, 140, 255); + Main.NewText(line, 180, 130, 255); else - ChatHelper.BroadcastChatMessage(NetworkText.FromLiteral(line), new Color(200, 140, 255)); + ChatHelper.BroadcastChatMessage(NetworkText.FromLiteral(line), new Color(180, 130, 255)); } - - // After approx 60 seconds (3600 ticks), end invulnerability - if (NPC.ai[2] >= 3600) + // TODO: Audio and VO lines here + else if (t == 1500) + { + string line = "Sky has rated the following film 12 - suitable for ages 12 and above."; + if (Main.netMode != NetmodeID.MultiplayerClient) + Main.NewText(line, 210, 150, 255); + else + ChatHelper.BroadcastChatMessage(NetworkText.FromLiteral(line), new Color(210, 150, 255)); + } + else if (t == 1800) + { + string line = "This film contains violence, explicit language, and flashing images."; // this is such a random reference that ill be surprised if anyone gets it especially outside gb + if (Main.netMode != NetmodeID.MultiplayerClient) + Main.NewText(line, 230, 180, 255); + else + ChatHelper.BroadcastChatMessage(NetworkText.FromLiteral(line), new Color(230, 180, 255)); + } + // TODO: When audio is finished, switch to Noctis Boss 2 theme (remix of In The End? Or something new? TBA) + // After approx 42 seconds (2500 ticks), end invulnerability + if (NPC.ai[2] >= 2500) { NPC.dontTakeDamage = false; NPC.ai[0] = 2; NPC.netUpdate = true; - string announce = "Niko's barrier fades... the battle resumes."; + string announce = "Now get out of my sight."; if (Main.netMode != NetmodeID.MultiplayerClient) Main.NewText(announce, 255, 150, 100); else @@ -181,19 +197,32 @@ namespace ForgottenWawiTech.Content.NPCs.OriginalNiko public override void OnKill() { - // Spawn NikoNPC when killed -/* if (Main.netMode != NetmodeID.MultiplayerClient) + // Ending monologue before playing the final track + // Only if Niko was actually defeated (not fled) and hasn't been defeated before + if (!WorldDefeatedBosses.Niko) { - NPC.NewNPC(NPC.GetSource_Death(), (int)NPC.Center.X, (int)NPC.Center.Y, ModContent.NPCType()); - } - else - { - NetMessage.SendData(MessageID.SpawnNPC, number: ModContent.NPCType(), number2: NPC.whoAmI); - } */ + string line1 = "With a final breath, Niko whispers..."; + string line2 = "\"gg, no re\""; + string line3 = "The battlefield falls silent as Niko vanishes."; + if (Main.netMode != NetmodeID.MultiplayerClient) + { + Main.NewText(line1, 255, 100, 100); + Main.NewText(line2, 200, 50, 50); + Main.NewText(line3, 255, 150, 150); + } + else + { + ChatHelper.BroadcastChatMessage(NetworkText.FromLiteral(line1), new Color(255, 100, 100)); + ChatHelper.BroadcastChatMessage(NetworkText.FromLiteral(line2), new Color(200, 50, 50)); + ChatHelper.BroadcastChatMessage(NetworkText.FromLiteral(line3), new Color(255, 150, 150)); + } // Set a world flag or similar to indicate Niko has been defeated WorldDefeatedBosses.Niko = true; // Immediate sync of world flags WorldDefeatedBosses.Sync(ModContent.GetInstance()); + } + + } } } diff --git a/Localization/en-US_Mods.ForgottenWawiTech.hjson b/Localization/en-US_Mods.ForgottenWawiTech.hjson index 1cabb02..bc3dc68 100644 --- a/Localization/en-US_Mods.ForgottenWawiTech.hjson +++ b/Localization/en-US_Mods.ForgottenWawiTech.hjson @@ -299,11 +299,11 @@ NPCs: { } } - Raccoon.DisplayName: Raccoon - Niko.DisplayName: Niko + Raccoon.DisplayName: Mr Raccoon + Niko.DisplayName: Astramora Noctis NikoNPC: { - DisplayName: Niko + DisplayName: Astramora Noctis TownNPCMood: { Content: I am content.