Godot 4.7 project for authoring, previewing, validating, and building Exchanger PCK themes. Includes the example and space-pixel themes, binding contracts, editor tooling, validation/build scripts, and project documentation.
48 KiB
Тема space-pixel
Реализованный вид
- Статический pixel-art фон
background.pngразмером 1080×1920. - Кириллический pixel-font
VCR OSD Mono Cyrдля Label и Button. - Зелёная текстура
button_big.pngкак масштабируемый StyleBoxTexture для normal, hover, pressed и disabled-состояний. - Безопасная тёмно-синяя default-панель для существующих экранов Exchanger и отдельная
WhitePanel-вариация с настоящей белой заливкой, зелёной шапкой и тонкой рамкой из исходника. - Семантические вариации текста, кнопок и панелей, включая
ScreenTitle,PanelTitle,PanelText,AdvertisementPanel,FooterPanel,StatusPanelиWhitePanel, для точного воспроизведения контрастов референса без глобальной перекраски всех Control. - Экранные заголовки используют общий кегль
36 px; более компактный заголовок сервисного входа —30 px. Блок техподдержки в Home и общем footer начинается сx = 341 px, поэтому обе строки номера остаются левее правой границы при том же масштабе и не пересекаются с логотипом. - Decoration-сцена с theme-owned скриптом
scripts/ufo_flight_controller.gd: два кадра звёзд и дваAnimatedSprite2Dс независимыми двусторонними пролётами. После выхода за край каждый НЛО выдерживает случайную паузу, разворачивается черезflip_hи возвращается на новой случайной высоте в диапазоне260–1660исходной системы1080×1920. Высота привязана к шагу3 px, чтобы после масштабирования production-экраном до720×1280коэффициентом2/3оставаться целочисленной. Оба спрайта независимо переключаютframe_01.png/frame_02.png; скорость большого набора —1 fps, малого —1,5 fps. - Два НЛО ценового блока Home в
visuals/home_top.tscnсохраняют референсные базовые позиции, но независимо покачиваются вверх-вниз черезscripts/home_ufo_bobbing.gd: амплитуда слева4 px, справа5 px, периоды3,2и3,8секунды. Смещение округляется до целого пикселя, поэтому Nearest-фильтрация остаётся чёткой. - Двухкадровый нижний баннер экранов Cash, CardAmount, CardCustomAmount и CardTerminal сохраняет
оба исходных кадра, но
scripts/stable_banner_animation.gdкомпенсирует различие их внутренней геометрии. Дляframe_02корректируются масштаб и опорная точка, поэтому видимая цветная область обоих кадров занимает одинRect2(34.996, 1000.8, 175.421, 111.389)в координатах экрана. - Красная текстура
button_cancel.pngиспользуется через variationCancelButtonдля действий «ОТМЕНА» и черезDangerButtonдля всех кнопок «УДАЛИТЬ». - Nearest-фильтрация в preview и decoration-сцене. Manifest
space-pixelзадаётUseNearestTextureFilter: true, поэтому Exchanger включает nearest только для этой DLC. - Корни всех девяти production-сцен также явно задают
texture_filter = 1. Это необходимо для self-contained режима: Exchanger не переопределяет визуальные параметры такой сцены, а весь текст и вложенные изображения наследуют Nearest непосредственно от theme-owned root даже при физическом разрешении1080×1920и коэффициенте масштабирования1,5. Интерполяционное размытие при этом устраняется; из-за дробного коэффициента отдельные исходные пиксели неизбежно занимают разное число физических пикселей.
Сравнение с визуальными референсами
Полностью просмотрены восемь JPG и 64 последовательных кадра interface.mp4 с интервалом
0,5 секунды. Фото и видео находятся только в локальном, игнорируемом Git каталоге
themes/space-pixel/source/references/ и никогда не экспортируются в PCK.
Подтверждённые паттерны интерфейса:
- фон всегда остаётся одним статическим космическим изображением;
- экранный заголовок белый, крупный и расположен сверху; кнопка
НАЗАД— слева от него; - информационные поверхности белые, с зелёной шапкой и тонкой зелёной окантовкой;
- между зелёной шапкой и содержимым сохраняется видимый белый интервал 16–20 px; в текущих
preview-сценах ему соответствует
separation = 28с учётом внутренних полей текстуры панели; - заголовки панелей и основной текст — тёмно-синие/почти чёрные;
- основное действие — одна широкая зелёная CTA-кнопка, вспомогательные действия компактнее;
- пинпад ручного ввода занимает основную рабочую область экрана и состоит из двенадцати
одинаковых квадратных клавиш
152×152 pxв сетке3×4с зазором12 px; - PIN-клавиатура сервисного входа использует тот же квадратный визуальный стиль: двенадцать
клавиш
112×112 pxв центрированной сетке3×4с зазором12 px; - иерархия читается сверху вниз: заголовок → баланс/состав выдачи → инструкция/выбор → действие;
- нижняя зона бренда и технической поддержки постоянна и отделена от основного действия;
- пришелец, НЛО и speech bubble занимают свободные зоны, но не закрывают функциональный контент;
- покадровые bill/coin/card/result-анимации принадлежат конкретным состояниям экрана, а не фону.
- экранные изображения центрируются по внутренней белой области после полей
WhitePanel, поэтому их координата не обязана совпадать с геометрическим центром внешней рамки панели.
Home воспроизводит themes_src/space_pixel/references/photo_2026-08-20_14-09-56.jpg в его
исходном размере 720×1280. Bubble-плашки, оба НЛО, панели наличия/оплаты, кнопки, билборд,
логотип и поддержка выставлены по измеренным пиксельным координатам; исходные PNG масштабируются
nearest-фильтром без подмены на приблизительные StyleBoxFlat. Скрипты home_reference_label.gd
и home_stock_presenter.gd сохраняют референсный формат цены/телефона и переключают индикатор
МНОГО/МАЛО, не меняя app-owned binding-id.
Четыре транзакционных экрана также собраны непосредственно по JPG 720×1280, без внешнего
preview chrome и без подмены их дерева галереей:
screen_cash_payment.tscnсоответствуетphoto_2026-08-20_14-10-27.jpg: восстановлены две балансные карточки, панель инструкции с исходной bill/coin-анимацией, широкая кнопка выдачи, нижний НЛО, речевая плашка и footer;screen_card_custom_amount.tscnсоответствуетphoto_2026-08-20_14-10-36.jpg: верхняя карточка выдачи и панель ручного ввода имеют измеренные границы, клавиши46×46 px, а действияОТМЕНА/0/OKнаходятся в том же нижнем ряду, что и на фото;screen_card_amount.tscnсоответствуетphoto_2026-08-20_14-10-40.jpg: показаны восемь референсных сумм в двух колонках, отдельная кнопка «ДРУГАЯ СУММА», CTA подтверждения и нижняя композиция с НЛО, bubble и footer; обязательные слоты 08–15 сохранены скрытыми;screen_card_terminal.tscnсоответствуетphoto_2026-08-20_14-10-43.jpg: карточная анимация остаётся внутри production-сцены, под ней расположена кнопка отмены и исходная нижняя композиция.
Обязательные binding ID и типы узлов во всех четырёх сценах сохранены. Контрольные прямые рендеры
сделаны из самих production .tscn, а не из вручную собранного preview-макета.
Последовательность видео подтверждает длительный home-loop с НЛО, cash-инструкцию с чередованием кадров купюры/монеты, возврат на home, выбор карточной суммы, card-terminal loop и финальную анимацию неуспешной оплаты.
tools/preview/preview.tscn является переключаемой галереей в 720×1280. Девять production-сцен в
themes/space-pixel/package/scenes/ показывают все текущие ScreenId: Home, cash-screen, выбор карточной суммы,
ручной ввод, терминал, успешную и неуспешную оплату, сервисный вход и настройки. SETTINGS содержит
восемь внутренних разделов и демонстрирует LineEdit, SpinBox, OptionButton, CheckButton, HSlider
и полосы прокрутки. Bill/coin/card/success/failed-анимации, кнопки, белые карточки, безопасные зоны
декора и footer принадлежат самим production-сценам. Галерея ничего не добавляет в их дерево и
только переключает сцены; live reload сохраняет основную вкладку и раздел SETTINGS.
Отдельная builder-сцена tools/preview/interactive_pet_preview.tscn открывается кнопкой PET
основной галереи и динамически загружает InteractivePetScene активной темы. Для space-pixel
это components/interactive_pet.tscn, показанный в масштабе до 4×. Все 22 анимации получают
кнопки из публичного списка компонента; также работают предыдущая/следующая, пауза, повтор,
счётчик кадров и автопоказ полного цикла каждого состояния. Esc и кнопка «← ГАЛЕРЕЯ» возвращают
к девяти production-экранам. Сцена и её InteractivePetPreview.gd являются только builder tooling
и в PCK не экспортируются. Кнопка PET недоступна для активной темы без питомца.
Runtime-профиль питомца для сцен 720×1280: scale 0.845, ходьба 88 px/s, подъём 72 px/s,
touch/ЛКМ hit size 128×128, точка лап (64,96). Host вызывает реальные имена анимаций
напрямую: idle, sitting, action, dancing, все парные walking-анимации и
climbing_start/up/down;
в composite-действии interact увеличение до ×2 завершается за первые 75% клипа
come_closer; заключительная четверть показывается в полном масштабе, затем выдерживается ещё
0.15 секунды до запуска первого цикла action.
при начале выдачи host проигрывает четыре полных цикла dancing. hanging проигрывается при
удержании/перетаскивании, falling — при падении после отпускания и при смене экрана, а
одноразовый landing — после контакта с опорой; затем host включает зацикленный idle. Запрос
celebrate во время landing ждёт окончания приземления и только потом запускает четыре цикла
dancing. После завершённой ходьбы host выбирает idle с вероятностью 35% или sitting с
вероятностью 65%.
После подъёма или спуска host сразу продолжает маршрут без отдельной hanging-анимации.
Кадры и исходные каталоги текстур не менялись.
Non-sitting состояния используют нулевую локальную поправку дочернего спрайта. sitting
использует отдельную поправку (0,24), которая опускает только сидящего питомца на 20,28
экранного пикселя при runtime scale 0.845. Root, navigation, hit box и общая точка лап
(64,96) при переключении состояний не меняются.
Невидимый PetNavigation присутствует во всех восьми production-сценах, кроме Settings, и в
сумме объявляет 51 реальную горизонтальную поверхность и 46 связанных climb edges. Каждый экран
имеет собственные поверхности пола, кнопок и окон; при переключении host сохраняет старую
позицию, переключает граф и опускает питомца на default-floor нового экрана. Settings намеренно
не содержит графа и скрывает питомца.
В screen_home.tscn bounds равен (32,48,656,1192), объявлены восемь поверхностей и десять
climb edges. Default surface — пол
x=40..680, y=1240. Питомец может останавливаться на верхних гранях billboard
x=144..576, y=827, окна способов оплаты x=40..680, y=490, окна остатка
x=40..680, y=337, кнопок наличной/безналичной оплаты (y=550), ценового окна и речевой
плашки (y=60/61). Парные переходы у x=40 и x=680 дают подъём по левому/правому краю между
полом, платёжным и верхним окном; дополнительные edges связывают billboard, обе кнопки и верхние
плашки. Узлы маршрута — только Node2D с metadata, поэтому они ничего не рисуют и не меняют
геометрию production Control.
Инвентаризация исходников
| Группа | Материалы |
|---|---|
| Фон | background.png, два полноэкранных кадра звёзд |
| Кнопки | big, long, square, back, cancel и стрелки SpinBox вверх/вниз |
| Контейнеры | пять окон, три bubble-панели, billboard |
| Индикаторы | many, less, summa bar и тумблеры ON/OFF |
| Декорации | alien1–alien3, logo |
| Покадровая графика | banner (2), bill (4), coin (3), card (2), payment failed (3), payment success (5), UFO small (2), UFO large (2) |
| Интерактивный питомец | 22 sprite-sheet по сетке 128×128 px, 414 непустых кадров |
| Шрифт | VCR OSD Mono Cyr.ttf |
Всего в production package используется 75 PNG. Цвета.txt пуст, поэтому палитра определена по изображениям:
#00183D для fallback-фона, тёмно-синие поверхности/текст, зелёные контуры/кнопки,
фиолетовый focus-акцент и почти белый экранный текст.
Разделение runtime и исходников
themes/space-pixel/source/— сохранённый исходный материал пользователя и references.themes/space-pixel/package/assets/— копии с ASCII-путями для стабильной сборки PCK.package/scenes/— девять полноценных сцен с 481 immutable, 24 обязательными и двумя optional supplemental metadata binding; optional правый персонаж Home также размечен собственным runtime ID.package/components/on_screen_keyboards.tscn— две оформленные пиксельные экранные клавиатуры SETTINGS, скрытые по умолчанию и полностью принадлежащие теме.package/components/interactive_pet.tscn— визуальный компонент интерактивного питомца со всеми 22 анимациями изsource/alien_animation; runtime-API находится вpackage/scripts/interactive_pet.gd. Именаsource/alien_animationиpackage/assets/animations/alien_petсохранены только как theme-specific структура исходных материалов; generic pet contract не требует таких имён от других тем.package/ui_theme.tres, decoration, visuals иmanifest.json— исходник темы DLC v2.tools/preview/— tooling вне PCK; preview читаетpackage/напрямую, без корневого staging.
В PCK входят активные зависимости темы. Остальные runtime-копии сохранены в builder для следующего расширения контракта.
Обновление исходников от 7 сентября добавило come_closer, idle, landing,
turn_left, turn_right, action, climbing_action_start, climbing_action_stop и
climbing_action,
обновило dancing и добавило runtime-пиктограммы питомца home/cross. Собранный PCK содержит
все эти ресурсы; одноимённые дубликаты climbing-action листов сохранены только в source/.
Runtime-supported и preview-only ресурсы
В runtime через DLC v2 поддерживаются:
- базовые стили Godot Control и семантические variations из
ui_theme.tres; - один неподвижный фон, встроенный в каждую экранную сцену;
- один инстанс decoration-сцены с тремя покадровыми
AnimatedSprite2Dи theme-owned GDScript/Tween-контроллером двусторонних пролётов в каждом экране; - переиспользуемый компонент питомца
components/interactive_pet.tscn: приложение получает путь изInteractivePetScenemanifest, semantic mapping и runtime-профиль; Home предоставляет theme-owned граф поверхностей/подъёмов, а host исполняет перемещение и touch/ЛКМ drag; - девять полноценных визуальных сцен, включая ServiceAccess и Settings.
В блоке запаса Home слева остаётся состояние МНОГО/ДОСТАТОЧНО/МАЛО, по центру находится
theme-owned полоска, а справа Label home.scroll.content.stock_status.approximate_count
показывает приблизительный остаток: например нет жетонов, <100, ~100 или >100.
Manifest сохраняет UiThemePath как описание package Theme, но его legacy-пути общего фона
и decoration пусты: production-сцены уже содержат эти слои, поэтому preview и Exchanger не должны
монтировать их повторно.
Manifest ExchangerThemeDlc версии 2 использует ScreenScenes и временно сохраняет обратно
совместимый словарь VisualSlots.
Анимации купюры, монеты, карты и результатов, НЛО главного экрана и рамка промо-блока входят в
active_theme.pck и отображаются только в своих контейнерах. Интерактивные элементы и рабочий
текст остаются в Exchanger.
Семантическая интеграция с Exchanger
Все theme_type_variation, размеры и отступы назначены внутри production-сцен, включая
фиксированные строки SETTINGS. Host не стилизует ThemeView. Поддерживаемый набор:
ScreenTitle:CashPaymentScreen/.../TopBar/Title,CardAmountScreen/.../Content/Title,CardCustomAmountScreen/.../TopBar/Title,CardTerminalScreen/.../Content/Title;BackButton: одноимённые TopBar-кнопки CashPayment, CardAmount и CardCustomAmount;WhitePanel: HomePricePanel,PaymentPanelиTokenStockStatus; CashSummary,BanknotePanel,CoinPanel; CardAmountAmountPanel; CardCustomAmountPanel; CardTerminalInstructionPanel,PaymentPanel; SuccessResultPanel; ErrorErrorPanel;PanelTitle: HomePricePanel/.../Caption,PaymentPanel/.../Title, TokenStockStatusTitle; CashSummary/.../Caption; CardCustomAmountPanel/.../Caption; CardTerminalPaymentPanel/.../Caption; Success/Error заголовки внутри result-панелей;PanelText: значения и описания внутри перечисленных WhitePanel, включая Balance/Tokens/Bonus, Amount, Instruction, Message и stock State;PrimaryButton: CashDispenseButton, CardCustomConfirmButton, Success/ErrorHomeButton;CompactButton: HomeCashButton/CardButton, CardAmountOtherAmountButtonи динамически создаваемые preset-кнопки, keypad CardCustom;CancelButton: CardCustomClearButton, CardTerminal и ServiceAccessCancelButton, а также кнопка отмены theme-owned сервисного диалога SETTINGS;SupportText: HomeFooter/.../Supportи новый общий footer остальных экранов.ScreenDescription: пояснения SERVICE и SETTINGS;SectionTabButton: пять переключателей разделов SETTINGS владельца;SecondaryButtonиDangerButton: вторичные и удаляющие действия;FieldLabel,StatusText,WarningText,ErrorText: формы и состояния служебных экранов.AdvertisementPanel: промо-блок Home;FooterPanel: общий preview-footer;StatusPanel: HomeStockPanelи компактная панель подключения.
Кроме variations тема задаёт базовые стили LineEdit, SpinBox, OptionButton,
CheckButton, HSlider, VScrollBar и HScrollBar; все такие Control уже находятся
в тематических сценах.
Runtime-композиция синхронизирована с preview: host использует ту же сетку 720×1280, общий footer, BackButton и объединённые панели Cash и Card. Кнопки preset/keypad и все фиксированные слоты оформлены самой темой. SETTINGS намеренно сохраняет только пять вкладок владельца; технические панели не возвращаются ради старого preview.
Footer с логотипом Robotic Retailers и двухстрочным номером техподдержки занимает нижние
152 px и показывается на восьми production-экранах. Home содержит собственную идентичную
композицию с обязательными binding ID, остальные семь экранов подключают
package/components/footer.tscn. На SETTINGS footer намеренно отсутствует.
Проверки
- 11 сентября 2026 года по итогам проверки в Exchanger только
sittingопущен ещё на24локальных пикселя: его visual offset теперь(0,24), то есть+20,28экранного пикселя при scale0.845. Все non-sitting анимации сохраняют исправленную нулевую поправку; verifier проверяет переход(0,24) → (0,0) → (0,24)без движения root. Contract check, validator, pet verifier, preview smoke и build прошли. Живой PET-preview720×1280подтвердил current offset(0,24)и отсутствие clipping.build/space-pixel.pckиbuild/active_theme.pckсовпадают:1700352bytes, SHA-256931A2EAA118722B95E49EA097C8CE41CE9E655F2CF7248CCA050B28A9AF50357. - 11 сентября 2026 года удалено ошибочное локальное смещение
(0,-24)у всех non-sitting анимаций питомца. Теперь переходsitting → non-sitting → sittingсохраняет нулевую поправку, а положение root и точка лап(64,96)не меняются; это опускает прежние поднятые состояния ровно на20,28экранного пикселя при scale0.845. Contract check, validator, pet verifier, preview smoke и build прошли.build/space-pixel.pckиbuild/active_theme.pckсовпадают:1700256bytes, SHA-256C1872763DA443190FA3CA2D281E1599B8C4F772CF290A19F3E4E580CAFE2336F. - 7 сентября 2026 года
CardAmount/RewardPanelповторяетCashPayment/Summaryпо atlas-region, размеру649×125, позиции(36,148)и rect заголовка/базового значения/бонуса. ОбязательныйValueи supplementalBonusсохранили прежние binding-id и канонические пути. Runtime QA720×1280, contract check, validator/preview smoke, build и PCK smoke прошли; PCK —1435772bytes, SHA-256F505882620719F154319A9CD93208F42ECB59FCC615410827A44DADED8F61404. - 4 сентября 2026 года scale питомца увеличен ровно на 30% (
0.65 → 0.845), а сниженная высота оставлена только дляsitting; verifier подтвердил переход поправок(0,0) → (0,-24) → (0,0)без смещения root. Contract check, validator, preview smoke, build, PCK verifier и hostInteractivePetBehaviorSmokeс явным PCK прошли. Preview720×1280подтвердил отсутствие clipping, пересечения с заголовком и сохранение Nearest для sitting/non-sitting; PCK —1435452bytes, SHA-256390C9E3F83B026304F0E75E5A6AAD4458684BBCDFC847FFB542B6CFB1AC278E9. - Godot 4.7.1 импортирует все runtime-файлы без ошибок; pixel-font распознан автоматически.
- В
assets/fonts/vcr_osd_mono_cyr.ttf.importотключены antialiasing, hinting и subpixel positioning, oversampling зафиксирован в1.0. Все девять корней экранов имеютtexture_filter = 1, поэтому Labels, Buttons, LineEdit, SpinBox и прочий текст наследуют Nearest без покомпонентных настроек. - У всех текстовых variations отключены тени и обводка кнопок: при масштабировании preview до 720×1280 символы не смешиваются с полупрозрачной копией. Светлый текст использует чистый белый, а текст на белых и зелёных поверхностях — контрастный тёмно-синий цвет.
- Все девять вкладок production preview и восемь разделов SETTINGS запускаются без ошибок и визуально проверены в окне 720×1280.
- В
CardCustomAmountтемыspace-pixelпроверена референсная панель646×466 px; все цифровые клавиши имеют одинаковый квадратный размер46×46 px, длинные действия выровнены с нижним рядом, а содержимое и footer не перекрываются. - В
ServiceAccessвсе двенадцать PIN-клавиш имеют одинаковый размер112×112 px; кнопкиВОЙТИ,ОТМЕНАи footer остаются видимыми и не перекрываются. - Нижние служебные ряды текстовой клавиатуры используют отдельный
KeyboardActionButtonбез прозрачных боковых полей исходной текстуры: все кнопки имеют высоту76 px, зазоры12 px, стрелки — touch-target88×76 px, аСТЕРЕТЬ,ОЧИСТИТЬиПРОБЕЛполучили увеличенную ширину под полные подписи. - Кнопки скрытия текстовой и цифровой клавиатур остаются обычными
Buttonс прежними binding ID, но вместо надписи используют контрастную стрелку вниз изbutton_down.png. Обе кнопки имеют квадратную область нажатия64×64 px, крупную центрированную пиктограмму и подсказку «Скрыть клавиатуру». - Описание приложения
subtitleостаётся удалённым. Новая отдельная настройка «Короткий текст» управляет фразой в белой речевой плашке возле НЛО: HOME Label ограничен геометрией bubble, переносит до 48 символов, центрирует строки и обрезает выход за границы. Для читаемости при Nearest его кегль увеличен с12до16 px; Label занимает внутреннюю белую область182×73 px, используетline_spacing = -2и переносит текущую фразу на две строки. В SETTINGS добавлены поле, ошибка и предпросмотрshort_text; панели увеличены ровно под новый ряд без пустых мест. CheckButtonиспользует тёмно-синий текст, крупную зелёную touch-строку и исходныеtumbler_on.png/tumbler_off.pngразмером128×64 px; в живом SETTINGS проверены оба состояния без обрезания и растяжения. У всех 12 строк отступ от левого края до текста и от правого края до тумблера одинаковый —24 px.- Все 57
SpinBoxиспользуют исходныеbutton_up.png/button_down.png; их runtime-копии уменьшены ближайшим соседом с64×64до32×32 px, поэтому обе квадратные кнопки целиком помещаются справа от поля. Между полем и кнопками задан единый промежуток10 px, а variationSpinBoxInnerLineEditиспользует шрифт18 px. У 16 полей количества дополнительных жетонов нет текстового суффикса: вся доступная ширина отведена многозначному числу. В живом SETTINGS проверено изменение цены10 → 11 → 10и отображение бонусных строк. - Фон всех текстовых полей
LineEdit(включая focus/read-only), текстовых частейSpinBoxи полей выбораOptionButtonиспользует видимую область290×64 pxисходногоsumma_bar.pngчерез растягиваемыйStyleBoxTexture. В живом SETTINGS проверены обычные текстовые и числовые поля без искажения краёв и обрезания текста. - Обе полосы
HSliderв разделе SETTINGS → «ЗВУК» имеют высоту36 pxвместо прежних14 px(примерно в 2,6 раза выше). Видимый круглый grabber отключён; при значении100%заполнение доходит до правого края. В живом Exchanger проверено, что полосы не обрезаются и не нарушают компоновку соседних элементов. - Decoration
space-pixelиспользует корневой scriptedNode2Dи триAnimatedSprite2D. Звёзды и оба НЛО имеют по два кадра; НЛО воспроизводят собственные покадровые циклы одновременно с независимыми Tween-траекториями. Это существенно ниже всех лимитов host. - Live reload проверен реальным изменением
ScreenTitle/font_sizes/font_size: новое значение появилось в запущенной галерее без перезапуска, а активная вкладка сохранилась. - Фон остаётся статическим; движение ограничено отдельными Sprite2D/AnimatedSprite2D.
build-theme.ps1собираетbuild/active_theme.pck.- Компонент
interactive_pet.tscnпроверен отдельно в builder и из смонтированного PCK: доступны все 22 имени, 414 кадров, корректные loop/one-shot флаги и неизменная позиция корня. Sprite использует Nearest-фильтрацию. Отдельная preview-сцена проверена в живом Godot при720×1280: стартовое состояниеsitting, все 22 кнопки доступны в прокручиваемом списке. Итоговыеspace-pixel.pckиactive_theme.pckсовпадают:1325176bytes, SHA-2567DB9F2108D478E7CDB77E3A85ACA33C8DD2EC27A68FA2CF61A28BF78B4331595. - Exchanger загружает пакет и активирует
space-pixelвместо fallback-темы. - После настройки Nearest фактический Exchanger повторно запущен в
720×1280; контрольный кадрbuild/exchanger-speech-bubble-runtime.pngподтверждает жёсткие пиксельные края глифов и читаемый перенос короткого текста. Собранная, активная и установленная PCK совпадают:721192bytes, SHA-25630A8806709BCA315E1F455FED1F438C5CD377B9ACEC35A249BABDFF12F1888C4. - После этих изменений
Test-PackagedBindingContract.ps1,test-theme example,test-theme space-pixelиbuild-theme space-pixelзавершились успешно. - Pixel-perfect Home QA выполнен прямым рендером production-сцены в
720×1280: крупные белые компоненты совпали с координатами JPG, а средняя абсолютная RGB-разница контрольного кадра уменьшилась с75,81до6,84(разница включает JPEG-компрессию и rasterization текста). - Транзакционные референсы проверены тем же прямым рендером
720×1280: средняя абсолютная RGB-разница CashPayment уменьшена с66,66до13,66, CardTerminal — с59,14до11,58; после повторной строгой сверки средняя RGB-разница внутри двух основных панелей CardCustomAmount уменьшена с13,28до7,64, CardAmount — с15,31до10,88. Вручную подтверждены заголовки, текстурные рамки, квадратные клавиши, CTA, исходные анимации и общий footer на финальных кадрах. Значение выдачи CardAmount совпадает с reference bounding box полностью; «ДРУГАЯ СУММА» и CTA отличаются не более чем на один пиксель по краю текста. - CashPayment использует три раздельных обязательных Label из контракта:
Balanceпоказывает только рубли,Tokens— базовые жетоны,Bonus— дополнительные жетоны двумя строками. Их исходные значения и расположение соответствуютphoto_2026-08-20_14-10-27.jpg, а Exchanger обновляет только текст, не меняя геометрию сцены. - В CardCustomAmount Label
InputValueвнутриsumma_barтеперь имеет собственный обязательный binding и показывает фактически набранную сумму. Верхняя панель «К ВЫДАЧЕ» получает только базовые и бонусные жетоны; host больше не объединяет рубли и жетоны и не оставляет статическое значение1000в поле ввода. - Актуальные
build/space-pixel.pckиbuild/active_theme.pckс единым footer, Nearest-шрифтом и отдельнымInputValuebinding имеют размер721192bytes и SHA-25630A8806709BCA315E1F455FED1F438C5CD377B9ACEC35A249BABDFF12F1888C4. Штатный PCK smoke смонтировал пакет, инстанцировал девять экранов и подтвердил 10 scripted node instances. Та же сборка установлена в стандартный каталог Exchanger и подтверждена совпадением SHA-256. После полного запуска Exchanger в720×1280журнал подтвердил активациюspace-pixelбез theme/resource/fallback-ошибок; актуальный Home-кадр сохранён вbuild/exchanger-speech-bubble-runtime.png. - 1 сентября 2026 года красный
button_cancel.pngподтверждён во всех variationCancelButton/DangerButton. ПролётыUfoLargeиUfoSmallповторно измерены поinterface.mp4: контрольные позиции проверены наt=1/2/3/10,5/12/12,5, лишние старые одиночные НЛО удалены, двойное уменьшение масштаба устранено. Оба набора остаются покадровыми:frame_01.pngиframe_02.pngподключены кAnimatedSprite2Dи воспроизводятся параллельно уже выверенному движению. После contract check, validator и preview smoke актуальныеbuild/space-pixel.pckиbuild/active_theme.pckсовпадают:741032bytes, SHA-256E97F95F544BC257CB309789FD67585F93FFD1569F5662FE78ACCE7E7D0193D8A. Эта же PCK установлена в%APPDATA%/Godot/app_userdata/Exchanger/theme_dlc/active_theme.pck; runtime-журнал Exchanger подтвердил активацию внешней темыspace-pixelбез fallback и theme/resource-ошибок, а контрольный кадр720×1280— корректную отрисовку Home. - 2 сентября 2026 года runtime-проверка нового двустороннего контроллера подтвердила смену
направления
1 → -1,flip_h, новую случайную высоту и продолжающуюся смену кадров. Contract check, validator, preview smoke и PCK smoke прошли; PCK smoke инстанцировал девять экранов и 18 scripted node instances.build/space-pixel.pck,build/active_theme.pckи установленная пользовательская копия совпадают:741708bytes, SHA-2565034C3DB1DA44565ED45F682757C03E44D238ABDB1A0B2947F371A98C80C10BB. Exchanger загрузил package-скрипт на всех девяти экранах; Home runtime подтвердил обратный пролёт, новую высоту и продолжающуюся покадровую анимацию без ошибок журнала. - Два статичных НЛО возле цены дополнены независимым мягким вертикальным покачиванием. Builder
runtime зафиксировал для левого позиции
132 → 133 → 127, для правого81 → 88 → 85при исходныхy=130/83; исходная композиция и Nearest-фильтрация сохранены. Contract check, validator, preview smoke и PCK smoke прошли; PCK smoke подтвердил 9 экранов и 19 scripted node instances. Собранная, активная и установленная PCK совпадают:743376bytes, SHA-2561646AA10C8DD5EA9AE70FA21040507889FC1719FF26E122464E105E9D2012AFE. Живой Exchanger загрузилhome_ufo_bobbing.gdиз package и подтвердил движение обоих НЛО без ошибок журнала. - Для нижнего двухкадрового баннера Cash устранён скачок размера НЛО: исходные цветные области
263×167и257×163 pxнормализуются runtime-трансформацией второго кадра. Принудительная проверкаframe=0/1подтвердила полностью одинаковые экранные bounds обоих кадров; autoplay продолжает переключать изображения с исходной скоростью1 fps. - 7 сентября три клипа ходьбы и их sprite-sheet получили актуальные имена:
walking_right_stop,walking_left_stopиwalking_left_start. Semantic actions приложения остались прежними и теперь сопоставлены новым клипам;walking_start_rightзавершает симметричную пару стартовых состояний. Contract check, validator, pet verifier, preview smoke, build и PCK smoke прошли. Итоговыеbuild/space-pixel.pckиbuild/active_theme.pckсовпадают:1658512bytes, SHA-25676518563591159EC4B8087911D2BB29924BC29C12AAA4FF1544D97ED01648E91. - 14 сентября у кнопки «ВЫБРАТЬ И ДОБАВИТЬ ПРОМО-РОЛИК» в SETTINGS задан явный кегль
17 px. До исправления inherited-кегль создавал минимальную ширину кнопки636 pxи растягивал все видимые панели раздела «ПРОМО» до742 px; после исправления минимум кнопки равен365 px, поэтому панели укладываются в стандартные664 pxмежду боковыми полями экрана720×1280. Contract check, validator/preview smoke и build прошли. Итоговыеbuild/space-pixel.pckиbuild/active_theme.pckсовпадают:1700400bytes, SHA-2568082656B3F8DBAA74D6FC55659FDE99D636BF4A626BCECA99F93BA8C9123ECF7. - Production-ресурсы используют относительные ссылки внутри
package/. Если Godot Editor пересохранил их какres://themes/space-pixel/package/..., перед validator/build нужно вернуть относительные пути, иначе изолированный workspace не найдёт ассеты.
TTF идентифицирует себя как VCR OSD Mono [RUS by Daymarius], но не содержит copyright/license
metadata. Автор оригинального VCR OSD Mono публично разрешил коммерческое использование; для
кириллической модификации первичное разрешение не найдено. Текущий файл допустим для внутренней
темы, но перед публичным распространением требуется письменное подтверждение Daymarius либо замена.