Esempio n. 1
0
        public void OnHit(HitDefinition hitdef, Character target, bool blocked)
        {
            if (hitdef == null)
            {
                throw new ArgumentNullException(nameof(hitdef));
            }
            if (target == null)
            {
                throw new ArgumentNullException(nameof(target));
            }

            m_character.DrawOrder = hitdef.P1SpritePriority;

            AddToTargetList(target);

            if (blocked)
            {
                m_character.BasePlayer.Power += hitdef.P1GuardPowerAdjustment;
                HitPauseTime = hitdef.GuardPauseTime;
                MoveContact  = 1;
                MoveGuarded  = 1;
                MoveHit      = 0;
                MoveReversed = 0;
            }
            else
            {
                m_character.BasePlayer.Power += hitdef.P1HitPowerAdjustment;
                HitPauseTime = hitdef.PauseTime;
                MoveContact  = 1;
                MoveGuarded  = 0;
                MoveHit      = 1;
                MoveReversed = 0;
            }
        }
Esempio n. 2
0
        public DefensiveInfo(Character character)
        {
            if (character == null)
            {
                throw new ArgumentNullException("character");
            }

            m_character         = character;
            m_hitdef            = new HitDefinition();
            m_blocked           = false;
            m_killed            = false;
            m_hitstatetype      = StateType.None;
            m_hitshaketime      = 0;
            m_defensemultiplier = 1;
            m_attacker          = null;
            m_hittime           = 0;
            m_hitby1            = new HitBy();
            m_hitby2            = new HitBy();
            m_isfalling         = false;

            m_hitoverrides = new List <HitOverride>();
            for (Int32 i = 0; i != 8; ++i)
            {
                m_hitoverrides.Add(new HitOverride());
            }

            m_hitcount = 0;
        }
Esempio n. 3
0
		public void OnHit(HitDefinition hitdef, Character target, Boolean blocked)
		{
			if (hitdef == null) throw new ArgumentNullException("hitdef");
			if (target == null) throw new ArgumentNullException("target");

			m_character.DrawOrder = hitdef.P1SpritePriority;

			AddToTargetList(target);

			if (blocked == true)
			{
				m_character.BasePlayer.Power += hitdef.P1GuardPowerAdjustment;
				HitPauseTime = hitdef.GuardPauseTime;
				MoveContact = 1;
				MoveGuarded = 1;
				MoveHit = 0;
				MoveReversed = 0;
			}
			else
			{
				m_character.BasePlayer.Power += hitdef.P1HitPowerAdjustment;
				HitPauseTime = hitdef.PauseTime;
				MoveContact = 1;
				MoveGuarded = 0;
				MoveHit = 1;
				MoveReversed = 0;
			}
		}
Esempio n. 4
0
        public HitOverride GetOverride(HitDefinition hitdef)
        {
            if (hitdef == null)
            {
                throw new ArgumentNullException("hitdef");
            }

            foreach (HitOverride hitoverride in HitOverrides)
            {
                if (hitoverride.IsActive == false)
                {
                    continue;
                }

                if (hitoverride.Attribute.HasHeight(hitdef.HitAttribute.AttackHeight) == false)
                {
                    continue;
                }
                foreach (HitType hittype in hitdef.HitAttribute.AttackData)
                {
                    if (hitoverride.Attribute.HasData(hittype) == false)
                    {
                        continue;
                    }
                }

                return(hitoverride);
            }

            return(null);
        }
Esempio n. 5
0
        void OnAttack(Character attacker, Character target, HitDefinition hitdef, Boolean blocked)
        {
            if (attacker == null)
            {
                throw new ArgumentNullException("attacker");
            }
            if (target == null)
            {
                throw new ArgumentNullException("target");
            }
            if (hitdef == null)
            {
                throw new ArgumentNullException("hitdef");
            }

            target.DefensiveInfo.OnHit(hitdef, attacker, blocked);

            HitDefinition myhitdef = target.DefensiveInfo.HitDef;

            attacker.OffensiveInfo.OnHit(myhitdef, target, blocked);

            SetFacing(attacker, target, myhitdef);

            if (blocked == false)
            {
                DoEnvShake(myhitdef, attacker.Engine.EnvironmentShake);
                PlaySound(attacker, target, myhitdef.HitSoundId, myhitdef.PlayerSound);
                MakeSpark(attacker, target, myhitdef.SparkAnimation, myhitdef.SparkStartPosition, myhitdef.PlayerSpark);
            }
            else
            {
                PlaySound(attacker, target, myhitdef.GuardSoundId, myhitdef.GuardPlayerSound);
                MakeSpark(attacker, target, myhitdef.GuardSparkAnimation, myhitdef.SparkStartPosition, myhitdef.GuardPlayerSpark);
            }

            HitOverride hitoverride = target.DefensiveInfo.GetOverride(myhitdef);

            if (hitoverride != null)
            {
                if (hitoverride.ForceAir == true)
                {
                    myhitdef.Fall = true;
                }

                target.StateManager.ForeignManager = null;
                target.StateManager.ChangeState(hitoverride.StateNumber);
            }
            else
            {
                if (blocked == false)
                {
                    OnAttackHit(attacker, target, myhitdef);
                }
                else
                {
                    OnAttackBlock(attacker, target, myhitdef);
                }
            }
        }
Esempio n. 6
0
		public Contact(Character attacker, Character target, HitDefinition hitdef, ContactType type)
		{
			if (attacker == null) throw new ArgumentNullException("attacker");
			if (target == null) throw new ArgumentNullException("target");
			if (hitdef == null) throw new ArgumentNullException("hitdef");
			if (type == ContactType.None) throw new ArgumentOutOfRangeException("type");

			m_attacker = attacker;
			m_target = target;
			m_hitdef = hitdef;
			m_type = type;
		}
