Skip to content
Permalink
Browse files
Removed useless binkbuffer from videoplayer
Shadows Distance option
IDE flag to toggle RT shadows on objects
  • Loading branch information
CookiePLMonster committed Jul 26, 2014
1 parent b463c56 commit ab385d67a94017827c5c7d365651989c020f7c61
@@ -2,6 +2,8 @@
#include "Building.h" #include "Building.h"


#include "Pools.h" #include "Pools.h"
#include "RealTimeShadowMgr.h"
#include "Shadows.h"


void* CBuilding::operator new(size_t size) void* CBuilding::operator new(size_t size)
{ {
@@ -12,4 +14,62 @@ void* CBuilding::operator new(size_t size)
void CBuilding::operator delete(void* ptr) void CBuilding::operator delete(void* ptr)
{ {
CPools::GetBuildingPool()->Delete(static_cast<CBuilding*>(ptr)); CPools::GetBuildingPool()->Delete(static_cast<CBuilding*>(ptr));
} }

void CBuilding::PreRender()
{
CEntity::PreRender();
CShadows::StoreRealTimeShadowForBuilding(this);
}

void CBuildingAux::Construct(CBuilding* pParent)
{
CBuildingAux* pSpace = CPools::GetBuildingPoolAux()->GetAtPointer(pParent);

// ctor
pSpace->m_pShadow = nullptr;
}

CBuilding* CBuildingAux::Destruct(CBuilding* pParent)
{
CBuildingAux* pSpace = CPools::GetBuildingPoolAux()->GetAtPointer(pParent);

// dtor
if ( pSpace->m_pShadow )
g_realTimeShadowMan.ReturnRealTimeShadow(pSpace->m_pShadow);

return pParent;
}

static void __declspec(naked) CtorHack()
{
_asm
{
mov dword ptr [esi], 8585C8h
push esi
call CBuildingAux::Construct
add esp, 4
mov eax, esi
pop esi
retn
}
}

static void __declspec(naked) DtorHack()
{
_asm
{
push ecx
call CBuildingAux::Destruct
add esp, 4
mov ecx, eax
push 535E90h
retn
}
}

static StaticPatcher Patcher([](){
Memory::InjectHook(0x403E16, &CtorHack, PATCH_JUMP);
Memory::InjectHook(0x404134, &DtorHack);
Memory::Patch(0x85860C, &CBuilding::PreRender_Stub);
});
@@ -20,6 +20,11 @@ class NOVMT CBuilding : public CEntity


void* operator new(size_t size); void* operator new(size_t size);
void operator delete(void* ptr); void operator delete(void* ptr);

inline void PreRender_Stub()
{ CBuilding::PreRender(); }

virtual void PreRender() override;
}; };




@@ -34,4 +39,21 @@ class NOVMT CDummy : public CEntity
} }
}; };


class CBuildingAux
{
friend class CBuilding;

private:
class CRealTimeShadow* m_pShadow;

public:
inline class CRealTimeShadow* GetShadow()
{ return m_pShadow; }
inline void SetShadow(class CRealTimeShadow* pShadow)
{ m_pShadow = pShadow; }

static void Construct(CBuilding* pParent);
static CBuilding* Destruct(CBuilding* pParent);
};

#endif #endif
@@ -227,9 +227,6 @@ void CEmpire::Place()


m_pBuilding[0] = pEmpireBuilding; m_pBuilding[0] = pEmpireBuilding;


// Additional models
CBuilding pAdditionalBuilding[2];

// TODO: Damaged check // TODO: Damaged check
for ( int i = 0; i < 2; i++ ) for ( int i = 0; i < 2; i++ )
{ {
@@ -39,7 +39,16 @@ WRAPPER void CFileLoader::LoadCollisionFile(const char* pFileName, unsigned char
static WRAPPER void InitPostIDEStuff() { EAXJMP(0x5B924E); } static WRAPPER void InitPostIDEStuff() { EAXJMP(0x5B924E); }
static WRAPPER void InitPostLoadLevelStuff() { EAXJMP(0x5B930F); } static WRAPPER void InitPostLoadLevelStuff() { EAXJMP(0x5B930F); }


static WRAPPER void SetAtomicModelInfoFlags(CAtomicModelInfo* pInfo, unsigned int dwFlags) { WRAPARG(pInfo); WRAPARG(dwFlags); EAXJMP(0x5B3B20); } void SetAtomicModelInfoFlags(CAtomicModelInfo* pInfo, unsigned int dwFlags)
{
((void(*)(CAtomicModelInfo*,unsigned int))0x5B3B20)(pInfo, dwFlags);

// VCS PC flags

// Project realtime shadow?
if ( dwFlags & 0x40000 )
pInfo->SetCastShadowFlag();
}


std::string CFileLoader::TranslatePath(const char* pFileName, const char* pDLCName) std::string CFileLoader::TranslatePath(const char* pFileName, const char* pDLCName)
{ {
@@ -407,4 +416,9 @@ bool CFileLoader::ParseLevelFile(const char* pFileName, char* pDLCName)
return true; return true;
} }
return false; return false;
} }


static StaticPatcher Patcher([](){
Memory::InjectHook(0x5B3F7B, SetAtomicModelInfoFlags);
});

0 comments on commit ab385d6

Please sign in to comment.