Skip to content

Commit

Permalink
fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
user-grinch committed Aug 8, 2023
1 parent 5750315 commit 536a9db
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 65 deletions.
13 changes: 13 additions & 0 deletions src/dllmain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include "soundsystem.h"

static ThiscallEvent <AddressList<0x5E7859, H_CALL>, PRIORITY_BEFORE, ArgPickN<CPed*, 0>, void(CPed*)> weaponRenderEvent;
static ThiscallEvent <AddressList<0x5343B2, H_CALL>, PRIORITY_BEFORE, ArgPickN<CObject*, 0>, void(CObject*)> objectRenderEvent;

enum class eNodeEntityType {
Ped,
Expand Down Expand Up @@ -37,6 +38,14 @@ static void ProcessNodesRecursive(RwFrame * frame, void* pEntity, eNodeEntityTyp
CWeapon *pWep = static_cast<CWeapon*>(pEntity);
BodyState.Process(frame, pWep);
BodyState.ProcessZen(frame, pWep);
} else if (type == eNodeEntityType::Object) {

/*
processing weapon & jetpack pickups here
*/
CWeapon *pWep = static_cast<CWeapon*>(pEntity);
BodyState.Process(frame, pWep);
BodyState.ProcessZen(frame, pWep);
}
}
// LicensePlate.Process(frame, pVeh);
Expand Down Expand Up @@ -64,6 +73,10 @@ BOOL WINAPI DllMain(HINSTANCE hDllHandle, DWORD nReason, LPVOID Reserved) {
ProcessNodesRecursive((RwFrame *)pVeh->m_pRwClump->object.parent, pVeh, eNodeEntityType::Vehicle);
};

objectRenderEvent += [](CObject *pObj) {
ProcessNodesRecursive((RwFrame *)pObj->m_pRwClump->object.parent, pObj, eNodeEntityType::Object);
};

