public static void SelfDamage() { if (PlayerData.instance.health <= 0 || HeroController.instance.cState.dead || !GameManager.instance.IsGameplayScene() || GameManager.instance.IsGamePaused() || HeroController.instance.cState.recoiling || HeroController.instance.cState.invulnerable) { Console.AddLine("Unacceptable conditions for selfDamage(" + PlayerData.instance.health + "," + DebugMod.HC.cState.dead + "," + DebugMod.GM.IsGameplayScene() + "," + DebugMod.HC.cState.recoiling + "," + DebugMod.GM.IsGamePaused() + "," + DebugMod.HC.cState.invulnerable + ")." + " Pressed too many times at once?"); return; } if (!DebugMod.settings.EnemiesPanelVisible) { Console.AddLine("Enable EnemyPanel for self-damage"); return; } if (EnemiesPanel.enemyPool.Count < 1) { Console.AddLine("Unable to locate a single enemy in the scene."); return; } GameObject enemyObj = EnemiesPanel.enemyPool.ElementAt(new Random().Next(0, EnemiesPanel.enemyPool.Count)).gameObject; CollisionSide side = HeroController.instance.cState.facingRight ? CollisionSide.right : CollisionSide.left; int damageAmount = 1; int hazardType = (int)HazardType.NON_HAZARD; PlayMakerFSM fsm = FSMUtility.LocateFSM(enemyObj, "damages_hero"); if (fsm != null) { damageAmount = FSMUtility.GetInt(fsm, "damageDealt"); hazardType = FSMUtility.GetInt(fsm, "hazardType"); } object[] paramArray; if (EnemiesPanel.parameters.Length == 2) { paramArray = new object[] { enemyObj, side }; } else if (EnemiesPanel.parameters.Length == 4) { paramArray = new object[] { enemyObj, side, damageAmount, hazardType }; } else { Console.AddLine("Unexpected parameter count on HeroController.TakeDamage"); return; } Console.AddLine("Attempting self damage"); EnemiesPanel.takeDamage.Invoke(HeroController.instance, paramArray); }