"Трое оклеветали тебя, трое предали тебя! Один, кого ты предал, был трижды прав!"— Дагот Ур
Пепельная статуя, Кубок Шестого Дома, маска-миниатюра и альбом с изображением маски Дагот Ура, главного антагониста The Elder Scrolls III: Morrowind. Мой любимый персонаж и весьма многогранный злодей.
Короткий познавательный пост, основанный на моей больной фантазии. Все совпадения случайны.
Обратился как-то один человек на профильном форуме с вопросом, как запустить (не сказать чтобы старую) игру на Windows 10. Игра (хотя я бы назвал это технодемо) была разработана на легендарном XNA 4.0 (земля пухом) и планировалась к выпуску через Steam Greenlight (и ему земля пухом) еще в далеком 2012, после чего заброшена и убрана со всех магазинов.
Игра была куплена тем человеком еще в тот момент, когда она легально продавалась. А спустя годы она просто перестала подавать признаки жизни. $5 за полную версию уплочены, а поиграть нельзя. Обидно.
Так как типовые решения по типу установки XNA Redistributable не помогли, то был предложен единственно возможный выход из ситуации - отладка через dnSpy.
Внимание: обратная разработка хоть прямо и не запрещена законодательно, но разрешенные случаи весьма ограниченны. В других странах разрешен явный запрет любых манипуляций через лицензию, превращающий это занятие во вполне наказуемое. Не повторяйте дома.
Так как ПО было приобретено легально и оно не работает, то этот теоретический случай допустим в соответствии со статьей 1280 гражданского кодекса.
Демонстрировать буду на бесплатной демоверсии, скачать можно здесь.
dnSpy
Театр начинается с вешалки, а программа на C# с атрибутов сборки. Они нам сейчас не сильно интересны, поэтому пытаемся сразу запускать отладку. С неизвестными программами лучше использовать виртуальную машину, так как может быть встроена какая-нибудь пакость для кулхацкеров, но мне можно и так.
Ошибка. Открываем стек вызовов и ищем место, где произошел провальный запрос в сеть.
А вот и виновник торжества. По сообщению из исключения можно сделать вполне однозначный вывод, что проблемой является скупердяйство и непредусмотрительность автора, который решил перестать платить за домен и хостинг, а вместе с этим случайно (а может и намеренно) сделал запуск игры невозможным без интернета. Так как на сайте заявлено отсутствие DRM, то это явно недосмотр.
Что тут происходит?
Если почитать документацию на XNA, то этот метод предназначен для загрузки контента и вызывается автоматически при запуске игры. Первым делом выполняется инициализация некоторых вещей, после чего открывается файл настроек (options.xml) и начинает последовательно считываться. Как только считываются параметры аккаунта для таблицы рекордов, то происходит отправка логина+пароля на официальный сайт и попытка получить ID. Если сервер возвращает Failure, то открывается диалог входа, который можно пропустить. Если сервер возвращает число, то игра запускается. А вот если сервер недоступен, то вылетает исключение, которое никак не обрабатывается и приводит к молчаливому вылету.
Диалог входа официально можно пропустить.
На этом этапе есть 2 варианта действий:
Вручную отредактировать настройки и убрать пункт об аккаунте. Тогда игра будет всегда запускаться без входа.
Физически убрать запрос на несуществующий сайт.
Нормальные герои всегда идут в обход, так что переходим к написанию небольшого патча. (На самом деле, о первом варианте я додумался не сразу. Более того, полная версия зависает при убирании этого пункта из настроек).
Выделяем строчку с запросом и нажимает "Изменить инструкции IL". Открывается окно с заголовком "Изменение тела метода".
Это - язык MSIL. Он очень прост и сильно напоминает Forth, на самом деле, но новичка может отпугнуть.
Ключевым элементом является стек. Что такое стек я уже когда-то рассказывал. Это некоторое место, на вершину которого можно последовательно добавлять значения (числа, строки и прочие объекты), а так же снимать их в обратном порядке.
Не эти стеки, но суть та же. Можно добавлять и снимать сверху.
ldloc.2: Значение локальной переменной под номером 2 (с типом строки)
ldstr: Строку "&p=".
ldloc.3: Значение локальной переменной под номером 3 (тоже строка).
Потом мы вызываем String::Concat(), принимающий в себя 4 строки и соединяющий их вместе. При вызове метода будут сняты 4 верхние строки со стека и добавлена новая строка.
Вызов следующего метода (WebClient::DownloadString()) снимает строку, полученную от String::Concat(), и веб-клиент. В результате должна остаться только 1 строка, возвращенная WebClient::DownloadString().
Следующим этапом мы должны снять эту строку со стека и сохранить её в локальную переменную 1, но этого не произойдет, так как WebClient::DownloadString() всегда будет проваливаться и выбрасывать исключение. Исключение, если его не обработать сразу, будет раз за разом проваливаться глубже по стеку вызовов, пока не достигнет обработчика или дна. Так как никаких обработчиков по пути нет, то исключение достигает дна и приводит к вылету.
Чтобы избежать получения исключения, мы можем убрать всё, что предназначено для запроса в сеть. Примерно вот так:
8 инструкций превратились в 2: загрузка строки с числом (которое может быть любым) и сохранение в локальную переменную под номером 1.
Сохраняем и проверяем результат.
Было.
Стало.
Из декомпилированного кода полностью исчез кусок с запросом. Осталась лишь загрузка константной строки и сравнение с "Failure", которое всегда будет успешным.
Сохраняем модуль и пытаемся запускать опять.
Жопиздан!
С этой задачей успешно справился человек, который не смыслит в программировании вообще ничего. По его словам, он джва года ждал эту игру!
Но не всё так просто. Если попытаться пройти любой уровень, то вылетит то же самое исключение.
Для исправления точно так же выделяем строку и опять редактируем инструкции в теле метода. Но так как отправка статистики нонче ни на что не влияет, то просто удаляем выделенные инструкции без остатка.
А для надежности выделяем WebClient, нажимаем "Анализировать" и смотрим, где еще может ждать нас подлянка.
В Finish.Update() мы ошибку только что исправили, в Game1.LoadContent() исправили в самом начале, а Login.button1_Click(), Program.Main() и Title.Update() нас не интересуют, так как достаточно просто не делать того, что приведет к обращению в сеть (а конкретно: не открывать диалог входа, не указывать никакие аргументы при запуске и не пытаться авторизоваться через главное меню (вроде бы не реализовано)).
Чем в девяностые годы отличались отечественные любители видеоигр от своих зарубежных «единомышленников»? Не только тем, что им (то есть нам - я тоже рос в ту весёлую эпоху) приходилось играть преимущественно в пиратские копии игр и китайские клоны приставок, а не использовать оригинальную продукцию. Есть более существенное отличие.
Российские геймеры тех лет, в отличие от зарубежных, в одночасье получили сразу всю библиотеку игр, изданных за последние десять - пятнадцать лет. Скажем, на Денди это игры от самых простых, типа «Бомбермена», до самых продвинутых, вроде «Соника» и «Короля Льва». А в довесок - и контент более мощных приставок, как Сега, и даже древние динозавры вроде Атари. Из-за этого полноценно насладиться многими играми не получалось.
А вот геймеры в других странах, получавшие свежие игры в момент их выхода, каждый раз удивлялись чему-то новому. Так,Super Marioбыла одной из самых первых игр с плавным скроллингом, а не со сменой экранов. В более ранние годы сильно удивляла игроков сама смена экранов, впервые реализованная в 1978 году в игреSuperman; вPitfall!(1983) таких экранов было целых 255, что казалось технически невозможным (а секрет был в процедурной генерации, когда каждую новую комнату автоматически создавал код).
ИграPrince of Persiaв России, наверное, вообще не пользовалась массовой популярностью, поскольку в 90-е казалась уж слишком примитивной. Но в момент своего появления она казалась чем-то невероятным, а всё из-за реалистичных движений главного героя. Весь фокус был в ротоскопировании - инновационной технологии, позволяющей «перекладывать» в игру движения реальных людей. В 90-е эта техника применялась уже повсюду - например, вMortal Kombat.
В общем, мы получили "всё и сразу", и это тот случай, когда "всё и сразу" - это нехорошо.
А для тех, кто интересуется "тёплыми, ламповыми" старыми играми, могу порекомендовать свой канал (точнее - "подканал" в основном канале на Дзене), посвящённый им - "ГЕЙМЕРСКИЙ ПАЛЕОЗОЙ". И статьи там есть не только про всеми любимые шедевры вроде "Марио", но и про такие игры, которые до наших широт так и не дошли. В общем - добро пожаловать в доисторическое пиксельное царство! [если не отображается ссылка - нужно отключить AdBlock]
Классического "Бомбермена", вышедшего в 1985 году, критиковали за слишком простой геймплей, примитивную графику и общее однообразие... и при этом играли в него не намного меньше, чем в того же "Марио". "Бомбермен" породил целую серию игр для разных платформ, а также аниме-сериал.
Простота и бесхитростность игры обманчивы: разработчики писали, что "Бомбермен" имеет продуманный сюжет. Если бы игра вышла позже, он бы наверняка был отражён в кат-сценах. Но мы имеем только слова разработчиков.
Итак, "Бомбермен" - это робот, который работает в подземных лабораториях и производит бомбы. Лаборатории принадлежат злобной инопланетной расе. Кто-то пустил слух, что если робот выйдет на поверхность, то он превратится в человека. Наш герой воспрял духом - и решил выйти на свободу и стать человеком. В нём, видимо, загадочным образом появилась душа...
Это уже попахивает классикой: похожий сюжет имела фантастическая пьеса Карела Чапека "Р.У.Р" (1920), в которой, кстати, и появилось слово "робот".
А прожжённые фанаты (вроде меня) продолжают открывать в "Бомбермене" новые секреты. Например - скрытые бонусы, которые можно получить с помощью некоторых нестандартных действий. Вот один из них - бутылка колы:
Balloon Fight - как по мне, это одна из самых сложных игр на NES. Не основная часть, а "режим полёта", где приходится очень долго (по-видимому, бесконечно) лететь на красных шарах, стараясь собирать зелёные шары и не сталкиваясь с сонмами разбегающихся в разные стороны звёзд. Игра очень сложная именно потому, что в ней всего одна жизнь. Проиграл - начинай заново. В большинстве других игр нам даются хотя бы три попытки, а тут - как в реальной жизни: умираешь всего один раз.
Здесь учитывается ещё какой-то "ранг", смысл которого я не до конца понял. Меня хватило всего на четыре минуты, но максимального (точнее - минимального - первого) "ранга" я таки достиг:
А вот моя статья про, наверное, самую хитовую игру всех времён:
И у вас не было. И ни у кого на постсоветском пространстве не было. Робот был выпущен исключительно для японского и американского рынка, но и там прожил совсем недолго.
Как мы представляем себе контроллеры для приставок? Обычно это джойстики или геймпады, без которых приставка, конечно же, совсем не обойдётся. В девяностые мы были в восторге от светового пистолета, который нам, тогда ещё маленьким детям, казался каким-то магическим устройством. Но в Японии и США в середине 80-х оригинальная приставка NES комплектовалась кое-чем более «забористым». Это был настоящий робот, который выполнял функцию второго игрока. У него были глаза, способные улавливать световые сигналы с экрана, и движущиеся руки, которые могли брать особые гироскопы и с их помощью нажимать на кнопки своего контроллера.
- Приветик!
Правда, для R.O.B. было выпущено всего две игры, из которых больше всего известнаGiromite. Игрок - который живой, из мяса и костей - играет за учёного, перемещающегося по лаборатории и собирающего динамит; а робот в нужные моменты открывает и закрывает двери, нажимая на кнопки. Есть и другой режим игры, в которых игрок сам подаёт команды роботу.
До наших широт он не дошёл...
Троянский робот
Робо-геймер, конечно, выглядел футуристично и повергал в восторг и мистический трепет детей и даже взрослых. Внешне он немного напоминал инопланетянина из одноимённого фильма Стивена Спилберга, вышедшего за несколько лет до его выпуска. Однако, если вдуматься, возможности R.O.B. были очень скромными. Вся его электронная начинка напоминала упомянутый выше световой пистолет, а значит, она была довольно простой. Полноценным игроком робот быть не мог - по сути, он производил простейшие действия. Но большего от него и не требовалось.
Одно лицо :)
R.O.B. был этаким «троянским роботом», созданным в рекламных целях. После масштабного краха рынка видеоигр, случившегося в 1983 году, интерес публики и продавцов к домашним консолям сильно поубавился. При этом компания Nintendo уже разработала приставку нового поколения, и ей нужно было как-то её распространять в сложившихся условиях. Для этого и был создан R.O.B. - он должен был привлечь внимание публики. В рекламе говорилось, что NES - не стандартная игровая приставка, а игровая система совершенно нового типа. Будущее наступило, и теперь напарниками живых игроков будут роботы. После того, как консоль получила массовое признание, производство робота прекратилось.
Самое странное во всём этом - именно внешний вид R.O.B. Как уже говорилось, он напоминалE.T.(the Extra-Terrestrial) из фильма Спилберга. Игра для Atari 2600 по этому фильму как раз и спровоцировала игровой кризис 1983 года, поскольку показалась покупателям слишком плохой, примитивной и недоработанной. Получается, что «Инопланетянин» похоронил игровую индустрию - и он же её возродил через пару лет в новом качестве.
"Плохой" инопланетянин от Atari
А вот мои статьи о самых странных и необычных (для своего времени) играх на Atari 2600:
Вот с этой простейшей игры, по сути, и началась вся мировая игровая "движуха". По крайней мере с неё начались все остальные платформеры. Простейшей она была и по графике, и по игровому процессу. Герой не мог даже прыгать. Зато мог рыть ямы, в которую должны были попасть враги...
И тут начиналась форменная дикость. Бедного красного "колобка", попавшего в яму, нужно было ещё и добить лопатой, чтобы он провалился в неё окончательно. Выглядит это, по-моему, крайне жестоко.
Кстати, несмотря на бесхитростность игры, американцам она показалась слишком сложной. Многие бросали её, не пройдя даже первый уровень. Считается, что геймеры тех лет долго не могли привыкнуть к такому игровому процессу - слишком новым и необычным он был. По сравнению с вездесущими "понгами" и "стрелялками" Space Panic, действительно, была заковыристым творением.
А вот моя статья про самую трэшовую компьютерную игру родом из СССР:
The Beatles: Rock Band - это ритм-игра 2009 года в стиле Guitar Hero. В игре представлены виртуальные образы четырёх участников группы, исполняющих песни на протяжении всей истории группы, в том числе изображения некоторых из их знаменитых живых выступлений, а также несколько сцен в стиле "dreamscape" для песен, записанных в Abbey Road Studios в годы работы группы в студии.Саундтрек к игре состоит из 45 песен The Beatles; дополнительные песни и альбомы The Beatles были доступны в игре в виде загружаемого контента.
Очень хороша телевизионная реклама этой игры, особенно сцена, где битлы попивают чаёк в английском саду, расположенном на голове мастодонта)).
Знаю что у нас, здесь, много любителей котов. Что же могу сказать? Вы не одни во вселенной, для вас даже игры создают. Как например, Short Trip, что в переводе с английского означает "короткая поездка". В общем-то название отражает саму суть игры, нужно доехать из точки А в
точку Б на трамвае. По пути можно останавливаться на остановках и подвозить
пассажиров. Кстати, играть придётся за кота, а в качестве пассажиров будут
другие коты. Графика здесь представлена рисунками карандашом, на создание
которых у автора ушло пять лет. Нельзя не отметить, что этот крошечный мир
детализирован достаточно тщательно, там есть рынок, маяк, порт, в общем, много
чего есть. Поездка в одну сторону занимает пять минут. Управление здесь не такое уж
сложное, большинство справится без проблем, стрелка влево и стрелка вправо
(если играть на компе) и соответственно прикосновение к экрану в нужную сторону
(если играть со смартфона). Игра бесплатная, но при желании можно приобрести
версию в Steam за баснословные 82 ₽. Правда
за эти деньги вы сможете получить новые бонусы и режим «расписания» в котором
вам будут начисляться очки за соблюдение расписания. А теперь несколько скриншотов, в конце добавлю ссылку на игру (ни разу
не реклама), вдруг кому-то захочется поиграть.
Ничего особенного. Просто Сэр Макс играть изволит.
Купили когтеточку, которую закрепили на углу стены. Получился прекрасный скалодром для кота. Вместе с когтеточкой прислали игрушку. Оказалось - самое то для кота.
Игра такая. Человек подбрасывает игрушку вверх, а Сэр Макс ловит её. Желательно, пока Макс не поймает игрушку, от угла не отходить.
Минспорта в прошлые разы так и не угомонились, изобретя новые нормативы для киберспортсменов, уже третьи по счету.
Согласно предыдущим требованиям и рекомендациям, путь профессионального киберспортивного ремесленника должен начинаться в 12 лет (с учетом требований по длительности работы за компьютером, тренироваться больше 30 минут в день запрещено). От кандидата требуется быстрота, выносливость и отличная координация. Сила - необязательно. Обязательна сдача нормативов, а на физподготовку должно уходить не менее 30% времени обучения. При этом специалист стать высшим МС до 17 лет не может.
Если кандидат по какой-то причине не может сдать нормативы, имея проблемы со спиной или ногами, отсутствие ног, паралич, является физически слабым - се ля ви. К киберспорту не годен. Если не может поддерживать 6 нажатий в секунду на протяжении полуминуты - не годен (мой рекорд - 6.4 на протяжении 5 секунд). Время реакции больше 225 миллисекунд - аналогично (про способы измерения и задержку от оборудования молчат, у меня плавает 250-320).
Требование к оснащению ПК одно - видеокарта с 12 гигабайтами VRAM. 4060, 5060 и прочие видеокарты с 8 и 6 гигабайтами не могут быть использованы в киберспорте. Требований к ОЗУ и процессорам больше нет, соответственно компьютер на Pentium 4 с шиной PCIe и видеокартой 3060 является игровым, а вот компьютер с R7 9800X3D и 5060 - нет.
Зато есть требования к тренировочным площадкам:
Уполномоченная за обучение киберспортсменов организация должна обеспечить им необходимую спортивную экипировку, оплатить проезд и жилье в случае проведения соревнований. Документ также предусматривает ряд требований и к площадкам, на которых будут тренироваться киберспортсмены. Среди них — наличие тренажерного зала, раздевалок, душевых, медицинского пункта. Сами киберспортивные клубы с 2018 пытаются получить статус спортивных объектов. В Минспорте не ответили на запрос “Ъ”.
Масштабная диорама по мотивам Heroes Of Might And Magic III. Размер 40Х50см. Всё сделано вручную. Присутствуют такие замки как Башня, Некрополис, Крепость. Автор:Deloto
P.S.: Будет выставлена на фестивале Epic Con в Питере на стенде по Героям Меча и Магии. Кто будет, приходите, смотрите :3