Esempio n. 7
0
        public void OnHit(HitDefinition hitdef, Character attacker, Boolean blocked)
        {
            if (hitdef == null)
            {
                throw new ArgumentNullException("hitdef");
            }
            if (attacker == null)
            {
                throw new ArgumentNullException("attacker");
            }

            Boolean alreadyfalling = IsFalling;

            HitDef.Set(hitdef);
            Attacker = attacker;
            Blocked  = blocked;

            if (alreadyfalling == true)
            {
                HitDef.Fall = true;
            }
            else
            {
                m_character.JugglePoints = m_character.BasePlayer.Constants.AirJuggle;
            }

            HitCount     = (m_character.MoveType == MoveType.BeingHit) ? HitCount + 1 : 1;
            HitStateType = m_character.StateType;

            m_character.DrawOrder     = HitDef.P2SpritePriority;
            m_character.PlayerControl = PlayerControl.NoControl;
            m_character.MoveType      = MoveType.BeingHit;

            if (blocked == true)
            {
                HitShakeTime = HitDef.GuardShakeTime;
                m_character.BasePlayer.Power += HitDef.P2GuardPowerAdjustment;
            }
            else
            {
                HitShakeTime = HitDef.ShakeTime;
                m_character.BasePlayer.Power += HitDef.P2HitPowerAdjustment;

                m_character.PaletteFx.Set(HitDef.PalFxTime, HitDef.PalFxAdd, HitDef.PalFxMul, HitDef.PalFxSinAdd, HitDef.PalFxInvert, HitDef.PalFxBaseColor);

                if (IsFalling == true)
                {
                    Int32 neededjugglepoints = EvaluationHelper.AsInt32(Attacker, Attacker.StateManager.CurrentState.JugglePoints, 0);
                    m_character.JugglePoints -= neededjugglepoints;
                }
            }
        }
Esempio n. 8
0
		public void OnHit(HitDefinition hitdef, Character attacker, Boolean blocked)
		{
			if (hitdef == null) throw new ArgumentNullException("hitdef");
			if (attacker == null) throw new ArgumentNullException("attacker");

			Boolean alreadyfalling = IsFalling;

			HitDef.Set(hitdef);
			Attacker = attacker;
			Blocked = blocked;

			if (alreadyfalling == true)
			{
				HitDef.Fall = true;
			}
			else
			{
				m_character.JugglePoints = m_character.BasePlayer.Constants.AirJuggle;
			}

			HitCount = (m_character.MoveType == MoveType.BeingHit) ? HitCount + 1 : 1;
			HitStateType = m_character.StateType;

			m_character.DrawOrder = HitDef.P2SpritePriority;
			m_character.PlayerControl = PlayerControl.NoControl;
			m_character.MoveType = MoveType.BeingHit;

			if (blocked == true)
			{
				HitShakeTime = HitDef.GuardShakeTime;
				m_character.BasePlayer.Power += HitDef.P2GuardPowerAdjustment;
			}
			else
			{
				HitShakeTime = HitDef.ShakeTime;
				m_character.BasePlayer.Power += HitDef.P2HitPowerAdjustment;

				m_character.PaletteFx.Set(HitDef.PalFxTime, HitDef.PalFxAdd, HitDef.PalFxMul, HitDef.PalFxSinAdd, HitDef.PalFxInvert, HitDef.PalFxBaseColor);

				if (IsFalling == true)
				{
					Int32 neededjugglepoints = EvaluationHelper.AsInt32(Attacker, Attacker.StateManager.CurrentState.JugglePoints, 0);
					m_character.JugglePoints -= neededjugglepoints;
				}
			}
		}
Esempio n. 9
0
        void DoEnvShake(HitDefinition hitdef, EnvironmentShake envshake)
        {
            if (hitdef == null)
            {
                throw new ArgumentNullException("hitdef");
            }
            if (envshake == null)
            {
                throw new ArgumentNullException("envshake");
            }

            if (hitdef.EnvShakeTime == 0)
            {
                return;
            }

            envshake.Set(hitdef.EnvShakeTime, hitdef.EnvShakeFrequency, hitdef.EnvShakeAmplitude, hitdef.EnvShakePhase);
        }
Esempio n. 10
0
		public OffensiveInfo(Character character)
		{
			if (character == null) throw new ArgumentNullException("character");

			m_character = character;
			m_hitdef = new HitDefinition();
			m_hitpausetime = 0;
			m_isactive = false;
			m_movecontact = 0;
			m_moveguarded = 0;
			m_movehit = 0;
			m_movereversed = 0;
			m_attackmultiplier = 1;
			m_hitcount = 0;
			m_uniquehitcount = 0;
			m_projectileinfo = new ProjectileInfo();
			m_targetlist = new List<Character>();
		}
Esempio n. 11
0
        private bool InGuardDistance(Entity attacker, Character target, HitDefinition hitdef)
        {
            if (attacker == null)
            {
                throw new ArgumentNullException(nameof(attacker));
            }
            if (target == null)
            {
                throw new ArgumentNullException(nameof(target));
            }
            if (hitdef == null)
            {
                throw new ArgumentNullException(nameof(hitdef));
            }

            var distance = Math.Abs(attacker.CurrentLocation.X - target.CurrentLocation.X);

            return(distance <= hitdef.GuardDistance);
        }
Esempio n. 12
0
        Boolean InGuardDistance(Entity attacker, Character target, HitDefinition hitdef)
        {
            if (attacker == null)
            {
                throw new ArgumentNullException("attacker");
            }
            if (target == null)
            {
                throw new ArgumentNullException("target");
            }
            if (hitdef == null)
            {
                throw new ArgumentNullException("hitdef");
            }

            Single distance = Math.Abs(attacker.CurrentLocation.X - target.CurrentLocation.X);

            return(distance <= hitdef.GuardDistance);
        }
Esempio n. 13
0
        public OffensiveInfo(Character character)
        {
            if (character == null)
            {
                throw new ArgumentNullException(nameof(character));
            }

            m_character        = character;
            m_hitdef           = new HitDefinition();
            m_hitpausetime     = 0;
            m_isactive         = false;
            m_movecontact      = 0;
            m_moveguarded      = 0;
            m_movehit          = 0;
            m_movereversed     = 0;
            m_attackmultiplier = 1;
            m_hitcount         = 0;
            m_uniquehitcount   = 0;
            m_projectileinfo   = new ProjectileInfo();
            m_targetlist       = new List <Character>();
        }
