mirror of
https://github.com/CookiePLMonster/SilentPatch.git
synced 2024-12-28 23:03:01 +05:00
Misc fixes
This commit is contained in:
parent
7e7aaa5db9
commit
6c5a025c60
4 changed files with 62 additions and 53 deletions
|
@ -1,6 +1,8 @@
|
|||
#ifndef __GENERAL
|
||||
#define __GENERAL
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
class CSimpleTransform
|
||||
{
|
||||
public:
|
||||
|
@ -11,7 +13,7 @@ public:
|
|||
class CRGBA
|
||||
{
|
||||
public:
|
||||
BYTE r, g, b, a;
|
||||
uint8_t r, g, b, a;
|
||||
|
||||
inline CRGBA() {}
|
||||
|
||||
|
@ -19,33 +21,31 @@ public:
|
|||
: r(in.r), g(in.g), b(in.b), a(in.a)
|
||||
{}
|
||||
|
||||
inline CRGBA(const CRGBA& in, BYTE alpha)
|
||||
inline CRGBA(const CRGBA& in, uint8_t alpha)
|
||||
: r(in.r), g(in.g), b(in.b), a(alpha)
|
||||
{}
|
||||
|
||||
|
||||
inline CRGBA(BYTE red, BYTE green, BYTE blue, BYTE alpha = 255)
|
||||
inline CRGBA(uint8_t red, uint8_t green, uint8_t blue, uint8_t alpha = 255)
|
||||
: r(red), g(green), b(blue), a(alpha)
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
friend CRGBA Blend(const CRGBA& One, T OneStrength, const CRGBA& Two, T TwoStrength)
|
||||
{ T TotalStrength = OneStrength + TwoStrength;
|
||||
return CRGBA( ((One.r * OneStrength) + (Two.r * TwoStrength))/TotalStrength,
|
||||
((One.g * OneStrength) + (Two.g * TwoStrength))/TotalStrength,
|
||||
((One.b * OneStrength) + (Two.b * TwoStrength))/TotalStrength,
|
||||
((One.a * OneStrength) + (Two.a * TwoStrength))/TotalStrength); }
|
||||
friend CRGBA Blend(const CRGBA& From, const CRGBA& To, double BlendVal)
|
||||
{ double InvBlendVal = 1.0 - BlendVal;
|
||||
return CRGBA( To.r * BlendVal + From.r * InvBlendVal,
|
||||
To.g * BlendVal + From.g * InvBlendVal,
|
||||
To.b * BlendVal + From.b * InvBlendVal,
|
||||
To.a * BlendVal + From.a * InvBlendVal); }
|
||||
|
||||
template <typename T>
|
||||
friend CRGBA Blend(const CRGBA& One, T OneStrength, const CRGBA& Two, T TwoStrength, const CRGBA& Three, T ThreeStrength)
|
||||
{ T TotalStrength = OneStrength + TwoStrength + ThreeStrength;
|
||||
return CRGBA( ((One.r * OneStrength) + (Two.r * TwoStrength) + (Three.r * ThreeStrength))/TotalStrength,
|
||||
((One.g * OneStrength) + (Two.g * TwoStrength) + (Three.g * ThreeStrength))/TotalStrength,
|
||||
((One.b * OneStrength) + (Two.b * TwoStrength) + (Three.b * ThreeStrength))/TotalStrength,
|
||||
((One.a * OneStrength) + (Two.a * TwoStrength) + (Three.a * ThreeStrength))/TotalStrength); }
|
||||
friend CRGBA BlendSqr(const CRGBA& From, const CRGBA& To, double BlendVal)
|
||||
{ double InvBlendVal = 1.0 - BlendVal;
|
||||
return CRGBA( sqrt((To.r * To.r) * BlendVal + (From.r * From.r) * InvBlendVal),
|
||||
sqrt((To.g * To.g) * BlendVal + (From.g * From.g) * InvBlendVal),
|
||||
sqrt((To.b * To.b) * BlendVal + (From.b * From.b) * InvBlendVal),
|
||||
sqrt((To.a * To.a) * BlendVal + (From.a * From.a) * InvBlendVal)); }
|
||||
|
||||
// SilentPatch
|
||||
CRGBA* BlendGangColour(unsigned char r, unsigned char g, unsigned char b, unsigned char a);
|
||||
CRGBA* BlendGangColour(uint8_t r, uint8_t g, uint8_t b, uint8_t a);
|
||||
};
|
||||
|
||||
class CRect
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include "StdAfxSA.h"
|
||||
#include <limits>
|
||||
#include <algorithm>
|
||||
|
||||
#include "ScriptSA.h"
|
||||
#include "GeneralSA.h"
|
||||
|
@ -69,7 +70,7 @@ RwFrame* RwFrameForAllChildren(RwFrame* frame, RwFrameCallBack callBack, void* d
|
|||
{
|
||||
for ( RwFrame* curFrame = frame->child; curFrame != nullptr; curFrame = curFrame->next )
|
||||
{
|
||||
if ( !callBack(curFrame, data) )
|
||||
if ( callBack(curFrame, data) == NULL )
|
||||
break;
|
||||
}
|
||||
return frame;
|
||||
|
@ -79,7 +80,7 @@ RwFrame* RwFrameForAllObjects(RwFrame* frame, RwObjectCallBack callBack, void* d
|
|||
{
|
||||
for ( RwLLLink* link = rwLinkListGetFirstLLLink(&frame->objectList); link != rwLinkListGetTerminator(&frame->objectList); link = rwLLLinkGetNext(link) )
|
||||
{
|
||||
if ( !callBack(&rwLLLinkGetData(link, RwObjectHasFrame, lFrame)->object, data) )
|
||||
if ( callBack(&rwLLLinkGetData(link, RwObjectHasFrame, lFrame)->object, data) == NULL )
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -131,7 +132,7 @@ RpClump* RpClumpForAllAtomics(RpClump* clump, RpAtomicCallBack callback, void* p
|
|||
{
|
||||
for ( RwLLLink* link = rwLinkListGetFirstLLLink(&clump->atomicList); link != rwLinkListGetTerminator(&clump->atomicList); link = rwLLLinkGetNext(link) )
|
||||
{
|
||||
if ( !callback(rwLLLinkGetData(link, RpAtomic, inClumpLink), pData) )
|
||||
if ( callback(rwLLLinkGetData(link, RpAtomic, inClumpLink), pData) == NULL )
|
||||
break;
|
||||
}
|
||||
return clump;
|
||||
|
@ -148,7 +149,7 @@ RpClump* RpClumpRender(RpClump* clump)
|
|||
{
|
||||
// Not sure why they need this
|
||||
RwFrameGetLTM(RpAtomicGetFrame(curAtomic));
|
||||
if ( !RpAtomicRender(curAtomic) )
|
||||
if ( RpAtomicRender(curAtomic) == NULL )
|
||||
retClump = NULL;
|
||||
}
|
||||
}
|
||||
|
@ -159,7 +160,7 @@ RpGeometry* RpGeometryForAllMaterials(RpGeometry* geometry, RpMaterialCallBack f
|
|||
{
|
||||
for ( RwInt32 i = 0, j = geometry->matList.numMaterials; i < j; i++ )
|
||||
{
|
||||
if ( !fpCallBack(geometry->matList.materials[i], pData) )
|
||||
if ( fpCallBack(geometry->matList.materials[i], pData) == NULL )
|
||||
break;
|
||||
}
|
||||
return geometry;
|
||||
|
@ -306,13 +307,13 @@ RpAtomic* TwoPassAlphaRender_aap(RpAtomic* atomic)
|
|||
|
||||
atomic = AtomicDefaultRenderCallBack(atomic);
|
||||
|
||||
if ( atomic )
|
||||
if ( atomic != nullptr )
|
||||
{
|
||||
// 2nd pass
|
||||
RwRenderStateSet(rwRENDERSTATEALPHATESTFUNCTION, reinterpret_cast<void*>(rwALPHATESTFUNCTIONLESS));
|
||||
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, FALSE);
|
||||
|
||||
AtomicDefaultRenderCallBack(atomic);
|
||||
atomic = AtomicDefaultRenderCallBack(atomic);
|
||||
}
|
||||
|
||||
RwRenderStateSet(rwRENDERSTATEALPHATESTFUNCTIONREF, reinterpret_cast<void*>(nPushedAlpha));
|
||||
|
@ -345,14 +346,14 @@ RpAtomic* TwoPassAlphaRender_Silent(RpAtomic* atomic)
|
|||
|
||||
atomic = AtomicDefaultRenderCallBack(atomic);
|
||||
|
||||
if ( atomic )
|
||||
if ( atomic != nullptr )
|
||||
{
|
||||
// 2nd pass
|
||||
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, reinterpret_cast<void*>(TRUE));
|
||||
RwRenderStateSet(rwRENDERSTATEALPHATESTFUNCTION, reinterpret_cast<void*>(rwALPHATESTFUNCTIONLESS));
|
||||
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, FALSE);
|
||||
|
||||
AtomicDefaultRenderCallBack(atomic);
|
||||
atomic = AtomicDefaultRenderCallBack(atomic);
|
||||
}
|
||||
|
||||
RwRenderStateSet(rwRENDERSTATEALPHATESTFUNCTIONREF, reinterpret_cast<void*>(nPushedAlpha));
|
||||
|
@ -630,9 +631,8 @@ bool GetCurrentZoneLockedOrUnlocked(float fPosX, float fPosY)
|
|||
// By NTAuthority
|
||||
void DrawMoonWithPhases(int moonColor, float* screenPos, float sizeX, float sizeY)
|
||||
{
|
||||
if ( !gpMoonMask )
|
||||
{
|
||||
|
||||
if ( gpMoonMask == nullptr )
|
||||
{
|
||||
if ( GetFileAttributes("lunar.png") != INVALID_FILE_ATTRIBUTES )
|
||||
{
|
||||
// load from file
|
||||
|
@ -692,9 +692,10 @@ void DrawMoonWithPhases(int moonColor, float* screenPos, float sizeX, float size
|
|||
//D3DPERF_EndEvent();
|
||||
}
|
||||
|
||||
CRGBA* CRGBA::BlendGangColour(unsigned char r, unsigned char g, unsigned char b, unsigned char a)
|
||||
CRGBA* CRGBA::BlendGangColour(uint8_t r, uint8_t g, uint8_t b, uint8_t a)
|
||||
{
|
||||
*this = Blend(CRGBA(r, g, b), pCurrZoneInfo->ZoneColour.a, HudColour[3], static_cast<BYTE>(255-pCurrZoneInfo->ZoneColour.a));
|
||||
double colourIntensity = static_cast<double>(pCurrZoneInfo->ZoneColour.a) / 255.0;
|
||||
*this = BlendSqr(CRGBA(r, g, b), HudColour[3], colourIntensity);
|
||||
this->a = a;
|
||||
|
||||
return this;
|
||||
|
@ -702,7 +703,7 @@ CRGBA* CRGBA::BlendGangColour(unsigned char r, unsigned char g, unsigned char b,
|
|||
|
||||
void SunAndMoonFarClip()
|
||||
{
|
||||
fSunFarClip = min(1500.0f, fFarClipZ);
|
||||
fSunFarClip = std::min(1500.0f, fFarClipZ);
|
||||
DoSunAndMoon();
|
||||
}
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#define _CRT_SECURE_NO_WARNINGS
|
||||
#define _USE_MATH_DEFINES
|
||||
|
||||
#define NOMINMAX
|
||||
#define WINVER 0x0502
|
||||
#define _WIN32_WINNT 0x0502
|
||||
|
||||
|
@ -50,12 +51,6 @@ extern RpHAnimHierarchy* (*GetAnimHierarchyFromSkinClump)(RpClump*);
|
|||
extern unsigned char& nGameClockDays;
|
||||
extern unsigned char& nGameClockMonths;
|
||||
|
||||
template<typename T>
|
||||
inline T random(T a, T b)
|
||||
{
|
||||
return a + static_cast<T>(rand() * (1.0f/(RAND_MAX+1)) * (b - a));
|
||||
}
|
||||
|
||||
#define DISABLE_FLA_DONATION_WINDOW 0
|
||||
|
||||
//#define HIDE_MATERIAL
|
||||
|
|
|
@ -1,16 +1,27 @@
|
|||
#include "StdAfxSA.h"
|
||||
|
||||
#include <set>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include "VehicleSA.h"
|
||||
#include "TimerSA.h"
|
||||
|
||||
std::set<unsigned int> vecRotorExceptions;
|
||||
std::vector<unsigned int> vecRotorExceptions;
|
||||
|
||||
static bool ShouldIgnoreRotor( unsigned int id )
|
||||
{
|
||||
return std::find( vecRotorExceptions.begin(), vecRotorExceptions.end(), id ) != vecRotorExceptions.end();
|
||||
}
|
||||
|
||||
static void* varVehicleRender = AddressByVersion<void*>(0x6D0E60, 0x6D1680, 0x70C0B0);
|
||||
WRAPPER void CVehicle::Render() { VARJMP(varVehicleRender); }
|
||||
static void* varIsLawEnforcementVehicle = AddressByVersion<void*>(0x6D2370, 0x6D2BA0, 0x70D8C0);
|
||||
WRAPPER bool CVehicle::IsLawEnforcementVehicle() { VARJMP(varIsLawEnforcementVehicle); }
|
||||
|
||||
static int32_t random(int32_t from, int32_t to)
|
||||
{
|
||||
return from + ( rand() % (to-from) );
|
||||
}
|
||||
|
||||
static RwObject* GetCurrentAtomicObjectCB(RwObject* pObject, void* data)
|
||||
{
|
||||
if ( RpAtomicGetFlags(pObject) & rpATOMICRENDER )
|
||||
|
@ -62,7 +73,7 @@ void ReadRotorFixExceptions(const wchar_t* pPath)
|
|||
|
||||
unsigned int toList = _wtoi( fileID );
|
||||
if ( toList != 0 )
|
||||
vecRotorExceptions.insert( toList );
|
||||
vecRotorExceptions.push_back( toList );
|
||||
}
|
||||
|
||||
delete[] buf;
|
||||
|
@ -93,7 +104,7 @@ bool CVehicle::CustomCarPlate_TextureCreate(CVehicleModelInfo* pModelInfo)
|
|||
else if ( IsLawEnforcementVehicle() )
|
||||
PlateDesign = CCustomCarPlateMgr::GetMapRegionPlateDesign();
|
||||
else
|
||||
PlateDesign = random(0, 20) == 0 ? random<signed char>(0, 3) : CCustomCarPlateMgr::GetMapRegionPlateDesign();
|
||||
PlateDesign = random(0, 20) == 0 ? random(0, 3) : CCustomCarPlateMgr::GetMapRegionPlateDesign();
|
||||
|
||||
assert(PlateDesign >= 0 && PlateDesign < 3);
|
||||
|
||||
|
@ -154,13 +165,14 @@ void CVehicle::CustomCarPlate_BeforeRenderingStart(CVehicleModelInfo* pModelInfo
|
|||
void CHeli::Render()
|
||||
{
|
||||
double dRotorsSpeed, dMovingRotorSpeed;
|
||||
bool bHasMovingRotor = m_pCarNode[13] != nullptr && vecRotorExceptions.count(m_nModelIndex) == 0;
|
||||
bool bHasMovingRotor2 = m_pCarNode[15] != nullptr && vecRotorExceptions.count(m_nModelIndex) == 0;;
|
||||
bool bDisplayRotors = !ShouldIgnoreRotor( m_nModelIndex );
|
||||
bool bHasMovingRotor = m_pCarNode[13] != nullptr && bDisplayRotors;
|
||||
bool bHasMovingRotor2 = m_pCarNode[15] != nullptr && bDisplayRotors;
|
||||
|
||||
m_nTimeTillWeNeedThisCar = CTimer::m_snTimeInMilliseconds + 3000;
|
||||
|
||||
if ( m_fRotorSpeed > 0.0 )
|
||||
dRotorsSpeed = min(1.7 * (1.0/0.22) * m_fRotorSpeed, 1.5);
|
||||
dRotorsSpeed = std::min(1.7 * (1.0/0.22) * m_fRotorSpeed, 1.5);
|
||||
else
|
||||
dRotorsSpeed = 0.0;
|
||||
|
||||
|
@ -168,8 +180,8 @@ void CHeli::Render()
|
|||
if ( dMovingRotorSpeed < 0.0 )
|
||||
dMovingRotorSpeed = 0.0;
|
||||
|
||||
int nStaticRotorAlpha = static_cast<int>(min((1.5-dRotorsSpeed) * 255.0, 255));
|
||||
int nMovingRotorAlpha = static_cast<int>(min(dMovingRotorSpeed * 175.0, 175));
|
||||
int nStaticRotorAlpha = static_cast<int>(std::min((1.5-dRotorsSpeed) * 255.0, 255.0));
|
||||
int nMovingRotorAlpha = static_cast<int>(std::min(dMovingRotorSpeed * 175.0, 175.0));
|
||||
|
||||
if ( m_pCarNode[12] )
|
||||
{
|
||||
|
@ -209,13 +221,14 @@ void CHeli::Render()
|
|||
void CPlane::Render()
|
||||
{
|
||||
double dRotorsSpeed, dMovingRotorSpeed;
|
||||
bool bHasMovingProp = m_pCarNode[13] != nullptr && vecRotorExceptions.count(m_nModelIndex) == 0;
|
||||
bool bHasMovingProp2 = m_pCarNode[15] != nullptr && vecRotorExceptions.count(m_nModelIndex) == 0;
|
||||
bool bDisplayRotors = !ShouldIgnoreRotor( m_nModelIndex );
|
||||
bool bHasMovingProp = m_pCarNode[13] != nullptr && bDisplayRotors;
|
||||
bool bHasMovingProp2 = m_pCarNode[15] != nullptr && bDisplayRotors;
|
||||
|
||||
m_nTimeTillWeNeedThisCar = CTimer::m_snTimeInMilliseconds + 3000;
|
||||
|
||||
if ( m_fPropellerSpeed > 0.0 )
|
||||
dRotorsSpeed = min(1.7 * (1.0/0.31) * m_fPropellerSpeed, 1.5);
|
||||
dRotorsSpeed = std::min(1.7 * (1.0/0.31) * m_fPropellerSpeed, 1.5);
|
||||
else
|
||||
dRotorsSpeed = 0.0;
|
||||
|
||||
|
@ -223,8 +236,8 @@ void CPlane::Render()
|
|||
if ( dMovingRotorSpeed < 0.0 )
|
||||
dMovingRotorSpeed = 0.0;
|
||||
|
||||
int nStaticRotorAlpha = static_cast<int>(min((1.5-dRotorsSpeed) * 255.0, 255));
|
||||
int nMovingRotorAlpha = static_cast<int>(min(dMovingRotorSpeed * 175.0, 175));
|
||||
int nStaticRotorAlpha = static_cast<int>(std::min((1.5-dRotorsSpeed) * 255.0, 255.0));
|
||||
int nMovingRotorAlpha = static_cast<int>(std::min(dMovingRotorSpeed * 175.0, 175.0));
|
||||
|
||||
if ( m_pCarNode[12] )
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue