Опрос на сайте
Как вам движок Vice Lua?

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

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
Модификация позволяет кататься на роликах, прямо как пляжные девушки.

04 ноябрь 2014

Вывод на экран GXT текста в GTA VC


Настала пора поработать не много с текстами в GTA Vice City, а это значит что в этом уроке мы научимся выводить текст GXT, стандартными функциями игры. Конечно это еще не все возможности, но мы пока рассмотрим самый простейший способ вывода текста, путем вызовов прототипов. Об этом способе вызова было написано ранее и прочитать урок можно тут это нужно читать тем, кто еще не знает что это за метод.

Теперь приступим к делу, и решим вопрос, исходя чего объявлять нам прототипы? Конечно долго углубляться в реверсивную инженерию не будем, так как это отдельный материал но рассмотрим уже найденный участок кода.

Открываем базу IDA для GTA Vice City и перейдем на адрес 004BBE90, для реализации нашей задачи,нам лишь нужно то что выделено красным прямоугольником на рисунке:

Вывод на экран GXT текста в GTA VC


Как видно из куска кода, что тут задействованы 2 функции, включая одну из них метод класса CText, сперва идет вызов самого метода CText__locate которая по названию таблицы GXT возвращает нужный нам текст, например из american.gxt, но скорее всего он уже загружен в память а не просто идет прямое обращение к файлу. Что-бы знать как работают функции конкретно, их нужно отдельно разбирать, а это другой разговор. Тут же вторая функция под названием StyledText_0, в качестве первого параметра принимает саму строку и затем выполняет показ ее в экране игры. Вот теперь таким образом мы видим что можно объявить прототипы с нужными параметрами и затем ими воспользоватся в любой области кода, в нашем проекте. Ниже теперь рассмотрим непосредственно сам код плагина на C++:

#include "stdafx.h"

//Подхватим объект и получим на него указатель
class CText;
auto gText = (CText*)0x094B220;

//Объявляем прототип StyledText
auto _StyledText_0 = (void (__cdecl*)(wchar_t * gtaText, int time, __int16 style))0x0584050;

//Объявляем прототип метода класса CText *
auto CText__locate = (wchar_t *(__thiscall*)(CText *, char *entryName))0x0584F30;

//Для клавиши
bool isPressM = false;
bool isPressN = false;


//Код обработки
void Update() {

//Код нажатия M
if (!GetAsyncKeyState(0x4D) != 0 )
isPressM = true;

if ( (GetAsyncKeyState(0x4D) != 0 ) && (isPressM == true) ){
_StyledText_0(L"GTA SHOW TEXT", 3000, 3);
isPressM = false;
}


//Код нажатия N
if (!GetAsyncKeyState(0x4E) != 0 )
isPressN = true;

if ( (GetAsyncKeyState(0x4E) != 0 ) && (isPressN == true) ) {
isPressN = false;
_StyledText_0(CText__locate(gText, "BUSTED"), 3000, 4);
}

};


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

//Тут установим таймер
SetTimer(0,0, 16, (TIMERPROC)Update);

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


Тут приведен пример, вызова функций на клавишу “N” из самой таблицы GXT, и не посредственно с обычным текстом на клавишу “M”. Принцип работы совсем прост:
Как обычно, что-бы вызывать метод, сперва мы должны получить указатель на сам объект:

auto gText = (CText*)0x094B220;


Этот материал мы проходили в предыдущих уроках, как хвататься за объект и.т.п.
Это сам прототип функции:

auto _StyledText_0 = (void (__cdecl*)(wchar_t * gtaText, int time, __int16 style))0x0584050;


Имеет первый параметр сам текст в кодировке UNICODE, второй параметр это время показа текста, а третий стиль самого текста, который был изначально сделан R*-ом.

auto CText__locate = (wchar_t *(__thiscall*)(CText *, char *entryName))0x0584F30;


Это уже у нас прототип метода класса CText, в качестве первого параметра, прототип принимает сам указатель на объект, об этом мы также говорили, а второй параметр это название gxt из таблиц.


void Update()...


Тут у нас совсем уже просто, это процедура обработчика, которая выполняется таймером. Имейте введу что для практического урока, таймер хорошо подходит в этих целях, а вот уже когда вы будете разрабатывать моды gta vice city, то вам рекомендовано обработку делать в самой процессе игры, туда внедряться. Еще один момент используются функция GetAsyncKeyState для проверки нажатий клавиш, так вот опять таки в играх она совсем особо не подходит, гораздо лучше было бы использовать набор функций от самой игры или Direct Input, так как они работают во множество раз быстрей, а производительность в играх, это важный момент. Ну вот собственно и все, обычный практический урок мы закончили, а вам дорогие друзья приятного моддинга и как всегда вам исходник.

gtx_textDraw.rar [7,84 Kb] (cкачиваний: 68)

Компилируйте и пробуйте.

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

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

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

Вывод на экран TXD GTA

Вывод на экран TXD GTA
После того как мы научились в предыдущих статьях по программированию хорошо работать с памятью игры, то можно уже приступить

Вызов методов класса в GTA Vice City

Вызов методов класса в GTA Vice City
После того как мы разобрались в предыдущей статье, как вызывать функцию по адресу, теперь можно переходить к вызову методов

Вызов функций и процедур в GTA Vice City

Вызов функций и процедур в GTA Vice City
Вся игра состоит на самом деле из функций и процедур а также методов различных классов, о которых мы поговорим позднее.

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

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

Группа GTA Builder