GTA Vice City > Справочная информация
Загрузка шрифтов loadFontsTextures()
(1/1)
Sektor:
И так, привет всем! Вообщем по занимался реверсивной инженерией, вот что получилось:
--- Код: C++ ---char fonts_name[] = "fonts";char fonts_path[] = "MODELS/FONTS.TXD"; char aFont2m[] = "font2m";char aFont2[] = "font2"; char aFont1m[] = "font1m";char aFont1[] = "font1"; void CFont__SetColor(RwRGBA * fontRGBA) { auto __CFont_setColor = (void (__cdecl*)(RwRGBA * fontRGBA))0x0550170; __CFont_setColor(fontRGBA);}; void SetTextBackgroundColor(RwRGBA * bgRGBA) { auto _SetTextBackgroundColor = (void (__cdecl*)(RwRGBA * fontRGBA))0x05500A0; _SetTextBackgroundColor(bgRGBA);} void restoreTexDictionary(){ auto _restoreTexDictionar = (void (__cdecl*)())0x0580AA0; _restoreTexDictionar();} void SetFontStyle(int fontIndex) { auto _SetFontStyle = (void (__cdecl*)(int fontIndex))0x054FFE0; _SetFontStyle(fontIndex);} //00552530auto _texFont2 = (CSprite2D*)0x0A108B4;auto _texFont1 = (CSprite2D*)0x0A108B8; auto rsGlobal = (RsGlobalType*)0x09B48D8; auto letterWidth = (float*)0x097F824;auto letterHeight = (float*)0x097F828;auto flt_97F830 = (float*)0x097F830; auto flt_97F834 = (float*)0x097F834;auto flt_97F82C = (float*)0x097F82C; auto textWidthAdjustment = (char*)0x097F838;auto textCentered = (char*)0x097F839;auto textAlignment = (char*)0x097F83A;auto textDrawBox = (char*)0x097F83B; auto textBackgroundEnabled = (char*)0x097F83C;auto textProportional = (char*)0x097F83D; auto _textLineWidth = (float*)0x097F84C;auto fontStyle = (WORD*)0x097F858;auto baseCharset = (BYTE*)0x097F85A; auto fTextHTab = (DWORD*)0x097F854;auto flt_97F844 = (float*)0x097F844; auto word_97F860 = (WORD*)0x097F860; auto textCenteredWidth = (float*)0x097F850; void EnableTextProportional() { *textProportional = 1;}; void DisableTextProportional(){ *textProportional = 0;}; void SetTextDrawLeftAlignment(){ *textAlignment = 0; *textWidthAdjustment = 0; *textCentered = 0;}; void SetTextDrawRightAlignment() { *textAlignment = 1; *textWidthAdjustment = 0; *textCentered = 0;}; void DisableTextBackground(){ *textBackgroundEnabled = 0;}; void EnableTextBackground() { *textBackgroundEnabled = 1;}; void DisableTextDrawInBox(){ *textDrawBox = 0;}; void EnableTextDrawInBox(){ *textDrawBox = 1;}; void SetTextCenteredWidth(float textWidth){ *textCenteredWidth = textWidth;}; void SetTextLineWidth(float textWidth){ *_textLineWidth = textWidth;}; void DisableTextDrawCentered(){ *textCentered = 0;}; void EnableTextDrawCentered(){ *textCentered = 1; *textWidthAdjustment = 0; *textAlignment = 0;}; void DisableTextWidthAdjustment(){ *textWidthAdjustment = 0; *textAlignment = 0;}; void EnableTextWidthAdjustment(){ *textWidthAdjustment = 1; *textCentered = 0; *textAlignment = 0;}; void SetLetterSize(float width, float height){ *letterWidth = width; *letterHeight = height;}; void loadFontsTextures() { RwRGBA rgbaFont; RwRGBA rgbaFont2; DWORD refTex = txdAdd(fonts_name); txdLoad(refTex, fonts_path); txdAddRef(refTex); saveTexDictionary(); txdSetCurrent(refTex); _texFont2->readTexture(aFont2, aFont2m); _texFont1->readTexture(aFont1, aFont1m); *letterWidth = 1.0f; *letterHeight = 1.0f; *flt_97F830 = rsGlobal->w; *flt_97F834 = 0; *flt_97F82C = 0; rgbaFont.alpha = 0; rgbaFont.red = 255; rgbaFont.green = 255; rgbaFont.blue = 255; CFont__SetColor(&rgbaFont); *textWidthAdjustment = 0; // *textAlignment = 0; // *textCentered = 0; // *_textLineWidth = rsGlobal->w; rgbaFont2.alpha = 128; rgbaFont2.blue = 128; rgbaFont2.green = 128; rgbaFont2.red = 128; SetTextBackgroundColor(&rgbaFont2); *textBackgroundEnabled = 0; *textProportional = 1; *fontStyle = 0; *baseCharset = 0; *fTextHTab = 0; *flt_97F844 = 255.0; *word_97F860 = 0; restoreTexDictionary();}
Плюс входят следующие прототипы-обвертки и структуры:
--- Код: C++ ---int txdAdd(char *name){ auto _txdAdd = (int (__cdecl*)(char *name) )0x0580F00; return _txdAdd(name);}; int txdLoad(int a, char *FileName) { auto _txdLoad = (int (__cdecl*)(int a, char *Pathname) )0x0580CD0; return _txdLoad(a, FileName);}; int txdAddRef(int a) { auto _txdAddRef = (int (__cdecl*)(int a) )0x0580A60; return _txdAddRef(a);}; int txdIndexByName(char *name) { auto _txdIndexByName = (int (__cdecl*)(char *name) )0x0580D70; return _txdIndexByName(name);}; int txdSetCurrent(int index) { auto _txdSetCurrent = (int (__cdecl*)(int index) )0x0580AD0; return _txdSetCurrent(index);}; CTexture * RwReadTexture(char *name, int a2){ auto _RwReadTexture = ( CTexture * (__cdecl*)(char *name, int a2) )0x064E110; return _RwReadTexture(name, a2);} //.text:00580AC0 ; void __cdecl saveTexDictionary void saveTexDictionary(){ auto _saveTexDictionary = (void (__cdecl*)() )0x0580AC0; _saveTexDictionary();}
--- Код: C++ ---#pragma pack (push, 1) struct RsInputDevice { DWORD inputDeviceType; DWORD used; DWORD inputEventHandler;}; struct RsGlobalType{ DWORD AppName; DWORD MaximumWidth; DWORD MaximumHeight; DWORD w; DWORD h; DWORD frameLimit; DWORD quit; DWORD ps; RsInputDevice keyboard; RsInputDevice mouse; RsInputDevice pad;}; #pragma pack ( pop) void loadFontsTextures();
и другие с RWG модуля...
Далее, вы знаете что делать в плагине:
--- Код: C++ ---injectFunction(0x0552310, (DWORD)loadFontsTextures);
Таким образом можно внедрить свой код в загрузку фонтов, или во все изменить загружаемые фонты...
mfisto:
Т. е. ты имеешь ввиду, что можно поступить так же, как Бука поступила с GTA III -> расширить таблицу символов и добавить полноценную кириллицу?
Sektor:
Пока еще нет, много чего не до деланно, например есть еще где-то функции отрисовки и прочие...
Навигация
Перейти к полной версии