private void PostProcessProjectile(Projectile sourceProjectile, float effectChanceScalar) { float procChance = 0.12f; //ETGModConsole.Log("Scaler: " + effectChanceScalar); procChance *= effectChanceScalar; bool DoFirstShotOverrideSynergy = (Owner.CurrentGun.LastShotIndex == 0) && Owner.PlayerHasActiveSynergy("Added Effect - Lockdown"); bool DoLastShotOverrideSynergy = (Owner.CurrentGun.LastShotIndex == Owner.CurrentGun.ClipCapacity - 1) && Owner.PlayerHasActiveSynergy("Moonstone Weapon"); //ETGModConsole.Log("PostScaleChance: " + procChance); try { if (UnityEngine.Random.value <= procChance || DoFirstShotOverrideSynergy || DoLastShotOverrideSynergy) { ApplyLockdownBulletBehaviour orAddComponent = sourceProjectile.gameObject.GetOrAddComponent <ApplyLockdownBulletBehaviour>(); orAddComponent.duration = 4f; orAddComponent.useSpecialBulletTint = true; orAddComponent.bulletTintColour = Color.grey; orAddComponent.TintEnemy = true; orAddComponent.procChance = 1; } } catch (Exception e) { ETGModConsole.Log(e.Message); } }
public override void PostProcessProjectile(Projectile projectile) { if (projectile.Owner is PlayerController) { PlayerController player = projectile.Owner as PlayerController; if (player.PlayerHasActiveSynergy("Heat Stress")) { ExtremelySimpleStatusEffectBulletBehaviour burning = projectile.gameObject.GetComponent <ExtremelySimpleStatusEffectBulletBehaviour>(); if (burning != null) { burning.onHitProcChance *= 3f; } } if (player.PlayerHasActiveSynergy("Stick In The Mud")) { ApplyLockdownBulletBehaviour lockingdown = projectile.gameObject.GetComponent <ApplyLockdownBulletBehaviour>(); if (lockingdown != null) { lockingdown.duration *= 2f; } } } }
public static void Add() { Gun gun = ETGMod.Databases.Items.NewGun("Glue Gunner", "gluegunner"); Game.Items.Rename("outdated_gun_mods:glue_gunner", "nn:hot_glue_gun+glue_gunner"); gun.gameObject.AddComponent <GlueGunGlueGunnerSynergy>(); gun.SetShortDescription("yes this is a btd reference"); gun.SetLongDescription("im too tired to write a snarky description"); gun.SetupSprite(null, "gluegunner_idle_001", 8); gun.gunSwitchGroup = (PickupObjectDatabase.GetById(199) as Gun).gunSwitchGroup; gun.SetAnimationFPS(gun.shootAnimation, 12); gun.AddProjectileModuleFrom(PickupObjectDatabase.GetById(56) as Gun, true, false); //GUN STATS gun.DefaultModule.ammoCost = 1; gun.DefaultModule.shootStyle = ProjectileModule.ShootStyle.Automatic; gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random; gun.reloadTime = 1f; gun.DefaultModule.cooldownTime = 0.15f; gun.DefaultModule.numberOfShotsInClip = 15; gun.barrelOffset.transform.localPosition = new Vector3(1.37f, 0.56f, 0f); gun.SetBaseMaxAmmo(340); gun.ammo = 340; //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 *= 1f; projectile.baseData.speed *= 1f; projectile.baseData.range *= 1f; ApplyLockdownBulletBehaviour applylockdown = projectile.gameObject.AddComponent <ApplyLockdownBulletBehaviour>(); applylockdown.useSpecialBulletTint = false; applylockdown.duration = 6f; applylockdown.enemyTintColour = ExtendedColours.paleYellow; applylockdown.TintEnemy = true; applylockdown.TintCorpse = true; applylockdown.corpseTintColour = ExtendedColours.paleYellow; ExtremelySimpleStatusEffectBulletBehaviour burning = projectile.gameObject.AddComponent <ExtremelySimpleStatusEffectBulletBehaviour>(); burning.onHitProcChance = 0.14f; burning.onFiredProcChance = 1f; burning.usesFireEffect = false; burning.usesPoisonEffect = true; burning.poisonEffect = StaticStatusEffects.irradiatedLeadEffect; projectile.SetProjectileSpriteRight("gluegunner_projectile", 19, 8, false, tk2dBaseSprite.Anchor.MiddleCenter, 18, 7); gun.DefaultModule.projectiles[0] = projectile; gun.quality = PickupObject.ItemQuality.EXCLUDED; ETGMod.Databases.Items.Add(gun, null, "ANY"); GlueGunnerID = gun.PickupObjectId; }
public static void Add() { Gun gun = ETGMod.Databases.Items.NewGun("Master's Gun", "mastersgun"); Game.Items.Rename("outdated_gun_mods:master's_gun", "nn:masters_gun"); gun.gameObject.AddComponent <MastersGun>(); gun.SetShortDescription("Firing On All Cylinders"); gun.SetLongDescription("A humongous firearm, created by the Gungeon's Master to fire the legendary master rounds, though he never truly finished it." + "\n\nAfter it's recent rediscovery, the Blacksmith managed to finish the spectacular weapon, and even forged Master-Sized bullet replicas for ammo." + "\n\nNothing can beat the gun's original purpose though, so getting your grubby hands on some master rounds would be good."); gun.SetupSprite(null, "mastersgun_idle_001", 8); gun.SetAnimationFPS(gun.shootAnimation, 11); 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.muzzleFlashEffects = (PickupObjectDatabase.GetById(37) as Gun).muzzleFlashEffects; gun.DefaultModule.cooldownTime = 0.4f; gun.DefaultModule.numberOfShotsInClip = 6; gun.barrelOffset.transform.localPosition = new Vector3(3.62f, 1.81f, 0f); gun.SetBaseMaxAmmo(50); gun.gunClass = GunClass.PISTOL; //DEFAULT 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 *= 10f; projectile.ignoreDamageCaps = true; projectile.baseData.speed *= 1f; projectile.pierceMinorBreakables = true; PierceProjModifier orAddComponent = projectile.gameObject.GetOrAddComponent <PierceProjModifier>(); orAddComponent.penetratesBreakables = true; orAddComponent.penetration++; projectile.SetProjectileSpriteRight("mastersgun_projectile", 27, 12, false, tk2dBaseSprite.Anchor.MiddleCenter, 27, 12); projectile.transform.parent = gun.barrelOffset; //KEEP BULLET STATS keepProjectile = UnityEngine.Object.Instantiate <Projectile>((PickupObjectDatabase.GetById(56) as Gun).DefaultModule.projectiles[0]); keepProjectile.gameObject.SetActive(false); FakePrefab.MarkAsFakePrefab(keepProjectile.gameObject); UnityEngine.Object.DontDestroyOnLoad(keepProjectile); keepProjectile.baseData.damage *= 16f; keepProjectile.ignoreDamageCaps = true; keepProjectile.baseData.speed *= 1f; keepProjectile.pierceMinorBreakables = true; PierceProjModifier keepComponent = keepProjectile.gameObject.GetOrAddComponent <PierceProjModifier>(); keepComponent.penetratesBreakables = true; keepComponent.penetration++; BounceProjModifier Bouncing = keepProjectile.gameObject.GetOrAddComponent <BounceProjModifier>(); Bouncing.numberOfBounces = 5; keepProjectile.SetProjectileSpriteRight("mastersgun_keep_projectile", 27, 12, false, tk2dBaseSprite.Anchor.MiddleCenter, 27, 12); keepProjectile.transform.parent = gun.barrelOffset; gun.gunSwitchGroup = (PickupObjectDatabase.GetById(37) as Gun).gunSwitchGroup; //PROPER BULLET STATS properProjectile = UnityEngine.Object.Instantiate <Projectile>((PickupObjectDatabase.GetById(56) as Gun).DefaultModule.projectiles[0]); properProjectile.gameObject.SetActive(false); FakePrefab.MarkAsFakePrefab(properProjectile.gameObject); UnityEngine.Object.DontDestroyOnLoad(properProjectile); properProjectile.baseData.damage *= 16f; properProjectile.ignoreDamageCaps = true; properProjectile.baseData.speed *= 1f; properProjectile.pierceMinorBreakables = true; PierceProjModifier properComponent = properProjectile.gameObject.GetOrAddComponent <PierceProjModifier>(); properComponent.penetratesBreakables = true; properComponent.penetration++; ApplyLockdownBulletBehaviour properLockdown = properProjectile.gameObject.GetOrAddComponent <ApplyLockdownBulletBehaviour>(); properLockdown.duration = 6; properProjectile.SetProjectileSpriteRight("mastersgun_proper_projectile", 27, 12, false, tk2dBaseSprite.Anchor.MiddleCenter, 27, 12); properProjectile.transform.parent = gun.barrelOffset; //MINES BULLET STATS minesProjectile = UnityEngine.Object.Instantiate <Projectile>((PickupObjectDatabase.GetById(56) as Gun).DefaultModule.projectiles[0]); minesProjectile.gameObject.SetActive(false); FakePrefab.MarkAsFakePrefab(minesProjectile.gameObject); UnityEngine.Object.DontDestroyOnLoad(minesProjectile); minesProjectile.baseData.damage *= 16f; minesProjectile.ignoreDamageCaps = true; minesProjectile.baseData.speed *= 1f; minesProjectile.pierceMinorBreakables = true; PierceProjModifier minesComponent = minesProjectile.gameObject.GetOrAddComponent <PierceProjModifier>(); minesComponent.penetratesBreakables = true; minesComponent.penetration++; ExtremelySimplePoisonBulletBehaviour minesPoisoning = minesProjectile.gameObject.GetOrAddComponent <ExtremelySimplePoisonBulletBehaviour>(); minesPoisoning.procChance = 1; minesPoisoning.useSpecialTint = false; minesProjectile.SetProjectileSpriteRight("mastersgun_mines_projectile", 27, 12, false, tk2dBaseSprite.Anchor.MiddleCenter, 27, 12); minesProjectile.transform.parent = gun.barrelOffset; //HOLLOW BULLET STATS hollowProjectile = UnityEngine.Object.Instantiate <Projectile>((PickupObjectDatabase.GetById(56) as Gun).DefaultModule.projectiles[0]); hollowProjectile.gameObject.SetActive(false); FakePrefab.MarkAsFakePrefab(hollowProjectile.gameObject); UnityEngine.Object.DontDestroyOnLoad(hollowProjectile); hollowProjectile.baseData.damage *= 16f; hollowProjectile.ignoreDamageCaps = true; hollowProjectile.baseData.speed *= 1f; hollowProjectile.pierceMinorBreakables = true; PierceProjModifier hollowComponent = hollowProjectile.gameObject.GetOrAddComponent <PierceProjModifier>(); hollowComponent.penetratesBreakables = true; hollowComponent.penetration++; SimpleFreezingBulletBehaviour freezing = hollowProjectile.gameObject.GetOrAddComponent <SimpleFreezingBulletBehaviour>(); freezing.procChance = 1; freezing.useSpecialTint = false; freezing.freezeAmount = 150; freezing.freezeAmountForBosses = 100; hollowProjectile.SetProjectileSpriteRight("mastersgun_hollow_projectile", 27, 12, false, tk2dBaseSprite.Anchor.MiddleCenter, 27, 12); hollowProjectile.transform.parent = gun.barrelOffset; //FORGE BULLET STATS forgeProjectile = UnityEngine.Object.Instantiate <Projectile>((PickupObjectDatabase.GetById(56) as Gun).DefaultModule.projectiles[0]); forgeProjectile.gameObject.SetActive(false); FakePrefab.MarkAsFakePrefab(forgeProjectile.gameObject); UnityEngine.Object.DontDestroyOnLoad(forgeProjectile); forgeProjectile.baseData.damage *= 20f; forgeProjectile.ignoreDamageCaps = true; forgeProjectile.baseData.speed *= 1f; forgeProjectile.pierceMinorBreakables = true; PierceProjModifier forgeComponent = forgeProjectile.gameObject.GetOrAddComponent <PierceProjModifier>(); forgeComponent.penetratesBreakables = true; forgeComponent.penetration++; ExtremelySimpleStatusEffectBulletBehaviour burning = forgeProjectile.gameObject.GetOrAddComponent <ExtremelySimpleStatusEffectBulletBehaviour>(); burning.onFiredProcChance = 1; burning.usesFireEffect = true; burning.fireEffect = StaticStatusEffects.hotLeadEffect; burning.useSpecialTint = false; forgeProjectile.SetProjectileSpriteRight("mastersgun_forge_projectile", 33, 18, false, tk2dBaseSprite.Anchor.MiddleLeft, 27, 12); forgeProjectile.transform.parent = gun.barrelOffset; gun.quality = PickupObject.ItemQuality.S; //S gun.encounterTrackable.EncounterGuid = "this is the Master's Gun"; ETGMod.Databases.Items.Add(gun, null, "ANY"); }
public static void Add() { Gun gun = ETGMod.Databases.Items.NewGun("Hot Glue Gun", "hotgluegun"); Game.Items.Rename("outdated_gun_mods:hot_glue_gun", "nn:hot_glue_gun"); gun.gameObject.AddComponent <HotGlueGun>(); gun.SetShortDescription("Ow!.. Heat was Hot!"); gun.SetLongDescription("Glues your foes in place, and has a chance to set them ablaze." + "\n\nPioneered by amateur guncrafters, and generally considered one of the most painful methods of adhesive application."); gun.SetupSprite(null, "hotgluegun_idle_001", 8); gun.gunSwitchGroup = (PickupObjectDatabase.GetById(199) as Gun).gunSwitchGroup; gun.SetAnimationFPS(gun.shootAnimation, 12); 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 = 0.7f; gun.DefaultModule.cooldownTime = 0.4f; gun.DefaultModule.numberOfShotsInClip = 5; gun.barrelOffset.transform.localPosition = new Vector3(0.75f, 0.31f, 0f); gun.SetBaseMaxAmmo(150); gun.ammo = 150; gun.gunClass = GunClass.FIRE; //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 *= 1.6f; projectile.baseData.speed *= 0.5f; projectile.baseData.range *= 0.5f; ApplyLockdownBulletBehaviour applylockdown = projectile.gameObject.AddComponent <ApplyLockdownBulletBehaviour>(); applylockdown.useSpecialBulletTint = false; applylockdown.duration = 5f; applylockdown.enemyTintColour = ExtendedColours.paleYellow; applylockdown.TintEnemy = true; applylockdown.TintCorpse = true; applylockdown.corpseTintColour = ExtendedColours.paleYellow; ExtremelySimpleStatusEffectBulletBehaviour burning = projectile.gameObject.AddComponent <ExtremelySimpleStatusEffectBulletBehaviour>(); burning.onHitProcChance = 0.07f; burning.onFiredProcChance = 1f; burning.usesFireEffect = true; burning.fireEffect = StaticStatusEffects.hotLeadEffect; projectile.AnimateProjectile(new List <string> { "gluegunproj_1", "gluegunproj_2", "gluegunproj_1", "gluegunproj_3", }, 8, true, new List <IntVector2> { new IntVector2(5, 5), //1 new IntVector2(4, 6), //2 new IntVector2(5, 5), //3 new IntVector2(6, 4), //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.projectiles[0] = projectile; gun.DefaultModule.ammoType = GameUIAmmoType.AmmoType.CUSTOM; gun.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("HotGlueGun Bullets", "NevernamedsItems/Resources/CustomGunAmmoTypes/hotgluegun_clipfull", "NevernamedsItems/Resources/CustomGunAmmoTypes/hotgluegun_clipempty"); gun.quality = PickupObject.ItemQuality.B; ETGMod.Databases.Items.Add(gun, null, "ANY"); HotGlueGunID = gun.PickupObjectId; }