mirror of
https://github.com/halpz/re3.git
synced 2025-04-28 20:07:57 +03:00
Add files via upload
This commit is contained in:
parent
a66ec511de
commit
6ff15d6327
21 changed files with 1035 additions and 37 deletions
|
@ -405,17 +405,50 @@ GenericLoad()
|
|||
//ReadDataFromBlock("Loading AudioScript Objects \n", cAudioScriptObject::LoadAllAudioScriptObjects);
|
||||
//LoadSaveDataBlock();
|
||||
//ReadDataFromBlock("Loading ScriptPaths \n", CScriptPaths::Load);
|
||||
// MAZAHAKA!! IF UNCOMMENT SAVE BLOCK CHECK !load bool CGame::ReInitGameObjectVariables(bool load) prolem reinit after load (empty save data)
|
||||
LoadSaveDataBlock();
|
||||
ReadDataFromBlock("Loading Player Info \n", CWorld::Players[CWorld::PlayerInFocus].LoadPlayerInfo);
|
||||
LoadSaveDataBlock();
|
||||
ReadDataFromBlock("Loading Stats \n", CStats::LoadStats);
|
||||
assert(*CStats::LastMissionPassedName); // reinit after load bug. After load CStats was empty Mazahaka
|
||||
//LoadSaveDataBlock();
|
||||
//ReadDataFromBlock("Loading Set Pieces \n", CSetPieces::Load);
|
||||
//LoadSaveDataBlock();
|
||||
//ReadDataFromBlock("Loading Streaming Stuff \n", CStreaming::MemoryCardLoad);
|
||||
//LoadSaveDataBlock();
|
||||
//ReadDataFromBlock("Loading PedType Stuff \n", CPedType::Load);
|
||||
//assert(*CStats::LastMissionPassedName); // init after load save vars!! mazahaka // tmp disabled
|
||||
// debug("======================last mission: %s\n", CStats::LastMissionPassedName);
|
||||
|
||||
// Çàãðóçêà áëîêà äàííûõ
|
||||
/*if(!ReadDataFromFile(file, (uint8 *)&size, 4)) { return false; }
|
||||
size = align4bytes(size);
|
||||
if(!ReadDataFromFile(file, work_buff, size)) { return false; }
|
||||
buf = work_buff;
|
||||
|
||||
// ×òåíèå äàííûõ èç áëîêà "Loading Player Info \n"
|
||||
debug("Loading Player Info \n");
|
||||
memcpy(&size, buf, sizeof(size));
|
||||
buf += align4bytes(sizeof(size));
|
||||
CWorld::Players[CWorld::PlayerInFocus].LoadPlayerInfo(buf, size);
|
||||
size = align4bytes(size);
|
||||
buf += size;
|
||||
|
||||
|
||||
|
||||
// Çàãðóçêà ñëåäóþùåãî áëîêà äàííûõ
|
||||
if(!ReadDataFromFile(file, (uint8 *)&size, 4)) { return false; }
|
||||
size = align4bytes(size);
|
||||
if(!ReadDataFromFile(file, work_buff, size)) { return false; }
|
||||
buf = work_buff;
|
||||
|
||||
// ×òåíèå äàííûõ èç áëîêà "Loading Stats \n"
|
||||
debug("Loading Stats \n");
|
||||
memcpy(&size, buf, sizeof(size));
|
||||
buf += align4bytes(sizeof(size));
|
||||
CStats::LoadStats(buf, size);
|
||||
size = align4bytes(size);
|
||||
buf += size;*/
|
||||
|
||||
// LoadSaveDataBlock();
|
||||
// ReadDataFromBlock("Loading Set Pieces \n", CSetPieces::Load);
|
||||
// LoadSaveDataBlock();
|
||||
// ReadDataFromBlock("Loading Streaming Stuff \n", CStreaming::MemoryCardLoad);
|
||||
// LoadSaveDataBlock();
|
||||
// ReadDataFromBlock("Loading PedType Stuff \n", CPedType::Load);
|
||||
CStreaming::ReInit();
|
||||
DMAudio.SetMusicMasterVolume(FrontEndMenuManager.m_PrefsMusicVolume);
|
||||
DMAudio.SetEffectsMasterVolume(FrontEndMenuManager.m_PrefsSfxVolume);
|
||||
|
|
|
@ -19,7 +19,7 @@ C_PcSave PcSaveHelper;
|
|||
void
|
||||
C_PcSave::SetSaveDirectory(const char *path)
|
||||
{
|
||||
sprintf(DefaultPCSaveFileName, "%s\\%s", path, "GTAVCsf");
|
||||
sprintf(DefaultPCSaveFileName, "%s\\%s", path, "GTAVCSsf");
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
|
@ -397,7 +397,7 @@ RsInitialize(void)
|
|||
*/
|
||||
RwBool result;
|
||||
|
||||
RsGlobal.appName = RWSTRING("GTA: Liberty City Stories");
|
||||
RsGlobal.appName = RWSTRING("GTA: Vice City Stories");
|
||||
RsGlobal.maximumWidth = DEFAULT_SCREEN_WIDTH;
|
||||
RsGlobal.maximumHeight = DEFAULT_SCREEN_HEIGHT;
|
||||
RsGlobal.width = DEFAULT_SCREEN_WIDTH;
|
||||
|
|
BIN
src/skel/win/gtavcs.ico
Normal file
BIN
src/skel/win/gtavcs.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.2 KiB |
BIN
src/skel/win/win.aps
Normal file
BIN
src/skel/win/win.aps
Normal file
Binary file not shown.
|
@ -50,6 +50,9 @@
|
|||
#include "skeleton.h"
|
||||
#include "platform.h"
|
||||
#include "crossplatform.h"
|
||||
#ifdef MAZAHAKA_PLUGIN_CODE
|
||||
#include "../plugin/plugin.h"
|
||||
#endif
|
||||
|
||||
#define MAX_SUBSYSTEMS (16)
|
||||
|
||||
|
@ -67,7 +70,7 @@ static RwBool useDefault;
|
|||
|
||||
/* Class name for the MS Window's window class. */
|
||||
|
||||
static const RwChar *AppClassName = RWSTRING("Grand theft auto 3");
|
||||
static const RwChar *AppClassName = RWSTRING("Grand theft auto vcs");
|
||||
|
||||
static psGlobalType PsGlobal;
|
||||
|
||||
|
@ -148,6 +151,19 @@ void CJoySticks::ClearJoyInfo(int joyID)
|
|||
m_aJoys[joyID].m_bHasAxisR = false;
|
||||
}
|
||||
|
||||
#ifdef MAZAHAKA_FIX_BACKGROUND_APP_NO_HOLD_MOUSE
|
||||
bool
|
||||
CheckWindowStateIsOpenedMaZaHaKa()
|
||||
{
|
||||
// HWND window = ((psGlobalType *)(RsGlobal.ps))->window; // PSGLOBAL(window)
|
||||
HWND window = PSGLOBAL(window);
|
||||
HWND activeWindow = GetForegroundWindow();
|
||||
|
||||
// bool IsMinimized = (IsIconic(window) != 0); // no used here
|
||||
bool IsActive = (window == activeWindow);
|
||||
return IsActive;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
|
@ -194,7 +210,7 @@ const char *_psGetUserFilesFolder()
|
|||
&KeycbData) == ERROR_SUCCESS )
|
||||
{
|
||||
RegCloseKey(hKey);
|
||||
strcat(szUserFiles, "\\GTA Vice City User Files");
|
||||
strcat(szUserFiles, "\\GTA LCS User Files");
|
||||
_psCreateFolder(szUserFiles);
|
||||
return szUserFiles;
|
||||
}
|
||||
|
@ -1541,7 +1557,7 @@ psSelectDevice()
|
|||
}
|
||||
|
||||
if(bestFsMode < 0){
|
||||
MessageBox(nil, "Cannot find desired video mode", "GTA: Vice City", MB_OK);
|
||||
MessageBox(nil, "Cannot find desired video mode", "GTA: LCS", MB_OK);
|
||||
return FALSE;
|
||||
}
|
||||
GcurSelVM = bestFsMode;
|
||||
|
@ -2006,6 +2022,11 @@ void HandleExit()
|
|||
/*
|
||||
*****************************************************************************
|
||||
*/
|
||||
//#include "Windows.h"
|
||||
//#include <iostream>
|
||||
#include "../utils/SetCurrDir.h" // ++ MAZAHAKA
|
||||
#include "../utils/ConsoleTools.h" // ++ MAZAHAKA
|
||||
#include <iostream>
|
||||
int PASCAL
|
||||
WinMain(HINSTANCE instance,
|
||||
HINSTANCE prevInstance __RWUNUSED__,
|
||||
|
@ -2018,14 +2039,40 @@ WinMain(HINSTANCE instance,
|
|||
RwChar **argv;
|
||||
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, nil, SPIF_SENDCHANGE);
|
||||
|
||||
#ifndef MASTER
|
||||
if (strstr(cmdLine, "-console"))
|
||||
//#ifndef MASTER
|
||||
// if (strstr(cmdLine, "-console"))
|
||||
{
|
||||
AllocConsole();
|
||||
freopen("CONIN$", "r", stdin);
|
||||
freopen("CONOUT$", "w", stdout);
|
||||
freopen("CONOUT$", "w", stderr);
|
||||
#ifdef MAZAHAKA_DEBUG // ++ MAZAHAKA
|
||||
// AllocConsole();
|
||||
// freopen("CONIN$", "r", stdin);
|
||||
// freopen("CONOUT$", "w", stdout);
|
||||
// freopen("CONOUT$", "w", stderr);
|
||||
OpenConsole();
|
||||
#else
|
||||
#ifndef MAZAHAKA_RELEASE_NO_SHIFT_CONSOLE_AT_START
|
||||
if((GetAsyncKeyState(VK_SHIFT) & 0x8000)) { OpenConsole(); }
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// mod by diktor SET CURRENT PATH
|
||||
// char currentDir[MAX_PATH]; // STATIC PATH
|
||||
// GetCurrentDirectory(MAX_PATH, currentDir);
|
||||
// printf("DIR: %s\n", currentDir);
|
||||
// memset(currentDir, 0, MAX_PATH);
|
||||
// strncpy(currentDir, "C:\\_GTA_RE\\revc\\reVC_GAME", MAX_PATH);
|
||||
// currentDir[MAX_PATH - 1] = '\0'; // Ensure null-termination
|
||||
// SetCurrentDirectory(currentDir);
|
||||
|
||||
// char currentDir[MAX_PATH]; // dynamic set curr dir to exe
|
||||
// GetModuleFileName(NULL, currentDir, MAX_PATH);
|
||||
// std::string::size_type pos = std::string(currentDir).find_last_of("\\/");
|
||||
// SetCurrentDirectory(std::string(currentDir).substr(0, pos).c_str());
|
||||
if(!gbIsSettedCurrDir) { U_SetCurrentDirectory(); }
|
||||
}
|
||||
//#endif
|
||||
|
||||
#ifdef MAZAHAKA_PLUGIN_CODE
|
||||
PLG_Start(); // PLG PLUGIN MAZAHAKA // after setting no debug dir
|
||||
#endif
|
||||
|
||||
#ifdef USE_CUSTOM_ALLOCATOR
|
||||
|
|
|
@ -88,4 +88,14 @@ void CloseClip(void);
|
|||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* (!defined(_PLATFORM_WIN_H)) */
|
||||
|
||||
//#include "config.h" // ifdef?
|
||||
//#ifdef MAZAHAKA_FIX_BACKGROUND_APP_NO_HOLD_MOUSE
|
||||
//#include "Windows.h"
|
||||
// bool CheckWindowState(HWND window = PSGLOBAL(window));
|
||||
//#endif
|
||||
#ifdef MAZAHAKA_FIX_BACKGROUND_APP_NO_HOLD_MOUSE
|
||||
bool CheckWindowStateIsOpenedMaZaHaKa();
|
||||
#endif
|
||||
|
||||
#endif /* (!defined(_PLATFORM_WIN_H)) */
|
|
@ -42,6 +42,6 @@ END
|
|||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
IDI_MAIN_ICON ICON DISCARDABLE "gtalcs.ico"
|
||||
IDI_MAIN_ICON ICON DISCARDABLE "gtavcs.ico"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
|
@ -40,13 +40,13 @@ public:
|
|||
static bool WideStringCompare(wchar *str1, wchar *str2, uint16 size);
|
||||
static void Process(void);
|
||||
static void Display(void);
|
||||
static void AddMessage(wchar *key, uint32 time, uint16 pos);
|
||||
static void AddMessageJumpQ(wchar *key, uint32 time, uint16 pos);
|
||||
static void AddMessageSoon(wchar *key, uint32 time, uint16 pos);
|
||||
static void AddMessage(wchar *msg, uint32 time, uint16 pos);
|
||||
static void AddMessageJumpQ(wchar *msg, uint32 time, uint16 pos);
|
||||
static void AddMessageSoon(wchar *msg, uint32 time, uint16 pos);
|
||||
static void ClearMessages(void);
|
||||
static void ClearSmallMessagesOnly(void);
|
||||
static void AddBigMessage(wchar *key, uint32 time, uint16 pos);
|
||||
static void AddBigMessageQ(wchar *key, uint32 time, uint16 pos);
|
||||
static void AddBigMessage(wchar *msg, uint32 time, uint16 pos);
|
||||
static void AddBigMessageQ(wchar *msg, uint32 time, uint16 pos);
|
||||
static void AddToPreviousBriefArray(wchar *text, int32 n1, int32 n2, int32 n3, int32 n4, int32 n5, int32 n6, wchar *string);
|
||||
static void InsertNumberInString(wchar *src, int32 n1, int32 n2, int32 n3, int32 n4, int32 n5, int32 n6, wchar *dst);
|
||||
static void InsertStringInString(wchar *str1, wchar *str2);
|
||||
|
|
100
src/utils/ConsoleTools.cpp
Normal file
100
src/utils/ConsoleTools.cpp
Normal file
|
@ -0,0 +1,100 @@
|
|||
#pragma once
|
||||
#include "ConsoleTools.h"
|
||||
#include "Windows.h"
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
//#define MY_ALLOC
|
||||
HANDLE InitConsole();
|
||||
|
||||
|
||||
extern bool gbIsConsoleOpened = false;
|
||||
|
||||
|
||||
void OpenConsole()
|
||||
{
|
||||
if(!gbIsConsoleOpened)
|
||||
{
|
||||
#ifdef MY_ALLOC
|
||||
InitConsole();
|
||||
#else
|
||||
AllocConsole();
|
||||
freopen("CONIN$", "r", stdin);
|
||||
freopen("CONOUT$", "w", stdout);
|
||||
freopen("CONOUT$", "w", stderr);
|
||||
#endif
|
||||
gbIsConsoleOpened = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------
|
||||
HANDLE InitConsole() // with proto
|
||||
{
|
||||
AllocConsole();
|
||||
|
||||
//SetConsoleOutputCP(866);
|
||||
setlocale(LC_ALL, "Russian");
|
||||
SetConsoleOutputCP(1251);
|
||||
SetConsoleCP(1251);
|
||||
|
||||
|
||||
freopen("CONIN$", "r", stdin);
|
||||
freopen("CONOUT$", "w", stdout);
|
||||
|
||||
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN);
|
||||
|
||||
return hConsole;
|
||||
}
|
||||
|
||||
//void LeaveConsole(HANDLE hConsole = nullptr)
|
||||
void LeaveConsole(HANDLE hConsole) // with proto
|
||||
{
|
||||
if (hConsole != nullptr) { SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); } // Reset to default color
|
||||
FreeConsole();
|
||||
}
|
||||
|
||||
//void Mbox(const char* msg, const char* title)
|
||||
//{
|
||||
// MessageBoxA(HWND_DESKTOP, msg, title, MB_SYSTEMMODAL | MB_ICONWARNING);
|
||||
//}
|
||||
//
|
||||
////void MboxSTD(const std::string& msg, const std::string& title = "title")
|
||||
//void MboxSTD(std::string msg, std::string title)
|
||||
//{
|
||||
// MessageBoxA(HWND_DESKTOP, msg.c_str(), title.c_str(), MB_SYSTEMMODAL | MB_ICONWARNING);
|
||||
//}
|
||||
//void EXIT_F()
|
||||
//{
|
||||
// ExitProcess(EXIT_FAILURE);
|
||||
//}
|
||||
//void EXIT_S()
|
||||
//{
|
||||
// ExitProcess(EXIT_SUCCESS);
|
||||
//}
|
||||
//void RaiseError(const char* fmt, ...)
|
||||
//{
|
||||
// char buf[2048];
|
||||
// va_list args;
|
||||
// va_start(args, fmt);
|
||||
// vsprintf_s(buf, fmt, args);
|
||||
// va_end(args);
|
||||
//
|
||||
// MessageBoxA(HWND_DESKTOP, buf, "Fatal Error", MB_SYSTEMMODAL | MB_ICONWARNING);
|
||||
// ExitProcess(EXIT_FAILURE);
|
||||
//}
|
||||
|
||||
|
||||
//std::string ToUpper(std::string strToConvert)
|
||||
//{
|
||||
// std::transform(strToConvert.begin(), strToConvert.end(), strToConvert.begin(), std::toupper); //::toupper
|
||||
// return strToConvert;
|
||||
//}
|
||||
//std::string ToLower(std::string strToConvert)
|
||||
//{
|
||||
// std::transform(strToConvert.begin(), strToConvert.end(), strToConvert.begin(), std::tolower);
|
||||
// return strToConvert;
|
||||
//}
|
||||
//std::string CustomStringConcat(std::string str1, std::string str2) { return str1 + str2; }
|
11
src/utils/ConsoleTools.h
Normal file
11
src/utils/ConsoleTools.h
Normal file
|
@ -0,0 +1,11 @@
|
|||
#pragma once
|
||||
#include "Windows.h"
|
||||
//#include <iostream>
|
||||
//#include <string>
|
||||
#pragma warning(disable : 4996) // freopen unsafe
|
||||
|
||||
//#define MY_ALLOC
|
||||
extern bool gbIsConsoleOpened;
|
||||
void OpenConsole();
|
||||
HANDLE InitConsole();
|
||||
void LeaveConsole(HANDLE);
|
23
src/utils/SetCurrDir.cpp
Normal file
23
src/utils/SetCurrDir.cpp
Normal file
|
@ -0,0 +1,23 @@
|
|||
#pragma once
|
||||
#include "Windows.h"
|
||||
#include <iostream>
|
||||
|
||||
static bool gbIsSettedCurrDir = false;
|
||||
void
|
||||
U_SetCurrentDirectory()
|
||||
{
|
||||
// mod by diktor SET CURRENT PATH
|
||||
// char currentDir[MAX_PATH]; // STATIC PATH
|
||||
// GetCurrentDirectory(MAX_PATH, currentDir);
|
||||
// printf("DIR: %s\n", currentDir);
|
||||
// memset(currentDir, 0, MAX_PATH);
|
||||
// strncpy(currentDir, "C:\\_GTA_RE\\revc\\reVC_GAME", MAX_PATH);
|
||||
// currentDir[MAX_PATH - 1] = '\0'; // Ensure null-termination
|
||||
// SetCurrentDirectory(currentDir);
|
||||
|
||||
char currentDir[MAX_PATH]; // dynamic set curr dir to exe
|
||||
GetModuleFileName(NULL, currentDir, MAX_PATH);
|
||||
std::string::size_type pos = std::string(currentDir).find_last_of("\\/");
|
||||
SetCurrentDirectory(std::string(currentDir).substr(0, pos).c_str());
|
||||
gbIsSettedCurrDir = true;
|
||||
}
|
7
src/utils/SetCurrDir.h
Normal file
7
src/utils/SetCurrDir.h
Normal file
|
@ -0,0 +1,7 @@
|
|||
#pragma once
|
||||
#include "Windows.h"
|
||||
#include <iostream>
|
||||
|
||||
static bool gbIsSettedCurrDir;
|
||||
void
|
||||
U_SetCurrentDirectory();
|
555
src/utils/Utils.cpp
Normal file
555
src/utils/Utils.cpp
Normal file
|
@ -0,0 +1,555 @@
|
|||
#pragma once
|
||||
#include "Utils.h"
|
||||
//#include "../core/config.h"
|
||||
#include "../core/common.h"
|
||||
#include "../core/General.h"
|
||||
#include "../weapons/WeaponType.h"
|
||||
#include "../weapons/WeaponInfo.h"
|
||||
#include "../rw/TxdStore.h"
|
||||
#include "../fakerw/rpworld.h"
|
||||
#include "../entities/Entity.h"
|
||||
#include "../peds/Ped.h"
|
||||
#include "../vehicles/Vehicle.h"
|
||||
#include "../core/PlayerInfo.h"
|
||||
#include "../peds/Ped.h"
|
||||
#include "../peds/PlayerPed.h"
|
||||
#include "../peds/CivilianPed.h"
|
||||
#include "../core/Wanted.h"
|
||||
#include "../control/PathFind.h"
|
||||
#include "../core/Camera.h"
|
||||
#include "../control/Replay.h"
|
||||
#include "../renderer/Hud.h"
|
||||
#include "../renderer/Font.h"
|
||||
#include "../text/Text.h"
|
||||
#include "../core/World.h"
|
||||
#include "../control/Script.h"
|
||||
#include "../core/Frontend.h"
|
||||
#ifdef MAZAHAKA_FIX_BACKGROUND_APP_NO_HOLD_MOUSE
|
||||
#include "../skel/win/win.h"
|
||||
#endif
|
||||
|
||||
//class CEntity;
|
||||
//class CPed;
|
||||
//class CVehicle;
|
||||
//class CPlayerPed;
|
||||
//class CCivilianPed;
|
||||
|
||||
#include "Windows.h"
|
||||
#include <iostream>
|
||||
|
||||
|
||||
////------------------------------------------------------------------
|
||||
//HANDLE InitConsole() // with proto
|
||||
//{
|
||||
// AllocConsole();
|
||||
//
|
||||
// //SetConsoleOutputCP(866);
|
||||
// setlocale(LC_ALL, "Russian");
|
||||
// SetConsoleOutputCP(1251);
|
||||
// SetConsoleCP(1251);
|
||||
//
|
||||
//
|
||||
// freopen("CONIN$", "r", stdin);
|
||||
// freopen("CONOUT$", "w", stdout);
|
||||
//
|
||||
// HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
// SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN);
|
||||
//
|
||||
// return hConsole;
|
||||
//}
|
||||
//
|
||||
////void LeaveConsole(HANDLE hConsole = nullptr)
|
||||
//void LeaveConsole(HANDLE hConsole) // with proto
|
||||
//{
|
||||
// if (hConsole != nullptr) { SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); } // Reset to default color
|
||||
// FreeConsole();
|
||||
//}
|
||||
|
||||
|
||||
|
||||
|
||||
void Mbox(const char* msg, const char* title)
|
||||
{
|
||||
MessageBoxA(HWND_DESKTOP, msg, title, MB_SYSTEMMODAL | MB_ICONWARNING);
|
||||
}
|
||||
//void MboxSTD(const std::string& msg, const std::string& title = "title")
|
||||
void MboxSTD(std::string msg, std::string title)
|
||||
{
|
||||
MessageBoxA(HWND_DESKTOP, msg.c_str(), title.c_str(), MB_SYSTEMMODAL | MB_ICONWARNING);
|
||||
}
|
||||
void EXIT_F()
|
||||
{
|
||||
ExitProcess(EXIT_FAILURE);
|
||||
}
|
||||
void EXIT_S()
|
||||
{
|
||||
ExitProcess(EXIT_SUCCESS);
|
||||
}
|
||||
void RaiseError(const char* fmt, ...)
|
||||
{
|
||||
char buf[2048];
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
vsprintf_s(buf, fmt, args);
|
||||
va_end(args);
|
||||
|
||||
MessageBoxA(HWND_DESKTOP, buf, "Fatal Error", MB_SYSTEMMODAL | MB_ICONWARNING);
|
||||
ExitProcess(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void DumpTexturesNames(RpAtomic* pRpAtomic, CEntity* pEntity, bool dump_error)
|
||||
{
|
||||
if (pEntity) { pRpAtomic = pEntity->GetAtomic(); }
|
||||
if (!pRpAtomic) { if (dump_error) { std::cout << "!rpAtomic\n"; } return; }
|
||||
if (dump_error) { printf("Atomic: 0x%p\n", pRpAtomic); }
|
||||
RpGeometry* geo = pRpAtomic->geometry;
|
||||
if (!geo) { if (dump_error) { std::cout << "!geo\n"; } return; }
|
||||
rw::MaterialList matList = geo->matList;
|
||||
//if (!matList) { return; }
|
||||
//std::cout << "\n\n";
|
||||
for (int i = 0; i < matList.numMaterials; ++i)
|
||||
{
|
||||
RpMaterial* mat = matList.materials[i];
|
||||
if (mat && mat->texture) {
|
||||
const char* textureName = mat->texture->name;
|
||||
if (dump_error) { printf("%d: %s \t 0x%p\n", i, textureName, mat->texture); }
|
||||
else { printf("%d: %s\n", i, textureName); }
|
||||
}
|
||||
//else { debug("!Material %d .", i); }
|
||||
}
|
||||
std::cout << "\n\n";
|
||||
}
|
||||
|
||||
|
||||
|
||||
int GetModelIndex(CEntity* pEntity) // lol
|
||||
{
|
||||
if (!pEntity) { return -1; }
|
||||
return (pEntity->GetModelIndex());
|
||||
}
|
||||
|
||||
std::string GetModelName(CEntity* pEntity)
|
||||
{
|
||||
if (!pEntity) { return ""; }
|
||||
//return (CModelInfo::ms_modelInfoPtrs[pEntity->GetModelIndex()]->m_name); // +".txd" ?
|
||||
return (CModelInfo::GetModelInfo(pEntity->GetModelIndex())->GetModelName()); // +".txd" ?
|
||||
}
|
||||
|
||||
std::string GetModelTxdSlotName(CEntity* pEntity)
|
||||
{
|
||||
if (!pEntity) { return ""; }
|
||||
//return (CTxdStore::GetTxdName(CModelInfo::ms_modelInfoPtrs[pEntity->GetModelIndex()]->GetTxdSlot())); // +".txd" ?
|
||||
return (CTxdStore::GetTxdName(CModelInfo::GetModelInfo(pEntity->GetModelIndex())->GetTxdSlot())); // +".txd" ?
|
||||
}
|
||||
|
||||
// crash if entity is ped
|
||||
void DumpEntityData(CEntity* pEntity, bool clear_console)
|
||||
{
|
||||
if (!pEntity) { std::cout << "!pEntity" << "\n"; return; }
|
||||
if(clear_console) { system("cls"); }
|
||||
else {std::cout << "\n\n"; }
|
||||
std::cout << "MI: " << GetModelIndex(pEntity) << " Entity: 0x" << pEntity << " Name: " << GetModelName(pEntity) << "\t TXD: " << GetModelTxdSlotName(pEntity) << "\n";
|
||||
std::cout << "\n" << "Tex List" << "\n";
|
||||
DumpTexturesNames(nullptr, pEntity, false);
|
||||
std::cout << "\n\n";
|
||||
}
|
||||
|
||||
|
||||
CWeaponInfo* GetPlayerCurrentWeaponInfo()
|
||||
{
|
||||
if (!FindPlayerPed()) { return nullptr; }
|
||||
CWeaponInfo* info = CWeaponInfo::GetWeaponInfo(FindPlayerPed()->GetWeapon()->m_eWeaponType);
|
||||
return info;
|
||||
}
|
||||
|
||||
int32_t GetPlayerCurrentWeaponType()
|
||||
{
|
||||
//if (!FindPlayerPed()) { return eWeaponType::WEAPONTYPE_UNARMED; }
|
||||
if (!FindPlayerPed()) { return eWeaponType::WEAPONTYPE_UNARMED; }
|
||||
//int32_t WeaponType = FindPlayerPed()->m_aWeapons[FindPlayerPed()->m_nCurrentWeapon].m_eWeaponType;
|
||||
return FindPlayerPed()->GetWeapon()->m_eWeaponType;
|
||||
}
|
||||
|
||||
|
||||
//-----
|
||||
bool IsWeaponPistol()
|
||||
{
|
||||
if (!FindPlayerPed()) { return false; }
|
||||
return (GetPlayerCurrentWeaponType() == WEAPONTYPE_COLT45);
|
||||
}
|
||||
|
||||
bool IsWeaponUziPlayer()
|
||||
{
|
||||
if (!FindPlayerPed()) { return false; }
|
||||
return (GetPlayerCurrentWeaponType() == WEAPONTYPE_UZI);
|
||||
}
|
||||
|
||||
/*bool IsWeaponAK47Player()
|
||||
{
|
||||
if (!FindPlayerPed()) { return false; }
|
||||
return (GetPlayerCurrentWeaponType() == WEAPONTYPE_AK47);
|
||||
}
|
||||
|
||||
bool IsWeaponM16Player()
|
||||
{
|
||||
if (!FindPlayerPed()) { return false; }
|
||||
return (GetPlayerCurrentWeaponType() == WEAPONTYPE_M16);
|
||||
}*/
|
||||
|
||||
bool IsUnArmedPlayer()
|
||||
{
|
||||
if (!FindPlayerPed()) { return false; }
|
||||
return (GetPlayerCurrentWeaponType() == WEAPONTYPE_UNARMED);
|
||||
}
|
||||
//-----
|
||||
|
||||
|
||||
RpClump* GetPlayerClump()
|
||||
{
|
||||
if(!FindPlayerPed()) { return nullptr; }
|
||||
// CWeaponInfo::GetWeaponInfo(FindPlayerPed()->m_aWeapons[FindPlayerPed()->m_nCurrentWeapon]
|
||||
return (RpClump*)FindPlayerPed()->GetClump();
|
||||
}
|
||||
|
||||
bool IsPlayerDriveVehicle()
|
||||
{
|
||||
if(!FindPlayerPed()) { return false; }
|
||||
// return FindPlayerPed()->m_pVehicle != nullptr; // NOT WORK. òà÷êà ïåäà îñòà¸òüñÿ åñëè îí âûøåë
|
||||
return FindPlayerPed()->InVehicle(); // work
|
||||
}
|
||||
|
||||
// if (!DKSleep(deltaTime.count(), gfMemingTimer, gfTimerBuffer)) { return; } // çàäåðæêà ïðîêðóòà
|
||||
bool DKSleep(float deltaTime, float wait_time, float& sleepBuffer)
|
||||
{
|
||||
sleepBuffer += deltaTime; // Íàêàïëèâàåì âðåìÿ
|
||||
// Åñëè íàêîïëåííîå âðåìÿ áîëüøå èëè ðàâíî âðåìåíè îæèäàíèÿ
|
||||
if (sleepBuffer >= wait_time) {
|
||||
sleepBuffer = 0.0f; // Ñáðàñûâàåì íàêîïëåííîå âðåìÿ
|
||||
return true; // Âðåìÿ îæèäàíèÿ èñòåêëî, âîçâðàùàåì true
|
||||
}
|
||||
return false; // Âðåìÿ îæèäàíèÿ íå èñòåêëî, âîçâðàùàåì false
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
IsWindowActive(HWND hwnd)
|
||||
{
|
||||
HWND activeWindow = GetForegroundWindow();
|
||||
return (hwnd == activeWindow);
|
||||
}
|
||||
|
||||
bool
|
||||
IsWindowMinimized(HWND hwnd)
|
||||
{
|
||||
return IsIconic(hwnd) != 0;
|
||||
}
|
||||
|
||||
|
||||
/*wchar strW[200];
|
||||
// char strA[250];
|
||||
// sprintf(strA, "TTS DAT Reloaded!");
|
||||
AsciiToUnicode(str, strW);
|
||||
if(play_beep) { CHud::SetHelpMessage(strW, true); }*/
|
||||
|
||||
std::wstring
|
||||
Utf8ToWide(const std::string &utf8Str)
|
||||
{
|
||||
int wideStrLen = MultiByteToWideChar(CP_UTF8, 0, utf8Str.c_str(), -1, NULL, 0);
|
||||
wchar_t *wideStr = new wchar_t[wideStrLen];
|
||||
MultiByteToWideChar(CP_UTF8, 0, utf8Str.c_str(), -1, wideStr, wideStrLen);
|
||||
std::wstring result(wideStr);
|
||||
delete[] wideStr;
|
||||
return result;
|
||||
}
|
||||
|
||||
//inline
|
||||
int
|
||||
GetFrontendAudioPercentVolume(bool bSFX, bool crt_vol)
|
||||
{ // FrontEndMenuManager MAX VOL 128
|
||||
#define FRONTEND_AUDIO_MAX 127
|
||||
// InitConsole();
|
||||
// std::cout << "FrontEndMenuManager.m_nPrefsSfxVolume: " << FrontEndMenuManager.m_nPrefsSfxVolume << "\n";
|
||||
// std::cout << "FrontEndMenuManager.m_nPrefsMusicVolume: " << FrontEndMenuManager.m_nPrefsMusicVolume << "\n\n";
|
||||
// return 20;
|
||||
int res = bSFX ? (FrontEndMenuManager.m_PrefsSfxVolume * 100) / FRONTEND_AUDIO_MAX : (FrontEndMenuManager.m_PrefsMusicVolume * 100) / FRONTEND_AUDIO_MAX;
|
||||
// std::cout << "bSFX:" << bSFX << " vol:" << res << "\n";
|
||||
return res;
|
||||
#undef FRONTEND_AUDIO_MAX
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
UAsciiToUnicode(const char *src, wchar *dst) // font?cpp
|
||||
{
|
||||
while((*dst++ = (unsigned char)*src++) != '\0')
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
UUnicodeToAscii(wchar *src, char *dst)
|
||||
{
|
||||
while((*dst++ = (char)*src++) != '\0')
|
||||
;
|
||||
}
|
||||
|
||||
bool
|
||||
IsPlayerAsPassangerNow()
|
||||
{
|
||||
CPlayerPed *pPlayer = FindPlayerPed();
|
||||
if(!pPlayer) { return false; }
|
||||
if(pPlayer->InVehicle() && pPlayer->m_pMyVehicle->pDriver != pPlayer) { return true; } // passanger?
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
CheckWastedBustedPlayer() // return true if wasted/busted
|
||||
{
|
||||
CPlayerInfo *pPlayerInfo = &CWorld::Players[CWorld::PlayerInFocus];
|
||||
if(!pPlayerInfo) { return false; }
|
||||
//CPlayerInfo::IsRestartingAfterDeath
|
||||
//CPlayerInfo::IsRestartingAfterArres
|
||||
return (pPlayerInfo->m_WBState != WBSTATE_PLAYING);
|
||||
//return ((pPlayerInfo->m_WBState == WBSTATE_WASTED) || (pPlayerInfo->m_WBState == WBSTATE_BUSTED));
|
||||
}
|
||||
|
||||
bool
|
||||
IsPlayerPlaying()
|
||||
{ // CPlayerInfo::MakePlayerSafe(bool toggle)
|
||||
CPlayerInfo *pPlayerInfo = &CWorld::Players[CWorld::PlayerInFocus];
|
||||
CPlayerPed *pPlayer = FindPlayerPed();
|
||||
|
||||
if(!pPlayerInfo) { return false; }
|
||||
if(!pPlayer) { return false; }
|
||||
|
||||
// if (CCutsceneMgr::ms_running) { return false; }
|
||||
// if (IsPlayerOnMission()) { return false; } // desp rando wanted
|
||||
#ifdef MAZAHAKA_FIX_BACKGROUND_APP_NO_HOLD_MOUSE
|
||||
if(!CheckWindowStateIsOpenedMaZaHaKa()) { return false; }
|
||||
#endif
|
||||
if(FrontEndMenuManager.m_bMenuActive) { return false; }
|
||||
if(TheCamera.m_bFading) { return false; }
|
||||
if(FrontEndMenuManager.m_bGameNotLoaded) { return false; }
|
||||
if(CheckWastedBustedPlayer()) { return false; }
|
||||
if(FindPlayerVehicle() && (FindPlayerVehicle()->m_vehType == VEHICLE_TYPE_TRAIN)) { return false; }
|
||||
|
||||
//if(pPlayer->InVehicle() && pPlayer->m_pMyVehicle->pDriver != pPlayer) { return false; } // passanger?
|
||||
if(IsPlayerAsPassangerNow()) { return false; } // passanger?
|
||||
if(CReplay::IsPlayingBack()) { return false; }
|
||||
|
||||
|
||||
bool defaultgamesafeped =
|
||||
(true
|
||||
&& pPlayer->m_pWanted->m_bIgnoredByEveryone
|
||||
&& pPlayer->bBulletProof
|
||||
&& pPlayer->bFireProof
|
||||
&& pPlayer->bCollisionProof
|
||||
&& pPlayer->bMeleeProof
|
||||
&& pPlayer->bOnlyDamagedByPlayer
|
||||
&& pPlayer->bExplosionProof
|
||||
&& !(pPlayer->m_bCanBeDamaged));
|
||||
if(defaultgamesafeped) { return false; }
|
||||
// on true safe
|
||||
// m_pPed->bBulletProof = true;
|
||||
// m_pPed->bFireProof = true;
|
||||
// m_pPed->bCollisionProof = true;
|
||||
// m_pPed->bMeleeProof = true;
|
||||
// m_pPed->bOnlyDamagedByPlayer = true;
|
||||
// m_pPed->bExplosionProof = true;
|
||||
// m_pPed->m_bCanBeDamaged = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
CVector
|
||||
Transform3DPoint2NearPathNode(CVector target)
|
||||
{
|
||||
int node = ThePaths.FindNodeClosestToCoors(target, 0, 150.0f, true, true);
|
||||
if(node < 0) { return target; }
|
||||
CVector output = ThePaths.m_pathNodes[node].GetPosition();
|
||||
return output;
|
||||
}
|
||||
|
||||
int
|
||||
GetRandomNumInclude(int start, int end)
|
||||
{
|
||||
// Äîáàâëÿåì 1 ê `end` â âûðàæåíèè, ÷òîáû âêëþ÷èòü âåðõíþþ ãðàíèöó
|
||||
return start + CGeneral::GetRandomNumberInRange(0, end - start + 1);
|
||||
}
|
||||
|
||||
int
|
||||
GetRandomNumUnInclude(int start, int end)
|
||||
{
|
||||
// Çäåñü âåðõíÿÿ ãðàíèöà óæå èñêëþ÷åíà, ïîýòîìó íèêàêèå èçìåíåíèÿ íå òðåáóþòñÿ
|
||||
return start + CGeneral::GetRandomNumberInRange(0, end - start);
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
IsWithinRadius(const CVector &point1, const CVector &point2, float radius) // åñòü ðåàëèçàöèÿ â èãðå ãîòîâàÿ?
|
||||
{
|
||||
CVector diff = point1 - point2;
|
||||
float distSquared = diff.x * diff.x + diff.y * diff.y + diff.z * diff.z;
|
||||
float radiusSquared = radius * radius;
|
||||
return distSquared <= radiusSquared;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Message(const char *str, bool play_beep)
|
||||
{
|
||||
/*std::wstring wideStr = Utf8ToWide(str);
|
||||
#ifdef MAZAHAKA_SILENT_CHUD_MESSAGE
|
||||
if(play_beep) { CHud::SetHelpMessage((wchar *)wideStr.c_str(), true); }
|
||||
else { CHud::SetHelpMessageNoSound((wchar *)wideStr.c_str(), true); }
|
||||
#else
|
||||
CHud::SetHelpMessage((wchar *)wideStr.c_str(), true);
|
||||
#endif*/
|
||||
|
||||
wchar strW[200];
|
||||
// char strA[250];
|
||||
// sprintf(strA, "TTS DAT Reloaded!");
|
||||
AsciiToUnicode(str, strW);
|
||||
|
||||
#ifdef MAZAHAKA_SILENT_CHUD_MESSAGE
|
||||
if(play_beep) {
|
||||
CHud::SetHelpMessage(strW, true);
|
||||
} else {
|
||||
CHud::SetHelpMessageNoSound(strW, true);
|
||||
}
|
||||
#else
|
||||
CHud::SetHelpMessage(strW, true);
|
||||
#endif
|
||||
}
|
||||
|
||||
//__declspec(noinline)
|
||||
CVehicle *
|
||||
GetRandomPoolVehicle(bool nodriver, bool all)
|
||||
{
|
||||
CPlayerPed *pPlayer = FindPlayerPed();
|
||||
int j = CPools::GetVehiclePool()->GetSize();
|
||||
while(j-- > 0) {
|
||||
//if(CVehicle *veh = CPools::GetVehiclePool()->GetSlot(j)) veh->BlowUpCar(nil);
|
||||
CVehicle *veh = CPools::GetVehiclePool()->GetSlot(j);
|
||||
if(!veh) {continue; }
|
||||
if(pPlayer && pPlayer->InVehicle() && pPlayer->m_pMyVehicle == veh) { continue; }
|
||||
if(all) { if(veh->IsCar()) { return veh; } }
|
||||
else {
|
||||
if(nodriver && (!veh->pDriver) && veh->IsCar()) { return veh; }
|
||||
else if(!nodriver && veh->pDriver && veh->IsCar()) { return veh; }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*while(1)
|
||||
{
|
||||
int i = _RandVUKL(0, CPools::GetVehiclePool()->GetSize());
|
||||
CVehicle *veh = CPools::GetVehiclePool()->GetSlot(i);
|
||||
if(veh && veh->IsCar()) { return veh; }
|
||||
Sleep(0);
|
||||
}*/
|
||||
return nil;
|
||||
}
|
||||
|
||||
CVehicle*
|
||||
GetVehicleNearPlayer()
|
||||
{
|
||||
//CVehicle *veh = nil;
|
||||
CPlayerPed *pPlayer = FindPlayerPed();
|
||||
CPlayerInfo *pPlayerInfo = &CWorld::Players[CWorld::PlayerInFocus];
|
||||
if(!pPlayer || !pPlayerInfo) { return false; }
|
||||
//veh = pPlayer->m_pMyVehicle; // tmp dummy
|
||||
|
||||
bool weAreOnBoat = false;
|
||||
float lastCloseness = 0.0f;
|
||||
CVehicle *carBelow = nil;
|
||||
CEntity *surfaceBelow = pPlayer->m_pCurrentPhysSurface;
|
||||
if(surfaceBelow && surfaceBelow->IsVehicle()) {
|
||||
carBelow = (CVehicle *)surfaceBelow;
|
||||
if(carBelow->IsBoat()) {
|
||||
weAreOnBoat = true;
|
||||
pPlayer->bOnBoat = true;
|
||||
#ifdef VC_PED_PORTS
|
||||
if(carBelow->GetStatus() != STATUS_WRECKED && carBelow->GetUp().z > 0.3f)
|
||||
#else
|
||||
if(carBelow->GetStatus() != STATUS_WRECKED)
|
||||
#endif
|
||||
pPlayer->SetSeekBoatPosition(carBelow);
|
||||
}
|
||||
}
|
||||
// Find closest car
|
||||
if(!weAreOnBoat) {
|
||||
float minX = pPlayer->GetPosition().x - 10.0f;
|
||||
float maxX = 10.0f + pPlayer->GetPosition().x;
|
||||
float minY = pPlayer->GetPosition().y - 10.0f;
|
||||
float maxY = 10.0f + pPlayer->GetPosition().y;
|
||||
|
||||
int minXSector = CWorld::GetSectorIndexX(minX);
|
||||
if(minXSector < 0) minXSector = 0;
|
||||
int minYSector = CWorld::GetSectorIndexY(minY);
|
||||
if(minYSector < 0) minYSector = 0;
|
||||
int maxXSector = CWorld::GetSectorIndexX(maxX);
|
||||
if(maxXSector > NUMSECTORS_X - 1) maxXSector = NUMSECTORS_X - 1;
|
||||
int maxYSector = CWorld::GetSectorIndexY(maxY);
|
||||
if(maxYSector > NUMSECTORS_Y - 1) maxYSector = NUMSECTORS_Y - 1;
|
||||
|
||||
CWorld::AdvanceCurrentScanCode();
|
||||
|
||||
for(int curY = minYSector; curY <= maxYSector; curY++) {
|
||||
for(int curX = minXSector; curX <= maxXSector; curX++) {
|
||||
CSector *sector = CWorld::GetSector(curX, curY);
|
||||
pPlayerInfo->FindClosestCarSectorList(sector->m_lists[ENTITYLIST_VEHICLES], pPlayer, minX, minY, maxX, maxY, &lastCloseness,
|
||||
&carBelow);
|
||||
pPlayerInfo->CPlayerInfo::FindClosestCarSectorList(sector->m_lists[ENTITYLIST_VEHICLES_OVERLAP], pPlayer, minX, minY, maxX,
|
||||
maxY, &lastCloseness, &carBelow);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return carBelow;
|
||||
}
|
||||
|
||||
void
|
||||
DumpAllScriptsOffsets()
|
||||
{
|
||||
// re3.cpp (no have re3.h)
|
||||
static const char* missions[] = {
|
||||
"initial: objects", "initial: hidden packages", "initial: car generators", "initial: pickups", "initial: unique stunt jumps",
|
||||
"initial: player", "initial: general info", "initial: lods", "initial: weapons", "Home Sweet Home", "Taxi-Driver Sub-Mission",
|
||||
"Paramedic Sub-Mission", "Vigilante Sub-Mission", "Karmageddon", "Firefighter Sub-Mission", "Trash Dash", "RC Triad Take-Down",
|
||||
"Thrashin' RC", "Ragin' RC", "Chasin' RC", "GO GO Faggio", "Noodleboy", "Pizzaboy", "Wong Side Of The Tracks", "Bumps and Grinds: Course 1",
|
||||
"Bumps and Grinds: Course 2", "Bumps and Grinds: Course 3", "Bumps and Grinds: Course 4", "Bumps and Grinds: Course 5", "Bumps and Grinds: Course 6",
|
||||
"Bumps and Grinds: Course 7", "Bumps and Grinds: Course 8", "Bumps and Grinds: Course 9", "Bumps and Grinds: Course 10", "Car Salesman", "Bike Salesman",
|
||||
"RACE: Low-Rider Rumble", "RACE: Deimos Dash", "RACE: Wi-Cheetah Run", "RACE: Red Light Racing", "RACE: Torrington TT", "RACE: Gangsta GP",
|
||||
"Scooter Shooter", "AWOL Angel", "9mm Mayhem", "Scrapyard Challenge", "See the Sight Before your Flight", "SlashTV", "Slacker (Vincenzo)",
|
||||
"Dealing Revenge (Vincenzo)", "Snuff (Vincenzo)", "Smash and Grab (Vincenzo)", "Hot Wheels (Vincenzo)", "The Portland Chainsaw Masquerade (Vincenzo)",
|
||||
"The Offer (Salvatore)", "Ho Selecta! (Salvatore)", "Frighteners (Salvatore)", "Rollercoaster Ride (Salvatore)", "Contra-Banned (Salvatore)",
|
||||
"Sindacco Sabotage (Salvatore)", "The Trouble with Triads (Salvatore)", "Driving Mr Leone (Salvatore)", "conversation (JD)", "Bone Voyeur! (JD)",
|
||||
"Don in 60 Seconds (JD)", "A Volatile Situation (JD)", "Blow up 'Dolls' (JD)", "Salvatore's Salvation (JD)", "The Guns of Leone (JD)",
|
||||
"Calm before the Storm (JD)", "The Made Man (JD)", "Snappy Dresser (Ma Cipriani)", "Big Rumble in Little China (Ma Cipriani)", "Grease Sucho (Ma Cipriani)",
|
||||
"Dead Meat (Ma Cipriani)", "No Son of Mine (Ma Cipriani)", "Shop 'til you Strop (Maria)", "Taken for a Ride (Maria)", "Booby Prize (Maria)",
|
||||
"Biker Heat (Maria)", "Overdose of Trouble (Maria)", "Making Toni (Salvatore)", "A Walk In The Park (Salvatore)", "Caught In The Act (Salvatore)",
|
||||
"Search And Rescue (Salvatore)", "Taking The Peace (Salvatore)", "Shoot The Messenger (Salvatore)", "Sayonara Sindaccos (Leon McAffrey)",
|
||||
"The Whole 9 Yardies (Leon McAffrey)", "Crazy '69' (Leon McAffrey)", "Night Of The Livid Dreads (Leon McAffrey)", "Munitions Dump (Leon McAffrey)",
|
||||
"The Morgue Party Candidate (Donald Love)", "Steering The Vote (Donald Love)", "Cam-Pain (Donald Love)", "Friggin' The Riggin' (Donald Love)",
|
||||
"Love & Bullets (Donald Love)", "Counterfeit Count (Donald Love)", "Love On The Rocks (Donald Love)", "L.C. Confidential (Church Confessional)",
|
||||
"The Passion Of The Heist (Church Confessional)", "Karmageddon (Church Confessional)", "False Idols (Church Confessional)", "Rough Justice (Salvatore)",
|
||||
"Dead Reckoning (Salvatore)", "Shogun Showdown (Salvatore)", "The Shoreside Redemption (Salvatore)", "The Sicilian Gambit (Salvatore)",
|
||||
"Panlantic Land Grab (Donald Love)", "Stop the Press (Donald Love)", "Morgue Party Resurrection (Donald Love)", "No Money, Mo' Problems (Donald Love)",
|
||||
"Bringing the House Down (Donald Love)", "Love on the Run (Donald Love)", "More Deadly than the Male (Toshiko Kasen)", "Cash Clash (Toshiko Kasen)",
|
||||
"A Date with Death (Toshiko Kasen)", "Cash in Kazuki's Chips (Toshiko Kasen)"
|
||||
};
|
||||
|
||||
CPlayerPed *pPlayer = FindPlayerPed();
|
||||
if(!pPlayer || FrontEndMenuManager.m_bGameNotLoaded) { return; } // if not loaded, scm offsets not inited, only in game
|
||||
//void CTheScripts::ReadMultiScriptFileOffsetsFromScript() Script5.cpp
|
||||
int NumberOfMissionScripts = CTheScripts::NumberOfMissionScripts;
|
||||
for(int i = 0; i < NumberOfMissionScripts; i++)
|
||||
{ // todo refw auto labels?
|
||||
std::cout << i << ": " << "0x" << std::hex << CTheScripts::MultiScriptArray[i] << std::dec << " " << missions[i] << "\n";
|
||||
}
|
||||
}
|
115
src/utils/Utils.h
Normal file
115
src/utils/Utils.h
Normal file
|
@ -0,0 +1,115 @@
|
|||
#pragma once
|
||||
#include "../core/common.h"
|
||||
|
||||
class CEntity;
|
||||
class CPed;
|
||||
class CVehicle;
|
||||
class CPlayerPed;
|
||||
class CCivilianPed;
|
||||
class CWeaponInfo;
|
||||
|
||||
//struct RpAtomic;
|
||||
|
||||
#include "Windows.h"
|
||||
#include <iostream>
|
||||
|
||||
//HANDLE InitConsole();
|
||||
//void LeaveConsole(HANDLE hConsole);
|
||||
|
||||
|
||||
|
||||
|
||||
void Mbox(const char* msg, const char* title);
|
||||
//void MboxSTD(const std::string& msg, const std::string& title = "title")
|
||||
void MboxSTD(std::string msg, std::string title = "");
|
||||
void EXIT_F();
|
||||
void EXIT_S();
|
||||
void RaiseError(const char* fmt, ...);
|
||||
|
||||
|
||||
|
||||
void DumpTexturesNames(RpAtomic* pRpAtomic, CEntity* pEntity = nullptr, bool dump_error = true);
|
||||
|
||||
|
||||
|
||||
int GetModelIndex(CEntity* pEntity);
|
||||
|
||||
std::string GetModelName(CEntity* pEntity);
|
||||
|
||||
std::string GetModelTxdSlotName(CEntity* pEntity);
|
||||
|
||||
// crash if entity is ped
|
||||
void DumpEntityData(CEntity* pEntity, bool clear_console = true);
|
||||
|
||||
CWeaponInfo* GetPlayerCurrentWeaponInfo();
|
||||
|
||||
int32_t GetPlayerCurrentWeaponType();
|
||||
|
||||
|
||||
//-----
|
||||
bool IsWeaponPistol();
|
||||
bool IsWeaponUziPlayer();
|
||||
bool IsWeaponAK47Player();
|
||||
bool IsWeaponM16Player();
|
||||
bool IsUnArmedPlayer();
|
||||
//-----
|
||||
|
||||
RpClump* GetPlayerClump();
|
||||
bool IsPlayerDriveVehicle();
|
||||
|
||||
// if(!DKSleep(deltaTime.count(), gfMemingTimer, gfTimerBuffer)) { return; } // çàäåðæêà ïðîêðóòà
|
||||
bool DKSleep(float deltaTime, float wait_time, float& sleepBuffer);
|
||||
|
||||
bool
|
||||
IsWindowActive(HWND hwnd);
|
||||
|
||||
bool
|
||||
IsWindowMinimized(HWND hwnd);
|
||||
|
||||
// example in cpp
|
||||
//std::wstring
|
||||
//Utf8ToWide(const std::string &utf8Str);
|
||||
|
||||
//inline
|
||||
int
|
||||
GetFrontendAudioPercentVolume(bool bSFX, bool crt_vol = true);
|
||||
|
||||
void
|
||||
UAsciiToUnicode(const char *src, wchar *dst); // font.cpp
|
||||
|
||||
void
|
||||
UUnicodeToAscii(wchar *src, char *dst);
|
||||
|
||||
|
||||
bool
|
||||
IsPlayerAsPassangerNow();
|
||||
|
||||
bool
|
||||
CheckWastedBustedPlayer(); // return true if wasted/busted
|
||||
|
||||
bool
|
||||
IsPlayerPlaying();
|
||||
|
||||
CVector
|
||||
Transform3DPoint2NearPathNode(CVector target);
|
||||
|
||||
int
|
||||
GetRandomNumInclude(int start, int end);
|
||||
|
||||
int
|
||||
GetRandomNumUnInclude(int start, int end);
|
||||
|
||||
bool
|
||||
IsWithinRadius(const CVector &point1, const CVector &point2, float radius);
|
||||
|
||||
void
|
||||
Message(const char *str, bool play_beep = true);
|
||||
|
||||
CVehicle *
|
||||
GetRandomPoolVehicle(bool nodriver = false, bool all = false);
|
||||
|
||||
CVehicle *
|
||||
GetVehicleNearPlayer();
|
||||
|
||||
void
|
||||
DumpAllScriptsOffsets();
|
|
@ -4893,8 +4893,10 @@ CAutomobile::BlowUpCar(CEntity *culprit)
|
|||
{
|
||||
RpAtomic *atomic;
|
||||
|
||||
if(!bCanBeDamaged)
|
||||
return;
|
||||
if(!bCanBeDamaged) { return; }
|
||||
#ifdef MAZAHAKA_MISC
|
||||
//if(bExplosionProof) { return; } // mazahaka // fire
|
||||
#endif
|
||||
|
||||
if(culprit == FindPlayerPed() || culprit == FindPlayerVehicle()){
|
||||
CWorld::Players[CWorld::PlayerInFocus].m_nHavocLevel += 20;
|
||||
|
|
|
@ -109,6 +109,9 @@ CBoat::CBoat(int mi, uint8 owner) : CVehicle(owner)
|
|||
m_boom.Init(-PI/10.0f, PI/10.0f, 0, 2);
|
||||
else
|
||||
m_boom.Init(-PI/5.0f, PI/5.0f, 0, 2);
|
||||
#ifdef MAZAHAKA_MISC
|
||||
//bool m_bIsBlowProof = false;
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -840,8 +843,11 @@ CBoat::BlowUpCar(CEntity *culprit)
|
|||
RwMatrix *matrix;
|
||||
CObject *obj;
|
||||
|
||||
if(!bCanBeDamaged)
|
||||
return;
|
||||
if(!bCanBeDamaged) { return; }
|
||||
#ifdef MAZAHAKA_MISC
|
||||
//if(bExplosionProof) { return; } // mazahaka
|
||||
//if(m_bIsBlowProof) { return; } // mazahaka can explode if fire and exproof but if fire and blow proof dont!!
|
||||
#endif
|
||||
|
||||
// explosion pushes vehicle up
|
||||
m_vecMoveSpeed.z += 0.13f;
|
||||
|
|
|
@ -46,6 +46,9 @@ public:
|
|||
uint16 m_nNumWakePoints;
|
||||
CVector2D m_avec2dWakePoints[32];
|
||||
float m_afWakePointLifeTime[32];
|
||||
#ifdef MAZAHAKA_MISC
|
||||
//bool m_bIsBlowProof; // like explosion proof but if exproof and check in blow its fire but not blow and broke game logic
|
||||
#endif
|
||||
|
||||
static float MAX_WAKE_LENGTH;
|
||||
static float MIN_WAKE_INTERVAL;
|
||||
|
|
|
@ -68,6 +68,7 @@ void CCranes::InitCranes(void)
|
|||
}
|
||||
}
|
||||
// TODO(LCS)
|
||||
#ifndef MAZAHAKA_MAPZONE_VC
|
||||
for (CPtrNode* pNode = CWorld::GetBigBuildingList(LEVEL_INDUSTRIAL).first; pNode; pNode = pNode->next) {
|
||||
CEntity* pEntity = (CEntity*)pNode->item;
|
||||
if (MODELID_CRANE_1 == pEntity->GetModelIndex() ||
|
||||
|
@ -78,7 +79,18 @@ void CCranes::InitCranes(void)
|
|||
MODELID_CRANE_6 == pEntity->GetModelIndex())
|
||||
AddThisOneCrane(pEntity);
|
||||
}
|
||||
|
||||
#else
|
||||
for (CPtrNode* pNode = CWorld::GetBigBuildingList(LEVEL_MAINLAND).first; pNode; pNode = pNode->next) {
|
||||
CEntity* pEntity = (CEntity*)pNode->item;
|
||||
if (MODELID_CRANE_1 == pEntity->GetModelIndex() ||
|
||||
MODELID_CRANE_2 == pEntity->GetModelIndex() ||
|
||||
MODELID_CRANE_3 == pEntity->GetModelIndex() ||
|
||||
MODELID_CRANE_4 == pEntity->GetModelIndex() ||
|
||||
MODELID_CRANE_5 == pEntity->GetModelIndex() ||
|
||||
MODELID_CRANE_6 == pEntity->GetModelIndex())
|
||||
AddThisOneCrane(pEntity);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void CCranes::AddThisOneCrane(CEntity* pEntity)
|
||||
|
|
|
@ -21,9 +21,12 @@ CFerryInst* CFerry::mspInst;
|
|||
#define FERRY_SPEED (0.1f)
|
||||
#define FERRY_SLOWDOWN_DISTANCE (50.0f)
|
||||
#define FERRY_TIME_STOPPED_AT_STATION (10.0f)
|
||||
#define FERRY_MODEL_INDEX MI_FERRY
|
||||
//#define FERRY_MODEL_INDEX MI_BANSHEE
|
||||
|
||||
CFerry::CFerry(int32 id, uint8 owner) : CVehicle(owner)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
m_bPlayerArrivedHorn = false;
|
||||
m_nTimeAlongPath = 0;
|
||||
m_vehType = VEHICLE_TYPE_FERRY;
|
||||
|
@ -51,10 +54,12 @@ CFerry::CFerry(int32 id, uint8 owner) : CVehicle(owner)
|
|||
m_nCollision = 0;
|
||||
m_pDefaultColModel = mi->GetColModel();
|
||||
m_level = LEVEL_GENERIC;
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::Init(void* pInstancePtr)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
mspInst = (CFerryInst*)pInstancePtr;
|
||||
if (mspInst)
|
||||
return;
|
||||
|
@ -198,10 +203,12 @@ void CFerry::Init(void* pInstancePtr)
|
|||
// end
|
||||
pPath->aLineBits[j].time = pPath->TotalDurationOfTrack;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::InitFerrys(void)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
printf("init ferrys\n");
|
||||
#ifdef GTA_NETWORK
|
||||
if (gIsMultiplayerGame)
|
||||
|
@ -212,12 +219,14 @@ void CFerry::InitFerrys(void)
|
|||
for (int i = 0; i < NUM_FERRIES; i++)
|
||||
mspInst->m_apFerries[i] = nil;
|
||||
CStreaming::LoadAllRequestedModels(false);
|
||||
CStreaming::RequestModel(MI_FERRY, 0);
|
||||
CStreaming::RequestModel(FERRY_MODEL_INDEX, 0);
|
||||
CStreaming::LoadAllRequestedModels(false);
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::SwitchFerryCollision(int type)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
for (int i = 0; i < NUM_FERRIES; i++) {
|
||||
CFerry* pFerry = GetFerry(i);
|
||||
if (pFerry && pFerry->m_nCollision != type) {
|
||||
|
@ -229,10 +238,12 @@ void CFerry::SwitchFerryCollision(int type)
|
|||
mi->SetColModel(pFerry->m_pDefaultColModel, true);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::UpdateFerrys(void)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
int i, j;
|
||||
float t, deltaT;
|
||||
if (mspInst->m_bFerriesDisabled)
|
||||
|
@ -301,18 +312,22 @@ void CFerry::UpdateFerrys(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::SetModelIndex(uint32 mi)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
CVehicle::SetModelIndex(mi);
|
||||
for (int i = 0; i < NUM_FERRY_NODES; i++)
|
||||
m_aFerryNodes[i] = nil;
|
||||
CClumpModelInfo::FillFrameArray(GetClump(), m_aFerryNodes);
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::PreRender(void)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
CVehicleModelInfo* mi = GetModelInfo();
|
||||
if (CGeneral::GetRandomTrueFalse())
|
||||
CParticle::AddParticle(PARTICLE_FERRY_CHIM_SMOKE, GetMatrix() * mi->m_positions[FERRY_POS_CHIM_LEFT], CVector(0.0f, 0.0f, 0.2f));
|
||||
|
@ -344,16 +359,20 @@ void CFerry::PreRender(void)
|
|||
CVector vRearLightPosition2 = vRearLightPosition - 2 * mi->m_positions[FERRY_POS_LIGHT_REAR].x * GetRight();
|
||||
CCoronas::RegisterCorona((uint32)(uintptr)this + 28, 255, 0, 0, 255, vRearLightPosition2, 1.0f, 80.0f, CCoronas::TYPE_NORMAL, CCoronas::FLARE_NONE, CCoronas::REFLECTION_ON, CCoronas::LOSCHECK_OFF, CCoronas::STREAK_ON, 0.0f);
|
||||
CCoronas::RegisterCorona((uint32)(uintptr)this + 29, 255, 0, 0, 255, vRearLightPosition, 1.0f, 80.0f, CCoronas::TYPE_NORMAL, CCoronas::FLARE_NONE, CCoronas::REFLECTION_ON, CCoronas::LOSCHECK_OFF, CCoronas::STREAK_ON, 0.0f);
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::Render(void)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
m_bAlreadyRendered = true;
|
||||
CEntity::Render();
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::RenderAllRemaning(void)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
#ifdef GTA_NETWORK
|
||||
if (gIsMultiplayerGame)
|
||||
return;
|
||||
|
@ -366,19 +385,23 @@ void CFerry::RenderAllRemaning(void)
|
|||
pFerry->m_bAlreadyRendered = false;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::FerryHitStuff(CPtrList& lst)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
for (CPtrNode* pNode = lst.first; pNode != nil; pNode = pNode->next) {
|
||||
CPhysical* pEntity = (CPhysical*)pNode->item;
|
||||
if (pEntity != this && Abs(GetPosition().x - pEntity->GetPosition().z) < 1.5f)
|
||||
pEntity->bHitByTrain = true;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::ProcessControl(void)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
if (gbModelViewer)
|
||||
return;
|
||||
PruneWakeTrail();
|
||||
|
@ -564,15 +587,15 @@ void CFerry::ProcessControl(void)
|
|||
if (m_rwObject)
|
||||
DeleteRwObject();
|
||||
}
|
||||
else if (CStreaming::HasModelLoaded(MI_FERRY)) {
|
||||
else if (CStreaming::HasModelLoaded(FERRY_MODEL_INDEX)) {
|
||||
if (m_rwObject == nil) {
|
||||
m_modelIndex = -1;
|
||||
SetModelIndex(MI_FERRY);
|
||||
SetModelIndex(FERRY_MODEL_INDEX);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (FindPlayerCoors().z * GetPosition().z >= 0.0f)
|
||||
CStreaming::RequestModel(MI_FERRY, STREAMFLAGS_DEPENDENCY);
|
||||
CStreaming::RequestModel(FERRY_MODEL_INDEX, STREAMFLAGS_DEPENDENCY);
|
||||
}
|
||||
|
||||
// Hit stuff
|
||||
|
@ -610,10 +633,12 @@ void CFerry::ProcessControl(void)
|
|||
FerryHitStuff(s->m_lists[ENTITYLIST_PEDS_OVERLAP]);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::OpenFerryDoor(float ratio)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
if (!m_rwObject)
|
||||
return;
|
||||
|
||||
|
@ -640,10 +665,12 @@ void CFerry::OpenFerryDoor(float ratio)
|
|||
|
||||
doorL.UpdateRW();
|
||||
doorR.UpdateRW();
|
||||
#endif
|
||||
}
|
||||
|
||||
CVector CFerry::GetBoardingSpace(CFerry::eSpaceUse use, CFerry::eSpaceStyle style, uint8 position)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
CVehicleModelInfo* pModelInfo = GetModelInfo();
|
||||
CVector space;
|
||||
if (m_nFerryId & 1) {
|
||||
|
@ -669,10 +696,14 @@ CVector CFerry::GetBoardingSpace(CFerry::eSpaceUse use, CFerry::eSpaceStyle styl
|
|||
break;
|
||||
}
|
||||
return space;
|
||||
#else
|
||||
return CVector();
|
||||
#endif
|
||||
}
|
||||
|
||||
CFerry* CFerry::GetClosestFerry(float x, float y)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
int closest = -1;
|
||||
float mindist = 9999.9f;
|
||||
for (int i = 0; i < NUM_FERRIES; i++) {
|
||||
|
@ -688,15 +719,23 @@ CFerry* CFerry::GetClosestFerry(float x, float y)
|
|||
if (closest == -1)
|
||||
return nil;
|
||||
return GetFerry(closest);
|
||||
#else
|
||||
return nil;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool CFerry::IsDocked(void)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
return m_bFerryDocked;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::OpenDoor(void)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
printf("opening the ferry door\n");
|
||||
m_nDoorState = FERRY_DOOR_OPENING;
|
||||
m_nDoorTimer = CTimer::GetTimeInMilliseconds() + 10000;
|
||||
|
@ -708,42 +747,58 @@ void CFerry::OpenDoor(void)
|
|||
if (fDistToCar4 < fDistToCar1)
|
||||
m_bUseFrontDoor = false;
|
||||
AudioManager.DirectlyEnqueueSample(SFX_GATE_START_CLU, SFX_BANK_0, 0, 1, 22050, 127, 20);
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::CloseDoor(void)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
printf("closing the ferry door\n");
|
||||
m_nDoorState = FERRY_DOOR_CLOSING;
|
||||
m_nDoorTimer = CTimer::GetTimeInMilliseconds() + 10000;
|
||||
AudioManager.DirectlyEnqueueSample(SFX_GATE_START_CLU, SFX_BANK_0, 0, 1, 22050, 127, 20); // shouldn't this be SFX_GATE_STOP_CLU?
|
||||
#endif
|
||||
}
|
||||
|
||||
bool CFerry::IsDoorOpen(void)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
return m_nDoorState == FERRY_DOOR_OPEN;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool CFerry::IsDoorClosed(void)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
return m_nDoorState == FERRY_DOOR_CLOSED;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::CompleteDorrMovement(void)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
m_nDoorTimer = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::DissableFerryPath(int)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::EnableFerryPath(int path)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
CStreaming::LoadAllRequestedModels(false);
|
||||
CStreaming::RequestModel(MI_FERRY, 0);
|
||||
CStreaming::RequestModel(FERRY_MODEL_INDEX, 0);
|
||||
CStreaming::LoadAllRequestedModels(false);
|
||||
for (int i = path * 2; i < path * 2 + 2; i++) {
|
||||
CFerry* pFerry = new CFerry(MI_FERRY, PERMANENT_VEHICLE);
|
||||
CFerry *pFerry = new CFerry(FERRY_MODEL_INDEX, PERMANENT_VEHICLE);
|
||||
bool bDirect = i & 1;
|
||||
mspInst->m_apFerries[i] = pFerry;
|
||||
pFerry->SetPosition(0.0f, 0.0f, 0.0f);
|
||||
|
@ -754,15 +809,19 @@ void CFerry::EnableFerryPath(int path)
|
|||
pFerry->m_nCurTrackNode = 0;
|
||||
CWorld::Add(pFerry);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::SkipFerryToNextDock(void)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
m_nSkipFerryStatus = 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::PruneWakeTrail(void)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
int16 num_remaining = 0;
|
||||
for (int i = 0; i < NUM_WAKE_POINTS; i++) {
|
||||
if (mspInst->m_afWakePointTimer[m_nFerryId][i] <= 0.0f)
|
||||
|
@ -775,10 +834,12 @@ void CFerry::PruneWakeTrail(void)
|
|||
num_remaining++;
|
||||
}
|
||||
mspInst->m_anNumWakePoints[m_nFerryId] = num_remaining;
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::AddWakePoint(CVector point)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
if (mspInst->m_afWakePointTimer[m_nFerryId][0] > 0.0f) {
|
||||
int nNewWakePoints = Min(NUM_WAKE_POINTS - 1, mspInst->m_anNumWakePoints[m_nFerryId]);
|
||||
for (int i = 0; i < nNewWakePoints; i++) {
|
||||
|
@ -789,10 +850,12 @@ void CFerry::AddWakePoint(CVector point)
|
|||
mspInst->m_avWakePoints[m_nFerryId][0] = point;
|
||||
mspInst->m_afWakePointTimer[m_nFerryId][0] = 900.0f; // TODO: define
|
||||
mspInst->m_anNumWakePoints[m_nFerryId] += 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::PlayArrivedHorn(void)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
if (m_bPlayerArrivedHorn)
|
||||
return;
|
||||
m_bPlayerArrivedHorn = true;
|
||||
|
@ -801,23 +864,31 @@ void CFerry::PlayArrivedHorn(void)
|
|||
uint8 volume = (200.0f - fDistToCamera) / 200.0f * 127;
|
||||
AudioManager.DirectlyEnqueueSample(SFX_CAR_HORN_TRUCK, SFX_BANK_0, 0, 1, 18000, volume, 50);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
CVector CFerry::GetNearestDoor(CVector)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
return CVector(0.0f, 0.0f, 1.0f);
|
||||
#else
|
||||
return CVector();
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::SetupForMultiplayer(void)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
for (int i = 0; i < NUM_FERRIES; i++)
|
||||
mspInst->m_apFerries[i] = nil;
|
||||
printf("setting up the ferrys for multiplayer\n");
|
||||
CStreaming::SetModelIsDeletable(MI_FERRY);
|
||||
CStreaming::SetModelIsDeletable(FERRY_MODEL_INDEX);
|
||||
#endif
|
||||
}
|
||||
|
||||
void CFerry::Write(base::cRelocatableChunkWriter& writer)
|
||||
{
|
||||
#ifdef GTA_FERRY
|
||||
writer.AllocateRaw(mspInst, sizeof(*mspInst), 4);
|
||||
if (!mspInst)
|
||||
return;
|
||||
|
@ -829,5 +900,6 @@ void CFerry::Write(base::cRelocatableChunkWriter& writer)
|
|||
writer.AllocateRaw(mspInst->pPathData[i]->aLineBits, (NUM_FERRY_STATIONS * 4 + 2) * sizeof(CFerryInterpolationLine), 4);
|
||||
writer.AddPatch(&mspInst->pPathData[i]->aTrackNodes);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -693,6 +693,7 @@ CPlane::RenderAllRemaning(void)
|
|||
void
|
||||
CPlane::InitPlanes(void)
|
||||
{
|
||||
#ifdef FLIGHT_PATH
|
||||
int i;
|
||||
|
||||
CesnaMissionStatus = CESNA_STATUS_NONE;
|
||||
|
@ -802,6 +803,7 @@ CPlane::InitPlanes(void)
|
|||
plane->m_nCurPathNode = 0;
|
||||
CWorld::Add(plane);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue