Sample1.png

💡 ВСТУПЛЕНИЕ: ПРОБЛЕМА ГРАФИКИ В РЕТРО-РАЗРАБОТКЕ

В предыдущих статьях мы подробно разобрали, как писать код для ZX Spectrum на ассемблере, Си и Бейсике, как его отлаживать и как считать такты. Но любая уважающая себя программа (особенно игра) требует графики. И тут перед разработчиком встаёт классическая проблема: где рисовать спрайты и шрифты?

Вариантов несколько:
  1. Рисовать на бумаге в клеточку, потом вручную переводить в HEX — работает, но медленно и чревато ошибками. Так делали в 80-е.
  2. Использовать отдельный графический редактор (SevenUP, Multipaint, ZX-Paintbrush) — хороший вариант, но нужно переключаться между программами, экспортировать, конвертировать .
  3. Рисовать прямо в среде разработки, не отвлекаясь от кода — и вот тут на сцену выходит ZX Graphics Editor от испанской команды DuefectuCorp .
ZX Graphics Editor — это расширение для Visual Studio Code, которое добавляет полноценный редактор спрайтов (UDG/GDU) и шрифтов прямо в интерфейс VS Code . Теперь вы можете рисовать графику и тут же экспортировать её в форматы, готовые для использования в ваших проектах на ассемблере или Boriel Basic.


🏗️ ЧТО ТАКОЕ ZX GRAPHICS EDITOR И ЗАЧЕМ ОН НУЖЕН?

ZX Graphics Editor — это специализированное расширение для VS Code, созданное разработчиком Duefectu при участии Hash6iron (рутина экспорта в TAP) и dinodork (опция инвертирования) . Оно позволяет редактировать файлы трёх типов, критически важных для графики на ZX Spectrum.

🎯 ПОДДЕРЖИВАЕМЫЕ ТИПЫ ФАЙЛОВ


ТипРасширениеОписаниеРазмер
UDG (User Defined Graphics).udgПользовательские графические символы168 байт (21 символ × 8 линий)
GDU (Gráficos Definidos por el Usuario).gduИспанский аналог UDG (полностью совместим)168 байт
Шрифт (Font).fntАльтернативный набор символов (96 символов)768 байт (96 × 8)

🎯 КЛЮЧЕВЫЕ ВОЗМОЖНОСТИ (ЧТО ОН ДАЁТ ПРОГРАММИСТУ)

  1. Визуальное редактирование — рисуете мышкой прямо в окне VS Code, как в любом растровом редакторе .
  2. Масштабирование — можно выбрать уровень зума от 1 до 64, чтобы проработать мельчайшие детали .
  3. Операции с графикой — зеркальное отражение (по горизонтали/вертикали), повороты, сдвиги .
  4. Инвертирование — полезно для создания масок или негативов (спасибо dinodork) .
  5. Создание масок — экспериментальная функция для генерации масок спрайтов .
  6. Экспорт в TAP — можно сохранить графику в виде .tap файла, готового для загрузки в эмуляторе (рутина от Hash6iron) .
  7. Экспорт в Boriel Basic — два формата: Boriel ASM (для вставки в ассемблерный код) и Boriel DIM (для объявления массивов данных в Boriel Basic) .
  8. Отображение номеров символов — в окне редактирования видно, какой именно символ (или GDU) вы сейчас правите .

🧬 ИСТОРИЧЕСКИЙ КОНТЕКСТ: ЭВОЛЮЦИЯ ГРАФИЧЕСКИХ ИНСТРУМЕНТОВ


ЭпохаИнструментОсобенностиУдобство
1980-еРисование на бумаге + ручной ввод HEXТетрадка в клетку, перевод в двоичный кодУжасно (часы работы, частые ошибки)
1990-еГрафические редакторы на самом Spectrum (Art Studio, BGE, etc.)Рисование прямо на спектрумеТерпимо (но нужно иметь реальное железо или эмулятор)
2000-еОтдельные ПК-программы (SevenUP, Multipaint, ZX-Paintbrush)Рисование на ПК, экспорт в нужные форматыХорошо (но нужно переключаться между программами)
2020-еZX Graphics Editor в VS CodeРисование прямо в среде разработкиПревосходно (код и графика в одном окне)

Интересно, что в классификации графических редакторов на ZX-Art Burial Graphics Editor (BGE) занимает первое место среди утилит для Spectrum . Но ZX Graphics Editor идёт другим путём — он не эмулирует старый софт, а интегрируется в современный инструментарий.


⚙️ УСТАНОВКА И НАСТРОЙКА: ТРИ ПРОСТЫХ ШАГА

📥 Шаг 1: Установка расширения

  1. Запустите Visual Studio Code.
  2. Нажмите Ctrl+Shift+X (или иконку квадратиков слева), чтобы открыть вкладку Extensions.
  3. В поиске введите "ZX Graphics Editor".
  4. Найдите расширение от автора DuefectuCorp (иконка с пиксельным изображением) и нажмите Install .

📁 Шаг 2: Создание файла графики

Расширение работает с файлами определённых расширений. Создайте новый файл с одним из них:
  • my_sprites.udg — для пользовательских символов (21 символ)
  • my_font.fnt — для шрифта (96 символов)
Можно также использовать расширение .gdu — это полный аналог .udg, просто испанское название .

🎨 Шаг 3: Открытие и начало работы

  1. Откройте созданный файл в VS Code.
  2. Расширение автоматически активируется и покажет интерфейс редактора.
  3. При первом открытии пустого файла вам будет предложено загрузить данные по умолчанию — можно согласиться, чтобы сразу увидеть пример .
  4. Выберите тип данных: GDU/UDG или Font .
  5. Начинайте рисовать!

🖌️ ИНТЕРФЕЙС И РАБОЧИЙ ПРОЦЕСС

🖥️ Как это выглядит в редакторе

При открытии .udg или .fnt файла VS Code разделяется на две части:
  • Слева — ваш код (если вы открыли файл с графикой отдельно, то это просто пустой редактор, но можно открыть рядом и .bas файл).
  • Справа — панель графического редактора с сеткой 8×8 для каждого символа.

✍️ Шаг 1: Рисуем

  • Кликайте левой кнопкой мыши по клеткам, чтобы закрашивать их.
  • Кликайте правой кнопкой, чтобы стирать.
  • Используйте зум (выпадающий список) для более точной прорисовки — доступны значения 1, 2, 4, 8, 16, 24, 32, 48 и 64 .

🔄 Шаг 2: Трансформируем

В панели инструментов есть кнопки для различных операций над текущим символом :
КнопкаДействиеГорячая клавиша (если есть)
↔️Отразить по горизонтали (зеркально)
↕️Отразить по вертикали
🔄Повернуть на 90 градусов
⬅️➡️Сдвинуть влево/вправо
⬆️⬇️Сдвинуть вверх/вниз
🎨Инвертировать (чёрное ↔ белое)
🎭Создать маску (экспериментально)

Эти операции работают только с текущим выделенным символом, не со всем набором сразу.

📝 Шаг 3: Экспортируем

Когда графика готова, нужно экспортировать её в формат, понятный вашему проекту.
  1. Откройте палитру команд (Ctrl+Shift+P).
  2. Введите "ZX Graphics" и вы увидите доступные команды экспорта.
  3. Выберите нужный формат:
Для Boriel Basic (ASM-стиль):
Бейсик ZX:
; Пример экспортированного кода
UDG0:
    DEFB %00011000
    DEFB %00111100
    DEFB %01111110
    DEFB %11011011
    DEFB %11111111
    DEFB %01011010
    DEFB %00000000
    DEFB %00000000

Для Boriel Basic (DIM-стиль):
Бейсик ZX:
DIM UDG(21,7) AS UByte => { _
    {%00011000,%00111100,%01111110,%11011011,%11111111,%01011010,%00000000,%00000000}, _
    {%... следующий символ ...} }

Для TAP-файла — создаётся готовый образ ленты с машинным кодом для загрузки графики в память Spectrum. Эту фичу разработал Hash6iron, и она очень удобна для быстрого тестирования .


🧠 ПРОДВИНУТЫЕ ВОЗМОЖНОСТИ

🔢 Номера символов

В версии 0.0.7 добавили отображение номеров символов прямо в окне редактирования . Это очень помогает, когда вы работаете с большим набором GDU (21 символ) или шрифтом (96 символов) — всегда видно, какой именно символ вы сейчас правите.

🎭 Экспериментальные маски

В версии 0.0.8 появилась кнопка "Create Mask" . Маски нужны для спрайтов с прозрачностью — обычно в ассемблерных движках используется два изображения: сам спрайт и его маска (где биты, соответствующие фону, установлены в 1, а сам спрайт — в 0). Функция экспериментальная, но уже рабочая.

🔄

Сдвиг, а не поворот
Интересная деталь: в версии 0.0.8 добавили кнопку
Интересная деталь: в версии 0.0.8 добавили кнопку "move (not rotate)" . Это позволяет сдвигать изображение целиком, не зацикливая его (в отличие от rotate, который переносит вылезшие края на противоположную сторону). Полезно для точной настройки позиции спрайта в пределах 8×8.


📊 СРАВНЕНИЕ: ZX GRAPHICS EDITOR VS АЛЬТЕРНАТИВЫ


КритерийZX Graphics EditorSevenUPMultipaintZX-Paintbrush
ИнтеграцияВнутри VS Code Отдельная программа Отдельная программа Отдельная программа
ПлатформаWindows/Linux/macOS (через VS Code)FreeBSD, Linux, macOS, WindowsJava (везде)Windows
ФорматыUDG/GDU/FNT + экспорт в TAP/BASSCR, BIN и др.Spectrum, C64, MSX, CPCSCR, MLT, CHR и др.
Для чегоUDG и шрифтыПолноэкранные картинкиРазные платформыРазные форматы Spectrum
ЦенаБесплатно (MIT) БесплатноБесплатноБесплатно
ОбучениеМинимальное (интуитивно)СреднееСреднееСреднее

🎨 ПЛЮСЫ И МИНУСЫ

✅ Плюсы (Почему это удобно)

  • Интеграция с VS Code: не нужно переключаться между окнами — код и графика рядом .
  • Простота: интерфейс минималистичный, всё интуитивно понятно.
  • Специализация: инструмент заточен именно под UDG и шрифты для Spectrum, ничего лишнего.
  • Экспорт под Boriel Basic: два готовых формата для самого популярного компилятора Бейсика .
  • TAP-экспорт: можно сразу загрузить графику в эмулятор и проверить .
  • Активная разработка: версии 0.0.1 → 0.0.8, добавляются новые функции .
  • Открытый исходный код: лицензия MIT позволяет использовать и модифицировать .
  • Поддержка сообщества: есть Twitter, email, GitHub для обратной связи .

❌ Минусы (О чём нужно знать)

  • Ограниченный функционал: только UDG и шрифты, нельзя рисовать полноэкранные картинки (SCR).
  • Мало звёзд на GitHub: всего 5 звёзд на момент написания — инструмент пока малоизвестен.
  • Экспорт только под Boriel: для ассемблера придётся использовать ASM-стиль или конвертировать вручную.
  • Нет предпросмотра на экране: нельзя увидеть, как спрайты будут выглядеть вместе на чёрном фоне.
  • Экспериментальные функции: маски работают "не идеально", как признаёт сам автор .
  • Документация на английском/испанском: для русскоязычных может быть барьер.

🧪 СОВЕТЫ БЫВАЛОГО (КАК ВЫЖАТЬ МАКСИМУМ)

  1. Используйте шаблоны. При создании нового пустого файла разрешите загрузить данные по умолчанию — это даст готовые примеры для изучения .
  2. Для шрифтов не забывайте про 96 символов. В .fnt файле содержится полный набор ASCII (32-127). Убедитесь, что все символы, которые вы используете, отредактированы.
  3. Экспортируйте в TAP для быстрого тестирования. Если вы пишете на ассемблере, можно загрузить TAP в эмуляторе и посмотреть, как выглядят спрайты.
  4. Для Boriel Basic выбирайте правильный стиль:
    • Boriel ASM — если будете вставлять данные в блок .asm внутри .bas файла.
    • Boriel DIM — если хотите объявить массив и обращаться к нему как к данным .
  5. Используйте инверсию для создания масок. Иногда проще нарисовать спрайт, потом инвертировать и немного подправить, чем рисовать маску с нуля.
  6. Комбинируйте с другими редакторами. Если нужна полноэкранная картинка — используйте SevenUP или ZX-Paintbrush . А для спрайтов возвращайтесь в ZX Graphics Editor.

📚 РЕСУРСЫ И ССЫЛКИ


📖 ЗАКЛЮЧЕНИЕ: МАЛЕНЬКИЙ ИНСТРУМЕНТ С БОЛЬШИМ ПОТЕНЦИАЛОМ

ZX Graphics Editor от DuefectuCorp — это прекрасный пример того, как небольшая утилита может закрыть важную нишу в рабочем процессе разработчика.

Он не пытается конкурировать с монстрами вроде SevenUP или Multipaint. Его задача скромнее, но важнее: дать возможность рисовать спрайты и шрифты прямо в среде разработки, не отвлекаясь на переключение между окнами и конвертацию форматов.

Интеграция с VS Code, экспорт под Boriel Basic (в двух вариантах!) и поддержка TAP — это именно те функции, которые нужны современному спектрумисту, пишущему на ассемблере или компилируемом Бейсике.

Да, у редактора есть ограничения. Да, он пока малоизвестен (всего 5 звёзд на GitHub ). Но он активно развивается, у него открытый исходный код, и за ним стоит команда энтузиастов, которые сами разрабатывают игры для Spectrum.

Если вы пишете игру или демо, где нужно много спрайтов — установите это расширение. Оно сэкономит вам часы ручной конвертации и сделает процесс разработки по-настоящему интегрированным.


P.S. Авторам Duefectu, Hash6iron и dinodork — спасибо за этот полезный инструмент. Отдельное спасибо за поддержку Boriel Basic — это делает жизнь пользователей этого замечательного компилятора намного легче.

P.P.S. Если вы говорите по-испански — обратите внимание на испанский вариант названия GDU (Gráficos Definidos por el Usuario). В Испании и Латинской Америке большое сообщество спектрумистов, и такие мелочи помогают локализации.