From ccf993c077e779ec53675c7aa95b87cdfd13c64f Mon Sep 17 00:00:00 2001 From: FyloZ Date: Sat, 11 Jul 2020 13:23:16 -0400 Subject: [PATCH] Updated Skeleton Town NPC. --- Content/NPCs/TownNPCs/Skeleton.cs | 44 +++--- Content/NPCs/TownNPCs/Skeleton.png | Bin 8778 -> 4799 bytes Content/NPCs/TownNPCs/Skeleton_Head.png | Bin 321 -> 420 bytes Content/Projectiles/Bone.png | Bin 192 -> 325 bytes Content/Projectiles/SkeletonBone.cs | 176 +++++++++++++++++------- Content/Projectiles/SkeletonBone.png | Bin 192 -> 292 bytes 6 files changed, 150 insertions(+), 70 deletions(-) diff --git a/Content/NPCs/TownNPCs/Skeleton.cs b/Content/NPCs/TownNPCs/Skeleton.cs index af9cf9c..aef8fe1 100644 --- a/Content/NPCs/TownNPCs/Skeleton.cs +++ b/Content/NPCs/TownNPCs/Skeleton.cs @@ -15,7 +15,7 @@ namespace Decimation.Content.NPCs.TownNPCs [AutoloadHead] public class Skeleton : ModNPC { - private readonly List names = new List + private static readonly List Names = new List { "Tommy", "Johnny", @@ -27,34 +27,34 @@ namespace Decimation.Content.NPCs.TownNPCs public override bool Autoload(ref string name) { name = "Skeleton"; - return this.mod.Properties.Autoload; + return mod.Properties.Autoload; } public override void SetStaticDefaults() { - Main.npcFrameCount[this.npc.type] = 26; - NPCID.Sets.ExtraFramesCount[this.npc.type] = NPCID.Sets.ExtraFramesCount[NPCID.Guide]; - NPCID.Sets.AttackFrameCount[this.npc.type] = NPCID.Sets.AttackFrameCount[NPCID.Guide]; - NPCID.Sets.DangerDetectRange[this.npc.type] = 400; - NPCID.Sets.AttackType[this.npc.type] = 0; - NPCID.Sets.AttackTime[this.npc.type] = 60; - NPCID.Sets.AttackAverageChance[this.npc.type] = 30; - NPCID.Sets.HatOffsetY[this.npc.type] = 4; + Main.npcFrameCount[npc.type] = 26; + NPCID.Sets.ExtraFramesCount[npc.type] = NPCID.Sets.ExtraFramesCount[NPCID.Guide]; + NPCID.Sets.AttackFrameCount[npc.type] = NPCID.Sets.AttackFrameCount[NPCID.Guide]; + NPCID.Sets.DangerDetectRange[npc.type] = 400; + NPCID.Sets.AttackType[npc.type] = 0; + NPCID.Sets.AttackTime[npc.type] = 60; + NPCID.Sets.AttackAverageChance[npc.type] = 30; + NPCID.Sets.HatOffsetY[npc.type] = 4; } public override void SetDefaults() { - NPCID.Sets.AttackType[this.npc.type] = 0; - this.npc.CloneDefaults(NPCID.Guide); - this.npc.townNPC = true; - this.npc.friendly = true; - this.npc.aiStyle = 7; - this.npc.damage = 10; - this.npc.defense = 15; - this.npc.lifeMax = 250; - this.npc.HitSound = SoundID.DD2_SkeletonHurt; - this.npc.DeathSound = SoundID.DD2_SkeletonDeath; - this.npc.knockBackResist = 0.5f; + NPCID.Sets.AttackType[npc.type] = 0; + npc.CloneDefaults(NPCID.Guide); + npc.townNPC = true; + npc.friendly = true; + npc.aiStyle = 7; + npc.damage = 10; + npc.defense = 15; + npc.lifeMax = 250; + npc.HitSound = SoundID.DD2_SkeletonHurt; + npc.DeathSound = SoundID.DD2_SkeletonDeath; + npc.knockBackResist = 0.5f; animationType = NPCID.Guide; } @@ -90,7 +90,7 @@ namespace Decimation.Content.NPCs.TownNPCs public override string TownNPCName() { - return names[Main.rand.Next(5)]; + return Names[Main.rand.Next(5)]; } public override string GetChat() diff --git a/Content/NPCs/TownNPCs/Skeleton.png b/Content/NPCs/TownNPCs/Skeleton.png index 720a0b135d0aa445730f08671d9508d179d8c2f9..2661dc07ea9ccdff06cd50df64aa45d517672865 100644 GIT binary patch literal 4799 zcmeHLi9eKk-yV%ZSsG(9mh2kG(qN<^yO~iE2HBSknMg7?osp#+Vm2IGSw}`{!ckL* z7SCZuR6<#gP&(E?guC#F7M2Z=Lc&X=bjZLT^q+*&Xo3s1+|L+6jz9Oa#Ff0+h-zOFXlI99uA{{5$p}>X30gSB&IdGwb z9`l+F!%ofbQ|ahlUth$~#}OB!v^X-B19g%$)#Kvl=^2Kv$F$Zz9^dYgI7%sZXqsHT zV^vj0N4CA?z4V{9GBa`=R|!hHmU-r+t7lTX{Q6D)XM=`Y9!$aV^5@JgK|#l^dj;_4 z^-OlXUF#;|FxZ*dQ6*h)A>`R_YXY!(OXYFAg`Wqpcx!I`sT_a)>gwkJRqDx;<>klX zbE-b9&G?l_E({?Z+eel#9_AC^r^)MU0>S5mp$2W*$`1$53ivrt?W7%ctM9iNAd{0g zaFg}jOS~1vuzOA{!AWd5Dw0mV8jn|UEJI1&9^8?WBflrdxcr1h#bb)9YTTnO?kf@H zFl%eofl?g_u0Mmb{a#cVp}{)j>c=kX%{X*snEK(&JW#d&;rpGwmH`d3fI|lk^o4iJzgwbZq}t*|^EB>pH0v?_ojy z-)XmHjHDq{&dC7yzCI^&VzyQQw?aD+d8ug@>TL>V4;mAft9Waxc+pv*|x&21aTlkk`i+4TMs>p~ZAr>T=CgkJ=l2=2q-E=}nXhTw ziK%s+Dno_Pq)OwnW*k*38i@;Aov@ed*`dl6dnr#N(pM(zNx`@mMvch+Z7tqPbre>X zjW43RP{aRzkve|s&On~RVHqkZr^bHQ_9vRi#R2vc2_tEbSIlWHZD*yYC4O-PEFf(6>(?sp(R`Lh_ipQgRH|dMrTN55L-SGs06|8OsVIh zQTlBUE%^sqysv;GpAW-bYo)wGTMx5hrP3-~5ix{MUVDpiW#XaOb49Ia@D)N@(Ia#S zCB;;!q}KTXEG4%$_MEwk@ZN>iz$=lYqb5bi*_`&twZqOJY+o1xw+zo7|%14_}Pu`WONxEx%VEf zVwu5~s_K4qK81bg1$NiP@P4XIpw@2X`$hF+I584Ga-fvM`;Qv^;z^=eyLM|mtiC1y zXwzE>Z7)bLk*Ld6;AE;esj)g3!`1xSAYJBn_v6kkTprTtXF?h(7yyUHDW6R+fedu) zvk#?$5AmvDGwrK}d64(F-`#T%Hg^Qxz7G8R1Wo_e`A_1172p%zIn0Itn~BrR+NPN7 zU9DJS&BiCG5}0>|5WhXl_Xpci?S<0U$KNTQ8$oSIU!PafD%0S>|byprxQ|6Wh8qp>sb-d7ey%v3% z5qfoFl?Q6az%5@f?4mlcob9_Pkg(;l9x5cvcMl>$_e9~NF#T6Mj^ut{O6Vg8V5i!Oo2wmRt|8_{etPW5S8knUhQBEtNa z<;)Wz5u1bh=PTa^78XH@>=G)(d^otGggwYXots{<8kv!Gg|0OpCm|6l8(8!%^s17u z=Sy6!&QH?K-vKu0!srGMEby_Bxlm6q~9I=mB2Jq&OlHZAPqm1uQlRN08da)Olsm+oW+J{@zdToWgOD1LQ#@ ztVb@y{FhUG$K@h=C?l?OrBMo$5gwycu4%YjTjjI7H;SMXUR?}rKnn>voWzGK)R7<8 zV5OR+?`HgEZvIL1P;oixtU=?ViBAwkV6hGlZQ<*-R8mXt6yK^Ip(`EYi31!9?y z4`IF|jeIwhMlt4LoC*o&cZu8x&-TqPbX_3hJo2f69N2s%rak-K90eB6iT^dUSoVYu zN9KeXpHZ%N--D^$I67U#x_yQTKSMUdkMovBvrrl^n#ygPOXG@r{Wss&Z+ri++9d;8E;oemZTf)JaUI)pfbs5 zp}9B7HB`hw&Lq8>4ySi^QlH8}x7#kn=Nt_#@=gR2XI#K3gA!Qy6Lz1?2qEJ3e667iRC;6 zxUAQr#DdW6|Gu^`Fn$fKp1=+8cycbgwL?zV$7n|&vi>M8Qs#xDb3Sh97A?J2Cn|ei zA|$1f_Geu{0(9Vzjl0_pOAe-1cmnwcjwHR^@|0cp;g)dW-%lE5q6 z^4Quh=se+t6xL6qBGk~CkPs;W+@r?n@gy?*` zj8)LTGJW$;!1G@Da^ay>j+OFP5lXN1HINBScqD!{1J z1ZMG}%a!?G!*+ctumxH{0{J(Co{MnBUf!t?KjANfKZLePvs+D)`mY?XMbDQz7-}|( z#b_fOE9d>N_MURLI(D{DE&}kr@ce8olzP7`Swn2>p(U{3X(n_d+6${`4G#SPAv%$O zsX}Axe?hnm4NfHl6yCc{M}0EHwiFH8mQHkBr0mKuE>q93z!gg0 oQ<#dDD+~}!Bb~MPLuW)BsSCU1q|Z$V|2{Z?b;i`$9r^Kp06sJkPyhe` literal 8778 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 diff --git a/Content/NPCs/TownNPCs/Skeleton_Head.png b/Content/NPCs/TownNPCs/Skeleton_Head.png index e4e61c0398b69f6c945ccdadb49ee06645cfb096..f1349fe3d687966011eb12ff4044f1f63c266af1 100644 GIT binary patch literal 420 zcmV;V0bBlwP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0Xa!TK~zXfy_G>~ z!cY)~U&Ir1p&~+#P|@PbBe<;x=mn|;-MdxLdJN;%otrLNgpw9LLO{g2@CZg`-u!`% ziMy8%hJT(3`2X|r5-*NpbB}uE>Fy1?zaLN9R0^WbxJjTLkEb2!EQjbIo#lQ0E1g9r za-TrdJeHg6eEl)vH8`Il)@XlX1xWJwePIRRX3L5s?i0ZIB6#5+9!fqdoNJIISngS~ zKoaK(l0P74ROCF(J+9O2soJdq7tm|qeh);GrwHKrAHJST5Jh1Ziew5Jlp=9SkrBcO9)ipfDXlvyR)7xCp-e#fL|pWVe6|Bp4mT&Ct$&ZN zI}=BNl_be4bT;MtzK?z9-sE&qOb|jvQFsA|VW7M*h9W0*2*m^;q_w8XS(aIZUDwgR zX&QPRT;bIY%Wog+6G9-h9VuGl&wxL60m>8!Imqu<;kT-POww7nc+-R@VnIiYhndQv{ zqv*+pg7#_p=}Rp1Tkt*nzI(!gcxB)ryjn|!d-J4-3GzPl8u{ZN!tXnM_^;p_4V40@ THl6gM00000NkvXXu0mjf;b@3w diff --git a/Content/Projectiles/Bone.png b/Content/Projectiles/Bone.png index 6ff2fcdd87fd0c969fcf5b53b2b6c9230c226cc2..bdf75ba944f9b1b6db708ed6bbddadae984722ea 100644 GIT binary patch delta 298 zcmV+_0oDG%0mTB4B!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000id z000id0mpBsWB>pF+DSw~R7gu>WPk#FapV6`CKz0Nc@`{(OPmSJBLgtPOzi6O0Sm~> zh=J+u{&QeDEK~+e8ycB{X;+7OFip0NEKnM5laQD^n6@#y0Dq=o;^)tu2GcM=z8|49 zJoF0kjlg_#FkvFZ&yi^!rN9^$7!G~}rBPTq#Ri6hA0Iw> z1;)4l^=*9i@EI860)r@U2!R18b8wa9$B#nFRqsH5F#Yb;Logj4HV;gbZ6mxSht&PH3!04|GBRj}(AM*si-07*qoM6N<$f>{D}+5i9m delta 164 zcmV;V09*gX0>A-~B!7lUL_t(YOJih!0uvME|1dU)K6B zBGHcq4pKfGO*u%}9lZ=1gn@&rn52H0L&zrdVv_Q5mFiUh!5vD6>}rl&jQ~7&>T|-G S1^xg4002ovPDHLkV1fW!dP1K7 diff --git a/Content/Projectiles/SkeletonBone.cs b/Content/Projectiles/SkeletonBone.cs index 6cc1873..7184571 100644 --- a/Content/Projectiles/SkeletonBone.cs +++ b/Content/Projectiles/SkeletonBone.cs @@ -1,16 +1,64 @@ -using System; -using System.IO; -using Decimation.Content.Items.Weapons; -using Decimation.Lib.Items; +using Decimation.Lib.Items; +using Decimation.Lib.Util; +using Microsoft.Xna.Framework; using Terraria; using Terraria.ID; -using Terraria.ModLoader; namespace Decimation.Content.Projectiles { - internal class SkeletonBone : DecimationProjectile + internal class SkeletonBone : DecimationProjectile { - private float maxSpeed = 5f; + private const int IdlingCounterMax = 60; + private const int TargetingCounterMax = 90; + private const float IdlingVelocity = 5f; + private const float AttackingVelocity = 10f; + + private AiState State + { + get + { + { + switch ((int) projectile.ai[0]) + { + case 0: return AiState.Idling; + case 1: return AiState.Targeting; + default: return AiState.Attacking; + } + } + } + set + { + int state; + switch (value) + { + case AiState.Idling: + state = 0; + break; + case AiState.Targeting: + state = 1; + break; + default: + state = 2; + break; + } + + projectile.ai[0] = state; + } + } + + private int Counter + { + get => (int) projectile.ai[1]; + set => projectile.ai[1] = value; + } + + private int Target + { + get => (int) projectile.localAI[0]; + set => projectile.localAI[0] = value; + } + + private NPC TargetNPC => Main.npc[Target]; protected override void Init() { @@ -20,76 +68,108 @@ namespace Decimation.Content.Projectiles projectile.ignoreWater = true; projectile.tileCollide = false; DamageType = DecimationWeapon.DamageType.Ranged; - projectile.penetrate = 2; - projectile.timeLeft = 60; + projectile.penetrate = -1; + projectile.damage = 0; + projectile.timeLeft = 600; + projectile.friendly = false; + projectile.hostile = false; + projectile.damage = 80; Damages = Main.expertMode ? 57 : 20; - projectile.localAI[0] = 15; + Target = 255; } - // ai 0: target, ai 1: state, localAI 0: rotation - - private int counter = 0; - public override void AI() { - /*if (projectile.ai[1] == 0) + if (State == AiState.Idling) { - projectile.localAI[0] = 15; + projectile.rotation += MathHelper.Pi * (1 / 64f); + projectile.velocity.Normalize(); + projectile.velocity *= IdlingVelocity; - if (timeLeft < 10) + if (Counter > IdlingCounterMax) { - projectile.ai[1]++; - timeLeft = 600; - projectile.velocity *= 0; + Counter = 0; + State = AiState.Targeting; } + + Counter++; } - else if (projectile.ai[1] == 1) + else if (State == AiState.Targeting) { - if (Main.netMode != 1) - counter++; + projectile.velocity *= 0f; + projectile.rotation += MathHelper.Pi * (1 / 64f) * (1 + Counter / 10); - projectile.localAI[0] += 4; - - if (counter >= 60) + if (Counter > TargetingCounterMax) { - projectile.ai[1]++; - counter = 0; + FindTarget(); + + State = AiState.Attacking; } + + Counter++; } - else if (projectile.ai[1] == 2) + else if (State == AiState.Attacking) { - NPC target = NPC.get - Vector2 velocity = target.position - projectile.position; - - float magnitude = (float)Math.Sqrt(velocity.X * velocity.X + velocity.Y * velocity.Y); - if (magnitude > maxSpeed) + if (Target >= 255) { - float ratio = maxSpeed / magnitude; - velocity.X *= ratio; - velocity.Y *= ratio; + projectile.Kill(); + return; } + Vector2 velocity = TargetNPC.Center - projectile.Center; + velocity.Normalize(); + velocity *= AttackingVelocity; + + projectile.friendly = true; + projectile.penetrate = 1; projectile.velocity = velocity; - projectile.ai[1]++; - }*/ + projectile.rotation += MathHelper.Pi * (1 / 64f) * (1 + Counter / 10); + } - projectile.rotation += (float)(Math.PI / projectile.localAI[0]); + int dust = Dust.NewDust(projectile.position, projectile.width, projectile.height, 125); + Main.dust[dust].noGravity = true; + Lighting.AddLight(projectile.Center, LightingUtils.Rgb255ToRgb1(143, 214, 255)); } - public override void SendExtraAI(BinaryWriter writer) + public override void Kill(int timeLeft) { - writer.Write(counter); - } - - public override void ReceiveExtraAI(BinaryReader reader) - { - counter = reader.ReadInt32(); + DustUtils.NewDustCircle(8, projectile.position, projectile.width, projectile.height, 135, + projectile.scale * 4f); } public override void OnHitPlayer(Player target, int damage, bool crit) { if (Main.expertMode && Main.rand.Next(100) < 35) target.AddBuff(BuffID.Confused, 600); } + + private void FindTarget() + { + if (Target >= 255) + { + float lastDistance = float.MaxValue; + + for (int i = 0; i < Main.npc.Length; i++) + { + NPC npc = Main.npc[i]; + if (npc != null && npc.active && !npc.townNPC && npc.damage > 0 && projectile.CanHit(npc)) + { + float distance = projectile.Distance(npc.Center); + if (distance < 400f && distance < lastDistance) + { + lastDistance = distance; + Target = i; + } + } + } + } + } + + private enum AiState + { + Idling = 0, + Targeting = 1, + Attacking = 2 + } } -} +} \ No newline at end of file diff --git a/Content/Projectiles/SkeletonBone.png b/Content/Projectiles/SkeletonBone.png index cf78ad52c13c3dcce388e49f62904dd39d29d64d..dedc0df1bff382f0df56d4f55f86538c40728e4e 100644 GIT binary patch delta 265 zcmV+k0rvjD0i*(uB!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000id z000id0mpBsWB>pFxk*GpR7gu>WPk#u>Yx9iOfdM@$_|#pDGuh50T^K>9;#sj3&249 zMTkWU_2G^J1G|=AV47?jF*HhZ`~qVbKEzD7`rK~FWvfciG#N-;1nhysTY7(^PM{$K-RT!8vEg326Nxq}T1 zqQD^p2B6GAFUes!!sR5y<~`;Rn_zKD{gNC##o$Uo)C*M@pi%wEzyJV922m*1<5hnE P0000A-~B!7lUL_t(YOJih!0<}&1|HIfI`j(#~BZ$T&4wl5H0H;Qn#0Nc7 zWD6MtE}aJRafvfhT_cM1NF10;aN0;vBYNPV`w1owvk4a37@ zBGHcq4pKfGO*u%}9lZ=1gn@&rn52H0L&zrdVv_Q5mFiUh!5vD6>}rl&jQ}mg^3#0A S!eamc002ovPDHLkV1fYd6GQm`