Формат: Keep a Changelog, версии — semver. Правила — как у MF_Core (docs/MF_Core/CHANGELOG.md).
Каждое изменение публичного API и формата data/SimpleVisual.json записывается сюда в том же коммите.
| Метка | Значение | Где допустимо |
|---|---|---|
| Added | Новое API / свойство / тип действия / тип элемента | MINOR |
| Changed | Совместимое изменение поведения | MINOR |
| Deprecated | Старое имя работает, перенаправляется на новое, одно предупреждение; указаны since и removeIn |
MINOR |
| Removed ⚠ BREAKING | Удаление того, что было Deprecated | MAJOR (до 1.0.0 — только в 1.0.0) |
| Breaking ⚠ BREAKING | Несовместимое изменение | MAJOR |
| Experimental change | Изменение API с пометкой [experimental] |
MINOR |
| Fixed | Исправление без изменения API | PATCH |
Стабильное API: reload, applyScene, layoutFor, registerAction, Settings, Hud, openCustomScene, setPreset, PresetIO.exportPreset/readPreset, Deprecated, VERSION, FORMAT_VERSION, а также все свойства файла, действия и типы элементов из документации. Остальные члены MF.SimpleVisual (LayoutStore, WindowPatcher, ElementFactory, Template, Dyn…) — [experimental], их использует редактор.
MF.SimpleVisual.Deprecated:
Deprecated.method(MF.SimpleVisual, "oldName", { since: "0.9.0", removeIn: "1.0.0", replacement: "MF.SimpleVisual.newName", fn: MF.SimpleVisual.newName });
Deprecated.renameProp("element", "oldKey", "newKey", { since: "0.9.0", removeIn: "1.0.0" });
Deprecated.aliasAction("oldType", "newType", { since: "0.9.0", removeIn: "1.0.0" });
Deprecated.aliasElementType("oldType", "newType", { since: "0.9.0", removeIn: "1.0.0" });
Свойства файла переименовываются при загрузке; редактор сохраняет файл уже с новыми именами.
since / removeIn.Формат файла ("version"): несовместимое изменение структуры поднимает FORMAT_VERSION и добавляет миграцию vN → vN+1 (MF.Migration). Файл более нового формата загружается с предупреждением.
MF.Core.register("MF_MyPlugin", "1.0.0", { requires: { MF_Core: "1.1.0", MF_SimpleVisual: "0.8.0" } });
В @help: Requires: MF_SimpleVisual 0.8.0+ (written against 0.8.0), @base MF_SimpleVisual, @orderAfter MF_SimpleVisual.
LICENSE.md (MF Plugins License) и заголовки лицензии в MF_Core, MF_SimpleVisual, MF_SimpleVisualEditor (комментарий + раздел License в @help).game.rmmzproject, NW.js) файл редактора заменяет себя пустой заглушкой. tools/SimpleVisual/strip_editor.js <папка сборки> [--dry] — заглушка + status: false в js/plugins.js сборки.@help, раздел «Versioning policy»); разделение API на стабильное и [experimental].MF.SimpleVisual.Deprecated: warn, method, property, renameProp, aliasAction, aliasElementType, upgradeLayout, list, rules. Переименованные свойства обновляются при загрузке файла и импорте пресетов; устаревшие типы действий выполняются под новым именем.HTML-документация как у MF_Core: docs/SimpleVisual/index.html (справочник формата и API, поиск), getting-started.html (быстрый старт и пример сцены).
particles — частицы в прямоугольнике элемента: пресеты rain, snow, embers, fireflies, stars; свои count, shape (dot / streak) или image, color, size*, speed*, angle, spread, opacity*, spawn (top / bottom / area), life*, sway, wind, gravity, spin, flicker, pulse, fade, alignToMotion, blend: "add", mouseRepel (радиус, частицы разлетаются от курсора). Числа — формулы. В редакторе частицы замирают. Демо: звёзды, падающие звёзды и светлячки на титуле, искры в меню, дождь в «Витрине» при включённом переключателе №2.levelExp.{player.…}, {event.<id>.…}, {tile.<x>.<y>.…} (MapTokens): клетка, плавные координаты, центр на экране (uiX/uiY — как у элементов, screenX/Y — холст), dist, angle от игрока, onScreen, regionId, passable. Пересчёт каждый кадр. Editor: раздел «Карта: игрок, события, клетки» в «Вставить значение».img/system/SV_Window.png (tools/SimpleVisual/make_windowskin.py), параллакс титула, стрелка к курсору.picture.image элементов принимает значения игры: "pictures/{hero.faceName}_{hero.faceNumber}" (перезагрузка при смене).tools/SimpleVisual/add_demo_scenes.js):
Custom_Party) — карточки героев с портретом (насыщенность = % HP), лист персонажа: большой портрет, EXP, столбцы параметров шириной по значению.Custom_Bag) — сетка 6×N иконок со счётчиком, мигающая выбранная ячейка, крупная иконка через обрезку IconSet по iconIndex.Custom_Quests) — статический список data, прогресс в строках и полоса в панели, печать «выполнено».Custom_Showcase) — цветокоррекция по времени и при наведении, стрелка за мышью, переменная с кнопками ± и enabled, переключатель с двумя состояниями по condition, живые значения, орбитальная анимация формулами.Custom_Hero) — экран выбора героя для превью: параллакс, плавающие карточки с подъёмом и зумом при наведении, вращающиеся гербы, «дышащие» полосы параметров, искры, светлячки от курсора, золотая кнопка.windows.<поле>.commands.<ключ>.action — действие вместо стандартного обработчика команды (любой Window_Command: титул, главное меню, опции…), как у кнопок. commands.<ключ>.enabled — условие доступности команды.menuCommands (после выбранного), у своих пунктов — название, действие (⚡), enabled, удаление; у стандартных — action и enabled. Список окна перестраивается сразу.extends, название, extends, windowskin/шрифт через выбор, стиль, дублирование, удаление), пресеты (переименование, дублирование, удаление). Сырой JSON — в свёрнутом блоке.menuCommands читают действие в момент выбора: изменённое или добавленное в редакторе действие работает без переоткрытия меню.docs/SimpleVisual/assets/gifs/ (пережаты ffmpeg, 1–4 МБ), список записей — assets/gifs/README.md; media/ и image/GIFS/ удалены. publish_docs.js публикует assets/ без .md.MF.UIEditor → MF.SimpleVisual, $dataUILayouts → $dataSimpleVisual (since 0.1.0, removeIn 1.0.0)."layouts" → "scenes" (миграция формата v0, теперь с предупреждением; removeIn 1.0.0).Этап 7: совместимость и полировка. Формат файла остаётся v1. Редактор 0.7.0 требует MF_SimpleVisual 0.8.0.
scenes.<X>.skip / force, параметры skipScenes и autoCompat (модуль Compat, KNOWN_PLUGINS: VisuMZ, CGMZ, AltMenuScreen, AltSaveScreen). Пропуск сцены — сообщение в консоли один раз.scaleMode: "scale" и scaleFonts — масштаб пиксельных значений от baseResolution к текущему размеру (модуль Resolution).layouts → scenes).data/SimpleVisualPresets/<name>.json (PresetIO); редактор: «Проект → Пресеты» — включить в игре, экспорт, импорт, JSON.altMenu, altSave в демо-файле.USER_GUIDE.md, USER_GUIDE.en.md, COMPATIBILITY.md.img/pictures/SV_*.png из SVG (tools/SimpleVisual/make_demo_art.py, исходники в docs/SimpleVisual/demo_art/).Этап 6: боевой экран и HUD. Формат файла остаётся v1. Редактор 0.6.0 требует MF_SimpleVisual 0.7.0.
_statusWindow с раскладкой «отъезжает» (пока команда не выбрана) относительно новой позиции, а не к стандартной — алиас Scene_Battle.statusWindowX. "slide": false — окно не двигается. В редакторе поле slide у _statusWindow в Scene_Battle._actorWindow и _enemyWindow без своей геометрии берут геометрию _statusWindow (BattleLayout.derive) — окна выбора цели остаются поверх статуса.Window_BattleStatus / Window_BattleActor: template строк с полями героя; шаблон по умолчанию повторяет вид MZ (лицо, состояние, имя, шкалы). Стандартные спрайты MZ скрываются при заданном template.actorState — анимированная иконка состояний MZ (Sprite_StateIcon); в превью — первая иконка статично.parent: "w:…") появляются и исчезают вместе с анимацией open / close окна (прозрачность ∝ openness), а не только после полного открытия; учитывается и цепочка родителей-элементов._cancelButton (бой) и _menuButton (карта) в sprites; visible: false удерживается, хотя сцена показывает кнопки каждый кадр."hud": true): hideOnMessage (по умолчанию true на карте), hideOnEvent, fadeFrames (плавное появление / скрытие, 12 кадров), fadeUnderPlayer (прозрачность, пока игрок за элементом). HUD не попадает в снимок карты для фона меню и боя, скрыт во время эффекта встречи. Команды плагина ShowHud / HideHud (весь HUD или один id, хранится в сохранении), API MF.SimpleVisual.Hud.scenes.Scene_Message (родительский класс обеих сцен).Scene_Map (hud: true, fadeUnderPlayer), шаблон Scene_Battle._statusWindow и подсказка над _actorCommandWindow.hover, pressed (поверх hover), disabled — объекты с переопределениями собственных свойств элемента (textColor, fill, opacity, brightness, zoom…). Проверяются по схеме типа; структурные ключи (id, items, action…) игнорируются. Модуль States (кэш по объекту состояния), применение только при смене состояния.enabled (условие) у всех элементов: недоступная кнопка не выполняет действие и играет disabledSound (по умолчанию «ошибка»), без своего disabled — затемняется как пункты MZ; недоступные command / list не получают фокус и снимаются с активности.blink (секунд на цикл) и blinkMin (наименьшая непрозрачность) — мигание элемента; удобно внутри состояния. blinkTarget: background (по умолчанию у окон / кнопок — текст не мигает), content, all (по умолчанию у картинок / фигур). Множитель накладывается на opacity / contentsOpacity MZ, а не заменяет их.hoverSound, clickSound, disabledSound ("Cursor1", { name, volume, pitch, pan }, "none" — тишина). У command / list — звук курсора, OK и «ошибки».window / text / button / command / list: fill, fill2, gradient, borderColor, borderWidth, radius — вместо рамки windowskin (можно менять в состояниях).command / list: rowHover — выбранная строка (фон-фигура, opacity, blink, cursor: true — оставить курсор окна), rowDisabled — недоступные строки (opacity, свой фон, background: false); у list — rowEnabled (условие или выражение с полями строки: "{count} > 0"). В шаблонах строк — поля {selected} и {enabled} (строки перерисовываются при смене выбора).enabled. Поля звуков с подсказками файлов из audio/se и кнопкой «♪».Картинки внутри рамки, цветокоррекция, мышь и сам объект в выражениях. Формат файла остаётся v1.
MF_SimpleVisual 0.6.0: requires: { MF_Core: "1.1.0" }; редактор 0.5.0: MF_Core 1.1.0, MF_SimpleVisual 0.6.0. С MF_Core 1.0.0 MF.Core.register выдаст понятную ошибку.MF.Units, MF_Core 1.1.0): функции min max abs sign floor ceil round trunc sqrt pow exp log mod clamp lerp step between if hypot dist sin cos tan asin acos atan atan2 sind cosd tand atan2d angle deg rad, константы pi, e, операторы ^, < > <= >= == !=, && || !, ? :. По-прежнему без eval. В «Вставить значение» — раздел «Функции и операторы».{self.…} — сам элемент / окно, чьё свойство считается; {el.<id>.…} — любой элемент сцены. Поля: x, y, width, height, centerX/Y, right, bottom, rotation, opacity, visible, hover, down, relX/Y, clicks, hoverTime, time, parentWidth/Height. Геометрия — с прошлой раскладки. Свойства с ними пересчитываются каждый кадр. В «Вставить значение» — разделы «Этот элемент / окно» и «Элементы сцены»; живой результат в панели считается для выбранного элемента.{mouse.…}: x, y, uiX, uiY, left, right, middle, pressed, dragging, dragX/Y, dragStartX/Y, clickX/Y, clicks, rightClicks, wheel, idle; по элементу — over.<id>, down.<id>, relX.<id>, relY.<id> (0–100 %). Свойства с {mouse.…} пересчитываются каждый кадр (остальные — раз в 10). В «Вставить значение» — раздел «Мышь».brightness, contrast, saturation, grayscale, sepia, hue, invert, blur (CSS filter) и tint + tintAmount (тонирование только по картинке, через отдельный canvas). Все числа — формулы, {…}, \V[n], в шаблонах строк ещё и поля строки ({hpRate}). Работает и у элементов, и у картинок шаблонов списков. В окне настройки — группа «Цветокоррекция» с ползунками и пресетами (Ч/Б, сепия, негатив, ночь…).offsetX/Y, zoom, imageRotation (внутренний поворот с обрезкой по рамке), tile (repeat/repeatX/repeatY), crop*, flipX/Y, smooth, scrollX/Y (элементы), fit: cover/none. Все числовые поля принимают формулы и {…} / \V[n]. Общий рисовальщик PictureDraw, запекание в Bitmap размера рамки (svBakeImage); без новых свойств используется прежний быстрый путь.PictureEditor) — интерактивное: превью с «призраком» обрезанной части и контуром картинки; тянуть — сдвиг (Shift — по оси), круглая ручка — поворот (Shift — по 15°), колесо — масштаб, двойной клик — центр; ползунки и «перетаскиваемые» названия полей; кнопки вписывания/тайлинга, сетка выравнивания 3×3, повороты ±90°, отражения; обрезка рамкой на исходной картинке. У каждого поля {…} и живой результат формул; поля с формулами мышью не меняются. Один жест = один шаг undo.Editor.renameElement). Меняет id, обновляет parent вложенных элементов и initialFocus сцены; один шаг undo. Унаследованные из базовых раскладок элементы переименовываются только там. Ссылки в выражениях {id.field} не переписываются.picture.radius у неквадратных картинок, растянутых в квадрат, обрезал не по форме (углы снизу оставались почти прямыми). PIXI-маска заменена «запеканием»: картинка рисуется масштабированной и обрезанной скруглённым контуром в отдельный Bitmap размера на экране (svBakeRounded). radius теперь совпадает с shape.radius при тех же размерах.opacity у picture/shape/gauge не работал: svUpdateVisibility каждый раз сбрасывал alpha = 1 (а Sprite.opacity — это и есть alpha). Теперь итоговая альфа = opacity × затемнение скрытых элементов в редакторе (svSetOpacity / svUpdateAlpha).rotation родителя не применялся к дочерним элементам (parent). Теперь элемент хранит матрицу _svXform, и дочерние элементы поворачиваются вместе с родителем вокруг его центра, включая вложенность в несколько уровней. Поворот родителя входит в svParentSig, поэтому дети перестраиваются при его изменении.isDescendant).Этапы 4.5 (вложенные элементы, содержимое стандартных окон) и 5 (темы и настройки игрока). Формат файла остаётся v1.
parent у элементов: "w:<поле окна>" или id элемента. Позиция и проценты — от внутренней области родителя; элемент следует за ним и скрывается вместе с ним (окно закрыто/скрыто).windows.<поле>: template, rowHeight, cols, rowBackground. Адаптеры строк: Window_MenuStatus (поля героя), Window_ItemList (+ count), Window_SkillList (+ mpCost/tpCost), Window_Command (name, symbol, status, iconIndex). Стандартная отрисовка заменяется только при заданном template; шаблон по умолчанию повторяет вид MZ.windows.<поле>.commands для Window_Command (титул, главное меню, опции, магазин…): text, visible (bool / условие), order, icon, align, color, background; ключ — символ или #<индекс>.actorGauge — анимированная шкала MZ (Sprite_Gauge) с настраиваемым размером.scenes.<Scene_X>.sprites.<поле>: _backSprite1/2, _gameTitleSprite, _backgroundSprite — x, y, scaleX, scaleY, opacity, visible, image; заголовок — titleText, titleFontFace, titleFontSize, titleColor, titleOutlineColor, titleOutlineWidth.ThemeManager; themes.<имя>.label — название темы для игрока.Scene_Options (тема, прозрачность окон, размер шрифта, положение HUD), хранятся в config.rmmzsave (MF.Config, ключ MF_SimpleVisual), применяются поверх разметки. Параметры плагина — белый список: optTheme, themeList, optWindowOpacity, optFontSize, optHudPosition. Элементы с "hud": true получают выбранный игроком anchor.ListAdapter, CommandAdapter, SpritePatcher, Parents, ThemeManager, Settings, SPRITE_PROPS, SPRITE_FIELDS, COMMAND_CONF_PROPS, ElementFactory.follow(); layoutFor() возвращает sprites, player.parent (фиолетовая рамка — внутренняя область родителя, координаты в его системе); спрайты сцены (оранжевые) — перемещение, масштаб хэндлами, свойства; «Редактировать шаблон строки» для стандартных списков; «Редактировать пункты» для Window_Command и элементов command (объекты вместо JSON, ↑/↓, скрытие/удаление); actorGauge в шаблоне; темы как JSON в разделе «Проект».window/text/button/command/list, темы): textColor (индекс палитры windowskin 0–31 или CSS-цвет), outlineColor, outlineWidth, fontBold, fontItalic. Дети шаблона text: fontFace, color, outlineColor, outlineWidth, fontBold, fontItalic.fonts/: "fontFace": "MyFont.ttf" (также .otf, .woff, .woff2, titleFontFace) — загружаются при запуске (Scene_Boot ждёт их) или по требованию с перерисовкой после загрузки; MF.SimpleVisual.Fonts.x, y, width, height, rotation, opacity элементов ("50%-{game.gold}/10", "\\V[3]*2"); запасное значение {token|значение} / \V[n|значение] — и в тексте (объекты / пустые значения больше не превращаются в [object Object]). Пересчёт с «грязным» флагом: раз в 10 кадров, layout — только при изменении подставленных значений; кэш проверок MF.SimpleVisual.Dyn. Ошибки выражений (синтаксис, деление на 0) — стандартное значение + одно предупреждение.windows.<поле>): выражения в x, y, width, height, opacity, backOpacity, contentsOpacity; проверка раз в 10 кадров в Window_Base.update, применение только при изменении значений. В редакторе — те же «ƒx», живое значение, тест-значения и защита от перетаскивания.rotation у всех элементов (градусы, вокруг центра). Элемент shape (заливка, градиент, рамка, скругление); picture.radius.Редактор: метка «ƒx» у полей со значениями игры (подсказка с примерами), кнопка «{…}» рядом; под полем — живое значение (= 124) и разбор токенов: текущее значение, «⚠ героя нет → 100 (запасное)», «добавьте |
значение», ошибки понятным текстом («деление на ноль»). Поле «тест» у каждого токена — тестовое значение только для превью (не сохраняется, сбрасывается при закрытии). Перетаскивание не затирает выражения (сообщение). Кнопка «+ shape». |
{actor.<id>.hp}, {member.<n>.exp}, {leader.level}, {item.<id>.count} и т. д.; строки героя (party, Window_MenuStatus) дополнены параметрами (atk…luk, hit/eva/cri, exp, nextExp, hpRate, weapon, equips, states, profile…). В «Вставить значение» — ветки «Герои (параметры)», «Группа (параметры)» с лидером, «Предметы», «Оружие», «Броня».text, label, format, emptyText, titleText) — каскадный список с ленивой загрузкой веток: поля строки шаблона, {game.*}, выбранная строка списков/меню сцены {id.поле}, переменные \V[n] (по 50, с именами из БД), герои \N[n], участники \P[n], цвета \C[n] с образцами, иконки \I[n] с картинками, прочие коды. Известные поля подписаны (RU/EN), остальные — по ключу; показывается текущее значение.rmmz-mainfont, rmmz-numberfont и файлы fonts/), выбор цвета — палитра windowskin (\C[n]) и любой цвет; образец цвета рядом с полем.parent, сворачивание/разворачивание («Развернуть всё» / «Свернуть всё»), подэлементы: пункты Window_Command и command, дети шаблона строки (клик открывает нужный режим и выделяет объект). Перетаскивание элемента на окно/элемент — вложить, на полосу сверху — вынуть; позиция на экране сохраняется, одно действие в истории, защита от циклов.{ "prefab": "<шаблон>", "prefabId": "<id в шаблоне>" } + только локальные изменения; правка шаблона меняет все копии. Редактор: флажок «связать» при вставке своего шаблона, «↺ Как в шаблоне», «⇪ Применить в шаблон», «⛓ Отвязать».windowTemplates); вставка с уникальными id и сохранением parent.{game.gold}, {game.currency}, {game.steps}, {game.playtime}, {game.map}, {game.leader} и др. в тексте элементов.condition, enabled, visible — «Всегда / Все (И) / Любое (ИЛИ)», вложенные группы, «НЕ»; переключатели, переменные (сравнение с числом или другой переменной), золото, предмет/оружие/броня в инвентаре, герой в группе, скрипт; выбор из списков БД с именами. Сырой JSON — в свёрнутом блоке «JSON».img/<папка> с миниатюрами и поиском (кнопка «…» у image, windowskin — img/system, faceName — img/faces).%, остаются процентными и без него. Выбор режима запоминается.parent в списке) — изменение выглядело не попавшим в историю. Списки после выбора возвращают фокус игре.Window_MenuStatus по умолчанию совпадает с отрисовкой MZ (отступы строки, «Ур» и уровень раздельно).SV_TemplatePreview.setup(list, template, rowHeight, options) — options.row, options.rowBackground для стандартных окон.command в режиме редактора показывают и скрытые по условию пункты.{поле} вместо пустого текста, рамки «icon» / «face» вместо пустой иконки/лица.padding), серый фон строки, белая область содержимого (координаты шаблона); подпись с размерами.cols и стиль рамки списка (padding, windowskin, opacity, backOpacity, шрифт).list.rowBackground: false — строки без фона.Этап 4: собственные меню.
Scene_Custom (scenes.<id> с "custom": true): background (blur / none / картинка), initialFocus; общая разметка Scene_Custom.command (items, cols, align, onCancel) и list (source: предметы, герои, навыки, таблицы БД, свои данные; ids, cols, rowHeight, emptyText, action, onCancel).template: text, icon, face, gauge с подстановками {поле}; привязка текста к выбранной строке {list.name}; подстановки из строки в действиях ("value": "{id}").custom, focus; фокус мышью.menuCommands — пункты главного меню (after / before, enabled, visible).presets + команда плагина SetLayoutPreset (выбор в сохранении), команда OpenCustomScene.openCustomScene, setPreset, Presets, Template, Sources, MenuCommands, Scene_Custom, Window_SVTemplatePreview, TEMPLATE_PROPS, LIST_SOURCES; LayoutStore.base(), customScenes(), menuCommands(); layoutFor() возвращает background, initialFocus.Custom_Bestiary + пункт «Бестиарий» в меню.list в изоляции поверх приостановленной сцены (сцена не закрывается, состояние сохраняется); создание и открытие своих сцен (редактор переоткрывается в новой сцене); свойства своей сцены; menuCommands как JSON; поля command/list.panelWidth, growWindow.rows у window/text учитывается для "height": "auto").LayoutStore.data() учитывает активный пресет; исходные данные файла — LayoutStore.base().Этап 3: добавочные элементы.
scenes.<Scene_X>.elements: типы window, text, button, picture, gauge; anchor, z (под/над окнами), visible, condition, opacity; наследование по классам сцен с перекрытием по id. Формат файла остаётся v1.ActionRegistry: scene, back, commonEvent, switch, variable, se, script (только с allowScript); массив действий; MF.SimpleVisual.registerAction().ElementFactory, ActionRegistry, ELEMENT_TYPES, ELEMENT_PROPS, setEditing(), isEditing(), LayoutStore.elements(); LayoutStore.get() возвращает elements.data/SimpleVisual.json: фон-картинка, заголовок, текст по условию, шкала переменной, кнопка.text — многострочное поле, condition/action/max — JSON); Delete удаляет свой элемент, унаследованный — скрывает; «Сбросить изменения» для перекрытия унаследованного. Скрытые элементы в редакторе полупрозрачны, логика элементов (кнопки, условия) на паузе."w:<поле>" / "e:<id>" (MF.SimpleVisual.Editor.select).Этап 2: js/plugins/MF_SimpleVisualEditor.js, требует MF_Core 1.0.0+ и MF_SimpleVisual 0.2.0+. Работает только в тест-режиме.
MF.Document: проверка, атомарная запись, SimpleVisual.bak.json; повреждённый исходный файл перезаписывается только после подтверждения. Без NW.js — скачивание.MF.I18n. Параметры: gridSize, snapThreshold, historyLimit, panelSide.MF.SimpleVisual.Editor: open, close, toggle, isActive, document, select.LayoutStore.get() всегда возвращает объект (раньше null без разметки); SceneHook.apply() возвращает число обработанных окон.LayoutStore.sceneKey, scenes, themeNames; SceneHook.windowFields, windows; WindowPatcher.standardRect, isPatched, defaults.MF.SimpleVisual.WINDOW_PROPS, STYLE_PROPS, sanitize, resetWarnings.Первый выпуск runtime (этап 1). Переименование проекта: UIEditor → SimpleVisual (MF_UIEditor → MF_SimpleVisual, data/UILayouts.json → data/SimpleVisual.json, $dataUILayouts → $dataSimpleVisual, документация — docs/SimpleVisual).
js/plugins/MF_SimpleVisual.js, требует MF_Core 1.0.0+. Параметр enabled (безопасный режим).LayoutStore: необязательный data/SimpleVisual.json через MF.Data; при отсутствии/ошибке — стандартный вид. Миграция по version (ключ "SimpleVisual"), наследование разметки по классам сцен, темы с extends, корневой theme.WindowPatcher: x, y, width, height (пиксели, %, выражения, "auto" + rows), anchor, visible, opacity, backOpacity, contentsOpacity, padding, windowskin, fontFace, fontSize. Пересоздание contents и refresh() только при изменении размера/шрифта/отступа.SceneHook: применение после scene.create() и scene.start().MF.SimpleVisual: reload(), applyScene(), layoutFor(), модули LayoutStore, WindowPatcher, SceneHook.AltMenuScreen / AltSaveScreen.data/SimpleVisual.json для Scene_Menu.