Решил я на выходных поностальгировать в Silent Storm. Установил, запустил и как-то не пошло… Разрешение, то ладно, можно и в 4:3 поиграть. Но, отсутствие теней, эффектов и дикий FPS мешали погрузиться в игру.
В сообществе стима уже были варианты исправлений, но использовать чужую dll-ину не хотелось. Да и не все мои хотелки она правила. Автор патча Novik65 в одном из обсуждений рассказал, что именно надо поправить и, даже, дал ссылку на исходники. Которые, к сожалению, за давностью лет потерялись.
Вот и появился повод прокачать скилл программинга 😊 Итак, порядок действий был таков:
- Написать «чистый» прокси для библиотеки d3d9.dll и проверить работоспособность экспортируемых функций.
- Реализовать свои интерфейсы IDirect3D9 и IDirect3DDevice9, которые будут вызывать методы настоящих.
- Поправить функцию Direct3DCreate9, так чтобы она создавала фальшивый IDirect3D9.
- Поправить метод IDirect3D9::CreateDevice, так чтобы он создавал фальшивый IDirect3DDevice9. Здесь же принудительно включается VSync.
- Поправить метод Direct3DDevice9::GetAvailableTextureMem. Дело в том, что игра кушает результат в int и не переваривает размер видеопамяти современных видюх. Надо урезать результат до 2-х гигов, чтобы все работало правильно.
Пишем чистый прокси.
Я в этом вопросе плохо разбираюсь, поэтому нашел статью грамотного человека:
Она рассказывает про прокси для ddraw.dll, но принцип тот же: получаем полный перечень всех экспортируемых функций, загружаем оригинальную библиотеку и получаем их адреса. А дальше работает такой код для всех «чистых» функций:
extern «C» __declspec(naked) void Fake_D3DPERF_BeginEvent()
{
_asm { jmp[d3d9dll.D3DPERF_BeginEvent] }
}
Его прелесть заключается в том, что для вызова «чистой» функции достаточно знать только ее адрес. Параметры и возвращаемое значение лежат тихонько в стеке и нашей прокси-функцией не портятся.
На этом все! Собрал и подкинул фейковую d3d9.dll в папку с игрой. Игра запустилась и заработала без проблем. Значит можно продолжать.
Реализовываем свои IDirect3D9 и IDirect3DDevice9.
Открываем заголовочный файл d3d9.h и охреневаем 🤔
В этот момент, мне расхотелось играть в Silent Storm 😊 Ладно, копаем дальше, должны же быть извращенцы помимо меня. И я нашел аналогичный прокси для Pac-Man Battle Royale.
Я не скажу, что весь код этого автора мне понравился. Пришлось его рихтовать под себя. Но самое главное, прокси-методы мне не пришлось писать самому и огромный пласт нудных работ я просто скопировал себе:
void FakeDirect3DDevice9::SetCursorPosition(int X, int Y, DWORD Flags)
{
return(m_pIDirect3DDevice9->SetCursorPosition(X, Y, Flags));
}
Подмена интерфейсов и правка багов.
Вот тут начинается самое интересное. Мне нужно было переписать некоторые функции, чтобы они возвращали мои липовые интерфейсы. И, конечно, исправляли недочеты игры. Первым делом переписал Direct3DCreate9, возвращающую интерфейс на объект Direct3D9.
extern «C» IDirect3D9* WINAPI Fake_Direct3DCreate9(UINT SDKVersion)
{
typedef IDirect3D9* (WINAPI * DIRECT3DCREATEPROC)(UINT SDKVersion);
DIRECT3DCREATEPROC Direct3DCreate9Proc = (DIRECT3DCREATEPROC)d3d9dll.Direct3DCreate9;
IDirect3D9* pFakeDirect3D9 = Direct3DCreate9Proc(SDKVersion);
return new FakeDirect3D9(pFakeDirect3D9);
}
Идея всех подобных функций проста: сначала я создаю настоящий Direct3D9 объект (первые три строчки в теле функции), а потом создаю свой прокси-объект, которому скармливаю настоящий (последняя строка). В дальнейшем все методы прокси либо будут передавать управление настоящему объекту, либо вносить правки и уже потом передавать управление. Наружу из такой функции, естественно возвращается интерфейс на поддельный объект.
Теперь очередь за IDirect3D9::CreateDevice.
HRESULT FakeDirect3D9::CreateDevice(UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DDevice9** ppReturnedDeviceInterface)
{
pPresentationParameters->PresentationInterval = D3DPRESENT_INTERVAL_ONE; // force VSYNC
HRESULT hres = m_pIDirect3D9->CreateDevice(Adapter, DeviceType, hFocusWindow, BehaviorFlags, pPresentationParameters, ppReturnedDeviceInterface);
*ppReturnedDeviceInterface = new FakeDirect3DDevice9(*ppReturnedDeviceInterface);
return(hres);
}
Тут, тоже самое. За исключением первой строчки в теле метода. Именно она отвечает за включение вертикальной синхронизации. Никаких дополнительных проверок я делать не стал — ребята из Nival дичи не творили, все параметры передают хорошие.
Ну и последний метод, исправляющий баг с тенями и эффектами:
UINT FakeDirect3DDevice9::GetAvailableTextureMem(void)
{
UINT ret = m_pIDirect3DDevice9->GetAvailableTextureMem();
if (ret > (UINT)INT_MAX)
ret = (UINT)INT_MAX;
return(ret);
}
Исправляем то, о чем я писал выше. Игра внутри себя хранит результат в int (максимум 2’147’483’647), а надо хранить в unsigned int (максимум 4’294’967’296). Ну т.е. на видюхе с более чем 2 гига оперативки, int захлебывается и уходит в отрицательные значения, что и приводит к неверному авто-определению настроек. Данный метод, просто обрубает настоящий результат по границе в 2 гига.
Итог.
Update: Добавил фикс для разрешения 1920х1080. Мне не нравится результат — многие надписи обрезаются по вертикали. В комментариях есть скриншоты с примерами. Чтобы перейти в FullHD, в игре нужно установить разрешение 800х600.
Тут лежат исходники и собранная dll. Так как я играю на рабочем компьютере и не сильно заморачивался со сборкой, то возможны зависимости от 2019-й студии. Ну да это уже совсем другая история 😊
Страница 1 из 2
-
coole
Трамвайный Пастырь
- Регистрация:
- 12 окт 2015
- Сообщения:
- 1.444
Окей, господа форумчане, есть ли какой-то способ запустить Silent Storm на ноутбуке со встроенной видеокартой (Intel HD 2000/3000)?
При запуске вместо заставок (или что там должно быть) сразу чёрный экран, а в диспетчере задач игра «не отвечает»
На английском форуме прочитал что можно использовать 3DAnalyse для запуска, но мне этот вариант не помог вообще.
А ещё я ставил фанпатч отсюда. Тоже не помогло. -
@coole, Я не думаю, что дело во встроенной видеокарте. Самому доводилось играть. Скорее всего, или ОС не такая, или другие части железа виноваты.
-
coole
Трамвайный Пастырь
- Регистрация:
- 12 окт 2015
- Сообщения:
- 1.444
@Mel Shlemming, ну так давайте вместе разберёмся, есть идеи как можно определить в чём проблема? Под чем играли сами?
-
@coole, через батник на одном ядре процессора?
-
coole
Трамвайный Пастырь
- Регистрация:
- 12 окт 2015
- Сообщения:
- 1.444
@BrainRipper, нет, так не пробовал
да и гуглёж как-то не помог, батник с записьюD:WindowsSystem32cmd.exe /C start /affinity 1 "F:GamesSilentstormSS2game.exe"
не делает ровным счётом ничего
— добавлено 9 июл 2017, предыдущее сообщение размещено: 9 июл 2017 —
да, под ХР эта функция не работает
— добавлено 9 июл 2017 —
окей, благодаря установленным костылям я попробовал запустить игру на одном ядре и не помогло
-
@coole, попробуйте удалить .cfgconfig.cfg перед запуском.
-
coole
Трамвайный Пастырь
- Регистрация:
- 12 окт 2015
- Сообщения:
- 1.444
Под семёркой работает, странно.
@TheMadLynx, этот конфиг как я понял создаётся при первом запуске, его не было. Но и его появление ситуацию не исправило, под ХР игра всё так же не запускается. -
Sharp_ey
терять и врать
Legacy
- Регистрация:
- 23 сен 2006
- Сообщения:
- 10.005
Что если попробовать поставить не стим-версию?
-
Так а сама игра из стима? Если да, то первым же делом нужно выключить оверлей.
-
coole
Трамвайный Пастырь
- Регистрация:
- 12 окт 2015
- Сообщения:
- 1.444
@TheMadLynx, нет, стоит не-стим версия
-
Eraser
Чистильщик
Хелпер
- Регистрация:
- 29 дек 2001
- Сообщения:
- 9.965
@coole, т.е. версия со старфорсом на двух CD? Дело может быть в старфорсе в таком случае, у меня когда-то давно на одном из XP-конфигов игра не запустилась вообще.
-
coole
Трамвайный Пастырь
- Регистрация:
- 12 окт 2015
- Сообщения:
- 1.444
@Eraser, у меня стоит репак от R.G. Catalyst, сейчас попробую GOG версию поставить
-
ki86m
- Регистрация:
- 6 ноя 2013
- Сообщения:
- 53
Попробуй подменить DirectDraw на библиотеки из WineD3D http://downloads.fdossena.com/geth.php?r=wined3d-recommended
скачать и распаковать в папку с игрой -
coole
Трамвайный Пастырь
- Регистрация:
- 12 окт 2015
- Сообщения:
- 1.444
@ki86m, теперь игра стала вылетать при запуске
-
ki86m
- Регистрация:
- 6 ноя 2013
- Сообщения:
- 53
Ошибку выдает?
Попробуй удалять d3d*.dll по одной -
coole
Трамвайный Пастырь
- Регистрация:
- 12 окт 2015
- Сообщения:
- 1.444
@ki86m, ладно, я разобрался, использовал d3d8.dll и всё как было сказано в readme
по прежнему чёрный экран и «не отвечает» -
Доброго времени суток. Поставил Silent Storm Gold Edition [GOG] на ОС Windows 8.1 Pro x64. Установка прошла нормально и долгое время всё работало как надо. Изредка, конечно, бывали вылеты (ошибка «Game.exe»), но в целом они не доставляли неудобств. Вылеты были крайне редки. Но стоило мне дойти до задания с огромным заводом (повреждённым), где нужно найти документы о производстве экспериментального оружия, захватить руководителя и набрать мешок всякого добра, то количество вылетов увеличилось в десятки раз, причём не с самого начала, а с момента, когда практически закончил зачистку главного корпуса. На его крыше почти после каждого действия игра вылетала. Снова, снова и снова.
Режимы совместимости ничего не дают. Модификации отключены. Ничего дополнительно не ставил.
Товарищи, какие у вас есть соображения по данной проблеме?
Вложения:
Последнее редактирование: 4 дек 2018
-
-
Eraser
Чистильщик
Хелпер
- Регистрация:
- 29 дек 2001
- Сообщения:
- 9.965
@Maverick_Forever, в двухдисковом издании была точно такая же проблема (в этой и ещё нескольких миссиях).
Починить не удалось.Доигрывал через квиксейвы на каждом шагу. В стимовской версии нет таких проблем.
-
@Maverick_Forever, насколько мне известно, страдают от этого обладатели видеокарт отличных от GeForce и количества ОЗУ более 4 ГБ. В папке с игрой должен быть файл d3d9.dll. В ГОГ-версии он, скорее всего, пропатчен сторонними умельцами, чтобы обладатели радеонов видели тени. Поэтому предлагаю пока попробовать два варианта:
1. удалить файл d3d9.dll из папки с игрой;
2. все настройки графики снизить на самый минимум, кроме разрешения. Без теней, вроде, должно работать стабильно.Можно взять патч для стим-версии: Version SilentStormSteamVersion/S2 — novik65
Последнее редактирование: 5 дек 2018
-
Ardash
Переводчик
- Регистрация:
- 5 окт 2017
- Сообщения:
- 1.019
Offtop
У меня в свое время, когда игра была на дисках со старфорсом, эта миссия вообще баговала нещадно. Иногда, в самом начале миссии, весь завод буквально обрушивался, погребая под собой добрую часть вражин и неписей. А иногда запускалась нормально
Страница 1 из 2
Обновлено: 03.02.2023
It seems that you’re using an outdated browser. Some things may not work as they should (or don’t work at all).
We suggest you upgrade newer and better browser like: Chrome, Firefox, Internet Explorer or Opera
The search term must be at least 3 characters long
Is there any way to get the game to function in windowed mode?
TheJopp: Is there any way to get the game to function in windowed mode?
and change:
setvar gfx_fullscreen = 1.00
to:
setvar gfx_fullscreen = 0.00
For some reason will not work in Silent Storm Sentinels (It automatically reverts back to fullscreen )
edit: Gah I had the values mixed up =X_X=
on your desktop right click the icon and go to properties where it says target type -window and that should work
Чтоб поиграть в эту игру, и не было ошибки «Видеокарта не поддерживается», делаем так, кликаем старт, или пуск, потом выполнить, в командной строке, пишем msconfig жмем etnter, выбираем загрузка, дополнительные параметры, ставим галочку максимум памяти, 2000, подтверждаем, перезагружаемся, и играем.
Igor. (apol42rus). да ты чертов псих если думаешь что даже на момент публикации в 2к16 запуская комп с параметром что система видит только 2гига оперативки ты б еще с гигом подсказал
писав такую ахинею надо думать о последствиях. и люди состариться могут ожидая что система запустится с таким конфигом
В стиме один человек нашел способ установить SQl-сервер на Windows 10. Сам я проверить смогу нескоро, но если способ работает, это означает, что редактор можно будет запустить даже на современной ОС. Итак, что нужно делать.
Шаг 2. В скачанном дистрибутиве есть папка Setup, там мы открываем файл SqlRun.cab. Это архив, используем winrar или 7z. Ищем внутри файл с длинным названием типа SQLUNIRL.dll.XXXXXXXXXXXXXXXXXXXXXXXXXXXXX. Распаковываем файл куда-нибудь, удаляем все лишнее из названия, чтобы получилось SQLUNIRL.dll
Шаг 3.
Идем в C:WindowsSysWOW64, находим там файл sqlunirl.dll (он системный, аккуратнее). Щелкаем по нему ПКМ, Нам нужна вкладка Безопасность.
Шаг 4. Выбираем trustedinstaller и нажимаем Изменить.
Шаг 5. У вас должно быть примерно так, как на изображении. Если пользователей нет, добавьте и нажмите Применить.
Шаг 6. В группах пользователей и админов разрешите все возможные действия с этим файлом.
Теперь этот файл можно будет изменять.
Шаг 7. Сделайте резервное копирование этого файла и спрячьте в безопасном месте. Также его можно просто переименовать.
Шаг 8. Итак, с файлом sqlunirl.dll из syswow64 разобрались. Теперь на его место переносим файл из Шага 2.
Шаг 9. Запускаем установщик SQL-сервера, установка должна пройти успешно.
Шаг 10. Перезапустите систему после установки, затем пробуйте запускать редактор.
игра на вин7 идет, но не будет звуков. Читал, что надо скачать демо версию игры, и скопировать от туда файл звуков, в полную игру. Сам лично запускал на вин7, звуков не было, ломал игру через nocd, игра уже была установленая (скопировал с компа с вин.хр где установливал), поставил режим совместимости вин.хр для файла запуска игры(с расширением .exe)
На счет установки и работы без режима совместимости я не проверял, возможно устанавливаться на вин7 будет, и совместимость включать наверное не обязательно, проверте, у меня пока нет такой возможности.
Позавчера поставил с этой раздачи на семёрку. Идёт со звуками и всем-всем-всем. Единственное, в S^2 анимация у солдата при стрельбе из пистолета-пулемёта косячит и озвучка английская.
Читайте также:
- Как установить макросы на любую мышку cs go
- Системные требования final fantasy 2
- Как установить фоллаут 2
- Как установить сохранение на гта сан андреас на андроид
- Pc building simulator системные требования
Silent Storm is a more or less okay Jagged Alliance 2 clone. This game has one very annoying bug: On newer systems with >= 4GB of RAM and a recent NVidia Video Card, it will not start up, but instead display the message «Unsupported Video Card» (or «Nicht unterstütze Grafikkarte» in the German version). This is extremely annoying and there are a few workarounds which can be found on the net:
- Downgrade the NVidia Video Driver. This will not work if your Graphics Card is fairly new and the old driver doesn’t support it
- Use msconfig.exe to configure the operating system to only recognize 3GB of RAM. Forces you to reboot every time you want to use the RAM for other applications
- Physically remove RAM from your system. I’m not even going to dignify that option with a comment.
So, pretty much, you’re screwed, because the original author of the game (JoWooD Entertainment) does not give a flying crap about their game being broken. Here’s a solution:
- Update the game to version 1.02
- Get a crack for the game to disable the integrity check. I cannot tell you where to get it, but I guess any gamer knows where to get cracks or knows someone who knows…
- The crack you got should replace the «game.exe» executable of Silent Storm. When you also have the English version (as I do), the uncracked game.exe should have a MD5SUM of 3da8d20d30f99ee441af14730d5158e8 and a size of 8956928 bytes. The cracked version should have a MD5SUM of 78e7523ee377815f0454071993a7a594 and also have a size of 8956928.
Then, open game.exe with a hex editor. Go to offset 0x9bae (or 39854). You should see this:
00009B90 00 FF D3 52 57 FF 15 38 22 8B 00 8B 45 A4 50 E8 ...RW..8"...E.P.
00009BA0 1C C4 3C 00 83 C4 04 E9 01 0D 00 00 3B C7 74 2E ..<.........;.t.
00009BB0 B9 F7 51 00 00 8D 75 A4 E8 53 FE FF FF 52 BA 6B ..Q...u..S...R.k
At position 0x9bae (39854 dec) there’s the character 0x74. Change it to 0xEB. Save the file, done. The game should now work! The final executable should have a MD5SUM of 7883a81632fc707e3aa4a72072650a63.
Hammer & Sickle
Silent Storm Hammer & Sickle has the same problem. The patch is very similar: Open SICKLE.EXE, offset 0x1cba (dec 7354) and change 0x74 to 0xeb. Original MD5 of SICKLE.EXE should be bfb4eb2877573c33491e47d557646247, patched MD5 3e294c435f9f27ea639feaf239a74792.
00001CA0 57 FF 15 C0 43 91 00 8B 45 B4 50 E8 90 CB 2D 00 W...C...E.P...-.
00001CB0 83 C4 04 E9 EF FE FF FF 3B C7 74 2E B9 F7 51 00 ........;.....Q.
00001CC0 00 8D 75 B4 E8 37 FE FF FF 8B 08 57 68 B4 49 91 ..u..7.....Wh.I.
Download
If the above is too hard for you, here’s a patch executable which should do exactly what you want (patches cracked version of Silent Storm 1.02): Download
And for Hammer & Sickle 1.00: Download.
10 октября 2013
10.10.13
6
22K
ВОПРОС ЗАКРЫТ.
Вопрос закрыт автором.
Приобрел в Steam Silent Storm: Gold и очень огорчился, поняв, что игра так и не подружилась с соотношение сторон 16:9. Гугл ничего внятного не выдал, но может все таки есть какой-нибудь неоффициальный патч, который решает эту проблему? Пробовал ставить свое разрешение через конфиг, но и это ни к чему не привело.
P.S. Если в Jagged Aliance мне это не мешало, то в Тихом Шторме с 3d графикой это крайне неудобно.
Поддержи Стопгейм!
Комментарии отключены
Лучшие комментарии
Иван Раптев
10 октября 2013, 22:42
я нашёл только
Я нашел способ запуска SS в режиме Widescreen
1. Открыть Silent Stormcfgconfig.cfg
2. Найти строчку setvar gfx_resolution = 1024.00
3. Заменить 1024.00 на свое разрешение (пример 1360×768)
4. Сохранить. Поставить в свойствах «Только чтение»PS отдельная благодарность Cleric[V] за кряк, т.к мою видюху игра не хотела видеть
но тк игра 2003 года, я не удивлен, что с широкими разрешениями проблема.
Иван Раптев
10 октября 2013, 22:50
Иван Раптев
10 октября 2013, 22:18
а почему это не удобно? Жалко, что весь экран не используется? или картинка растягивается?
Если первое — то можно смириться. Если второе — панель управление Nvidia -> дисплей -> регулировка размера и положения рабочего стола -> Выполнять масштабирование на ГП
Сергей Харламов
10 октября 2013, 22:31
а почему это не удобно?
Вот какой ответ ты хочешь услышать на этот вопрос? Если бы мне было комфортно так играть, я не написал бы в FAQ.
Если первое — то можно смириться.
Это как крайняя мера.
Сергей Харламов
10 октября 2013, 22:49
Именно это я и опробовал. Не помогло, увы. Но все равно спасибо))