Add respect related game data

- Updated Game structs:
    - Player
    - GangRespect
- Added Game::Functions functions:
    - GetFirstGangRespect
    - GetNextGangRespect
    - GetGangName
- Added Game::Utils::GangUtils::GetVisibleGangs util function
- Applied a temporary fix to ModMenuModule::PlayerStatsMenu to make it work with the above changes
This commit is contained in:
izawartka 2026-07-08 23:52:04 +02:00
parent 2ee8d9eb5d
commit e8c99e905a
8 changed files with 78 additions and 11 deletions

View File

@ -614,6 +614,7 @@ echo Created $(ProjectDir)src\git.h with commit %GIT_HASH% (dirty=%GIT_DIRTY%)
<ClInclude Include="src\game\gta2_additional.h" />
<ClInclude Include="src\game\utils\angle-utils.h" />
<ClInclude Include="src\game\utils\car-roof-utils.h" />
<ClInclude Include="src\game\utils\gang-utils.h" />
<ClInclude Include="src\game\utils\keyboard-utils.h" />
<ClInclude Include="src\game\utils\cop-value-utils.h" />
<ClInclude Include="src\game\utils\player-utils.h" />
@ -890,6 +891,7 @@ echo Created $(ProjectDir)src\git.h with commit %GIT_HASH% (dirty=%GIT_DIRTY%)
<ClCompile Include="src\game\keycode.cpp" />
<ClCompile Include="src\game\utils\car-roof-utils.cpp" />
<ClCompile Include="src\game\utils\cop-value-utils.cpp" />
<ClCompile Include="src\game\utils\gang-utils.cpp" />
<ClCompile Include="src\game\utils\player-utils.cpp" />
<ClCompile Include="src\game\utils\lists-utils.cpp" />
<ClCompile Include="src\game\utils\scrf-utils.cpp" />

View File

@ -187,6 +187,7 @@
<ClCompile Include="src\modules\modmenu\menus\position-menu.cpp" />
<ClCompile Include="src\modules\modmenu\segments\position-menu-segment.cpp" />
<ClCompile Include="src\modules\modmenu\cheats\position-store.cpp" />
<ClCompile Include="src\game\utils\gang-utils.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\converters\ammo.h" />
@ -494,6 +495,7 @@
<ClInclude Include="src\modules\modmenu\cheats\position-store.h" />
<ClInclude Include="src\modules\modmenu\events\position-store-entries-update.h" />
<ClInclude Include="src\modules\modmenu\events\player-pos-rot-update.h" />
<ClInclude Include="src\game\utils\gang-utils.h" />
</ItemGroup>
<ItemGroup>
<None Include="GTA2.props" />

View File

@ -177,5 +177,13 @@ namespace Game {
typedef void(__fastcall WorldPointToScreenType)(Camera* camera, DWORD edx, SCR_f x, SCR_f y, SCR_f z, SCR_f** outX, SCR_f** outY);
static constexpr WorldPointToScreenType* WorldPointToScreen = (WorldPointToScreenType*)0x0040cfc0;
typedef GangRespect* (__fastcall GetFirstGangRespectType)(GangRespectContainer* gangRespectContainer);
static constexpr GetFirstGangRespectType* GetFirstGangRespect = (GetFirstGangRespectType*)0x0045dd60;
typedef GangRespect* (__fastcall GetNextGangRespectType)(GangRespectContainer* gangRespectContainer);
static constexpr GetNextGangRespectType* GetNextGangRespect = (GetNextGangRespectType*)0x0045ddb0;
typedef wchar_t* (__fastcall GetGangNameType)(GangRespect* gangRespect);
static constexpr GetGangNameType* GetGangName = (GetGangNameType*)0x0045dd20;
};
}

View File

@ -2963,7 +2963,7 @@ struct Player { /* Player actually */
byte field_0x29;
short field_0x2a;
short field_0x2c;
byte field_0x2e;
byte gangsRespectIndex;
byte field_0x2f;
byte field_0x30;
byte field_0x31;
@ -5778,8 +5778,8 @@ struct GameObjectsManager {
typedef struct GangRespect GangRespect, *PGangRespect;
struct GangRespect {
u1 field_0x0;
u1 id;
bool present;
char id;
char gangName[10];
undefined field_0xc;
undefined field_0xd;
@ -6033,12 +6033,34 @@ struct GangRespect {
undefined4 field_0x108;
undefined4 field_0x10c;
undefined field_0x110[12];
char respect;
undefined field_0x11d;
undefined field_0x11e;
undefined field_0x11f;
char respectArr[4];
undefined2 field_0x120;
undefined field_0x122[26];
undefined field_0x122;
undefined field_0x123;
undefined field_0x124;
undefined field_0x125;
undefined field_0x126;
undefined field_0x127;
undefined field_0x128;
undefined field_0x129;
undefined field_0x12a;
undefined field_0x12b;
undefined field_0x12c;
undefined field_0x12d;
undefined field_0x12e;
undefined field_0x12f;
undefined field_0x130;
undefined field_0x131;
undefined field_0x132;
undefined field_0x133;
undefined field_0x134;
undefined field_0x135;
undefined field_0x136;
undefined field_0x137;
byte spritesOffset;
bool shouldDraw;
undefined field_0x13a;
undefined field_0x13b;
undefined4 field_0x13c;
u1 field_0x140;
u1 field_0x141;

View File

@ -0,0 +1,25 @@
#include "gang-utils.h"
#include "../memory.h"
#include "../functions.h"
std::vector<Game::GangRespect*> Game::Utils::GetVisibleGangs()
{
std::vector<GangRespect*> gangs;
GangRespectContainer* container = Memory::GetGangRespectContainer();
if (!container) {
return gangs;
}
GangRespect* gang = Functions::GetFirstGangRespect(container);
if (!gang) {
return gangs;
}
do {
gangs.push_back(gang);
gang = Functions::GetNextGangRespect(container);
} while (gang);
return gangs;
}

View File

@ -0,0 +1,7 @@
#pragma once
#include "../common.h"
#include "../gta2_wrapper.h"
namespace Game::Utils {
std::vector<GangRespect*> GetVisibleGangs();
}

View File

@ -4,6 +4,7 @@
#include "car-roof-utils.h"
#include "keyboard-utils.h"
#include "cop-value-utils.h"
#include "gang-utils.h"
#include "lists-utils.h"
#include "player-utils.h"
#include "scrf-utils.h"

View File

@ -66,7 +66,7 @@ bool ModMenuModule::PlayerStatsMenu::Attach()
Core::MakeResolver(
Game::Memory::GetGangRespectContainer,
mem(&Game::GangRespectContainer::gang), idx(0),
mem(&Game::GangRespect::respect)
mem(&Game::GangRespect::respectArr), idx(0)
),
UiModule::VarTextEditableControllerOptions{ L"Respect 1: #", L"#" }
);
@ -78,7 +78,7 @@ bool ModMenuModule::PlayerStatsMenu::Attach()
Core::MakeResolver(
Game::Memory::GetGangRespectContainer,
mem(&Game::GangRespectContainer::gang), idx(1),
mem(&Game::GangRespect::respect)
mem(&Game::GangRespect::respectArr), idx(0)
),
UiModule::VarTextEditableControllerOptions{ L"Respect 2: #", L"#" }
);
@ -90,7 +90,7 @@ bool ModMenuModule::PlayerStatsMenu::Attach()
Core::MakeResolver(
Game::Memory::GetGangRespectContainer,
mem(&Game::GangRespectContainer::gang), idx(2),
mem(&Game::GangRespect::respect)
mem(&Game::GangRespect::respectArr), idx(0)
),
UiModule::VarTextEditableControllerOptions{ L"Respect 3: #", L"#" }
);