Example #1
0
 public void Clear()
 {
     State = null;
     Tics  = 0;
     Sx    = Fixed.Zero;
     Sy    = Fixed.Zero;
 }
Example #2
0
        public bool SetState(MobjState state)
        {
            do
            {
                if (state == MobjState.Null)
                {
                    this.state = DoomInfo.States[(int)MobjState.Null];
                    world.ThingAllocation.RemoveMobj(this);
                    return(false);
                }

                var st = DoomInfo.States[(int)state];
                this.state = st;
                tics       = GetTics(st);
                sprite     = st.Sprite;
                frame      = st.Frame;

                // Modified handling.
                // Call action functions when the state is set.
                if (st.MobjAction != null)
                {
                    st.MobjAction(world, this);
                }

                state = st.Next;
            }while (tics == 0);

            return(true);
        }
Example #3
0
        public bool DoEvent(DoomEvent e)
        {
            if (stage != 2)
            {
                return(false);
            }

            if (e.Type == EventType.KeyDown)
            {
                if (castDeath)
                {
                    // Already in dying frames.
                    return(true);
                }

                // Go into death frame.
                castDeath     = true;
                castState     = DoomInfo.States[(int)DoomInfo.MobjInfos[(int)castorder[castNumber].Type].DeathState];
                castTics      = castState.Tics;
                castFrames    = 0;
                castAttacking = false;
                if (DoomInfo.MobjInfos[(int)castorder[castNumber].Type].DeathSound != 0)
                {
                    StartSound(DoomInfo.MobjInfos[(int)castorder[castNumber].Type].DeathSound);
                }

                return(true);
            }

            return(false);
        }
Example #4
0
        public bool SetState(MobjState state)
        {
            var ta = world.ThingAllocation;

            MobjStateDef st;

            do
            {
                if (state == MobjState.Null)
                {
                    State = DoomInfo.States[(int)MobjState.Null];
                    ta.RemoveMobj(this);
                    return(false);
                }

                st     = DoomInfo.States[(int)state];
                State  = st;
                Tics   = GetTics(st);
                Sprite = st.Sprite;
                Frame  = st.Frame;

                // Modified handling.
                // Call action functions when the state is set
                if (st.MobjAction != null)
                {
                    st.MobjAction(world, this);
                }

                state = st.Next;
            }while (Tics == 0);

            return(true);
        }
 public void Clear()
 {
     state = null;
     tics  = 0;
     sx    = Fixed.Zero;
     sy    = Fixed.Zero;
 }
Example #6
0
        private void StartCast()
        {
            stage = 2;

            castNumber    = 0;
            castState     = DoomInfo.States[(int)DoomInfo.MobjInfos[(int)castorder[castNumber].Type].SeeState];
            castTics      = castState.Tics;
            castFrames    = 0;
            castDeath     = false;
            castOnMelee   = false;
            castAttacking = false;

            updateResult = UpdateResult.NeedWipe;

            options.Music.StartMusic(Bgm.EVIL, true);
        }
Example #7
0
        private int GetTics(MobjStateDef state)
        {
            var options = world.Options;

            if (options.FastMonsters || options.Skill == GameSkill.Nightmare)
            {
                //* if ((int)MobjState.SargRun1 <= state.Number &&
                //     state.Number <= (int)MobjState.SargPain2)
                // {
                //     return state.Tics >> 1;
                // }
                // else
                // {
                return(state.Tics);
                //}
            }
            else
            {
                return(state.Tics);
            }
        }
