В этой статье расскажу, как я решил дружить с искусственным интеллектом, что удалось сделать с его помощью, как он себя ведет, чего можно ожидать, а чего не стоит. Всё ниже изложенное — только моё личное мнение, основанное на своём опыте. В статье я расскажу только про отечественные интеллекты, ГигаЧат и Алису, так как они бесплатны. Остальными, за деньги (ещё и доллары), я не собираюсь пока пользоваться.
Я, конечно же, не эксперт по интеллектам искусственным, не могу сравнивать их работу, да и вообще как-то эту тему обходил стороной, ну есть и ладно. Болтать с Алисой мне нет необходимости, спросить что-нибудь у ГигаЧата, так ничего серьезного. Картинки я не рисую, стихи не пишу. Было раз, ГигаЧат помог мне шуточное стихотворение написать, не более. Но тут один мой онлайн-знакомый Сергей MadCat_SE в своём телеграм-канале решил взяться за ремастер старой игры MechWarrior 1989 года выпуска для системы DOS. Сергей ни разу не программист и всё доверил ChatGPT, у него есть к нему доступ, он платит баксы за абонемент, и GPT ему неплохо в этом помогает! Он разбирает код, пишет скрипты, и у Сергея получается, по его постам, довольно неплохо! У меня же нет никаких забугорных ИИ-шек, есть только отечественные, и я решил пощупать, как они будут справляться с подобной задачей. А задачу я им решил дать похожую, это отремастерить игру Hired Guns (ну а что ещё!) и посмотреть, справятся ли они.
ГигаЧат
Начать я решил с ГигаЧата, он уже был у меня в виде бота в «МАКСе», иногда что-нибудь спрашивал его, и, думая, что бот — это мини-версия основного чата, решил пользоваться основной версией. На смартфоне это отдельное приложение, на компьютере — веб-версия. Для обоих нужен Сбер ID, которого у меня нет. Я когда-то являлся клиентом Сбербанка, но это было давно, но ID может получить не только клиент, а любой человек с российским номером телефона. Первоначально я загрузил приложение для смартфона, прошёл регистрацию, мне выдали Сбер ID (мой номер телефона), и я спокойно вошел в чат. Пообщавшись с Гигой и спросив, сможет ли он что-нибудь поковырять в Hired’e, он с уверенностью сказал: «Ну конечно, присылай мне файлы, мы их поглядим и определим, что делать дальше». Ок, прихожу домой, сажусь за комп, открываю сайт с ГигаЧатом, делаю вход, приходит СМС с паролем для входа, и опа-на! Пароль не подошел. Странно, неправильно что ли ввожу? Никогда проблем не было, чтобы ввести 6 цифр, ещё раз запрашиваю код, ввожу — неправильно! Ещё раз, снова неправильно, и получаю блок на 1 час. Ладно, через час снова пробую, и снова ничего! Спрашиваю Гигу на телефоне, что за хрень, он начал лепить что-то несусветное, типа «Ты неправильно входишь, не надо по Сбер ID входить, входи-ка просто по логину и паролю», но те пункты, что он указывал, отсутствуют на сайте. Я тогда попробовал перезайти на телефоне, вышел и всё, больше не смог войти. После часа ожидания и последующих попыток входа я был заблокирован снова, но уже на 24 часа! Я выждал сутки и снова долбился в свой чат, и снова был заблокирован на сутки. Начал искать техподдержку гигачата, как ни странно, они ответили (электронно) и сказали: «Это тебе надо в сам Сбер обращаться, что-то у тебя с регистрацией не то». Пришлось звонить на 900, предвкушая получасовое ожидание оператора, но буквально через один гудок мне ответили, женский голос называет меня по имени-отчеству (во, думаю, сервис!), я начинаю изливать свою проблему, но она меня останавливает на словах о вводе кода из СМС: «Стой, стой, не надо никакие коды из СМС никуда вводить, это всё мошенники», и начинает читать мне инструкцию. Я как-то замешкался и сначала даже не подумал, что это бот! А так натурально разговаривает. Повесил трубку, думаю, сейчас ещё раз перезвоню, чтоб не эта дура взяла трубку, но это снова она, и разговор пошел по новой, один в один. Тогда я сообразил и сказал: «Дайте мне оператора». Она немного обиделась, типа «Я смогу решить ваш вопрос», я ещё раз произнес свою просьбу, и она перевела меня на оператора. Ждать долго не пришлось, минут не более пяти, отвечает молодой человек, сразу видно, норм чел, разговаривает по-человечески. Я ему всё объяснил, он: «Ок, сейчас посмотрим» (пришлось ещё кодовое слово вспоминать! Как ни странно, вспомнил), и говорит: «Я вижу ваши попытки входа, но все они отклонены, так как пароль введен неверно». Но я-то верно всё вводил! Может, какой блок на мне стоит, «Нет, блокировок никаких нет. Я, говорит, не вижу пароль, который вам высылается, а то могли бы сравнить, звоните, говорит, когда кончится блокировка, порешаем онлайн, что происходит». Я плюнул на это, взял у жены телефон и вошел от её имени через приложение Сбербанка. Уфф.
ILBM2PNG
После двух дней мучений со входом в ГигаЧат, наконец-то можно задавать ему задачи. Я снова пообщался с ним, он снова меня обнадежил, что всё возможно, и я начал кидать ему некоторые файлы игры. Сразу надо сказать, что файлы амижные, различные, исполняемые и другие, включая ассемблерные, всё это есть в среде разработки Hired Guns, которая есть в свободном доступе. Там практически все наработки по игре, но в основном этот архив — это подготовка к выпуску игры для Amiga CD, которая так и не вышла.
Надо сказать ещё вот что, как работает ГигаЧат. Он умеет принимать в чат до трёх файлов изображений за раз, а также до двух текстовых файлов. Бинарные файлы он не принимает, и когда я пытался дать ему бинарник, то чат пишет, что тип файла не поддерживается, даже если переименовать его в *.txt. Но Гига сам подсказал обходной путь, даже два пути. Можно либо взять хекс значения файла через какой-нибудь хекс-редактор (я пользуюсь WinHEX) и прямо сообщением ему отправить, либо эти же хекс-значения (если их надо отправить много, так как сообщение длиной несколько килобайт — это нагрузка на чат) записать в обычный текстовый файл и прикрепить к сообщению. Он неплохо изучит файл и даст свой ответ.

Итак, покидав ему всяких файлов, он уцепился за файлы *.ilbm — это файлы изображений, этакий амижный bmp. Я даже его не просил, он сам предложил: «Я могу написать декодер этих файлов на питоне». Ну напиши! И он начал усердно выдумывать код. Я, как ничего в этом не понимающий, вижу, старается, пишет, с комментариями даже, вроде всё по уму. Чтобы работать с скриптом питона, пришлось ещё настраивать сам питон в системе, Гига тоже тут во всём помог, что куда, как и зачем, мы всё настроили, скрипт стал запускаться, но файл png на выходе получался всё время неправильный, Гига медленно и неуверенно шел к цели, вроде даже начало что-то получаться, изображение стало нужного размера, даже какие-то цвета правильно стали показываться, но изображения как не было, так и нет. В принципе, эти ilbm файлы я неплохо до этого уже обрабатывал, благо IrfanView их отлично открывает, но раз ИИ взялся, пусть доделывает.
Что ещё примечательно ГигаЧата (да и Алисы тоже), когда у него не получается что-то, и он так уверен в своей правоте, то начинает обвинять пользователя, что, мол, ты не тот файл смотришь, ты не туда сохраняешь, смотри, вот этот файл должен быть здесь, а ты смотрел совершенно другой и т. д. Детский лепет какой-то. Когда мне надоело его возня (он по итогу так ничего рабочего и не сделал!), я полез в интернет, ведь за столько лет существования формата наверняка уже есть готовые декодеры, и да, они есть! Первое, что я нашел на гитхабе, был питон-скрипт от niklasekstrom, его то и дал ГигаЧату. Он сразу оценил: «Ого, хороший скрипт, ты молодец» (ну да, молодец, что нашел). Но скрипт работал как-то странновато, обрабатывал только по одному файлу, и вот тут ГигаЧат под моим чутким руководством допилил этот код до вполне себе рабочей программки, которая сама находит файлы в своей директории, декодирует и складывает отдельно.

