#1 17-05-2011 16:06

Sergey81
Registered: 19-12-2008
Posts: 654

[SA|IMP] GTA IV Hud fix

Думаю, сравнительные картинки объяснят лучше, чем описание:
IV hud for SA(1920x1080):
12d40e8c2dd7816e890897d74ce841d6.jpeg 
IV hud for SA with fix(1920x1080):
9a7f5c10f11ceb319c6be641cd97ebb1.jpeg 
GTA IV(1920x1080):
955c5e3ad20a2804db04c86309b0b76c.jpeg 
Сначала хотел вносить изменения непосредственно в .asi, но она оказалась зашифрована как-то, поэтому пришлось написать клео скрипт. Код, как обычно, клео 3 совместимый:

{$CLEO .cs} 
0000: 
wait 100
0A8D: 0@ = read_memory 0x5BA860 size 4 virtual_protect 0
0@ -= 0x14584

0A8E: 1@ = 0@ + 0x19618 // icon X
0A8C: write_memory 1@ size 4 value 160.0 virtual_protect 0
1@ += 4 // icon Y
0A8C: write_memory 1@ size 4 value 80.0 virtual_protect 0

0A8E: 1@ = 0@ + 0x19650 // ammo font size Y
0A8C: write_memory 1@ size 4 value 0.3 virtual_protect 0
1@ += 4 // ammo font size X
0A8C: write_memory 1@ size 4 value 0.75 virtual_protect 0

{0A8E: 1@ = 0@ + 0x16AD8 // ammo right border
0A8C: write_memory 1@ size 1 value 1 virtual_protect 0

0A8E: 1@ = 0@ + 0x16C39 // ammo left border
0A8C: write_memory 1@ size 1 value 1 virtual_protect 0           }

2@ = 518.0
0AB1: call_scm_func @__VarToOffset 1 varnumber 2 result 3@ 
0A8E: 1@ = 0@ + 0x165EF  // ptr to icon Y pos
0A8C: write_memory 1@ size 4 value 3@ virtual_protect 0     


while true
wait 0
end



:__VarToOffset
0A9F: 23@ = current_thread_pointer
23@ += 0x3C
0@ *= 4
005A: 23@ += 0@ // address of the local variable 
0AB2: ret 1 23@

Закоменченный участок - обрамление вокруг цифр патронов. Если раскомментить, будет так:
a0c75b5dbdede7a55895ca8dd2f0fbd4.jpeg 

Radar.ini: http://pastebin.com/amMSkEpu
--
Дизассемблированный код asi для ознакомления/поиска адресов здесь - iv_hud.txt

Last edited by Sergey81 (17-05-2011 16:48)

Offline

#2 18-05-2011 04:58

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: [SA|IMP] GTA IV Hud fix

ASI не зашифрована, а лишь скомпилирована, ибо она есть самая обычная DLL

Sergey81 wrote:

Дизассемблированный код asi для ознакомления/поиска адресов здесь - (ССЫЛКА)

Уважаемый тов. Alexander вряд ли одобрит подобное распространение своих трудов.

Last edited by 3Doomer (18-05-2011 04:59)


GIMS developer

Offline

#3 18-05-2011 05:44

Sergey81
Registered: 19-12-2008
Posts: 654

Re: [SA|IMP] GTA IV Hud fix

3Doomer wrote:

ASI не зашифрована, а лишь скомпилирована, ибо она есть самая обычная DLL

Насколько я понимаю, если бы она была скомпилирована обычным образом, дизассемблировалась она бы так же, как и в приведённом выше txt. Но мне пришлось доставать всё из памяти. Хотя могу и ошибаться.

Уважаемый тов. Alexander вряд ли одобрит подобное распространение своих трудов.

Это всего лишь дамп памяти, не исходник, украденный с винчестера Александра, не готовый мод с перебитымми копирайтами. Любой может за пару минут его сделать. Чего тут такого страшного?

Offline

#4 18-05-2011 05:53

444andrei444
Registered: 29-03-2011
Posts: 317
Website

Re: [SA|IMP] GTA IV Hud fix

Было бы интересно узнать что означает каждый адрес памяти приведенный в скрипте.

Offline

#5 18-05-2011 06:38

Sergey81
Registered: 19-12-2008
Posts: 654

Re: [SA|IMP] GTA IV Hud fix

@444andrei444 - Первый адрес, указатель на hud.txd.

.text:005BA85F 010                 push    offset aModelsHud_txd ; "MODELS\\HUD.TXD"
68 64 A6 86 00

Так как asi его подменяет, читаем адрес, куда ведёт этот указатель, вычитаем смещение(0x14584), получаем адрес начала asi. Потом, прибавляя смещения, которые находятся по вышеприведённому текстовику, меняем то, что нужно. Смещения в скрипте подписаны и так. Ещё можно найти размер шрифта денег и часов, но я врядли буду этим заниматься.

Offline

#6 20-05-2011 13:47

Sergey81
Registered: 19-12-2008
Posts: 654

Re: [SA|IMP] GTA IV Hud fix

Альтернативный вариант скрипта, который уменьшает размер всех маркеров с размером 3 до размера 2.
Также изменяет цвет зелёных маркеров на жёлтый. У меня вместо зелёного почему-то они чёрные были, поэтому решил заодно и поменять.

{$CLEO .cs} 
0000: 
wait 100
0A8D: 0@ = read_memory 0x5BA860 size 4 virtual_protect 0
0@ -= 0x14584

0A8E: 1@ = 0@ + 0x19618 // icon X
0A8C: write_memory 1@ size 4 value 160.0 virtual_protect 0
1@ += 4 // icon Y
0A8C: write_memory 1@ size 4 value 80.0 virtual_protect 0

0A8E: 1@ = 0@ + 0x19650 // ammo font size Y
0A8C: write_memory 1@ size 4 value 0.3 virtual_protect 0
1@ += 4 // ammo font size X
0A8C: write_memory 1@ size 4 value 0.75 virtual_protect 0

{0A8E: 1@ = 0@ + 0x16AD8 // ammo right border
0A8C: write_memory 1@ size 1 value 1 virtual_protect 0

0A8E: 1@ = 0@ + 0x16C39 // ammo left border
0A8C: write_memory 1@ size 1 value 1 virtual_protect 0 }          

2@ = 518.0
0AB1: call_scm_func @__VarToOffset 1 varnumber 2 result 3@ 
0A8E: 1@ = 0@ + 0x165EF  // ptr to icon Y pos
0A8C: write_memory 1@ size 4 value 3@ virtual_protect 0     


while true
wait 0
    for 10@ = 0xBA86F0 to 0xBAA248 step 0x28
     0A8D: 22@ = read_memory 10@ size 4 virtual_protect 0
     if
     22@ == 1
     then
     0A8C: write_memory 10@ size 4 value 4 virtual_protect 0    
     end
    
    0A8E: 11@ = 10@ + 28
        0A8D: 12@ = read_memory 11@ size 4 virtual_protect 0 //DWORD dwIconSize;
            if 
            12@ == 3
            then 
            12@ -= 1
            0A8C: write_memory 11@ size 4 value 12@ virtual_protect 0
            end   

           { if 
            12@ == 1
            then 
            12@ *= 10
            12@ /= 15
            0A8C: write_memory 11@ size 4 value 12@ virtual_protect 0
            end 
            
            if 
            12@ == 2
            then 
            12@ *= 10
            12@ /= 15
            0A8C: write_memory 11@ size 4 value 12@ virtual_protect 0
            end   }
            
            
    end
end



:__VarToOffset
0A9F: 23@ = current_thread_pointer
23@ += 0x3C
0@ *= 4
005A: 23@ += 0@ // address of the local variable 
0AB2: ret 1 23@

Вот к примеру скрин в начале миссии Cop Wheels:
1f59950aff754d4038043a2cef8bc932.jpeg

Offline

Board footer

Powered by FluxBB