игра «Гопник-2»

«Гопник-2»: попробовал под Windows

В моём иррациональном увлечении дописыванием «Гопника-2» есть и практическая сторона — получаю много интересного нового опыта. Вчера как раз был такой случай.

Стало интересно посмотреть — соберётся ли игра под Виндоуз. В конце концов она консольная, чего бы ей не заработать?

Скриншот терминала Cygwin: меню игры «Выбери, чё те надо» с опциями начать/загрузить/выйти, сюжет про студента в Питере и диалог с комендантом.
Игра «Гопник-2», собранная и запущенная через cygwin под Windows Server 2019

Раньше я таким не занимался, но из виндового прошлого я помню, что способы есть. Простых нагуглилось два — среда cygwin и набор инструментов mingw.

Через cygwin всё скомпилировалось и запустилось вообще без проблем, но у такого решения есть фатальный недостаток — собирать приходится в виртуальной машине с Виндоузом.

Набор mingw выглядит с этой точки зрения интереснее — есть и под мой «Мак», но там нет совместимости с «посикс», поэтому часть работы с терминалом не собралась, — проблемы с функциями tcsetattr и tcgetattr. Меня теперь так и подмывает отложить в сторону все планы и попробовать затащить игру ещё и Виндоуз, переписав эти два места.

Кстати, надо не забыть попробовать это сделать через ChatGPT. Я уже делал с ним несколько «подходов к снаряду», но каждый раз опыт был не очень. Например, пытался разобраться с тем как работать io_uring, рабочий пример так и не удалось получить. Но сейчас вышла новая версия, можно попробовать ещё раз.

8 комментариев

«Гопник-2»: итог выходных

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

Без особой надежды на успех, я закидываю игру своим друзьям и знакомым, и хотя фанклуб игры не обогатился новыми членами, тем не менее небольшую пользу эту принесло — оказалось, что предыдущий автор недостаточно аккуратно ставит атрибуты консоли и в некоторых случаях не возвращает их обратно.

Терминал с пиксельным логотипом «ГОТНКИ2», надписями «ОКОРЕНИЕ», «УЛЬТУРНОЙ», «ТОЛИЦЫ», версией 1.17 и списком авторов: V.P., d-maxx, tiandrey, bolknote.
Баг, доставшийся в наследство от попытки портирования предыдущего автора — не выставляет чёрный цвет фона

Например, у одной моей подруги, которой я прислал «Гопника», программа «Терминал» почему-то имеет белый фон и игра на нём выглядела странно, пришлось это поправить.

Кстати, я не знал какой у неё «Макбук» — на процессоре «Интела» или «Эпла», поэтому пришлось научиться делать так называемые «универсальные бинарники».

Это несложно: компилируем программу дважды, сначала — под «интел» (-target x86_64), потом — под «эпл» (-target arm64-apple-macos11), после чего собираем оба бинарника в один:

lipo gop2-x86 gop2-arm -create -output gop2-universal

Но это всё не беда, а так, развлечение на полчаса, проблема, над которой я просидел часть субботы, хуже — в моём коде не работало сохранение и восстановление инвентаря.

Автор первой попытки портирования игры из ДОСа в Линукс зачем-то убрал из исходников код сохранения и восстановления состояния героя, мне пришлось писать его самостоятельно. А так как я в коде игры ориентируюсь не блестяще, оказалось, что то, что я принимал за инвентарь, структура, отвечающая за что-то другое.

В общем, нашёл нужную структуру, написал код, который работает с ней без затей, — сохраняет и восстанавливает как есть, вместе с указателями на строки, которые потом обрабатываются дополнительно.

fread(&inv_amount, sizeof(inv_amount), 1, load_file);

inv = (inventory *) malloc(sizeof(inventory) * inv_amount);
fread(inv, sizeof(inventory), inv_amount, load_file);

for (int i = 0; i < inv_amount; i++) {
    size_t len;
    fread(&len, sizeof(len), 1, load_file);

    inv[i].name = (char *) malloc(sizeof(char) * len);
    fread(inv[i].name, sizeof(char), len, load_file);
}

Эти указатели — по сути мусор, но один файл игры занимает сотни байт, а у меня нет всего времени Вселенной, чтобы экономить на спичках.

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

4 комментария

«Гопник»: команда «run»

У меня тут дописывание второй части «Гопника» превратилось их хобби в серьёзный геймдев прям! На трекере завели уж два бага и, пока дочка смотрела на проекторе еженедельный мультик, поправил оба.

Помимо багов, которые я одной рукой добавляю, а другой исправляю, немного совершенствую и саму игру. Даже на самом простом уровне она, похоже, чересчур сложная, поэтому я портировал в неё команду «run» из предыдущей части — там она помогала сбежать, если в драке пришлось слишком туго.

