|
|
|
@ -22,10 +22,10 @@
|
|
|
|
|
#include "Shadows.h"
|
|
|
|
|
#include "main.h"
|
|
|
|
|
|
|
|
|
|
RxObjSpace3DVertex StreakVertices[4];
|
|
|
|
|
RwIm3DVertex StreakVertices[4];
|
|
|
|
|
RwImVertexIndex StreakIndexList[12];
|
|
|
|
|
|
|
|
|
|
RxObjSpace3DVertex TraceVertices[6];
|
|
|
|
|
RwIm3DVertex TraceVertices[6];
|
|
|
|
|
RwImVertexIndex TraceIndexList[12];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -34,60 +34,60 @@ CSpecialFX::Init(void)
|
|
|
|
|
{
|
|
|
|
|
CBulletTraces::Init();
|
|
|
|
|
|
|
|
|
|
RwIm3DVertexSetU(&StreakVertices[0], 0.0f);
|
|
|
|
|
RwIm3DVertexSetV(&StreakVertices[0], 0.0f);
|
|
|
|
|
RwIm3DVertexSetU(&StreakVertices[1], 1.0f);
|
|
|
|
|
RwIm3DVertexSetV(&StreakVertices[1], 0.0f);
|
|
|
|
|
RwIm3DVertexSetU(&StreakVertices[2], 0.0f);
|
|
|
|
|
RwIm3DVertexSetV(&StreakVertices[2], 0.0f);
|
|
|
|
|
RwIm3DVertexSetU(&StreakVertices[3], 1.0f);
|
|
|
|
|
RwIm3DVertexSetV(&StreakVertices[3], 0.0f);
|
|
|
|
|
|
|
|
|
|
StreakIndexList[0] = 0;
|
|
|
|
|
StreakIndexList[1] = 1;
|
|
|
|
|
StreakIndexList[2] = 2;
|
|
|
|
|
StreakIndexList[3] = 1;
|
|
|
|
|
StreakIndexList[4] = 3;
|
|
|
|
|
StreakIndexList[5] = 2;
|
|
|
|
|
StreakIndexList[6] = 0;
|
|
|
|
|
StreakIndexList[7] = 2;
|
|
|
|
|
StreakIndexList[8] = 1;
|
|
|
|
|
StreakIndexList[9] = 1;
|
|
|
|
|
StreakIndexList[10] = 2;
|
|
|
|
|
StreakIndexList[11] = 3;
|
|
|
|
|
|
|
|
|
|
RwIm3DVertexSetRGBA(&TraceVertices[0], 20, 20, 20, 255);
|
|
|
|
|
RwIm3DVertexSetRGBA(&TraceVertices[1], 20, 20, 20, 255);
|
|
|
|
|
RwIm3DVertexSetRGBA(&TraceVertices[2], 70, 70, 70, 255);
|
|
|
|
|
RwIm3DVertexSetRGBA(&TraceVertices[3], 70, 70, 70, 255);
|
|
|
|
|
RwIm3DVertexSetRGBA(&TraceVertices[4], 10, 10, 10, 255);
|
|
|
|
|
RwIm3DVertexSetRGBA(&TraceVertices[5], 10, 10, 10, 255);
|
|
|
|
|
RwIm3DVertexSetU(&TraceVertices[0], 0.0);
|
|
|
|
|
RwIm3DVertexSetV(&TraceVertices[0], 0.0);
|
|
|
|
|
RwIm3DVertexSetU(&TraceVertices[1], 1.0);
|
|
|
|
|
RwIm3DVertexSetV(&TraceVertices[1], 0.0);
|
|
|
|
|
RwIm3DVertexSetU(&TraceVertices[2], 0.0);
|
|
|
|
|
RwIm3DVertexSetV(&TraceVertices[2], 0.5);
|
|
|
|
|
RwIm3DVertexSetU(&TraceVertices[3], 1.0);
|
|
|
|
|
RwIm3DVertexSetV(&TraceVertices[3], 0.5);
|
|
|
|
|
RwIm3DVertexSetU(&TraceVertices[4], 0.0);
|
|
|
|
|
RwIm3DVertexSetV(&TraceVertices[4], 1.0);
|
|
|
|
|
RwIm3DVertexSetU(&TraceVertices[5], 1.0);
|
|
|
|
|
RwIm3DVertexSetV(&TraceVertices[5], 1.0);
|
|
|
|
|
RwIm3DVertexSetU(&StreakVertices[0], 0.0f);
|
|
|
|
|
RwIm3DVertexSetV(&StreakVertices[0], 0.0f);
|
|
|
|
|
RwIm3DVertexSetU(&StreakVertices[1], 1.0f);
|
|
|
|
|
RwIm3DVertexSetV(&StreakVertices[1], 0.0f);
|
|
|
|
|
RwIm3DVertexSetU(&StreakVertices[2], 0.0f);
|
|
|
|
|
RwIm3DVertexSetV(&StreakVertices[2], 0.0f);
|
|
|
|
|
RwIm3DVertexSetU(&StreakVertices[3], 1.0f);
|
|
|
|
|
RwIm3DVertexSetV(&StreakVertices[3], 0.0f);
|
|
|
|
|
|
|
|
|
|
StreakIndexList[0] = 0;
|
|
|
|
|
StreakIndexList[1] = 1;
|
|
|
|
|
StreakIndexList[2] = 2;
|
|
|
|
|
StreakIndexList[3] = 1;
|
|
|
|
|
StreakIndexList[4] = 3;
|
|
|
|
|
StreakIndexList[5] = 2;
|
|
|
|
|
StreakIndexList[6] = 0;
|
|
|
|
|
StreakIndexList[7] = 2;
|
|
|
|
|
StreakIndexList[8] = 1;
|
|
|
|
|
StreakIndexList[9] = 1;
|
|
|
|
|
StreakIndexList[10] = 2;
|
|
|
|
|
StreakIndexList[11] = 3;
|
|
|
|
|
|
|
|
|
|
RwIm3DVertexSetRGBA(&TraceVertices[0], 20, 20, 20, 255);
|
|
|
|
|
RwIm3DVertexSetRGBA(&TraceVertices[1], 20, 20, 20, 255);
|
|
|
|
|
RwIm3DVertexSetRGBA(&TraceVertices[2], 70, 70, 70, 255);
|
|
|
|
|
RwIm3DVertexSetRGBA(&TraceVertices[3], 70, 70, 70, 255);
|
|
|
|
|
RwIm3DVertexSetRGBA(&TraceVertices[4], 10, 10, 10, 255);
|
|
|
|
|
RwIm3DVertexSetRGBA(&TraceVertices[5], 10, 10, 10, 255);
|
|
|
|
|
RwIm3DVertexSetU(&TraceVertices[0], 0.0);
|
|
|
|
|
RwIm3DVertexSetV(&TraceVertices[0], 0.0);
|
|
|
|
|
RwIm3DVertexSetU(&TraceVertices[1], 1.0);
|
|
|
|
|
RwIm3DVertexSetV(&TraceVertices[1], 0.0);
|
|
|
|
|
RwIm3DVertexSetU(&TraceVertices[2], 0.0);
|
|
|
|
|
RwIm3DVertexSetV(&TraceVertices[2], 0.5);
|
|
|
|
|
RwIm3DVertexSetU(&TraceVertices[3], 1.0);
|
|
|
|
|
RwIm3DVertexSetV(&TraceVertices[3], 0.5);
|
|
|
|
|
RwIm3DVertexSetU(&TraceVertices[4], 0.0);
|
|
|
|
|
RwIm3DVertexSetV(&TraceVertices[4], 1.0);
|
|
|
|
|
RwIm3DVertexSetU(&TraceVertices[5], 1.0);
|
|
|
|
|
RwIm3DVertexSetV(&TraceVertices[5], 1.0);
|
|
|
|
|
|
|
|
|
|
TraceIndexList[0] = 0;
|
|
|
|
|
TraceIndexList[1] = 2;
|
|
|
|
|
TraceIndexList[2] = 1;
|
|
|
|
|
TraceIndexList[3] = 1;
|
|
|
|
|
TraceIndexList[4] = 2;
|
|
|
|
|
TraceIndexList[5] = 3;
|
|
|
|
|
TraceIndexList[6] = 2;
|
|
|
|
|
TraceIndexList[7] = 4;
|
|
|
|
|
TraceIndexList[8] = 3;
|
|
|
|
|
TraceIndexList[9] = 3;
|
|
|
|
|
TraceIndexList[10] = 4;
|
|
|
|
|
TraceIndexList[11] = 5;
|
|
|
|
|
|
|
|
|
|
TraceIndexList[0] = 0;
|
|
|
|
|
TraceIndexList[1] = 2;
|
|
|
|
|
TraceIndexList[2] = 1;
|
|
|
|
|
TraceIndexList[3] = 1;
|
|
|
|
|
TraceIndexList[4] = 2;
|
|
|
|
|
TraceIndexList[5] = 3;
|
|
|
|
|
TraceIndexList[6] = 2;
|
|
|
|
|
TraceIndexList[7] = 4;
|
|
|
|
|
TraceIndexList[8] = 3;
|
|
|
|
|
TraceIndexList[9] = 3;
|
|
|
|
|
TraceIndexList[10] = 4;
|
|
|
|
|
TraceIndexList[11] = 5;
|
|
|
|
|
|
|
|
|
|
CMotionBlurStreaks::Init();
|
|
|
|
|
CBrightLights::Init();
|
|
|
|
|
CShinyTexts::Init();
|
|
|
|
@ -112,13 +112,13 @@ LookForBatCB(RwObject *object, void *data)
|
|
|
|
|
void
|
|
|
|
|
CSpecialFX::Update(void)
|
|
|
|
|
{
|
|
|
|
|
CMotionBlurStreaks::Update();
|
|
|
|
|
CBulletTraces::Update();
|
|
|
|
|
|
|
|
|
|
if(FindPlayerPed() &&
|
|
|
|
|
FindPlayerPed()->GetWeapon()->m_eWeaponType == WEAPONTYPE_BASEBALLBAT &&
|
|
|
|
|
FindPlayerPed()->GetWeapon()->m_eWeaponState == WEAPONSTATE_FIRING)
|
|
|
|
|
RwFrameForAllObjects(FindPlayerPed()->GetNodeFrame(PED_HANDR), LookForBatCB, CModelInfo::GetModelInfo(MI_BASEBALL_BAT));
|
|
|
|
|
CMotionBlurStreaks::Update();
|
|
|
|
|
CBulletTraces::Update();
|
|
|
|
|
|
|
|
|
|
if(FindPlayerPed() &&
|
|
|
|
|
FindPlayerPed()->GetWeapon()->m_eWeaponType == WEAPONTYPE_BASEBALLBAT &&
|
|
|
|
|
FindPlayerPed()->GetWeapon()->m_eWeaponState == WEAPONSTATE_FIRING)
|
|
|
|
|
RwFrameForAllObjects(FindPlayerPed()->GetNodeFrame(PED_HANDR), LookForBatCB, CModelInfo::GetModelInfo(MI_BASEBALL_BAT));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
@ -130,78 +130,78 @@ CSpecialFX::Shutdown(void)
|
|
|
|
|
void
|
|
|
|
|
CSpecialFX::Render(void)
|
|
|
|
|
{
|
|
|
|
|
CMotionBlurStreaks::Render();
|
|
|
|
|
CBulletTraces::Render();
|
|
|
|
|
CBrightLights::Render();
|
|
|
|
|
CShinyTexts::Render();
|
|
|
|
|
CMoneyMessages::Render();
|
|
|
|
|
C3dMarkers::Render();
|
|
|
|
|
CMotionBlurStreaks::Render();
|
|
|
|
|
CBulletTraces::Render();
|
|
|
|
|
CBrightLights::Render();
|
|
|
|
|
CShinyTexts::Render();
|
|
|
|
|
CMoneyMessages::Render();
|
|
|
|
|
C3dMarkers::Render();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CRegisteredMotionBlurStreak CMotionBlurStreaks::aStreaks[NUMMBLURSTREAKS];
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CRegisteredMotionBlurStreak::Update(void)
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
bool wasUpdated;
|
|
|
|
|
bool lastWasUpdated = false;
|
|
|
|
|
for(i = 2; i > 0; i--){
|
|
|
|
|
m_pos1[i] = m_pos1[i-1];
|
|
|
|
|
m_pos2[i] = m_pos2[i-1];
|
|
|
|
|
m_isValid[i] = m_isValid[i-1];
|
|
|
|
|
wasUpdated = true;
|
|
|
|
|
if(!lastWasUpdated && !m_isValid[i])
|
|
|
|
|
wasUpdated = false;
|
|
|
|
|
lastWasUpdated = wasUpdated;
|
|
|
|
|
}
|
|
|
|
|
m_isValid[0] = false;
|
|
|
|
|
if(!wasUpdated)
|
|
|
|
|
m_id = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CRegisteredMotionBlurStreak::Render(void)
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
int a1, a2;
|
|
|
|
|
for(i = 0; i < 2; i++)
|
|
|
|
|
if(m_isValid[i] && m_isValid[i+1]){
|
|
|
|
|
a1 = (255/3)*(3-i)/3;
|
|
|
|
|
RwIm3DVertexSetRGBA(&StreakVertices[0], m_red, m_green, m_blue, a1);
|
|
|
|
|
RwIm3DVertexSetRGBA(&StreakVertices[1], m_red, m_green, m_blue, a1);
|
|
|
|
|
a2 = (255/3)*(3-(i+1))/3;
|
|
|
|
|
RwIm3DVertexSetRGBA(&StreakVertices[2], m_red, m_green, m_blue, a2);
|
|
|
|
|
RwIm3DVertexSetRGBA(&StreakVertices[3], m_red, m_green, m_blue, a2);
|
|
|
|
|
RwIm3DVertexSetPos(&StreakVertices[0], m_pos1[i].x, m_pos1[i].y, m_pos1[i].z);
|
|
|
|
|
RwIm3DVertexSetPos(&StreakVertices[1], m_pos2[i].x, m_pos2[i].y, m_pos2[i].z);
|
|
|
|
|
RwIm3DVertexSetPos(&StreakVertices[2], m_pos1[i+1].x, m_pos1[i+1].y, m_pos1[i+1].z);
|
|
|
|
|
RwIm3DVertexSetPos(&StreakVertices[3], m_pos2[i+1].x, m_pos2[i+1].y, m_pos2[i+1].z);
|
|
|
|
|
void
|
|
|
|
|
CRegisteredMotionBlurStreak::Update(void)
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
bool wasUpdated;
|
|
|
|
|
bool lastWasUpdated = false;
|
|
|
|
|
for(i = 2; i > 0; i--){
|
|
|
|
|
m_pos1[i] = m_pos1[i-1];
|
|
|
|
|
m_pos2[i] = m_pos2[i-1];
|
|
|
|
|
m_isValid[i] = m_isValid[i-1];
|
|
|
|
|
wasUpdated = true;
|
|
|
|
|
if(!lastWasUpdated && !m_isValid[i])
|
|
|
|
|
wasUpdated = false;
|
|
|
|
|
lastWasUpdated = wasUpdated;
|
|
|
|
|
}
|
|
|
|
|
m_isValid[0] = false;
|
|
|
|
|
if(!wasUpdated)
|
|
|
|
|
m_id = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CRegisteredMotionBlurStreak::Render(void)
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
int a1, a2;
|
|
|
|
|
for(i = 0; i < 2; i++)
|
|
|
|
|
if(m_isValid[i] && m_isValid[i+1]){
|
|
|
|
|
a1 = (255/3)*(3-i)/3;
|
|
|
|
|
RwIm3DVertexSetRGBA(&StreakVertices[0], m_red, m_green, m_blue, a1);
|
|
|
|
|
RwIm3DVertexSetRGBA(&StreakVertices[1], m_red, m_green, m_blue, a1);
|
|
|
|
|
a2 = (255/3)*(3-(i+1))/3;
|
|
|
|
|
RwIm3DVertexSetRGBA(&StreakVertices[2], m_red, m_green, m_blue, a2);
|
|
|
|
|
RwIm3DVertexSetRGBA(&StreakVertices[3], m_red, m_green, m_blue, a2);
|
|
|
|
|
RwIm3DVertexSetPos(&StreakVertices[0], m_pos1[i].x, m_pos1[i].y, m_pos1[i].z);
|
|
|
|
|
RwIm3DVertexSetPos(&StreakVertices[1], m_pos2[i].x, m_pos2[i].y, m_pos2[i].z);
|
|
|
|
|
RwIm3DVertexSetPos(&StreakVertices[2], m_pos1[i+1].x, m_pos1[i+1].y, m_pos1[i+1].z);
|
|
|
|
|
RwIm3DVertexSetPos(&StreakVertices[3], m_pos2[i+1].x, m_pos2[i+1].y, m_pos2[i+1].z);
|
|
|
|
|
LittleTest();
|
|
|
|
|
if(RwIm3DTransform(StreakVertices, 4, nil, rwIM3D_VERTEXUV)){
|
|
|
|
|
RwIm3DRenderIndexedPrimitive(rwPRIMTYPETRILIST, StreakIndexList, 12);
|
|
|
|
|
RwIm3DEnd();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CMotionBlurStreaks::Init(void)
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
for(i = 0; i < NUMMBLURSTREAKS; i++)
|
|
|
|
|
aStreaks[i].m_id = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CMotionBlurStreaks::Update(void)
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
for(i = 0; i < NUMMBLURSTREAKS; i++)
|
|
|
|
|
if(aStreaks[i].m_id)
|
|
|
|
|
aStreaks[i].Update();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CMotionBlurStreaks::Init(void)
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
for(i = 0; i < NUMMBLURSTREAKS; i++)
|
|
|
|
|
aStreaks[i].m_id = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CMotionBlurStreaks::Update(void)
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
for(i = 0; i < NUMMBLURSTREAKS; i++)
|
|
|
|
|
if(aStreaks[i].m_id)
|
|
|
|
|
aStreaks[i].Update();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CMotionBlurStreaks::RegisterStreak(uintptr id, uint8 r, uint8 g, uint8 b, CVector p1, CVector p2)
|
|
|
|
|
{
|
|
|
|
@ -234,32 +234,32 @@ CMotionBlurStreaks::RegisterStreak(uintptr id, uint8 r, uint8 g, uint8 b, CVecto
|
|
|
|
|
aStreaks[i].m_isValid[2] = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CMotionBlurStreaks::Render(void)
|
|
|
|
|
{
|
|
|
|
|
void
|
|
|
|
|
CMotionBlurStreaks::Render(void)
|
|
|
|
|
{
|
|
|
|
|
bool setRenderStates = false;
|
|
|
|
|
int i;
|
|
|
|
|
for(i = 0; i < NUMMBLURSTREAKS; i++)
|
|
|
|
|
if(aStreaks[i].m_id){
|
|
|
|
|
if(!setRenderStates){
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void *)TRUE);
|
|
|
|
|
for(i = 0; i < NUMMBLURSTREAKS; i++)
|
|
|
|
|
if(aStreaks[i].m_id){
|
|
|
|
|
if(!setRenderStates){
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void *)TRUE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEFOGCOLOR,
|
|
|
|
|
(void*)RWRGBALONG(CTimeCycle::GetFogRed(), CTimeCycle::GetFogGreen(), CTimeCycle::GetFogBlue(), 255));
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATETEXTURERASTER, (void*)FALSE);
|
|
|
|
|
setRenderStates = true;
|
|
|
|
|
}
|
|
|
|
|
aStreaks[i].Render();
|
|
|
|
|
}
|
|
|
|
|
if(setRenderStates){
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void *)FALSE);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATETEXTURERASTER, (void*)FALSE);
|
|
|
|
|
setRenderStates = true;
|
|
|
|
|
}
|
|
|
|
|
aStreaks[i].Render();
|
|
|
|
|
}
|
|
|
|
|
if(setRenderStates){
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void *)FALSE);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CBulletTrace CBulletTraces::aTraces[NUMBULLETTRACES];
|
|
|
|
@ -291,10 +291,10 @@ void CBulletTraces::Render(void)
|
|
|
|
|
for (int i = 0; i < NUMBULLETTRACES; i++) {
|
|
|
|
|
if (!aTraces[i].m_bInUse)
|
|
|
|
|
continue;
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)0);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)2);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)2);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATETEXTURERASTER, gpShadowExplosionTex->raster);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDONE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDONE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATETEXTURERASTER, RwTextureGetRaster(gpShadowExplosionTex));
|
|
|
|
|
CVector inf = aTraces[i].m_vecCurrentPos;
|
|
|
|
|
CVector sup = aTraces[i].m_vecTargetPos;
|
|
|
|
|
CVector center = (inf + sup) / 2;
|
|
|
|
@ -316,9 +316,9 @@ void CBulletTraces::Render(void)
|
|
|
|
|
RwIm3DEnd();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)1);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)5);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)6);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CBulletTraces::Update(void)
|
|
|
|
@ -414,8 +414,7 @@ C3dMarker::Render()
|
|
|
|
|
{
|
|
|
|
|
if (m_pAtomic == nil) return;
|
|
|
|
|
|
|
|
|
|
RwRGBA *color = RpMaterialGetColor(m_pMaterial);
|
|
|
|
|
*color = m_Color;
|
|
|
|
|
RpMaterialSetColor(m_pMaterial, &m_Color);
|
|
|
|
|
|
|
|
|
|
m_Matrix.UpdateRW();
|
|
|
|
|
|
|
|
|
@ -643,13 +642,13 @@ C3dMarkers::Update()
|
|
|
|
|
|
|
|
|
|
int CBrightLights::NumBrightLights;
|
|
|
|
|
CBrightLight CBrightLights::aBrightLights[NUMBRIGHTLIGHTS];
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CBrightLights::Init(void)
|
|
|
|
|
{
|
|
|
|
|
NumBrightLights = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CBrightLights::Init(void)
|
|
|
|
|
{
|
|
|
|
|
NumBrightLights = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CBrightLights::RegisterOne(CVector pos, CVector up, CVector side, CVector front,
|
|
|
|
|
uint8 type, uint8 red, uint8 green, uint8 blue)
|
|
|
|
@ -661,13 +660,13 @@ CBrightLights::RegisterOne(CVector pos, CVector up, CVector side, CVector front,
|
|
|
|
|
if(aBrightLights[NumBrightLights].m_camDist > BRIGHTLIGHTS_MAX_DIST)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
aBrightLights[NumBrightLights].m_pos = pos;
|
|
|
|
|
aBrightLights[NumBrightLights].m_up = up;
|
|
|
|
|
aBrightLights[NumBrightLights].m_side = side;
|
|
|
|
|
aBrightLights[NumBrightLights].m_front = front;
|
|
|
|
|
aBrightLights[NumBrightLights].m_type = type;
|
|
|
|
|
aBrightLights[NumBrightLights].m_red = red;
|
|
|
|
|
aBrightLights[NumBrightLights].m_green = green;
|
|
|
|
|
aBrightLights[NumBrightLights].m_pos = pos;
|
|
|
|
|
aBrightLights[NumBrightLights].m_up = up;
|
|
|
|
|
aBrightLights[NumBrightLights].m_side = side;
|
|
|
|
|
aBrightLights[NumBrightLights].m_front = front;
|
|
|
|
|
aBrightLights[NumBrightLights].m_type = type;
|
|
|
|
|
aBrightLights[NumBrightLights].m_red = red;
|
|
|
|
|
aBrightLights[NumBrightLights].m_green = green;
|
|
|
|
|
aBrightLights[NumBrightLights].m_blue = blue;
|
|
|
|
|
|
|
|
|
|
NumBrightLights++;
|
|
|
|
@ -696,22 +695,22 @@ static RwImVertexIndex CubeIndices[12*3] = {
|
|
|
|
|
6, 0, 4, 6, 2, 0, 6, 5, 7, 6, 4, 5
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CBrightLights::Render(void)
|
|
|
|
|
{
|
|
|
|
|
void
|
|
|
|
|
CBrightLights::Render(void)
|
|
|
|
|
{
|
|
|
|
|
int i, j;
|
|
|
|
|
CVector pos;
|
|
|
|
|
|
|
|
|
|
if(NumBrightLights == 0)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATETEXTURERASTER, nil);
|
|
|
|
|
|
|
|
|
|
for(i = 0; i < NumBrightLights; i++){
|
|
|
|
|
if(NumBrightLights == 0)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATETEXTURERASTER, nil);
|
|
|
|
|
|
|
|
|
|
for(i = 0; i < NumBrightLights; i++){
|
|
|
|
|
if(TempBufferIndicesStored > TEMPBUFFERINDEXSIZE-40 || TempBufferVerticesStored > TEMPBUFFERVERTSIZE-40)
|
|
|
|
|
RenderOutGeometryBuffer();
|
|
|
|
|
|
|
|
|
@ -753,14 +752,14 @@ CBrightLights::Render(void)
|
|
|
|
|
a = 255;
|
|
|
|
|
else
|
|
|
|
|
a = 255*(1.0f - (aBrightLights[i].m_camDist-BRIGHTLIGHTS_FADE_DIST)/(BRIGHTLIGHTS_MAX_DIST-BRIGHTLIGHTS_FADE_DIST));
|
|
|
|
|
// fade car lights down to 31 as they come near
|
|
|
|
|
if(aBrightLights[i].m_type >= BRIGHTLIGHT_FRONT_LONG && aBrightLights[i].m_type <= BRIGHTLIGHT_REAR_TALL){
|
|
|
|
|
// fade car lights down to 31 as they come near
|
|
|
|
|
if(aBrightLights[i].m_type >= BRIGHTLIGHT_FRONT_LONG && aBrightLights[i].m_type <= BRIGHTLIGHT_REAR_TALL){
|
|
|
|
|
if(aBrightLights[i].m_camDist < CARLIGHTS_FADE_DIST)
|
|
|
|
|
a = 31;
|
|
|
|
|
else if(aBrightLights[i].m_camDist < CARLIGHTS_MAX_DIST)
|
|
|
|
|
a = 31 + (255-31)*((aBrightLights[i].m_camDist-CARLIGHTS_FADE_DIST)/(CARLIGHTS_MAX_DIST-CARLIGHTS_FADE_DIST));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch(aBrightLights[i].m_type){
|
|
|
|
|
case BRIGHTLIGHT_TRAFFIC_GREEN:
|
|
|
|
|
case BRIGHTLIGHT_TRAFFIC_YELLOW:
|
|
|
|
@ -793,7 +792,7 @@ CBrightLights::Render(void)
|
|
|
|
|
TempBufferVerticesStored += 8;
|
|
|
|
|
TempBufferIndicesStored += 12*3;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case BRIGHTLIGHT_FRONT_SMALL:
|
|
|
|
|
case BRIGHTLIGHT_REAR_SMALL:
|
|
|
|
|
for(j = 0; j < 8; j++){
|
|
|
|
@ -809,7 +808,7 @@ CBrightLights::Render(void)
|
|
|
|
|
TempBufferVerticesStored += 8;
|
|
|
|
|
TempBufferIndicesStored += 12*3;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case BRIGHTLIGHT_FRONT_TALL:
|
|
|
|
|
case BRIGHTLIGHT_REAR_TALL:
|
|
|
|
|
for(j = 0; j < 8; j++){
|
|
|
|
@ -840,17 +839,17 @@ CBrightLights::Render(void)
|
|
|
|
|
TempBufferIndicesStored += 4*3;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
RenderOutGeometryBuffer();
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE);
|
|
|
|
|
NumBrightLights = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CBrightLights::RenderOutGeometryBuffer(void)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
RenderOutGeometryBuffer();
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE);
|
|
|
|
|
NumBrightLights = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CBrightLights::RenderOutGeometryBuffer(void)
|
|
|
|
|
{
|
|
|
|
|
if(TempBufferIndicesStored != 0){
|
|
|
|
|
LittleTest();
|
|
|
|
|
if(RwIm3DTransform(TempBufferRenderVertices, TempBufferVerticesStored, nil, rwIM3D_VERTEXUV)){
|
|
|
|
@ -864,13 +863,13 @@ CBrightLights::RenderOutGeometryBuffer(void)
|
|
|
|
|
|
|
|
|
|
int CShinyTexts::NumShinyTexts;
|
|
|
|
|
CShinyText CShinyTexts::aShinyTexts[NUMSHINYTEXTS];
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CShinyTexts::Init(void)
|
|
|
|
|
{
|
|
|
|
|
NumShinyTexts = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CShinyTexts::Init(void)
|
|
|
|
|
{
|
|
|
|
|
NumShinyTexts = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CShinyTexts::RegisterOne(CVector p0, CVector p1, CVector p2, CVector p3,
|
|
|
|
|
float u0, float v0, float u1, float v1, float u2, float v2, float u3, float v3,
|
|
|
|
@ -910,20 +909,20 @@ CShinyTexts::RegisterOne(CVector p0, CVector p1, CVector p2, CVector p3,
|
|
|
|
|
NumShinyTexts++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CShinyTexts::Render(void)
|
|
|
|
|
{
|
|
|
|
|
int i, ix, v;
|
|
|
|
|
RwTexture *lastTex = nil;
|
|
|
|
|
|
|
|
|
|
if(NumShinyTexts == 0)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDONE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDONE);
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CShinyTexts::Render(void)
|
|
|
|
|
{
|
|
|
|
|
int i, ix, v;
|
|
|
|
|
RwTexture *lastTex = nil;
|
|
|
|
|
|
|
|
|
|
if(NumShinyTexts == 0)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDONE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDONE);
|
|
|
|
|
|
|
|
|
|
TempBufferVerticesStored = 0;
|
|
|
|
|
TempBufferIndicesStored = 0;
|
|
|
|
|
|
|
|
|
@ -984,15 +983,15 @@ CShinyTexts::Render(void)
|
|
|
|
|
RenderOutGeometryBuffer();
|
|
|
|
|
NumShinyTexts = 0;
|
|
|
|
|
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA);
|
|
|
|
|
RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CShinyTexts::RenderOutGeometryBuffer(void)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
CShinyTexts::RenderOutGeometryBuffer(void)
|
|
|
|
|
{
|
|
|
|
|
if(TempBufferIndicesStored != 0){
|
|
|
|
|
LittleTest();
|
|
|
|
|
if(RwIm3DTransform(TempBufferRenderVertices, TempBufferVerticesStored, nil, rwIM3D_VERTEXUV)){
|
|
|
|
@ -1002,8 +1001,8 @@ CShinyTexts::RenderOutGeometryBuffer(void)
|
|
|
|
|
TempBufferVerticesStored = 0;
|
|
|
|
|
TempBufferIndicesStored = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define MONEY_MESSAGE_LIFETIME_MS 2000
|
|
|
|
|