// calculate origin for screen as an index into the level int CalcScreenIndex() { var flick = _gamedef.GetSetting(OptionSetting.flickscreen, (Pair <int, int>)null); var zoom = _gamedef.GetSetting(OptionSetting.zoomscreen, (Pair <int, int>)null); if ((flick == null && zoom == null) || !PlayerIndexes.Any()) { return(0); } var pindex = PlayerIndexes[0]; var width = _level.Width; var height = _level.Height; if (flick != null) { var x = flick.Item1 * (pindex % width / flick.Item1); var y = flick.Item2 * (pindex / width / flick.Item2); return(width * y + x); } else { var x = Math.Max(0, Math.Min(width - zoom.Item1, pindex % width - zoom.Item1 / 2)); var y = Math.Max(0, Math.Min(height - zoom.Item2, pindex / width - zoom.Item2 / 2)); return(width * y + x); } }