Ответ на пост «Bethesda Softworks убрала свои игры из продажи в российском Steam»
Помню те времена, когда вопрос, лицензионная ли у тебя игра - считался чем-то из английского юмора. И вот после долгого периода борьбы с пиратством, когда всех нас с огроменным трудом отучали пиратить, путём скидок и прочей техподдержки, они внезапно начинают лить просто как из ведра русофобией вперемешку с нацизмом и закрывать продажи.
Я думаю, даже если всё сейчас разом чпок и решат снять все санкции, ну, глубоко теоретически, рынок России для них уже потерян навсегда, в принципе. Даже те, кто отвернулся от пиратства и начал платить за игры, за фильмы, за сериалы, за всё вот это - сейчас просто из принципа будет пиратить.
Единственное что осталось сделать - это резко снизить количество проверок и блокировок в пользу тех компаний, которые злоупотребили своим положением на рынке и вмешались в политику. Хотят подать претензию? Ок, вот типовой документ, в котором ваша компания выступает против вмешательства в политику России, выступает против расизма, нацизма, сегрегации по языковому, религиозному и иному признаку, против тайваньского или украинского национализма. Не подпишете? Ну дело ваше, можете идти, дверь там.
Ответ на пост «Ренессанс Quake: в какой ситуации находится сейчас франшиза?»
Существует целая куча отличных шутеров разных годов выпуска, хотя бы в один из которых вы не играли, начиная с того же Wolfenstein 3D (который в целом неплох даже на ПК, хоть я и предпочитаю 3DO-версию с великолепным, но никому не известным саундтреком).
Насладитесь эпичностью во время прочтения поста:
Из последнего что я прошёл - Blood Fresh Supply, и это просто замечательный порт на KEX Engine, игра и данное техническое исполнение на голову выше всего, что было сделано на билде (исключая Ion Fury, которую я тоже категорически рекомендую). Впервые прошёл блад полностью до конца... а потом перепрошёл ещё раз, потому что шикарная игра. Плюс, к ней есть много отдельных карт и очень качественных кампаний, которые пилятся и по сей день.
(Blood: Fresh Supply)
Про Brutal Doom можно даже не вспоминать. За исключением редких не очень совместимых карт, всё что сделано думерским сообществом за годы моддинга просто офигенно играется с бруталом. Главное не трогать Project Brutality, фу.
В феврале вышла новая версия второй главы Ashes 2063 - Ashes Afterglow. Это такой постапок-бордерландс-на-мотоцикле-мод на второй дум. Пока ничего толком не могу про него сказать кроме того что атмосфера зашкаливает, играть начал буквально вчера.
(Ashes 2063)
На оригинальную Half-Life есть некоторое количество годных "сюжетных" модов (в кавычках потому что какой там сюжет в халве, ну). Из последнего есть свежачок Field Intensity от наших ребят. Игра долго заряжает и душит поначалу, но с середины становится интереснее, так что понравится любителям бродилок с отстрелом зомбей в полутьме (если нет аллергии на гомерически смешную английскую озвучку и тексты).
(Half-Life: Field Intencity с обязательным посещением Zen)
Ещё есть первый Max Payne - не классический шутан, но на голову выше "голливудской" второй части. Можно накатить апскейленные текстуры и русский текст субтитров и комиксов (оригинальная озвучка очень хороша).
(Сэм Лейк ломал четвёртую стену когда это ещё не было мейнстримом)
Return to Castle Wolfenstein недавно заимел HD-версию в виде RealRTCW, да и оригинальная игра выглядит хорошо и приятно играется, кроме уровня со сраными скелетами. В моей голове этот вольф крайне похож на очень годную ПК-версию MOHAA, которую я обязательно перепрохожу раз в год или два.
(RealRTCW, скриншот из стима)
(Medal of Honor: Allied Assault с классическими сценами из фильма. Иногда графоний выглядит чудовищно плохо)
Из более нового вполне можно сыграть в Doom 3 (разного качества моды или просто BFG Edition), первый оригинальный F.E.A.R. (только не аддоны!) да и F.E.A.R. 2 внезапно тоже неплохая игра, если не отсиживаться за укрытиями и врываться в каждый бой.
(F.E.A.R. 2: Project Origin. Да, тут есть эпичная поездка на боевом роботе)
Сюжетная серия Call of Duty Modern Warfare 1- 3 - на мой взгляд очень ДЕМОКРАТИЧНО, но геймплей хороший для любителей безостановочного экшона, плюс очень годный мультиплеер. Если интересует весёлая, яркая и короткая история-вестерн то рекомендую сюжетно-одиночную Call of Juarez Gunslinger. С другой стороны есть очень мрачная, медленная и тяжёлая как воздух на болотах Луизианы Hunt: Showdown (осторожно, рояль!)
(Gunslinger суров и несправедлив, гифка от пользователя стима)
(Showdown выглядит потрясающе, особенно если позволить себе высокие настройки. Наиграл 350 часов)
Из биошоков могу порекомендовать пройти бодрые ремастеры первой и второй и Infinite без аддонов - это неплохие игры, если не начать их слишком анализировать.
(Bioshock 2 Remastered выглядит очень современно. Кстати, не ставьте русификатор, он ломает игру)
Хроники Риддика в форм-факторе Assault on Dark Athena - это две игры в одной на движке последней, с улучшенной графикой и парой свистоперделок, и пусть они скорее "стелс" чем "шутер", но пострелять тоже дадут. Играется очень душевно и выглядит крайне приятно =)
(The Chronicles of Riddick: Assault on Dark Athena. К сожалению, эта щикарная игра от старбризов нигде не продаётся, я бы купил джва раза. Скрин из интернета).
Ну и призы зрительских симпатий (так я называю крайне непопулярные, но любимые мной игры): Chaser - древний шутер очень на любителя с кучей "особенностей", в который вы скорее всего не играли и Far Cry 2 - очень красивая, серо-золотистая и суровая история однообразной утомительной работы наёмника в малярийном мире потных нигеров в знойной вонючей Африке.
(Far Cry 2 не хватает звёзд с неба. Чтобы почувствовать её прелести, нужно хорошенько поваляться в местных болотах)
(Джон Чейзер яростно хочет попасть на Марс)
Не знаю зачем я начал пихать скриншоты, скажите если это лишнее. Список годных шутеров далеко не полный и я обязательно напишу ещё ДАЖЕ ЕСЛИ ВАМ НЕ НАДО, потому что люблю шутаны и с интересом их обсуждаю.
Rustenstein 3D: программируем, как будто сейчас 1992 год
Автор оригинала: Facundo Olano
Дважды в год компания NextRoll организует мероприятие Hack Week, на котором сотрудники на неделю берутся за проект по своему выбору. Это превосходная возможность для экспериментов, изучения новых технологий и объединения с людьми из всех отделов компании. Узнать о Hack Week подробнее можно здесь.
Так как NextRoll всё активнее использует язык программирования Rust, на Hack Week инженеры обычно пытаются получить опыт работы с ним. Ещё одним популярным вариантом выбора является работа над видеоиграми, и, как вы уже могли догадаться, мы часто видим в проектах сочетание видеоигр и языка Rust.
В прошлом году группа сотрудников работала над развитием моей игры rpg-cli. На этот раз захотелось пойти дальше и взять проект, который показывает некоторые из сильных сторон Rust: низкоуровневым программированием, высоконагруженными вычислениями и операционной совместимостью данных с языком C. Поэтому мы решили портировать на Rust классическую игру Wolfenstein 3D.
Предыстория
id Software знаменита тем, что выжимает максимум из программирования игр для PC: сначала она реализовала сайдскроллеры в стиле NES на не предназначенном для них оборудовании, затем практически изобрела жанр трёхмерного шутера от первого лица и стала лидером в нём, а позже сделала реальностью сетевой и Интернет-мультиплеер. Параллельно эта компания популяризировала распространение ПО по методике shareware, вдохнула жизнь в любительский моддинг и выложила в открытый доступ исходный код всех своих хитовых игр. Об этой истории говорится в книге Masters of Doom Дэвида Кушнера; о технических подробностях рассказывается в серии Game Engine black books Фабьена Санглара.
Игра Wolfenstein 3D, менее известная, чем её потомки Doom и Quake, стала важным этапом в эволюции id Software и игр для PC в целом. Кроме того, из-за более примитивных технологий её исходный код лучше подходит для исследования и реализации. Игра не имеет реального 3D-движка, а симулирует 3D-мир из 2D-карты при помощи техники, называемой ray casting. Вся отрисовка выполняется непосредственным размещением пикселей на экране.
Прочитав несколько лет назад Wolfenstein black book, я попытался портировать игру на Python на основании другого современного порта wolf4sdl. Я стремился быть как можно ближе к исходникам оригинала, что оказалось очень сложно, поэтому со временем я забросил проект. Недавно Марио Ругиеро, тоже прочитавший книгу, предложил в качестве проекта на Hack Week сделать порт игры на Rust. К нему присоединилось множество людей, в том числе и я; однако по моему предыдущему опыту наша задача всё равно была пугающей: некоторые из нас были новичками в Rust, кто-то никогда не играл в Wolf, кто-то ещё не прочитал книгу, и никто из нас ранее не реализовывал ray casting. Мы начали, не надеясь получить что-то осязаемое к концу недели, но увидели в проекте огромные возможности для обучения, поэтому взялись за него.
Разработка
Мы приблизительно разбили игру на компоненты, с которыми можно было работать по отдельности, поэтому каждый участник команды выбрал свой и начал работу с ним:
- Распаковка и парсинг графических файлов.
- Распаковка, парсинг и интерпретация файлов карт.
- Манипуляции с графикой и рендеринг текстур при помощи SDL.
- Ray casting.
- Игровой цикл и управление вводом.
- Рендеринг мира.
В случаях, когда выходные данные компонента требовались в качестве входных данных для следующего компонента, мы использовали заранее обработанные или прописанные в коде данные, извлечённые из справочных реализаций wolf4py и wolf4sdl: распакованные двоичные дампы ресурсов, прописанные в коде карты и стены, и т. п. Это позволило нам работать параллельно.
Ресурсы
Первой задачей в портировании игры было считывание её данных. Wolfenstein имеет набор файлов с различными ресурсами: графикой (изображениями, текстурами и спрайтами), аудио (музыкой и звуковыми эффектами) и картами. Одна из сложностей заключалась в том, что в каждой версии игры файлы слегка различались, имели разные смещения, а в некоторых случаях и разные способы сжатия. Файлы .WL1 для Rustenstein мы взяли из shareware-версии [бесплатная неполная версия игры — прим. пер.] и добавили в репозиторий.
В каждом файле используется разная комбинация нескольких алгоритмов распаковки, и все эти алгоритмы нам нужно было портировать на Rust:
- Традиционное сжатие Хаффмана.
- Сжатие RLEW — алгоритм кодирования длин серий (run-length encoding), работающий на уровне слов.
- Сжатие «Кармака» — разработанный Джоном Кармаком вариант метода LZ (Лемпеля — Зива). Согласно Black Book, не имея доступа к литературе, Кармак «изобрёл» алгоритм, который, как выяснилось позже, был придуман другими.
Оригинальный движок Wolf имел компонент Memory Manager для управления распределением и сжатием памяти (вместо традиционного malloc языка C), а также Page Manager для перемещения ресурсов с диска в ОЗУ. На современном оборудовании оба компонента не нужны, так как мы можем считать, что все ресурсы поместятся в памяти, поэтому в наш порт эти компоненты не включены.
Карты
Карты Wolfenstein 3D описываются как сетка тайлов размером 64x64. Каждая карта содержит два слоя тайлов: один для стен и дверей, другой для размещения игрока, врагов и бонусов. Значения тайлов обозначают, какая текстура будет рендериться на стенах, какие замки требуются для дверей, куда смотрит игрок и т. д. Все стены имеют одинаковую высоту, и поскольку они представлены как блоки сетки тайлов, все они пересекаются под прямым углом; это сильно ограничивает дизайн уровней, зато значительно упрощает алгоритм рейкастинга для отрисовки 3D-мира.
Ниже показана первая карта первого эпизода такой, как она выглядит в редакторе карт Wolfenstein:
Отрисовка пикселей
Когда дело касается графических ресурсов, распаковка и загрузка данных в память — это только половина работы. Двоичные блоки, из которых состоит каждый графический элемент (изображение, спрайт или текстура) имеют структуру, предназначенную для быстрого рендеринга на VGA-дисплеях, для которых изначально была рассчитана игра. Это означает, что графика поворачивается для отрисовки в столбцах, а сами столбцы расположены в файле попеременно, поскольку стандарт VGA позволял параллельно записывать до четырёх банков видеопамяти.
Каждый байт в двоичных блоках графики является индексом 256-цветной палитры, используемой в Wolfenstein 3D. Справочная реализация wolf4sdl записывает эти блоки в на SDL-поверхность, которая в свою очередь перед копированием на экран преобразуется в цвета RGB. Подробнее см. в этом посте.
Так как привязки Rust для SDL используют другой набор абстракций (в частности, они не раскрывают функцию SDL_ConvertPixels), мы выбрали вариант преобразования индекса палитры в цвета RGB на лету, выполняя запись напрямую в RGB-текстуру, которая затем копируется на холст. Это означает, что процедуры рендеринга необходимо адаптировать для записи байтов красного, синего и зелёного вместо одного байта индекса палитры.
Две реализованные нами процедуры рендеринга графики были напрямую портированы из реализации wolf4py, которая, в свою очередь, почти построчно была портирована из справочного форка wolf4sdl. Первая процедура обрабатывает вывод полного изображения непосредственно на экран. Она используется для экрана заставки, а также для полосы состояния игрока в нижней части экрана в процессе игры.
Вторая, гораздо более сложная процедура, выполняет отрисовку спрайтов и в настоящее время применяется для отображения оружия игрока. Осталось портировать похожую, но ещё более сложную функцию: отрисовывающую отмасштабированные изображения, например, текстуры стен и спрайты врагов.
В процессе разработки вместо оружия отобразился неожиданный спрайт
Желательно будет усовершенствовать эту реализацию так, чтобы основная часть обработки выполнялась один раз, как часть этапа загрузки ресурсов, а двоичные блоки хранились в памяти, готовые к записи на экран.
Соответствующий код находится здесь.
Ray casting
Фундаментом движка Wolfenstein 3D является алгоритм рейкастинга. Эта процедура позволяет нам проецировать 2D-мир (заданный в виде карты тайлов размером 64x64) в 3D-окно только на основании одних 2D-операций. Вкратце этот алгоритм можно описать так:
1. Испускаем луч из текущей позиции игрока для каждого столбца пикселей ширины экрана. Например, классическое разрешение Wolfenstein 3D равно 320x200, так что для отрисовки кадра нужно испустить 320 лучей.
2. Продлеваем луч в направлении, определяемом текущим горизонтальным пикселем, позицией игрока и его областью обзора, пока он не коснётся стены на карте. Так как стены прямоугольны, вычисления продлевания луча сильно упрощены, поскольку расстояние между тайлами одинаково.
3. После пересечения луча со стеной вычисляем при помощи тригонометрии расстояние от игрока до этой стены.
4. Задаём высоту стены, обратно пропорциональную вычисленному расстоянию. То есть, чем дальше от игрока находится стена, с которой столкнулся луч, тем меньше она кажется с точки зрения игрока (и тем меньше столбец пикселей, который нужно отрисовать на экране).
Для изучения реализации рейкастинга, более близкой к алгоритму из Wolfenstein 3D, рекомендуется эта серия туториалов.
Эта процедура — самое сложное, что попалось в эту Hack Week. Но уже на ранних этапах мы заложили пару решений, которые помогли снизить сложность и успеть в срок хоть что-то. Во-первых, мы взялись за самую простую версию алгоритма, поддерживающую стены из сплошных цветов, а не из текстур. Во-вторых, Джош Берроуз разбирался с рейкастингом на основе туториалов, а не пытался создать построчный порт реализации Кармака (которая, по словам Санглара, является «полностью написанными вручную 740 строками крайне неординарного и сверхэффективного ассемблерного кода») или близнеца wolf4sdl (написанного на C, но всё равно активно использующего операторы goto и имеющего множество глобальных побочных эффектов наряду с вычислением высот стен).
Вот как выглядела первая карта Wolf в виде сверху после её интеграции в процедуру рейкастинга:
Полную реализацию можно найти здесь.
Рендеринг мира
Отображение 3D-мира начинается с разделения экрана горизонтально на две части, верхняя половина раскрашивается в сплошной цвет потолка, а нижняя — в сплошной цвет пола. После этого нужно отрисовать столбец пикселей с высотой, полученной от алгоритма рейкастинга для каждой горизонтальной координаты. Пока продолжалась разработка алгоритма, мы тестировали код рендеринга при помощи прописанных в коде стен:
После того, как процедура рейкастинга была реализована и ей была передана реальная карта Wolfenstein, мы получили массив высот стен для каждого столбца пикселей на экране и начали видеть мир:
Хоть мы и не реализовали рендеринг текстур, есть пара трюков, улучшивших внешний вид сцены: использование разных цветов для горизонтальной и вертикальной граней стены и обратная пропорциональность компонентов r, g, b каждого пикселя к расстоянию до игрока (которое мы знали по высоте стены), создающая эффект темноты:
Соединяем всё вместе
За день до демонстрации у нас имелись лишь части игры: не была готова загрузка ресурсов, мы нашли баги в парсинге карт и рендеринге спрайтов, из-за которых проект невозможно было показать, а движок рейкастинга работал с прописанной в коде 2D-картой, отдельной от остальной части проекта. За несколько потрясающих последних часов мы связали всё вместе: устранили баги, соединили разные компоненты, и благодаря нескольким хакам и куче уродливого кода нам удалось собрать впечатляющее видео как раз к моменту демонстраций на Hack Week. Нам даже хватило времени в последние минуты добавить анимацию лица персонажа! Этот процесс напомнил мне истории о видеоигровых компаниях, в спешке собирающих демо, чтобы успеть показать их на E3.
До работающей игры далеко, но мы не ожидали даже подобного результата всего за несколько дней работы. В течение этой недели мы довольно много узнали о Rust, и продвинулись дальше, чем если бы работали по одиночке. И в конечном итоге наш проект выиграл награду за техническое исполнение!
Теперь прототип выложен в open source, однако, как я сказал, код требует значительной чистки. Так как работать с проектом было очень интересно и за эту первую неделю мы смогли решить самые сложные задачи (загрузку ресурсов, рейкастинг, рендеринг спрайтов и стен), нам не терпится продолжить его. Вот некоторые из возможностей, которые мы хотели бы добавить следующими:
- Рендеринг текстур стен.
- Отображение и подбирание предметов.
- Добавление врагов на карту, реализация боя и ИИ врагов.
- Реализация дверей и ключей.
- Реализация толкаемых стен.
Источник: https://habr.com/ru/post/649673/
Розыгрыш Wolfenstein: Youngblood Deluxe
Доброго времени суток, пикабушник! Лови розыгрыш.
Игра в Steam: Wolfenstein: Youngblood Deluxe
Региональные ограничения: RU+CIS
Уровень: 3+
Окончание розыгрыша 6.02 в 18:00 по МСК
Передача игры ключом на SteamGifts
Вы тут первый раз и ничего не понятно? Ознакомьтесь с FAQ по SteamGifts.
Заходите к нам в discord, у нас тепло, уютно, и много интересного.
Id Software. История про создание нового жанра, прорывные технологии и зал славы
Doom, Wolfenstein, Quake. Держу пари, что подавляющее большинство фанатов компьютерных игр, хотя бы раз слышали эти названия. В целом это неудивительно, ведь эти проекты стали не только родоначальниками нового жанра, но и огромным прорывом в технологическом плане.
Однако не многие знают, что их вклад в игровую индустрию оказался гораздо больше, чем может показаться на первый взгляд.
Дело в том, что за их созданием стояла компания id Software, возглавляемые небезызвестным Джоном Кармаком. Благодаря лично его плодотворной работе, а так же труды многочисленного персонала, мир получил несколько прорывных технологий, а так же смог перейти в эпоху полноценного 3D. Чего уж тут говорить, если огромные куски кода, созданного Кармаком, до сих пор можно найти в многочисленных играх 2021 и даже 2022 года выхода.
Как так получилось, что одна компания продвинула игровую индустрию на десятки лет вперед? Почему id Software перестали быть главным двигателем прогресса? Что произошло с отцами основателями? Об этом и многом другом, мы поговорим в сегодняшнем видео.
Приятного просмотра!
Готовы к Евро-2024? А ну-ка, проверим!
Для всех поклонников футбола Hisense подготовил крутой конкурс в соцсетях. Попытайте удачу, чтобы получить классный мерч и технику от глобального партнера чемпионата.
А если не любите полагаться на случай и сразу отправляетесь за техникой Hisense, не прячьте далеко чек. Загрузите на сайт и получите подписку на Wink на 3 месяца в подарок.
Реклама ООО «Горенье БТ», ИНН: 7704722037