Да ладно. Куча статических структур, весь вог в статике. Если память выделяется динамически, то проще всё, конечно. Просто перезаписываем адрес. Вот только если память очищается время от времени, выделять нужно её геройской функцией malloc.
Эра патчит много вог-кода. А там статические адреса. UN:C тоже работает со статическими. Вот где хранится единственно верный указатель на массив информации о монстрах в игре?
В OnAfterWoG достаточно вызвать RedirectMemoryBlock. Для бОльшей совместимости могу адреса следующих структур получать при отсутствии перенаправлений из указателей:
Code:
procedure OnAfterStructRelocations (Event: GameExt.PEvent); stdcall;
begin
SecSkillNames := GameExt.GetRealAddr(SecSkillNames);
SecSkillDescs := GameExt.GetRealAddr(SecSkillDescs);
SecSkillTexts := GameExt.GetRealAddr(SecSkillTexts);
MonInfos := GameExt.GetRealAddr(MonInfos);
ArtInfos := ppointer(ArtInfos)^;
Spells := GameExt.GetRealAddr(Spells);
end;
SecSkillNames: PSecSkillNames = Ptr($698BC4);
SecSkillDescs: PSecSkillDescs = Ptr($698C34);
SecSkillTexts: PSecSkillTexts = Ptr($698D88);
Spells: PSpells = Ptr($7BD2C0);
MonInfos: PMonInfos = Ptr($7D0C90);
ArtInfos: PArtInfos = Ptr($660B68);
Только указатели в студию. Вторичные навыки (имена, описания), заклинания, монстры, артефакты.