예제 #1
0
        public static void Add()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("Red Robin", "redrobin");

            Game.Items.Rename("outdated_gun_mods:red_robin", "nn:red_robin");
            gun.gameObject.AddComponent <RedRobin>();
            gun.SetShortDescription("Healthy Option");
            gun.SetLongDescription("Deals bonus damage at full health." + "\n\nThe signature weapon of Gungeoneer 'Hearts Ferros', famous for never being shot in a gunfight... until he was.");

            gun.SetupSprite(null, "redrobin_idle_001", 8);

            gun.SetAnimationFPS(gun.shootAnimation, 13);

            gun.AddProjectileModuleFrom(PickupObjectDatabase.GetById(56) as Gun, true, false);

            //GUN STATS
            gun.DefaultModule.ammoCost      = 1;
            gun.DefaultModule.shootStyle    = ProjectileModule.ShootStyle.SemiAutomatic;
            gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random;
            gun.reloadTime = 1f;
            gun.DefaultModule.cooldownTime           = 0.15f;
            gun.DefaultModule.angleFromAim           = 0;
            gun.DefaultModule.angleVariance          = 12;
            gun.DefaultModule.numberOfShotsInClip    = 13;
            gun.barrelOffset.transform.localPosition = new Vector3(23f / 16f, 11f / 16f, 0f);
            gun.SetBaseMaxAmmo(300);
            gun.ammo     = 300;
            gun.gunClass = GunClass.SILLY;

            gun.muzzleFlashEffects = VFXToolbox.CreateVFXPool("RedRobin Muzzleflash",
                                                              new List <string>()
            {
                "NevernamedsItems/Resources/MiscVFX/GunVFX/redrobin_muzzleflash_002",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/redrobin_muzzleflash_003",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/redrobin_muzzleflash_004",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/redrobin_muzzleflash_005",
            },
                                                              13,                               //FPS
                                                              new IntVector2(9, 16),            //Dimensions
                                                              tk2dBaseSprite.Anchor.MiddleLeft, //Anchor
                                                              false,                            //Uses a Z height off the ground
                                                              0,                                //The Z height, if used
                                                              false,
                                                              VFXAlignment.Fixed
                                                              );

            Projectile projectile = gun.DefaultModule.projectiles[0].gameObject.InstantiateAndFakeprefab().GetComponent <Projectile>();

            gun.DefaultModule.projectiles[0] = projectile;
            projectile.baseData.damage       = 5f;
            projectile.SetProjectileSpriteRight("redrobin_projectile", 12, 6, true, tk2dBaseSprite.Anchor.MiddleCenter, 12, 6);
            projectile.hitEffects.overrideMidairDeathVFX = EasyVFXDatabase.RedLaserCircleVFX;
            projectile.hitEffects.alwaysUseMidair        = true;

            gun.DefaultModule.ammoType = GameUIAmmoType.AmmoType.SMALL_BLASTER;
            gun.quality = PickupObject.ItemQuality.D;
            ETGMod.Databases.Items.Add(gun, null, "ANY");
            ID = gun.PickupObjectId;
        }
        public static void Add()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("Boltcaster", "nnboltcaster");

            Game.Items.Rename("outdated_gun_mods:boltcaster", "nn:boltcaster");
            var behav = gun.gameObject.AddComponent <Boltcaster>();

            gun.SetShortDescription("It Belongs In A Museum");
            gun.SetLongDescription("An old relic of one of the many rebel groups that have risen up against- and inevitably broken against the unshakeable Hegemony of Man." + "\n\nThe magnetic mass driver orbs give it the appearance of a crossbow.");
            behav.preventNormalFireAudio  = true;
            behav.overrideNormalFireAudio = "Play_WPN_plasmarifle_shot_01";

            gun.SetupSprite(null, "nnboltcaster_idle_001", 8);
            gun.SetAnimationFPS(gun.shootAnimation, 16);
            gun.SetAnimationFPS(gun.reloadAnimation, 0);

            gun.muzzleFlashEffects = VFXToolbox.CreateVFXPool("Boltcaster Muzzleflash",
                                                              new List <string>()
            {
                "NevernamedsItems/Resources/MiscVFX/GunVFX/Boltcaster/boltcaster_muzzleflash_001",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/Boltcaster/boltcaster_muzzleflash_002",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/Boltcaster/boltcaster_muzzleflash_003",
            },
                                                              10,                               //FPS
                                                              new IntVector2(49, 26),           //Dimensions
                                                              tk2dBaseSprite.Anchor.MiddleLeft, //Anchor
                                                              false,                            //Uses a Z height off the ground
                                                              0,                                //The Z height, if used
                                                              false,
                                                              VFXAlignment.Fixed
                                                              );



            gun.AddProjectileModuleFrom(PickupObjectDatabase.GetById(56) as Gun, true, false);
            gun.DefaultModule.ammoCost      = 1;
            gun.DefaultModule.shootStyle    = ProjectileModule.ShootStyle.SemiAutomatic;
            gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random;
            gun.reloadTime = 1.1f;
            gun.DefaultModule.cooldownTime        = 0.5f;
            gun.DefaultModule.numberOfShotsInClip = 1;
            gun.DefaultModule.angleVariance       = 0f;
            gun.SetBaseMaxAmmo(100);
            gun.gunClass = GunClass.RIFLE;
            gun.barrelOffset.transform.localPosition = new Vector3(27f / 16f, 7f / 16f, 0f);

            //BULLET STATS
            Projectile projectile = gun.DefaultModule.projectiles[0].gameObject.InstantiateAndFakeprefab().GetComponent <Projectile>();

            gun.DefaultModule.projectiles[0] = projectile;
            projectile.baseData.damage       = 30f;
            projectile.baseData.speed       *= 3f;
            projectile.baseData.range       *= 3f;
            projectile.SetProjectileSpriteRight("boltcaster_proj", 23, 3, true, tk2dBaseSprite.Anchor.MiddleCenter, 13, 3);
            projectile.hitEffects            = (PickupObjectDatabase.GetById(543) as Gun).DefaultModule.projectiles[0].hitEffects;
            projectile.pierceMinorBreakables = true;
            projectile.baseData.force       *= 4f;

            gun.quality = PickupObject.ItemQuality.B;

            ETGMod.Databases.Items.Add(gun, null, "ANY");

            gun.SetupUnlockOnCustomFlag(CustomDungeonFlags.BOSSRUSH_HUNTER, true);
        }
        public static void Add()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("Rebar Gun", "rebargun");

            Game.Items.Rename("outdated_gun_mods:rebar_gun", "nn:rebar_gun");
            gun.gameObject.AddComponent <RebarGun>();
            gun.SetShortDescription("Raising the Bar");
            gun.SetLongDescription("An incredibly satisfying piece of industrial machinery, designed specifically for killing adorable wildlife.");

            gun.SetupSprite(null, "rebargun_idle_001", 8);
            gun.gunSwitchGroup = (PickupObjectDatabase.GetById(806) as Gun).gunSwitchGroup;

            gun.SetAnimationFPS(gun.shootAnimation, 16);
            gun.AddProjectileModuleFrom(PickupObjectDatabase.GetById(56) as Gun, true, false);

            //VFX
            List <string> RebarGunImpactVFX = new List <string>()
            {
                "NevernamedsItems/Resources/MiscVFX/GunVFX/RebarGunImpactVFX2_001",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/RebarGunImpactVFX2_002",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/RebarGunImpactVFX2_003",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/RebarGunImpactVFX2_004",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/RebarGunImpactVFX2_005",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/RebarGunImpactVFX2_006",
            };
            VFXPool VFXOBj = VFXToolbox.CreateVFXPool("Rebar Gun Impact VFX", RebarGunImpactVFX, 16, new IntVector2(11, 8), tk2dBaseSprite.Anchor.MiddleLeft, false, 0, true);

            //GUN STATS
            gun.muzzleFlashEffects          = (PickupObjectDatabase.GetById(12) as Gun).muzzleFlashEffects;
            gun.DefaultModule.ammoCost      = 1;
            gun.DefaultModule.shootStyle    = ProjectileModule.ShootStyle.SemiAutomatic;
            gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random;
            gun.reloadTime = 1.21f;
            gun.DefaultModule.cooldownTime           = 0.3f;
            gun.DefaultModule.numberOfShotsInClip    = 3;
            gun.barrelOffset.transform.localPosition = new Vector3(1.5f, 0.87f, 0f);
            gun.SetBaseMaxAmmo(170);
            gun.gunClass = GunClass.PISTOL;
            //BULLET STATS
            Projectile projectile = UnityEngine.Object.Instantiate <Projectile>(gun.DefaultModule.projectiles[0]);

            projectile.gameObject.SetActive(false);
            FakePrefab.MarkAsFakePrefab(projectile.gameObject);
            UnityEngine.Object.DontDestroyOnLoad(projectile);
            gun.DefaultModule.projectiles[0] = projectile;
            projectile.transform.parent      = gun.barrelOffset;
            projectile.SetProjectileSpriteRight("rebargun_proj", 20, 2, false, tk2dBaseSprite.Anchor.MiddleCenter, 6, 2);
            projectile.baseData.speed *= 4f;
            projectile.baseData.damage = 20f;
            projectile.baseData.force *= 5;
            projectile.hitEffects.deathTileMapHorizontal = VFXOBj;
            projectile.hitEffects.tileMapHorizontal      = VFXOBj;

            //Custom Clip VFX
            gun.DefaultModule.ammoType       = GameUIAmmoType.AmmoType.CUSTOM;
            gun.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("Rebar Shells", "NevernamedsItems/Resources/CustomGunAmmoTypes/rebargun_clipfull", "NevernamedsItems/Resources/CustomGunAmmoTypes/rebargun_clipempty");

            gun.quality = PickupObject.ItemQuality.B;
            ETGMod.Databases.Items.Add(gun, null, "ANY");
            //gun.SetupUnlockOnCustomFlag(CustomDungeonFlags.PURCHASED_BLASMASTER, true);

            RebarGunID = gun.PickupObjectId;
        }
예제 #4
0
        public static void Add()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("Blowgun", "blowgun");

            Game.Items.Rename("outdated_gun_mods:blowgun", "nn:blowgun");
            var behav = gun.gameObject.AddComponent <Blowgun>();

            behav.preventNormalReloadAudio = true;
            gun.SetShortDescription("Huff and Puff");
            gun.SetLongDescription("Relies on lung strength to propel poisonous darts." + "\n\nRobots may need to hold it up to a cooling vent or something.");

            gun.SetupSprite(null, "blowgun_idle_001", 8);

            gun.SetAnimationFPS(gun.shootAnimation, 15);

            gun.AddProjectileModuleFrom(PickupObjectDatabase.GetById(56) as Gun, true, false);
            gun.gunSwitchGroup = (PickupObjectDatabase.GetById(150) as Gun).gunSwitchGroup;

            //GUN STATS
            gun.muzzleFlashEffects          = (PickupObjectDatabase.GetById(26) as Gun).muzzleFlashEffects;
            gun.DefaultModule.ammoCost      = 1;
            gun.DefaultModule.shootStyle    = ProjectileModule.ShootStyle.SemiAutomatic;
            gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random;
            gun.reloadTime = 0.5f;
            gun.DefaultModule.cooldownTime           = 0.2f;
            gun.DefaultModule.numberOfShotsInClip    = 1;
            gun.barrelOffset.transform.localPosition = new Vector3(1.12f, 0.18f, 0f);
            gun.SetBaseMaxAmmo(200);
            gun.gunClass = GunClass.POISON;
            //BULLET STATS
            Projectile projectile = UnityEngine.Object.Instantiate <Projectile>(gun.DefaultModule.projectiles[0]);

            projectile.gameObject.SetActive(false);
            FakePrefab.MarkAsFakePrefab(projectile.gameObject);
            UnityEngine.Object.DontDestroyOnLoad(projectile);
            gun.DefaultModule.projectiles[0] = projectile;
            projectile.transform.parent      = gun.barrelOffset;
            projectile.baseData.speed       *= 2f;
            projectile.damageTypes          |= CoreDamageTypes.Poison;
            ExtremelySimplePoisonBulletBehaviour poisoning = projectile.gameObject.AddComponent <ExtremelySimplePoisonBulletBehaviour>();

            poisoning.procChance     = 1;
            poisoning.useSpecialTint = false;
            projectile.SetProjectileSpriteRight("blowgun_projectile", 16, 7, false, tk2dBaseSprite.Anchor.MiddleCenter, 15, 8);

            VFXPool HorizVFXOBj = VFXToolbox.CreateVFXPool("Blowgun Tilemap VFX Horiz",
                                                           new List <string>()
            {
                "NevernamedsItems/Resources/MiscVFX/GunVFX/PoisonDarts/poisondart_impacthoriz_001",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/PoisonDarts/poisondart_impacthoriz_002",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/PoisonDarts/poisondart_impacthoriz_003",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/PoisonDarts/poisondart_impacthoriz_004",
            },
                                                           10,
                                                           new IntVector2(12, 11),
                                                           tk2dBaseSprite.Anchor.MiddleLeft,
                                                           false,
                                                           0,
                                                           true);

            projectile.hitEffects.deathTileMapHorizontal = HorizVFXOBj;
            projectile.hitEffects.tileMapHorizontal      = HorizVFXOBj;

            projectile.hitEffects.deathTileMapVertical = HorizVFXOBj;
            projectile.hitEffects.tileMapVertical      = HorizVFXOBj;

            gun.DefaultModule.ammoType       = GameUIAmmoType.AmmoType.CUSTOM;
            gun.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("Blowgun Darts", "NevernamedsItems/Resources/CustomGunAmmoTypes/blowgun_clipfull", "NevernamedsItems/Resources/CustomGunAmmoTypes/blowgun_clipempty");

            gun.quality = PickupObject.ItemQuality.D;
            gun.encounterTrackable.EncounterGuid = "this is the Blowgun";
            ETGMod.Databases.Items.Add(gun, null, "ANY");

            foreach (tk2dSpriteAnimationClip clip in AdjustGunPosition.GetGunAnimationClips(gun))
            {
                foreach (tk2dSpriteAnimationFrame frame in clip.frames)
                {
                    frame.spriteCollection.spriteDefinitions[frame.spriteId].ApplyOffset(new Vector2(0, 0f));
                }
            }

            BlowgunID = gun.PickupObjectId;
        }
        public static void Add()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("Stick Gun", "stickgun");

            Game.Items.Rename("outdated_gun_mods:stick_gun", "nn:stick_gun");
            var behav = gun.gameObject.AddComponent <StickGun>();

            behav.preventNormalReloadAudio = true;
            behav.preventNormalFireAudio   = true;
            behav.overrideNormalFireAudio  = "Play_PencilScratch";
            gun.SetShortDescription("Scribble");
            gun.SetLongDescription("Carried by a brave stickman as he ventured through the pages of a bored child's homework." + "\n\nHe may be long erased, but his legacy lives on.");

            gun.SetupSprite(null, "stickgun_idle_001", 8);

            gun.AddProjectileModuleFrom(PickupObjectDatabase.GetById(56) as Gun, true, false);

            //GUN STATS
            gun.DefaultModule.ammoCost      = 1;
            gun.DefaultModule.shootStyle    = ProjectileModule.ShootStyle.SemiAutomatic;
            gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random;
            gun.reloadTime = 0.7f;
            gun.DefaultModule.cooldownTime           = 0.1f;
            gun.DefaultModule.numberOfShotsInClip    = 3;
            gun.barrelOffset.transform.localPosition = new Vector3(0.93f, 0.68f, 0f);
            gun.SetBaseMaxAmmo(222);
            gun.ammo          = 222;
            gun.gunClass      = GunClass.SHITTY;
            gun.gunHandedness = GunHandedness.OneHanded;

            //VFX
            gun.muzzleFlashEffects = VFXToolbox.CreateVFXPool("Stick Gun Muzzleflash",
                                                              new List <string>()
            {
                "NevernamedsItems/Resources/MiscVFX/GunVFX/StickGun/stickgun_muzzleflash_001",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/StickGun/stickgun_muzzleflash_002",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/StickGun/stickgun_muzzleflash_003",
            },
                                                              6,                                //FPS
                                                              new IntVector2(12, 13),           //Dimensions
                                                              tk2dBaseSprite.Anchor.MiddleLeft, //Anchor
                                                              false,                            //Uses a Z height off the ground
                                                              0,                                //The Z height, if used
                                                              false,
                                                              VFXAlignment.Fixed
                                                              );

            //BULLET STATS
            Projectile projectile = UnityEngine.Object.Instantiate <Projectile>(gun.DefaultModule.projectiles[0]);

            projectile.gameObject.SetActive(false);
            FakePrefab.MarkAsFakePrefab(projectile.gameObject);
            UnityEngine.Object.DontDestroyOnLoad(projectile);
            projectile.baseData.damage = 6f;
            projectile.baseData.speed *= 1.5f;

            PierceProjModifier pierce = projectile.gameObject.AddComponent <PierceProjModifier>();

            pierce.penetration = 1;

            projectile.SetProjectileSpriteRight("stickgun_projectile", 12, 2, false, tk2dBaseSprite.Anchor.MiddleCenter, 12, 2);
            gun.DefaultModule.projectiles[0] = projectile;

            //Projectile VFX

            projectile.hitEffects.overrideMidairDeathVFX = VFXToolbox.CreateVFX("Stick Gun MidairDeath",
                                                                                new List <string>()
            {
                "NevernamedsItems/Resources/MiscVFX/GunVFX/StickGun/stickgun_impact_001",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/StickGun/stickgun_impact_002",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/StickGun/stickgun_impact_003",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/StickGun/stickgun_impact_004",
            },
                                                                                6,                                  //FPS
                                                                                new IntVector2(16, 15),             //Dimensions
                                                                                tk2dBaseSprite.Anchor.MiddleCenter, //Anchor
                                                                                false,                              //Uses a Z height off the ground
                                                                                0                                   //The Z height, if used
                                                                                );

            projectile.hitEffects.tileMapHorizontal = VFXToolbox.CreateVFXPool("Stick Gun TileMapHoriz",
                                                                               new List <string>()
            {
                "NevernamedsItems/Resources/MiscVFX/GunVFX/StickGun/stickgun_tilemaphoriz_001",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/StickGun/stickgun_tilemaphoriz_002",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/StickGun/stickgun_tilemaphoriz_003"
            },
                                                                               6,                                //FPS
                                                                               new IntVector2(12, 21),           //Dimensions
                                                                               tk2dBaseSprite.Anchor.MiddleLeft, //Anchor
                                                                               false,                            //Uses a Z height off the ground
                                                                               0                                 //The Z height, if used
                                                                               );

            projectile.hitEffects.tileMapVertical = VFXToolbox.CreateVFXPool("Stick Gun TileMapVert",
                                                                             new List <string>()
            {
                "NevernamedsItems/Resources/MiscVFX/GunVFX/StickGun/stickgun_tilemapvert_001",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/StickGun/stickgun_tilemapvert_002",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/StickGun/stickgun_tilemapvert_003"
            },
                                                                             6,                                //FPS
                                                                             new IntVector2(18, 21),           //Dimensions
                                                                             tk2dBaseSprite.Anchor.MiddleLeft, //Anchor
                                                                             false,                            //Uses a Z height off the ground
                                                                             0                                 //The Z height, if used
                                                                             );

            projectile.hitEffects.enemy = VFXToolbox.CreateVFXPool("Stick Gun EnemyImpact",
                                                                   new List <string>()
            {
                "NevernamedsItems/Resources/MiscVFX/GunVFX/StickGun/stickgun_enemyimpact_001",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/StickGun/stickgun_enemyimpact_002",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/StickGun/stickgun_enemyimpact_003",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/StickGun/stickgun_enemyimpact_004"
            },
                                                                   6,                                  //FPS
                                                                   new IntVector2(15, 16),             //Dimensions
                                                                   tk2dBaseSprite.Anchor.MiddleCenter, //Anchor
                                                                   false,                              //Uses a Z height off the ground
                                                                   0,                                  //The Z height, if used
                                                                   false,
                                                                   VFXAlignment.Fixed
                                                                   );

            gun.DefaultModule.ammoType       = GameUIAmmoType.AmmoType.CUSTOM;
            gun.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("StickGun Bullets", "NevernamedsItems/Resources/CustomGunAmmoTypes/stickgun_clipfull", "NevernamedsItems/Resources/CustomGunAmmoTypes/stickgun_clipempty");

            gun.quality = PickupObject.ItemQuality.D;
            ETGMod.Databases.Items.Add(gun, null, "ANY");
            StickGunID = gun.PickupObjectId;
        }
        public static void Add()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("Square Peg", "squarepeg");

            Game.Items.Rename("outdated_gun_mods:square_peg", "nn:square_peg");
            gun.gameObject.AddComponent <SquarePeg>();
            gun.SetShortDescription("In A Round Chamber");
            gun.SetLongDescription("[] A perfect example of the art of cubism.");

            gun.SetupSprite(null, "squarepeg_idle_001", 8);

            gun.SetAnimationFPS(gun.shootAnimation, 15);

            gun.AddProjectileModuleFrom(PickupObjectDatabase.GetById(86) as Gun, true, false);
            gun.gunSwitchGroup = (PickupObjectDatabase.GetById(475) as Gun).gunSwitchGroup;

            //GUN STATS
            gun.DefaultModule.ammoCost      = 1;
            gun.DefaultModule.shootStyle    = ProjectileModule.ShootStyle.SemiAutomatic;
            gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random;
            gun.reloadTime = 1f;
            gun.DefaultModule.cooldownTime           = 0.12f;
            gun.DefaultModule.numberOfShotsInClip    = 6;
            gun.barrelOffset.transform.localPosition = new Vector3((26f / 16f), (14f / 16f), 0f);
            gun.SetBaseMaxAmmo(150);
            gun.gunClass           = GunClass.PISTOL;
            gun.muzzleFlashEffects = VFXToolbox.CreateVFXPool("SquarePeg Muzzleflash",
                                                              new List <string>()
            {
                "NevernamedsItems/Resources/MiscVFX/GunVFX/SquarePeg/squarepeg_muzzleflash_001",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/SquarePeg/squarepeg_muzzleflash_002",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/SquarePeg/squarepeg_muzzleflash_003",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/SquarePeg/squarepeg_muzzleflash_004",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/SquarePeg/squarepeg_muzzleflash_005",
            },
                                                              12,                               //FPS
                                                              new IntVector2(23, 14),           //Dimensions
                                                              tk2dBaseSprite.Anchor.MiddleLeft, //Anchor
                                                              false,                            //Uses a Z height off the ground
                                                              0,                                //The Z height, if used
                                                              false,
                                                              VFXAlignment.Fixed
                                                              );

            //BULLET STATS
            Projectile projectile = UnityEngine.Object.Instantiate <Projectile>(gun.DefaultModule.projectiles[0]);

            projectile.gameObject.SetActive(false);
            FakePrefab.MarkAsFakePrefab(projectile.gameObject);
            UnityEngine.Object.DontDestroyOnLoad(projectile);
            gun.DefaultModule.projectiles[0]             = projectile;
            projectile.transform.parent                  = gun.barrelOffset;
            projectile.baseData.damage                   = 8f;
            projectile.hitEffects.overrideMidairDeathVFX = VFXToolbox.CreateVFX("SquarePeg MidairDeath",
                                                                                new List <string>()
            {
                "NevernamedsItems/Resources/MiscVFX/GunVFX/SquarePeg/squarepeg_impact_001",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/SquarePeg/squarepeg_impact_002",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/SquarePeg/squarepeg_impact_003",
                "NevernamedsItems/Resources/MiscVFX/GunVFX/SquarePeg/squarepeg_impact_004",
            },
                                                                                12,                                 //FPS
                                                                                new IntVector2(14, 14),             //Dimensions
                                                                                tk2dBaseSprite.Anchor.MiddleCenter, //Anchor
                                                                                false,                              //Uses a Z height off the ground
                                                                                0                                   //The Z height, if used
                                                                                );
            projectile.hitEffects.alwaysUseMidair = true;

            projectile.SetProjectileSpriteRight("squarepeg_proj", 8, 8, false, tk2dBaseSprite.Anchor.MiddleCenter, 8, 8);

            gun.DefaultModule.ammoType       = GameUIAmmoType.AmmoType.CUSTOM;
            gun.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("SquarePegSquares", "NevernamedsItems/Resources/CustomGunAmmoTypes/squarepeg_clipfull", "NevernamedsItems/Resources/CustomGunAmmoTypes/squarepeg_clipempty");

            gun.quality = PickupObject.ItemQuality.C;
            ETGMod.Databases.Items.Add(gun, null, "ANY");
            ID = gun.PickupObjectId;
        }