Esempio n. 14
0
        void SetFacing(Character attacker, Character target, HitDefinition hitdef)
        {
            if (attacker == null)
            {
                throw new ArgumentNullException("attacker");
            }
            if (target == null)
            {
                throw new ArgumentNullException("target");
            }
            if (hitdef == null)
            {
                throw new ArgumentNullException("hitdef");
            }

            if (hitdef.P1Facing == -1)
            {
                attacker.CurrentFacing = Misc.FlipFacing(attacker.CurrentFacing);
            }

            if (hitdef.P1GetP2Facing == -1)
            {
                attacker.CurrentFacing = Misc.FlipFacing(target.CurrentFacing);
            }

            if (hitdef.P1GetP2Facing == 1)
            {
                attacker.CurrentFacing = target.CurrentFacing;
            }

            if (hitdef.P2Facing == 1)
            {
                target.CurrentFacing = Misc.FlipFacing(attacker.CurrentFacing);
            }

            if (hitdef.P2Facing == -1)
            {
                target.CurrentFacing = attacker.CurrentFacing;
            }
        }
Esempio n. 15
0
		public DefensiveInfo(Character character)
		{
			if (character == null) throw new ArgumentNullException("character");

			m_character = character;
			m_hitdef = new HitDefinition();
			m_blocked = false;
			m_killed = false;
			m_hitstatetype = StateType.None;
			m_hitshaketime = 0;
			m_defensemultiplier = 1;
			m_attacker = null;
			m_hittime = 0;
			m_hitby1 = new HitBy();
			m_hitby2 = new HitBy();
			m_isfalling = false;

			m_hitoverrides = new List<HitOverride>();
			for (Int32 i = 0; i != 8; ++i) m_hitoverrides.Add(new HitOverride());

			m_hitcount = 0;

		}
Esempio n. 16
0
        public Contact(Character attacker, Character target, HitDefinition hitdef, ContactType type)
        {
            if (attacker == null)
            {
                throw new ArgumentNullException("attacker");
            }
            if (target == null)
            {
                throw new ArgumentNullException("target");
            }
            if (hitdef == null)
            {
                throw new ArgumentNullException("hitdef");
            }
            if (type == ContactType.None)
            {
                throw new ArgumentOutOfRangeException("type");
            }

            m_attacker = attacker;
            m_target   = target;
            m_hitdef   = hitdef;
            m_type     = type;
        }
Esempio n. 17
0
        void OnAttackBlock(Character attacker, Character target, HitDefinition hitdef)
        {
            if (attacker == null)
            {
                throw new ArgumentNullException("attacker");
            }
            if (target == null)
            {
                throw new ArgumentNullException("target");
            }
            if (hitdef == null)
            {
                throw new ArgumentNullException("hitdef");
            }

            target.DefensiveInfo.HitTime = hitdef.GuardHitTime;
            ApplyDamage(attacker, target, hitdef.GuardDamage, hitdef.CanGuardKill);

            switch (target.DefensiveInfo.HitStateType)
            {
            case StateType.Standing:
                target.StateManager.ChangeState(StateMachine.StateNumber.StandingGuardHitShaking);
                break;

            case StateType.Airborne:
                target.StateManager.ChangeState(StateMachine.StateNumber.AirGuardHitShaking);
                break;

            case StateType.Crouching:
                target.StateManager.ChangeState(StateMachine.StateNumber.CrouchingGuardHitShaking);
                break;

            default:
                throw new ArgumentOutOfRangeException("target.DefensiveInfo.HitStateType");
            }
        }
Esempio n. 18
0
		void OnAttackBlock(Character attacker, Character target, HitDefinition hitdef)
		{
			if (attacker == null) throw new ArgumentNullException("attacker");
			if (target == null) throw new ArgumentNullException("target");
			if (hitdef == null) throw new ArgumentNullException("hitdef");

			target.DefensiveInfo.HitTime = hitdef.GuardHitTime;
			ApplyDamage(attacker, target, hitdef.GuardDamage, hitdef.CanGuardKill);

			switch (target.DefensiveInfo.HitStateType)
			{
				case StateType.Standing:
					target.StateManager.ChangeState(StateMachine.StateNumber.StandingGuardHitShaking);
					break;

				case StateType.Airborne:
					target.StateManager.ChangeState(StateMachine.StateNumber.AirGuardHitShaking);
					break;

				case StateType.Crouching:
					target.StateManager.ChangeState(StateMachine.StateNumber.CrouchingGuardHitShaking);
					break;

				default:
					throw new ArgumentOutOfRangeException("target.DefensiveInfo.HitStateType");
			}
		}
Esempio n. 19
0
		Boolean CanBlock(Entity attacker, Character target, HitDefinition hitdef, Boolean rangecheck)
		{
			if (attacker == null) throw new ArgumentNullException("attacker");
			if (target == null) throw new ArgumentNullException("target");
			if (hitdef == null) throw new ArgumentNullException("hitdef");

			if (rangecheck == true && Collision.HasCollision(attacker, ClsnType.Type1Attack, target, ClsnType.Type2Normal) == false) return false;

			if (hitdef.Targeting == AffectTeam.None) return false;
			if (((hitdef.Targeting & AffectTeam.Enemy) != AffectTeam.Enemy) && (attacker.Team != target.Team)) return false;
			if (((hitdef.Targeting & AffectTeam.Friendly) != AffectTeam.Friendly) && (attacker.Team == target.Team)) return false;

			if (target.CommandManager.IsActive("holdback") == false) return false;
			if (InGuardDistance(attacker, target, hitdef) == false) return false;

			if (target.StateType == StateType.Airborne && (hitdef.GuardFlag.HitAir == false || target.Assertions.NoAirGuard == true)) return false;
			if (target.StateType == StateType.Standing && (hitdef.GuardFlag.HitHigh == false || target.Assertions.NoStandingGuard == true)) return false;
			if (target.StateType == StateType.Crouching && (hitdef.GuardFlag.HitLow == false || target.Assertions.NoCrouchingGuard == true)) return false;
			if (target.StateType == StateType.Prone) return false;

			if (target.Life <= hitdef.GuardDamage && hitdef.CanGuardKill == true) return false;

			return true;
		}
