Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Removed useless binkbuffer from videoplayer
Shadows Distance option
IDE flag to toggle RT shadows on objects
- Loading branch information
There are no files selected for viewing
|
|
@@ -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);
|
|
|
|
});
|
Oops, something went wrong.