DevLog: L2x.RED / UE2 Editor on modern C++ toolchain

rmx

BPD🖤OCD
Let's make it happen
Победитель в номинации 2025
Чёрный Стрелок
Стальной Визионер
Старожил I степени
Сообщения
148
Розыгрыши
0
Репутация
242
Реакции
202
Баллы
1 405
L2x Reanimated Editor



Всем привет,

В этой теме буду для поднятие ЧСВ публиковать иногда свой прогресс по реанимированию UE2 едитора на современный лад а также полную адаптацию с клиентами С1-ХФ. Шара и прочее будет позже (хз когда).

Что сделано на данный момент:
- Переделанны все файлы проектов солюшена на поддержку v143 msvc тулчайэна (compatibility layer)
- Миграция и фиксы исходников из шары на поддержку v143 msvc тулчэйна
- Миграция частей легаси кода где использовались функции старого АПИ MSVCRT.dll
- Миграция всех путей с относительных `../` на использование макросов типа `$(SolutionDir)`
- Вырезано тоннa коментов что способствовали захламлению ИИ контекста
- Вырезано всё что связано с поддержкой:
  • PS2/XBox/NGC (Nintendo Game Cube)
  • FreeBSD, SymbianOS x32
  • IBM OS/2
  • MacOSx / Apple
  • BEOS / RISCOS / SunOS
  • Borland C compiler
  • Watcom C compiler
  • Metreworks compiler
  • CodeWarrior IDE
  • QWS
- Добавлена поддержка OpenGL для самого едитора (в оригинале только игра может использовать этот графический бэкэнд)
Код:
[Engine.Engine]
RenderDevice=OpenGLDrv.OpenGLRenderDevice
- Изменен солюшен таким образом чтоб проекты которые реально зависят от UCC, вызывали его когда файлы были изменены или нужен фулл ребилд (UnrealEd.exe зависит от Engine.u etc)
Код:
38>UCC: commandlet finished; next appPreExit() (UObject::StaticExit / PurgeGarbage). Can take minutes with no lines while loaded packages unload.
38>UCC: appPreExit() - Core UObject shutdown (see UObject::StaticExit); then appExit().
38>UCC: appPreExit() returned; appExit() next (config, file stream, platform exit).
38>[Core] FFileStream::Destroy: inline shutdown (Win32 has no streaming thread; old code waited forever on Destroyed==1).
38>========== UccDepend: ucc make finished OK ==========
38>
38>========== UnrealEd post-build: UccDepend / ucc phase finished for this target ==========
38>Done building project "UnrealEd.vcxproj".
39>------ Rebuild All started: Project: 0 UT2 Code, Configuration: Debug Win32 ------
39>========== 0 UT2 Code: UccDepend -full + ucc make - long run; do not cancel ==========
========== Rebuild All: 27 succeeded, 0 failed, 12 skipped ==========
========== Rebuild completed at 8:04 AM and took 01:29.777 minutes ==========
- Добавлено очень много логов, для более детального логирование всем важным проектам с

Screenshot 2026-05-24 073513.webp

Что планирую:
-
Добавить очень много unit/e2e/integration тестов...
- Мигрировать легаси документацию на современный лад.

- Добавить поддержку бэкэнда DirectX11 - DirectX12
- Добавить поддержку бэкэнда на Vulkan
- Добавить поддержку компиляции в x64bit
- Убрать все ассеты связанные с Unreal Tournament игрой из сурсов едитора
- Обновить интерфэйс в тёмную тему, в общем немного модернизировать
- Добавить возможность экстенда Engine.dll и прочих нативных библиотек на уровне солюшина игры, без модификации сурсов самого едитора, для игр которые имеют на прямую новые функции добавленные в сам Engine.dll/Core.dll/NWindow.dll (hello Lineage2...)
- Добавить поддержку вызова клиента игры в дебаг режиме прямо из едитора/солюшина проекта в Visual Studio
- Добавить интеграцию с файлами сервера а также быстрой синхронизации и сохранения файлов из данных в уровне
- Тул масс-экспорта:
  • сеток (?meshes/levels?) в .ase
  • анимаций в .psk/.psa
  • notifiers
 