Esempio n. 20
0
		void OnAttackHit(Character attacker, Character target, HitDefinition hitdef)
		{
			if (attacker == null) throw new ArgumentNullException("attacker");
			if (target == null) throw new ArgumentNullException("target");
			if (hitdef == null) throw new ArgumentNullException("hitdef");

			ApplyDamage(attacker, target, hitdef.HitDamage, hitdef.CanKill);

			if (target.Life == 0)
			{
				target.DefensiveInfo.Killed = true;
				hitdef.Fall = true;
			}

			switch (target.DefensiveInfo.HitStateType)
			{
				case StateType.Standing:
				case StateType.Crouching:
				case StateType.Prone:
					target.DefensiveInfo.HitTime = hitdef.GroundHitTime;
					break;

				case StateType.Airborne:
					target.DefensiveInfo.HitTime = hitdef.AirHitTime;
					break;

				default:
					throw new ArgumentOutOfRangeException("target.DefensiveInfo.HitStateType");
			}

			if (hitdef.P1NewState != null)
			{
				attacker.StateManager.ChangeState(hitdef.P1NewState.Value);
			}

			if (hitdef.P2NewState != null)
			{
				if (hitdef.P2UseP1State == true)
				{
					target.StateManager.ForeignManager = attacker.StateManager;
					target.StateManager.ChangeState(hitdef.P2NewState.Value);
				}
				else
				{
					target.StateManager.ForeignManager = null;
					target.StateManager.ChangeState(hitdef.P2NewState.Value);
				}
			}
			else
			{
				target.StateManager.ForeignManager = null;

				if (hitdef.GroundAttackEffect == AttackEffect.Trip)
				{
					target.StateManager.ChangeState(StateMachine.StateNumber.HitTrip);
				}
				else
				{
					switch (target.DefensiveInfo.HitStateType)
					{
						case StateType.Standing:
							target.StateManager.ChangeState(StateMachine.StateNumber.StandingHitShaking);
							break;

						case StateType.Crouching:
							target.StateManager.ChangeState(StateMachine.StateNumber.CrouchingHitShaking);
							break;

						case StateType.Airborne:
							target.StateManager.ChangeState(StateMachine.StateNumber.AirHitShaking);
							break;

                        case StateType.Prone:
                            target.StateManager.ChangeState(StateMachine.StateNumber.HitProneShaking);
                            break;

						default:
							throw new ArgumentOutOfRangeException("target.DefensiveInfo.HitStateType");
					}
				}
			}
		}
Esempio n. 21
0
		Boolean InGuardDistance(Entity attacker, Character target, HitDefinition hitdef)
		{
			if (attacker == null) throw new ArgumentNullException("attacker");
			if (target == null) throw new ArgumentNullException("target");
			if (hitdef == null) throw new ArgumentNullException("hitdef");

			Single distance = Math.Abs(attacker.CurrentLocation.X - target.CurrentLocation.X);

			return distance <= hitdef.GuardDistance;
		}
Esempio n. 22
0
		void SetFacing(Character attacker, Character target, HitDefinition hitdef)
		{
			if (attacker == null) throw new ArgumentNullException("attacker");
			if (target == null) throw new ArgumentNullException("target");
			if (hitdef == null) throw new ArgumentNullException("hitdef");

			if (hitdef.P1Facing == -1) attacker.CurrentFacing = Misc.FlipFacing(attacker.CurrentFacing);

			if (hitdef.P1GetP2Facing == -1) attacker.CurrentFacing = Misc.FlipFacing(target.CurrentFacing);

			if (hitdef.P1GetP2Facing == 1) attacker.CurrentFacing = target.CurrentFacing;

			if (hitdef.P2Facing == 1) target.CurrentFacing = Misc.FlipFacing(attacker.CurrentFacing);

			if (hitdef.P2Facing == -1) target.CurrentFacing = attacker.CurrentFacing;
		}
