public static SideMenu Create(IReadOnlyDictionary <FF8String, FF8String> pairs) { var r = new SideMenu { _helpStr = new FF8String[pairs.Count], _widths = new int[pairs.Count] }; byte pos = 0; foreach (var pair in pairs) { r._helpStr[pos] = pair.Value; var rectangle = Memory.Font.RenderBasicText(pair.Key, 0, 0, skipdraw: true); r._widths[pos] = rectangle.Width; if (rectangle.Width > r._largestWidth) { r._largestWidth = rectangle.Width; } if (rectangle.Height > r._largestHeight) { r._largestHeight = rectangle.Height; } r._totalWidth += rectangle.Width; r._totalHeight += rectangle.Height; r._avgWidth = r._totalWidth / (pos + 1); r._avgHeight = r._totalHeight / (pos + 1); pos++; } r.Init(pairs.Count, 1, new IGMDataItem.Box { Pos = new Rectangle { Width = 226, Height = 492, X = 843 - 226 } }, 1, pairs.Count); pos = 0; foreach (var pair in pairs) { r.ITEM[pos, 0] = new IGMDataItem.Text { Data = pair.Key, Pos = new Rectangle(r.SIZE[pos].X, r.SIZE[pos].Y, 0, 0) }; pos++; } r.Cursor_Status |= (Cursor_Status.Enabled | Cursor_Status.Vertical | Cursor_Status.Horizontal); return(r); }