Exemple #1
0
        private void TurnTableIntoRocket(FlippableCover table)
        {
            GameObject gameObject = (GameObject)ResourceCache.Acquire("Global VFX/VFX_Table_Exhaust");
            Vector2    vector     = DungeonData.GetIntVector2FromDirection(table.DirectionFlipped).ToVector2();
            float      num        = BraveMathCollege.Atan2Degrees(vector);
            Vector3    zero       = Vector3.zero;

            switch (table.DirectionFlipped)
            {
            case DungeonData.Direction.NORTH:
                zero = Vector3.zero;
                break;

            case DungeonData.Direction.EAST:
                zero = new Vector3(-0.5f, 0.25f, 0f);
                break;

            case DungeonData.Direction.SOUTH:
                zero = new Vector3(0f, 0.5f, 1f);
                break;

            case DungeonData.Direction.WEST:
                zero = new Vector3(0.5f, 0.25f, 0f);
                break;
            }
            GameObject gameObject2 = UnityEngine.Object.Instantiate <GameObject>(gameObject, table.specRigidbody.UnitCenter.ToVector3ZisY(0f) + zero, Quaternion.Euler(0f, 0f, num));

            gameObject2.transform.parent = table.specRigidbody.transform;
            Projectile projectile = table.specRigidbody.gameObject.AddComponent <Projectile>();

            projectile.Shooter         = Owner.specRigidbody;
            projectile.Owner           = Owner;
            projectile.baseData.damage = PickupObjectDatabase.GetById(398).GetComponent <TableFlipItem>().DirectHitBonusDamage;
            projectile.baseData.range  = 1000f;
            projectile.baseData.speed  = 20f;
            projectile.baseData.force  = 50f;
            projectile.baseData.UsesCustomAccelerationCurve     = true;
            projectile.baseData.AccelerationCurve               = PickupObjectDatabase.GetById(398).GetComponent <TableFlipItem>().CustomAccelerationCurve;
            projectile.baseData.CustomAccelerationCurveDuration = PickupObjectDatabase.GetById(398).GetComponent <TableFlipItem>().CustomAccelerationCurveDuration;
            projectile.shouldRotate = false;
            projectile.Start();
            projectile.SendInDirection(vector, true, true);
            projectile.collidesWithProjectiles = true;
            projectile.projectileHitHealth     = 20;
            Action <Projectile> value = delegate(Projectile p)
            {
                if (table && table.shadowSprite)
                {
                    table.shadowSprite.renderer.enabled = false;
                }
            };

            projectile.OnDestruction += value;
            ExplosiveModifier explosiveModifier = projectile.gameObject.AddComponent <ExplosiveModifier>();

            explosiveModifier.explosionData = PickupObjectDatabase.GetById(398).GetComponent <TableFlipItem>().ProjectileExplosionData;
            table.PreventPitFalls           = true;
        }
Exemple #2
0
        public static void Init()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("Celebration", "mk1");

            Game.Items.Rename("outdated_gun_mods:celebration", "spapi:celebration");
            gun.gameObject.AddComponent <CelebrationMk1>();
            GunExt.SetShortDescription(gun, "Great For Gunparties!");
            GunExt.SetLongDescription(gun, "Shoots fireworks. Yes, fireworks.\n\nGun originally designed for being in highest-tier chests, but because of hate it got it was moved to lower-tier chests.");
            GunExt.SetupSprite(gun, null, "mk1_idle_001", 8);
            GunExt.SetAnimationFPS(gun, gun.shootAnimation, 16);
            for (int i = 0; i < 3; i++)
            {
                GunExt.AddProjectileModuleFrom(gun, "klobb", true, false);
            }
            foreach (ProjectileModule mod in gun.Volley.projectiles)
            {
                mod.shootStyle     = ProjectileModule.ShootStyle.SemiAutomatic;
                mod.angleVariance /= 1.25f;
                mod.ammoType       = GameUIAmmoType.AmmoType.GRENADE;
                Projectile projectile = UnityEngine.Object.Instantiate <Projectile>((PickupObjectDatabase.GetById(275) as Gun).DefaultModule.projectiles[0]);
                projectile.gameObject.SetActive(false);
                FakePrefab.MarkAsFakePrefab(projectile.gameObject);
                UnityEngine.Object.DontDestroyOnLoad(projectile);
                mod.projectiles[0]          = projectile;
                projectile.transform.parent = gun.barrelOffset;
                projectile.name             = "Firework_Rocket";
                ExplosiveModifier explosiveMod = projectile.gameObject.AddComponent <ExplosiveModifier>();
                explosiveMod.explosionData = new ExplosionData();
                explosiveMod.explosionData.CopyFrom((PickupObjectDatabase.GetById(593) as Gun).DefaultModule.projectiles[0].GetComponent <ExplosiveModifier>().explosionData);
                explosiveMod.explosionData.effect = EnemyDatabase.GetOrLoadByGuid(RnGEnemyDatabase.GetRnGEnemyGuid(RnGEnemyDatabase.RnGEnemyType.DynaM80_Guy)).GetComponent <ExplodeOnDeath>().explosionData.effect;
                explosiveMod.IgnoreQueues         = true;
                projectile.SuppressHitEffects     = true;
                projectile.damageTypes            = CoreDamageTypes.None;
                projectile.AppliesFire            = false;
                mod.cooldownTime        = 1f;
                mod.numberOfShotsInClip = 1;
                if (mod != gun.DefaultModule)
                {
                    mod.ammoCost = 0;
                }
            }
            gun.Volley.UsesShotgunStyleVelocityRandomizer = true;
            gun.Volley.DecreaseFinalSpeedPercentMin       = -10f;
            gun.Volley.IncreaseFinalSpeedPercentMax       = 10f;
            gun.reloadTime     = 2.5f;
            gun.gunSwitchGroup = Toolbox.GetGunById(39).gunSwitchGroup;
            gun.SetBaseMaxAmmo(75);
            gun.quality = PickupObject.ItemQuality.A;
            gun.barrelOffset.transform.localPosition = new Vector3(1f, 0.35f, 0f);
            gun.encounterTrackable.EncounterGuid     = "celebration_mk1";
            gun.gunClass = GunClass.EXPLOSIVE;
            ETGMod.Databases.Items.Add(gun, null, "ANY");
            gun.AddToTrorkShop();
            gun.AddToCursulaShop();
            gun.AddToBlacksmithShop();
            gun.RemovePeskyQuestionmark();
            gun.PlaceItemInAmmonomiconAfterItemById(275);
        }
Exemple #3
0
        public static void Add()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("Hand Mortar", "handmortar");

            Game.Items.Rename("outdated_gun_mods:hand_mortar", "nn:hand_mortar");
            gun.gameObject.AddComponent <HandMortar>();
            gun.SetShortDescription("Kingdom Come");
            gun.SetLongDescription("The classy and classical predecessor to the modern grenade launchers, some old grenadiers still swear by their effectiveness.");

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

            gun.SetAnimationFPS(gun.shootAnimation, 15);

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

            //GUN STATS
            gun.DefaultModule.ammoCost      = 1;
            gun.DefaultModule.shootStyle    = ProjectileModule.ShootStyle.SemiAutomatic;
            gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random;
            gun.reloadTime = 2f;
            gun.DefaultModule.angleVariance          = 10;
            gun.DefaultModule.cooldownTime           = 1f;
            gun.DefaultModule.numberOfShotsInClip    = 3;
            gun.barrelOffset.transform.localPosition = new Vector3(2.81f, 1.0f, 0f);
            gun.SetBaseMaxAmmo(70);
            gun.gunClass = GunClass.EXPLOSIVE;
            //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.baseData.damage      *= 6f;

            BounceProjModifier Bouncing = projectile.gameObject.GetOrAddComponent <BounceProjModifier>();

            Bouncing.numberOfBounces = 2;
            ExplosiveModifier explosiveModifier = projectile.gameObject.AddComponent <ExplosiveModifier>();

            explosiveModifier.doExplosion   = true;
            explosiveModifier.explosionData = HandMortarExplosion;
            projectile.baseData.speed      *= 0.6f;

            projectile.baseData.range  *= 0.8f;
            projectile.transform.parent = gun.barrelOffset;
            projectile.SetProjectileSpriteRight("handmortar_projectile", 8, 8, false, tk2dBaseSprite.Anchor.MiddleCenter, 8, 8);

            gun.DefaultModule.ammoType       = GameUIAmmoType.AmmoType.CUSTOM;
            gun.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("HandMortar Bullets", "NevernamedsItems/Resources/CustomGunAmmoTypes/handmortar_clipfull", "NevernamedsItems/Resources/CustomGunAmmoTypes/handmortar_clipempty");

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

            ID = gun.PickupObjectId;
        }
Exemple #4
0
 private void PostProcessProjectile(Projectile sourceProjectile, float effectChanceScalar)
 {
     if (UnityEngine.Random.value <= 0.07f)
     {
         ExplosiveModifier exploding = sourceProjectile.gameObject.GetOrAddComponent <ExplosiveModifier>();
         exploding.doExplosion   = true;
         exploding.explosionData = StaticExplosionDatas.explosiveRoundsExplosion;
     }
 }
Exemple #5
0
        public static void Init()
        {
            string itemName     = "Ultraviolet Guon Stone";                                          //The name of the item
            string resourceName = "NevernamedsItems/Resources/GuonStones/ultravioletguonstone_icon"; //Refers to an embedded png in the project. Make sure to embed your resources!

            GameObject obj = new GameObject();

            var item = obj.AddComponent <UltraVioletGuonStone>();

            ItemBuilder.AddSpriteToObject(itemName, resourceName, obj);

            string shortDesc = "Beyond the Pale";
            string longDesc  = "A jittery crystal from a realm beyond the Gungeon." + "\n\nErratically jumps to different orbits.";

            ItemBuilder.SetupItem(item, shortDesc, longDesc, "nn");
            item.quality = PickupObject.ItemQuality.C;

            BuildPrefab();
            item.OrbitalPrefab = orbitalPrefab;
            BuildSynergyPrefab();

            item.HasAdvancedUpgradeSynergy    = true;
            item.AdvancedUpgradeSynergy       = "Ultravioleter Guon Stone";
            item.AdvancedUpgradeOrbitalPrefab = UltraVioletGuonStone.upgradeOrbitalPrefab.gameObject;

            xenochromePrefab = UnityEngine.Object.Instantiate <Projectile>((PickupObjectDatabase.GetById(86) as Gun).DefaultModule.projectiles[0]);
            xenochromePrefab.gameObject.SetActive(false);
            FakePrefab.MarkAsFakePrefab(xenochromePrefab.gameObject);
            UnityEngine.Object.DontDestroyOnLoad(xenochromePrefab);
            xenochromePrefab.baseData.damage = 20f;
            xenochromePrefab.baseData.speed  = 0f;
            xenochromePrefab.AnimateProjectile(new List <string> {
                "thinline_pinkproj_001",
                "thinline_pinkproj_002",
                "thinline_pinkproj_003",
                "thinline_pinkproj_004",
                "thinline_pinkproj_005",
                "thinline_pinkproj_006",
            }, 10, true, new List <IntVector2> {
                new IntVector2(10, 10),
                new IntVector2(10, 10),
                new IntVector2(10, 10),
                new IntVector2(10, 10),
                new IntVector2(10, 10),
                new IntVector2(10, 10),
            }, AnimateBullet.ConstructListOfSameValues(true, 6), AnimateBullet.ConstructListOfSameValues(tk2dBaseSprite.Anchor.MiddleCenter, 6), AnimateBullet.ConstructListOfSameValues(true, 6), AnimateBullet.ConstructListOfSameValues(false, 6),
                                               AnimateBullet.ConstructListOfSameValues <Vector3?>(null, 6), AnimateBullet.ConstructListOfSameValues <IntVector2?>(null, 6), AnimateBullet.ConstructListOfSameValues <IntVector2?>(null, 6), AnimateBullet.ConstructListOfSameValues <Projectile>(null, 6));
            BulletLifeTimer timer = xenochromePrefab.gameObject.AddComponent <BulletLifeTimer>();

            timer.secondsTillDeath = 2;
            ExplosiveModifier splode = xenochromePrefab.gameObject.AddComponent <ExplosiveModifier>();

            splode.doExplosion   = true;
            splode.explosionData = StaticExplosionDatas.explosiveRoundsExplosion;
            splode.IgnoreQueues  = true;
        }
Exemple #6
0
        private void OnGuonHitByBullet(SpeculativeRigidbody myRigidbody, PixelCollider myCollider, SpeculativeRigidbody other, PixelCollider otherCollider)
        {
            if (Owner && this.m_extantOrbital)
            {
                if (other.projectile && other.projectile.Owner is PlayerController)
                {
                    if (!other.projectile.GetComponent <BuffedByMaroonGuonStone>())
                    {
                        float damageMult = 1.5f;
                        if (Owner.PlayerHasActiveSynergy("Marooner Guon Stone"))
                        {
                            damageMult = 2f;
                        }
                        other.projectile.baseData.damage *= damageMult;
                        other.projectile.RuntimeUpdateScale(1.2f);
                        other.projectile.gameObject.AddComponent <BuffedByMaroonGuonStone>();
                        other.projectile.AdjustPlayerProjectileTint(ExtendedColours.maroon, 2);

                        ExtremelySimpleStatusEffectBulletBehaviour StatusEffect = other.projectile.gameObject.GetOrAddComponent <ExtremelySimpleStatusEffectBulletBehaviour>();
                        if (Owner.PlayerHasActiveSynergy("Toxic Core"))
                        {
                            StatusEffect.usesPoisonEffect = true;
                        }
                        if (Owner.PlayerHasActiveSynergy("Charming Core"))
                        {
                            StatusEffect.usesCharmEffect = true;
                        }
                        if (Owner.PlayerHasActiveSynergy("Burning Core"))
                        {
                            StatusEffect.usesFireEffect = true;
                        }

                        if (Owner.PlayerHasActiveSynergy("Explosive Core"))
                        {
                            ExplosiveModifier Splodey = other.projectile.gameObject.GetOrAddComponent <ExplosiveModifier>();
                            Splodey.doExplosion   = true;
                            Splodey.explosionData = StaticExplosionDatas.explosiveRoundsExplosion;
                        }
                        if (Owner.PlayerHasActiveSynergy("Hungry Core"))
                        {
                            HungryProjectileModifier hungry = other.projectile.gameObject.GetOrAddComponent <HungryProjectileModifier>();
                        }
                        if (Owner.PlayerHasActiveSynergy("Smart Core"))
                        {
                            HomingModifier homing = other.projectile.gameObject.GetOrAddComponent <HomingModifier>();
                        }
                    }
                    PhysicsEngine.SkipCollision = true;
                }
                else if (other.projectile && !(other.projectile.Owner is PlayerController))
                {
                    PhysicsEngine.SkipCollision = true;
                }
            }
        }
        public static void Init()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("Aegis Gun", "aegis");

            Game.Items.Rename("outdated_gun_mods:aegis_gun", "spapi:aegis_gun");
            gun.gameObject.AddComponent <AegisGunController>();
            GunExt.SetShortDescription(gun, "En Guarde!");
            GunExt.SetLongDescription(gun, "Reloading shields enemy bullets.\n\nThis handgun was made out of a sword. Through, the melee abilities of the sword it was made from were completelly nullified, so this weapon doesn't anger the" +
                                      " jammed.");
            GunExt.SetupSprite(gun, null, "aegis_idle_001", 8);
            GunExt.SetAnimationFPS(gun, gun.shootAnimation, 16);
            GunExt.AddProjectileModuleFrom(gun, "klobb", true, false);
            gun.DefaultModule.shootStyle    = ProjectileModule.ShootStyle.SemiAutomatic;
            gun.DefaultModule.angleVariance = 0;
            gun.DefaultModule.ammoType      = GameUIAmmoType.AmmoType.MEDIUM_BULLET;
            Projectile projectile = UnityEngine.Object.Instantiate <Projectile>((PickupObjectDatabase.GetById(464) as 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.DefaultTintColor      = new Color(1, 1, 1).WithAlpha(0.45f);
            projectile.HasDefaultTint        = true;
            projectile.name = "Explosive_Aegis_Shell";
            ExplosionData data = (PickupObjectDatabase.GetById(81) as Gun).DefaultModule.projectiles[0].GetComponent <ExplosiveModifier>().explosionData.CopyExplosionData();

            data.doDestroyProjectiles = false;
            data.doForce = false;
            data.damage *= 0.35f;
            ExplosiveModifier mod = projectile.gameObject.GetOrAddComponent <ExplosiveModifier>();

            mod.explosionData                     = data;
            gun.reloadClipLaunchFrame             = 0;
            gun.DefaultModule.cooldownTime        = 0.2f;
            gun.DefaultModule.numberOfShotsInClip = 4;
            gun.reloadTime = 1.4f;
            gun.SetBaseMaxAmmo(150);
            gun.quality            = PickupObject.ItemQuality.B;
            gun.gunSwitchGroup     = Toolbox.GetGunById(380).gunSwitchGroup;
            gun.muzzleFlashEffects = Toolbox.GetGunById(334).muzzleFlashEffects;
            gun.barrelOffset.transform.localPosition = new Vector3(0.9f, 0.55f, 0f);
            gun.encounterTrackable.EncounterGuid     = "aegis_junk";
            AdvancedDualWieldSynergyProcessor dualWieldController = gun.gameObject.AddComponent <AdvancedDualWieldSynergyProcessor>();

            dualWieldController.SynergyNameToCheck = "#SHIELD_BROS";
            dualWieldController.PartnerGunID       = 380;
            gun.gunClass = GunClass.PISTOL;
            ETGMod.Databases.Items.Add(gun, null, "ANY");
            gun.AddToCursulaShop();
            gun.AddToBlacksmithShop();
            gun.RemovePeskyQuestionmark();
            gun.PlaceItemInAmmonomiconAfterItemById(380);
        }
Exemple #8
0
        public static void Add()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("Fire Lance", "firelance");

            Game.Items.Rename("outdated_gun_mods:fire_lance", "nn:fire_lance");
            gun.gameObject.AddComponent <FireLance>();
            gun.SetShortDescription("Where it all started");
            gun.SetLongDescription("Long explosive lances such as these are recorded to be some of the first gunpowder-based weapons in human history, beaten out only by crude bombs." + "\n\nWithout this, none of this would be possible.");

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

            gun.SetAnimationFPS(gun.shootAnimation, 15);

            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.5f;
            gun.muzzleFlashEffects.type              = VFXPoolType.None;
            gun.DefaultModule.numberOfShotsInClip    = 5;
            gun.barrelOffset.transform.localPosition = new Vector3(4.56f, 1.18f, 0f);
            gun.SetBaseMaxAmmo(100);
            gun.gunClass = GunClass.EXPLOSIVE;
            //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.baseData.damage        *= 3f;
            projectile.sprite.renderer.enabled = false;
            projectile.baseData.range         /= 35f;
            projectile.transform.parent        = gun.barrelOffset;
            ExplosiveModifier explosiveModifier = projectile.gameObject.AddComponent <ExplosiveModifier>();

            explosiveModifier.doExplosion   = true;
            explosiveModifier.explosionData = FireLanceExplosion;

            gun.DefaultModule.ammoType       = GameUIAmmoType.AmmoType.CUSTOM;
            gun.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("Fire Lance Bullets", "NevernamedsItems/Resources/CustomGunAmmoTypes/firelance_clipfull", "NevernamedsItems/Resources/CustomGunAmmoTypes/firelance_clipempty");

            gun.quality = PickupObject.ItemQuality.D;
            gun.encounterTrackable.EncounterGuid = "this is the Fire Lance";
            ETGMod.Databases.Items.Add(gun, null, "ANY");
            FireLanceID = gun.PickupObjectId;
        }
Exemple #9
0
        // Token: 0x06000036 RID: 54 RVA: 0x000037D8 File Offset: 0x000019D8
        public static void Add()
        {
            Gun flakcannon = ETGMod.Databases.Items.NewGun("Reaver Heart", "reaverheart");

            Game.Items.Rename("outdated_gun_mods:reaver_heart", "bny:reaver_heart");
            flakcannon.gameObject.AddComponent <ReaverHeart>();
            GunExt.SetShortDescription(flakcannon, "A Glacier Eventually...");
            GunExt.SetLongDescription(flakcannon, "The still-beating heart of a Void Reaver, an ancient guardian of a time-looping planet. It slowly pulsates with energy funneled straight from the Void.");
            GunExt.SetupSprite(flakcannon, null, "reaverheart_idle_001", 11);
            GunExt.SetAnimationFPS(flakcannon, flakcannon.shootAnimation, 35);
            GunExt.SetAnimationFPS(flakcannon, flakcannon.reloadAnimation, 1);
            GunExt.SetAnimationFPS(flakcannon, flakcannon.idleAnimation, 2);
            GunExt.AddProjectileModuleFrom(flakcannon, PickupObjectDatabase.GetById(223) as Gun, true, false);
            flakcannon.DefaultModule.ammoCost      = 1;
            flakcannon.DefaultModule.shootStyle    = ProjectileModule.ShootStyle.SemiAutomatic;
            flakcannon.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random;
            flakcannon.reloadTime = 2f;
            flakcannon.barrelOffset.transform.localPosition = new Vector3(.375f, 0.375f, 0f);
            flakcannon.DefaultModule.cooldownTime           = 1.1f;
            flakcannon.DefaultModule.numberOfShotsInClip    = 5;
            flakcannon.SetBaseMaxAmmo(200);
            flakcannon.quality = PickupObject.ItemQuality.C;
            flakcannon.DefaultModule.angleVariance  = 0f;
            flakcannon.DefaultModule.burstShotCount = 1;
            Projectile projectile = UnityEngine.Object.Instantiate <Projectile>(flakcannon.DefaultModule.projectiles[0]);

            projectile.gameObject.SetActive(false);
            FakePrefab.MarkAsFakePrefab(projectile.gameObject);
            UnityEngine.Object.DontDestroyOnLoad(projectile);
            flakcannon.DefaultModule.projectiles[0] = projectile;
            projectile.baseData.damage          *= 3f;
            projectile.baseData.speed           *= 0.1f;
            projectile.AdditionalScaleMultiplier = 0.1f;
            projectile.shouldRotate            = true;
            projectile.pierceMinorBreakables   = true;
            projectile.baseData.range          = 0.01f;
            projectile.sprite.renderer.enabled = false;
            ExplosiveModifier explosiveModifier = projectile.gameObject.AddComponent <ExplosiveModifier>();

            explosiveModifier.doExplosion               = true;
            explosiveModifier.explosionData             = ReaverHeart.ReaverExplosion;
            flakcannon.encounterTrackable.EncounterGuid = "Void reavers be like 'waaaaaaAAAAAAAAAAAAAA- BWOOM WAUU WAUU'";
            ETGMod.Databases.Items.Add(flakcannon, null, "ANY");
            flakcannon.AddToSubShop(ItemBuilder.ShopType.Goopton, 1f);
            flakcannon.AddToSubShop(ItemBuilder.ShopType.OldRed, 1f);
        }
Exemple #10
0
        private void ReaverBeat(Projectile projectile)
        {
            this.Boom(projectile.sprite.WorldCenter);
            bool flag = projectile != null;

            if (flag)
            {
                PlayerController playerController = this.gun.CurrentOwner as PlayerController;
                Vector2          a = playerController.sprite.WorldCenter - projectile.sprite.WorldCenter;
                playerController.knockbackDoer.ApplyKnockback(-a, 0f, false);
                Projectile        projectile1   = ((Gun)ETGMod.Databases.Items[180]).DefaultModule.projectiles[0];
                ExplosiveModifier component     = projectile.GetComponent <ExplosiveModifier>();
                ExplosionData     explosionData = component.explosionData;
                component.doDistortionWave     = true;
                component.explosionData.damage = 0f;
                Exploder.Explode(projectile.sprite.WorldCenter, explosionData, Vector2.zero, null, false, CoreDamageTypes.None, false);
                playerController.ForceBlank(0f, 0.5f, false, true, new Vector2?(projectile.sprite.WorldCenter), false, 300f);
            }
        }
Exemple #11
0
        public override void PostProcessProjectile(Projectile projectile)
        {
            base.PostProcessProjectile(projectile);
            PlayerController playerController = projectile.Owner as PlayerController;

            if (playerController.PlayerHasActiveSynergy("Good Old Guns"))
            {
                projectile.baseData.damage *= 1.5f;
                projectile.baseData.range  *= 3f;
            }
            if (playerController.PlayerHasActiveSynergy("The Classics"))
            {
                ExplosiveModifier explosion = projectile.gameObject.GetComponent <ExplosiveModifier>();
                if (explosion)
                {
                    explosion.explosionData.damageRadius *= 2f;
                }
            }
        }
 private void OnPostFired(PlayerController player, Gun gun)
 {
     if (player && gun.PickupObjectId == 541 && gun.ClipShotsRemaining == 0 && CanShootNade == true)
     {
         Projectile projectile2 = ((Gun)ETGMod.Databases.Items[19]).DefaultModule.projectiles[0];
         Vector3    vector      = player.unadjustedAimPoint - player.LockedApproximateSpriteCenter;
         Vector3    vector2     = player.specRigidbody.UnitCenter;
         GameObject gameObject  = SpawnManager.SpawnProjectile(projectile2.gameObject, player.sprite.WorldCenter, Quaternion.Euler(0f, 0f, (player.CurrentGun == null) ? 0f : player.CurrentGun.CurrentAngle), true);
         Projectile component   = gameObject.GetComponent <Projectile>();
         bool       flag        = component != null;
         if (flag)
         {
             ExplosiveModifier explosive = component.GetComponent <ExplosiveModifier>();
             explosive.explosionData.damage *= 0.8f;
             component.baseData.damage      *= 0.8f;
             component.Owner   = player;
             component.Shooter = player.specRigidbody;
         }
         CanShootNade = false;
     }
 }
        public void Revenge(Vector3 position)
        {
            Projectile        projectile = ((Gun)ETGMod.Databases.Items[19]).DefaultModule.projectiles[0];
            GameObject        gameObject = SpawnManager.SpawnProjectile(projectile.gameObject, position, Quaternion.Euler(0, 0, UnityEngine.Random.Range(0, 359)));
            Projectile        component2 = gameObject.GetComponent <Projectile>();
            ExplosiveModifier boomer     = projectile.GetComponent <ExplosiveModifier>();

            boomer.explosionData.damageToPlayer = 1;
            boomer.explosionData.damage         = 1;
            {
                component2.HasDefaultTint   = true;
                component2.DefaultTintColor = new Color(10f, 0f, 0f).WithAlpha(1f);
                component2.specRigidbody.AddCollisionLayerIgnoreOverride(CollisionMask.LayerToMask(CollisionLayer.EnemyCollider));
                component2.specRigidbody.AddCollisionLayerIgnoreOverride(CollisionMask.LayerToMask(CollisionLayer.EnemyHitBox));
                component2.AdjustPlayerProjectileTint(new Color((float)(40), (float)(40), 0f), 5, 0f);
                component2.baseData.speed            = UnityEngine.Random.Range(4f, 8f);
                component2.baseData.range            = UnityEngine.Random.Range(3f, 8f);
                component2.baseData.damage           = .1f;
                component2.AdditionalScaleMultiplier = 1.2f;
            }
        }
        private void PostProcessProjectile(Projectile sourceProjectile, float effectChanceScalar)
        {
            try
            {
                if (sourceProjectile.GetComponent <HasBeenBulletShuffled>() == null)
                {
                    int num = UnityEngine.Random.Range(1, 55);
                    //VFXToolbox.DoStringSquirt(num.ToString(), sourceProjectile.ProjectilePlayerOwner().specRigidbody.UnitCenter, Color.red);
                    switch (num)
                    {
                    case 1:     //+1 Bullets ------------------------------- WORKS
                        sourceProjectile.baseData.damage *= 1.25f;
                        break;

                    case 2:     //Rocket Powered Bullets ------------------------------- WORKS
                        sourceProjectile.baseData.damage *= 1.1f;
                        sourceProjectile.baseData.speed  *= 1.5f;
                        sourceProjectile.UpdateSpeed();
                        break;

                    case 3:     //Devolver Bullets ------------------------------- WORKS
                        AdvancedTransmogrifyComponent advancedTransmog = sourceProjectile.gameObject.AddComponent <AdvancedTransmogrifyComponent>();
                        advancedTransmog.TransmogDataList = new List <AdvancedTransmogrifyComponent.TransmogData>()
                        {
                            new AdvancedTransmogrifyComponent.TransmogData()
                            {
                                identifier        = "BulletShuffle",
                                maintainHPPercent = false,
                                TargetGuid        = "05891b158cd542b1a5f3df30fb67a7ff",
                                TransmogChance    = 1,
                            }
                        };
                        break;

                    case 4:     //Vorpal Bullets
                        StartCoroutine(EraseAndReplace(sourceProjectile, PickupObjectDatabase.GetById(640).GetComponent <ComplexProjectileModifier>().CriticalProjectile));
                        break;

                    case 5:     //Katana Bullets ------------------------------- WORKS
                        sourceProjectile.OnHitEnemy += DoKatana;
                        break;

                    case 6:     //Hungry Bullets ------------------------------- WORKS
                        HungryProjectileModifier hungry = sourceProjectile.gameObject.GetOrAddComponent <HungryProjectileModifier>();
                        hungry.HungryRadius = 1.5f;
                        hungry.DamagePercentGainPerSnack = 0.25f;
                        hungry.MaxMultiplier             = 3f;
                        hungry.MaximumBulletsEaten       = 10;
                        sourceProjectile.AdjustPlayerProjectileTint(ExtendedColours.purple, 1);
                        break;

                    case 7:     //Heavy Bullets ------------------------------- WORKS
                        sourceProjectile.baseData.damage *= 1.25f;
                        sourceProjectile.baseData.speed  *= 0.5f;
                        sourceProjectile.baseData.force  *= 2f;
                        sourceProjectile.RuntimeUpdateScale(1.25f);
                        sourceProjectile.UpdateSpeed();
                        break;

                    case 8:     //Bouncy Bullets ------------------------------- WORKS
                        BounceProjModifier bounce = sourceProjectile.gameObject.GetOrAddComponent <BounceProjModifier>();
                        bounce.numberOfBounces++;
                        break;

                    case 9:     //Explosive Rounds ------------------------------- WORKS
                        ExplosiveModifier explosion = sourceProjectile.gameObject.AddComponent <ExplosiveModifier>();
                        explosion.doExplosion   = true;
                        explosion.explosionData = StaticExplosionDatas.explosiveRoundsExplosion;
                        break;

                    case 10:     //Ghost Bullets ------------------------------- WORKS
                        PierceProjModifier piercing = sourceProjectile.gameObject.AddComponent <PierceProjModifier>();
                        piercing.penetration++;
                        break;

                    case 11:     //Irradiated Lead ------------------------------- WORKS
                        sourceProjectile.statusEffectsToApply.Add(StaticStatusEffects.irradiatedLeadEffect);
                        sourceProjectile.AdjustPlayerProjectileTint(ExtendedColours.poisonGreen, 1);
                        break;

                    case 12:     //Hot Lead ------------------------------- WORKS
                        sourceProjectile.statusEffectsToApply.Add(StaticStatusEffects.hotLeadEffect);
                        sourceProjectile.AdjustPlayerProjectileTint(Color.red, 1);
                        break;

                    case 13:     //Battery Bullets ------------------------------- WORKS
                        sourceProjectile.damageTypes |= CoreDamageTypes.Electric;
                        break;

                    case 14:     //Frost Bullets (Actully just insta freeze but whatever)
                        sourceProjectile.statusEffectsToApply.Add(StaticStatusEffects.chaosBulletsFreeze);
                        sourceProjectile.AdjustPlayerProjectileTint(ExtendedColours.freezeBlue, 1);
                        break;

                    case 15:     //Charming Rounds ------------------------------- WORKS
                        sourceProjectile.statusEffectsToApply.Add(StaticStatusEffects.charmingRoundsEffect);
                        sourceProjectile.AdjustPlayerProjectileTint(ExtendedColours.charmPink, 1);
                        break;

                    case 16:     //Magic Bullets ------------------------------- WORKS
                        AdvancedTransmogrifyComponent advancedTransmog2 = sourceProjectile.gameObject.AddComponent <AdvancedTransmogrifyComponent>();
                        advancedTransmog2.TransmogDataList = new List <AdvancedTransmogrifyComponent.TransmogData>()
                        {
                            new AdvancedTransmogrifyComponent.TransmogData()
                            {
                                identifier        = "BulletShuffle",
                                maintainHPPercent = false,
                                TargetGuid        = "76bc43539fc24648bff4568c75c686d1",
                                TransmogChance    = 1,
                            }
                        };
                        break;

                    case 17:     //Fat Bullets ------------------------------- WORKS
                        sourceProjectile.baseData.force *= 2f;
                        sourceProjectile.RuntimeUpdateScale(2f);
                        sourceProjectile.baseData.damage *= 1.3f;
                        break;

                    case 18:     //Angry Bullets ------------------------------- WORKS
                        AngryBulletsProjectileBehaviour angry = sourceProjectile.gameObject.AddComponent <AngryBulletsProjectileBehaviour>();
                        break;

                    case 19:     //Blank Bullets
                        BlankOnHitModifier blanking = sourceProjectile.gameObject.GetOrAddComponent <BlankOnHitModifier>();
                        blanking.useTinyBlank = true;
                        break;

                    case 20:     //Orbital Bullets Behaviour ------------------------------- WORKS
                        OrbitalBulletsBehaviour orbiting = sourceProjectile.gameObject.GetOrAddComponent <OrbitalBulletsBehaviour>();
                        break;

                    case 21:     //Shadow Bullets ------------------------------- WORKS
                        sourceProjectile.SpawnChainedShadowBullets(1, 0.05f, 1, null, true);
                        break;

                    case 22:     //Stout Bullets ------------------------------- WORKS
                        sourceProjectile.RuntimeUpdateScale(1.5f);
                        sourceProjectile.gameObject.GetOrAddComponent <StoutBulletsProjectileBehaviour>();
                        break;

                    case 23:     //Snowballets ------------------------------- WORKS
                        ScalingProjectileModifier scalingProjectileModifier = sourceProjectile.gameObject.AddComponent <ScalingProjectileModifier>();
                        scalingProjectileModifier.ScaleToDamageRatio      = 2.5f / 10f;
                        scalingProjectileModifier.MaximumDamageMultiplier = 2.5f;
                        scalingProjectileModifier.IsSynergyContingent     = false;
                        scalingProjectileModifier.PercentGainPerUnit      = 10f;
                        break;

                    case 24:     //Remote Bullets ------------------------------- WORKS
                        sourceProjectile.gameObject.GetOrAddComponent <RemoteBulletsProjectileBehaviour>();
                        break;

                    case 25:     //Zombie Bullets ------------------------------- WORKS
                        sourceProjectile.OnDestruction += HandleZombieEffect;
                        break;

                    case 26:     //Flak Bullets ------------------------------- WORKS
                        sourceProjectile.gameObject.GetOrAddComponent <FlakBulletsProjectileBehaviour>();
                        break;

                    case 27:     //Silver Bullets ------------------------------- WORKS
                        sourceProjectile.BossDamageMultiplier         *= 1.25f;
                        sourceProjectile.BlackPhantomDamageMultiplier *= 2.25f;
                        sourceProjectile.AdjustPlayerProjectileTint(ExtendedColours.silvedBulletsSilver, 1);
                        break;

                    case 28:     //Gilded Bullets ------------------------------- WORKS
                        float gildnum = 0f;
                        ScalingStatBoostItem gildedbullets = PickupObjectDatabase.GetById(532).GetComponent <ScalingStatBoostItem>();
                        gildnum = Mathf.Clamp01(Mathf.InverseLerp(gildedbullets.ScalingTargetMin, gildedbullets.ScalingTargetMax, sourceProjectile.ProjectilePlayerOwner().carriedConsumables.Currency));
                        gildnum = gildedbullets.ScalingCurve.Evaluate(gildnum);
                        float gildnum2 = Mathf.Lerp(gildedbullets.MinScaling, gildedbullets.MaxScaling, gildnum);
                        sourceProjectile.baseData.damage *= gildnum2;
                        sourceProjectile.AdjustPlayerProjectileTint(gildedbullets.TintColor, gildedbullets.TintPriority, 0f);
                        break;

                    case 29:     //Cursed Bullets ------------------------------- WORKS
                        float cursenum = 0f;
                        ScalingStatBoostItem cursedBullets = PickupObjectDatabase.GetById(571).GetComponent <ScalingStatBoostItem>();
                        cursenum = Mathf.Clamp01(Mathf.InverseLerp(cursedBullets.ScalingTargetMin, cursedBullets.ScalingTargetMax, sourceProjectile.ProjectilePlayerOwner().stats.GetStatValue(PlayerStats.StatType.Curse)));
                        cursenum = cursedBullets.ScalingCurve.Evaluate(cursenum);
                        float cursenum2 = Mathf.Lerp(cursedBullets.MinScaling, cursedBullets.MaxScaling, cursenum);
                        sourceProjectile.baseData.damage *= cursenum2;
                        sourceProjectile.AdjustPlayerProjectileTint(cursedBullets.TintColor, cursedBullets.TintPriority, 0f);
                        sourceProjectile.CurseSparks = true;
                        break;

                    case 30:     //Chance Bullets
                        DoChanceBulletsEffect(sourceProjectile);
                        break;

                    case 31:     //Bumbullets
                        StartCoroutine(SpawnAdditionalProjectile(sourceProjectile, (PickupObjectDatabase.GetById(14) as Gun).DefaultModule.projectiles[0], 0));
                        break;

                    case 32:     //Bloody 9mm
                        StartCoroutine(EraseAndReplace(sourceProjectile, PickupObjectDatabase.GetById(524).GetComponent <RandomProjectileReplacementItem>().ReplacementProjectile));
                        break;

                    case 33:     //Slow ------------------------------- WORKS
                        sourceProjectile.statusEffectsToApply.Add(StaticStatusEffects.tripleCrossbowSlowEffect);
                        sourceProjectile.AdjustPlayerProjectileTint(Color.yellow, 1);
                        break;

                    case 34:     //Wallpierce
                        sourceProjectile.pierceMinorBreakables   = true;
                        sourceProjectile.PenetratesInternalWalls = true;
                        break;

                    case 35:     //Ignore DPS Cap
                        sourceProjectile.ignoreDamageCaps = true;
                        break;

                    case 36:     //Scattershot
                        sourceProjectile.baseData.damage *= 0.55f;
                        StartCoroutine(DoAdditionalShot(sourceProjectile, 0, 30f));
                        StartCoroutine(DoAdditionalShot(sourceProjectile, 0, 30f));
                        break;

                    case 37:     //Backup Gun
                        StartCoroutine(DoAdditionalShot(sourceProjectile, 180, 5f));
                        break;

                    case 38:     //Helix
                        StartCoroutine(DoAdditionalShot(sourceProjectile, 0, 0f, true));
                        sourceProjectile.ConvertToHelixMotion(false);
                        break;

                    case 39:     //Killed enemies become projectiles (Casey)
                        sourceProjectile.baseData.force *= 3f;
                        KilledEnemiesBecomeProjectileModifier caseymode = sourceProjectile.gameObject.AddComponent <KilledEnemiesBecomeProjectileModifier>();
                        caseymode.CompletelyBecomeProjectile = (PickupObjectDatabase.GetById(541) as Gun).DefaultModule.chargeProjectiles[0].Projectile.GetComponent <KilledEnemiesBecomeProjectileModifier>().CompletelyBecomeProjectile;
                        caseymode.BaseProjectile             = (PickupObjectDatabase.GetById(541) as Gun).DefaultModule.chargeProjectiles[0].Projectile.GetComponent <KilledEnemiesBecomeProjectileModifier>().BaseProjectile;
                        break;

                    case 40:     //Instant Cheese
                        sourceProjectile.statusEffectsToApply.Add(StaticStatusEffects.instantCheese);
                        sourceProjectile.AdjustPlayerProjectileTint(ExtendedColours.honeyYellow, 1);
                        break;

                    case 41:     //Stun
                        sourceProjectile.StunApplyChance     = 1;
                        sourceProjectile.AppliedStunDuration = 2;
                        sourceProjectile.AppliesStun         = true;
                        break;

                    case 42:     //High Kaliber Effect
                        sourceProjectile.OnHitEnemy += KaliberShit;
                        break;

                    case 43:     //Tangler Squarify
                        sourceProjectile.ApplyClonedShaderProjModifier((PickupObjectDatabase.GetById(175) as Gun).DefaultModule.projectiles[0].GetComponent <ShaderProjModifier>());
                        break;

                    case 44:     //Akey47
                        sourceProjectile.gameObject.AddComponent <KeyProjModifier>();
                        break;

                    case 45:     //Combine Vapourise
                        sourceProjectile.baseData.damage *= 2f;
                        CombineEvaporateEffect origEvap = (PickupObjectDatabase.GetById(519) as Gun).alternateVolley.projectiles[0].projectiles[0].GetComponent <CombineEvaporateEffect>();
                        CombineEvaporateEffect newEvap  = sourceProjectile.gameObject.AddComponent <CombineEvaporateEffect>();
                        newEvap.FallbackShader        = origEvap.FallbackShader;
                        newEvap.ParticleSystemToSpawn = origEvap.ParticleSystemToSpawn;
                        break;

                    case 46:     //Snakemaker Snakify
                        AdvancedTransmogrifyComponent advancedTransmogSnek = sourceProjectile.gameObject.AddComponent <AdvancedTransmogrifyComponent>();
                        advancedTransmogSnek.TransmogDataList = new List <AdvancedTransmogrifyComponent.TransmogData>()
                        {
                            new AdvancedTransmogrifyComponent.TransmogData()
                            {
                                identifier        = "BulletShuffle",
                                maintainHPPercent = false,
                                TargetGuid        = "1386da0f42fb4bcabc5be8feb16a7c38",
                                TransmogChance    = 1,
                            }
                        };
                        break;

                    case 47:     //Sunlight Burn
                        sourceProjectile.statusEffectsToApply.Add(StaticStatusEffects.SunlightBurn);
                        break;

                    case 48:     //Tiger
                        SummonTigerModifier tigerness = sourceProjectile.gameObject.AddComponent <SummonTigerModifier>();
                        tigerness.TigerProjectilePrefab = (PickupObjectDatabase.GetById(369) as Gun).DefaultModule.chargeProjectiles[0].Projectile.GetComponent <SummonTigerModifier>().TigerProjectilePrefab;
                        break;

                    case 49:     //Shield on Destroy
                        sourceProjectile.OnDestruction += SpawnShieldOnDestroy;
                        break;

                    case 50:     //Glitter
                        sourceProjectile.ApplyClonedShaderProjModifier((PickupObjectDatabase.GetById(28) as Gun).modifiedFinalVolley.projectiles[0].projectiles[1].GetComponent <ShaderProjModifier>());
                        break;

                    case 51:     //Finished Effect
                        sourceProjectile.gameObject.AddComponent <BlackRevolverModifier>();
                        break;

                    case 52:     //Mimic Gun Effect
                        sourceProjectile.gameObject.AddComponent <EnemyBulletsBecomeJammedModifier>();
                        break;

                    case 53:     //Green Fire
                        sourceProjectile.statusEffectsToApply.Add(StaticStatusEffects.greenFireEffect);
                        sourceProjectile.AdjustPlayerProjectileTint(Color.green, 1);
                        break;

                    case 54:     //Encircler
                        sourceProjectile.ApplyClonedShaderProjModifier((PickupObjectDatabase.GetById(648) as Gun).DefaultModule.projectiles[0].GetComponent <ShaderProjModifier>());
                        break;
                    }
                    sourceProjectile.gameObject.AddComponent <HasBeenBulletShuffled>();
                }
            }
            catch (Exception e)
            {
                ETGModConsole.Log(e.Message);
            }
        }
Exemple #15
0
        private void F**K()
        {
            PlayerController player = this.gun.CurrentOwner as PlayerController;
            bool             flag   = !Assigned;

            if (flag)
            {
                Assigned = true;
                int T = T1;
                if (T == 0)
                {
                    gun.SetBaseMaxAmmo(450);
                    gun.ammo       = 450;
                    gun.reloadTime = 1.1f;
                    LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(Types[T]).gameObject, player);
                    gun.DefaultModule.projectiles[0] = ((Gun)ETGMod.Databases.Items[341]).DefaultModule.projectiles[0];
                    PierceProjModifier orAddComponent = gun.DefaultModule.projectiles[0].gameObject.GetOrAddComponent <PierceProjModifier>();
                    orAddComponent.penetration = 1;
                    BounceProjModifier bounceProj = gun.DefaultModule.projectiles[0].gameObject.GetOrAddComponent <BounceProjModifier>();
                    bounceProj.numberOfBounces = 0;
                }
                if (T == 1)
                {
                    gun.SetBaseMaxAmmo(150);
                    gun.ammo       = 150;
                    gun.reloadTime = 1.8f;
                    LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(Types[T]).gameObject, player);
                    gun.DefaultModule.projectiles[0] = ((Gun)ETGMod.Databases.Items[336]).DefaultModule.projectiles[0];
                    PierceProjModifier orAddComponent = gun.DefaultModule.projectiles[0].gameObject.GetOrAddComponent <PierceProjModifier>();
                    orAddComponent.penetration = 0;
                    gun.DefaultModule.projectiles[0].AppliesFire = false;
                    AIActor           Grenat    = EnemyDatabase.GetOrLoadByGuid("b4666cb6ef4f4b038ba8924fd8adf38f");
                    ExplosiveModifier GetFucked = gun.DefaultModule.projectiles[0].gameObject.AddComponent <ExplosiveModifier>();
                    ExplosionData     die       = new ExplosionData
                    {
                        damageRadius         = 1.5f,
                        damageToPlayer       = 0f,
                        doDamage             = true,
                        damage               = 20f,
                        doExplosionRing      = true,
                        doDestroyProjectiles = true,
                        doForce              = true,
                        debrisForce          = 5f,
                        pushRadius           = 1.6f,
                        force = 8f,
                        preventPlayerForce     = true,
                        explosionDelay         = 0f,
                        usesComprehensiveDelay = false,
                        doScreenShake          = false,
                        playDefaultSFX         = true,
                        effect = Grenat.GetComponent <ExplodeOnDeath>().explosionData.effect
                                 //VFX_Explosion_Tiny,  VFX_Explosion_Newtiny BOTH IN SHARED_AUTO
                    };

                    GetFucked.explosionData = die;
                }
                if (T == 2)
                {
                    gun.SetBaseMaxAmmo(600);
                    gun.ammo       = 600;
                    gun.reloadTime = 1.4f;
                    LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(Types[T]).gameObject, player);
                    gun.DefaultModule.projectiles[0] = ((Gun)ETGMod.Databases.Items[229]).DefaultModule.projectiles[0];
                }
                if (T == 3)
                {
                    gun.SetBaseMaxAmmo(100);
                    gun.ammo       = 100;
                    gun.reloadTime = 1.25f;
                    LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(Types[T]).gameObject, player);
                    gun.DefaultModule.projectiles[0] = ((Gun)ETGMod.Databases.Items[27]).DefaultModule.projectiles[0];
                    gun.DefaultModule.projectiles[0].baseData.damage *= 8.57142857143f;
                    PierceProjModifier orAddComponent = gun.DefaultModule.projectiles[0].gameObject.GetOrAddComponent <PierceProjModifier>();
                    orAddComponent.penetratesBreakables = true;
                    orAddComponent.penetration          = 10000;
                }
                if (T == 4)
                {
                    gun.SetBaseMaxAmmo(800);
                    gun.ammo       = 800;
                    gun.reloadTime = 0f;
                    LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(Types[T]).gameObject, player);
                    gun.DefaultModule.projectiles[0] = ((Gun)ETGMod.Databases.Items[124]).DefaultModule.projectiles[0];
                    gun.DefaultModule.projectiles[0].baseData.damage *= 0.6f;
                }
                int K1 = 0;
                if (K1 == 0)
                {
                    LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsUni[K1]).gameObject, player);
                    HomingModifier homingModifier = gun.DefaultModule.projectiles[0].gameObject.AddComponent <HomingModifier>();
                    homingModifier.HomingRadius    = 5f;
                    homingModifier.AngularVelocity = 50f;
                }
                if (K1 == 1)
                {
                    LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsUni[K1]).gameObject, player);
                    gun.DefaultModule.projectiles[0].AdditionalScaleMultiplier *= 1.25f;
                }
                if (K1 == 2)
                {
                    LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsUni[K1]).gameObject, player);
                    Gun tripleCrossbow = ETGMod.Databases.Items["triple_crossbow"] as Gun;
                    var myEffect       = new GameActorSpeedEffect();
                    foreach (var projmod in tripleCrossbow.RawSourceVolley.projectiles)
                    {
                        foreach (var proj in projmod.projectiles)
                        {
                            if (proj != null)
                            {
                                myEffect.GetCopyOf(proj.speedEffect);
                                myEffect.duration = 10;
                            }
                        }
                    }
                    gun.DefaultModule.projectiles[0].AppliesSpeedModifier = true;
                    gun.DefaultModule.projectiles[0].speedEffect          = myEffect;
                    gun.DefaultModule.projectiles[0].SpeedApplyChance     = .4f;
                }
                if (K1 == 3)
                {
                    LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsUni[K1]).gameObject, player);
                    gun.SetBaseMaxAmmo(Convert.ToInt32((gun.GetBaseMaxAmmo() * 1.25f)));
                    gun.ammo = gun.GetBaseMaxAmmo();
                }
                int K2;
                if (T == 0)
                {
                    K2 = 1;
                    if (K2 == 0)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsGunSaw[K2]).gameObject, player);
                        gun.DefaultModule.projectiles[0].baseData.damage *= 1.35f;
                        Mono.DefaultModule.cooldownTime *= 1.25f;
                    }
                    if (K2 == 1)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsGunSaw[K2]).gameObject, player);
                        BounceProjModifier bounceProj = gun.DefaultModule.projectiles[0].gameObject.GetOrAddComponent <BounceProjModifier>();
                        bounceProj.numberOfBounces += 2;
                    }
                    if (K2 == 2)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsGunSaw[K2]).gameObject, player);
                        Mono.DefaultModule.shootStyle        = ProjectileModule.ShootStyle.Burst;
                        Mono.DefaultModule.burstShotCount    = 5;
                        Mono.DefaultModule.burstCooldownTime = .05f;
                        Mono.DefaultModule.cooldownTime      = .4f;
                    }
                    if (K2 == 3)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsGunSaw[K2]).gameObject, player);
                        gun.DefaultModule.projectiles[0].AppliesPoison     = true;
                        gun.DefaultModule.projectiles[0].healthEffect      = (PickupObjectDatabase.GetById(204) as BulletStatusEffectItem).HealthModifierEffect;
                        gun.DefaultModule.projectiles[0].PoisonApplyChance = .25f;
                    }
                }
                if (T == 1)
                {
                    K2 = UnityEngine.Random.Range(0, 4);
                    //Blazing, toxic, flare, burst
                    if (K2 == 0)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsFire[K2]).gameObject, player);
                        gun.DefaultModule.projectiles[0].OnDestruction += this.FirePool;
                    }
                    if (K2 == 1)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsFire[K2]).gameObject, player);
                        gun.DefaultModule.projectiles[0].OnDestruction   += this.VenomPool;
                        gun.DefaultModule.projectiles[0].DefaultTintColor = new Color(78 / 100f, 5 / 100f, 120 / 100f);
                        gun.DefaultModule.projectiles[0].HasDefaultTint   = true;
                    }
                    if (K2 == 2)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsFire[K2]).gameObject, player);
                        gun.DefaultModule.projectiles[0].OnDestruction += Flares;
                    }
                    if (K2 == 3)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsFire[K2]).gameObject, player);
                        Mono.DefaultModule.shootStyle        = ProjectileModule.ShootStyle.Burst;
                        Mono.DefaultModule.burstShotCount    = 5;
                        Mono.DefaultModule.burstCooldownTime = .2f;
                        Mono.DefaultModule.cooldownTime      = 1f;
                    }
                }
                if (T == 2)
                {
                    //High-caliber, ricochet, burst, poison
                    K2 = UnityEngine.Random.Range(0, 5);
                    if (K2 == 0)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsGunSaw[K2]).gameObject, player);
                        gun.DefaultModule.projectiles[0].baseData.damage *= 3f;
                        Mono.DefaultModule.cooldownTime *= 2f;
                    }
                    if (K2 == 0)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsGunSaw[K2]).gameObject, player);
                        BounceProjModifier bounceProj = gun.DefaultModule.projectiles[0].gameObject.GetOrAddComponent <BounceProjModifier>();
                        bounceProj.numberOfBounces += 2;
                    }
                    if (K2 == 0)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsGunSaw[K2]).gameObject, player);
                        Mono.DefaultModule.shootStyle        = ProjectileModule.ShootStyle.Burst;
                        Mono.DefaultModule.burstShotCount    = 5;
                        Mono.DefaultModule.burstCooldownTime = .05f;
                        Mono.DefaultModule.cooldownTime      = .4f;
                    }
                    if (K2 == 0)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsGunSaw[K2]).gameObject, player);
                        gun.DefaultModule.projectiles[0].AppliesPoison     = true;
                        gun.DefaultModule.projectiles[0].healthEffect      = (PickupObjectDatabase.GetById(204) as BulletStatusEffectItem).HealthModifierEffect;
                        gun.DefaultModule.projectiles[0].PoisonApplyChance = .25f;
                    }
                }
                if (T == 3)
                {
                    //Quick, power up, sidearm
                    K2 = UnityEngine.Random.Range(0, 4);
                    if (K2 == 0)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsRail[K2]).gameObject, player);
                        Mono.reloadTime *= .6f;
                    }
                    if (K2 == 0)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsRail[K2]).gameObject, player);
                        Mono.DefaultModule.projectiles[0].baseData.damage *= 1.25f;
                    }
                    if (K2 == 0)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsRail[K2]).gameObject, player);
                        Mono.DefaultModule.numberOfShotsInClip             = 5;
                        Mono.DefaultModule.projectiles[0].baseData.damage *= .33f;
                    }
                }
                if (T == 4)
                {
                    //Critical, backshot, chain gun
                    K2 = UnityEngine.Random.Range(0, 4);
                    if (K2 == 0)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsRapid[K2]).gameObject, player);
                        gun.PostProcessProjectile += Proj;
                    }
                    if (K2 == 0)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsRapid[K2]).gameObject, player);
                        GunVolleyModificationItem.AddDuplicateOfBaseModule(gun.Volley, player, 1, 7.35f, 180);
                    }
                    if (K2 == 0)
                    {
                        LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(KeyWordsRapid[K2]).gameObject, player);
                        Mono.SetBaseMaxAmmo(Mono.GetBaseMaxAmmo() * 2);
                        Mono.ammo = Mono.GetBaseMaxAmmo();
                        Mono.DefaultModule.cooldownTime = .001f;
                    }
                }
            }
        }
        public static void Add()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("Prime Cannon", "prime_cannon");

            Game.Items.Rename("outdated_gun_mods:prime_cannon", "cel:prime_cannon");
            gun.gameObject.AddComponent <PrimeCannon>();
            gun.SetShortDescription("Leedle");
            gun.SetLongDescription("u-u");
            gun.SetupSprite(null, "prime_cannon_idle_001", 8);
            gun.SetAnimationFPS(gun.shootAnimation, 4);
            gun.SetAnimationFPS(gun.reloadAnimation, 2);
            gun.AddProjectileModuleFrom("38_special", true, false);
            gun.DefaultModule.ammoType      = GameUIAmmoType.AmmoType.SMALL_BULLET;
            gun.DefaultModule.ammoCost      = 1;
            gun.DefaultModule.shootStyle    = ProjectileModule.ShootStyle.Automatic;
            gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random;
            gun.reloadTime     = 0f;
            gun.gunSwitchGroup = (PickupObjectDatabase.GetById(19) as Gun).gunSwitchGroup;
            gun.DefaultModule.angleVariance       = 0f;
            gun.DefaultModule.cooldownTime        = 1f;
            gun.DefaultModule.numberOfShotsInClip = 150;
            Gun gun2 = PickupObjectDatabase.GetById(15) as Gun;

            gun.muzzleFlashEffects = gun2.muzzleFlashEffects;
            gun.SetBaseMaxAmmo(150);
            gun.quality = PickupObject.ItemQuality.EXCLUDED;
            gun.encounterTrackable.EncounterGuid = "For what purpose are you reading this????? why would you?? creep.";
            gun.sprite.IsPerpendicular           = true;
            gun.gunClass = GunClass.RIFLE;
            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;
            gun.barrelOffset.transform.localPosition -= new Vector3(0, .4f);
            projectile.transform.parent = gun.barrelOffset;
            AIActor           Grenat    = EnemyDatabase.GetOrLoadByGuid("b4666cb6ef4f4b038ba8924fd8adf38f");
            ExplosiveModifier GetFucked = projectile.gameObject.AddComponent <ExplosiveModifier>();
            ExplosionData     die       = new ExplosionData
            {
                damageRadius         = 1.5f,
                damageToPlayer       = 0f,
                doDamage             = true,
                damage               = 20f,
                doExplosionRing      = true,
                doDestroyProjectiles = true,
                doForce              = true,
                debrisForce          = 5f,
                pushRadius           = 1.6f,
                force = 8f,
                preventPlayerForce     = true,
                explosionDelay         = 0f,
                usesComprehensiveDelay = false,
                doScreenShake          = false,
                playDefaultSFX         = true,
                effect = Grenat.GetComponent <ExplodeOnDeath>().explosionData.effect
            };

            GetFucked.explosionData = die;
            projectile.SetProjectileSpriteRight("prime_bomb", 9, 9, null, null);
            ETGMod.Databases.Items.Add(gun, null, "ANY");
        }
Exemple #17
0
        public static void Add()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("Bottle Rocket", "bottlerocket");

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

            behav.preventNormalFireAudio = true;
            gun.SetShortDescription("Waterarms Afficionado");
            gun.SetLongDescription("A pressurised bottle of fluid. Pumping it any fuller will send it flying off in erratic directions." + "\n\nProne to exploding.");

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

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

            //GUN STATS
            gun.DefaultModule.ammoCost      = 1;
            gun.doesScreenShake             = true;
            gun.DefaultModule.shootStyle    = ProjectileModule.ShootStyle.Charged;
            gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random;
            gun.reloadTime = 0.5f;
            gun.DefaultModule.cooldownTime  = 1f;
            gun.DefaultModule.angleVariance = 5;
            gun.muzzleFlashEffects          = (PickupObjectDatabase.GetById(359) as Gun).muzzleFlashEffects;

            gun.DefaultModule.numberOfShotsInClip    = 1;
            gun.barrelOffset.transform.localPosition = new Vector3(1.43f, 0.62f, 0f);
            gun.SetBaseMaxAmmo(100);
            gun.ammo     = 100;
            gun.gunClass = GunClass.CHARGE;
            gun.SetAnimationFPS(gun.chargeAnimation, 8);
            gun.GetComponent <tk2dSpriteAnimator>().GetClipByName(gun.chargeAnimation).wrapMode               = tk2dSpriteAnimationClip.WrapMode.LoopSection;
            gun.GetComponent <tk2dSpriteAnimator>().GetClipByName(gun.chargeAnimation).loopStart              = 0;
            gun.GetComponent <tk2dSpriteAnimator>().GetClipByName(gun.chargeAnimation).frames[3].eventAudio   = "Play_WPN_trashgun_impact_01";
            gun.GetComponent <tk2dSpriteAnimator>().GetClipByName(gun.chargeAnimation).frames[3].triggerEvent = true;

            gun.GetComponent <tk2dSpriteAnimator>().GetClipByName(gun.shootAnimation).frames[0].eventAudio   = "Play_ENV_water_splash_01";
            gun.GetComponent <tk2dSpriteAnimator>().GetClipByName(gun.shootAnimation).frames[0].triggerEvent = true;

            //Explosion
            bottleRocketBoom = new ExplosionData()
            {
                effect                 = (PickupObjectDatabase.GetById(36) as Gun).DefaultModule.chargeProjectiles[1].Projectile.hitEffects.overrideMidairDeathVFX,
                ignoreList             = new List <SpeculativeRigidbody>(),
                ss                     = StaticExplosionDatas.tetrisBlockExplosion.ss,
                damageRadius           = 3.5f,
                damageToPlayer         = 0f,
                doDamage               = true,
                damage                 = 19,
                doDestroyProjectiles   = false,
                doForce                = true,
                debrisForce            = 20f,
                preventPlayerForce     = true,
                explosionDelay         = 0.1f,
                usesComprehensiveDelay = false,
                doScreenShake          = true,
                playDefaultSFX         = false,
                force                  = 20,
                breakSecretWalls       = false,
            };

            //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 = 19f;
            projectile.baseData.force *= 2f;
            projectile.baseData.speed *= 1.4f;
            projectile.baseData.range *= 2f;
            projectile.hitEffects.overrideMidairDeathVFX = (PickupObjectDatabase.GetById(33) as Gun).DefaultModule.projectiles[0].hitEffects.overrideMidairDeathVFX;
            projectile.hitEffects.alwaysUseMidair        = true;
            projectile.AnimateProjectile(new List <string> {
                "bottlerocketproj_001",
                "bottlerocketproj_002",
            }, 10, true, new List <IntVector2> {
                new IntVector2(24, 16),  //1
                new IntVector2(24, 16),  //2
            },
                                         AnimateBullet.ConstructListOfSameValues(false, 2),
                                         AnimateBullet.ConstructListOfSameValues(tk2dBaseSprite.Anchor.MiddleCenter, 2),
                                         AnimateBullet.ConstructListOfSameValues(true, 2),
                                         AnimateBullet.ConstructListOfSameValues(false, 2),
                                         AnimateBullet.ConstructListOfSameValues <Vector3?>(null, 2),
                                         AnimateBullet.ConstructListOfSameValues <IntVector2?>(new IntVector2(15, 8), 2),
                                         AnimateBullet.ConstructListOfSameValues <IntVector2?>(null, 2),
                                         AnimateBullet.ConstructListOfSameValues <Projectile>(null, 2));
            projectile.SetProjectileSpriteRight("bottlerocketproj_001", 24, 16, true, tk2dBaseSprite.Anchor.MiddleCenter, 15, 8);
            projectile.gameObject.AddComponent <ProjectileMotionDrift>();
            projectile.gameObject.AddComponent <BounceProjModifier>();
            GoopModifier gooper = projectile.gameObject.AddComponent <GoopModifier>();

            gooper.SpawnGoopInFlight      = true;
            gooper.SpawnGoopOnCollision   = true;
            gooper.CollisionSpawnRadius   = 5;
            gooper.InFlightSpawnRadius    = 1;
            gooper.InFlightSpawnFrequency = 0.05f;
            gooper.goopDefinition         = EasyGoopDefinitions.WaterGoop;
            CustomImpactSoundBehav impactSound = projectile.gameObject.AddComponent <CustomImpactSoundBehav>();

            impactSound.ImpactSFX = "Play_ENM_blobulord_splash_01";
            ExplosiveModifier boom = projectile.gameObject.GetOrAddComponent <ExplosiveModifier>();

            boom.explosionData = bottleRocketBoom;
            boom.doExplosion   = true;
            BeamBulletsBehaviour squirt = projectile.gameObject.AddComponent <BeamBulletsBehaviour>();

            squirt.firetype  = BeamBulletsBehaviour.FireType.BACKWARDS;
            highPressureBeam = UnityEngine.Object.Instantiate <Projectile>((PickupObjectDatabase.GetById(10) as Gun).DefaultModule.projectiles[0]);
            highPressureBeam.baseData.speed *= 2;
            highPressureBeam.gameObject.SetActive(false);
            FakePrefab.MarkAsFakePrefab(highPressureBeam.gameObject);
            UnityEngine.Object.DontDestroyOnLoad(highPressureBeam);
            squirt.beamToFire = highPressureBeam;
            ProjectileModule.ChargeProjectile chargeProj = new ProjectileModule.ChargeProjectile
            {
                Projectile = projectile,
                ChargeTime = 0.5f,
            };
            gun.DefaultModule.chargeProjectiles = new List <ProjectileModule.ChargeProjectile> {
                chargeProj
            };

            gun.DefaultModule.ammoType       = GameUIAmmoType.AmmoType.CUSTOM;
            gun.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("Bottle Rocket Bullets", "NevernamedsItems/Resources/CustomGunAmmoTypes/bottlerocket_clipfull", "NevernamedsItems/Resources/CustomGunAmmoTypes/bottlerocket_clipempty");

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

            highPressurePoison = UnityEngine.Object.Instantiate <Projectile>((PickupObjectDatabase.GetById(208) as Gun).DefaultModule.projectiles[0]);
            highPressurePoison.baseData.speed *= 2;
            highPressurePoison.GetComponent <GoopModifier>().goopDefinition = EasyGoopDefinitions.PlayerFriendlyPoisonGoop;
            highPressurePoison.gameObject.SetActive(false);
            FakePrefab.MarkAsFakePrefab(highPressurePoison.gameObject);
            UnityEngine.Object.DontDestroyOnLoad(highPressurePoison);
            ID = gun.PickupObjectId;
        }