Esempio n. 23
0
        public void Set(HitDefinition other)
        {
            if (other == null)
            {
                throw new ArgumentNullException(nameof(other));
            }

            HitAttribute        = other.HitAttribute;
            HitFlag             = other.HitFlag;
            GuardFlag           = other.GuardFlag;
            Targeting           = other.Targeting;
            GroundAnimationType = other.GroundAnimationType;
            AirAnimationType    = other.AirAnimationType;
            FallAnimationType   = other.FallAnimationType;
            HitPriority         = other.HitPriority;
            HitDamage           = other.HitDamage;
            GuardDamage         = other.GuardDamage;
            PauseTime           = other.PauseTime;
            ShakeTime           = other.ShakeTime;
            GuardPauseTime      = other.GuardPauseTime;
            GuardShakeTime      = other.GuardShakeTime;
            PlayerSpark         = other.PlayerSpark;
            SparkAnimation      = other.SparkAnimation;
            GuardPlayerSpark    = other.GuardPlayerSpark;
            GuardSparkAnimation = other.GuardSparkAnimation;
            SparkStartPosition  = other.SparkStartPosition;
            PlayerSound         = other.PlayerSound;
            HitSoundId          = other.HitSoundId;
            GuardPlayerSound    = other.GuardPlayerSound;
            GuardSoundId        = other.GuardSoundId;
            GroundAttackEffect  = other.GroundAttackEffect;
            AirAttackEffect     = other.AirAttackEffect;
            GroundHitTime       = other.GroundHitTime;
            DownHitTime         = other.DownHitTime;
            AirHitTime          = other.AirHitTime;
            GuardHitTime        = other.GuardHitTime;
            GroundSlideTime     = other.GroundSlideTime;
            GuardSlideTime      = other.GuardSlideTime;
            GuardControlTime    = other.GuardControlTime;
            AirGuardControlTime = other.AirGuardControlTime;
            GuardDistance       = other.GuardDistance;
            YAcceleration       = other.YAcceleration;
            GroundVelocity      = other.GroundVelocity;
            AirVelocity         = other.AirVelocity;
            DownVelocity        = other.DownVelocity;
            GroundGuardVelocity = other.GroundGuardVelocity;
            AirGuardVelocity    = other.AirGuardVelocity;
            GroundCornerPush    = other.GroundCornerPush;
            AirCornerPush       = other.AirCornerPush;
            DownCornerPush      = other.DownCornerPush;
            GuardCornerPush     = other.GuardCornerPush;
            AirGuardCornerPush  = other.AirGuardCornerPush;
            JugglePointsNeeded  = other.JugglePointsNeeded;
            MininumDistance     = other.MininumDistance;
            MaximumDistance     = other.MaximumDistance;
            SnapLocation        = other.SnapLocation;
            P1SpritePriority    = other.P1SpritePriority;
            P2SpritePriority    = other.P2SpritePriority;
            P1Facing            = other.P1Facing;
            P1GetP2Facing       = other.P1GetP2Facing;
            P2Facing            = other.P2Facing;
            P1NewState          = other.P1NewState;
            P2UseP1State        = other.P2UseP1State;
            P2NewState          = other.P2NewState;
            ForceStand          = other.ForceStand;
            Fall                   = other.Fall;
            AirFall                = other.AirFall;
            FallVelocityX          = other.FallVelocityX;
            FallVelocityY          = other.FallVelocityY;
            FallCanRecover         = other.FallCanRecover;
            FallRecoverTime        = other.FallRecoverTime;
            FallDamage             = other.FallDamage;
            DownBounce             = other.DownBounce;
            TargetId               = other.TargetId;
            ChainId                = other.ChainId;
            NoChainId1             = other.NoChainId1;
            NoChainId2             = other.NoChainId2;
            HitOnce                = other.HitOnce;
            CanKill                = other.CanKill;
            CanGuardKill           = other.CanGuardKill;
            CanFallKill            = other.CanFallKill;
            NumberOfHits           = other.NumberOfHits;
            P1HitPowerAdjustment   = other.P1HitPowerAdjustment;
            P1GuardPowerAdjustment = other.P1GuardPowerAdjustment;
            P2HitPowerAdjustment   = other.P2HitPowerAdjustment;
            P2GuardPowerAdjustment = other.P2GuardPowerAdjustment;
            PalFxTime              = other.PalFxTime;
            PalFxAdd               = other.PalFxAdd;
            PalFxMul               = other.PalFxMul;
            PalFxSinAdd            = other.PalFxSinAdd;
            PalFxInvert            = other.PalFxInvert;
            PalFxBaseColor         = other.PalFxBaseColor;
            EnvShakeTime           = other.EnvShakeTime;
            EnvShakeFrequency      = other.EnvShakeFrequency;
            EnvShakeAmplitude      = other.EnvShakeAmplitude;
            EnvShakePhase          = other.EnvShakePhase;
            EnvShakeFallTime       = other.EnvShakeFallTime;
            EnvShakeFallFrequency  = other.EnvShakeFallFrequency;
            EnvShakeFallAmplitude  = other.EnvShakeFallAmplitude;
            EnvShakeFallPhase      = other.EnvShakeFallPhase;
        }
Esempio n. 24
0
        void OnAttack(Projectile projectile, Character target, HitDefinition hitdef, Boolean blocked)
        {
            if (projectile == null)
            {
                throw new ArgumentNullException("projectile");
            }
            if (target == null)
            {
                throw new ArgumentNullException("target");
            }
            if (hitdef == null)
            {
                throw new ArgumentNullException("hitdef");
            }

            Character attacker = projectile.Creator;

            target.DefensiveInfo.OnHit(hitdef, projectile.Creator, blocked);

            hitdef = target.DefensiveInfo.HitDef;

            projectile.TotalHits   += 1;
            projectile.HitCountdown = projectile.Data.TimeBetweenHits;

            if (blocked == true)
            {
                attacker.BasePlayer.Power += hitdef.P1GuardPowerAdjustment;
                attacker.BasePlayer.OffensiveInfo.ProjectileInfo.Set(projectile.Data.ProjectileId, ProjectileDataType.Guarded);

                projectile.HitPauseCountdown = hitdef.GuardPauseTime;

                PlaySound(attacker, target, hitdef.GuardSoundId, hitdef.GuardPlayerSound);
                MakeSpark(projectile, target, hitdef.GuardSparkAnimation, hitdef.SparkStartPosition, hitdef.GuardPlayerSpark);
            }
            else
            {
                attacker.BasePlayer.Power += hitdef.P1HitPowerAdjustment;
                attacker.BasePlayer.OffensiveInfo.ProjectileInfo.Set(projectile.Data.ProjectileId, ProjectileDataType.Hit);

                projectile.HitPauseCountdown = hitdef.PauseTime;

                DoEnvShake(hitdef, attacker.Engine.EnvironmentShake);
                PlaySound(attacker, target, hitdef.HitSoundId, hitdef.PlayerSound);
                MakeSpark(projectile, target, hitdef.SparkAnimation, hitdef.SparkStartPosition, hitdef.PlayerSpark);
            }

            HitOverride hitoverride = target.DefensiveInfo.GetOverride(hitdef);

            if (hitoverride != null)
            {
                if (hitoverride.ForceAir == true)
                {
                    hitdef.Fall = true;
                }

                target.StateManager.ForeignManager = null;
                target.StateManager.ChangeState(hitoverride.StateNumber);
            }
            else
            {
                if (blocked == false)
                {
                    OnAttackHit(attacker, target, hitdef);
                }
                else
                {
                    OnAttackBlock(attacker, target, hitdef);
                }
            }
        }
