mirror of
https://gitlab.com/GaryOderNichts/re3-wiiu.git
synced 2024-11-30 13:04:15 +01:00
commit
9ab3683148
236
src/core/Pad.cpp
236
src/core/Pad.cpp
@ -37,6 +37,7 @@
|
|||||||
#include "Wanted.h"
|
#include "Wanted.h"
|
||||||
#include "WaterLevel.h"
|
#include "WaterLevel.h"
|
||||||
#include "General.h"
|
#include "General.h"
|
||||||
|
#include "Fluff.h"
|
||||||
|
|
||||||
CPad Pads[MAX_PADS];
|
CPad Pads[MAX_PADS];
|
||||||
CMousePointerStateHelper MousePointerStateHelper;
|
CMousePointerStateHelper MousePointerStateHelper;
|
||||||
@ -249,6 +250,14 @@ void ChangePlayerCheat()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ChangePlayerModel(const char* name) {
|
||||||
|
if (!FindPlayerVehicle()) {
|
||||||
|
FindPlayerPed()->Undress(name);
|
||||||
|
CStreaming::LoadAllRequestedModels(0);
|
||||||
|
FindPlayerPed()->Dress();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MayhemCheat()
|
void MayhemCheat()
|
||||||
{
|
{
|
||||||
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
|
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
|
||||||
@ -404,6 +413,10 @@ void BackToTheFuture(void)
|
|||||||
CVehicle::bHoverCheat = !CVehicle::bHoverCheat;
|
CVehicle::bHoverCheat = !CVehicle::bHoverCheat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SuicideCheat(void) {
|
||||||
|
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
|
||||||
|
FindPlayerPed()->InflictDamage(nil, WEAPONTYPE_UNARMED, 1000.0f, PEDPIECE_TORSO, 0);
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
@ -1089,50 +1102,169 @@ void CPad::AddToPCCheatString(char c)
|
|||||||
KeyBoardCheatString[0] = ' ';
|
KeyBoardCheatString[0] = ' ';
|
||||||
WeaponsForAllCheat();
|
WeaponsForAllCheat();
|
||||||
}
|
}
|
||||||
// "TRAVELINSTYLE"
|
// "ONSPEED"
|
||||||
if (!_CHEATCMP("ELYTSNILEVART"))
|
else if (!Cheat_strncmp(KeyBoardCheatString, "GJLQ`iR")) {
|
||||||
VehicleCheat(true, MI_BLOODRA);
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
|
||||||
// "GETTHEREQUICKLY"
|
|
||||||
if (!_CHEATCMP("YLKCIUQEREHTTEG"))
|
|
||||||
VehicleCheat(true, MI_BLOODRB);
|
|
||||||
|
|
||||||
// "GETTHEREFAST"
|
|
||||||
if (!_CHEATCMP("TSAFEREHTTEG"))
|
|
||||||
VehicleCheat(true, MI_SABRETUR);
|
|
||||||
|
|
||||||
// "GETTHEREVERYFASTINDEED"
|
|
||||||
if (!_CHEATCMP("DEEDNITSAFYREVEREHTTEG"))
|
|
||||||
VehicleCheat(true, MI_HOTRINA);
|
|
||||||
|
|
||||||
// "GETTHEREAMAZINGLYFAST"
|
|
||||||
if (!_CHEATCMP("TSAFYLGNIZAMAEREHTTEG"))
|
|
||||||
VehicleCheat(true, MI_HOTRINB);
|
|
||||||
|
|
||||||
// "THELASTRIDE"
|
|
||||||
if (!_CHEATCMP("EDIRTSALEHT"))
|
|
||||||
VehicleCheat(true, MI_ROMERO);
|
|
||||||
|
|
||||||
// "ROCKANDROLLCAR"
|
|
||||||
if (!_CHEATCMP("RACLLORDNAKCOR"))
|
|
||||||
VehicleCheat(true, MI_LOVEFIST);
|
|
||||||
|
|
||||||
// "RUBBISHCAR"
|
|
||||||
if (!_CHEATCMP("RACHSIBBUR"))
|
|
||||||
VehicleCheat(true, MI_TRASH);
|
|
||||||
|
|
||||||
// "BETTERTHANWALKING"
|
|
||||||
if (!_CHEATCMP("GNIKLAWNAHTRETTEB"))
|
|
||||||
VehicleCheat(true, MI_CADDY);
|
|
||||||
|
|
||||||
// "TIMEFLIESWHENYOU"
|
|
||||||
if (!_CHEATCMP("UOYNEHWSEILFEMIT"))
|
|
||||||
FastTimeCheat();
|
FastTimeCheat();
|
||||||
|
}
|
||||||
// "BOOOOORING"
|
// "BOOOOOORING"
|
||||||
if (!_CHEATCMP("GNIROOOOOB"))
|
else if (!Cheat_strncmp(KeyBoardCheatString, "JSPS\\jRVPZO")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
SlowTimeCheat();
|
SlowTimeCheat();
|
||||||
|
}
|
||||||
|
// "WHEELSAREALLINEED"
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "GJLOVgOHF]N[SeRNs")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
OnlyRenderWheelsCheat();
|
||||||
|
}
|
||||||
|
//COMEFLYWITHME
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "HROUVr\\SGPZWJ")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
}
|
||||||
|
// "GRIPISEVERYTHING"
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "JSPIatULWP`QWi_M")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
StrongGripCheat();
|
||||||
|
}
|
||||||
|
// "CHASESTAT"
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "WF[TRnDOD")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
}
|
||||||
|
// "CHICKSWITHGUNS"
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "VS\\HUoL^TVPQOc")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
}
|
||||||
|
// "ICANTTAKEITANYMORE"
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "HWVNfiD[JPXI[t[G_\\")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
SuicideCheat();
|
||||||
|
}
|
||||||
|
// "GREENLIGHT"
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "WMNJYiHLSR")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
}
|
||||||
|
// "MIAMITRAFFIC"
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "FNMGNmWPNLVU")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
}
|
||||||
|
// "AHAIRDRESSERSCAR"
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "UFJT_`VZF]QZPaUG")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
PinkCarsCheat();
|
||||||
|
}
|
||||||
|
// "IWANTITPAINTEDBLACK"
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "NHHMO_H[OTNX[iaT]jS")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
BlackCarsCheat();
|
||||||
|
}
|
||||||
|
// "TRAVELINSTYLE"
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "HQ`U`iLSFaNZ[")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
VehicleCheat(true, MI_BLOODRA);
|
||||||
|
}
|
||||||
|
// "THELASTRIDE"
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "HIPSanDSFSa")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
VehicleCheat(true, MI_ROMERO);
|
||||||
|
}
|
||||||
|
// "ROCKANDROLLCAR"
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "UFJMYjUKOLXKVr")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
VehicleCheat(true, MI_LOVEFIST);
|
||||||
|
}
|
||||||
|
// "RUBBISHCAR"
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "UFJI`dEIV]")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
VehicleCheat(true, MI_TRASH);
|
||||||
|
}
|
||||||
|
// "GETTHEREQUICKLY"
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "\\QRDVpTLSPU\\[eT")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
VehicleCheat(true, MI_BLOODRB);
|
||||||
|
}
|
||||||
|
// "GETTHEREFAST"
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "WXHGRmHOU_RO")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
VehicleCheat(true, MI_SABRETUR);
|
||||||
|
}
|
||||||
|
// "BETTERTHANWALKING"
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "JSPLY\\ZUBSaZLtaK^")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
VehicleCheat(true, MI_CADDY);
|
||||||
|
}
|
||||||
|
// "GETTHEREFASTINDEED"
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "GJLE[dWZBQfZLvRXa[^WHL")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
VehicleCheat(true, MI_HOTRINA);
|
||||||
|
}
|
||||||
|
// "GETTHEREAMAZINGLYFAST"
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "WXHGfgJUJeNUHe_Kdg^HJ")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
VehicleCheat(true, MI_HOTRINB);
|
||||||
|
}
|
||||||
|
// LOOKLIKELANCE
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "HHUBY`NPMV\\WS")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
ChangePlayerModel("igbuddy");
|
||||||
|
}
|
||||||
|
// IWANTBIGTITS
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "VYPUTdE[OLdQ")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
ChangePlayerModel("igcandy");
|
||||||
|
}
|
||||||
|
// MYSONISALAWYER
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "UJ`XNgDZJY\\[`m")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
ChangePlayerModel("igken");
|
||||||
|
}
|
||||||
|
// ILOOKLIKEHILARY
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "\\WHMVcHRJWXWVlV")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
ChangePlayerModel("ighlary");
|
||||||
|
}
|
||||||
|
// ROCKANDROLLMAN
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "QFTMYjUKOLXKVr")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
ChangePlayerModel("igjezz");
|
||||||
|
}
|
||||||
|
// ONEARMEDBANDIT
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "WNKON]GLN]NMUo")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
ChangePlayerModel("igphil");
|
||||||
|
}
|
||||||
|
// IDONTHAVETHEMONEYSONNY
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "\\SUP`tHUPXRP[ecGdgXRGN")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
ChangePlayerModel("igsonny");
|
||||||
|
}
|
||||||
|
// FOXYLITTLETHING
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "JSPIa`O[UTYa_oS")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
ChangePlayerModel("igmerc");
|
||||||
|
}
|
||||||
|
// WELOVEOURDICK
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "NHPE_pRLWZYM^")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
ChangePlayerModel("igdick");
|
||||||
|
}
|
||||||
|
// CHEATSHAVEBEENCRACKED
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "GJRDNmFUFPOM]aUYpTOKF")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
ChangePlayerModel("igdiaz");
|
||||||
|
}
|
||||||
|
// SEAWAYS
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "V^HXN`V")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
BackToTheFuture();
|
||||||
|
}
|
||||||
|
//CERTAINDEATH
|
||||||
|
else if (!Cheat_strncmp(KeyBoardCheatString, "KYHFQiLHU]RK")) {
|
||||||
|
KeyBoardCheatString[0] = ' ';
|
||||||
|
if (!CSmokeTrails::CigOn)
|
||||||
|
CSmokeTrails::CigOn = true;
|
||||||
|
else
|
||||||
|
CSmokeTrails::CigOn = false;
|
||||||
|
}
|
||||||
// "ILOVESCOTLAND"
|
// "ILOVESCOTLAND"
|
||||||
if (!_CHEATCMP("DNALTOCSEVOLI"))
|
if (!_CHEATCMP("DNALTOCSEVOLI"))
|
||||||
RainyWeatherCheat();
|
RainyWeatherCheat();
|
||||||
@ -1141,30 +1273,14 @@ void CPad::AddToPCCheatString(char c)
|
|||||||
if (!_CHEATCMP("REHTAEWDAM"))
|
if (!_CHEATCMP("REHTAEWDAM"))
|
||||||
FastWeatherCheat();
|
FastWeatherCheat();
|
||||||
|
|
||||||
// "ANICESETOFWHEELS"
|
|
||||||
if (!_CHEATCMP("SLEEHWFOTESECINA"))
|
|
||||||
OnlyRenderWheelsCheat();
|
|
||||||
|
|
||||||
// "CHITTYCHITTYBB"
|
// "CHITTYCHITTYBB"
|
||||||
if (!_CHEATCMP("BBYTTIHCYTTIHC"))
|
if (!_CHEATCMP("BBYTTIHCYTTIHC"))
|
||||||
ChittyChittyBangBangCheat();
|
ChittyChittyBangBangCheat();
|
||||||
|
|
||||||
// "CORNERSLIKEMAD"
|
|
||||||
if (!_CHEATCMP("DAMEKILSRENROC"))
|
|
||||||
StrongGripCheat();
|
|
||||||
|
|
||||||
// "NASTYLIMBSCHEAT"
|
// "NASTYLIMBSCHEAT"
|
||||||
if (!_CHEATCMP("TAEHCSBMILYTSAN"))
|
if (!_CHEATCMP("TAEHCSBMILYTSAN"))
|
||||||
NastyLimbsCheat();
|
NastyLimbsCheat();
|
||||||
|
|
||||||
// "IWANTITPAINTEDBLACK"
|
|
||||||
if (!_CHEATCMP("KCALBDETNIAPTITNAWI"))
|
|
||||||
BlackCarsCheat();
|
|
||||||
|
|
||||||
// "AHAIRDRESSERSCAR"
|
|
||||||
if (!_CHEATCMP("RACSRESSERDRIAHA"))
|
|
||||||
PinkCarsCheat();
|
|
||||||
|
|
||||||
#ifdef KANGAROO_CHEAT
|
#ifdef KANGAROO_CHEAT
|
||||||
// "KANGAROO"
|
// "KANGAROO"
|
||||||
if (!_CHEATCMP("OORAGNAK"))
|
if (!_CHEATCMP("OORAGNAK"))
|
||||||
@ -1199,10 +1315,6 @@ void CPad::AddToPCCheatString(char c)
|
|||||||
RenderWaterLayersCheat();
|
RenderWaterLayersCheat();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// SEAWAYS
|
|
||||||
if (!_CHEATCMP("SYAWAES"))
|
|
||||||
BackToTheFuture();
|
|
||||||
|
|
||||||
#undef _CHEATCMP
|
#undef _CHEATCMP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13389,6 +13389,8 @@ CPed::PossiblyFindBetterPosToSeekCar(CVector *pos, CVehicle *veh)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern CVector vecTestTemp(-1.0f, -1.0f, -1.0f);
|
||||||
|
|
||||||
// --MIAMI: Done except comment
|
// --MIAMI: Done except comment
|
||||||
void
|
void
|
||||||
CPed::Render(void)
|
CPed::Render(void)
|
||||||
@ -13420,9 +13422,7 @@ CPed::Render(void)
|
|||||||
CMatrix mgTopMat, localAdjMat;
|
CMatrix mgTopMat, localAdjMat;
|
||||||
mgTopMat.Attach(RwFrameGetMatrix(frame));
|
mgTopMat.Attach(RwFrameGetMatrix(frame));
|
||||||
localAdjMat.SetRotateX(player->m_fGunSpinAngle);
|
localAdjMat.SetRotateX(player->m_fGunSpinAngle);
|
||||||
|
localAdjMat.Rotate(DEGTORAD(-4.477f)* vecTestTemp.x, DEGTORAD(29.731f) * vecTestTemp.y, DEGTORAD(1.064f) * vecTestTemp.z);
|
||||||
// TODO(Miami): What are those numbers?!
|
|
||||||
// localAdjMat.Rotate(flt_691FFC * flt_97F878, flt_691FF8 * flt_97F87C, flt_691FF4 * flt_97F880);
|
|
||||||
localAdjMat.GetPosition() += CVector(0.829f, -0.001f, 0.226f);
|
localAdjMat.GetPosition() += CVector(0.829f, -0.001f, 0.226f);
|
||||||
mgTopMat = mgTopMat * localAdjMat;
|
mgTopMat = mgTopMat * localAdjMat;
|
||||||
mgTopMat.UpdateRW();
|
mgTopMat.UpdateRW();
|
||||||
|
@ -13,6 +13,20 @@
|
|||||||
#include "Stats.h"
|
#include "Stats.h"
|
||||||
#include "maths.h"
|
#include "maths.h"
|
||||||
#include "Frontend.h"
|
#include "Frontend.h"
|
||||||
|
#include "CutsceneMgr.h"
|
||||||
|
#include "PlayerPed.h"
|
||||||
|
#include "Bones.h"
|
||||||
|
#include "World.h"
|
||||||
|
|
||||||
|
|
||||||
|
bool CSmokeTrails::CigOn = false;
|
||||||
|
CSmokeTrail CSmokeTrails::aSmoke[3];
|
||||||
|
|
||||||
|
RwImVertexIndex SmokeTrailIndices[32] = { 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8,
|
||||||
|
9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16 };
|
||||||
|
|
||||||
|
float RandomSmoke[16] = { 10.0f, 5.0f, -1.0f, -9.0f, -7.0f, -1.0f, 0.0f, 3.0f, 6.0f, 7.0f, 4.0f, 2.0f,
|
||||||
|
5.0f, 7.0f };
|
||||||
|
|
||||||
uint8 ScrollCharSet[59][5] = {
|
uint8 ScrollCharSet[59][5] = {
|
||||||
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // ' '
|
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // ' '
|
||||||
@ -99,6 +113,8 @@ CMovingThing CMovingThings::aMovingThings[NUMMOVINGTHINGS];
|
|||||||
|
|
||||||
void CMovingThings::Init()
|
void CMovingThings::Init()
|
||||||
{
|
{
|
||||||
|
CSmokeTrails::Init();
|
||||||
|
|
||||||
StartCloseList.m_pNext = &CMovingThings::EndCloseList;
|
StartCloseList.m_pNext = &CMovingThings::EndCloseList;
|
||||||
StartCloseList.m_pPrev = nil;
|
StartCloseList.m_pPrev = nil;
|
||||||
EndCloseList.m_pNext = nil;
|
EndCloseList.m_pNext = nil;
|
||||||
@ -189,6 +205,8 @@ void CMovingThings::Update()
|
|||||||
|
|
||||||
void CMovingThings::Render()
|
void CMovingThings::Render()
|
||||||
{
|
{
|
||||||
|
CSmokeTrails::Update();
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < 11; ++i)
|
for (i = 0; i < 11; ++i)
|
||||||
{
|
{
|
||||||
@ -205,6 +223,8 @@ void CMovingThings::Render()
|
|||||||
if (aDigitalClocks[i].IsVisible())
|
if (aDigitalClocks[i].IsVisible())
|
||||||
aDigitalClocks[i].Render();
|
aDigitalClocks[i].Render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CSmokeTrails::Render();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------- CMovingThing ----------
|
// ---------- CMovingThing ----------
|
||||||
@ -866,3 +886,120 @@ void CDigitalClock::Render()
|
|||||||
CSprite::FlushSpriteBuffer();
|
CSprite::FlushSpriteBuffer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CSmokeTrail::RegisterPoint(CVector regPosition, float opacity) {
|
||||||
|
bool bAddedNewPoint = false;
|
||||||
|
|
||||||
|
if (m_time[0] && CTimer::GetTimeInMilliseconds() - m_time[0] > 150) {
|
||||||
|
bAddedNewPoint = true;
|
||||||
|
for (int32 i = 15; i > 0; i--) {
|
||||||
|
m_pos[i] = m_pos[i - 1];
|
||||||
|
m_time[i] = m_time[i - 1];
|
||||||
|
m_opacity[i] = m_opacity[i - 1];
|
||||||
|
}
|
||||||
|
++m_seed;
|
||||||
|
}
|
||||||
|
m_pos[0] = regPosition;
|
||||||
|
|
||||||
|
if (bAddedNewPoint || !m_time[0]) {
|
||||||
|
m_time[0] = CTimer::GetTimeInMilliseconds();
|
||||||
|
float density = 0.1f / (m_pos[1] - m_pos[2]).Magnitude();
|
||||||
|
m_opacity[1] = opacity * Min(density, 1.0f);
|
||||||
|
}
|
||||||
|
m_opacity[0] = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CSmokeTrail::Init(int num) {
|
||||||
|
for (int32 i = 0; i < 16; i++)
|
||||||
|
m_time[i] = 0;
|
||||||
|
m_seed = num * 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CSmokeTrails::Init(void) {
|
||||||
|
for (int32 i = 0; i < 3; i++)
|
||||||
|
aSmoke[i].Init(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CSmokeTrails::Render(void) {
|
||||||
|
for (int32 i = 0; i < 3; i++)
|
||||||
|
aSmoke[i].Render();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CSmokeTrail::Render(void) {
|
||||||
|
int numVerts = 0;
|
||||||
|
RwIm3DVertex TempVertexBuffer[16];
|
||||||
|
|
||||||
|
if (TheCamera.IsSphereVisible(m_pos[0], 10.0f)) {
|
||||||
|
for (int32 i = 0; i < 16; i++) {
|
||||||
|
int timeSinceSpawned = CTimer::GetTimeInMilliseconds() - m_time[i];
|
||||||
|
|
||||||
|
if (timeSinceSpawned > 2250)
|
||||||
|
m_time[i] = 0;
|
||||||
|
|
||||||
|
if (m_time[i]) {
|
||||||
|
int alpha = (1.0f - timeSinceSpawned / 2250.0f) * 110.0f * m_opacity[i];
|
||||||
|
float offset = timeSinceSpawned * CWeather::Wind * 0.0001f;
|
||||||
|
float posX = (m_pos[i].x + timeSinceSpawned * RandomSmoke[(i - m_seed) & 0xF] * 0.00001f) - offset;
|
||||||
|
float posY = (m_pos[i].y + timeSinceSpawned * RandomSmoke[(i - m_seed + 5) & 0xF] * 0.00001f) - offset;
|
||||||
|
float posZ = m_pos[i].z + timeSinceSpawned * 0.0004f;
|
||||||
|
RwIm3DVertexSetRGBA(&TempVertexBuffer[i], 200, 200, 200, alpha);
|
||||||
|
RwIm3DVertexSetPos(&TempVertexBuffer[i], posX, posY, posZ);
|
||||||
|
numVerts++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (numVerts > 1) {
|
||||||
|
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE);
|
||||||
|
RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA);
|
||||||
|
RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA);
|
||||||
|
RwRenderStateSet(rwRENDERSTATETEXTURERASTER, nil);
|
||||||
|
|
||||||
|
if (RwIm3DTransform(TempVertexBuffer, numVerts, nil, rwIM3D_VERTEXXYZ | rwIM3D_VERTEXRGBA)) {
|
||||||
|
RwIm3DRenderIndexedPrimitive(rwPRIMTYPEPOLYLINE, SmokeTrailIndices, 2 * (numVerts - 1));
|
||||||
|
RwIm3DEnd();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CSmokeTrails::Update(void) {
|
||||||
|
|
||||||
|
if (!CSmokeTrails::CigOn || TheCamera.Using1stPersonWeaponMode() || !FindPlayerPed() ||
|
||||||
|
FindPlayerVehicle() || CCutsceneMgr::IsRunning() || !FindPlayerPed()->GetClump())
|
||||||
|
return;
|
||||||
|
|
||||||
|
RwV3d startPos = { 0.026f, 0.15f, 0.02f };
|
||||||
|
RwV3d endPos = { 0.026f, 0.05f, 0.02f };
|
||||||
|
|
||||||
|
RpHAnimHierarchy *hier = GetAnimHierarchyFromSkinClump(FindPlayerPed()->GetClump());
|
||||||
|
int32 idx = RpHAnimIDGetIndex(hier, ConvertPedNode2BoneTag(PED_HEAD));
|
||||||
|
RwMatrix *head = &RpHAnimHierarchyGetMatrixArray(hier)[idx];
|
||||||
|
RwV3dTransformPoints(&startPos, &startPos, 1, head);
|
||||||
|
RwV3dTransformPoints(&endPos, &endPos, 1, head);
|
||||||
|
|
||||||
|
aSmoke[0].RegisterPoint(startPos, 1.0f);
|
||||||
|
aSmoke[1].RegisterPoint(startPos, 0.75f);
|
||||||
|
aSmoke[2].RegisterPoint(startPos, 0.5f);
|
||||||
|
|
||||||
|
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE);
|
||||||
|
RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA);
|
||||||
|
RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA);
|
||||||
|
RwRenderStateSet(rwRENDERSTATETEXTURERASTER, nil);
|
||||||
|
|
||||||
|
RwIm3DVertex TempVertexBuffer[2];
|
||||||
|
RwIm3DVertexSetRGBA(&TempVertexBuffer[0], 255, 255, 255, 255);
|
||||||
|
RwIm3DVertexSetPos(&TempVertexBuffer[0], startPos.x, startPos.y, startPos.z);
|
||||||
|
RwIm3DVertexSetRGBA(&TempVertexBuffer[1], 255, 255, 255, 255);
|
||||||
|
RwIm3DVertexSetPos(&TempVertexBuffer[1], endPos.x, endPos.y, endPos.z);
|
||||||
|
|
||||||
|
if (RwIm3DTransform(TempVertexBuffer, 2, nil, rwIM3D_VERTEXXYZ | rwIM3D_VERTEXRGBA)) {
|
||||||
|
RwIm3DRenderIndexedPrimitive(rwPRIMTYPEPOLYLINE, SmokeTrailIndices, 2);
|
||||||
|
RwIm3DEnd();
|
||||||
|
}
|
||||||
|
}
|
@ -103,4 +103,25 @@ public:
|
|||||||
void Init(CVector, float, float, uint8, uint8, uint8, float, float);
|
void Init(CVector, float, float, uint8, uint8, uint8, float, float);
|
||||||
void Update();
|
void Update();
|
||||||
void Render();
|
void Render();
|
||||||
|
};
|
||||||
|
|
||||||
|
class CSmokeTrail {
|
||||||
|
CVector m_pos[16];
|
||||||
|
float m_opacity[16];
|
||||||
|
int m_time[16];
|
||||||
|
char m_unused[536];
|
||||||
|
int m_seed;
|
||||||
|
public:
|
||||||
|
void Render(void);
|
||||||
|
void RegisterPoint(CVector position, float a);
|
||||||
|
void Init(int num);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CSmokeTrails {
|
||||||
|
static CSmokeTrail aSmoke[3];
|
||||||
|
public:
|
||||||
|
static bool CigOn;
|
||||||
|
static void Update(void);
|
||||||
|
static void Render(void);
|
||||||
|
static void Init(void);
|
||||||
};
|
};
|
Loading…
Reference in New Issue
Block a user