public void DoScript(Character[] c) { if (_waiting > 0f) { _waiting -= Game1.FrameTime; } else { var done = false; while (!done) { _curLine++; if (Lines[_curLine] != null) { switch (Lines[_curLine].Command) { case MapCommands.Fog: _map.Fog = true; break; case MapCommands.Monster: for (var i = 0; i < c.Length; i++) { if (c[i] == null) { c[i] = new Character(Lines[_curLine].VParam, Game1.CharDefs[GetMonsterFromString(Lines[_curLine].SParam[1])], i, Character.TeamBadGuys) { Map = _map }; if (Lines[_curLine].SParam.Length > 4) { c[i].Name = Lines[_curLine].SParam[4]; } break; } } break; case MapCommands.MakeBucket: _map.Bucket = new Bucket(Lines[_curLine].IParam, _map); break; case MapCommands.AddBucket: _map.Bucket.AddItem(Lines[_curLine].VParam, GetMonsterFromString(Lines[_curLine].SParam[1])); break; case MapCommands.IfNotBucketGoto: if (_map.Bucket.IsEmpty) { GotoTag(Lines[_curLine].SParam[1]); } break; case MapCommands.Wait: _waiting = Lines[_curLine].IParam / 100f; done = true; break; case MapCommands.IfTrueGoto: if (Flags.GetFlag(Lines[_curLine].SParam[1])) { GotoTag(Lines[_curLine].SParam[2]); } break; case MapCommands.IfFalseGoto: if (!Flags.GetFlag(Lines[_curLine].SParam[1])) { GotoTag(Lines[_curLine].SParam[2]); } break; case MapCommands.SetGlobalFlag: _map.GlobalFlags.SetFlag(Lines[_curLine].SParam[1]); break; case MapCommands.IfGlobalTrueGoto: if (_map.GlobalFlags.GetFlag(Lines[_curLine].SParam[1])) { GotoTag(Lines[_curLine].SParam[2]); } break; case MapCommands.IfGlobalFalseGoto: if (!_map.GlobalFlags.GetFlag(Lines[_curLine].SParam[1])) { GotoTag(Lines[_curLine].SParam[2]); } break; case MapCommands.Stop: IsReading = false; done = true; break; case MapCommands.Tag: break; case MapCommands.SetLeftExit: _map.TransitionDestination[(int)TransitionDirection.Left] = Lines[_curLine].SParam[1]; break; case MapCommands.SetRightExit: _map.TransitionDestination[(int)TransitionDirection.Right] = Lines[_curLine].SParam[1]; break; case MapCommands.SetLeftEntrance: if (_map.TransDir == TransitionDirection.Right) { c[0].Location = Lines[_curLine].VParam; c[0].Face = CharDir.Right; c[0].SetAnim("fly"); c[0].State = CharState.Air; c[0].Trajectory = new Vector2(200f, 0f); _map.TransDir = TransitionDirection.None; } break; case MapCommands.SetRightEntrance: if (_map.TransDir == TransitionDirection.Left) { c[0].Location = Lines[_curLine].VParam; c[0].Face = CharDir.Left; c[0].SetAnim("fly"); c[0].State = CharState.Air; c[0].Trajectory = new Vector2(-200f, 0f); _map.TransDir = TransitionDirection.None; } break; case MapCommands.SetIntroEntrance: if (_map.TransDir == TransitionDirection.Intro) { c[0].Location = Lines[_curLine].VParam; c[0].Face = CharDir.Right; c[0].SetAnim("fly"); c[0].State = CharState.Air; c[0].Trajectory = new Vector2(0f, 0f); _map.TransDir = TransitionDirection.None; } break; } } } } }