Продолжим.
Надо добавить выгрузку текстур. Эт у выгрузку мы добавим сразу после вызова _releaseHudTextures.
Вот так будет выглядеть нужный код на ассемблере.
Code
:releaseTextures
hex
A1 B0 89 71 00 // mov eax, 0x7189B0
FF D0 // call eax
56 // push esi
57 // push edi
33 FF // xor edi, edi
BE 00 00 00 00 // mov esi, offset @textures
8B CE // mov ecx, esi
A1 40 72 72 00 // mov eax, 0x727240 ; CTexture__clean
FF D0 // call eax
83 C6 04 // add esi, 4
47 // inc edi
83 FF 0D // cmp edi, 0xD
7C EE // jl short @label1
68 00 00 00 00 // push offset @name
A1 50 18 73 00 // mov eax, 0x731850 ; _txdIndexByName
FF D0 // call eax
50 // push eax
A1 D0 1C 73 00 // mov eax, 0x731CD0 ; _texDictionaryRemove
FF D0 // call eax
83 C4 08 // add esp, 8
5F // pop edi
5E // pop esi
end
Добавим jump на метку releaseTextures. Также запишем указатели (на адреса структур текстур, и на название TXD) в ассемблеровский код.
Code
0AC6: 0@ = label @releaseTextures offset
0@ += 5
0A8C: write_memory 0@ size 4 value 1@ virtual_protect 1
0@ += 23
0AC6: 1@ = label @name offset
0A8C: write_memory 0@ size 4 value 1@ virtual_protect 1
0@ -= 28
0AC6: 1@ = label @jmp_back offset
0AB1: call_scm_func @asmdef 4 asm_inj 0@ jump_from 0x53BBA7 then_jump 0x53BBAC offset_jump_in_asm 1@
В конце добавим scm-функцию asmdef, 5 байт для записи адреса jump'а (адрес находит и записывает scm-функция), и буфер, который содержит имя TXD.