В общем, неплохой инструмент получился, правда, после компиляции exe-файл получился около 11 мегабайт! Но большой файл из-за того, что внутри там, считай, весь питон ещё сидит, чтобы работало.
RNC (Rob Northen Compression)
Следующий инструмент, который я пытался сделать, это распаковщик файлов, сжатых методом RNC. Формат довольно экзотический, но все файлы в Hired Guns сжаты именно этим способом. Где-то в архивах были найдены некоторые исходники, и ГигаЧат опять сказал: «О, да, я знаю такой формат, давай напишем распаковщик», и опять на питоне (я почему-то подумал, что он только на питоне умеет). Ну, раз сказал «смогу», пиши! И опять начались мучения, и снова ничего не выходит у Чата, как ни пытался, нифига он так и не написал. Я снова полез в инет и нашел на гитхабе rnc_propack, это интересная программка для DOS и Amiga, плюс внутри есть исходные коды на ассемблере. Я испытал прогу в DOSBox — работает. Дай, думаю, дам Гиге ассемблер, он схавал, «ага, говорит, это то, что нужно, на основе этого кода я напишу тебе скрипт». Но опять начались торможения и на выходе результата ноль. Пыхтит, пыхтит, снова начинает меня обвинять, что я слепой и смотрю не туда, а он, видите ли, всё сделал на отлично. Я снова плюнул на него, полез в инет и нашел ещё несколько проектов, но они все были разрознены, либо упаковщик, либо распаковщик, и написаны все были то на Си, то на Си++, но потом наткнулся на простой и неприметный гит от lab313ru, который имел два в одном, и распаковщик, и упаковщик, снова сунул его ГигаЧату, он сказал: «О, это Си, я умею его тоже!». Но чтобы работать с таким кодом, пришлось установить Visual Studio. Гига помог мне с установкой и настройкой студии, и я успешно скомпилировал этот код. Но мне захотелось что-нибудь своё внести в этот код! Во-первых, я захотел разделить код на две части, отдельно распаковка, отдельно запаковка, чтобы не мучиться с флагами «u» и «p», а просто отправлять в аргумент имя файла. Гига взялся, но опять всё сломал! Он почему-то каждый раз, когда берётся за дело, начинает отсебятину какую-то в код вносить. Для примера в рабочий код питон-скрипта ilbm2png я попросил его просто написать комментарии, что, зачем и почему, так он написал, но зачем-то ещё и код поправил, говорит: «Я увидел там ошибку и решил исправить». Короче, веры ему нет, так и здесь не смог разделить логику на два проекта. Я так от него устал… И вот здесь на сцену выходит Алиса!
Alice AI
Я даже не думал, что Алиса вообще умеет кодить, всё как-то думалось, что она болтать только может, но, как оказалось, она не хуже ГигаЧата шпарит код. Что питон, что Си, ей пофиг. И я подкинул ей проблему по разделению проекта на две части. Она сначала тоже пыхтела, как ГигаЧат, у неё не получалось, но потом я дал ей чёткое задание: «Не надо делить код напополам, он уже отлично работает изначально, надо просто указать один из аргументов по умолчанию». Я сделал две копии одного проекта, а Алиса переписала код для двух случаев, первый — только упаковка, второй — только распаковка. И всё, получилось отлично, никаких флагов, а то их вводить в «Тотал Коммандере» очень неудобно, а в командной строке работать тоже не кайф, вручную всё вбивать.

Так получились ещё два инструмента для работы с файлами Hired Guns.
ILBM2PNG v2
Глядя на работу ИИшек в Visual Studio, я решил подкинуть им идею портирования питон-скрипта уже работающей программы ilbm2png на Си++. Начал с ГигаЧата, он приступил к работе в новом чате. Кстати, пару слов про чаты. Когда долго общаешься в одном чате, когда есть куча сообщений, отправленных строк кода, присланных обратно, всё это начинает жутко тормозить! Поэтому приходится начинать новый чат. ГигаЧату я напоминаю, о чем мы общались в прошлом чате, скидываю ему при необходимости код, и мы начинаем общение заново. Он не вспоминает о прошлых чатах, работает только в текущем. А вот Алиса, она любопытна и злопамятна! Я когда впервые начал с ней чат, она что только мне не припомнила, все мои поисковые запросы и всё время пыталась это связать вместе. Начиная новый чат, она продолжает помнить разговор из других чатов, но только в общих чертах. Даже в разговоре в пределах одного чата она напрочь может забыть код, присланный ей полчаса назад, и начинает выдумывать заново, ей постоянно приходится напоминать, отправляя повторно код. ГигаЧат за таким не замечен, он всё помнит, свободно может откатиться на несколько сообщений назад, найти там что-то и поправить. Чат с Алисой тоже начинает тормозить до невозможности при большом количестве сообщений, причем тормоза именно в забитом чате, и это не влияет на устройство. То есть даже с телефона тормоза такие же, как на компьютере. Однократно помогает перезагрузка страницы либо выход из чата и заход обратно, но буквально на одно, даже короткое, сообщение. Тормоза проявляются в невозможности печатать сообщение. Печатаешь, но символы вылазят очень долго, но, конечно, допечатываются, с чем связано, не знаю. Я понимаю, что когда ИИ даёт долгий ответ, это нормально, но при чем тут печать букв пользователем в окно сообщений. Помогает новый чат, но когда долго общаешься, опять он начинает тормозить.
Ладно, это было небольшое отступление, продолжаю повествование по работе ИИ на портировании питон-скрипта. Начал, как я уже сказал, ГигаЧат, он браво заявил: «О, это пара секунд, сейчас я тебе дам код, всё заработает с первого раза!». Но с первого раза не получилось, со второго тоже, и с третьего. Что с ним случилось — непонятно, он вообще тупил по-страшному (перегрелся, может), даже не смог сделать создание выходной папки, на мои слова начал опять меня обвинять, что я, мол, не туда смотрю, «Вот она, папка, ты не туда смотришь», по оконцовке его так заглючило, что он даже сообщения стал отправлять криво. Я дал ему время на отдых и отправился к Алисе. Алиса задачу поняла, начала работу, у неё тоже не получилось с первого раза, но она хотя бы сразу сделала создание папки и вывод файла, хоть и неправильного. И вот тут я начал марафон ИИшек! Кто быстрее справится, то с одним, то с другим общаюсь, они мне скидывают код, я его проверяю. Довольно утомительное занятие, под конец я уже не вникал, что они там творят, тупо говорил: «Дай полный код», а то начинают объяснять что то очень долго. Так день прошел в пустую, на следующий день я взял нерабочий код Алисы (ну, папка есть, файл есть), дал его ГигаЧату, он вроде заработал, принял, сказал: «Да тут куча ошибок!» (что интересно, Алиса так же говорила про его код), подкрутил, и началась новая гонка, Гига стал обгонять Алису, у него начал появляться «мусор» в файле, у Алисы нифига, только разные цвета. С этой гонкой я уже чуть не наизусть выучил заголовок ilbm файла, сделал себе отдельное описание, за что отвечает каждый байт, спрашивал обоих: «Вот мой заголовок, расшифруй», и они интерпретировали его по-разному, пришлось ещё их учить, где какой байт, сколько байт должно быть и в какой последовательности. Также нашел описание ilbm формата и дал им изучить, не знаю, приняли они это к постоянному сведению или использовали информацию только в текущем чате, но дело пошло. Первый результат дал ГигаЧат, у него получилось выдать готовый черно-белый одноплоскостной файл! Многоплоскостные файлы были мусором, он всё добавлял дебаги, чтобы увидеть, где косяк, додебажился до того, что код превратился в кашу. Я попросил его: «Давай приберём код, уберём лишние дебаги и сделаем последние исправления», он такой: «Ок, вот твой исправленный код целиком, без лишнего» и всё сломал! Его опять глюкануло, и он никак не мог обратно починить. Ладно, откатился, дал его чуток рабочий код Алисе, объяснил ситуацию, как сейчас работает код, что почти уже есть изображение, дал ей картинку, что должно быть и что на выходе, она посмотрела, нашла косяк и опа! Изменила один блок и всё! Программа заработала как надо. Ай да Алиса, молодец. Но без ГигаЧата она сама вряд ли бы справилась, тупила бы в одиночестве. Так что считаю, оба молодцы, один дополнил другого.

