|
| Anchorhead |
| Лео Перуц - Шведский всадник |
|
| |
Хакерствую. Есть игра, я про нее на форуме писал - Grimoire. Автор, крайне своеобразный тип, пилил ее 20 с чем-то лет, в прошлом году она вышла в стиме. Музыка в игре в формате MIDI и ее вывод осуществляется средствами давно объявленного устаревшим компонента DirectMusic на MIDI порт по умолчанию. В эпоху до Windows Vista портом по умолчанию был MIDI Mapper, позволявший перенаправлять вывод куда угодно, на любое устройство (синтезатор), потом мелкомягкие MIDI Mapper убрали и прибили этот порт гвоздями к программному синтезатору Microsoft, качество звучания которого, мягко говоря, оставляет желать лучшего. Я дизассемблировал код аудио движка игры, восстановил его, вплоть до реконструкции классов (игра написана на C++) и на основе полученных данных наваял wrapper (обертку) интерфейсов DirectMusic - по подобному принципу работают врапперы DirectDraw/Direct3D -> OpenGL и Glide -> DirectDraw/Direct3D. DLL с враппером внедряется в адресное пространство игры загрузчиком и перехватывает функции интерфейсов DirectMusic, вместо порта по умолчанию подсовывая порт синтезатора, который мне нужен.
Теоретически, поскольку у меня теперь на руках есть восстановленный код аудио движка, я могу переписать весь движок с нуля и засунуть его в игру вместо того, который там есть сейчас. Могу написать свой движок с маджонгом и гейшами, могу написать движок на основе какой-нибудь библиотеки с поддержкой звуковых банков (soundfonts) вроде BASS (библиотека, использовавшаяся помимо прочего в старых версий AIMP). Но для этого мне нужно проводить полноценную крупномасштабную операцию на исполняемом файле игры, изрезать его по живому вдоль и поперек. С помощью враппера такую задачу нормально просто не решить. У меня есть опыт такой работы - когда-то я участвовал в проектах по переводу визуальных новелл Cartagra и Kara no Shoujo и мне пришлось изрезать их движки так, что на них живого места не осталось. Размер патча, который я вставлял в экзешник Kara no Shoujo, составлял несколько тысяч строк ассемблерного кода и патч для Cartagra был сравнимого объема. Когда объявился паблишер, заинтересованный в издании Cartagra и Kara no Shoujo для западного рынка, ему пришлось переносить код новелл на другой движок - японцы сказали им, что адаптировать движок для английского текста невозможно. Когда я об этом узнал, мне было очень весело - "невозможную" работу я проделал не имея доступа к исходникам движка, чисто хакерскими методами. К сожалению, я не могу проводить подобные операции на исполняемом файле Grimoire, потому что автор все еще выкатывает патчи (и судя по всему, остановится не скоро). С выходом очередного патча вся работа пойдет насмарку.
Добавлено (через 23 мин. и 52 сек.):
TL;DR: игра воспроизводит музыку в формате MIDI, пользуясь средствами компонента DirectMusic, входившего в состав DirectX (пока его оттуда не выкинули, объявив устаревшим) и направляет вывод на стандартный программный синтезатор MIDI, являющийся частью Windows. Я работаю над тем, чтобы можно было направить вывод на любой синтезатор по выбору пользователя.
Исправлено: Serke, 30 апреля 2018, 03:10Если тебе дадут линованную бумагу, пиши поперек. |
|