VS Code: Запуск Unreal по F5

Хотелка


Хочется компилить и отлаживать в Unreal Spectrum проекты для Спектрума в Visual Studio Code тем же хоткеем, который я использую для других языков.

Проблема


Я давно освоил Visual Studio Code и использую ее, например, для проектов на Python. При этом все мои проекты для Спектрума жили в Sublime Text с расширением Z80Asm от Breeze, и я решил смигрировать их в более привычный VS Code.

В VS Code есть понятие Build Task, позволяющее запустить только компиляцию workspace (и, вообще говоря, выполнить любую команду shell) и отдельно debugger'ы, свои для каждого типа workspace. Если для языка установлено отладочное расширение, то по F5 (у меня клавиатурная тема от MSVS) workspace компилится при наличии изменений, и сборка запускается в отладчике. А запускать вместо отладчика команду shell (и Unreal Spectrum) нельзя, нужно отладочное расширение. Итого: для Python использую F5, для Z80 — Shift+Ctrl+B, и постоянно путаю их.

Чуть подробнее

Для разработки на Z80 есть расширение Z80 Macro-Assembler, которое понимает синтаксис Z80 и имеет еще всяческие фишки (подробнее про это писал камрад sq в статье Как быстро настроить среду разработки на ZX: Visual Studio Code + Z80MacroAsm boilerplate). Однако расширения, позволяющего запускать Unreal Spectrum в качестве отладчика нет.
Переопределить шоткат F5 для проекта невозможно, глобально переопределить его на Build Task — тоже не выход, потому что оно тогда будет так работать и для всех остальных языков.
Надо сделать как-то так, чтобы для workspace Z80 F5 вызывал Build Task, в котором можно выполнить команду shell и запустить что хочется, а для других проектов поведение оставалось прежним: компиляция (если есть) и запуск отладчика из расширение.

На просторах Интернета накопал способ переопределить шоткат для проекта, которым на всякий случай делюсь. Суть способа такая:
  • пользовательские шоткаты переопределяют системные, при этом, если условие when для пользовательского шотката не выполнено, то работает штатный шоткат из клавиатурной схемы;
  • условие вычисляемое, в нем можно использовать настройки, в том числе, и уровня проекта;
  • суть решения: добавляем в проект некоторую кастомную настройку, наличие которой является условием пользовательского шотката на запуск Build Task, а при ее отсутствии работает штатный шоткат VS Code для запуска дебаггера.


Инструкция


  1. Нажать Shift+Crtl+B (или ваш шоткат для билда) чтобы появилось предложение создать tasks.json. Если дефолтные таски в конфигах самой VS Code уже есть, то, по Вашему вкусу, можно либо добавлять новые таски туда, либо создать в проекте файл .vscode/tasks.json.
  2. Вставить в tasks.json пример сборочных тасков из справки extension'а Z80 Macro-Assembler и настроить его на свой вкус. Для настройки шотката интересен только параметр label. Назовем его, например, Compile and run. В параметр command пишется shell-команда, которую хотим прикрутить к шоткату
  3. Нажать Shift+Ctrl+P (или ваш шоткат для поиска команд) и выполнить Preferences: Open workspace settings (JSON). Добавить в него параметр
  4. "runTaskInsteadOfDebug": true
  5. Нажать Shift+Ctrl+P (или ваш шоткат для поиска команд) и выполнить Preferences: Open Keyboard Shortcuts (JSON). Добавить в него:
    
            {
                "key": "f5",
                "command": "workbench.action.tasks.runTask",
                "when": "config.runTaskInsteadOfDebug && taskCommandsRegistered",
                "args": "Compile and run"
            }
        

  6. Собственно, все. Теперь в проектах, в которых есть .vscode/settings.json с параметром «runTaskInsteadOfDebug»: true, по кнопке F5 будет вызываться таск с именем Compile and run, а в проектах без этой опции — отладчик по умолчанию для workspace.Например, я себе в проектах Saboteur сделал по F5 сборку и запуск отладочной версии, по Ctrl+F5 — релизной, а по Shift+F5 — только компиляцию без запуска.

Ringo Render 64x48

UPD(20.12.2022): Исходники оптимизированного рендера доступны на GitHub

Всем привет!

Сегодня я немного расскажу про то как устроен рендер в нашей совсем недавно вышедшей игре Ringo.
Если вдруг пропустили то посмотреть/поиграть можно здесь

К сожалению исходники настолько запутаны, уплотнены и пестрят ошибочными комментариями из прошлых итераций движка что вряд ли кому-то помогут разобраться. Да и сам я на данный момент уже плохо помню как там и что работает. Но так как уже несколько человек попросили меня рассказать про рендер то я попробую осветить хотя бы базовые моменты которые помогли достигнуть результата.


Читать дальше →

Ещё раз про DOWN_HL.

DOWN_HL является, скорее всего, самой ходовой стандартной процедурой для графики на спектруме. Не буду объяснять что она делает, потому что если вы вдруг не знаете, то разговор у нас в любом случае не заладится. Поэтому я предпочитаю считать, что она вам хорошо знакома. Выглядит она чаще всего
вот так

Как быстро настроить среду разработки на ZX: Visual Studio Code + Z80MacroAsm boilerplate