Вот она, вторая версия программы. Размер всего 150 килобайт! Работает моментально, не то что питон-скрипт.
REZAK 2.0 8SVX
Роясь в файлах разработки Hired Guns, наткнулся на интересный файл, ресурс-пак звуков, причем он был запакован в RNC, но это уже не проблема. После распаковки смотрю, внутри уложены файлы *.8svx — это звуковые файлы. Я вручную вырезал один, закинул его в онлайн-конвертер и, ага, звук. Дай, думаю, дам Алисе задачу написать программу для разрезания такого ресурс-файла, ибо там всё просто, от одной метки до другой режь да сохраняй. Алиса задачу поняла, но поначалу снова начала что-то выдумывать, какие-то проверки заголовков, высчитывать что-то там, и, конечно, поначалу не получалось. Но я дал ей конкретную задачу, нечего выдумывать, находи метку начала файла, находи вторую метку с именем файла, находи метку следующего файла и режь. В общем, где-то за полчаса управились с ней, файл был успешно разрезан, извлечено 29 звуков. Конвертация в онлайн у меня обломилась, там лимит на количество в сутки, тогда Алиса предложила скачать FFmpeg, дала команду для конвертации и, ога, всё отлично. Так у меня в коллекции появился ещё один инструмент! Правда, я больше таких паков в игре не нашел, но и распаковка одного — это уже хорошо. Почему REZAK 2.0? Это дань памяти моему другу Смышляеву Степану Николаевичу (он же ScoRpioN, он же mi4log), в далеком 1999 году он по нашей просьбе написал такую же программу для извлечения ресурсов из некоторых игр для DOS. Если не ошибаюсь, писал он на паскале. Она до сих пор у меня хранится на всех старых компах, а также на основном в DosBox’e (правда, в досбоксе не хочет запускаться).
Итоги

Ну что ж, по итогу имеем несколько простеньких инструментов, но они были рождены в муках борьбы с искусственным интеллектом. До разбора файлов самой игры я так и не добрался! Только подёргал немного ресурсы. По работе самих ИИ могу сказать, что веры им нет! Но об этом написано на сайтах, что они могут ошибаться, и поэтому их нужно проверять. А ещё они довольно уверенные в своей правоте, хотя открыто несут чушь. По скорости ответа лидирует Алиса, она отвечает практически сразу. ГигаЧат может довольно долго думать. По выводу большого кода: оба ИИ пишут большие куски не до конца, срабатывает ограничение на длину сообщения, но дописывают оставшееся в следующем сообщении, если попросить продолжить. Также в двух соседних сообщениях могут исковеркать переменные, и мне как ничего не понимающему сложно сориентироваться, что туда можно вставить. Этим больше грешит Алиса, я уже говорил, что она в пределах одного чата забывает суть разговора, но зато помнит общие положения соседних чатов и даже поисковых запросов. Также иногда ей сносит башню, она начинает интерпретировать вопрос как отдельный, не относящийся к теме разговора, и начинает выдавать ответ не по нашей теме, но когда её осадишь, возвращается. ГигаЧат за таким не замечен, но, как я уже говорил, его глючит временами, начинает портить код, при выдаче своего кода ломает стиль сообщения, что невозможно читать. ГигаЧат понравился тем, что принимает файлы, хоть и текстовые. Я ему пытался дать на рассмотрение текстовый файл весом 11 мегабайт! Но так как максимальный размер 5 мегабайт, пришлось разбить файл на три части, 5 + 5 + 1, но за раз он принимает только два файла, и последний «обрубок» он никак не хотел склеить с первыми двумя. Всё время просил дать другие части, и на мои указания, что я тебе их только что прислал в предыдущем сообщении, ничего там не находил. То есть не смог из двух сообщений сделать одно. В пределах одного сообщения наверно он склеил бы, но вот три части никак. Также я показывал обоим ИИ хекс данные скриншотами, они скриншот почти нормально читали, но начинали выдумывать, чтобы обвинить меня, что я опять лох и смотрю не туда, и что файл мой не тот, что нужно, и всё такое. Лентяи!
В данный момент я всё-таки начал работу по ремастеру Hired Guns, и есть некоторые результаты, но всё, что я делаю, — это как вновь создаваемая игра! Я использую только ресурсы игры (графику и музыку), но никак не исходный код. Пока только визуально сделан первоначальный запуск и меню. До самой логики игры очень далеко, и я не уверен, что вообще получится именно реверснуть оригинальную логику. Текстуры, как оказалось, это ерунда, а вот сам движок, интеллекты врагов, карты уровней — вот главная загвоздка… Но пока делаю то, что делается, в следующей статье, если такая будет, опишу этапы создания. Пока работаю только с Алисой, и она неплохо справляется! Код пишем (вернее, она пишет) на Си++, он уже разросся на пару тысяч строк, которые раскиданы по десятку файлов.
На этом закончу. Прикрепляю своё творчество в соавторстве с ИИ:
Питон скрипт ilbm2png v1.0: ilbm2png.py.zip
Программа ilbm2png v2.0: ilbm2png.zip
RNC декодер-кодер: rnc.zip
Rezak 2.0: Rezak_8svx.zip