void FixedUpdate() { if (Time.time - lastSwitch > switchTime) { SetGoopIndex(Random.Range(1, goopDefs.Count)); lastSwitch = Time.time; this.aiActor.OverrideTarget = this.m_owner?.CurrentRoom?.GetRandomActiveEnemy(false)?.specRigidbody; } if (!this.m_owner.IsInCombat) { SetGoopIndex(0); } sprite.color = Color.Lerp(sprite.color, tint, .1f); float circleSize = .5f; if (PassiveItem.IsFlagSetForCharacter(m_owner, typeof(BattleStandardItem))) { circleSize *= 2; } var ddgm = DeadlyDeadlyGoopManager.GetGoopManagerForGoopType(currentGoop); ddgm.AddGoopCircle(sprite.WorldCenter, circleSize); //if (currentGoop.name.Contains("water")) //ddgm.ElectrifyGoopCircle(sprite.WorldBottomCenter, 1); }
private void ApplyLinearDamage(Vector2 p1, Vector2 p2) { float damage = damagePerHit; if (PassiveItem.IsFlagSetForCharacter(Owner, typeof(BattleStandardItem))) { damage *= BattleStandardItem.BattleStandardCompanionDamageMultiplier; } for (int i = 0; i < StaticReferenceManager.AllEnemies.Count; i++) { AIActor aiactor = StaticReferenceManager.AllEnemies[i]; if (!this.m_damagedEnemies.Contains(aiactor)) { if (aiactor && aiactor.HasBeenEngaged && aiactor.IsNormalEnemy && aiactor.specRigidbody) { Vector2 zero = Vector2.zero; bool flag = BraveUtility.LineIntersectsAABB(p1, p2, aiactor.specRigidbody.HitboxPixelCollider.UnitBottomLeft, aiactor.specRigidbody.HitboxPixelCollider.UnitDimensions, out zero); if (flag) { aiactor.healthHaver.ApplyDamage(this.damagePerHit, Vector2.zero, "Chain Lightning", CoreDamageTypes.Electric, DamageCategory.Normal, false, null, false); GameManager.Instance.StartCoroutine(this.HandleDamageCooldown(aiactor)); } } } } }
protected void HandleForgeHammerPostProcessProjectile(Projectile obj) { if (obj) { obj.collidesWithPlayer = false; obj.collidesWithEnemies = true; obj.TreatedAsNonProjectileForChallenge = true; if (m_Owner) { if (PassiveItem.IsFlagSetForCharacter(m_Owner, typeof(BattleStandardItem))) { obj.baseData.damage *= BattleStandardItem.BattleStandardCompanionDamageMultiplier; } if (m_Owner.CurrentGun && m_Owner.CurrentGun.LuteCompanionBuffActive) { obj.baseData.damage *= 2f; obj.RuntimeUpdateScale(1f / obj.AdditionalScaleMultiplier); obj.RuntimeUpdateScale(1.75f); } obj.baseData.damage *= 5f; m_Owner.DoPostProcessProjectile(obj); } else { obj.baseData.damage *= 4; } } }
private void HandleCompanionPostProcessProjectile(Projectile obj) { obj.IsBulletScript = false; if (obj) { obj.collidesWithPlayer = false; obj.collidesWithEnemies = true; obj.TreatedAsNonProjectileForChallenge = true; obj.UpdateCollisionMask(); } if (this.owner) { if (PassiveItem.IsFlagSetForCharacter(this.owner, typeof(BattleStandardItem))) { obj.baseData.damage *= BattleStandardItem.BattleStandardCompanionDamageMultiplier; } if (this.owner.CurrentGun && this.owner.CurrentGun.LuteCompanionBuffActive) { obj.baseData.damage *= 2f; } if (this.owner.PlayerHasActiveSynergy("#GRIM_SUPERREAPER")) { obj.baseData.damage *= 2f; } this.owner.DoPostProcessProjectile(obj); } }
public override void Update() { if (Owner && !Dungeon.IsGenerating && Owner.IsInCombat && base.transform.position.GetAbsoluteRoom() == Owner.CurrentRoom) { if (timer > 0) { timer -= BraveTime.DeltaTime; } if (timer <= 0) { this.aiAnimator.PlayUntilFinished("attack", false, null, -1f, false); Exploder.DoRadialKnockback(this.specRigidbody.UnitCenter, 70, 10); float dmg = 2.5f; if (PassiveItem.IsFlagSetForCharacter(this.Owner, typeof(BattleStandardItem))) { dmg *= BattleStandardItem.BattleStandardCompanionDamageMultiplier; } if (this.Owner.CurrentGun && this.Owner.CurrentGun.LuteCompanionBuffActive) { dmg *= 2; } Exploder.DoRadialDamage(dmg, this.specRigidbody.UnitCenter, 10, false, true, false, null); timer = 1.5f; } } }
// Token: 0x0600769E RID: 30366 RVA: 0x002E4CD4 File Offset: 0x002E2ED4 private void Shoot(Vector2 targetPosition, Vector2 startOffset) { Vector2 vector = base.transform.position.XY() + startOffset; Vector2 vector2 = targetPosition - vector; float z = Mathf.Atan2(vector2.y, vector2.x) * 57.29578f; GameObject gameObject = this.GetProjectile().gameObject; GameObject gameObject2 = SpawnManager.SpawnProjectile(gameObject, vector, Quaternion.Euler(0f, 0f, z), true); Projectile component = gameObject2.GetComponent <Projectile>(); component.collidesWithEnemies = true; component.collidesWithPlayer = false; component.Owner = this.m_owner; component.Shooter = this.m_owner.specRigidbody; component.TreatedAsNonProjectileForChallenge = true; if (this.m_owner) { if (PassiveItem.IsFlagSetForCharacter(this.m_owner, typeof(BattleStandardItem))) { component.baseData.damage *= BattleStandardItem.BattleStandardCompanionDamageMultiplier; } if (this.m_owner.CurrentGun && this.m_owner.CurrentGun.LuteCompanionBuffActive) { component.baseData.damage *= 2f; component.RuntimeUpdateScale(1.75f); } this.m_owner.DoPostProcessProjectile(component); } }
private IEnumerator DoLaserAttack() { isAttacking = true; this.aiAnimator.PlayUntilFinished("attack", false, null, -1f, false); yield return(new WaitForSeconds(0.5f)); //Start Firing Lasers this.aiActor.MovementSpeed *= 0.0001f; this.aiAnimator.PlayForDuration("contattack", 1); Projectile beamToFire = LaserBullets.SimpleRedBeam.projectile; if (UnityEngine.Random.value <= 0.5f) { int angle = 135; for (int i = 0; i < 4; i++) { BeamController beam = BeamToolbox.FreeFireBeamFromAnywhere(beamToFire, this.m_owner, this.gameObject, Vector2.zero, false, angle, 1, true); Projectile beamprojcomponent = beam.GetComponent <Projectile>(); beamprojcomponent.baseData.damage *= 3f; if (PassiveItem.IsFlagSetForCharacter(this.Owner, typeof(BattleStandardItem))) { beamprojcomponent.baseData.damage *= BattleStandardItem.BattleStandardCompanionDamageMultiplier; } if (this.Owner.CurrentGun && this.Owner.CurrentGun.LuteCompanionBuffActive) { beamprojcomponent.baseData.damage *= 2; } angle -= 90; } } else { int angle = 180; for (int i = 0; i < 4; i++) { BeamController beam = BeamToolbox.FreeFireBeamFromAnywhere(beamToFire, this.m_owner, this.gameObject, Vector2.zero, false, angle, 1, true); Projectile beamprojcomponent = beam.GetComponent <Projectile>(); beamprojcomponent.baseData.damage *= 3f; if (PassiveItem.IsFlagSetForCharacter(this.Owner, typeof(BattleStandardItem))) { beamprojcomponent.baseData.damage *= BattleStandardItem.BattleStandardCompanionDamageMultiplier; } if (this.Owner.CurrentGun && this.Owner.CurrentGun.LuteCompanionBuffActive) { beamprojcomponent.baseData.damage *= 2; } angle -= 90; } } yield return(new WaitForSeconds(1f)); //Stop shit isAttacking = false; timer = 1.5f; this.aiActor.MovementSpeed /= 0.0001f; yield break; }
public float GetTrueTotalCoolness(PlayerController player) { float coolness = player.stats.GetStatValue(PlayerStats.StatType.Coolness); if (PassiveItem.IsFlagSetForCharacter(player, typeof(ChamberOfEvilItem))) { float sixthChamberCoolness = player.stats.GetStatValue(PlayerStats.StatType.Curse); coolness += sixthChamberCoolness * 2f; } return(coolness); }
private void FixedUpdate() { bool flag = Time.time - this.lastSwitch > 10f; if (flag) { this.SetGoopIndex(UnityEngine.Random.Range(1, BabyGoodLovebulon.goopDefs.Count)); this.lastSwitch = Time.time; AIActor aiActor = base.aiActor; PlayerController owner = this.m_owner; SpeculativeRigidbody overrideTarget; if (owner == null) { overrideTarget = null; } else { RoomHandler currentRoom = owner.CurrentRoom; if (currentRoom == null) { overrideTarget = null; } else { AIActor randomActiveEnemy = currentRoom.GetRandomActiveEnemy(false); overrideTarget = ((randomActiveEnemy != null) ? randomActiveEnemy.specRigidbody : null); } } aiActor.OverrideTarget = overrideTarget; } bool flag2 = !this.m_owner.IsInCombat; if (flag2) { this.SetGoopIndex(0); } float num = 1.2f; bool flag3 = PassiveItem.IsFlagSetForCharacter(this.m_owner, typeof(BattleStandardItem)); if (flag3) { num *= 2f; } if (this.m_owner.PlayerHasActiveSynergy("Bubble Love")) { num *= 2f; } base.aiActor.ApplyEffect(charmEffect, 0.1f, null); DeadlyDeadlyGoopManager goopManagerForGoopType = DeadlyDeadlyGoopManager.GetGoopManagerForGoopType(EasyGoopDefinitions.CharmGoopDef); goopManagerForGoopType.AddGoopCircle(base.sprite.WorldCenter, num, -1, false, -1); }
public static void ApplyCompanionModifierToBullet(this Projectile bullet, PlayerController owner) { if (PassiveItem.IsFlagSetForCharacter(owner, typeof(BattleStandardItem))) { bullet.baseData.damage *= BattleStandardItem.BattleStandardCompanionDamageMultiplier; } if (owner.CurrentGun && owner.CurrentGun.LuteCompanionBuffActive) { bullet.baseData.damage *= 2f; bullet.RuntimeUpdateScale(1f / bullet.AdditionalScaleMultiplier); bullet.RuntimeUpdateScale(1.75f); } }
public static void HealRobot(PlayerController player) { bool flag = player.healthHaver.Armor > 0f; bool m_revenging = (bool)typeof(PlayerController).GetField("m_revenging", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(player); if (!flag && m_revenging && PassiveItem.IsFlagSetForCharacter(player, typeof(PoweredByRevengeItem))) { if (player.characterIdentity == PlayableCharacters.Robot) { player.healthHaver.Armor = 1; } } }
protected void HandleCompanionPostProcessProjectile(Projectile obj) { if (obj) { obj.collidesWithPlayer = false; obj.TreatedAsNonProjectileForChallenge = true; } if (this.m_owner) { if (PassiveItem.IsFlagSetForCharacter(this.m_owner, typeof(PactSeal))) { obj.baseData.damage *= PactSeal.PactCompanionDamageMultiplier; } this.m_owner.DoPostProcessProjectile(obj); } }
private void Shoot(Vector2 targetPos, Vector2 offset, Projectile projectileGameObject) { Vector2 vector = base.transform.position.XY() + offset; Vector2 vector2 = targetPos - vector; float z = Mathf.Atan2(vector2.y, vector2.x) * 57.29578f; // Base game stuff dont know why it exists but it might be useful if my method is unreliable or doesnt work at all. float angle = Vector2.Angle(vector, targetPos); GameObject gameObject2 = SpawnManager.SpawnProjectile(projectileGameObject.gameObject, base.transform.position.XY(), Quaternion.Euler(0f, 0f, z + (UnityEngine.Random.Range(-spread, spread))), true); //Uses projectile.SendInDirection() to make the projectile aim properly. It worked with psi scale so why wouldnt it work for special orbital too? Projectile component = gameObject2.GetComponent <Projectile>(); if (component != null) { component.collidesWithEnemies = true; component.collidesWithPlayer = false; component.Owner = owner; component.Shooter = owner.specRigidbody; component.TreatedAsNonProjectileForChallenge = true; component.specRigidbody.CollideWithTileMap = false; // component.SendInDirection(targetPos - vector, false, true); if (damageAffectedByPlayerStats) { component.baseData.damage *= owner.stats.GetStatModifier(PlayerStats.StatType.Damage); } component.UpdateCollisionMask(); GameManager.Instance.StartCoroutine(DelayedAddTileCollision(component)); if (affectedByBattleStandard) { if (PassiveItem.IsFlagSetForCharacter(owner, typeof(BattleStandardItem))) { component.baseData.damage *= BattleStandardItem.BattleStandardCompanionDamageMultiplier; } } if (affectedByLute) { if (owner.CurrentGun && owner.CurrentGun.LuteCompanionBuffActive) { component.baseData.damage *= 2f; component.RuntimeUpdateScale(1.75f); } } if (doesPostProcess) { owner.DoPostProcessProjectile(component); } } }
public void HandleCompanionPostProcessProjectile(Action <CompanionController, Projectile> orig, CompanionController self, Projectile obj) { PlayerController m_owner = ReflectGetField <PlayerController>(typeof(CompanionController), "m_owner", self); if (obj) { obj.collidesWithPlayer = false; obj.TreatedAsNonProjectileForChallenge = true; } if (m_owner) { if (PassiveItem.IsFlagSetForCharacter(m_owner, typeof(BattleStandardItem))) { obj.baseData.damage *= BattleStandardItem.BattleStandardCompanionDamageMultiplier; } if (m_owner.CurrentGun && m_owner.CurrentGun.LuteCompanionBuffActive) { obj.baseData.damage *= 2f; obj.RuntimeUpdateScale(1f / obj.AdditionalScaleMultiplier); obj.RuntimeUpdateScale(1.75f); } // Prevent bullet modifiers from being applied to caught enemies. // This causes nasty bugs like flak bullets being applied to other enemies on the floor! if (!string.IsNullOrEmpty(self.aiActor.name)) { if (self.aiActor.name.ToLower().Contains("companionpet")) { // Without the additioanl damage modifiers done from DoPostProcessProjectile Monster Ball enemies end up incredably weak. if (!self.aiActor.IsBlackPhantom) { obj.baseData.damage *= 13f; } else { obj.baseData.damage *= 15f; } return; } } m_owner.DoPostProcessProjectile(obj); } }