Events::pedRenderEvent += [](CPed* pPed) {
// peds
ProcessNodesRecursive((RwFrame *)pPed->m_pRwClump->object.parent, pPed, eNodeEntityType::Ped);
Expand Down
61 changes: 14 additions & 47 deletions src/features/weapon/bodystate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,81 +7,48 @@ float GetStatValue(unsigned short stat) {
return plugin::CallAndReturn<float, 0x558E40, unsigned short>(stat);
}

void BodyStateFeature::Initialize(RwFrame* pFrame, CWeapon *pWeapon) {
WepData &data = wepData.Get(pWeapon);

RwFrame* child = pFrame->child;
while (child) {
const std::string name = GetFrameNodeName(child);

if (name == "slim") {
data.pSlim = child;
} else if (name == "fat") {
data.pFat = child;
} else if (name == "muscle") {
data.pMuscle = child;
} else if (name == "slim+") {
data.pSlimp = child;
} else if (name == "fat+") {
data.pFatp = child;
} else if (name == "muscle+") {
data.pMusclep = child;
}
child = child->next;
}
}

void BodyStateFeature::Process(RwFrame* frame, CWeapon *pWeapon) {
std::string name = GetFrameNodeName(frame);
if (name.find("x_body_state_zen") != std::string::npos) {
WepData &data = wepData.Get(pWeapon);
if (!data.m_bInitialized) {
Initialize(frame, pWeapon);
data.m_bInitialized = true;
}

if (name.find("x_body_state") != std::string::npos) {
bool isMuscle = GetStatValue(23) == 1000.0f;
bool isFat = GetStatValue(21) == 1000.0f;
bool isSlim = !(isMuscle && isFat);

Util::HideAllChilds(frame);
if (isMuscle) { // muscle
Util::ShowAllAtomics(data.pMuscle);
Util::ShowChildWithName(frame, "muscle");
} else if (isMuscle) { // fat
Util::ShowAllAtomics(data.pFat);
Util::ShowChildWithName(frame, "fat");
} else { // slim
Util::ShowAllAtomics(data.pSlim);
Util::ShowChildWithName(frame, "slim");
}
}
}

void BodyStateFeature::ProcessZen(RwFrame* frame, CWeapon *pWeapon) {
std::string name = GetFrameNodeName(frame);
if (name.find("x_body_state") != std::string::npos) {
WepData &data = wepData.Get(pWeapon);
if (!data.m_bInitialized) {
Initialize(frame, pWeapon);
data.m_bInitialized = true;
}

if (name.find("x_body_state_zen") != std::string::npos) {
bool isMuscle = GetStatValue(23) == 1000;
bool isFat = GetStatValue(21) == 1000;
bool isSlim = !(isMuscle && isFat);

CPlayerPed *pPlayer = FindPlayerPed();
if (!pPlayer) {
return;
}

bool isLarge = pPlayer->m_pPlayerData->m_pPedClothesDesc->m_anModelKeys[0] != 3139216588; //hoodyA model

bool isUniform = pPlayer->m_pPlayerData->m_pPedClothesDesc->m_anTextureKeys[17] != 0; // default outfit
bool isPlus = isLarge && !isUniform;

Util::HideAllChilds(frame);
if (isFat) { // fat
Util::ShowAllAtomics(isLarge? data.pFatp : data.pFat);
if (isFat && isMuscle) {
Util::ShowChildWithName(frame, "fat_muscle");
} else if (isFat) { // fat
Util::ShowChildWithName(frame, isPlus? "fat+" : "fat");
} else if (isMuscle) { // muscle
Util::ShowAllAtomics(isLarge? data.pMusclep : data.pMuscle);
Util::ShowChildWithName(frame, isPlus? "muscle+" : "muscle");
} else { // slim
Util::ShowAllAtomics(isLarge? data.pSlimp : data.pSlim);
Util::ShowChildWithName(frame, isPlus? "slim+" : "slim");
}
}
}
18 changes: 0 additions & 18 deletions src/features/weapon/bodystate.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,7 @@
#include <vector>

class BodyStateFeature : public IFeature {
protected:
struct WepData {
bool m_bInitialized = false;
RwFrame *pSlim = nullptr;
RwFrame *pFat = nullptr;
RwFrame *pMuscle = nullptr;

// for zen version
RwFrame *pSlimp = nullptr;
RwFrame *pFatp = nullptr;
RwFrame *pMusclep = nullptr;
WepData(CWeapon *pWeapon) {}
~WepData() {}
};

WeaponExtender<WepData> wepData;

public:
void Initialize(RwFrame* frame, CWeapon *pWeapon);
void Process(RwFrame* frame, CWeapon *pWeapon);
void ProcessZen(RwFrame* frame, CWeapon *pWeapon);
};
Expand Down
22 changes: 22 additions & 0 deletions src/util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,28 @@ void Util::HideAllAtomics(RwFrame * frame) {
return;
}

void Util::HideChildWithName(RwFrame *parent_frame, const char* name) {
RwFrame* child = parent_frame->child;
while (child) {
if (!strcmp(GetFrameNodeName(child), name)) {
Util::HideAllAtomics(child);
return;
}
child = child->next;
}
}

void Util::ShowChildWithName(RwFrame *parent_frame, const char* name) {
RwFrame* child = parent_frame->child;
while (child) {
if (!strcmp(GetFrameNodeName(child), name)) {
Util::ShowAllAtomics(child);
return;
}
child = child->next;
}
}

void Util::HideAllChilds(RwFrame *parent_frame) {
RwFrame* child = parent_frame->child;
while (child) {
Expand Down
2 changes: 2 additions & 0 deletions src/util.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ class Util {
static void HideAllAtomics(RwFrame * frame);
static void ShowAllAtomics(RwFrame * frame);

static void HideChildWithName(RwFrame *parent_frame, const char* name);
static void ShowChildWithName(RwFrame *parent_frame, const char* name);
static void HideAllChilds(RwFrame *parent_frame);
static void ShowAllChilds(RwFrame *parent_frame);
};
Expand Down

0 comments on commit 536a9db

Please sign in to comment.