Current time: 23.03.2024, 14:46 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Новая реализация виртуальной файловой системы
» Тестирование
Author Message
Berserker Offline
Administrators

Posts: 16449
Post: #46

RDV, в папке Heroes 3 Era\Tools\VfsTest.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
02.12.2019 20:56
Find all posts by this user Quote this message in a reply
RDV Offline

Posts: 23
Post: #47

2.75 не нашел
играю 2.75 т.к 2.88 вылетает стабильно каждый новый месяц на 1 день
Тесты на Win 10 64 EN 1703
https://ibb.co/Y864xwt
https://ibb.co/WvZDYkP
(This post was last modified: 02.12.2019 21:53 by RDV.)
02.12.2019 21:14
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #48

https://dropmefiles.com/ljEXh
Да, всё верно, тесты у тебя проходят.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
02.12.2019 21:33
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2265
Post: #49

Как с помощью новой виртуальной системы заставить редактор карт читать *.msk из *.paс любых модов? Перенаправления на чтение def из *.pac, как я понял, реализовано в eramap.dll, но по *.msk для Дельфы никаких готовых решений для патча к редактору карт похоже нет и для новых объектов происходит порча масок объеков карты при загрузке def-а (т.е. def редактор карт находит в любом *.paс, а аналогичный *.msk ищется редактором исключительно только в H3sprite.lod, полностью игнорируя *.pac). Данный недостаток каким-то образом устранял Кавалерист у себя в патче к редактору, но вот как он это сделал - не ясно. 112
22.11.2021 13:57
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16449
Post: #50

Тут дело не в виртуальной файловой системе, скорее всего. Все pac-и подгружаются вместе с lod-ми и формируют одну таблицу архивов. Скорее всего GrayFace или авторы оригинального редактора вместо цикла линейного поиска по архивам ищут только в одном конкретном лоде.

$4DACE6 — здесь лежит указатель на таблицу лодов.
Нужно прибавить к указателю 99(макс число поддерживаемых архивов - 1) * 400. Получим ссылку на последний lod/pac.

Оттуда цикл вызова 4E48F0 (проверка ресурса в архиве) с вычитанием 400 из указателя на каждом шаге. Как только что-то нашлось или достигли конца — выходим.

Скорее всего, уже есть готовая функция в редакторе, но в оригинальной игре повторяющиеся циклы в каждой функции загрузки ресурса определённого типа.

Code:
function FindFileLod (const FileName: string; out LodPath: string): boolean;
const
  MAX_LOD_COUNT = 100;

type
  PLod = ^TLod;
  TLod = packed record
    Dummy: array [0..399] of byte;
  end;

var
  Lod: PLod;
  i:   integer;

begin
  Lod := Ptr(integer(ppointer($4DACE6)^) + sizeof(TLod) * (MAX_LOD_COUNT - 1));
  // * * * * * //
  result := false;
  i      := MAX_LOD_COUNT - 1;

  while not result and (i >= 0) do begin
    if ppointer(Lod)^ <> nil then begin
      result := FileIsInLod(FileName, Lod);
    end;

    if not result then begin
      Dec(Lod);
      Dec(i);
    end;
  end;

  if result then begin
    LodPath := pchar(integer(Lod) + 8);
  end;
end; // .function FindFileLod


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
22.11.2021 15:47
Find all posts by this user Quote this message in a reply
RoseKavalier Offline

Posts: 118
Post: #51

If you give me an address, I can take a look at what I did. It's been so long that I worked in the editor that I have forgotten much...
22.11.2021 16:28
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group