Esempio n. 25
0
        Boolean CanHit(Entity attacker, Character target, HitDefinition hitdef)
        {
            if (attacker == null)
            {
                throw new ArgumentNullException("attacker");
            }
            if (target == null)
            {
                throw new ArgumentNullException("target");
            }
            if (hitdef == null)
            {
                throw new ArgumentNullException("hitdef");
            }

            if (Collision.HasCollision(attacker, ClsnType.Type1Attack, target, ClsnType.Type2Normal) == false)
            {
                return(false);
            }

            if (hitdef.Targeting == AffectTeam.None)
            {
                return(false);
            }
            if (((hitdef.Targeting & AffectTeam.Enemy) != AffectTeam.Enemy) && (attacker.Team != target.Team))
            {
                return(false);
            }
            if (((hitdef.Targeting & AffectTeam.Friendly) != AffectTeam.Friendly) && (attacker.Team == target.Team))
            {
                return(false);
            }

            if (target.StateType == StateType.Standing && hitdef.HitFlag.HitHigh == false)
            {
                return(false);
            }
            if (target.StateType == StateType.Crouching && hitdef.HitFlag.HitLow == false)
            {
                return(false);
            }
            if (target.StateType == StateType.Airborne && hitdef.HitFlag.HitAir == false)
            {
                return(false);
            }
            if (target.StateType == StateType.Prone && hitdef.HitFlag.HitDown == false)
            {
                return(false);
            }
            if (target.MoveType == MoveType.BeingHit && hitdef.HitFlag.ComboFlag == HitFlagCombo.No)
            {
                return(false);
            }
            if (target.MoveType != MoveType.BeingHit && hitdef.HitFlag.ComboFlag == HitFlagCombo.Yes)
            {
                return(false);
            }

            if (target.DefensiveInfo.HitBy1.CanHit(hitdef.HitAttribute) == false)
            {
                return(false);
            }
            if (target.DefensiveInfo.HitBy2.CanHit(hitdef.HitAttribute) == false)
            {
                return(false);
            }

            if (target.DefensiveInfo.IsFalling == true)
            {
                if (attacker is Player)
                {
                    Player player = attacker as Player;

#warning Juggling system is weird
                    Int32 neededjugglepoints = EvaluationHelper.AsInt32(player, player.StateManager.CurrentState.JugglePoints, 0);
                    //if (neededjugglepoints > target.JugglePoints) return false;
                }
            }

            return(true);
        }
Esempio n. 26
0
        Boolean CanBlock(Entity attacker, Character target, HitDefinition hitdef, Boolean rangecheck)
        {
            if (attacker == null)
            {
                throw new ArgumentNullException("attacker");
            }
            if (target == null)
            {
                throw new ArgumentNullException("target");
            }
            if (hitdef == null)
            {
                throw new ArgumentNullException("hitdef");
            }

            if (rangecheck == true && Collision.HasCollision(attacker, ClsnType.Type1Attack, target, ClsnType.Type2Normal) == false)
            {
                return(false);
            }

            if (hitdef.Targeting == AffectTeam.None)
            {
                return(false);
            }
            if (((hitdef.Targeting & AffectTeam.Enemy) != AffectTeam.Enemy) && (attacker.Team != target.Team))
            {
                return(false);
            }
            if (((hitdef.Targeting & AffectTeam.Friendly) != AffectTeam.Friendly) && (attacker.Team == target.Team))
            {
                return(false);
            }

            if (target.CommandManager.IsActive("holdback") == false)
            {
                return(false);
            }
            if (InGuardDistance(attacker, target, hitdef) == false)
            {
                return(false);
            }

            if (target.StateType == StateType.Airborne && (hitdef.GuardFlag.HitAir == false || target.Assertions.NoAirGuard == true))
            {
                return(false);
            }
            if (target.StateType == StateType.Standing && (hitdef.GuardFlag.HitHigh == false || target.Assertions.NoStandingGuard == true))
            {
                return(false);
            }
            if (target.StateType == StateType.Crouching && (hitdef.GuardFlag.HitLow == false || target.Assertions.NoCrouchingGuard == true))
            {
                return(false);
            }
            if (target.StateType == StateType.Prone)
            {
                return(false);
            }

            if (target.Life <= hitdef.GuardDamage && hitdef.CanGuardKill == true)
            {
                return(false);
            }

            return(true);
        }
Esempio n. 27
0
		public void Set(HitDefinition other)
		{
			if (other == null) throw new ArgumentNullException("other");

			HitAttribute = other.HitAttribute;
			HitFlag = other.HitFlag;
			GuardFlag = other.GuardFlag;
			Targeting = other.Targeting;
			GroundAnimationType = other.GroundAnimationType;
			AirAnimationType = other.AirAnimationType;
			FallAnimationType = other.FallAnimationType;
			HitPriority = other.HitPriority;
			HitDamage = other.HitDamage;
			GuardDamage = other.GuardDamage;
			PauseTime = other.PauseTime;
			ShakeTime = other.ShakeTime;
			GuardPauseTime = other.GuardPauseTime;
			GuardShakeTime = other.GuardShakeTime;
			PlayerSpark = other.PlayerSpark;
			SparkAnimation = other.SparkAnimation;
			GuardPlayerSpark = other.GuardPlayerSpark;
			GuardSparkAnimation = other.GuardSparkAnimation;
			SparkStartPosition = other.SparkStartPosition;
			PlayerSound = other.PlayerSound;
			HitSoundId = other.HitSoundId;
			GuardPlayerSound = other.GuardPlayerSound;
			GuardSoundId = other.GuardSoundId;
			GroundAttackEffect = other.GroundAttackEffect;
			AirAttackEffect = other.AirAttackEffect;
			GroundHitTime = other.GroundHitTime;
			DownHitTime = other.DownHitTime;
			AirHitTime = other.AirHitTime;
			GuardHitTime = other.GuardHitTime;
			GroundSlideTime = other.GroundSlideTime;
			GuardSlideTime = other.GuardSlideTime;
			GuardControlTime = other.GuardControlTime;
			AirGuardControlTime = other.AirGuardControlTime;
			GuardDistance = other.GuardDistance;
			YAcceleration = other.YAcceleration;
			GroundVelocity = other.GroundVelocity;
			AirVelocity = other.AirVelocity;
			DownVelocity = other.DownVelocity;
			GroundGuardVelocity = other.GroundGuardVelocity;
			AirGuardVelocity = other.AirGuardVelocity;
			GroundCornerPush = other.GroundCornerPush;
			AirCornerPush = other.AirCornerPush;
			DownCornerPush = other.DownCornerPush;
			GuardCornerPush = other.GuardCornerPush;
			AirGuardCornerPush = other.AirGuardCornerPush;
			JugglePointsNeeded = other.JugglePointsNeeded;
			MininumDistance = other.MininumDistance;
			MaximumDistance = other.MaximumDistance;
			SnapLocation = other.SnapLocation;
			P1SpritePriority = other.P1SpritePriority;
			P2SpritePriority = other.P2SpritePriority;
			P1Facing = other.P1Facing;
			P1GetP2Facing = other.P1GetP2Facing;
			P2Facing = other.P2Facing;
			P1NewState = other.P1NewState;
			P2UseP1State = other.P2UseP1State;
			P2NewState = other.P2NewState;
			ForceStand = other.ForceStand;
			Fall = other.Fall;
			AirFall = other.AirFall;
			FallVelocityX = other.FallVelocityX;
			FallVelocityY = other.FallVelocityY;
			FallCanRecover = other.FallCanRecover;
			FallRecoverTime = other.FallRecoverTime;
			FallDamage = other.FallDamage;
			DownBounce = other.DownBounce;
			TargetId = other.TargetId;
			ChainId = other.ChainId;
			NoChainId1 = other.NoChainId1;
			NoChainId2 = other.NoChainId2;
			HitOnce = other.HitOnce;
			CanKill = other.CanKill;
			CanGuardKill = other.CanGuardKill;
			CanFallKill = other.CanFallKill;
			NumberOfHits = other.NumberOfHits;
			P1HitPowerAdjustment = other.P1HitPowerAdjustment;
			P1GuardPowerAdjustment = other.P1GuardPowerAdjustment;
			P2HitPowerAdjustment = other.P2HitPowerAdjustment;
			P2GuardPowerAdjustment = other.P2GuardPowerAdjustment;
			PalFxTime = other.PalFxTime;
			PalFxAdd = other.PalFxAdd;
			PalFxMul = other.PalFxMul;
			PalFxSinAdd = other.PalFxSinAdd;
			PalFxInvert = other.PalFxInvert;
			PalFxBaseColor = other.PalFxBaseColor;
			EnvShakeTime = other.EnvShakeTime;
			EnvShakeFrequency = other.EnvShakeFrequency;
			EnvShakeAmplitude = other.EnvShakeAmplitude;
			EnvShakePhase = other.EnvShakePhase;
			EnvShakeFallTime = other.EnvShakeFallTime;
			EnvShakeFallFrequency = other.EnvShakeFallFrequency;
			EnvShakeFallAmplitude = other.EnvShakeFallAmplitude;
			EnvShakeFallPhase = other.EnvShakeFallPhase;
		}
