crow real
Terrarian
I'm trying to make a stardust dragon kinda projectile, but the source code i'm using (Fargo's Souls) makes me use a utility from the mod that i can't use, and i can't find anything about making projectiles follow another projectile.
C#:
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System.Collections.Generic;
using System.IO;
using Terraria;
using Terraria.GameContent;
using Terraria.ID;
using Terraria.ModLoader;
namespace funnymodthing123.Content.Projectiles.Minions
{
public class SnakeTail : ModProjectile
{
public override void SetStaticDefaults()
{
// DisplayName.SetDefault("Eater Tail");
ProjectileID.Sets.CultistIsResistantTo[Projectile.type] = true;
}
public override void SetDefaults()
{
Projectile.width = 30;
Projectile.height = 48;
Projectile.penetrate = -1;
Projectile.timeLeft *= 5;
Projectile.minion = true;
Projectile.DamageType = DamageClass.Summon;
Projectile.friendly = true;
Projectile.ignoreWater = true;
Projectile.tileCollide = false;
Projectile.alpha = 255;
Projectile.netImportant = true;
Projectile.hide = true;
}
public override void SendExtraAI(BinaryWriter writer)
{
writer.Write(Projectile.localAI[0]);
writer.Write(Projectile.localAI[1]);
}
public override void ReceiveExtraAI(BinaryReader reader)
{
Projectile.localAI[0] = reader.ReadSingle();
Projectile.localAI[1] = reader.ReadSingle();
}
public override Color? GetAlpha(Color lightColor)
{
return Color.White;
}
public override void DrawBehind(int index, List<int> behindNPCsAndTiles, List<int> behindNPCs, List<int> behindProjectiles, List<int> overPlayers, List<int> overWiresUI)
{
behindProjectiles.Add(index);
}
public override bool PreDraw(ref Color lightColor)
{
Texture2D texture2D13 = TextureAssets.Projectile[Projectile.type].Value;
int num214 = TextureAssets.Projectile[Projectile.type].Value.Height / Main.projFrames[Projectile.type];
int y6 = num214 * Projectile.frame;
Color color25 = Lighting.GetColor((int)(Projectile.Center.X / 16), (int)(Projectile.Center.Y / 16));
Main.EntitySpriteDraw(texture2D13, Projectile.Center - Main.screenPosition + new Vector2(0f, Projectile.gfxOffY), new Rectangle(0, y6, texture2D13.Width, num214),
color25, Projectile.rotation, new Vector2(texture2D13.Width / 2f, num214 / 2f), Projectile.scale,
Projectile.spriteDirection == 1 ? SpriteEffects.None : SpriteEffects.FlipHorizontally, 0);
return false;
}
public override void AI()
{
Player player = Main.player[Projectile.owner];
if ((int)Main.time % 120 == 0) Projectile.netUpdate = true;
if (!player.active)
{
Projectile.active = false;
return;
}
//D U S T
/*if (Main.rand.NextBool(30))
{
int num1039 = Dust.NewDust(Projectile.position, Projectile.width, Projectile.height, 135, 0f, 0f, 0, default(Color), 2f);
Main.dust[num1039].noGravity = true;
Main.dust[num1039].fadeIn = 2f;
Point point4 = Main.dust[num1039].position.ToTileCoordinates();
if (WorldGen.InWorld(point4.X, point4.Y, 5) && WorldGen.SolidTile(point4.X, point4.Y))
{
Main.dust[num1039].noLight = true;
}
}*/
bool flag67 = false;
Vector2 value67 = Vector2.Zero;
Vector2 arg_2D865_0 = Vector2.Zero;
float num1052 = 0f;
if (Projectile.ai[1] == 1f)
{
Projectile.ai[1] = 0f;
Projectile.netUpdate = true;
}
int byIdentity = FargoSoulsUtil.GetProjectileByIdentity(Projectile.owner, (int)Projectile.ai[0], ModContent.ProjectileType<EaterBody>());
if (byIdentity >= 0 && Main.projectile[byIdentity].active)
{
flag67 = true;
value67 = Main.projectile[byIdentity].Center;
Vector2 arg_2D957_0 = Main.projectile[byIdentity].velocity;
num1052 = Main.projectile[byIdentity].rotation;
float num1053 = MathHelper.Clamp(Main.projectile[byIdentity].scale, 0f, 50f);
int arg_2D9AD_0 = Main.projectile[byIdentity].alpha;
Main.projectile[byIdentity].localAI[0] = Projectile.localAI[0] + 1f;
if (Main.projectile[byIdentity].type != ModContent.ProjectileType<EaterHead>()) Main.projectile[byIdentity].localAI[1] = Projectile.identity;
if (Projectile.owner == player.whoAmI && Main.projectile[byIdentity].type == ModContent.ProjectileType<EaterHead>())
{
Main.projectile[byIdentity].Kill();
Projectile.Kill();
return;
}
}
if (!flag67) return;
if (Projectile.alpha > 0)
for (int num1054 = 0; num1054 < 2; num1054++)
{
int num1055 = Dust.NewDust(Projectile.position, Projectile.width, Projectile.height, DustID.IceTorch, 0f, 0f, 100, default, 2f);
Main.dust[num1055].noGravity = true;
Main.dust[num1055].noLight = true;
}
Projectile.alpha -= 42;
if (Projectile.alpha < 0) Projectile.alpha = 0;
Projectile.velocity = Vector2.Zero;
Vector2 vector134 = value67 - Projectile.Center;
if (num1052 != Projectile.rotation)
{
float num1056 = MathHelper.WrapAngle(num1052 - Projectile.rotation);
vector134 = vector134.RotatedBy(num1056 * 0.1f, default);
}
Projectile.rotation = vector134.ToRotation() + 1.57079637f;
Projectile.position = Projectile.Center;
Projectile.width = Projectile.height = (int)(num1038 * Projectile.scale);
Projectile.Center = Projectile.position;
if (vector134 != Vector2.Zero) Projectile.Center = value67 - Vector2.Normalize(vector134) * 35;
Projectile.spriteDirection = vector134.X > 0f ? 1 : -1;
}
}
}