public void Clear() { State = null; Tics = 0; Sx = Fixed.Zero; Sy = Fixed.Zero; }
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); }
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); }
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; }
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); }
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); } }
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; } }