Exemple #18
0
        public static void Add()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("Dynamite Launcher", "dynamitelauncher");

            Game.Items.Rename("outdated_gun_mods:dynamite_launcher", "nn:dynamite_launcher");
            gun.gameObject.AddComponent <DynamiteLauncher>();
            gun.SetShortDescription("Dynamight makes Dynaright");
            gun.SetLongDescription("Fires a potent stick of nitroglycerin." + "\n\nCreated by mad Nitra Gunsmith, before he realised that he didn't have hands.");

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

            gun.outOfAmmoAnimation = "empty";

            gun.SetAnimationFPS(gun.shootAnimation, 12);
            gun.SetAnimationFPS(gun.reloadAnimation, 1);
            gun.gunSwitchGroup = (PickupObjectDatabase.GetById(150) as Gun).gunSwitchGroup;

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

            //GUN STATS
            gun.DefaultModule.ammoCost      = 1;
            gun.DefaultModule.shootStyle    = ProjectileModule.ShootStyle.SemiAutomatic;
            gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random;
            gun.reloadTime = 2f;
            gun.DefaultModule.cooldownTime           = 1f;
            gun.DefaultModule.numberOfShotsInClip    = 1;
            gun.barrelOffset.transform.localPosition = new Vector3(1.56f, 0.62f, 0f);
            gun.SetBaseMaxAmmo(40);
            gun.gunClass = GunClass.EXPLOSIVE;
            //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.baseData.damage      *= 6f;
            projectile.baseData.speed       *= 0.4f;
            projectile.baseData.range       *= 1f;
            BounceProjModifier Bouncing = projectile.gameObject.GetOrAddComponent <BounceProjModifier>();

            Bouncing.numberOfBounces = 1;
            ExplosiveModifier exploding = projectile.gameObject.GetOrAddComponent <ExplosiveModifier>();

            exploding.doExplosion   = true;
            exploding.explosionData = StaticExplosionDatas.customDynamiteExplosion;

            projectile.pierceMinorBreakables = true;


            projectile.AnimateProjectile(new List <string> {
                "dynamiteproj_1",
                "dynamiteproj_2",
                "dynamiteproj_3",
                "dynamiteproj_4",
            }, 8, true, new List <IntVector2> {
                new IntVector2(14, 15), //1
                new IntVector2(15, 14), //2
                new IntVector2(14, 15), //3
                new IntVector2(15, 14), //4
            }, AnimateBullet.ConstructListOfSameValues(false, 4), AnimateBullet.ConstructListOfSameValues(tk2dBaseSprite.Anchor.MiddleCenter, 4), AnimateBullet.ConstructListOfSameValues(true, 4), AnimateBullet.ConstructListOfSameValues(false, 4),
                                         AnimateBullet.ConstructListOfSameValues <Vector3?>(null, 4), AnimateBullet.ConstructListOfSameValues <IntVector2?>(null, 4), AnimateBullet.ConstructListOfSameValues <IntVector2?>(null, 4), AnimateBullet.ConstructListOfSameValues <Projectile>(null, 4));

            gun.DefaultModule.ammoType       = GameUIAmmoType.AmmoType.CUSTOM;
            gun.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("Dynamite Launcher Bullets", "NevernamedsItems/Resources/CustomGunAmmoTypes/dynamitelauncher_clipfull", "NevernamedsItems/Resources/CustomGunAmmoTypes/dynamitelauncher_clipempty");

            gun.quality = PickupObject.ItemQuality.A;
            ETGMod.Databases.Items.Add(gun, null, "ANY");

            DynamiteLauncherID = gun.PickupObjectId;
            gun.AddToSubShop(ItemBuilder.ShopType.Trorc);

            gun.SetupUnlockOnCustomFlag(CustomDungeonFlags.NITRA_QUEST_REWARDED, true);
        }
        public static void Add()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("Firework Rifle", "firework_rifle");

            Game.Items.Rename("outdated_gun_mods:firework_rifle", "cel:firework_rifle");
            gun.gameObject.AddComponent <FireworkRifle>();
            gun.SetShortDescription("Bang, Bang, Bang! Here We Go!");
            gun.SetLongDescription("Shoots powerful fireworks.\n\nThis gun came from a world caught in an eternal struggle for balance. It was created to celebrate the journey of a hero.");

            gun.SetupSprite(null, "firework_rifle_idle_001", 8);
            gun.SetAnimationFPS(gun.shootAnimation, 18);
            gun.SetAnimationFPS(gun.reloadAnimation, 2);
            gun.AddProjectileModuleFrom("ak-47", true, false);

            gun.DefaultModule.ammoCost      = 1;
            gun.DefaultModule.shootStyle    = ProjectileModule.ShootStyle.Automatic;
            gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random;
            gun.reloadTime = .8f;
            gun.DefaultModule.angleVariance       = 4f;
            gun.DefaultModule.cooldownTime        = .2f;
            gun.DefaultModule.numberOfShotsInClip = 12;
            gun.DefaultModule.ammoType            = (PickupObjectDatabase.GetById(16) as Gun).DefaultModule.ammoType;
            Gun gun2 = PickupObjectDatabase.GetById(32) as Gun;

            gun.muzzleFlashEffects = gun2.muzzleFlashEffects;
            gun.SetBaseMaxAmmo(150);
            gun.barrelOffset.transform.localPosition = new Vector3(2, .3f);
            gun.quality = PickupObject.ItemQuality.S;
            gun.encounterTrackable.EncounterGuid = "pewpewgoboomboomdeath.";
            gun.sprite.IsPerpendicular           = true;
            gun.gunClass = GunClass.EXPLOSIVE;
            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.shouldRotate          = true;
            projectile.SetProjectileSpriteRight("firework_proj", 13, 7, null, null);
            AIActor           Firecracker = EnemyDatabase.GetOrLoadByGuid("5f15093e6f684f4fb09d3e7e697216b4");
            ExplosiveModifier GetFucked   = projectile.gameObject.AddComponent <ExplosiveModifier>();

            ExplosionData die = new ExplosionData
            {
                damageRadius         = 1.5f,
                damageToPlayer       = 0f,
                doDamage             = true,
                damage               = 15f,
                doExplosionRing      = true,
                doDestroyProjectiles = true,
                doForce              = true,
                debrisForce          = 5f,
                pushRadius           = 1.6f,
                force = 8f,
                preventPlayerForce     = true,
                explosionDelay         = 0f,
                usesComprehensiveDelay = false,
                doScreenShake          = false,
                playDefaultSFX         = true,
                effect = Firecracker.GetComponent <ExplodeOnDeath>().explosionData.effect,
                //AssetBundle assetBundle = ResourceManager.LoadAssetBundle("shared_auto_001");
                //  GameObject TestingVFX = assetBundle.LoadAsset<GameObject>("VFX_Dust_Explosion");
            };

            GetFucked.explosionData = die;


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

            gun.AddToSubShop(ItemBuilder.ShopType.Trorc);
        }
Exemple #20
0
        public static void Add()
        {

            Gun gun = ETGMod.Databases.Items.NewGun("Plasma Cannon", "plasma_cannon");
            Game.Items.Rename("outdated_gun_mods:plasma_cannon", "cel:plasma_cannon");
            gun.gameObject.AddComponent<PlasmaCannon>();
            gun.SetShortDescription("Spelunk'd");
            gun.SetLongDescription("Shoots extremely powerful explosions. Use with extreme caution.\n\nIt was built by aliens from Earth's moon, but sadly the recoil proved to be too strong for them to use it easily.");
            gun.SetupSprite(null, "plasma_cannon_idle_001", 8);
            gun.SetAnimationFPS(gun.shootAnimation, 18);
            gun.SetAnimationFPS(gun.reloadAnimation, 6);
            gun.AddProjectileModuleFrom("38_special", true, false);
            gun.DefaultModule.ammoCost = 1;
            gun.DefaultModule.shootStyle = ProjectileModule.ShootStyle.SemiAutomatic;
            gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random;
            gun.reloadTime = 2f;
            gun.DefaultModule.angleVariance = 0f;
            gun.DefaultModule.cooldownTime = .2f;
            gun.DefaultModule.numberOfShotsInClip = 1;
            gun.InfiniteAmmo = true;
            gun.DefaultModule.ammoType = (PickupObjectDatabase.GetById(16) as Gun).DefaultModule.ammoType;
            Gun gun2 = PickupObjectDatabase.GetById(32) as Gun;
            gun.muzzleFlashEffects = gun2.muzzleFlashEffects;
            gun.SetBaseMaxAmmo(150);
            gun.barrelOffset.transform.localPosition = new Vector3(1.2f, .3f);
            gun.quality = PickupObject.ItemQuality.B;
            gun.encounterTrackable.EncounterGuid = "Good Luck Kiddo.";
            gun.sprite.IsPerpendicular = true;
            gun.gunClass = GunClass.EXPLOSIVE;
            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 *= 3;
            projectile.baseData.range *= 10000;
            projectile.baseData.speed *= 4;
            projectile.shouldRotate = true;
            //projectile.AppliesKnockbackToPlayer = true;
            //projectile.PlayerKnockbackForce = 100;
            Gun gun3 = PickupObjectDatabase.GetById(32) as Gun;
            gun.gunSwitchGroup = gun3.gunSwitchGroup;
            projectile.SetProjectileSpriteRight("plasma_shot", 32, 20, null, null);
            AIActor Firecracker = EnemyDatabase.GetOrLoadByGuid("4d37ce3d666b4ddda8039929225b7ede");
            ExplosiveModifier Spelunked = projectile.gameObject.AddComponent<ExplosiveModifier>();

            ExplosionData YourAreDecease = new ExplosionData
            {
                damageRadius = 5f,
                damageToPlayer = 0.5f,
                doDamage = true,
                damage = 35f,
                doExplosionRing = true,
                doDestroyProjectiles = true,
                doForce = true,
                debrisForce = 100f,
                pushRadius = 7f,
                force = 50f,
                preventPlayerForce = false,
                explosionDelay = 0f,
                usesComprehensiveDelay = false,
                doScreenShake = false,
                playDefaultSFX = true,
                effect = Firecracker.GetComponent<ExplodeOnDeath>().explosionData.effect,
                forceUseThisRadius = true,
                //AssetBundle assetBundle = ResourceManager.LoadAssetBundle("shared_auto_001");
                //  GameObject TestingVFX = assetBundle.LoadAsset<GameObject>("VFX_Dust_Explosion");
            };
            Spelunked.explosionData = YourAreDecease;
            Spelunked.IgnoreQueues = true;

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

            gun.AddToSubShop(ItemBuilder.ShopType.Trorc);

        }
Exemple #21
0
        private void HandleProjectileEffect(TableTechChaosEffectIdentifier identifier, FlippableCover table)
        {
            if (identifier == TableTechChaosEffectIdentifier.PROJECTILE)
            {
                GameObject original = (GameObject)ResourceCache.Acquire("Global VFX/VFX_Table_Exhaust");
                Vector2    vector   = DungeonData.GetIntVector2FromDirection(table.DirectionFlipped).ToVector2();
                float      z        = BraveMathCollege.Atan2Degrees(vector);
                Vector3    zero     = Vector3.zero;
                switch (table.DirectionFlipped)
                {
                case DungeonData.Direction.NORTH:
                    zero = Vector3.zero;
                    break;

                case DungeonData.Direction.EAST:
                    zero = new Vector3(-0.5f, 0.25f, 0f);
                    break;

                case DungeonData.Direction.SOUTH:
                    zero = new Vector3(0f, 0.5f, 1f);
                    break;

                case DungeonData.Direction.WEST:
                    zero = new Vector3(0.5f, 0.25f, 0f);
                    break;
                }
                GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(original, table.specRigidbody.UnitCenter.ToVector3ZisY(0f) + zero, Quaternion.Euler(0f, 0f, z));
                gameObject.transform.parent = table.specRigidbody.transform;
                Projectile projectile = table.specRigidbody.gameObject.AddComponent <Projectile>();
                projectile.Shooter         = base.Owner.specRigidbody;
                projectile.Owner           = base.Owner;
                projectile.baseData.damage = 30f;
                projectile.baseData.range  = 1000f;
                projectile.baseData.speed  = 20f;
                projectile.baseData.force  = 50f;
                projectile.baseData.UsesCustomAccelerationCurve     = true;
                projectile.baseData.AccelerationCurve               = this.CustomAccelerationCurve;
                projectile.baseData.CustomAccelerationCurveDuration = 0.8f;
                projectile.shouldRotate = false;
                projectile.Start();
                projectile.SendInDirection(vector, true, true);
                projectile.collidesWithProjectiles = true;
                projectile.projectileHitHealth     = 20;
                Action <Projectile> value = delegate(Projectile p)
                {
                    if (table && table.shadowSprite)
                    {
                        table.shadowSprite.renderer.enabled = false;
                    }
                };
                projectile.OnDestruction += value;
                ExplosiveModifier explosiveModifier = projectile.gameObject.AddComponent <ExplosiveModifier>();
                explosiveModifier.explosionData = this.ProjectileExplosionData;
                table.PreventPitFalls           = true;
                if (base.Owner && base.Owner.PlayerHasActiveSynergy("#HIDDEN_TECH_SUPER_CHAOS"))
                {
                    HomingModifier homingModifier = projectile.gameObject.AddComponent <HomingModifier>();
                    homingModifier.AssignProjectile(projectile);
                    homingModifier.HomingRadius    = 20f;
                    homingModifier.AngularVelocity = 720f;
                    BounceProjModifier bounceProjModifier = projectile.gameObject.AddComponent <BounceProjModifier>();
                    bounceProjModifier.numberOfBounces    = 4;
                    bounceProjModifier.onlyBounceOffTiles = true;
                }
            }
        }
