игра «Гопник-2»
«Гопник-2»: попробовал под Windows
В моём иррациональном увлечении дописыванием «
Стало интересно посмотреть — соберётся ли игра под Виндоуз. В конце концов она консольная, чего бы ей не заработать?
Раньше я таким не занимался, но из виндового прошлого я помню, что способы есть. Простых нагуглилось два — среда cygwin и набор инструментов mingw.
Через cygwin всё скомпилировалось и запустилось вообще без проблем, но у такого решения есть фатальный недостаток — собирать приходится в виртуальной машине с Виндоузом.
Набор mingw выглядит с этой точки зрения интереснее — есть и под мой «Мак», но там нет совместимости с «посикс», поэтому часть работы с терминалом не собралась, — проблемы с функциями tcsetattr и tcgetattr. Меня теперь так и подмывает отложить в сторону все планы и попробовать затащить игру ещё и Виндоуз, переписав эти два места.
Кстати, надо не забыть попробовать это сделать через ChatGPT. Я уже делал с ним несколько «подходов к снаряду», но каждый раз опыт был не очень. Например, пытался разобраться с тем как работать io_uring, рабочий пример так и не удалось получить. Но сейчас вышла новая версия, можно попробовать ещё раз.
«Гопник-2»: итог выходных
Человек предполагает, а череда неконтролируемых случайностей располагает. Я думал, что все выходные буду тихонечко пилить список запланированных изменений в игре, а на деле пришлось править совсем другое.
Без особой надежды на успех, я закидываю игру своим друзьям и знакомым, и хотя фанклуб игры не обогатился новыми членами, тем не менее небольшую пользу эту принесло — оказалось, что предыдущий автор недостаточно аккуратно ставит атрибуты консоли и в некоторых случаях не возвращает их обратно.
Например, у одной моей подруги, которой я прислал «Гопника», программа «Терминал»
Кстати, я не знал какой у неё «Макбук» — на процессоре «Интела» или «Эпла», поэтому пришлось научиться делать так называемые «универсальные бинарники».
Это несложно: компилируем программу дважды, сначала — под «интел» (-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);
}Эти указатели — по сути мусор, но один файл игры занимает сотни байт, а у меня нет всего времени Вселенной, чтобы экономить на спичках.
В общем, из задуманного не сделал ничего, зато поправил некоторые вещи поважнее.
«Гопник»: команда «run»
У меня тут дописывание второй части «Гопника» превратилось их хобби в серьёзный геймдев прям! На трекере завели уж два бага и, пока дочка смотрела на проекторе еженедельный мультик, поправил оба.
Помимо багов, которые я одной рукой добавляю, а другой исправляю, немного совершенствую и саму игру. Даже на самом простом уровне она, похоже, чересчур сложная, поэтому я портировал в неё команду «run» из предыдущей части — там она помогала сбежать, если в драке пришлось слишком туго.
У меня «run» появляется только на простом уровне и сбежать удаётся не всегда, — шансы начинаются с 50% и постепенно растут до 75 с ростом удачи (в игре есть такой параметр). Сбежать не получится, если сломана нога, а если сбежать во время стрелки, упадёт понтовость, когда она падает до нуля, братва перестаёт за тебя впрягаться в драках.
В ближайших планах небольшие усовершенствования:
- если не удалось сбежать, надо научиться пропускать ход в драке с противником;
- в файл сохранения в данный момент не записывается состояние ремонтируемой станции;
- надо, наконец, добавить ларёк со всякой снедью.
Есть чем заняться в ближайшие выходные, у меня, вроде, образовалось свободное время.
«Гопник»: нулевые
Пытаюсь вымучить из себя
Пока писал, пришло в голову, что можно ещё добавить ларёк (торговый киоск), но что в нём продавать? Шаверму?
«Гопник-2»: лицензия
Поскольку исходники
Напомню, что там сложная история — неизвестный ныне автор написал игру, выложил исходники, которые потеряны к настоящему моменту. Другой человек постарался их модифицировать, чтобы игра пошла под Линуксом, а я, обнаружив этот вариант, завершил эту работу.
Непонятно только как найти автора исходного варианта, чтобы попросить его дать коду
В интернете остался только момент обнародования автором исходного кода игры; не знаю тянет ли это
Зато удалось разыскать автора промежуточных правок, оригинальный код он у себя не нашёл, зато легко согласился на публикацию своих изменений под любой открытой лицензией. Хотя бы часть дела удалось сделать.
Если «Гитхаб» всё же возмутится, уберу сомнительные исходники, опубликую отдельно патчи и исходный код. Если обвязать это правильным скриптом сборки, с точки зрения возможных пользователей ничего и не изменится.
«Гопник 2»: продолжаю править
По всей видимости тот, кто портировал игру «Гопник 2» под Линукс, сам в свой порт не играл. За эти два дня пришлось исправить два падения, бесчисленное количество логических ошибок, восстановить работоспособность команды «слэм» (есть у «нефора») и дописать здоровые куски для загрузки и выгрузки состояния игры — они там просто отсутствовали.
Заодно, пока уж
Всё на «Гитхабе», отдохну пару дней и попробую
«Гопник 2»: порт под Линукс и МакОС
Я искал медь, а нашёл золото! Постоянные читатели блога знают, что я маниакально одержим текстовой игрой «Гопник» и её продолжением, которые были написаны ещё под ДОС. Хотя её время давно прошло, я постоянно пытаюсь разыскать
Можно даже сказать, что я председатель
В общем иногда на меня накатывает и я опять начинаю шерстить интернет в поисках
И вот наконец мне крупно повезло!
Как оказалось, автор второй части
Интернет со временем всё забывает и чтобы это не случилось и с этим портом, я выложил его на «Гитхаб», минимально причесал, внёс исправление для компиляции под МакОС и пофиксил один баг (при переходе в метро игра падала с ошибкой).
В планах починить сохранение и загрузку состояния игры — Андрей