У меня «run» появляется только на простом уровне и сбежать удаётся не всегда, — шансы начинаются с 50% и постепенно растут до 75 с ростом удачи (в игре есть такой параметр). Сбежать не получится, если сломана нога, а если сбежать во время стрелки, упадёт понтовость, когда она падает до нуля, братва перестаёт за тебя впрягаться в драках.

Скриншот текстовой игры: загрузка из "gop2_1.sav", встреча с беспридельщиком 4 уровня, выбор «наехать» или «бежать», реакция на побег — «тебе удалось ссаться».
Демонстрация новой команды «run» (сбежать)

В ближайших планах небольшие усовершенствования:

  • если не удалось сбежать, надо научиться пропускать ход в драке с противником;
  • в файл сохранения в данный момент не записывается состояние ремонтируемой станции;
  • надо, наконец, добавить ларёк со всякой снедью.

Есть чем заняться в ближайшие выходные, у меня, вроде, образовалось свободное время.

Оставить комментарий

«Гопник»: нулевые

Пытаюсь вымучить из себя что-нибудь для игры «Гопник-2», порт которой на Линукс и МакОС я доделываю. Я там добавил свою станцию метро и придумал поставить на ней игровой автомат — в нулевые были распространены «столбики», куда кидали пятаки, но дальше фантазия мне отказывает. Что ещё можно добавить, может кому-то придёт какая-то идея?

Пока писал, пришло в голову, что можно ещё добавить ларёк (торговый киоск), но что в нём продавать? Шаверму? Хот-доги? Они в ларьках вообще продавалась в нулевые? Я вообще не помню.

10 комментариев

«Гопник-2»: лицензия

Поскольку исходники «Гопника-2» теперь лежат на «Гитхабе», я подумал, что хорошо было бы озаботиться политикой лицензирования — «Гитхаб», по слухам, иногда очень нервно к этому относится, вплоть до бана.

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

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

В интернете остался только момент обнародования автором исходного кода игры; не знаю тянет ли это на какое-то волеизъявление.

Сообщение от urajazz от 15 декабря 2008: автор прекращает поддержку проекта, исправил глюки, добавил смену графического режима и выложил исходники; ссылки на игру и код.
Момент передачи автором исходников остальному миру

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

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

Оставить комментарий

«Гопник 2»: продолжаю править

По всей видимости тот, кто портировал игру «Гопник 2» под Линукс, сам в свой порт не играл. За эти два дня пришлось исправить два падения, бесчисленное количество логических ошибок, восстановить работоспособность команды «слэм» (есть у «нефора») и дописать здоровые куски для загрузки и выгрузки состояния игры — они там просто отсутствовали.

Скриншот игры: игрок на станции «Купчино» перелез турникет. Выбран маршрут по метро. Сообщение: «Куда прёшь, не видишь, ремонт?». Стиль гопника.
Дописал новую локацию — станцию метро «Чёрная речка»

Заодно, пока уж более-менее изучил код, добавил новую локацию — станцию метро «Чёрная речка», она «на ремонте», но по ходу игры открывается.

Всё на «Гитхабе», отдохну пару дней и попробую что-нибудь ещё добавить на новую локацию. Пока моей фантазии хватило только на игровой автомат, — действие игры происходит в двухтысячные, тогда были особенно популярны «столбики», которые надо люди набивали мелочью.

Оставить комментарий

«Гопник 2»: порт под Линукс и МакОС

Я искал медь, а нашёл золото! Постоянные читатели блога знают, что я маниакально одержим текстовой игрой «Гопник» и её продолжением, которые были написаны ещё под ДОС. Хотя её время давно прошло, я постоянно пытаюсь разыскать что-нибудь новенькое про неё, и у меня даже есть отдельный тег для заметок на эту тему.

Можно даже сказать, что я председатель фан-клуба этой серии игр. Жаль только миссионер из меня не очень и в моём клубе на членских взносах не пожируешь.

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

И вот наконец мне крупно повезло!

Скриншот текстовой игры: выбор роли (подтас, отморозок), сложности и ника «Bolknote». Управление командами: w, s, h, mh, kos, rep, mar, girl, met, sav, loa, help, e, i.
Игровой процесс. Игра запущена под МакОС

Как оказалось, автор второй части когда-то выкладывал в сеть исходный код, и хотя сейчас он, по всей видимости, потерян, зато доступна модифицированная версия — некто Андрей Тихонов («tiandrey») запустил игру под Линукс.

Интернет со временем всё забывает и чтобы это не случилось и с этим портом, я выложил его на «Гитхаб», минимально причесал, внёс исправление для компиляции под МакОС и пофиксил один баг (при переходе в метро игра падала с ошибкой).

В планах починить сохранение и загрузку состояния игры — Андрей почему-то оставил это место разломанным. Попробую выделить на это время в выходные.

4 комментария

← 1 2 →