Последнее редактирование:
Что планирую:
-
Добавить очень много unit/e2e/integration тестов...
- Вырезать всё что касается DirectX 8.0/8.1 и мигрировать полностью на DirectX11 - DirectX12
- Добавить поддержку бэкэнда на Vulkan
- Добавить поддержку компиляции в x64bit
- Убрать все ассеты связанные с Unreal Tournament игрой из сурсов едитора
- Обновить интерфэйс в тёмную тему, в общем немного модернизировать
- Добавить возможность экстенда Engine.dll и прочих нативных библиотек на уровне солюшина игры, без модификации сурсов самого едитора, для игр которые имеют на прямую новые функции добавленные в сам Engine.dll/Core.dll/NWindow.dll (hello Lineage2...)
- Добавить поддержку вызова клиента игры в дебаг режиме прямо из едитора/солюшина проекта в Visual Studio
- Добавить интеграцию с файлами сервера а также быстрой синхронизации и сохранения файлов из данных в уровне
учитывая специфику модификации игры самым актуальным добавлением будет конвертор\сериализатор из новых в старые
для всех типов паков .utx .usx .unr .ukx

а так затея интересная, особенно если он будет чистым без глюков и багов))
 
учитывая специфику модификации игры самым актуальным добавлением будет конвертор\сериализатор из новых в старые
для всех типов паков .utx .usx .unr .ukx

а так затея интересная, особенно если он будет чистым без глюков и багов))
Кстати вариант. Спасибо за идею. Изначально думал просто сделать универсальную читаемость файлов а запись в 1 универсальный, но можно и конвертер.
Сообщение объединено:
  • Вырезал тонну коментов что способствовали захламлению ИИ контекста
  • Вырезал всё что касалось поддержки:
    • FreeBSD, SymbianOS x32
    • IBM OS/2
    • MacOSx / Apple
    • BEOS / RISCOS / SunOS
    • Borland C compiler
    • Watcom C compiler
    • QWS

StatusFilesBlankCommentCode
Before (ut-retail-2003-v2107)177013494487193573728
After (fork)164012808878721546406
 
Последнее редактирование:
кстати что ещё будет полезно это массовый экспорт кнопкой, например сеток в .ase, анимаций в .psk и .psa, (аналог ю модела)
единственное что бы ещё сделать это экспорт и импорт нотифаев, а то если с нуля собирать то много клацать
 
кстати что ещё будет полезно это массовый экспорт кнопкой, например сеток в .ase, анимаций в .psk и .psa, (аналог ю модела)
единственное что бы ещё сделать это экспорт и импорт нотифаев, а то если с нуля собирать то много клацать
1780041622953.webp

Да буду делать что надо мне и если что-то дельное нужно будет комюнити и пригодится и мне почему бы и нет. Цель иметь один нормальный едитор и не переключатся между тулами, иметь доки прям в приложении нормальные. Тултипы, аксессибилити (drag & drop, ex. texturu v slot), и интероп с другими приложениями (import/export blender, ue5 etc)
 
Посмотреть вложение 95635

Да буду делать что надо мне и если что-то дельное нужно будет комюнити и пригодится и мне почему бы и нет. Цель иметь один нормальный едитор и не переключатся между тулами, иметь доки прям в приложении нормальные. Тултипы, аксессибилити (drag & drop, ex. texturu v slot), и интероп с другими приложениями (import/export blender, ue5 etc)
дак давай уже туда и ютуб и мс тимс добавим))
 
- Частично восстановил / пофиксил функционал проекта `DebuggerLaunch` для запуска Unreal Script (UCC) в дебаг режиме. Но есть еще некоторые косяки и заглушки.
- Продолжаю чистку проекта, добавил .clangd, .clang-format, .clang-tidy конфиги для более приличного форматирования, статического анализа и более глубокого анализа в реалтайме. Отформатил и почистил пока только `Core` проект.
- Пофиксил пару багов связанных с автосэйвом карт в едиторе. "Couldnt save package. Maybe file is readonly?"
- Пофиксил запуск игрового режима "Play game" изнутри едитора, еще есть косяки и проблемы с расширением экрана при запуске активной игры.

