Опрос на сайте
Какая серия GTA вам больше всего нравиться?

Популярные новости

Magic - TXD Builder 0.9.1

Magic - TXD Builder 0.9.1
Полезная программа для сборки TXD файлов, которая важные параметры, такие как mip map, DXT сжатие... Кроме того, программа

Main Menu Scene

Main Menu Scene
"Main Menu Scene" дает вам возможность создавать собственные сцены в "Главном Меню" игры с кастомными картой и скриптом, при

Vertex Alpha в Vice City

Vertex Alpha в Vice City
То, что некогда было доступно лишь в GTA: San Andreas и выше: Vertex Alpha, а потенциально - и физический бленд текстур в

[CLEO]CarRec(plus ObjRec)

[CLEO]CarRec(plus ObjRec)
"CarRec" дает вам возможность записывать движения автомобиля в файл ".cr" для воспроизведения их позднее в ваших скриптах и

Rollerskates Mod

Rollerskates Mod
Модификация позволяет кататься на роликах, прямо как пляжные девушки.

03 ноябрь 2014

Замена переменных в GTA Vice City


Иногда бывает, такие случаи, что один участок памяти (т.е переменная) используется в разных местах, для разных вещей. Но это нам не всегда нужно, например когда мы разрабатывает различные моды для GTA Vice City в виде плагинов. Теперь для примера, сейчас будет наша задача, поменять иконки оружия размеры, но не просто поменять, а задать тут же высоту и ширину, по разному. Теперь откроем базу для GTA Vice City в IDA pro, об этой программе, вкратце рассказывалось в предыдущих статьях. После нажмем кнопку “G” и вобьем адрес 005586F5 и попадем на нужное нам место. Здесь я выделил то, что нам надо будет заменять:

IDA pro GTA Vice CityIDA pro GTA Vice City


Тут я выделил именно то, что нам придется подменить на свои адреса, в нашем случае это будет так

0x05586F5 + 2
0x0558706 + 2


Так как D9, 05 – это сами команды процессора по этому смешаемся на 2, нам лишь, нужно будет подменить их параметр а он же и есть адрес. Что-бы долго не думать с областью памяти, с которой будем делать операции записи и чтения, захватим сразу такой участок:

Замена переменных в GTA Vice City


Что-бы быстро вычислить размер всей памяти, сколько нам надо указать для изменения атрибутов, поступим так
( конечный адрес (55870C) – начальный адрес (05586F5) = размер всего 0x17), вот и наш размер в hex 0x17, для таких расчетов, вы можете спокойно использовать стандартный калькулятор в режиме программист, об этом я уже говорил ранее. Ну и еще, глянем само значение подминаемого адреса, просто сделав клик по “fhudiconWeaponSize”, но у вас оно будет называться по другому, вы можете также кстати его назвать. После того как сделаем клик мы увидим такую картину:

Замена переменных в GTA Vice City


Там где я выделил красным маркером, это и есть тот самый наш адрес переменной, где как видно хранится значение которое равно 64.0. Это 4 байтовый тип float и есть размер иконки вооружения. Теперь напишем для практики код на C++ нашего плагина:


#include "stdafx.h"

//Объявляем наши переменные
//Тут же сразу инициализируем их значениями

float WpnIconHeight = 30.0;
float WpnIconWidth = 50.0;

//Это наша процедура, которая заменить адреса
//Затем все делаем как было написано в статье

void Replace_varIconSize(){
DWORD _old;

VirtualProtect((LPVOID)0x05586F5, 0x17, PAGE_READWRITE, &_old);

*(DWORD*)(0x05586F5 + 2) = (DWORD)&WpnIconWidth; //Здесь мы записываем адрес переменной WpnIconWidth
*(DWORD*)(0x0558706 + 2) = (DWORD)&WpnIconHeight; //Сперва получаем адрес с помощью & этого и приводим его с помощью (DWORD)

VirtualProtect((LPVOID)0x05586F5, 0x17, _old, &_old);
};

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:

//Тут идет вызов нашей процедуры, как игра запустится
Replace_varIconSize();

break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}



Если все было сделано, правильно то в игре эта иконка будет выглядит так:

Замена переменных в GTA Vice City


Как видно, иконка согласно заданных значений, изменила размеры. Имейте введу, что теперь после замены, переменных, вы просто можете потом к ним обращаться как к своим родным:

WpnIconHeight = 64.0;
WpnIconWidth = 64.0;


Когда вам, будет это нужно. Ну и конечно же, пример исходника прилагается:

Скачать пример [22,54 Kb] (cкачиваний: 27)

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
1 августа 2016 17:15
DenLover написал:
Гости
Комментариев: 0 Новостей: 0
А как сделать динамическую загрузку и подмену DFF и TXD файлов без установки их в gta3.img архив, что б налету объявлять путь к ресурсу и добавлять его при старте игры? Хочу отметить так же очень у вас интересные статьи я нашел. Спасибо за ваш огромный труд и желание делиться опытом

(Цитировать)

Добавить свой комментарий

Полужирный Наклонный текст Подчёркнутый текст Зачёркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Вставка ссылкиВставка защищённой ссылки Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Другие материалы

Замена функций GTA Vice City на свою

Замена функций GTA Vice City на свою
После того как мы в предыдущих статьях, научились уже более менее хоть к чему-то. Теперь же мы перейдем к тому вопросу как

Подхват переменных в GTA Vice City

Подхват переменных в GTA Vice City
Сейчас в начале разберем вкратце, что же за такой подхват переменных в GTA Vice City. Например мы просто объявляем некую

Чтение и запись адресов GTA Vice City

Чтение и запись адресов GTA Vice City
В этом уроке мы научимся, записывать и считывать значения из адресов памяти игры GTA Vice City непосредственно из нашего

Создаем первый плагин ASI на C++ Часть 3

Создаем первый плагин ASI на C++ Часть 3
Сейчас мы сделаем, самый простой плагин, который лишь выведет системное сообщение в виде привет, после запуска игры. Из кода
Ads

Группа GTA Builder
Наши партнеры

GTA FreeRunning Story