Продолжение поста «Alice Thymefield»

Кто играл в эту игру?
И самое интересное, ваше мнение о второй части. Характеристик моего ПК не хватает для запуска второй части. Игра написана на движке Unity, и мне кажется что оптимизация намного более сильно хромает, она намного лучше бы работала на движке Unreal Engine. Интересно ваше мнение.

girl, white hair, annoying, simple background, full body, black dress, blindfold, 3d
Negative: (deformed, distorted, disfigured:1.3), poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, (mutated hands and fingers:1.4), disconnected limbs, mutation, mutated, ugly, disgusting, blurry, amputation, blush, 2d, painting
@Электра ваш ход.
"Трое оклеветали тебя, трое предали тебя! Один, кого ты предал, был трижды прав!"— Дагот Ур
Пепельная статуя, Кубок Шестого Дома, маска-миниатюра и альбом с изображением маски Дагот Ура, главного антагониста The Elder Scrolls III: Morrowind. Мой любимый персонаж и весьма многогранный злодей.
Автор: Deloto.



"Вы стоите перед Утопией Драконов, местом, запретным для простых смертных. Хотите ли вы нарушить это правило и вызвать драконов на бой?"
Диорама по мотивам Heroes Of Might And Magic 3. Утопия Драконов. Места, где сокровища и артефакты охраняются несколькими драконами.
Автор: Deloto





"Размалёванное уродство, игрушка для жадного элипода, гениальная ловушка для чесалок."
Миниатюрная липуринга в виде брелока, который можно на удачу повесить или поставить, где захочется.
Автор: Deloto




Пожалуйста, зарегистрируйтесь или авторизуйтесь для просмотра содержимого данного поста.
Вот такой стол-трансформер купили для нас. Но Сэр Макс уверен, что это его стол. Он на нём теперь спит, умывается и играет.


Но когда скатерть на стол стелем, кот туда уже не лезет. Молодец.
Короткий познавательный пост, основанный на моей больной фантазии. Все совпадения случайны.
Обратился как-то один человек на профильном форуме с вопросом, как запустить (не сказать чтобы старую) игру на Windows 10. Игра (хотя я бы назвал это технодемо) была разработана на легендарном XNA 4.0 (земля пухом) и планировалась к выпуску через Steam Greenlight (и ему земля пухом) еще в далеком 2012, после чего заброшена и убрана со всех магазинов.
Игра была куплена тем человеком еще в тот момент, когда она легально продавалась. А спустя годы она просто перестала подавать признаки жизни. $5 за полную версию уплочены, а поиграть нельзя. Обидно.

Так как типовые решения по типу установки XNA Redistributable не помогли, то был предложен единственно возможный выход из ситуации - отладка через dnSpy.
Внимание: обратная разработка хоть прямо и не запрещена законодательно, но разрешенные случаи весьма ограниченны. В других странах разрешен явный запрет любых манипуляций через лицензию, превращающий это занятие во вполне наказуемое. Не повторяйте дома.
Так как ПО было приобретено легально и оно не работает, то этот теоретический случай допустим в соответствии со статьей 1280 гражданского кодекса.
Демонстрировать буду на бесплатной демоверсии, скачать можно здесь.

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

Ошибка. Открываем стек вызовов и ищем место, где произошел провальный запрос в сеть.

А вот и виновник торжества. По сообщению из исключения можно сделать вполне однозначный вывод, что проблемой является скупердяйство и непредусмотрительность автора, который решил перестать платить за домен и хостинг, а вместе с этим случайно (а может и намеренно) сделал запуск игры невозможным без интернета. Так как на сайте заявлено отсутствие DRM, то это явно недосмотр.
Что тут происходит?

Если почитать документацию на XNA, то этот метод предназначен для загрузки контента и вызывается автоматически при запуске игры. Первым делом выполняется инициализация некоторых вещей, после чего открывается файл настроек (options.xml) и начинает последовательно считываться. Как только считываются параметры аккаунта для таблицы рекордов, то происходит отправка логина+пароля на официальный сайт и попытка получить ID. Если сервер возвращает Failure, то открывается диалог входа, который можно пропустить. Если сервер возвращает число, то игра запускается. А вот если сервер недоступен, то вылетает исключение, которое никак не обрабатывается и приводит к молчаливому вылету.

На этом этапе есть 2 варианта действий:
Нормальные герои всегда идут в обход, так что переходим к написанию небольшого патча. (На самом деле, о первом варианте я додумался не сразу. Более того, полная версия зависает при убирании этого пункта из настроек).
Выделяем строчку с запросом и нажимает "Изменить инструкции IL". Открывается окно с заголовком "Изменение тела метода".