1780197712375.webp
Сообщение объединено:
- Чищу дальше кодбэйз от шлака; убрал установщики D3D8
Код:
QFE\ARA\Q321178_WXP_SP1_x86_ARA.exe
QFE\CHS\Q321178_WXP_SP1_x86_CHS.exe
QFE\CHT\Q321178_WXP_SP1_x86_CHT.exe
QFE\CSY\Q321178_WXP_SP1_x86_CSY.exe
QFE\DAN\Q321178_WXP_SP1_x86_DAN.exe
QFE\DEU\Q321178_WXP_SP1_x86_DEU.exe
QFE\ELL\Q321178_WXP_SP1_x86_ELL.exe
QFE\ENU\Q321178_WXP_SP1_x86_ENU.exe
QFE\ESN\Q321178_WXP_SP1_x86_ESN.exe
QFE\FIN\Q321178_WXP_SP1_x86_FIN.exe
QFE\FRA\Q321178_WXP_SP1_x86_FRA.exe
QFE\HEB\Q321178_WXP_SP1_x86_HEB.exe
QFE\HUN\Q321178_WXP_SP1_x86_HUN.exe
QFE\ITA\Q321178_WXP_SP1_x86_ITA.exe
QFE\JPN\Q321178_WXP_SP1_x86_JPN.exe
QFE\KOR\Q321178_WXP_SP1_x86_KOR.exe
QFE\NLD\Q321178_WXP_SP1_x86_NLD.exe
QFE\NOR\Q321178_WXP_SP1_x86_NOR.exe
QFE\PLK\Q321178_WXP_SP1_x86_PLK.exe
QFE\PTB\Q321178_WXP_SP1_x86_PTB.exe
QFE\PTG\Q321178_WXP_SP1_x86_PTG.exe
QFE\RUS\Q321178_WXP_SP1_x86_RUS.exe
QFE\SVE\Q321178_WXP_SP1_x86_SVE.exe
QFE\TRK\Q321178_WXP_SP1_x86_TRK.exe
- 🎉 Успешно пофиксил Release build (починил/приглушил не ломая фунцкионал еще ~30 ошибок совместимости с msvc v143/VS 2022), это даёт мне возможность использовать .pdb релизной версии для сокращения неизвестных функций аналогичной библиотеки файлов игры при депомпиле и сокращать зону поиска измененных функций используя бинарный дифф.
1780432351118.webp

Код:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- ItemDefinitionGroup merges into every ClCompile (works from Directory.Build.props). -->
  <ItemDefinitionGroup>
    <ClCompile>
     <!-- Additional compatibility settings for VS2022 -->
      <PreprocessorDefinitions>WINDOWS_IGNORE_PACKING_MISMATCH;_CRT_SECURE_NO_WARNINGS;_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
     
       <!-- Disable warnings that cause issues/treated as errors -->
      <!-- 4121/4324: Win10 SDK + 4-byte pack; 445x: legacy param names vs members; 4595: inline global new -->
      <DisableSpecificWarnings>4996;4267;4244;4018;4800;4868;4121;4324;4458;4459;4457;4302;4595;4740;%(DisableSpecificWarnings)</DisableSpecificWarnings>
     
      <!-- Reduce warning level to be more permissive -->
      <WarningLevel>Level2</WarningLevel>
      <TreatWarningAsError>false</TreatWarningAsError>
      <!-- Disable /permissive- (ConformanceMode) so PMF delegates and templates match VS2003 MSVC. -->
      <ConformanceMode>false</ConformanceMode>
      <!-- /Zi not /ZI: Edit and Continue conflicts with linker settings on VS2022 (LNK4075). -->
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
     
       <!-- Aggressive compatibility compiler flags -->
      <AdditionalOptions>
        /utf-8                    <!-- Force UTF-8 encoding for source files -->
        /Zc:wchar_t-              <!-- wchar_t as unsigned short so TEXT()/TCHAR* match legacy guard/NoRoute throws. -->
        /Zc:StrictStrings-        <!-- Disable strict string literal type checking (allows char* from string literals) -->
        /Zc:__STDC__-             <!-- Disable __STDC__ macro definition -->
        /Zc:rvalueCast-           <!-- Disable rvalue reference casting rules -->
        /Zc:auto-                 <!-- Disable C++11 auto keyword rules -->
        /Zc:forScope-             <!-- Disable for-loop scope rules (variables leak outside loop) -->
        /Zc:implicitNoexcept-     <!-- Disable implicit noexcept on destructors -->
        /Zc:inline-               <!-- Disable inline function rules -->
        /Zc:throwingNew-          <!-- Allow new operator to throw exceptions -->
        %(AdditionalOptions)
        /permissive               <!-- MSVC extensions / non-standard lookup (legacy C++ `template` pattern) -->
      </AdditionalOptions>
    </ClCompile>
    <Link>
      <!-- Old static libs (DX8, Karma) expect legacy MSVCRT printf/snprintf names. -->
      <AdditionalDependencies>legacy_stdio_definitions.lib;legacy_stdio_wide_specifiers.lib;oldnames.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <!-- libci.lib: legacy incremental-link helper; not shipped with VS2022+. -->
      <IgnoreSpecificDefaultLibraries>libci.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
      <!-- DirectX8 / dinput8 static libs lack SAFESEH; required for all Win32 DLLs (primer). -->
      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
    </Link>
  </ItemDefinitionGroup>
</Project>

Итого за где-то пол года не активной работы...

UE2003 Retail on VS 2022; v143 msvc toolchain / Fixed fork (Debug + Release)

image.webp -
 
Последнее редактирование:
На самом деле NC Soft соблюдает принцип обратной совместимости пакетов в новых хрониках. Даже в самых последних есть пакеты которые были созданы ещё в эпоху с1-c5. Поэтому написав редактор для современных хроник всё старое спокойно подтянется. А зная различия во всех FileVersion для конкретного формата пакета можно экспортировать в люьые низшие хроники. Там просто свистелки и перделки будут обрезаться.
 
На самом деле NC Soft соблюдает принцип обратной совместимости пакетов в новых хрониках. Даже в самых последних есть пакеты которые были созданы ещё в эпоху с1-c5. Поэтому написав редактор для современных хроник всё старое спокойно подтянется. А зная различия во всех FileVersion для конкретного формата пакета можно экспортировать в люьые низшие хроники. Там просто свистелки и перделки будут обрезаться.
В корне не верно, путь разработки должен пройти с нижних до высших хрониках а не наоборот. Как минимум потому-что сравнивать диффы новоедений легче имея библиотеку уже отреверсенных функций, структур и т.д. Новые .dll/.exe и прочее просто легче сравнивать от хроники до хроники что конкретно поменялось, добавилось, удалилось. Вместо того чтоб гадать что часть HFa а что было унаследованно от старых хроник.


Not for now, very busy at work and with some IRL shit I need to resolve until new year. When I'll have enough money to sustain myself without any work and fully focus on my projects, I'll do much more, for now it is what it is, but I never left the "grand ideas" I have.

All my work would be open sourced and available to the public once I would profit at least somehow from it first.
 
В корне не верно, путь разработки должен пройти с нижних до высших хрониках а не наоборот. Как минимум потому-что сравнивать диффы новоедений легче имея библиотеку уже отреверсенных функций, структур и т.д. Новые .dll/.exe и прочее просто легче сравнивать от хроники до хроники что конкретно поменялось, добавилось, удалилось. Вместо того чтоб гадать что часть HFa а что было унаследованно от старых хроник.

Вы вольны поступать как считаете нужным. Это конечно хорошо идти подобным путём, так MasterToma делает свои сервера, но при условии редких изменений. Для PTS серверов они редки из-за малого количества сливов. Но для клиентов совсем другая история. Поэтому дауншифтинг более рационален в плане экономии времени т.к. будет заложена в модель достаточная избыточность и гибкость, а также устранены баги ранних версий. Вот вам на всякий случай хронология изменений в клиентах. Вдруг будет полезна.
 

Вложения

  • Lineage 2 Versions.webp
    Lineage 2 Versions.webp
    224,7 КБ · Просмотры: 88
Большую работу проделал, круто.
 
Назад
Сверху Снизу