Esempio n. 28
0
		Boolean CanHit(Entity attacker, Character target, HitDefinition hitdef)
		{
			if (attacker == null) throw new ArgumentNullException("attacker");
			if (target == null) throw new ArgumentNullException("target");
			if (hitdef == null) throw new ArgumentNullException("hitdef");

			if (Collision.HasCollision(attacker, ClsnType.Type1Attack, target, ClsnType.Type2Normal) == false) return false;

			if (hitdef.Targeting == AffectTeam.None) return false;
			if (((hitdef.Targeting & AffectTeam.Enemy) != AffectTeam.Enemy) && (attacker.Team != target.Team)) return false;
			if (((hitdef.Targeting & AffectTeam.Friendly) != AffectTeam.Friendly) && (attacker.Team == target.Team)) return false;

			if (target.StateType == StateType.Standing && hitdef.HitFlag.HitHigh == false) return false;
			if (target.StateType == StateType.Crouching && hitdef.HitFlag.HitLow == false) return false;
			if (target.StateType == StateType.Airborne && hitdef.HitFlag.HitAir == false) return false;
			if (target.StateType == StateType.Prone && hitdef.HitFlag.HitDown == false) return false;
			if (target.MoveType == MoveType.BeingHit && hitdef.HitFlag.ComboFlag == HitFlagCombo.No) return false;
			if (target.MoveType != MoveType.BeingHit && hitdef.HitFlag.ComboFlag == HitFlagCombo.Yes) return false;

			if (target.DefensiveInfo.HitBy1.CanHit(hitdef.HitAttribute) == false) return false;
			if (target.DefensiveInfo.HitBy2.CanHit(hitdef.HitAttribute) == false) return false;

			if (target.DefensiveInfo.IsFalling == true)
			{
				if (attacker is Player)
				{
					Player player = attacker as Player;

#warning Juggling system is weird
					Int32 neededjugglepoints = EvaluationHelper.AsInt32(player, player.StateManager.CurrentState.JugglePoints, 0);
					//if (neededjugglepoints > target.JugglePoints) return false;
				}
			}

			return true;
		}
Esempio n. 29
0
        void OnAttackHit(Character attacker, Character target, HitDefinition hitdef)
        {
            if (attacker == null)
            {
                throw new ArgumentNullException("attacker");
            }
            if (target == null)
            {
                throw new ArgumentNullException("target");
            }
            if (hitdef == null)
            {
                throw new ArgumentNullException("hitdef");
            }

            ApplyDamage(attacker, target, hitdef.HitDamage, hitdef.CanKill);

            if (target.Life == 0)
            {
                target.DefensiveInfo.Killed = true;
                hitdef.Fall = true;
            }

            switch (target.DefensiveInfo.HitStateType)
            {
            case StateType.Standing:
            case StateType.Crouching:
            case StateType.Prone:
                target.DefensiveInfo.HitTime = hitdef.GroundHitTime;
                break;

            case StateType.Airborne:
                target.DefensiveInfo.HitTime = hitdef.AirHitTime;
                break;

            default:
                throw new ArgumentOutOfRangeException("target.DefensiveInfo.HitStateType");
            }

            if (hitdef.P1NewState != null)
            {
                attacker.StateManager.ChangeState(hitdef.P1NewState.Value);
            }

            if (hitdef.P2NewState != null)
            {
                if (hitdef.P2UseP1State == true)
                {
                    target.StateManager.ForeignManager = attacker.StateManager;
                    target.StateManager.ChangeState(hitdef.P2NewState.Value);
                }
                else
                {
                    target.StateManager.ForeignManager = null;
                    target.StateManager.ChangeState(hitdef.P2NewState.Value);
                }
            }
            else
            {
                target.StateManager.ForeignManager = null;

                if (hitdef.GroundAttackEffect == AttackEffect.Trip)
                {
                    target.StateManager.ChangeState(StateMachine.StateNumber.HitTrip);
                }
                else
                {
                    switch (target.DefensiveInfo.HitStateType)
                    {
                    case StateType.Standing:
                        target.StateManager.ChangeState(StateMachine.StateNumber.StandingHitShaking);
                        break;

                    case StateType.Crouching:
                        target.StateManager.ChangeState(StateMachine.StateNumber.CrouchingHitShaking);
                        break;

                    case StateType.Airborne:
                        target.StateManager.ChangeState(StateMachine.StateNumber.AirHitShaking);
                        break;

                    case StateType.Prone:
                        target.StateManager.ChangeState(StateMachine.StateNumber.HitProneShaking);
                        break;

                    default:
                        throw new ArgumentOutOfRangeException("target.DefensiveInfo.HitStateType");
                    }
                }
            }
        }