Это - язык MSIL. Он очень прост и сильно напоминает Forth, на самом деле, но новичка может отпугнуть.
Ключевым элементом является стек. Что такое стек я уже когда-то рассказывал. Это некоторое место, на вершину которого можно последовательно добавлять значения (числа, строки и прочие объекты), а так же снимать их в обратном порядке.

Тут мы добавляем на стек:
Потом мы вызываем 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]
Объясните что за жуков тут кидают, на мой взгляд полная ерунда. Админ лучше сделай морской бой между пользователей.
Наверняка многие из нас в детстве не хотели чистить зубы. Паста невкусная, горькая, да и муторное это занятие, тем более если чистить их правильным способом (сначала переднюю сторону, потом заднюю, потом дёсны - и так далее). Однако я в своём детстве чистить зубы очень любил. Правда, делал я это чаще всего с помощью джойстика, а зубы высвечивались на экране телевизора:

К слову, даже сейчас мои зубы довольно неплохо выглядят, так что метод действительно рабочий )))
Собственно, Стив Картрайт, работник Activision в 1983 году, для того и создал эту игру (Plaque Attack) - чтобы прививать детям полезные привычки (в смысле чистить зубы, а не залипать круглые сутки в приставку ;)))) ). Геймплей, как и почти всегда в тогдашних играх, был простой: нужно было стрелять зубной пастой во вредную еду, летящую в рот и пытающуюся уничтожить зубы. С каждым уровнем поведение еды становилось сложнее, а скорость выше, да и прочность зубов снижалась. Виртуальный обладатель зубов, видимо, постепенно старел.
А вот моя статья про одно хорошо знакомое многим устройство из нашего детства:
О существовании в природе такой игры на «Денди» я давным-давно забыл. И вот однажды, несколько месяцев назад, случайно увидев скриншот из неё, я вдруг вспомнил, как более тридцати лет назад «залипал» в неё. И как могло такое стереться из памяти? ;)

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

А вот мои статьи про самые странные древние игры:
Классического "Бомбермена", вышедшего в 1985 году, критиковали за слишком простой геймплей, примитивную графику и общее однообразие... и при этом играли в него не намного меньше, чем в того же "Марио". "Бомбермен" породил целую серию игр для разных платформ, а также аниме-сериал.

Простота и бесхитростность игры обманчивы: разработчики писали, что "Бомбермен" имеет продуманный сюжет. Если бы игра вышла позже, он бы наверняка был отражён в кат-сценах. Но мы имеем только слова разработчиков.
Итак, "Бомбермен" - это робот, который работает в подземных лабораториях и производит бомбы. Лаборатории принадлежат злобной инопланетной расе. Кто-то пустил слух, что если робот выйдет на поверхность, то он превратится в человека. Наш герой воспрял духом - и решил выйти на свободу и стать человеком. В нём, видимо, загадочным образом появилась душа...
Это уже попахивает классикой: похожий сюжет имела фантастическая пьеса Карела Чапека "Р.У.Р" (1920), в которой, кстати, и появилось слово "робот".
А прожжённые фанаты (вроде меня) продолжают открывать в "Бомбермене" новые секреты. Например - скрытые бонусы, которые можно получить с помощью некоторых нестандартных действий. Вот один из них - бутылка колы:

А вот моё полное прохождение "Бомбермена":
Пошло всё в жопу, я 9 дней без выходных ишачил, буду валяться.
Впервые в жизни заказал доставку. В пятёрочке промокод просто на первую доставку скидос 750 рублей, вкупе с другими скидками сэкономил больше 800)))
Привозят - ебать, знакомый чувак приехал xD И такой - данунахуй! А я ему - да хоть на нос!
Вот, думаю, во что на телефоне поиграть. Очень хочется перепройти Front mission 3, но через эмуль первой плойки перевод "я ебал её рука", а для ремейка надо комп собирать, а я очень ебал это делать.
Чекаю авито, поджидаю появления ноута с 1050 на борту до пятнашки. И не сильно далеко от меня.
Кста, вчера как неделя закончилась, я ж нихуя не остановился))) Еще на полторашку наездил, потом уже спать поехал. Не уснул нихуя, разумеется, проблемы у меня с этим, под утро еле как засыпаю. Я уже и овец считал, и бухать пробовал - нихуя.