Версия для печати темы

Нажмите сюда для просмотра этой темы в оригинальном формате

CTPAX-X _ Программы _ No-CD для Tomb Raider 4. The Last Revelation

Автор: Siberian GRemlin Apr 6 2009, 10:27

Начну с того, что эта игра категорически отказывается воспринимать свой диск с какого-либо другого оптического привода кроме первого в системе. Поскольку игра в виде образа и в моей коллекции есть другие игры с подобными болезнями, но на физических носителях, то перетасовка приводов в системе не лучший выход. Лучшим выходом была бы отучалочка, но с ней возникли проблемы:
1. Игра перестаёт воспринимать видеоролики из папки "FMV" (папки Data, FMV, Audio, копируются с диска в папку с игрой + файлы .DAT, кроме language.dat -- он от программы установки)
2. Если отученная игра остаётся в папке куда была установлена с диска, то при запуске падает предложение отписаться дя диБиллу. Если папку переименовать, то игра работает. Изменение в ветке "HKEY_CURRENT_USER\Software\Core Design\Tomb Raider IV" ничего не дают. Прямо комповой какой-то завёлся.

Вот этот зловредный способ отучения от диски:

CODE
procedure Patch;
var
    MSTR: TFileStream;
    b1,b2,b3,b4: char;
begin
    b1:=chr($43);
    b2:=chr($90);
    b3:=chr($2B);
    b4:=chr($1B);
    MSTR:=TFileStream.Create('.\tomb4.exe'),fmOpenReadWrite);
    if FileExists('.\English.dat') then begin           //поддержка английских версий из США и Англии.
        Mstr.Position:=$73C06;
    end else begin
        Mstr.Position:=$739A6;
    end;
    Mstr.WriteBuffer(b1,1);
    Mstr.Position:=Mstr.Position+$30-1;
    Mstr.WriteBuffer(b2,1);
    Mstr.WriteBuffer(b2,1);
    Mstr.Position:=Mstr.Position+$18-2;
    Mstr.WriteBuffer(b3,1);
    Mstr.Position:=Mstr.Position+$A8;
    Mstr.WriteBuffer(b4,1);
    Mstr.Free;
end;


Буду рад если кто-то подскажет как эти две беды исправить.

Автор: -=CHE@TER=- Apr 6 2009, 18:02

Игра как-то странно проверяет диск... вернее потом с ним работает - достаточно просто закрыть процедуру проверки и она магическим образом начинает работать с файлами в текущем каталоге (даже всякие A:\ и C:\script.dat внутрях править не нужно).

QUOTE
xor eax,eax
inc eax
retn

Кстати, наверное будет проще универсальный патч сделать (как для TR1, RE1 и второй Кирандии), чем проверять какое смещение брать по языковым ресурсам.

Для версии 1.0:
QUOTE
Смещение: Было Стало
000739B0: 83 33
000739B1: EC C0
000739B2: 18 40
000739B3: A1 C3


Для версии 1.1 (патч на AG.ru есть):
QUOTE
Смещение: Было Стало
00073C10: 83 33
00073C11: EC C0
00073C12: 18 40
00073C13: A1 C3


Кстати, не ставил игру - просто скопировал следующие файлы на жёсткий диск и вытащил CD:
QUOTE
[audio]
[Data]
[FMV]
tomb4.exe
SCRIPT.DAT
us.dat
binkw32.dll
Readme.txt

Ко всему прочему удалил из каталогов (первые три в списке) дублирующийся binkw32.dll - зачем его в каждый каталог понапихали - непонятно.
И последнее - у меня игра с родным диском работала, но он был второй в системе, а не первый.

Автор: Siberian GRemlin Apr 12 2009, 15:20

QUOTE(-=CHE@TER=- @ Apr 7 2009, 02:02) *
Кстати, наверное будет проще универсальный патч сделать (как для TR1, RE1 и второй Кирандии), чем проверять какое смещение брать по языковым ресурсам.

Думаю это будет полезно не только мне и на сайте будет хорошо смотреться. wink.gif
Кстати, ты как в универсальном проверяешь? По блокам ищешь?

Автор: -=CHE@TER=- Apr 12 2009, 18:21

QUOTE(Siberian GRemlin @ Apr 12 2009, 15:20) *
Думаю это будет полезно не только мне и на сайте будет хорошо смотреться. wink.gif
Кстати, ты как в универсальном проверяешь? По блокам ищешь?
В смысле "по блокам"? Нет - просто ищу последовательность байт, включая эти, которая больше нигде в файле не повторяется.
Универсальный патч сделаю и выложу в ближайшее время, как руки дойдут.