Начиная с адреса 0x00BAB22C в памяти записаны 14 двойных слов (4 байта) для отрисовки одного из элементов интерфейса. Некоторые из них мне удалось изменить и увидеть, некоторые элементы неизвестны.
Первым идет цвет полоски здоровья. Чтобы установить ему новый RGBA, используйте следующий код:
- Code:
0@ = 362041 // maplines
&0(0@,1i) = 0xFF00FFF0 // new RGBA
обратите внимание, последовательность байтов в записи обратная, т.е. сначала идет значение альфы (FF), потом B (00), G (FF), R (F0).
Вот остальные индексы:
- Code:
0@ = 362035 - полоска здоровья
0@ = 362036 - деньги
0@ = 362037 - unknown
0@ = 362038 - шрифт из fonts.txd (стиль SA) (включая звезды поиска и полоску дыхания в воде)
0@ = 362039 - шрифт GTA3 (время, текст_боксы, полоска брони)
0@ = 362040 - задний фон для заголовков в меню (типа 'Pause menu', 'Stats')
0@ = 362041 - линии координат в меню карты.
362041..49 - unknown
Работает на обеих версиях (v1 и v1.01).
Кстати, 0904 возвращает как раз цвета элементов интерфейса.
Создание нового HUD
Давно обещанный мной скрипт изменения интерфейса, результат работы которого продемонстрирован здесь:
Скриншоту
- Code:
{$CLEO}
0@ = 362035 // health bar
&0(0@,1i) = 0xFFFF9900
0@ = 362036 // hud.money
&0(0@,1i) = 0xFF00FFF0
0@ = 362038 // SA fonts
&0(0@,1i) = 0xFF0C0CFF
0@ = 362039 // GTA3 fonts
&0(0@,1i) = 0xFF3BB847
0@ = 362040 // fonts.menubackground
&0(0@,1i) = 0xFFFF0000
0@ = 362041 // maplines
&0(0@,1i) = 0xFF00FFF0
// text box top margin
0A8C: write_memory 0x859AD8 size 4 value 125.0 virtual_protect 1
0005: $25 = 420.0
0005: $26 = 135.0
0005: $27 = 110.0
0004: $28 = 0x8000FFF0
0A8C: write_memory 0x583500 size 4 value 0xA499C4 virtual_protect 1 // $25
0A8C: write_memory 0x58A7C7 size 4 value 0xA499C4 virtual_protect 1 // $25
0A8C: write_memory 0x58A868 size 4 value 0xA499C4 virtual_protect 1 // $25
0A8C: write_memory 0x58A913 size 4 value 0xA499C4 virtual_protect 1 // $25
0A8C: write_memory 0x58A9C7 size 4 value 0xA499C4 virtual_protect 1 // $25
0A8C: write_memory 0x58A789 size 4 value 120 virtual_protect 1
0A8C: write_memory 0x58A88F size 4 value 120 virtual_protect 1
0A8C: write_memory 0x58A8D9 size 4 value 120 virtual_protect 1
0A8C: write_memory 0x58A98F size 4 value 120 virtual_protect 1
0A8C: write_memory 0x866B74 size 4 value 60.0 virtual_protect 1
0A8C: write_memory 0x866B78 size 4 value 80.0 virtual_protect 1
0A8C: write_memory 0x58F5FC size 4 value 0xA499C8 virtual_protect 1 // $26
0A8C: write_memory 0x58F5DC size 4 value 0xA499CC virtual_protect 1 // $27
0A8C: write_memory 0x866BB4 size 4 value 10000.0 virtual_protect 1
0A8C: write_memory 0x58F600 size 4 value 0x90909090 virtual_protect 1
0A8C: write_memory 0x58F499 size 4 value 0xA499CC virtual_protect 1 // $27
0A93: end_custom_thread
Насчет радара, это из-за конфликтов глобальных переменных. Если использовать этот скрипт на оригинальном майне, то переменная, в которой содержится новая высота радара ($25) будет перезаписана майном, и радар будет почти не виден. Я тестировал скрипт на стриппед, поэтому баг остался незамеченным.