Предупреждение PVS-Studio: V547 Expression ‘m_tActionCondition.m_tLifeTime >= 0’ is always true. Unsigned type value is always >= 0. script_entity_action_inline.h 115
Стало известно, на каком движке разрабатывается S.T.A.L.K.E.R. 2
Когда игра S.T.A.L.K.E.R. 2 еще только была анонсирована, Сергей Галенкин, представляющий компанию Epic Games, дал всем понять, что новинка разрабатывается на популярном движке производства EG.
Теперь же для сомнений места не осталось совсем: на официальном сайте в разделе с перечнем игр, разрабатываемых на этом движке, появился и S.T.A.L.K.E.R. 2, правда, ненадолго — довольно скоро игру оттуда удалили. Что отнюдь не помешало внимательным геймерам не только успеть заметить появление там ожидаемого всеми продолжения культовой серии, но и сделать скриншоты.
Прошло еще несколько часов и студия GSC Game World посредством своих официальных пабликов в соцсетях выступила со следующим заявлением:
» S.T.A.L.K.E.R. 2 работает на Unreal Engine.
Признаться, мы хотели сказать об этом позже, но коллеги из Epic сделали сюрприз для всех (включая нас) прямо в новогоднюю ночь.
Команда GSC Game World выбирает самые подходящие и современные технологии, и UE оказался лучшим выбором среди всех доступных.
Он дал возможность делать тот проект, который вы ждёте. На нём удаётся создать опасную и влекущую атмосферу S.T.A.L.K.E.R. — плоть и кровь нашей игровой вселенной. Наконец, Unreal Engine (вместе с умелыми руками) хорошо гармонирует с нашей целью сделать моддинг удобным и доступным. Благодаря моддерам мир Зоны продолжает жить и развиваться, пока мы заняты разработкой сиквела.
Да-да, мы знаем, о чём вы подумали, но эта новость никак не связана ни с платформами, ни с цифровыми магазинами. Об этом позже.
Смотрите также:
Категории
GSC Game World 50 |
Stalker Shadow of Chernobyl 6 |
Stalker Clear Sky 95 |
Stalker Call of Pripyat 70 |
Stalker 2 101 |
Билды 8 |
Выставки, мероприятия 40 |
Жизнь сайта 164 |
Интервью 80 |
Кинопроекты, сериалы, видео 63 |
Литература, книги, журналы 142 |
Модификации 131 |
Мультиплеер (сетевая игра) 37 |
Одежда Сталкер 15 |
Разное 192 |
Страйкбол, ролевые игры 16 |
Чернобыль 53 |
Свежее
Люди говорят
00:20 — Кто такой Захар Бочаров?
01:47 — Для чего вообще это интервью?
02:58 — О коллективе в GSC Game World.
03:37 — Сергей Григорович.
04:56 — Неловкий вопрос.
07:22 — Это правда, что в компании сейчас лютая текучка кадров?
08:10 — Об увольнениях.
09:03 — Об уходе ведущих разработчиков в 4A Games.
10:30 — У вас точно все нормально?
11:13 — Дмитрий Глуховский и S.T.A.L.K.E.R. 2.
13:13 — А чем ты вообще занимаешься в GSC Game World?
14:40 — Странные вопросы фанатов и странныу ответы КМ-ов.
16:03 — DKUD.
18:07 — В GSC Game World работают модмейкеры?
19:20 — В компании действительно много новичков, и их приняли в команду, чтобы побыстрее укомплектовать состав?
20:29 — Алишер Моргенштерн и S.T.A.L.K.E.R. 2.
21:39 — Реакция фанатов на слова Алишера.
22:41 — Токсичная русскоязычная аудитория и токсичная фан-база сталкера.
26:50 — Человек, который слил все билды Сталкера, неудобен компании?
28:30 — Используют ли разработчики дизайн-документы, 3D-модели и прочие наработки отмененного S.T.A.L.K.E.R. 2 (включая слитые), при разработке текущей игры?
31:25 — Финальный отсчет возвращается?
32:45 — Какой в команде настрой на S.T.A.L.K.E.R. 2?
33:15 — Вы опубликовали ролик, в котором сказали, что создаете игры 26 лет. Но ведь это не так.
34:15 — Настольные игры?
35:18 — Новые патчи для оригинальной игры?
36:15 — Ремейк? Ремастер?
36:30 — Сторонние коммерческие проекты на тематику Сталкера будут закрыты?
Если вам не повезло, и ни одно из решений проблемы не помогло, то вы сможете найти это решение в изменении файла подкачки. С багом боролись большое количество времени, но именно это решение проблемы нашли не так уж и давно.
Unreal Engine 5 — новая, необкатанная технология?
Не очень новая и не совсем необкатанная. Формально движок анонсировали в мае 2020 года, но разработка началась гораздо раньше, в 2016 или 2017 году.
Видимо, избранные партнеры Epic Games получили доступ к движку задолго до анонса. Например, на базе Unreal Engine 5 разрабатывается Hellblade 2, причем на новом движке был сделан трейлер, показанный еще в декабре 2019 года, за полгода до презентации Unreal Engine 5.
А вдруг S.T.A.L.K.E.R. 2 тоже сразу делали на Unreal Engine 5?
Нет, не делали. Когда в начале 2020 года разработчики рассказали о партнерстве с Epic Games, версию движка не упоминали, но вскоре выяснилось, что речь идет именно про Unreal Engine 4.
Не так плохо, как может показаться. Дело в том, что перенос с одного движка на другой (например, с Unreal Engine на CryEngine) и с одной версии движка на другую версию того же движка (как в нашем случае) это очень разные вещи.
У Epic Games есть обширное руководство по миграции на Unreal Engine 5 с предыдущей версии движка. Судя по руководству, особых проблем не должно быть ни с ассетами, ни с кодом.
На легкость миграции указывают и планы других разработчиков. К примеру, триллер The Invincible сейчас делают на Unreal Engine 4, но ближе к релизу разработчики перенесут его на пятую версию движка — видимо, это довольно простой процесс.
Кроме того, ходят слухи, что Epic Games собирается перенести на Unreal Engine 5 свой главный проект, Fortnite. Перенос якобы совместят со сменой сезона, то есть верифицировать слух удастся уже в сентябре.
Слух звучит логично: Epic Games регулярно внедряет в Fortnite новейшие технологии Unreal Engine, тестируя их на реальной игре.
Если вы были свидетелем появления «Чистого неба», то прекрасно помните все те «лестные» эпитеты, которыми игроки награждали разработчиков. И было за что! Играть и в самом деле было совершенно невозможно, причем ошибка XRay Engine была еще «цветочками»!
Copy-paste
Для начала рассмотрим ошибки, связанные с копированием кода. Сценарий их возникновения в разных случаях обычно похож: скопировали код, поменяли часть переменных, а несколько — забыли. Такие ошибки могут быстро распространяться по кодовой базе, и без статического анализатора их очень легко пропустить.
Предупреждение PVS-Studio: V533 It is likely that a wrong variable is being incremented inside the ‘for’ operator. Consider reviewing ‘i’. mxqmetric.cpp 76
Анализатор обнаружил, что во вложенном цикле for инкрементируется переменная i, а проверяется переменная j, что приводит к бесконечному циклу. Скорее всего, при копировании её просто забыли поменять.
-
The conditional expressions of the ‘if’ operators situated alongside each other are identical. Check lines: 445, 447. base_monster_startup.cpp 447 The conditional expressions of the ‘if’ operators situated alongside each other are identical. Check lines: 447, 449. base_monster_startup.cpp 449
Предупреждение PVS-Studio: V517 The use of ‘if (A) <. >else if (A) <. >‘ pattern was detected. There is a probability of logical error presence. Check lines: 1502, 1505. gstats.c 1502
Как и в предыдущем примере, здесь используются два одинаковых условия (strncmp(buff,»\\getpidr\\»,9) == 0). Сложно сказать наверняка, является ли это ошибкой или просто недостижимым кодом, но на это точно стоит обратить внимание. Возможно, что здесь должны быть блоки с getpidr/setpidr по аналогии с getpdr/setpdr.
Предупреждение PVS-Studio: V524 It is odd that the body of ‘width’ function is fully equivalent to the body of ‘height’ function. tpixel.h 1090
Методы height() и width() имеют одинаковое тело. Учитывая, что вычисляются размеры граней куба, возможно, ошибки здесь нет. Но лучше переписать метод width() следующим образом:
Неправильное использование C++
C++ — замечательный язык, который предоставляет программисту много возможностей… отстрелить себе ногу особо жестоким образом. Неопределённое поведение, утечки памяти и, конечно же, опечатки — об ошибках такого рода пойдёт речь в текущем разделе.
Предупреждение PVS-Studio: V591 Non-void function should return a value. _matrix33.h 435
В конце метода пропущен return *this. По стандарту подобный код приведёт к неопределённому поведению. Так как возвращаемое значение является ссылкой, это, скорее всего, приведёт к падению программы при попытке обратиться к возвращаемому значению.
Предупреждение PVS-Studio: V575 The null pointer is passed into ‘fclose’ function. Inspect the first argument. ogg_enc.cpp 47
Довольно интересный пример. Анализатор обнаружил, что аргумент в вызове fclose равен nullptr, что делает вызов функции бессмысленным. Можно предположить, что должны были закрыть поток in.
-
A part of conditional expression is always true: 0x000000FF. nvi_image.cpp 170 A part of conditional expression is always true: 0x000000FF. nvi_image.cpp 171 A part of conditional expression is always true: 0x000000FF. nvi_image.cpp 172 A part of conditional expression is always true: 0x000000FF. nvi_image.cpp 173
Ещё один пример странного кода:
Предупреждение PVS-Studio: V603 The object was created but it is not being used. If you wish to call constructor, ‘this->VertexCache::VertexCache(. )’ should be used. vertexcache.cpp 6
Вместо вызова одного конструктора из другого для инициализации экземпляра будет создан и тут же уничтожен новый объект типа VertexCache. В результате члены создаваемого объекта останутся непроинициализированными.
Предупреждение PVS-Studio: V530 The return value of function ’empty’ is required to be utilized. actor_network.cpp 657
Анализатор предупреждает, что возвращаемое функцией значение не используется. Похоже, что программист перепутал методы empty() и clear(): empty() не очищает массив, а проверяет, является ли он пустым.
Такие ошибки нередко встречаются в различных проектах. Проблема в том, что имя empty() не очевидно: некоторые воспринимают его как действие — удаление. Для того, чтобы подобной неоднозначности не возникало лучше добавлять глаголы has, is к началу метода: действительно, isEmpty() с clear() сложно перепутать.
V530 The return value of function ‘unique’ is required to be utilized. uidragdroplistex.cpp 780
Предупреждение PVS-Studio: V575 The ‘memset’ function processes ‘0’ elements. Inspect the third argument. xrdebug.cpp 104
При вызове memset аргументы перепутали местами и в итоге буфер не обнуляется, как изначально задумывалось. Подобная ошибка может жить в проекте очень долго, так как её очень трудно обнаружить. В таких местах на выручку программисту приходит статический анализатор.
Корректное использование memset:
Следующая ошибка связана с неправильно составленным логическим выражением.
Предупреждение PVS-Studio: V547 Expression is always true. Probably the ‘&&’ operator should be used here. configs_dumper.cpp 262
Выражения вида ‘x != a || x != b’ всегда являются истинным. Вероятнее всего вместо оператора || подразумевался оператор &&.
В этом фрагменте ветвь else относится ко второму if из-за своей право-ассоциативности, что не совпадает с форматированием кода. К счастью, данный случай не отражается на работе программы, тем не менее, он может усложнить процесс отладки и тестирования.
Что необходимо для сборки?
они по функционалу схожи с Professional Edition прошлых версий и абсолютно бесплатны. Правда один минус, могут возникнуть новые проблемы, которые не будут затронуты в этой статье.
Скачать Visual Studio 2015 Community Edition с сайта Microsoft: 1
ACHTUNG Данный туториал рассчитан на VS 2010! При сборке на более современных студиях могут появиться другие проблемы, описания которых не окажется в данной статье! |
Сборка
Заранее хочется оговориться о структуре каталогов
- XRay — корневой каталог движка
- xr_build — Выходной каталог, здесь находятся распакованные ресурсы игры
- xr_src — Каталог с исходными кодами движка
- dev-scripts — Различные вспомогательные скрипты
Загрузка исходного кода движка и подготовительные работы
Скачиваем основной архив с исходниками: 2
Пароль: ljlLHhklknlkedСкачиваем архив с необходимыми для сборки SDKs и компонентами: 3
Распаковываем содержимое архивов XRay.rar и src_components_for_xray.rar в директорию XRay\xr_src
В папке dev-scripts создаем два (*.cmd) файла — mountDisks.cmd и unmountDisks.cmd такого содержания:
mountDisks.cmd:Запускаем mountDisks.cmd, должны появиться два виртуальных диска: X и S. X -выходной каталог, S — каталог исходников.
Подготовительный этап закончен. Приступаем к настройке проектов.
Настройка проектов
Запускаем Visual Studio, на стартовой странице выбираем Открыть проект. или Файл -> Открыть -> Решение или проект. В появившемся окне выбираем S:\xr_3da\xr_3da.sln.
Появится окно мастера преобразования Visual Studio, жмём кнопку ‘Готово’ и ждём пока все проекты конвертируются в формат VS10 и пройдёт синтаксический анализ проектов.
После того как всё сконвертировалось, первым делом открываем Диспетчер конфигураций (ПКМ по решению -> Свойства -> Свойства конфигурации) и выставляем решению активную конфигурацию Mixed (на чистом Debug ужасно падает производительность), а для сторонних библиотек (BugTrap, OpenAL, minizip, zlib) ставим Release.
Ну а теперь самое муторное, это настройка собственно проектов. Каждый проект придется настраивать отдельно, собирать так же советую отдельно (ПКМ по проекту -> Только проект -> Построить только имя проекта). Порядок построения можно узнать так: ПКМ по любому проекту -> Зависимости проектов. -> Порядок построения. Настраиваем выходные каталоги, промежуточные каталоги и выходные каталог для библиотек импорта по своему вкусу, у меня так (на примере BugTrap, используется структура каталогов, упомянутая в начале статьи):
Далее необходимо настроить пути к заголовочным файлам и библиотекам импорта внешних библиотек. Ниже пойдёт таблица проектов (в порядке построения) с необходимыми для них библиотеками из директории xr_src\SDK, пути настраиваются здесь:
Проект Необходимые библиотеки xrCore DX xrCDB xrCore xrLua xrCore, LuaBind, Boost xrSound xrCore, Xiph libs, EAX, DX, OpenAL xrParticles n/a xrNetServer xrCore, DX, Boost xrXMLParser n/a XR_3DA xrCore, DX, xrLua\src, LuaBind, Boost, Xiph libs, OpenAL (*.lib only) ODE n/a xrCPU_Pipe xrCore, DX xrGameSpy n/a xrRender_R2 xrCore, DX xrRender_R1 xrCore, DX xrGame xrCore, DX, xrLua\src, LuaBind, Boost, Loki Предупреждение PVS-Studio: V576 Incorrect format. A different number of actual arguments is expected while calling ‘printf’ function. Expected: 2. Present: 1. entry_point.cpp 41
«Только для некоммерческого использования. © Григ»
В 2014 году на форуме GAMEINATOR появился исходный код игры S.T.A.L.K.E.R. Зов Припяти. Этого следовало ожидать, поскольку исходники предыдущих частей уже какое-то время были в открытом доступе. Тогда я подумал: «О, круто! Наконец-то кто-то сделает полноценный сетевой режим в сталкере». Но никто его не сделал. Да, на тот момент уже был анонсирован небезызвестный Ray of Hope, который до сих пор находится в разработке, но, исключая его, горизонт сталкерских сетевых модов был чист вплоть до 2018.
В 2017 году без особых надежд на успех, вооружившись исходниками soProject, я стал модифицировать исходынй код «Чистого неба», параллельно изучая движок и C++. Тогда результаты были не особо впечатляющими. Я часто не понимал ассемблерного кода, большие куски приходилось писать с нуля, знаний явно не хватало. Первый билд, который можно охарактеризовать как «значимый результат» умел загружать симулятор жизни и синхронизировать целого одного NPC. Не без багов — я не понял как подключить передачу анимаций, а в работу синхронизации то и дело вступал неотключенный до конца AI со стороны подключившегося клиента.Тогда мы работали вдвоем. Я и Александр «v2v3v4» Егоров. Чуть позже в том же году к нам присоединились ещё два человека — Владислав «MadMurloc» Игнатушко и Максим «Jukan» Жук. Мы переехали на Зов Припяти, и в скором времени был готов билд, функционально повторяющий soProject, но на исходниках. Теперь мы могли исправить все недостатки ассемблерного проекта, а самое главное — теперь у нас есть возможность играться с механиками и добавлять свои.
Сразу после смерти этого бандита сервер вылетел 🙂
Мы задумались о том, какие недостатки имел оригинальный мультиплеер и сопроджект, и пришли к выводу, что недостаточно просто добавить сталкеров и мутантов на карту. Нам нужны механики взаимодействия игроков. Так появились, например, система сквадов, поднятие раненых игроков, жесты, голосовой чат, совместный поиск артефактов.
Сквад
Ревайв долгое время не работал как надо — игрок почти никогда не успевал поднять товарища
Жесты
После публикации нескольких видеороликов (можете посмотреть их на нашем ютуб-канале, ога) с нами связался Назар «Nazzertop» Приступа — character animator, работающий в игровой индустрии. Он сделал уникальную вещь для сталкерского модостроя — переделал практически все мировые анимации для игроков. В оригинале они были… они там были.Оригинал
Анимации Назара
Вместе с Назаром к нам пришел и Родион «CorryZeron» Ловчев, профессиональный дизайнер, с которым мы разработали совершенно новый User Interface, адаптированный под нужды сетевого шутера. Он же сделал все наши логотипы.
Концепт интерфейса, который уже частично имплементирован в игру
Не могу не упомянуть еще двух членов нашей команды, которые присоединились к нам недавно:
First Person Animator: Матвей «matvig» Власов
Level Designer: Роман «Mastrex» ШумовДалее необходимо настроить пути к заголовочным файлам и библиотекам импорта внешних библиотек. Ниже пойдёт таблица проектов (в порядке построения) с необходимыми для них библиотеками из директории xr_src\SDK, пути настраиваются здесь:
Распространенные сообщения об ошибках в xrengine.exe
Наиболее распространенные ошибки xrengine.exe, которые могут возникнуть:
• «Ошибка приложения xrengine.exe.»
• «Ошибка xrengine.exe.»
• «Возникла ошибка в приложении xrengine.exe. Приложение будет закрыто. Приносим извинения за неудобства.»
• «xrengine.exe не является приложением Win32.»
• «xrengine.exe не запущен».
• «xrengine.exe не найден.»
• «Не удается найти xrengine.exe.»
• «Ошибка запуска программы: xrengine.exe.»
• «Неверный путь к приложению: xrengine.exe».Эти сообщения об ошибках .exe могут появляться во время установки программы, во время выполнения соответствующей программы, STALKER — Clear Sky, при запуске или завершении работы Windows, или даже во время установки операционной системы Windows. Отслеживание момента появления ошибки xrengine.exe является важной информацией при устранении неполадок.
3 простых шага по исправлению ошибок XRENGINE.EXE
1- Очистите мусорные файлы, чтобы исправить xrengine.exe, которое перестало работать из-за ошибки.
- Запустите приложение Asmwsoft Pc Optimizer.
- Потом из главного окна выберите пункт «Clean Junk Files».
- Когда появится новое окно, нажмите на кнопку «start» и дождитесь окончания поиска.
- потом нажмите на кнопку «Select All».
- нажмите на кнопку «start cleaning».
2- Очистите реестр, чтобы исправить xrengine.exe, которое перестало работать из-за ошибки.
- Запустите приложение Asmwsoft Pc Optimizer.
- Потом из главного окна выберите пункт «Fix Registry problems».
- Нажмите на кнопку «select all» для проверки всех разделов реестра на наличие ошибок.
- 4. Нажмите на кнопку «Start» и подождите несколько минут в зависимости от размера файла реестра.
- После завершения поиска нажмите на кнопку «select all».
- Нажмите на кнопку «Fix selected».
P.S. Вам может потребоваться повторно выполнить эти шаги.
3- Настройка Windows для исправления критических ошибок xrengine.exe:
- Нажмите правой кнопкой мыши на «Мой компьютер» на рабочем столе и выберите пункт «Свойства».
- В меню слева выберите » Advanced system settings».
- В разделе «Быстродействие» нажмите на кнопку «Параметры».
- Нажмите на вкладку «data Execution prevention».
- Выберите опцию » Turn on DEP for all programs and services ….» .
- Нажмите на кнопку «add» и выберите файл xrengine.exe, а затем нажмите на кнопку «open».
- Нажмите на кнопку «ok» и перезагрузите свой компьютер.