Опрос на сайте
Оцените дизайн сайта

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

Magic - TXD Builder 0.9.1

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

Vertex Alpha в Vice City

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

Компактное меню

Компактное меню
Компактное меню для глобальных модов. Исключено все лишнее.

Main Menu Scene

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

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качиваний: 39)

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

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

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

Полужирный Наклонный текст Подчёркнутый текст Зачёркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Вопрос: Введите первые 3 (Русские) буквы сайта (заглавные).
Ответ:*
Другие материалы

Замена функций 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