Battlefield: Bad Company
Sobre el proyecto
Battlefield: Bad Company es un videojuego de acción en primera persona desarrollado por EA Digital Illusions CE y distribuido por Electronic Arts. Bad Company es el primer juego de la serie Battlefield desarrollado para Xbox 360 y PlayStation 3. Fue lanzado en Norteamérica el 23 de junio de 2008, seguido de un lanzamiento en Europa el 26 de junio. El juego fue insinuado justo antes del lanzamiento de Battlefield 2, y anunciado dieciséis meses más tarde. Una secuela, Battlefield: Bad Company 2 fue lanzada para PlayStation 3, Xbox 360 y Windows.
Información oficial del proyecto
Battlefield: Bad Company — Статическая ПК-рекомпиляция
Проект статической рекомпиляции культового консольного шутера Battlefield: Bad Company (2008) с архитектуры Xbox 360 (PowerPC) на нативную архитектуру ПК x86-64 / C++23 на базе ReXGlue SDK.
🎮 О проекте
- Игра: Battlefield: Bad Company (USA)
- Разработчик: EA Digital Illusions CE (DICE)
- Издатель: Electronic Arts
- Движок: Frostbite Engine 1.0 (дебют технологии разрушаемости Destruction 1.0)
- Платформа оригинала: Xbox 360 / PlayStation 3 (консольный эксклюзив, никогда официально не выходивший на ПК)
- Title ID:
454107F9 - Версия исполняемого файла:
default.xex(май 2008)
⚙️ Архитектура и технические особенности
-
Рекомпиляция PowerPC в C++23:
- 367 сгенерированных модулей C++ (
generated/default/) - Обработка неразрешенных переходов (indirect calls):
0x826F3AC8,0x82573640,0x82936828.
- 367 сгенерированных модулей C++ (
-
Frostbite 1.0 Memory Subsystem:
- Прекоммит системных пулов и физических алиасов Xbox 360:
0x00000000(1 ГБ)0x40000000(1 ГБ)0x80000000(512 МБ)0xA0000000(512 МБ)0xC0000000(512 МБ)0xE0000000(~510 МБ)
- Обход W^X (Write XOR Execute): автоматическая итерация
VirtualQueryи снятие ограничений (PAGE_EXECUTE_READWRITE) для кода и данных (0x82000000–0x83000000).
- Прекоммит системных пулов и физических алиасов Xbox 360:
-
Графический конвейер (Direct3D 12):
- ROV (Rasterizer-Ordered Views) для корректной эмуляции блендинга eDRAM, освещения и HDR Frostbite.
readback_resolve = "fast"иhost_present_from_non_ui_thread = trueдля предотвращения микрофризов при чтении буферов адаптации яркости процессором.- Многопоточная компиляция конвейеров шейдеров (
d3d12_pipeline_creation_threads = -1).
-
Аутентичность и физика (Ретро-гейминг):
- Частота кадров: по умолчанию зафиксирована на 30 FPS (
badco_fps_60 = false) для предотвращения рассинхронизации физики разрушений и скриптов DICE. При желании доступен патч 60 FPS вsettings/hardware.toml. - Язык и озвучка: оригинальная консольная версия (английский интерфейс/диалоги отряда B-Company, аутентичные русские реплики противников в бою).
- Частота кадров: по умолчанию зафиксирована на 30 FPS (
🛠️ Сборка в Visual Studio
ВАЖНО: Компиляция запускается исключительно пользователем внутри Visual Studio во избежание блокировок и конфликтов сборщика.
- Откройте папку
C:\Recompiles\Bad Companyв Visual Studio 2022 (Файл -> Открыть -> Папка). - Выберите конфигурацию пресета
local-win-relwithdebinfo(илиlocal-win-release). - Дождитесь автоматической генерации кэша CMake.
- Нажмите F7 (или Ctrl + Shift + B) для сборки решения.
- Исполняемый файл появится в
out/build/local-win-relwithdebinfo/badcompanyrecomp.exe.
🚀 Запуск и отладка
- Запуск без отладчика: Ctrl + F5.
- Все настройки графики, окна и рендеринга находятся в файле
settings/hardware.toml. - Настройки контроллера и мыши/клавиатуры:
settings/mapping.toml. - Логи выполнения и stub sweep сохраняются в папке
logs/.
🚦 Текущий статус проекта (Proof of Concept)
[!WARNING] ПРОЕКТ НАХОДИТСЯ В СТАДИИ PROOF OF CONCEPT (НЕПРОХОДИМО / РАННИЙ ЭТАП). Игра компилируется и стартует в нативное окно Windows x86-64, но на текущий момент непроходима. Ведется активная работа над обходом проверок дискового кэша Frostbite.
Что работает:
- Чистая сборка C++23: 54 126 функций PowerPC рекомпилированы в C++23 и успешно собираются в Visual Studio 2022 без ошибок линковки.
- Инициализация подсистем Xenon: Память, виртуальные и физические пулы, аудиоядро XMA, D3D12 рендерер и ввод SDL инициализируются корректно.
- Обработка динамической памяти: Встроенный On-Demand Page Fault Handler и
SafeCommitRangeпредотвращают падения0xC0000005по нескоммиченным адресам памяти. - Прохождение файлового зонда: Проверка DVD-привода
GAME:\dvd-prbуспешно проходит с правамиallow_game_relative_writes = true. - Создание окна: Графическое окно игры
badcompanyrecompсоздается, потоки отрабатывают фоновый цикл (потребление до ~312 МБ RAM).
Текущая граница выполнения:
- Остановка: В подсистеме ввода-вывода Frostbite (
SerializingIoManager) при калибровке дискового кэша (\Device\Harddisk0\Cache0/IoDismountVolumeByFileHandle). Движок ожидает физический HDD кэш консоли и вызываетKeBugCheck(0). - Следующий шаг: Эмуляция режима работы без HDD (Xbox 360 Arcade/Core) или байпас кэша для перехода к заставкам DICE/EA и главному меню.