mirror of
https://github.com/GTAmodding/re3.git
synced 2024-11-16 09:19:00 +00:00
VC Water
This commit is contained in:
parent
90947a608f
commit
63d0bdc863
11 changed files with 2168 additions and 652 deletions
|
@ -306,7 +306,7 @@ bool CGame::Initialise(const char* datFile)
|
||||||
CWorld::Players[0].LoadPlayerSkin();
|
CWorld::Players[0].LoadPlayerSkin();
|
||||||
TestModelIndices();
|
TestModelIndices();
|
||||||
LoadingScreen("Loading the Game", "Setup water", nil);
|
LoadingScreen("Loading the Game", "Setup water", nil);
|
||||||
CWaterLevel::Initialise("DATA\\WATER.DAT");
|
WaterLevelInitialise("DATA\\WATER.DAT");
|
||||||
TheConsole.Init();
|
TheConsole.Init();
|
||||||
CDraw::SetFOV(120.0f);
|
CDraw::SetFOV(120.0f);
|
||||||
CDraw::ms_fLODDistance = 500.0f;
|
CDraw::ms_fLODDistance = 500.0f;
|
||||||
|
@ -685,6 +685,13 @@ CGame::InitAfterFocusLoss()
|
||||||
FrontEndMenuManager.m_bStartUpFrontEndRequested = true;
|
FrontEndMenuManager.m_bStartUpFrontEndRequested = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
CGame::CanSeeWaterFromCurrArea(void)
|
||||||
|
{
|
||||||
|
return currArea == AREA_MAIN_MAP || currArea == AREA_MANSION
|
||||||
|
|| currArea == AREA_HOTEL;
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
CGame::CanSeeOutSideFromCurrArea(void)
|
CGame::CanSeeOutSideFromCurrArea(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -62,6 +62,7 @@ public:
|
||||||
static void InitAfterFocusLoss(void);
|
static void InitAfterFocusLoss(void);
|
||||||
|
|
||||||
static bool IsInInterior(void) { return currArea != AREA_MAIN_MAP; }
|
static bool IsInInterior(void) { return currArea != AREA_MAIN_MAP; }
|
||||||
|
static bool CanSeeWaterFromCurrArea(void);
|
||||||
static bool CanSeeOutSideFromCurrArea(void);
|
static bool CanSeeOutSideFromCurrArea(void);
|
||||||
|
|
||||||
// NB: these do something on PS2
|
// NB: these do something on PS2
|
||||||
|
|
|
@ -10,6 +10,8 @@ enum eZoneAttribs
|
||||||
ATTRZONE_NOTCULLZONE = 0x20,
|
ATTRZONE_NOTCULLZONE = 0x20,
|
||||||
ATTRZONE_DOINEEDCOLLISION = 0x40,
|
ATTRZONE_DOINEEDCOLLISION = 0x40,
|
||||||
ATTRZONE_SUBWAYVISIBLE = 0x80,
|
ATTRZONE_SUBWAYVISIBLE = 0x80,
|
||||||
|
|
||||||
|
ATTRZONE_WATERFUDGE = 0x400,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CAttributeZone
|
struct CAttributeZone
|
||||||
|
@ -53,6 +55,7 @@ public:
|
||||||
static bool DoINeedToLoadCollision(void) { return (CurrentFlags_Player & ATTRZONE_DOINEEDCOLLISION) != 0; }
|
static bool DoINeedToLoadCollision(void) { return (CurrentFlags_Player & ATTRZONE_DOINEEDCOLLISION) != 0; }
|
||||||
static bool PlayerNoRain(void) { return (CurrentFlags_Player & ATTRZONE_NORAIN) != 0; }
|
static bool PlayerNoRain(void) { return (CurrentFlags_Player & ATTRZONE_NORAIN) != 0; }
|
||||||
static bool CamNoRain(void) { return (CurrentFlags_Camera & ATTRZONE_NORAIN) != 0; }
|
static bool CamNoRain(void) { return (CurrentFlags_Camera & ATTRZONE_NORAIN) != 0; }
|
||||||
|
static bool WaterFudge(void) { return (CurrentFlags_Camera & ATTRZONE_WATERFUDGE) != 0; }
|
||||||
static int32 GetWantedLevelDrop(void) { return CurrentWantedLevelDrop_Player; }
|
static int32 GetWantedLevelDrop(void) { return CurrentWantedLevelDrop_Player; }
|
||||||
|
|
||||||
//--MIAMI: TODO
|
//--MIAMI: TODO
|
||||||
|
|
|
@ -205,6 +205,8 @@ enum Config {
|
||||||
#define RELOADABLES // some debug menu options to reload TXD files
|
#define RELOADABLES // some debug menu options to reload TXD files
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//#define PC_WATER
|
||||||
|
|
||||||
// Particle
|
// Particle
|
||||||
#define PC_PARTICLE
|
#define PC_PARTICLE
|
||||||
//#define PS2_ALTERNATIVE_CARSPLASH // unused on PS2
|
//#define PS2_ALTERNATIVE_CARSPLASH // unused on PS2
|
||||||
|
|
|
@ -821,7 +821,7 @@ RenderScene(void)
|
||||||
CRenderer::RenderBoats();
|
CRenderer::RenderBoats();
|
||||||
CRenderer::RenderFadingInUnderwaterEntities();
|
CRenderer::RenderFadingInUnderwaterEntities();
|
||||||
RwRenderStateSet(rwRENDERSTATECULLMODE, (void*)rwCULLMODECULLNONE);
|
RwRenderStateSet(rwRENDERSTATECULLMODE, (void*)rwCULLMODECULLNONE);
|
||||||
// CWaterLevel::RenderTransparentWater();
|
CWaterLevel::RenderTransparentWater();
|
||||||
CRenderer::RenderFadingInEntities();
|
CRenderer::RenderFadingInEntities();
|
||||||
RwRenderStateSet(rwRENDERSTATECULLMODE, (void*)rwCULLMODECULLNONE);
|
RwRenderStateSet(rwRENDERSTATECULLMODE, (void*)rwCULLMODECULLNONE);
|
||||||
CWeather::RenderRainStreaks();
|
CWeather::RenderRainStreaks();
|
||||||
|
@ -1008,6 +1008,9 @@ Idle(void *arg)
|
||||||
#endif
|
#endif
|
||||||
#ifdef TIMEBARS
|
#ifdef TIMEBARS
|
||||||
tbStartTimer(0, "CnstrRenderList");
|
tbStartTimer(0, "CnstrRenderList");
|
||||||
|
#endif
|
||||||
|
#ifdef PC_WATER
|
||||||
|
CWaterLevel::PreCalcWaterGeometry();
|
||||||
#endif
|
#endif
|
||||||
CRenderer::ConstructRenderList();
|
CRenderer::ConstructRenderList();
|
||||||
#ifdef TIMEBARS
|
#ifdef TIMEBARS
|
||||||
|
|
|
@ -17999,8 +17999,9 @@ CPed::SetEnterCar_AllClear(CVehicle *car, uint32 doorNode, uint32 doorFlag)
|
||||||
|
|
||||||
PedSetInCarCB(nil, this);
|
PedSetInCarCB(nil, this);
|
||||||
bVehExitWillBeInstant = true;
|
bVehExitWillBeInstant = true;
|
||||||
if (IsPlayer())
|
// TODO(Miami):
|
||||||
CWaterLevel::AllocateBoatWakeArray();
|
//if (IsPlayer())
|
||||||
|
// CWaterLevel::AllocateBoatWakeArray();
|
||||||
} else {
|
} else {
|
||||||
if (zDiff > 4.4f) {
|
if (zDiff > 4.4f) {
|
||||||
if (m_vehEnterType == CAR_DOOR_RF || m_vehEnterType == CAR_DOOR_RR)
|
if (m_vehEnterType == CAR_DOOR_RF || m_vehEnterType == CAR_DOOR_RR)
|
||||||
|
@ -18436,8 +18437,10 @@ CPed::SetExitBoat(CVehicle *boat)
|
||||||
SetMoveState(PEDMOVE_STILL);
|
SetMoveState(PEDMOVE_STILL);
|
||||||
m_vecMoveSpeed = boat->m_vecMoveSpeed;
|
m_vecMoveSpeed = boat->m_vecMoveSpeed;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// TODO(Miami):
|
||||||
// Not there in VC.
|
// Not there in VC.
|
||||||
CWaterLevel::FreeBoatWakeArray();
|
//CWaterLevel::FreeBoatWakeArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -23,4 +23,7 @@ public:
|
||||||
static void Init(void);
|
static void Init(void);
|
||||||
static void AddOne(float x, float y, float z, float width, float length, float height, float angle);
|
static void AddOne(float x, float y, float z, float width, float length, float height, float angle);
|
||||||
static void ProcessBeforeRendering(void);
|
static void ProcessBeforeRendering(void);
|
||||||
|
|
||||||
|
//TODO:
|
||||||
|
static bool IsAABoxOccluded(CVector pos, float, float, float) { return false; }
|
||||||
};
|
};
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
#define WATER_X_OFFSET (400.0f)
|
#define WATER_X_OFFSET (400.0f)
|
||||||
|
|
||||||
#define WATER_BLOCK_SIZE LARGE_SECTOR_SIZE
|
#define WATER_BLOCK_SECTORS MAX_LARGE_SECTORS
|
||||||
#define WATER_FINEBLOCK_SIZE HUGE_SECTOR_SIZE
|
#define WATER_FINEBLOCK_SECTORS MAX_SMALL_SECTORS
|
||||||
#define WATER_Z_OFFSET (0.5f)
|
#define WATER_Z_OFFSET (0.5f)
|
||||||
|
|
||||||
#define MAX_SMALL_SECTORS 128
|
#define MAX_SMALL_SECTORS 128
|
||||||
|
@ -31,6 +31,14 @@
|
||||||
#define WATER_SIGN_X(x) ( (x) - (WATER_WIDTH /2) )
|
#define WATER_SIGN_X(x) ( (x) - (WATER_WIDTH /2) )
|
||||||
#define WATER_SIGN_Y(y) ( (y) - (WATER_HEIGHT/2) )
|
#define WATER_SIGN_Y(y) ( (y) - (WATER_HEIGHT/2) )
|
||||||
|
|
||||||
|
// 64x64 Large blocks 64x64 each
|
||||||
|
#define WATER_TO_BLOCK_X(x) ( WATER_UNSIGN_X(x) / WATER_BLOCK_SECTORS )
|
||||||
|
#define WATER_TO_BLOCK_Y(x) ( WATER_UNSIGN_Y(x) / WATER_BLOCK_SECTORS )
|
||||||
|
|
||||||
|
// 128x128 Small blocks 32x32 each
|
||||||
|
#define WATER_TO_FINEBLOCK_X(x) ( WATER_UNSIGN_X(x) / WATER_FINEBLOCK_SECTORS )
|
||||||
|
#define WATER_TO_FINEBLOCK_Y(x) ( WATER_UNSIGN_Y(x) / WATER_FINEBLOCK_SECTORS )
|
||||||
|
|
||||||
// 32
|
// 32
|
||||||
#define WATER_SMALL_X(x) ( WATER_UNSIGN_X(x) / MAX_SMALL_SECTORS )
|
#define WATER_SMALL_X(x) ( WATER_UNSIGN_X(x) / MAX_SMALL_SECTORS )
|
||||||
#define WATER_SMALL_Y(y) ( WATER_UNSIGN_Y(y) / MAX_SMALL_SECTORS )
|
#define WATER_SMALL_Y(y) ( WATER_UNSIGN_Y(y) / MAX_SMALL_SECTORS )
|
||||||
|
@ -63,39 +71,105 @@
|
||||||
#define WATER_TO_EXTRAHUGE_SECTOR_X(x) ( WATER_UNSIGN_X(x) / EXTRAHUGE_SECTOR_SIZE )
|
#define WATER_TO_EXTRAHUGE_SECTOR_X(x) ( WATER_UNSIGN_X(x) / EXTRAHUGE_SECTOR_SIZE )
|
||||||
#define WATER_TO_EXTRAHUGE_SECTOR_Y(y) ( WATER_UNSIGN_Y(y) / EXTRAHUGE_SECTOR_SIZE )
|
#define WATER_TO_EXTRAHUGE_SECTOR_Y(y) ( WATER_UNSIGN_Y(y) / EXTRAHUGE_SECTOR_SIZE )
|
||||||
|
|
||||||
|
struct ColData
|
||||||
|
{
|
||||||
|
uint8 SurfaceType;
|
||||||
|
uint8 PieceType;
|
||||||
|
};
|
||||||
|
|
||||||
#define MAX_BOAT_WAKES 8
|
enum eBeachToy
|
||||||
|
{
|
||||||
|
BEACHTOY_0 = 0,
|
||||||
|
BEACHTOY_BALL,
|
||||||
|
BEACHTOY_2,
|
||||||
|
BEACHTOY_3,
|
||||||
|
BEACHTOY_4,
|
||||||
|
BEACHTOY_LOUNGE = 5
|
||||||
|
};
|
||||||
|
|
||||||
extern RwRaster* gpWaterRaster;
|
extern RwRaster* gpWaterRaster;
|
||||||
|
|
||||||
|
class CEntity;
|
||||||
|
|
||||||
class CWaterLevel
|
class CWaterLevel
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
static int32 ms_nNoOfWaterLevels;
|
static int32 ms_nNoOfWaterLevels;
|
||||||
static float ms_aWaterZs[48];
|
static float ms_aWaterZs[48];
|
||||||
static CRect ms_aWaterRects[48];
|
static CRect ms_aWaterRects[48];
|
||||||
static uint8 aWaterBlockList[WATER_BLOCK_SIZE][WATER_BLOCK_SIZE];
|
static uint8 aWaterBlockList[WATER_BLOCK_SECTORS][WATER_BLOCK_SECTORS]; // 64x64 Large blocks 64x64 each
|
||||||
static uint8 aWaterFineBlockList[WATER_FINEBLOCK_SIZE][WATER_FINEBLOCK_SIZE];
|
static uint8 aWaterFineBlockList[WATER_FINEBLOCK_SECTORS][WATER_FINEBLOCK_SECTORS]; // 128x128 Small blocks 32x32 each
|
||||||
static bool WavesCalculatedThisFrame;
|
static bool WavesCalculatedThisFrame;
|
||||||
static RpAtomic *ms_pWavyAtomic;
|
|
||||||
static RpGeometry *apGeomArray[MAX_BOAT_WAKES];
|
static bool RequireWavySector;
|
||||||
static int16 nGeomUsed;
|
static bool MaskCalculatedThisFrame;
|
||||||
|
static CVector PreCalculatedMaskPosn;
|
||||||
|
static bool m_bRenderSeaBed;
|
||||||
|
static int32 m_nRenderWaterLayers;
|
||||||
|
|
||||||
|
static RpAtomic *ms_pWavyAtomic;
|
||||||
|
static RpAtomic *ms_pMaskAtomic;
|
||||||
|
|
||||||
public:
|
|
||||||
static void Initialise(Const char *pWaterDat);
|
|
||||||
static void Shutdown();
|
static void Shutdown();
|
||||||
|
|
||||||
static void CreateWavyAtomic();
|
static void CreateWavyAtomic();
|
||||||
static void DestroyWavyAtomic();
|
static void DestroyWavyAtomic();
|
||||||
|
|
||||||
|
|
||||||
static bool GetWaterLevel(float fX, float fY, float fZ, float *pfOutLevel, bool bDontCheckZ);
|
static bool GetWaterLevel(float fX, float fY, float fZ, float *pfOutLevel, bool bDontCheckZ);
|
||||||
static bool GetWaterLevel(CVector coors, float *pfOutLevel, bool bDontCheckZ) { return GetWaterLevel(coors.x, coors.y, coors.z, pfOutLevel, bDontCheckZ); }
|
static bool GetWaterLevel(CVector coors, float *pfOutLevel, bool bDontCheckZ) { return GetWaterLevel(coors.x, coors.y, coors.z, pfOutLevel, bDontCheckZ); }
|
||||||
static bool GetWaterLevelNoWaves(float fX, float fY, float fZ, float *pfOutLevel);
|
static bool GetWaterLevelNoWaves(float fX, float fY, float fZ, float *pfOutLevel);
|
||||||
|
static float GetWaterWavesOnly(short x, short y); // unused
|
||||||
|
static CVector GetWaterNormal(float fX, float fY);
|
||||||
|
|
||||||
static void RenderWater();
|
static void RenderWater();
|
||||||
static void RenderOneFlatSmallWaterPoly (float fX, float fY, float fZ, RwRGBA const &color);
|
static void RenderTransparentWater(void);
|
||||||
static void RenderOneFlatLargeWaterPoly (float fX, float fY, float fZ, RwRGBA const &color);
|
// unused
|
||||||
static void RenderOneFlatHugeWaterPoly (float fX, float fY, float fZ, RwRGBA const &color);
|
static void RenderOneFlatSmallWaterPoly (float fX, float fY, float fZ, RwRGBA const &color);
|
||||||
static void RenderOneFlatExtraHugeWaterPoly(float fX, float fY, float fZ, RwRGBA const &color);
|
// inlined
|
||||||
static void RenderOneWavySector (float fX, float fY, float fZ, RwRGBA const &color, bool bUnk = false);
|
static void RenderOneFlatLargeWaterPoly (float fX, float fY, float fZ, RwRGBA const &color);
|
||||||
static float CalcDistanceToWater(float fX, float fY);
|
static void RenderOneFlatHugeWaterPoly (float fX, float fY, float fZ, RwRGBA const &color);
|
||||||
static void RenderAndEmptyRenderBuffer();
|
static void RenderOneFlatExtraHugeWaterPoly(float fX, float fY, float fZ, RwRGBA const &color);
|
||||||
static void AllocateBoatWakeArray();
|
// inlined
|
||||||
static void FreeBoatWakeArray();
|
static void RenderOneWavySector (float fX, float fY, float fZ, RwRGBA const &color, bool bDontRender = false);
|
||||||
|
// unused
|
||||||
|
#ifdef PC_WATER
|
||||||
|
static void RenderWavyMask(float fX, float fY, float fZ, float fSectorX, float fSectorY, float fCamPosX, float fCamPosY, float fCamDirX, float fCamDirY, RwRGBA const&color);
|
||||||
|
#else
|
||||||
|
static void RenderWavyMask(float fX, float fY, float fZ, float fSectorX, float fSectorY, int32 nCamDirX, int32 nCamDirY, RwRGBA const&color);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef PC_WATER
|
||||||
|
static void PreCalcWaterGeometry(void);
|
||||||
|
static bool PreCalcWavySector(RwRGBA const &color); //fucked up
|
||||||
|
static bool PreCalcWavyMask(float fX, float fY, float fZ, float fSectorX, float fSectorY, float fCamPosX, float fCamPosY, float fCamDirX, float fCamDirY, RwRGBA const&color);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
static void RenderBoatWakes(void);
|
||||||
|
static void RenderWakeSegment(CVector2D &vecA, CVector2D &vecB, CVector2D &vecC, CVector2D &vecD, float &fSizeA, float &fSizeB, float &fAlphaA, float &fAlphaB, float &fWakeZ);
|
||||||
|
|
||||||
|
// unused
|
||||||
|
static void RenderOneSlopedUnderWaterPoly(float fX, float fY, float fZ, RwRGBA const&color); // UNUSED
|
||||||
|
static void RenderOneFlatSmallWaterPolyBlended(float fX, float fY, float fZ, float fCamX, float fCamY, RwRGBA const &color, RwRGBA const &colorTrans, float fDrawDist);
|
||||||
|
static float CalcDistanceToWater(float fX, float fY);
|
||||||
|
static void RenderAndEmptyRenderBuffer();
|
||||||
|
|
||||||
|
static bool GetGroundLevel(CVector const &vecPosn, float *pfOutLevel, ColData *pData, float fDistance);
|
||||||
|
|
||||||
|
// unused
|
||||||
|
static bool IsLocationOutOfWorldBounds_WS(CVector const &vecPosn, int nOffset);
|
||||||
|
// unused
|
||||||
|
static bool GetGroundLevel_WS(CVector const & vecPosn, float *pfOutLevel, ColData *pData, float fDistance);
|
||||||
|
static bool GetWaterDepth(CVector const &vecPosn, float *pfDepth, float *pfLevelNoWaves, float *pfGroundLevel);
|
||||||
|
|
||||||
|
static void RenderSeaBirds();
|
||||||
|
static void RenderShipsOnHorizon();
|
||||||
|
|
||||||
|
static void HandleSeaLifeForms();
|
||||||
|
|
||||||
|
static void HandleBeachToysStuff(void);
|
||||||
|
static CEntity *CreateBeachToy(CVector const &vec, eBeachToy beachtoy);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern void WaterLevelInitialise(Const char *datFile);
|
|
@ -27,12 +27,12 @@
|
||||||
|
|
||||||
float fShapeLength = 0.4f;
|
float fShapeLength = 0.4f;
|
||||||
float fShapeTime = 0.05f;
|
float fShapeTime = 0.05f;
|
||||||
float fRangeMult = 0.75f; //0.6f; // 0.75f gta 3
|
float fRangeMult = 0.6f;
|
||||||
float fTimeMult;
|
float fTimeMult;
|
||||||
|
|
||||||
float MAX_WAKE_LENGTH = 50.0f;
|
float CBoat::MAX_WAKE_LENGTH = 50.0f;
|
||||||
float MIN_WAKE_INTERVAL = 1.0f;
|
float CBoat::MIN_WAKE_INTERVAL = 2.0f;
|
||||||
float WAKE_LIFETIME = 400.0f;
|
float CBoat::WAKE_LIFETIME = 150.0f;
|
||||||
|
|
||||||
CBoat *CBoat::apFrameWakeGeneratingBoats[4];
|
CBoat *CBoat::apFrameWakeGeneratingBoats[4];
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,10 @@ public:
|
||||||
CVector2D m_avec2dWakePoints[32];
|
CVector2D m_avec2dWakePoints[32];
|
||||||
float m_afWakePointLifeTime[32];
|
float m_afWakePointLifeTime[32];
|
||||||
|
|
||||||
|
static float MAX_WAKE_LENGTH;
|
||||||
|
static float MIN_WAKE_INTERVAL;
|
||||||
|
static float WAKE_LIFETIME;
|
||||||
|
|
||||||
CBoat(int, uint8);
|
CBoat(int, uint8);
|
||||||
|
|
||||||
virtual void SetModelIndex(uint32 id);
|
virtual void SetModelIndex(uint32 id);
|
||||||
|
@ -75,8 +79,4 @@ public:
|
||||||
#endif
|
#endif
|
||||||
static const uint32 nSaveStructSize;
|
static const uint32 nSaveStructSize;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern float MAX_WAKE_LENGTH;
|
|
||||||
extern float MIN_WAKE_INTERVAL;
|
|
||||||
extern float WAKE_LIFETIME;
|
|
Loading…
Reference in a new issue