Открой файл d3.hog в бинарном редакторе (например, hiew), замени байт FE по смещению 2B0EC на байт B4. У меня была абсолютно такая же проблема, вплоть до размера файлов.
Если кого-то это еще интересует, могу сообщить об источнике проблемы и о способе ее решения.
Даже если не интересует - все равно сообщу
- потому что именно благодаря этой теме я нашел решение.
Итак, проблема кроется в поврежденном файле data1.cab. Если взять isdcc и попробовать извлечь d3.hog из data1.cab, то получим предупреждение:
C:\temp>C:\isdcc\I5comp.exe x data1.cab d3.hog
InstallShield 5.x Cabinet Compression & Maintenance Util
Version 2.01 -] fOSSiL - 1999 [-
d3.hog WARNING: file size does not match File Descriptor in cab
Распакованный файл получится размером 194030349 байт - т.е. таким же, как и при установке.
Но если посмотреть, что прописано в файле data1.hdr, то увидим:
C:\>C:\isdcc\I5comp.exe l data1.hdr
InstallShield 5.x Cabinet Compression & Maintenance Util
Version 2.01 -] fOSSiL - 1999 [-
Date Time OrigSize Attr CompSize Ind FileName
========== ===== ========= ==== ========= ==== =================
05-25-1999 05:13 194030423 A___ 107395124 2 d3.hog
--------- --------- -------------------
194030423 107395124 1 file(s) total
что правильный размер должен быть 194030423 байт, т.е. на 74 байта больше.
Теперь возьмем утилиту
hog.exe и распакуем файл d3.hog:
C:\temp>hog.exe -o d3.hog
HOG File Utility v0.9
Copyright 1999 (C) Outrage Entertainment, Inc.
Processing Hog: d3.hog
Extracting: 10est.ogf
Extracting: 10estbw.ogf
<пропущено очень много строк>
Extracting: YellowWhiteLaser.ogf
Extracting: zap4.wav
abnormal program termination
Утилите тоже не нравится содержимое d3.hog - она не может распаковать его полностью.
Ну, что-то распаковала - и на том спасибо. Смотрим, что у нас в начале файле thrustball.ogf:
А( ☻!Д !И☻BИ☻BМ♂cМ☻BМ☻BИ !И☻!Д Д$ ☻!Д☻BИ BМ♥cМ cР dР ДР dР cР♥cМ BМ☻B
Бинарный файл, абсолютно нечитаемый. Сравниваем с другим файлом, например, diskball.ogf:
zdiskball.ogf ♣ @ @ (→ ♀ А0 ♠ А◘ А♠ А* ♥ А♥ А !А♂AА☻!А☻ А☻ А% ♦ А
Тоже бинарный файл, практически нечитаемый, однако с отлично видимым заголовком.
Смотрим d3.hog и пытаемся в нем найти аналогичный заголовок для thrustball.ogf.
Находим:
А !Д BИ cМ BИ !Д☻BИ !Д zthrustball.ogf ☺ @ @ (Y Д♂!Д Д Д. Д☻!
Переключаемся в режим просмотра в шестнадцатеричном виде и записываем смещения заголовков от начала файла:
00029BCDDA: 00 00 7A 64 69 73 6B 62 │ 61 6C 6C 2E 6F 67 66 00 zdiskball.ogf
00029BCDEA: 05 00 00 00 00 00 00 00 │ 00 00 40 00 40 00 20 28 ♣ @ @ (
и
000AE1D0C7: 00 00 7A 74 68 72 75 73 │ 74 62 61 6C 6C 2E 6F 67 zthrustball.og
000AE1D0D7: 66 00 01 00 00 00 00 00 │ 00 00 00 00 40 00 40 00 f ☺ @ @
Переводим смещения в десятичный вид:
00029BCDDAh = 43765210
000AE1D0C7h = 182571207Снова берем утилиту hog.exe и просим выдать данные об этих файлах:
C:\temp>hog.exe -v d3.hog diskball.ogf thrustball.ogf
HOG File Utility v0.9
Copyright 1999 (C) Outrage Entertainment, Inc.
Processing Hog: d3.hog
Length Offset Date Time Name
------ ------ ---- ---- ----
11462 43765210 01-01-1970 02:00:00 diskball.ogf
7978 182571281 01-01-1970 02:00:00 thrustball.ogf
------ ----
19440 2
Первое смещение совпадает, а второе отличается на... 182571281-182571207 = 74! Те самые потерянные при распаковке 74 байта!
К счастью, файлы внутри d3.hog отсортированы по имени, поэтому берем предыдущий перед thrustball.ogf файл (а это thrightshulderBOSS.ogf) и смотрим на него внимательно... Он тоже сдвинут на 74 байта. Постепенно поднимаясь таким образом по одному файлу вверх, выясняем, что последний не сдвинутый файл - test3.wav, а первый сдвинутый - TestNapalm.oaf. Скорее всего, поврежден один-единственный файл, test3.wav. Находим место в заголовке, где он описан:
000002B0C0: 00 00 00 00 74 65 73 74 │ 33 2E 77 61 76 00 00 00 test3.wav
000002B0D0: 00 00 00 00 00 00 00 00 │ 00 00 00 00 00 00 00 00
000002B0E0: 00 00 00 00 00 00 00 00 │ 00 00 00 00 FE 10 04 00 ■►♦
Предположительно, его размер - это 000410FEh (последние четыре из приведенных байт, взятые в обратном порядке). Проверяем. 000410FEh = 266494.
C:\temp>hog.exe -v d3.hog test3.wav
HOG File Utility v0.9
Copyright 1999 (C) Outrage Entertainment, Inc.
Processing Hog: d3.hog
Length Offset Date Time Name
------ ------ ---- ---- ----
266494 180049517 01-01-1970 02:00:00 test3.wav
------ ----
266494 1
Да, это его размер. По идее, если уменьшить указанный в заголовке размер файла test3.wav на 74, то все последующие файлы перестанут быть сдвинутыми и будут нормально читаться. Нам нужно поменять 000410FEh = 266494 на 266494-74=266420 = 000410B4h. Исправляем байт FE на B4, запускаем игру - и она работает!