protected override void SequenceMainBranch() { switch (SequenceStep) { case 0: //If, for whatever reason, a Duplighost isn't using this move, then just continue if (DuplighostRef == null) { Debug.LogWarning($"{User.Name} is not a Duplighost, so nothing will happen!"); ChangeSequenceBranch(SequenceBranch.End); break; } BattleEntity entityDisguised = EntitiesAffected[0]; //Copy the animations of the entity DuplighostRef.CopyEntityAnimations(entityDisguised.AnimManager); //See which Partner the Duplighost is disguised as BattlePartner partnerDisguised = entityDisguised as BattlePartner; if (partnerDisguised != null) { DuplighostRef.PartnerTypeDisguise = partnerDisguised.PartnerType; //If disguising as Watt, add Electrified, Watt's light source, and Watt's Payback if (DuplighostRef.PartnerTypeDisguise == Enumerations.PartnerTypes.Watt) { DuplighostRef.EntityProperties.AddPhysAttribute(Enumerations.PhysicalAttributes.Electrified); DuplighostRef.EntityProperties.AddAdditionalProperty(Enumerations.AdditionalProperty.LightSource, partnerDisguised.EntityProperties.GetAdditionalProperty <double>(Enumerations.AdditionalProperty.LightSource)); //Copy Watt's Payback Watt watt = partnerDisguised as Watt; StatusGlobals.PaybackHolder wattPayback = watt.ElectricPayback; DuplighostRef.PaybackCopied = wattPayback; DuplighostRef.EntityProperties.AddPayback(wattPayback); } //Do an Easter Egg by replicating PM's glitchy behavior when Duplighosts disguise as Goompa //Kill off the Duplighost, and set Mario to its position else if (DuplighostRef.PartnerTypeDisguise == Enumerations.PartnerTypes.Goompa) { //Make sure Mario is in battle (he should be!) if (User.BManager.Mario != null) { User.BManager.Mario.Position = DuplighostRef.Position; } DuplighostRef.Die(); } } //If copying a Flippable BattleEntity, copy its Flippable behavior IFlippableEntity flippableEnt = entityDisguised as IFlippableEntity; if (flippableEnt != null) { DuplighostRef.FlippableBehavior = flippableEnt.FlippedBehavior.CopyBehavior(DuplighostRef); } //Copy its Defense and height state DuplighostRef.BattleStats.BaseDefense = entityDisguised.BattleStats.BaseDefense; //Handle marking that it's airborne if (entityDisguised.HeightState == Enumerations.HeightStates.Airborne) { DuplighostRef.ChangeHeightState(entityDisguised.HeightState); DuplighostRef.SetBattlePosition(DuplighostRef.BattlePosition - new Vector2(0f, BattleGlobals.AirborneY)); DuplighostRef.Position = DuplighostRef.BattlePosition; } CurSequenceAction = new WaitSeqAction(DisguiseWaitDur); ChangeSequenceBranch(SequenceBranch.End); break; default: PrintInvalidSequence(); break; } }
public FlippedBattleEvent(IFlippableEntity flippableEntity) { FlippableEntity = flippableEntity; }