Как я разрабатывал редактор спрайтов для Ретро консолей

Шло время после моей последней задумки игры, которая провалилась. С тех пор я немного заработал на фрилансе и смог купить несколько инструментов и заняться электроникой. Электроникой я хотел заниматься давно, да вот только не было денег. Вообще у меня с детства было две мечты, это разработка электроники и разработка софта, ну или игр. Помню, что просто хотелось делать программы. Но это были года ближе к 2000-му и тогда не у каждого был компьютер. Мечты мои никуда не приводили. Образование 9 классов, низкооплачиваемая работа и казалось бы, что ситуация тупиковая и из-за работы нет даже времени было хоть как-то развиваться.

RetroSpriteEditor
RetroSpriteEditor

Но в один прекрасный день меня постигла удача. Это началось как раз, когда я дома стал больше времени проводить и перестал общаться со сверстниками. У меня появилась тяжелое психическое заболевание и через несколько лет мне дали инвалидность. Несмотря на кажущуюся тяжелую ситуацию, это дало мне шанс обучаться дома и тратить деньги на что-то. Например, я начал покупать книги и разумеется читать. За период болезни и лечения я освоил язык программирования C. Потом быстрый год жизни, который я не помню, так как был на сильных лекарствах. В итоге мне стало лучше и я стал развиваться дальше. Крайне не советую такой подход обучения, если вы не эмоционально зрелы. Вся проблема в том, что если взять для сравнения моих сверстников, то они учились своей профессии в вузах. В вузе ты не только получаешь знания, но и также развиваешь свой эмоциональный интеллект, который очень важен для взрослой жизни. Без него взрослый человек может расстраиваться как ребёнок.

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

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

Итак, пока я не освоил электронику, мне сложно делать какие-то схемы и не хватает мотивации. Я знаю, что только когда есть интерес к какому-то вопросу, то это лучше всего запоминается. Я пока отложил электронику, и приступил к разработке для NES (У нас была Денди - довольно-таки популярная в 90-е консоль). Читая туториалы и документацию у меня на тот момент не получилось сделать рабочий вариант игры со спрайтами. В туториале предлагалась программа NES LightBox, которой почему-то нигде не найти. Хотя я нашел вариант на github на Electron, но она не запускалась и требовала отсутствующие библиотеки, которые по идее должны были загружаться, но что-то пошло не так.

Я очень хотел пописать на ассемблере и это был удивительный шанс взять за первую программу - игру для NES. Изучив несколько команд я понял как работать с NES на простетском уровне, но ещё раз повторюсь, что приложения для рисования спрайтов не было в свободном доступе. Так как я сишник и пользуюсь linux, то с удовольствием приступил к разработке редактора графики для NES. Писал я на gtk4.

Я знал, что столкнусь с проблемой, с которой сталкивался, когда пробовал на чистом javascript писать UML диаграммы для c++. Тогда я не осилил разработку. Предполагая, что для каждой задачи просто нужно больше времени, я с радостью взялся за дело.

Первая проблема была, когда я рисовал холст сплошным большим квадратом 128x128. А потом линиями делил на квадраты по 8x8. Когда дело дошло масштабирования, я долго не мог правильно придумать логику. Помогало отойти от компьютера, полежать и подумать получше. После дня мытарств я решил перейти на opengl, так как в DrawingArea, который рисовал с помощью cairo, рисовались линии по два пикселя в ширину, хотя ширину устанавливал в единицу. Когда перешел на opengl и потратив пол дня на то, чтобы переписать некоторые части, я обнаружил, что недопустимо использовать математические функции. Поискав на github репозитории с математикой и попробовал скопировать эту функции, я дико разозлился от этой скучной работе. Я бросил это занятие до следующего дня. Хотя, можно сказать, что я бросил это занятие почти перед сном.

На следующий день я решил вернуться к cairo. Путем проб и ошибок мне не удавалось создать нормальную версию. Тогда приняв за практику отвлечься от монитора и полежать, я придумал! В этот раз я не делил квадраты линиями. Я просто нарисовал один большой белый квадрат, а потом внутри него малые квадраты, каждый по 8x8 пикселей. Мне удалось также сделать нормальное масштабирование и рисование карандашом.

Я частично понял как хранятся тайлы для NES, и думаю, что скоро сделаю рабочий прототип, который можно будет использовать для рисования для ретро игр.

Я хочу выложить это творение на flathub, потому что хочется, чтобы пользователь мог просто взять и установить из магазина приложений без всяких проблем.

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

Все глюки, которые я заметил, я устранил. Ещё проблема есть в синтаксисе кода. Иногда нет желания долго думать над названием переменной и поэтому там беда с названиями. Это я буду рефакторить и доводить до идеала. Всем кому интересна программа, я оставлю ссылку на github, в этом репозитории будет только сама программа. Для flathub я выложу отдельный репозиторий с зеркалированием кода.

Ещё извиняюсь за то, что я так мало описал саму разработку. Хотелось написать что-то интересное и возможно кого-то вдохновить. Сами же сложности в разработке бывают и это хорошо. Самое классное, это что мне не всё легко дается, а значит я развиваюсь. Да, может когда-нибудь я достигну уровня, когда мне будет легко зарабатывать деньги, но пока я просто радуюсь даже таким моментам, что для меня судьба подготовила. Потому что развиться, читая книги дома и не тратить время на гулянки очень помогли мне. Так можно по идее обучиться чему угодно, но только наверное программисту могут хорошо платить, даже если он не учился в вузе. Так что, если у кого-то не получилось в жизни устроиться и он думает чем заниматься, то однозначно программированием. В наше время можно работать из дома и получать до 200 000. Ну и разумеется сюда нужно идти не из-за зарплат, а из-за желания создавать интересные продукты.

На этой ноте я заканчиваю свой рассказ. Всем пока! Когда редактор выйдет в релиз, я обязательно напишу об этом.

764764 показа
5555 открытий
Начать дискуссию