В этой статье я расскажу, как начать пользоваться Visual Studio Code для разработки под ZX Spectrum, почему (если вы ещё не знаете) деббагер в Unreal Speccy такой крутой; и, возможно, в конце, в качестве бонуса: зачем вообще это нужно делать, даже если вас устраивает ваш Sublime Text/UltraEdit/Notepad++/Far/Vim/Microsoft Word.



Читать дальше →

Making of Hara Mamba,Scene!

hmslogo
Привет народ!

Недавно мы выпустили нашу новую демку под названием Hara Mamba, Scene! которая заняла аж 3-е место на CAFeDemoparty 2019. И я решил немного рассказать про то как там всё сделано и как оно вообще делалось. Возможно кому-то будет интересно! Погнали!

CODING PART DISCLAMER:

Я абсолютно не претендую на крутость кода и почти уверен что можно сделать лучше и красивее. Зачастую я использую тактику кучи дупов вместо цикла, брутфорса, быстрокода и суперсекретный метод под названием «пофикси Артёмка». Поэтому не трачу времени на оптимизации если ясно что всё и так работает и хорошо пакуется!


Читать дальше

Борьба с клешингом в С64

Сразу за релизом С= распишу, как реализован режим мультиколора для С64.

Смотреть/скачать демо

Это стандартный режим видеоконтроллера комодора, и один из любимых на демосцене.

Итак, задача — сконвертировать оригинальный формат экрана С64 в режиме мультиколор для вывода в видеопамять zx enhanced (ts config).
Напомню, что результатом должна быть линейная адресация с тетрадой бит на пиксел, указывающих на цвет точки.
Сразу скажу, что разбирал я стандартный формат, для которого нашлось приличное количество качественной графики в оригинальном формате.

Читать дальше →

Sonic - from SMS to TS Config

У меня никогда не было приставок.


После выпуска РасМаn я начал искать – что ещё есть из аркад, которые были бы очень популярны, и подходили под мои требования для переноса – z80, интересная игра, хотя-бы минимальное техническое описание для разбора кода. Заодно поиск шёл не только по аркадным кабинетам.
Метался я много – смотрел в сторону РС8000, оценивал код игр под 8080, да много чего перебрал.
Оказалось, что «всё не так просто» ;) По аркадам – дичайший зоопарк по оборудованию.
Да, часто линейка игр использует свой стандартный набор оборудования. Но при этом часто это однотипные игры.
В аркадах часто используются по несколько процессоров, и довольно часто — разных типов. Например – 68000 и z80, либо же z80 и z80, один 6502 и т.д. и т.п. Точно так-же – народ не лимитирует себя и в звуке. Использовать несколько АУ, комбинировать АУ и ФМ чипы – это нормально. Использовать второй процессор сугубо для генерации звука – это тоже нормально :) Некоторые аркады используют больше двух процессоров.
Довольно интересно и не привычно – многопроцессорные 8бит системы? Неожиданно!

Читать дальше →

Мультиколор будет побеждён

Первая половина статьи была опубликована в последнем номере замечательного журнала ЗаРулём, а вторая написана по следам свежего релиза нашей новой игры GLUF. Но т.к. они дополняют друг друга я решил их объединить в одну. В ней нет ничего нового для мастеров кода и гуру из 90-х годов, это скорее поток мыслей на тему мультиколора, скрола и попытки их объединения который может быть будет кому-то интересен :)

После того как вышла наша новая игрушка Old Tower мне почти сразу же посыпались просьбы рассказать, как же удалось добиться такой плавной и яркой картинки на нашем старичке Speccy. Ну что же, берите чай и печенки и вперёд!



Читать дальше →

Технический разбор Illusion от X-Trade

Давно хотел попробовать написать новый тип заметки, специально для кодеров. Я хочу попробовать поговорить о внутренних циклах дем, о том, на чём держаться эффекты и об идеях, которые позволяют эти эффекты реализовать. Я не буду лезть в подробности реализации и не дам вам дизассемблер для сборки чего-то выдранного. Только идеи. Только самое интересное.



Ну и поскольку мне нужно с чего-то начать, я хочу начать с Illusion от X-Trade. Мне это демо всегда было симпатично.
Читать дальше →

"Unhinged" trackmo engine

Ну, пока в соседнем топике разбирается многопоточность, посмотрим на такую гораздо более простую вещь, как систему управления событиями в трекмо.

В этом топике я опубликую двиг, разработанный для «Unhinged», и использованный позже как обслуживающий в «Марио».

Зачем это? Дело в том, что пресловутое flow требует от дизайн-мейкера постоянно вводить как новые эффекты, так и их развитие в процессе своего течения.
Соответственно, код демо должен быть настраиваемым — предоставьте себе контролы, которые позволят вам менять внешний вид того же эффекта, который уже на экране. И применяйте их в течении демо именно в тот момент, когда они будут иметь максимальное воздействие на зрителя.

ДАО ГОВОРИТ :)
Главная цель движка трекмо — это Контроль выполнения демо.
Контроль должен быть реализован изменением состояния кода демо в процессе её выполнения (показа), путём изменения значений памяти в её подпрограммах в нужный нам момент, либо изменением вызываемой процедуры (что может быть переходом в следующую часть).

Читать дальше →