Exemple #22
0
 private void OnPostProcessProjectile(Projectile proj, float f)
 {
     if (this.m_owner.HasPickupID(351))
     {
         ExplosiveModifier mod = proj.gameObject.AddComponent <ExplosiveModifier>();
         mod.explosionData = GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultExplosionData;
     }
     if (this.m_owner.HasPickupID(348))
     {
         proj.baseData.speed  *= 2f;
         proj.baseData.damage *= 1.5f;
     }
     if (this.m_owner.HasPickupID(349))
     {
         proj.baseData.speed  /= 2f;
         proj.baseData.damage *= 2f;
         proj.baseData.force  *= 1.5f;
     }
     if (this.m_owner.HasPickupID(350))
     {
         PierceProjModifier pierceMod = proj.gameObject.GetOrAddComponent <PierceProjModifier>();
         pierceMod.penetratesBreakables       = true;
         pierceMod.preventPenetrationOfActors = false;
         pierceMod.penetration = 999;
     }
     if (this.m_owner.HasPickupID(303))
     {
         proj.BossDamageMultiplier *= 2f;
         proj.ignoreDamageCaps      = true;
     }
     if (this.m_owner.HasPickupID(491) || this.m_owner.PlayerHasCompletionGun())
     {
         if (UnityEngine.Random.value <= 0.05f)
         {
             Projectile proj2             = ((Gun)PickupObjectDatabase.GetById(16)).DefaultModule.projectiles[UnityEngine.Random.Range(0, ((Gun)PickupObjectDatabase.GetById(476)).DefaultModule.projectiles.Count)];
             BraveInput instanceForPlayer = BraveInput.GetInstanceForPlayer(this.m_owner.PlayerIDX);
             bool       flag2             = instanceForPlayer == null;
             float      z     = 0;
             bool       notDo = false;
             if (!flag2)
             {
                 bool    flag3 = instanceForPlayer.IsKeyboardAndMouse(false);
                 Vector2 a     = Vector2.zero;
                 if (flag3)
                 {
                     a = this.m_owner.unadjustedAimPoint.XY() - base.sprite.WorldCenter;
                 }
                 else
                 {
                     bool flag4 = instanceForPlayer.ActiveActions == null;
                     if (flag4)
                     {
                         notDo = true;
                     }
                     else
                     {
                         a = instanceForPlayer.ActiveActions.Aim.Vector;
                     }
                 }
                 if (!notDo)
                 {
                     a.Normalize();
                     z = BraveMathCollege.Atan2Degrees(a);
                 }
             }
             if (!notDo)
             {
                 GameObject obj       = SpawnManager.SpawnProjectile(proj2.gameObject, this.m_owner.sprite.WorldCenter, Quaternion.Euler(0, 0, z));
                 Projectile component = obj.GetComponent <Projectile>();
                 if (component != null)
                 {
                     component.Owner   = this.m_owner;
                     component.Shooter = this.m_owner.specRigidbody;
                 }
             }
         }
     }
     if (this.m_owner.HasPickupID(492) || this.m_owner.PlayerHasCompletionGun())
     {
         if (UnityEngine.Random.value <= 0.1f)
         {
             proj.AdjustPlayerProjectileTint(Color.red, 0);
             proj.OnHitEnemy += delegate(Projectile proj3, SpeculativeRigidbody enemyRigidbody, bool fatal)
             {
                 if (enemyRigidbody.aiActor != null)
                 {
                     AIActor             aiactor      = enemyRigidbody.aiActor;
                     AIActorDebuffEffect debuffEffect = null;
                     foreach (AttackBehaviorBase attackBehaviour in EnemyDatabase.GetOrLoadByGuid((PickupObjectDatabase.GetById(492) as CompanionItem).CompanionGuid).behaviorSpeculator.AttackBehaviors)
                     {
                         if (attackBehaviour is WolfCompanionAttackBehavior)
                         {
                             debuffEffect = (attackBehaviour as WolfCompanionAttackBehavior).EnemyDebuff;
                         }
                     }
                     if (debuffEffect != null)
                     {
                         aiactor.ApplyEffect(debuffEffect, 1, null);
                     }
                 }
             };
         }
     }
     if (this.m_owner.HasPickupID(493) || this.m_owner.PlayerHasCompletionGun())
     {
         if (UnityEngine.Random.value <= 0.1f)
         {
             Projectile proj2             = ((Gun)PickupObjectDatabase.GetById(476)).DefaultModule.projectiles[UnityEngine.Random.Range(0, ((Gun)PickupObjectDatabase.GetById(476)).DefaultModule.projectiles.Count)];
             BraveInput instanceForPlayer = BraveInput.GetInstanceForPlayer(this.m_owner.PlayerIDX);
             bool       flag2             = instanceForPlayer == null;
             float      z     = 0;
             bool       notDo = false;
             if (!flag2)
             {
                 bool    flag3 = instanceForPlayer.IsKeyboardAndMouse(false);
                 Vector2 a     = Vector2.zero;
                 if (flag3)
                 {
                     a = this.m_owner.unadjustedAimPoint.XY() - base.sprite.WorldCenter;
                 }
                 else
                 {
                     bool flag4 = instanceForPlayer.ActiveActions == null;
                     if (flag4)
                     {
                         notDo = true;
                     }
                     else
                     {
                         a = instanceForPlayer.ActiveActions.Aim.Vector;
                     }
                 }
                 if (!notDo)
                 {
                     a.Normalize();
                     z = BraveMathCollege.Atan2Degrees(a);
                 }
             }
             if (!notDo)
             {
                 GameObject obj       = SpawnManager.SpawnProjectile(proj2.gameObject, this.m_owner.sprite.WorldCenter, Quaternion.Euler(0, 0, z));
                 Projectile component = obj.GetComponent <Projectile>();
                 if (component != null)
                 {
                     component.Owner   = this.m_owner;
                     component.Shooter = this.m_owner.specRigidbody;
                 }
             }
         }
     }
     if (this.m_owner.HasPickupID(494) || this.m_owner.PlayerHasCompletionGun())
     {
         if (UnityEngine.Random.value <= 0.05f)
         {
             proj.AdjustPlayerProjectileTint(Color.cyan, 0, 0);
             proj.BossDamageMultiplier *= 2;
             proj.ignoreDamageCaps      = true;
         }
     }
     if (this.m_owner.HasPickupID(573) || this.m_owner.PlayerHasCompletionGun())
     {
         if (UnityEngine.Random.value <= 0.25f)
         {
             proj.AdjustPlayerProjectileTint(Color.white, 0, 0);
             proj.OnHitEnemy += delegate(Projectile proj2, SpeculativeRigidbody enemyRigidbody, bool fatal)
             {
                 if (enemyRigidbody.aiActor != null && enemyRigidbody.aiActor.behaviorSpeculator != null)
                 {
                     enemyRigidbody.aiActor.behaviorSpeculator.Stun(2f, true);
                 }
             };
         }
     }
     if (this.m_owner.HasPickupID(572) || this.m_owner.PlayerHasCompletionGun())
     {
         if (this.m_owner.healthHaver != null && this.m_owner.healthHaver.GetCurrentHealthPercentage() >= 1f)
         {
             proj.baseData.damage *= 1.5f;
             proj.AdjustPlayerProjectileTint(Color.magenta, 0, 0);
         }
     }
 }
Exemple #23
0
        public static void Add()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("ARC Cannon", "arccannon");

            Game.Items.Rename("outdated_gun_mods:arc_cannon", "nn:arc_cannon");
            gun.gameObject.AddComponent <ARCCannon>();
            gun.SetShortDescription("All Lightning");
            gun.SetLongDescription("The ARC Cannon was commissioned from the ARC Private Security Company by the Sultan of a distant planet, who now spends his free time striking ships from the sky and declaring himself a god.");

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

            gun.SetAnimationFPS(gun.shootAnimation, 15);
            gun.SetAnimationFPS(gun.reloadAnimation, 0);

            gun.AddProjectileModuleFrom(PickupObjectDatabase.GetById(ARCPistol.ID) as Gun, true, false);
            gun.gunSwitchGroup = (PickupObjectDatabase.GetById(153) as Gun).gunSwitchGroup;

            //GUN STATS
            gun.muzzleFlashEffects          = (PickupObjectDatabase.GetById(228) as Gun).muzzleFlashEffects;
            gun.DefaultModule.ammoCost      = 1;
            gun.DefaultModule.shootStyle    = ProjectileModule.ShootStyle.SemiAutomatic;
            gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random;
            gun.reloadTime = 3f;
            gun.DefaultModule.cooldownTime           = 1f;
            gun.DefaultModule.numberOfShotsInClip    = 1;
            gun.barrelOffset.transform.localPosition = new Vector3(45f / 16f, 16f / 16f, 0f);
            gun.SetBaseMaxAmmo(40);
            gun.gunClass = GunClass.RIFLE;
            gun.DefaultModule.ammoType       = GameUIAmmoType.AmmoType.CUSTOM;
            gun.DefaultModule.customAmmoType = "ARC Bullets";

            //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.baseData.damage       = 20f;
            LightningProjectileComp lightning = projectile.gameObject.GetComponent <LightningProjectileComp>();

            lightning.lightningWidth = 7;

            ExplosiveModifier explode = projectile.gameObject.AddComponent <ExplosiveModifier>();

            explode.explosionData = new ExplosionData()
            {
                breakSecretWalls = false,
                //effect = (PickupObjectDatabase.GetById(36) as Gun).DefaultModule.chargeProjectiles[1].Projectile.projectile.hitEffects.overrideEarlyDeathVfx,
                effect               = EasyVFXDatabase.ShittyElectricExplosion,
                doDamage             = true,
                damageRadius         = 3,
                damageToPlayer       = 0,
                damage               = 40,
                debrisForce          = 20,
                doExplosionRing      = true,
                doDestroyProjectiles = true,
                doForce              = true,
                doScreenShake        = true,
                playDefaultSFX       = true,
                force = 20,
            };

            Projectile subLightning = UnityEngine.Object.Instantiate <Projectile>((PickupObjectDatabase.GetById(ARCPistol.ID) as Gun).DefaultModule.projectiles[0]);

            subLightning.gameObject.SetActive(false);
            FakePrefab.MarkAsFakePrefab(subLightning.gameObject);
            UnityEngine.Object.DontDestroyOnLoad(subLightning);
            subLightning.baseData.damage = 5f;
            LightningProjectileComp lightning2 = subLightning.gameObject.GetComponent <LightningProjectileComp>();

            subLightning.projectile.gameObject.AddComponent <PierceProjModifier>();
            lightning2.targetEnemies = false;

            SpawnProjModifier flakLightning = projectile.gameObject.AddComponent <SpawnProjModifier>();

            flakLightning.numberToSpawnOnCollison           = 5;
            flakLightning.numToSpawnInFlight                = 0;
            flakLightning.PostprocessSpawnedProjectiles     = true;
            flakLightning.projectileToSpawnOnCollision      = subLightning;
            flakLightning.randomRadialStartAngle            = true;
            flakLightning.spawnCollisionProjectilesOnBounce = true;
            flakLightning.spawnOnObjectCollisions           = true;
            flakLightning.spawnProjecitlesOnDieInAir        = true;
            flakLightning.spawnProjectilesOnCollision       = true;
            flakLightning.spawnProjectilesInFlight          = false;
            flakLightning.alignToSurfaceNormal              = true;

            gun.quality = PickupObject.ItemQuality.A;
            ETGMod.Databases.Items.Add(gun, null, "ANY");


            ID = gun.PickupObjectId;
        }
Exemple #24
0
        public static void Add()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("Felissile", "felissile");

            Game.Items.Rename("outdated_gun_mods:felissile", "nn:felissile");
            gun.gameObject.AddComponent <Felissile>();
            gun.SetShortDescription("What's New?");
            gun.SetLongDescription("Fires a rocket on the first shot of it's clip." + "\n\nOnce part of a peculiar XXXS Size mech suit.");

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

            gun.SetAnimationFPS(gun.shootAnimation, 15);

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

            //GUN STATS
            gun.DefaultModule.ammoCost      = 1;
            gun.DefaultModule.shootStyle    = ProjectileModule.ShootStyle.SemiAutomatic;
            gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random;
            gun.reloadTime = 2.5f;
            gun.DefaultModule.cooldownTime           = 0.25f;
            gun.DefaultModule.numberOfShotsInClip    = 10;
            gun.barrelOffset.transform.localPosition = new Vector3(1.12f, 0.37f, 0f);
            gun.SetBaseMaxAmmo(500);

            gun.DefaultModule.usesOptionalFinalProjectile = true;
            gun.DefaultModule.numberOfFinalProjectiles    = 9;
            gun.gunClass = GunClass.EXPLOSIVE;
            //BULLET STATS
            Projectile missileProjectile = UnityEngine.Object.Instantiate <Projectile>(gun.DefaultModule.projectiles[0]);

            missileProjectile.gameObject.SetActive(false);
            FakePrefab.MarkAsFakePrefab(missileProjectile.gameObject);
            UnityEngine.Object.DontDestroyOnLoad(missileProjectile);
            gun.DefaultModule.projectiles[0]  = missileProjectile;
            missileProjectile.baseData.damage = 15f;
            ExplosiveModifier explosion = missileProjectile.gameObject.GetComponent <ExplosiveModifier>();

            if (explosion)
            {
                Destroy(explosion);
            }
            ExplosiveModifier explosiveModifier = missileProjectile.gameObject.AddComponent <ExplosiveModifier>();

            explosiveModifier.doExplosion      = true;
            explosiveModifier.explosionData    = FelissileExplosion;
            missileProjectile.baseData.range  *= 0.5f;
            missileProjectile.baseData.speed  *= 3f;
            missileProjectile.transform.parent = gun.barrelOffset;
            missileProjectile.SetProjectileSpriteRight("felissile_rocket_projectile", 16, 11, false, tk2dBaseSprite.Anchor.MiddleCenter, 14, 3);



            Projectile projectile = UnityEngine.Object.Instantiate <Projectile>((PickupObjectDatabase.GetById(56) as Gun).DefaultModule.projectiles[0]);

            projectile.gameObject.SetActive(false);
            FakePrefab.MarkAsFakePrefab(projectile.gameObject);
            UnityEngine.Object.DontDestroyOnLoad(projectile);
            projectile.baseData.speed *= 1.1f;
            projectile.baseData.damage = 11f;
            projectile.SetProjectileSpriteRight("felissile_normal_projectile", 10, 9, true, tk2dBaseSprite.Anchor.MiddleCenter, 9, 8);
            projectile.hitEffects.alwaysUseMidair        = true;
            projectile.hitEffects.overrideMidairDeathVFX = EasyVFXDatabase.WhiteCircleVFX;

            gun.DefaultModule.ammoType       = GameUIAmmoType.AmmoType.CUSTOM;
            gun.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("Felissile Rockets", "NevernamedsItems/Resources/CustomGunAmmoTypes/felissile_clipfull", "NevernamedsItems/Resources/CustomGunAmmoTypes/felissile_clipempty");

            //gun.DefaultModule.finalAmmoType = GameUIAmmoType.AmmoType.CUSTOM;
            //gun.DefaultModule.finalCustomAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("Felissile Bullets", "NevernamedsItems/Resources/CustomGunAmmoTypes/minutegun_clipempty", "NevernamedsItems/Resources/CustomGunAmmoTypes/minutegun_clipfull");

            gun.DefaultModule.finalProjectile = projectile;
            gun.gunHandedness = GunHandedness.HiddenOneHanded;

            gun.quality = PickupObject.ItemQuality.B; //A
            ETGMod.Databases.Items.Add(gun, null, "ANY");

            ID = gun.PickupObjectId;
        }
