public static void Add() { Gun gun = ETGMod.Databases.Items.NewGun("Poison Dart Frog", "poisondartfrog"); Game.Items.Rename("outdated_gun_mods:poison_dart_frog", "nn:poison_dart_frog"); gun.gunSwitchGroup = (PickupObjectDatabase.GetById(599) as Gun).gunSwitchGroup; gun.SetShortDescription("Oh yeah, it's Frog Time"); gun.SetLongDescription("An endangered frog species from inside the Gungeon. Spits poison darts to protect itself." + "\n\nHow do you 'fire' a frog? How do you RELOAD a frog??"); gun.SetupSprite(null, "poisondartfrog_idle_001", 8); gun.SetAnimationFPS(gun.shootAnimation, 16); for (int i = 0; i < 3; i++) { gun.AddProjectileModuleFrom(PickupObjectDatabase.GetById(56) as Gun, true, false); } //GUN STATS foreach (ProjectileModule mod in gun.Volley.projectiles) { mod.ammoCost = 1; mod.shootStyle = ProjectileModule.ShootStyle.SemiAutomatic; mod.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random; mod.cooldownTime = 0.2f; mod.angleVariance = 10f; mod.numberOfShotsInClip = 3; Projectile projectile = UnityEngine.Object.Instantiate <Projectile>(mod.projectiles[0]); mod.projectiles[0] = projectile; projectile.gameObject.SetActive(false); FakePrefab.MarkAsFakePrefab(projectile.gameObject); UnityEngine.Object.DontDestroyOnLoad(projectile); projectile.baseData.damage *= 1.4f; if (mod != gun.DefaultModule) { mod.ammoCost = 0; } projectile.transform.parent = gun.barrelOffset; projectile.damageTypes |= CoreDamageTypes.Poison; ExtremelySimplePoisonBulletBehaviour poisoning = projectile.gameObject.AddComponent <ExtremelySimplePoisonBulletBehaviour>(); poisoning.procChance = 1; poisoning.useSpecialTint = false; projectile.SetProjectileSpriteRight("blowgun_projectile", 16, 7, false, tk2dBaseSprite.Anchor.MiddleCenter, 15, 8); } gun.DefaultModule.ammoType = GameUIAmmoType.AmmoType.CUSTOM; gun.DefaultModule.customAmmoType = "Blowgun Darts"; gun.reloadTime = 0.5f; gun.SetBaseMaxAmmo(200); gun.quality = PickupObject.ItemQuality.C; gun.gunClass = GunClass.POISON; gun.encounterTrackable.EncounterGuid = "this is the Poison Dart Frog"; ETGMod.Databases.Items.Add(gun, null, "ANY"); gun.barrelOffset.transform.localPosition = new Vector3(1.37f, 0.37f, 0f); PoisonDartFrogID = gun.PickupObjectId; }
public override void PostProcessProjectile(Projectile projectile) { PlayerController player = projectile.Owner as PlayerController; base.PostProcessProjectile(projectile); if (player.PlayerHasActiveSynergy("Old and New")) { projectile.damageTypes |= CoreDamageTypes.Poison; ExtremelySimplePoisonBulletBehaviour poisoning = projectile.gameObject.AddComponent <ExtremelySimplePoisonBulletBehaviour>(); poisoning.procChance = 1; poisoning.useSpecialTint = false; } }
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("Blowgun", "blowgun"); Game.Items.Rename("outdated_gun_mods:blowgun", "nn:blowgun"); var behav = gun.gameObject.AddComponent <Blowgun>(); behav.preventNormalReloadAudio = true; gun.SetShortDescription("Huff and Puff"); gun.SetLongDescription("Relies on lung strength to propel poisonous darts." + "\n\nRobots may need to hold it up to a cooling vent or something."); gun.SetupSprite(null, "blowgun_idle_001", 8); gun.SetAnimationFPS(gun.shootAnimation, 15); gun.AddProjectileModuleFrom(PickupObjectDatabase.GetById(56) as Gun, true, false); gun.gunSwitchGroup = (PickupObjectDatabase.GetById(150) as Gun).gunSwitchGroup; //GUN STATS gun.muzzleFlashEffects = (PickupObjectDatabase.GetById(26) as Gun).muzzleFlashEffects; gun.DefaultModule.ammoCost = 1; gun.DefaultModule.shootStyle = ProjectileModule.ShootStyle.SemiAutomatic; gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random; gun.reloadTime = 0.5f; gun.DefaultModule.cooldownTime = 0.2f; gun.DefaultModule.numberOfShotsInClip = 1; gun.barrelOffset.transform.localPosition = new Vector3(1.12f, 0.18f, 0f); gun.SetBaseMaxAmmo(200); gun.gunClass = GunClass.POISON; //BULLET STATS Projectile projectile = UnityEngine.Object.Instantiate <Projectile>(gun.DefaultModule.projectiles[0]); projectile.gameObject.SetActive(false); FakePrefab.MarkAsFakePrefab(projectile.gameObject); UnityEngine.Object.DontDestroyOnLoad(projectile); gun.DefaultModule.projectiles[0] = projectile; projectile.transform.parent = gun.barrelOffset; projectile.baseData.speed *= 2f; projectile.damageTypes |= CoreDamageTypes.Poison; ExtremelySimplePoisonBulletBehaviour poisoning = projectile.gameObject.AddComponent <ExtremelySimplePoisonBulletBehaviour>(); poisoning.procChance = 1; poisoning.useSpecialTint = false; projectile.SetProjectileSpriteRight("blowgun_projectile", 16, 7, false, tk2dBaseSprite.Anchor.MiddleCenter, 15, 8); VFXPool HorizVFXOBj = VFXToolbox.CreateVFXPool("Blowgun Tilemap VFX Horiz", new List <string>() { "NevernamedsItems/Resources/MiscVFX/GunVFX/PoisonDarts/poisondart_impacthoriz_001", "NevernamedsItems/Resources/MiscVFX/GunVFX/PoisonDarts/poisondart_impacthoriz_002", "NevernamedsItems/Resources/MiscVFX/GunVFX/PoisonDarts/poisondart_impacthoriz_003", "NevernamedsItems/Resources/MiscVFX/GunVFX/PoisonDarts/poisondart_impacthoriz_004", }, 10, new IntVector2(12, 11), tk2dBaseSprite.Anchor.MiddleLeft, false, 0, true); projectile.hitEffects.deathTileMapHorizontal = HorizVFXOBj; projectile.hitEffects.tileMapHorizontal = HorizVFXOBj; projectile.hitEffects.deathTileMapVertical = HorizVFXOBj; projectile.hitEffects.tileMapVertical = HorizVFXOBj; gun.DefaultModule.ammoType = GameUIAmmoType.AmmoType.CUSTOM; gun.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("Blowgun Darts", "NevernamedsItems/Resources/CustomGunAmmoTypes/blowgun_clipfull", "NevernamedsItems/Resources/CustomGunAmmoTypes/blowgun_clipempty"); gun.quality = PickupObject.ItemQuality.D; gun.encounterTrackable.EncounterGuid = "this is the Blowgun"; ETGMod.Databases.Items.Add(gun, null, "ANY"); foreach (tk2dSpriteAnimationClip clip in AdjustGunPosition.GetGunAnimationClips(gun)) { foreach (tk2dSpriteAnimationFrame frame in clip.frames) { frame.spriteCollection.spriteDefinitions[frame.spriteId].ApplyOffset(new Vector2(0, 0f)); } } BlowgunID = gun.PickupObjectId; }