void EmeraldGolemBoss_Start(On.EmeraldGolemBoss.orig_Start orig, EmeraldGolemBoss self) { orig(self); for (int i = 0; i < Manager <EmeraldGolemFightManager> .Instance.fightGeysers.Count; i++) { Manager <EmeraldGolemFightManager> .Instance.fightGeysers[i].transform.position = (i % 2 == 0 ? self.SpikesL.position : self.SpikesR.position); Manager <EmeraldGolemFightManager> .Instance.fightGeysers[i].transform.position += new Vector3(i % 2 == 0 ? 2 : -2, -1.5f); //AirGeyser geyser = Manager<EmeraldGolemFightManager>.Instance.fightGeysers[i].GetComponent<AirGeyser>(); //geyser.boostHeight = 8; //geyser.windCollider.size = new Vector2(geyser.windCollider.size.x, 8); //geyser.windCollider.offset = new Vector2(geyser.windCollider.size.x, geyser.windCollider.size.y * 0.5f - 0.6f); } }
IEnumerator EmeraldGolemRightTripleStompState_TripleStompCoroutine(On.EmeraldGolemRightTripleStompState.orig_TripleStompCoroutine orig, EmeraldGolemRightTripleStompState self) { DynData <EmeraldGolemRightTripleStompState> selfData = new DynData <EmeraldGolemRightTripleStompState>(self); EmeraldGolemBoss boss = selfData.Get <EmeraldGolemBoss>("boss"); selfData.Set("leftArmCoroutine", boss.leftArm.GoToDefaultPosition()); yield return(selfData.Get <Coroutine>("leftArmCoroutine")); selfData.Set("rightArmCoroutine", boss.StartCoroutine(boss.rightArm.AnimatorQuadrupleStompCoroutine(true, true, true, 573.5f))); yield return(selfData.Get <Coroutine>("rightArmCoroutine")); selfData.Set("rightArmCoroutine", boss.rightArm.GoToDefaultPosition()); yield return(selfData.Get <Coroutine>("rightArmCoroutine")); selfData.Get <StateMachine>("stateMachine").SetState <EmeraldGolemStompLeftRightState>(new EmeraldGolemStompLeftRightStateParams(1)); }
IEnumerator EmeraldGolemDoubleTripleStompState_TripleStompCoroutine(On.EmeraldGolemDoubleTripleStompState.orig_TripleStompCoroutine orig, EmeraldGolemDoubleTripleStompState self) { DynData <EmeraldGolemDoubleTripleStompState> selfData = new DynData <EmeraldGolemDoubleTripleStompState>(self); EmeraldGolemBoss boss = selfData.Get <EmeraldGolemBoss>("boss"); selfData.Set("rightArmCoroutine", boss.rightArm.GoToDefaultPosition()); selfData.Set("leftArmCoroutine", boss.leftArm.GoToDefaultPosition()); yield return(selfData.Get <Coroutine>("rightArmCoroutine")); yield return(selfData.Get <Coroutine>("leftArmCoroutine")); selfData.Set("rightArmCoroutine", boss.rightArm.AnimatorTripleStomp(true, true, true)); selfData.Set("leftArmCoroutine", boss.leftArm.AnimatorTripleStomp(true, true, true)); yield return(selfData.Get <Coroutine>("rightArmCoroutine")); yield return(selfData.Get <Coroutine>("leftArmCoroutine")); selfData.Set("rightArmCoroutine", boss.rightArm.GoToDefaultPosition()); selfData.Set("leftArmCoroutine", boss.leftArm.GoToDefaultPosition()); yield return(selfData.Get <Coroutine>("rightArmCoroutine")); yield return(selfData.Get <Coroutine>("leftArmCoroutine")); if (boss.GetCurrentHpThreshold() == EmeraldGolemBoss.EEmeralGolemBossMood.MAD || boss.GetCurrentHpThreshold() == EmeraldGolemBoss.EEmeralGolemBossMood.VERY_MAD) { if (boss.centerPlayerDetectionBox.PlayerIsInBox()) { selfData.Get <StateMachine>("stateMachine").SetState <EmeraldGolemLeftRightCenterStompState>(new EmeraldGolemLeftRightCenterStompStateParams(2)); yield return(null); } else { selfData.Get <StateMachine>("stateMachine").SetState <EmeraldGolemStompLeftRightState>(new EmeraldGolemStompLeftRightStateParams(1)); } } else { selfData.Get <StateMachine>("stateMachine").SetState <EmeraldGolemStompLeftRightState>(new EmeraldGolemStompLeftRightStateParams(1)); } }
IEnumerator EmeraldGolemBoss_HeadVulnerabilityWindowCoroutine(On.EmeraldGolemBoss.orig_HeadVulnerabilityWindowCoroutine orig, EmeraldGolemBoss self) { DynData <EmeraldGolemBoss> selfData = emeraldBossData = new DynData <EmeraldGolemBoss>(self); if (selfData.Get <Coroutine>("shootCoroutine") != null) { self.StopCoroutine(selfData.Get <Coroutine>("shootCoroutine")); selfData.Set <Coroutine>("shootCoroutine", null); } Manager <AudioManager> .Instance.PlaySoundEffect(self.deactivateSFX); Animator gemAnimator = self.gem.GetComponent <Animator>(); // This is an invincibru moment self.gem.invincibru = true; // Don't deactivate spikes gemAnimator.SetTrigger("Off"); self.head.GetComponent <Animator>().ResetTrigger("Shoot"); self.head.GetComponent <Animator>().SetTrigger("IdleOn"); selfData.Set("headInvincible", false); yield return(new WaitForSeconds(1f)); // Shoot energy balls at the player for (int i = 0; i < 25; i++) { // Don't shoot if the player is above the golem if (Manager <PlayerManager> .Instance.Player.transform.position.y < self.head.position.y) { Manager <AudioManager> .Instance.PlaySoundEffect(self.headShootSFX); WallShmuProjectile projectile = Manager <PoolManager> .Instance.GetObjectInstance(self.headProjectilePrefab).GetComponent <WallShmuProjectile>(); projectile.GetComponent <DisableNotifier>().onDisabled += OnProjectileDisabled; selfData.Get <List <GameObject> >("projectileList").Add(projectile.gameObject); projectile.transform.position = self.head.position; Vector3 dir = Manager <PlayerManager> .Instance.Player.transform.position + new Vector3(0f, 2.7f, 0f) - self.head.position; dir.Normalize(); projectile.Initialize(23f, dir); } yield return(new WaitForSeconds(0.333333333333f)); } int blinkDone2 = 0; for (int totalBlinks2 = 2; blinkDone2 < totalBlinks2; blinkDone2++) { gemAnimator.SetTrigger("On"); yield return(new WaitForSeconds(0.3f)); gemAnimator.SetTrigger("Off"); yield return(new WaitForSeconds(0.3f)); } blinkDone2 = 0; for (int totalBlinks2 = 8; blinkDone2 < totalBlinks2; blinkDone2++) { gemAnimator.SetTrigger("On"); yield return(new WaitForSeconds(0.05f)); gemAnimator.SetTrigger("Off"); yield return(new WaitForSeconds(0.05f)); } gemAnimator.SetTrigger("On"); self.head.GetComponent <Animator>().SetTrigger("IdleOff"); selfData.Set("headInvincible", true); self.gemHP = self.gemMaxHP; self.gem.invincibru = false; Manager <AudioManager> .Instance.PlaySoundEffect(self.activateSFX); self.stateMachine.SetState <EmeraldGolemStunnedDoneState>(); yield return(null); }