Exemple #25
0
        public static void Add()
        {
            // Get yourself a new gun "base" first.
            // Let's just call it "Basic Gun", and use "jpxfrd" for all sprites and as "codename" All sprites must begin with the same word as the codename. For example, your firing sprite would be named "jpxfrd_fire_001".
            Gun gun = ETGMod.Databases.Items.NewGun("Terragun", "terragun");

            // "kp:basic_gun determines how you spawn in your gun through the console. You can change this command to whatever you want, as long as it follows the "name:itemname" template.
            Game.Items.Rename("outdated_gun_mods:terragun", "cak:terragun");
            gun.gameObject.AddComponent <Terragun>();
            //These two lines determines the description of your gun, ".SetShortDescription" being the description that appears when you pick up the gun and ".SetLongDescription" being the description in the Ammonomicon entry.
            gun.SetShortDescription("Hello Terraria Enthusiasts");
            gun.SetLongDescription("Ripped straight from the ground, this makes for a treemendous weapon.");
            // This is required, unless you want to use the sprites of the base gun.
            // That, by default, is the pea shooter.
            // SetupSprite sets up the default gun sprite for the ammonomicon and the "gun get" popup.
            // WARNING: Add a copy of your default sprite to Ammonomicon Encounter Icon Collection!
            // That means, "sprites/Ammonomicon Encounter Icon Collection/defaultsprite.png" in your mod .zip. You can see an example of this with inside the mod folder.
            gun.SetupSprite(null, "terragun_idle_001", 8);
            // ETGMod automatically checks which animations are available.
            // The numbers next to "shootAnimation" determine the animation fps. You can also tweak the animation fps of the reload animation and idle animation using this method.
            gun.SetAnimationFPS(gun.shootAnimation, 1);
            gun.SetAnimationFPS(gun.reloadAnimation, 1);
            // Every modded gun has base projectile it works with that is borrowed from other guns in the game.
            // The gun names are the names from the JSON dump! While most are the same, some guns named completely different things. If you need help finding gun names, ask a modder on the Gungeon discord.
            gun.AddProjectileModuleFrom(PickupObjectDatabase.GetById(47) as Gun, true, false);
            // Here we just take the default projectile module and change its settings how we want it to be.
            gun.DefaultModule.ammoCost      = 1;
            gun.DefaultModule.shootStyle    = ProjectileModule.ShootStyle.SemiAutomatic;
            gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random;
            gun.reloadTime = 0.5f;
            gun.DefaultModule.cooldownTime        = 0.1f;
            gun.DefaultModule.numberOfShotsInClip = 1;
            gun.SetBaseMaxAmmo(50);
            gun.barrelOffset.localPosition += new Vector3(1.45f, -0.4f, 0f);
            Gun gun3 = (Gun)ETGMod.Databases.Items["demon_head"];

            gun.muzzleFlashEffects = gun3.muzzleFlashEffects;
            // Here we just set the quality of the gun and the "EncounterGuid", which is used by Gungeon to identify the gun.
            gun.quality = PickupObject.ItemQuality.EXCLUDED;
            gun.encounterTrackable.EncounterGuid = "terragun";
            //This block of code helps clone our projectile. Basically it makes it so things like Shadow Clone and Hip Holster keep the stats/sprite of your custom gun's projectiles.
            Projectile projectile = UnityEngine.Object.Instantiate <Projectile>(gun.DefaultModule.projectiles[0]);

            projectile.gameObject.SetActive(false);
            FakePrefab.MarkAsFakePrefab(projectile.gameObject);
            UnityEngine.Object.DontDestroyOnLoad(projectile);
            if (projectile.gameObject.GetComponent <ProjectileSpawnedTrailModifier>())
            {
                Destroy(projectile.gameObject.GetComponent <ProjectileSpawnedTrailModifier>());
            }
            gun.DefaultModule.projectiles[0] = projectile;
            //projectile.baseData allows you to modify the base properties of your projectile module.
            //In our case, our gun uses modified projectiles from the ak-47.
            //Setting static values for a custom gun's projectile stats prevents them from scaling with player stats and bullet modifiers (damage, shotspeed, knockback)
            //You have to multiply the value of the original projectile you're using instead so they scale accordingly. For example if the projectile you're using as a base has 10 damage and you want it to be 6 you use this
            //In our case, our projectile has a base damage of 5.5, so we multiply it by 1.1 so it does 10% more damage from the ak-47.
            projectile.baseData.damage          *= 5.5f;
            projectile.baseData.speed           *= 0.6f;
            projectile.AdditionalScaleMultiplier = 1.3f;
            projectile.transform.parent          = gun.barrelOffset;
            ExplosiveModifier explosiveModifier = projectile.gameObject.AddComponent <ExplosiveModifier>();

            explosiveModifier.doExplosion   = true;
            explosiveModifier.explosionData = Terragun.FireLanceExplosion;
            //This determines what sprite you want your projectile to use. Note this isn't necessary if you don't want to have a custom projectile sprite.
            //The x and y values determine the size of your custom projectile
            projectile.SetProjectileSpriteRight("terragun_projectile", 41, 36, null, null);
            ETGMod.Databases.Items.Add(gun, null, "ANY");
        }
Exemple #26
0
        public static void ExplosiveHook(Action <ExplosiveModifier, Vector2, bool, CollisionData> orig, ExplosiveModifier self, Vector2 sourceNormal, bool ignoreDamageCaps = false, CollisionData cd = null)
        {
            if (self.projectile && self.projectile.Owner)
            {
                if (self.projectile.Owner is PlayerController)
                {
                    for (int i = 0; i < GameManager.Instance.AllPlayers.Length; i++)
                    {
                        PlayerController playerController = GameManager.Instance.AllPlayers[i];
                        if (playerController && playerController.specRigidbody)
                        {
                            if (playerController.HasPickupID(ETGMod.Databases.Items["Nuclear Talisman"].PickupObjectId))
                            {
                                self.explosionData.ignoreList.Remove(playerController.specRigidbody);
                                self.explosionData.damageToPlayer = 4;
                                if (playerController.HasPickupID(ETGMod.Databases.Items["Boiling Veins"].PickupObjectId) & playerController.healthHaver.GetCurrentHealth() <= 2)
                                {
                                    self.explosionData.ignoreList.Add(playerController.specRigidbody);
                                }
                            }
                            else
                            {
                                self.explosionData.ignoreList.Add(playerController.specRigidbody);
                            }
                        }
                    }
                }
                else
                {
                    self.explosionData.ignoreList.Add(self.projectile.Owner.specRigidbody);
                }
            }
            Vector3 vector = (cd == null) ? self.specRigidbody.UnitCenter.ToVector3ZUp(0f) : cd.Contact.ToVector3ZUp(0f);

            if (self.doExplosion)
            {
                CoreDamageTypes coreDamageTypes = CoreDamageTypes.None;
                if (self.explosionData.doDamage && self.explosionData.damageRadius < 10f && self.projectile)
                {
                    if (self.projectile.AppliesFreeze)
                    {
                        coreDamageTypes |= CoreDamageTypes.Ice;
                    }
                    if (self.projectile.AppliesFire)
                    {
                        coreDamageTypes |= CoreDamageTypes.Fire;
                    }
                    if (self.projectile.AppliesPoison)
                    {
                        coreDamageTypes |= CoreDamageTypes.Poison;
                    }
                    if (self.projectile.statusEffectsToApply != null)
                    {
                        for (int j = 0; j < self.projectile.statusEffectsToApply.Count; j++)
                        {
                            GameActorEffect gameActorEffect = self.projectile.statusEffectsToApply[j];
                            if (gameActorEffect is GameActorFreezeEffect)
                            {
                                coreDamageTypes |= CoreDamageTypes.Ice;
                            }
                            else if (gameActorEffect is GameActorFireEffect)
                            {
                                coreDamageTypes |= CoreDamageTypes.Fire;
                            }
                            else if (gameActorEffect is GameActorHealthEffect)
                            {
                                coreDamageTypes |= CoreDamageTypes.Poison;
                            }
                        }
                    }
                }
                Exploder.Explode(vector, self.explosionData, sourceNormal, null, self.IgnoreQueues, coreDamageTypes, ignoreDamageCaps);
            }
            if (self.doDistortionWave)
            {
                Exploder.DoDistortionWave(vector, self.distortionIntensity, self.distortionRadius, self.maxDistortionRadius, self.distortionDuration);
            }
        }
        public static void Add()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("Sweeper", "sweeper");

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

            gun.SetShortDescription("B)");
            gun.SetLongDescription("Used for clearing minefields with it's forceful blast.\n\n" + "The numbers, what do they mean!?");

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

            gun.SetAnimationFPS(gun.shootAnimation, 13);
            gun.SetAnimationFPS(gun.idleAnimation, 5);
            gun.gunSwitchGroup     = (PickupObjectDatabase.GetById(51) as Gun).gunSwitchGroup;
            gun.muzzleFlashEffects = (PickupObjectDatabase.GetById(38) as Gun).muzzleFlashEffects;

            for (int i = 0; i < 4; i++)
            {
                gun.AddProjectileModuleFrom(PickupObjectDatabase.GetById(86) as Gun, true, false);
            }

            //GUN STATS
            int iterator = 1;

            foreach (ProjectileModule mod in gun.Volley.projectiles)
            {
                mod.ammoCost            = 1;
                mod.shootStyle          = ProjectileModule.ShootStyle.SemiAutomatic;
                mod.sequenceStyle       = ProjectileModule.ProjectileSequenceStyle.Random;
                mod.cooldownTime        = 0.5f;
                mod.angleVariance       = 20f;
                mod.numberOfShotsInClip = 8;
                mod.projectiles.Clear();

                if (iterator != 1) //Numbers
                {
                    int ForIterator = 1;
                    for (int i = 0; i < 8; i++)
                    {
                        Projectile projectile = ProjectileSetupUtility.MakeProjectile(86, ForIterator, 15, 23);
                        projectile.hitEffects.alwaysUseMidair = true;
                        switch (ForIterator)
                        {
                        case 1:
                            projectile.SetProjectileSpriteRight("sweeper_1", 6, 10, false, tk2dBaseSprite.Anchor.MiddleCenter, 4, 8);
                            projectile.hitEffects.overrideMidairDeathVFX = RainbowGuonStone.BlueGuonTransitionVFX;
                            break;

                        case 2:
                            projectile.SetProjectileSpriteRight("sweeper_2", 7, 10, false, tk2dBaseSprite.Anchor.MiddleCenter, 5, 8);
                            projectile.hitEffects.overrideMidairDeathVFX = RainbowGuonStone.GreenGuonTransitionVFX;
                            break;

                        case 3:
                            projectile.SetProjectileSpriteRight("sweeper_3", 7, 10, false, tk2dBaseSprite.Anchor.MiddleCenter, 5, 8);
                            projectile.hitEffects.overrideMidairDeathVFX = RainbowGuonStone.RedGuonTransitionVFX;
                            break;

                        case 4:
                            projectile.SetProjectileSpriteRight("sweeper_4", 7, 10, false, tk2dBaseSprite.Anchor.MiddleCenter, 5, 8);
                            projectile.hitEffects.overrideMidairDeathVFX = RainbowGuonStone.BlueGuonTransitionVFX;
                            break;

                        case 5:
                            projectile.SetProjectileSpriteRight("sweeper_5", 7, 10, false, tk2dBaseSprite.Anchor.MiddleCenter, 5, 8);
                            projectile.hitEffects.overrideMidairDeathVFX = RainbowGuonStone.RedGuonTransitionVFX;
                            break;

                        case 6:
                            projectile.SetProjectileSpriteRight("sweeper_6", 7, 10, false, tk2dBaseSprite.Anchor.MiddleCenter, 5, 8);
                            projectile.hitEffects.overrideMidairDeathVFX = RainbowGuonStone.CyanGuonTransitionVFX;
                            break;

                        case 7:
                            projectile.SetProjectileSpriteRight("sweeper_7", 7, 10, false, tk2dBaseSprite.Anchor.MiddleCenter, 5, 8);
                            projectile.hitEffects.overrideMidairDeathVFX = RainbowGuonStone.GreyGuonTransitionVFX;
                            break;

                        case 8:
                            projectile.SetProjectileSpriteRight("sweeper_8", 7, 10, false, tk2dBaseSprite.Anchor.MiddleCenter, 5, 8);
                            projectile.hitEffects.overrideMidairDeathVFX = RainbowGuonStone.GreyGuonTransitionVFX;
                            break;
                        }
                        mod.projectiles.Add(projectile);
                        ForIterator++;
                    }
                }
                else //Bomb
                {
                    Projectile projectile = ProjectileSetupUtility.MakeProjectile(86, 9, 10, 18);
                    projectile.SetProjectileSpriteRight("sweeper_bomb", 13, 13, false, tk2dBaseSprite.Anchor.MiddleCenter, 11, 11);
                    ExplosiveModifier boom = projectile.gameObject.GetOrAddComponent <ExplosiveModifier>();
                    boom.doExplosion   = true;
                    boom.explosionData = StaticExplosionDatas.explosiveRoundsExplosion;
                    mod.projectiles.Add(projectile);
                }



                gun.DefaultModule.ammoType       = GameUIAmmoType.AmmoType.CUSTOM;
                gun.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("Sweeper Bullets", "NevernamedsItems/Resources/CustomGunAmmoTypes/sweeper_clipfull", "NevernamedsItems/Resources/CustomGunAmmoTypes/sweeper_clipempty");
                if (mod != gun.DefaultModule)
                {
                    mod.ammoCost = 0;
                }
                iterator++;
            }

            gun.reloadTime = 1.4f;
            gun.barrelOffset.transform.localPosition = new Vector3(25f / 16f, 11f / 16f, 0f);
            gun.SetBaseMaxAmmo(80);
            gun.gunClass = GunClass.SHOTGUN;

            //CLIP OBJECT
            gun.gameObject.transform.Find("Clip").transform.position = new Vector3(6 / 16f, 9 / 16f); //used to position where your clips will spawn
            gun.clipObject            = BreakAbleAPI.BreakableAPIToolbox.GenerateDebrisObject("NevernamedsItems/Resources/Debris/sweeper_clip.png", true, 1, 5, 60, 20, null, 1, null, null, 1).gameObject;
            gun.reloadClipLaunchFrame = 3;                                                            //the frame on which the clip/s will spawn when the gun reloads
            gun.clipsToLaunchOnReload = 1;                                                            //self explanatory

            gun.quality = PickupObject.ItemQuality.B;
            ETGMod.Databases.Items.Add(gun, null, "ANY");
            gun.DefaultModule.ammoType = GameUIAmmoType.AmmoType.CUSTOM;
            gun.Volley.UsesShotgunStyleVelocityRandomizer = true;

            ID = gun.PickupObjectId;
        }