Example #8
0
        private void UpdateCast()
        {
            if (--castTics > 0)
            {
                // Not time to change state yet.
                return;
            }

            if (castState.Tics == -1 || castState.Next == MobjState.Null)
            {
                // Switch from deathstate to next monster.
                castNumber++;
                castDeath = false;
                if (castNumber == castorder.Length)
                {
                    castNumber = 0;
                }
                if (DoomInfo.MobjInfos[(int)castorder[castNumber].Type].SeeSound != 0)
                {
                    StartSound(DoomInfo.MobjInfos[(int)castorder[castNumber].Type].SeeSound);
                }
                castState  = DoomInfo.States[(int)DoomInfo.MobjInfos[(int)castorder[castNumber].Type].SeeState];
                castFrames = 0;
            }
            else
            {
                // Just advance to next state in animation.
                if (castState == DoomInfo.States[(int)MobjState.PlayAtk1])
                {
                    // Oh, gross hack!
                    castAttacking = false;
                    castState     = DoomInfo.States[(int)DoomInfo.MobjInfos[(int)castorder[castNumber].Type].SeeState];
                    castFrames    = 0;
                    goto stopAttack;
                }
                var st = castState.Next;
                castState = DoomInfo.States[(int)st];
                castFrames++;

                // Sound hacks....
                Sfx sfx;
                switch (st)
                {
                case MobjState.PlayAtk1:
                    sfx = Sfx.DSHTGN;
                    break;

                case MobjState.PossAtk2:
                    sfx = Sfx.PISTOL;
                    break;

                case MobjState.SposAtk2:
                    sfx = Sfx.SHOTGN;
                    break;

                case MobjState.VileAtk2:
                    sfx = Sfx.VILATK;
                    break;

                case MobjState.SkelFist2:
                    sfx = Sfx.SKESWG;
                    break;

                case MobjState.SkelFist4:
                    sfx = Sfx.SKEPCH;
                    break;

                case MobjState.SkelMiss2:
                    sfx = Sfx.SKEATK;
                    break;

                case MobjState.FattAtk8:
                case MobjState.FattAtk5:
                case MobjState.FattAtk2:
                    sfx = Sfx.FIRSHT;
                    break;

                case MobjState.CposAtk2:
                case MobjState.CposAtk3:
                case MobjState.CposAtk4:
                    sfx = Sfx.SHOTGN;
                    break;

                case MobjState.TrooAtk3:
                    sfx = Sfx.CLAW;
                    break;

                case MobjState.SargAtk2:
                    sfx = Sfx.SGTATK;
                    break;

                case MobjState.BossAtk2:
                case MobjState.Bos2Atk2:
                case MobjState.HeadAtk2:
                    sfx = Sfx.FIRSHT;
                    break;

                case MobjState.SkullAtk2:
                    sfx = Sfx.SKLATK;
                    break;

                case MobjState.SpidAtk2:
                case MobjState.SpidAtk3:
                    sfx = Sfx.SHOTGN;
                    break;

                case MobjState.BspiAtk2:
                    sfx = Sfx.PLASMA;
                    break;

                case MobjState.CyberAtk2:
                case MobjState.CyberAtk4:
                case MobjState.CyberAtk6:
                    sfx = Sfx.RLAUNC;
                    break;

                case MobjState.PainAtk3:
                    sfx = Sfx.SKLATK;
                    break;

                default:
                    sfx = 0;
                    break;
                }

                if (sfx != 0)
                {
                    StartSound(sfx);
                }
            }

            if (castFrames == 12)
            {
                // Go into attack frame.
                castAttacking = true;
                if (castOnMelee)
                {
                    castState = DoomInfo.States[(int)DoomInfo.MobjInfos[(int)castorder[castNumber].Type].MeleeState];
                }
                else
                {
                    castState = DoomInfo.States[(int)DoomInfo.MobjInfos[(int)castorder[castNumber].Type].MissileState];
                }

                castOnMelee = !castOnMelee;
                if (castState == DoomInfo.States[(int)MobjState.Null])
                {
                    if (castOnMelee)
                    {
                        castState = DoomInfo.States[(int)DoomInfo.MobjInfos[(int)castorder[castNumber].Type].MeleeState];
                    }
                    else
                    {
                        castState = DoomInfo.States[(int)DoomInfo.MobjInfos[(int)castorder[castNumber].Type].MissileState];
                    }
                }
            }

            if (castAttacking)
            {
                if (castFrames == 24 ||
                    castState == DoomInfo.States[(int)DoomInfo.MobjInfos[(int)castorder[castNumber].Type].SeeState])
                {
                    castAttacking = false;
                    castState     = DoomInfo.States[(int)DoomInfo.MobjInfos[(int)castorder[castNumber].Type].SeeState];
                    castFrames    = 0;
                }
            }

stopAttack:

            castTics = castState.Tics;
            if (castTics == -1)
            {
                castTics = 15;
            }
        }