Esempio n. 30
0
		void OnAttack(Character attacker, Character target, HitDefinition hitdef, Boolean blocked)
		{
			if (attacker == null) throw new ArgumentNullException("attacker");
			if (target == null) throw new ArgumentNullException("target");
			if (hitdef == null) throw new ArgumentNullException("hitdef");

			target.DefensiveInfo.OnHit(hitdef, attacker, blocked);

			HitDefinition myhitdef = target.DefensiveInfo.HitDef;

			attacker.OffensiveInfo.OnHit(myhitdef, target, blocked);

			SetFacing(attacker, target, myhitdef);

			if (blocked == false)
			{
				DoEnvShake(myhitdef, attacker.Engine.EnvironmentShake);
				PlaySound(attacker, target, myhitdef.HitSoundId, myhitdef.PlayerSound);
				MakeSpark(attacker, target, myhitdef.SparkAnimation, myhitdef.SparkStartPosition, myhitdef.PlayerSpark);
			}
			else
			{
				PlaySound(attacker, target, myhitdef.GuardSoundId, myhitdef.GuardPlayerSound);
				MakeSpark(attacker, target, myhitdef.GuardSparkAnimation, myhitdef.SparkStartPosition, myhitdef.GuardPlayerSpark);
			}

			HitOverride hitoverride = target.DefensiveInfo.GetOverride(myhitdef);
			if (hitoverride != null)
			{
				if (hitoverride.ForceAir == true) myhitdef.Fall = true;

				target.StateManager.ForeignManager = null;
				target.StateManager.ChangeState(hitoverride.StateNumber);
			}
			else
			{
				if (blocked == false)
				{
					OnAttackHit(attacker, target, myhitdef);
				}
				else
				{
					OnAttackBlock(attacker, target, myhitdef);
				}
			}
		}
Esempio n. 31
0
		public HitOverride GetOverride(HitDefinition hitdef)
		{
			if (hitdef == null) throw new ArgumentNullException("hitdef");

			foreach (HitOverride hitoverride in HitOverrides)
			{
				if (hitoverride.IsActive == false) continue;

				if (hitoverride.Attribute.HasHeight(hitdef.HitAttribute.AttackHeight) == false) continue;
				foreach (HitType hittype in hitdef.HitAttribute.AttackData) if (hitoverride.Attribute.HasData(hittype) == false) continue;

				return hitoverride;
			}

			return null;
		}
Esempio n. 32
0
		void DoEnvShake(HitDefinition hitdef, EnvironmentShake envshake)
		{
			if (hitdef == null) throw new ArgumentNullException("hitdef");
			if (envshake == null) throw new ArgumentNullException("envshake");

			if (hitdef.EnvShakeTime == 0) return;

			envshake.Set(hitdef.EnvShakeTime, hitdef.EnvShakeFrequency, hitdef.EnvShakeAmplitude, hitdef.EnvShakePhase);
		}
Esempio n. 33
0
		void OnAttack(Projectile projectile, Character target, HitDefinition hitdef, Boolean blocked)
		{
			if (projectile == null) throw new ArgumentNullException("projectile");
			if (target == null) throw new ArgumentNullException("target");
			if (hitdef == null) throw new ArgumentNullException("hitdef");

			Character attacker = projectile.Creator;

			target.DefensiveInfo.OnHit(hitdef, projectile.Creator, blocked);

			hitdef = target.DefensiveInfo.HitDef;

			projectile.TotalHits += 1;
			projectile.HitCountdown = projectile.Data.TimeBetweenHits;

			if (blocked == true)
			{
				attacker.BasePlayer.Power += hitdef.P1GuardPowerAdjustment;
				attacker.BasePlayer.OffensiveInfo.ProjectileInfo.Set(projectile.Data.ProjectileId, ProjectileDataType.Guarded);

				projectile.HitPauseCountdown = hitdef.GuardPauseTime;

				PlaySound(attacker, target, hitdef.GuardSoundId, hitdef.GuardPlayerSound);
				MakeSpark(projectile, target, hitdef.GuardSparkAnimation, hitdef.SparkStartPosition, hitdef.GuardPlayerSpark);
			}
			else
			{
				attacker.BasePlayer.Power += hitdef.P1HitPowerAdjustment;
				attacker.BasePlayer.OffensiveInfo.ProjectileInfo.Set(projectile.Data.ProjectileId, ProjectileDataType.Hit);

				projectile.HitPauseCountdown = hitdef.PauseTime;

				DoEnvShake(hitdef, attacker.Engine.EnvironmentShake);
				PlaySound(attacker, target, hitdef.HitSoundId, hitdef.PlayerSound);
				MakeSpark(projectile, target, hitdef.SparkAnimation, hitdef.SparkStartPosition, hitdef.PlayerSpark);
			}

			HitOverride hitoverride = target.DefensiveInfo.GetOverride(hitdef);
			if (hitoverride != null)
			{
				if (hitoverride.ForceAir == true) hitdef.Fall = true;

				target.StateManager.ForeignManager = null;
				target.StateManager.ChangeState(hitoverride.StateNumber);
			}
			else
			{
				if (blocked == false)
				{
                    OnAttackHit(attacker, target, hitdef);
				}
				else
				{
                    OnAttackBlock(attacker, target, hitdef);
                }
			}
		}