mirror of
https://git.rip/DMCA_FUCKER/re3.git
synced 2024-11-09 01:44:55 +00:00
Merge branch 'miami' of https://github.com/GTAmodding/re3 into miami
This commit is contained in:
commit
ba0c9e8b29
|
@ -1,54 +0,0 @@
|
||||||
version: 1.0.{build}
|
|
||||||
image: Visual Studio 2019
|
|
||||||
configuration:
|
|
||||||
- Debug
|
|
||||||
- Release
|
|
||||||
platform:
|
|
||||||
- win-x86-librw_d3d9-mss
|
|
||||||
- win-x86-librw_gl3_glfw-mss
|
|
||||||
environment:
|
|
||||||
APPVEYOR_SAVE_CACHE_ON_ERROR: true
|
|
||||||
GLEW_VER: "2.1.0"
|
|
||||||
GLFW_VER: "3.3.2"
|
|
||||||
GLEW_BASE: glew-%GLEW_VER%
|
|
||||||
GLFW_BASE: glfw-%GLFW_VER%.bin.WIN32
|
|
||||||
GLEW_FILE: "%GLEW_BASE%-win32.zip"
|
|
||||||
GLFW_FILE: "%GLFW_BASE%.zip"
|
|
||||||
GLEW_URL: https://github.com/nigels-com/glew/releases/download/%GLEW_BASE%/%GLEW_FILE%
|
|
||||||
GLFW_URL: https://github.com/glfw/glfw/releases/download/%GLFW_VER%/%GLFW_FILE%
|
|
||||||
install:
|
|
||||||
- IF [%PLATFORM%] == [win-x86-librw_gl3_glfw-mss] IF NOT EXIST %GLEW_FILE% appveyor DownloadFile %GLEW_URL% -FileName "%APPVEYOR_BUILD_FOLDER%/%GLEW_FILE%"
|
|
||||||
- IF [%PLATFORM%] == [win-x86-librw_gl3_glfw-mss] 7z x "%APPVEYOR_BUILD_FOLDER%/%GLEW_FILE%"
|
|
||||||
- IF [%PLATFORM%] == [win-x86-librw_gl3_glfw-mss] IF NOT EXIST %GLFW_FILE% appveyor DownloadFile %GLFW_URL% -FileName "%APPVEYOR_BUILD_FOLDER%/%GLFW_FILE%"
|
|
||||||
- IF [%PLATFORM%] == [win-x86-librw_gl3_glfw-mss] 7z x "%APPVEYOR_BUILD_FOLDER%/%GLFW_FILE%"
|
|
||||||
- cmd: >-
|
|
||||||
git submodule update --init --recursive
|
|
||||||
|
|
||||||
premake5 vs2019 --with-librw --glewdir=%APPVEYOR_BUILD_FOLDER%/%GLEW_BASE% --glfwdir32=%APPVEYOR_BUILD_FOLDER%/%GLFW_BASE%
|
|
||||||
|
|
||||||
build:
|
|
||||||
project: build/reVC.sln
|
|
||||||
verbosity: minimal
|
|
||||||
after_build:
|
|
||||||
- 7z a "reVC_%configuration%_%platform%_%APPVEYOR_BUILD_VERSION%.zip" bin/%PLATFORM%/%CONFIGURATION%/reVC.exe bin/%PLATFORM%/%CONFIGURATION%/reVC.pdb
|
|
||||||
artifacts:
|
|
||||||
- path: "reVC_%configuration%_%platform%_%APPVEYOR_BUILD_VERSION%.zip"
|
|
||||||
name: reVC
|
|
||||||
deploy:
|
|
||||||
- provider: BinTray
|
|
||||||
username: shfil119
|
|
||||||
api_key:
|
|
||||||
secure: xWnYDfNWM87iPoBFbz6L1XAduxijJRWSpQLhMDOjznmzbMCsORtdx2tmWmFLTwf6
|
|
||||||
subject: gtamodding
|
|
||||||
repo: revc
|
|
||||||
package: "%configuration%_%platform%"
|
|
||||||
version: "%APPVEYOR_BUILD_VERSION%"
|
|
||||||
artifact: reVC
|
|
||||||
publish: true
|
|
||||||
on:
|
|
||||||
branch: miami
|
|
||||||
APPVEYOR_REPO_TAG: true
|
|
||||||
|
|
||||||
cache:
|
|
||||||
- "%GLEW_FILE%"
|
|
||||||
- "%GLFW_FILE%"
|
|
28
.clang-format
Normal file
28
.clang-format
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
---
|
||||||
|
AllowShortBlocksOnASingleLine: 'true'
|
||||||
|
AllowShortCaseLabelsOnASingleLine: 'true'
|
||||||
|
AllowShortIfStatementsOnASingleLine: 'true'
|
||||||
|
AllowShortLoopsOnASingleLine: 'true'
|
||||||
|
AlwaysBreakAfterReturnType: TopLevel
|
||||||
|
AccessModifierOffset: -8
|
||||||
|
BreakBeforeBraces: Linux
|
||||||
|
ColumnLimit: 160
|
||||||
|
IndentCaseLabels: 'false'
|
||||||
|
IndentWidth: '8'
|
||||||
|
Language: Cpp
|
||||||
|
PointerAlignment: Right
|
||||||
|
SpaceAfterCStyleCast: 'false'
|
||||||
|
SpaceBeforeAssignmentOperators: 'true'
|
||||||
|
SpaceBeforeCtorInitializerColon: 'true'
|
||||||
|
SpaceBeforeInheritanceColon: 'true'
|
||||||
|
SpaceBeforeParens: Never
|
||||||
|
SpaceInEmptyParentheses: 'false'
|
||||||
|
SpacesInAngles: 'false'
|
||||||
|
SpacesInCStyleCastParentheses: 'false'
|
||||||
|
SpacesInContainerLiterals: 'false'
|
||||||
|
SpacesInParentheses: 'false'
|
||||||
|
SpacesInSquareBrackets: 'false'
|
||||||
|
TabWidth: '8'
|
||||||
|
UseTab: ForIndentation
|
||||||
|
|
||||||
|
...
|
|
@ -1,10 +1,6 @@
|
||||||
# reVC
|
# reVC
|
||||||
[![Build status](https://ci.appveyor.com/api/projects/status/hyiwgegks122h8jg/branch/miami?svg=true)](https://ci.appveyor.com/project/aap/re3/branch/miami)
|
[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2FGTAmodding%2Fre3%2Fbadge%3Fref%3Dmiami&style=flat)](https://actions-badge.atrox.dev/GTAmodding/re3/goto?ref=miami)
|
||||||
<a href="https://discord.gg/aKYAwCx92H"><img src="https://img.shields.io/badge/discord-join-7289DA.svg?logo=discord&longCache=true&style=flat" /></a>
|
<a href="https://discord.gg/aKYAwCx92H"><img src="https://img.shields.io/badge/discord-join-7289DA.svg?logo=discord&longCache=true&style=flat" /></a>
|
||||||
| Platform | Debug | Release |
|
|
||||||
|------------------|-------------|-------------|
|
|
||||||
| Windows Direct3D9 | [![Download](https://api.bintray.com/packages/gtamodding/revc/Debug_win-x86-librw_d3d9-mss/images/download.svg)](https://bintray.com/gtamodding/revc/Debug_win-x86-librw_d3d9-mss/_latestVersion) | [![Download](https://api.bintray.com/packages/gtamodding/revc/Release_win-x86-librw_d3d9-mss/images/download.svg)](https://bintray.com/gtamodding/revc/Release_win-x86-librw_d3d9-mss/_latestVersion) |
|
|
||||||
| Windows OpenGL3.3 | [![Download](https://api.bintray.com/packages/gtamodding/revc/Debug_win-x86-librw_gl3_glfw-mss/images/download.svg)](https://bintray.com/gtamodding/revc/Debug_win-x86-librw_gl3_glfw-mss/_latestVersion) | [![Download](https://api.bintray.com/packages/gtamodding/revc/Release_win-x86-librw_gl3_glfw-mss/images/download.svg)](https://bintray.com/gtamodding/revc/Release_win-x86-librw_gl3_glfw-mss/_latestVersion) |
|
|
||||||
|
|
||||||
## Intro
|
## Intro
|
||||||
|
|
||||||
|
|
BIN
gamefiles/TEXT/american.gxt
Normal file
BIN
gamefiles/TEXT/american.gxt
Normal file
Binary file not shown.
BIN
gamefiles/TEXT/french.gxt
Normal file
BIN
gamefiles/TEXT/french.gxt
Normal file
Binary file not shown.
BIN
gamefiles/TEXT/german.gxt
Normal file
BIN
gamefiles/TEXT/german.gxt
Normal file
Binary file not shown.
BIN
gamefiles/TEXT/italian.gxt
Normal file
BIN
gamefiles/TEXT/italian.gxt
Normal file
Binary file not shown.
BIN
gamefiles/TEXT/spanish.gxt
Normal file
BIN
gamefiles/TEXT/spanish.gxt
Normal file
Binary file not shown.
|
@ -47,8 +47,8 @@ const int channels = ARRAY_SIZE(cAudioManager::m_asActiveSamples);
|
||||||
const int policeChannel = channels + 1;
|
const int policeChannel = channels + 1;
|
||||||
const int allChannels = channels + 2;
|
const int allChannels = channels + 2;
|
||||||
|
|
||||||
enum PLAY_STATUS : uint8 { PLAY_STATUS_STOPPED = 0, PLAY_STATUS_PLAYING, PLAY_STATUS_FINISHED };
|
enum PLAY_STATUS { PLAY_STATUS_STOPPED = 0, PLAY_STATUS_PLAYING, PLAY_STATUS_FINISHED };
|
||||||
enum LOADING_STATUS : uint8 { LOADING_STATUS_NOT_LOADED = 0, LOADING_STATUS_LOADED, LOADING_STATUS_FAILED };
|
enum LOADING_STATUS { LOADING_STATUS_NOT_LOADED = 0, LOADING_STATUS_LOADED, LOADING_STATUS_FAILED };
|
||||||
|
|
||||||
void
|
void
|
||||||
cAudioManager::PreInitialiseGameSpecificSetup() const
|
cAudioManager::PreInitialiseGameSpecificSetup() const
|
||||||
|
@ -9020,7 +9020,7 @@ cAudioManager::ProcessGarages()
|
||||||
const float SOUND_INTENSITY = 80.0f;
|
const float SOUND_INTENSITY = 80.0f;
|
||||||
|
|
||||||
CEntity *entity;
|
CEntity *entity;
|
||||||
eGarageState state;
|
uint8 state;
|
||||||
uint32 sampleIndex;
|
uint32 sampleIndex;
|
||||||
uint8 j;
|
uint8 j;
|
||||||
float distSquared;
|
float distSquared;
|
||||||
|
|
|
@ -149,7 +149,7 @@ public:
|
||||||
class cVehicleParams
|
class cVehicleParams
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
eVehicleType m_VehicleType;
|
uint8 m_VehicleType;
|
||||||
bool m_bDistanceCalculated;
|
bool m_bDistanceCalculated;
|
||||||
float m_fDistance;
|
float m_fDistance;
|
||||||
CVehicle *m_pVehicle;
|
CVehicle *m_pVehicle;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
enum eSfxSample : uint32 {
|
enum eSfxSample {
|
||||||
SFX_CAR_HORN_JEEP = 0,
|
SFX_CAR_HORN_JEEP = 0,
|
||||||
SFX_CAR_HORN_BMW328,
|
SFX_CAR_HORN_BMW328,
|
||||||
SFX_CAR_HORN_BUS,
|
SFX_CAR_HORN_BUS,
|
||||||
|
|
|
@ -1274,7 +1274,7 @@ enum AudioEntityHandle {
|
||||||
AEHANDLE_ERROR_BADAUDIOTYPE = -1,
|
AEHANDLE_ERROR_BADAUDIOTYPE = -1,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum eAudioType : int32
|
enum eAudioType
|
||||||
{
|
{
|
||||||
AUDIOTYPE_PHYSICAL = 0,
|
AUDIOTYPE_PHYSICAL = 0,
|
||||||
AUDIOTYPE_EXPLOSION,
|
AUDIOTYPE_EXPLOSION,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
enum eSound : uint16
|
enum eSound
|
||||||
{
|
{
|
||||||
SOUND_CAR_DOOR_CLOSE_BONNET = 0,
|
SOUND_CAR_DOOR_CLOSE_BONNET = 0,
|
||||||
SOUND_CAR_DOOR_CLOSE_BUMPER,
|
SOUND_CAR_DOOR_CLOSE_BUMPER,
|
||||||
|
@ -208,7 +208,7 @@ enum eSound : uint16
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
enum eScriptSounds : uint16 {
|
enum eScriptSounds {
|
||||||
SCRIPT_SOUND_BANK_ALARM_LOOP = 0,
|
SCRIPT_SOUND_BANK_ALARM_LOOP = 0,
|
||||||
SCRIPT_SOUND_PART_MISSION_COMPLETE,
|
SCRIPT_SOUND_PART_MISSION_COMPLETE,
|
||||||
SCRIPT_SOUND_POLICE_CELL_DOOR_SLIDING_LOOP,
|
SCRIPT_SOUND_POLICE_CELL_DOOR_SLIDING_LOOP,
|
||||||
|
|
|
@ -109,9 +109,9 @@ void CAutoPilot::Load(uint8*& buf)
|
||||||
m_nNextDirection = ReadSaveBuf<int8>(buf);
|
m_nNextDirection = ReadSaveBuf<int8>(buf);
|
||||||
m_nCurrentLane = ReadSaveBuf<int8>(buf);
|
m_nCurrentLane = ReadSaveBuf<int8>(buf);
|
||||||
m_nNextLane = ReadSaveBuf<int8>(buf);
|
m_nNextLane = ReadSaveBuf<int8>(buf);
|
||||||
m_nDrivingStyle = (eCarDrivingStyle)ReadSaveBuf<uint8>(buf);
|
m_nDrivingStyle = ReadSaveBuf<uint8>(buf);
|
||||||
m_nCarMission = (eCarMission)ReadSaveBuf<uint8>(buf);
|
m_nCarMission = ReadSaveBuf<uint8>(buf);
|
||||||
m_nTempAction = (eCarTempAction)ReadSaveBuf<uint8>(buf);
|
m_nTempAction = ReadSaveBuf<uint8>(buf);
|
||||||
m_nTimeTempAction = ReadSaveBuf<uint32>(buf);
|
m_nTimeTempAction = ReadSaveBuf<uint32>(buf);
|
||||||
m_fMaxTrafficSpeed = ReadSaveBuf<float>(buf);
|
m_fMaxTrafficSpeed = ReadSaveBuf<float>(buf);
|
||||||
m_nCruiseSpeed = ReadSaveBuf<uint8>(buf);
|
m_nCruiseSpeed = ReadSaveBuf<uint8>(buf);
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
class CVehicle;
|
class CVehicle;
|
||||||
struct CPathNode;
|
struct CPathNode;
|
||||||
|
|
||||||
enum eCarMission : uint8
|
enum eCarMission
|
||||||
{
|
{
|
||||||
MISSION_NONE,
|
MISSION_NONE,
|
||||||
MISSION_CRUISE,
|
MISSION_CRUISE,
|
||||||
|
@ -35,7 +35,7 @@ enum eCarMission : uint8
|
||||||
MISSION_BLOCKPLAYER_FORWARDANDBACK
|
MISSION_BLOCKPLAYER_FORWARDANDBACK
|
||||||
};
|
};
|
||||||
|
|
||||||
enum eCarTempAction : uint8
|
enum eCarTempAction
|
||||||
{
|
{
|
||||||
TEMPACT_NONE,
|
TEMPACT_NONE,
|
||||||
TEMPACT_WAIT,
|
TEMPACT_WAIT,
|
||||||
|
@ -50,7 +50,7 @@ enum eCarTempAction : uint8
|
||||||
TEMPACT_SWERVERIGHT
|
TEMPACT_SWERVERIGHT
|
||||||
};
|
};
|
||||||
|
|
||||||
enum eCarDrivingStyle : uint8
|
enum eCarDrivingStyle
|
||||||
{
|
{
|
||||||
DRIVINGSTYLE_STOP_FOR_CARS,
|
DRIVINGSTYLE_STOP_FOR_CARS,
|
||||||
DRIVINGSTYLE_SLOW_DOWN_FOR_CARS,
|
DRIVINGSTYLE_SLOW_DOWN_FOR_CARS,
|
||||||
|
@ -76,9 +76,9 @@ public:
|
||||||
int8 m_nNextDirection;
|
int8 m_nNextDirection;
|
||||||
int8 m_nCurrentLane;
|
int8 m_nCurrentLane;
|
||||||
int8 m_nNextLane;
|
int8 m_nNextLane;
|
||||||
eCarDrivingStyle m_nDrivingStyle;
|
uint8 m_nDrivingStyle;
|
||||||
eCarMission m_nCarMission;
|
uint8 m_nCarMission;
|
||||||
eCarTempAction m_nTempAction;
|
uint8 m_nTempAction;
|
||||||
uint32 m_nTimeTempAction;
|
uint32 m_nTimeTempAction;
|
||||||
float m_fMaxTrafficSpeed;
|
float m_fMaxTrafficSpeed;
|
||||||
uint8 m_nCruiseSpeed;
|
uint8 m_nCruiseSpeed;
|
||||||
|
|
|
@ -634,7 +634,7 @@ void CCarAI::TellCarToBlockOtherCar(CVehicle* pVehicle, CVehicle* pTarget)
|
||||||
pVehicle->AutoPilot.m_nCruiseSpeed = Max(6, pVehicle->AutoPilot.m_nCruiseSpeed);
|
pVehicle->AutoPilot.m_nCruiseSpeed = Max(6, pVehicle->AutoPilot.m_nCruiseSpeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
eCarMission CCarAI::FindPoliceCarMissionForWantedLevel()
|
uint8 CCarAI::FindPoliceCarMissionForWantedLevel()
|
||||||
{
|
{
|
||||||
switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel){
|
switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel){
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -648,7 +648,7 @@ eCarMission CCarAI::FindPoliceCarMissionForWantedLevel()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
eCarMission CCarAI::FindPoliceBoatMissionForWantedLevel()
|
uint8 CCarAI::FindPoliceBoatMissionForWantedLevel()
|
||||||
{
|
{
|
||||||
switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel) {
|
switch (CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted->m_nWantedLevel) {
|
||||||
case 0:
|
case 0:
|
||||||
|
|
|
@ -22,8 +22,8 @@ public:
|
||||||
static void TellOccupantsToFleeCar(CVehicle*);
|
static void TellOccupantsToFleeCar(CVehicle*);
|
||||||
static void TellCarToRamOtherCar(CVehicle*, CVehicle*);
|
static void TellCarToRamOtherCar(CVehicle*, CVehicle*);
|
||||||
static void TellCarToBlockOtherCar(CVehicle*, CVehicle*);
|
static void TellCarToBlockOtherCar(CVehicle*, CVehicle*);
|
||||||
static eCarMission FindPoliceCarMissionForWantedLevel();
|
static uint8 FindPoliceCarMissionForWantedLevel();
|
||||||
static eCarMission FindPoliceBoatMissionForWantedLevel();
|
static uint8 FindPoliceBoatMissionForWantedLevel();
|
||||||
static int32 FindPoliceCarSpeedForWantedLevel(CVehicle*);
|
static int32 FindPoliceCarSpeedForWantedLevel(CVehicle*);
|
||||||
static void MellowOutChaseSpeed(CVehicle*);
|
static void MellowOutChaseSpeed(CVehicle*);
|
||||||
static void MellowOutChaseSpeedBoat(CVehicle*);
|
static void MellowOutChaseSpeedBoat(CVehicle*);
|
||||||
|
|
|
@ -442,6 +442,11 @@ CCarCtrl::GenerateOneRandomCar()
|
||||||
pVehicle->GetRight() = CVector(forwardY, -forwardX, 0.0f);
|
pVehicle->GetRight() = CVector(forwardY, -forwardX, 0.0f);
|
||||||
pVehicle->GetUp() = CVector(0.0f, 0.0f, 1.0f);
|
pVehicle->GetUp() = CVector(0.0f, 0.0f, 1.0f);
|
||||||
|
|
||||||
|
float currentPathLinkForwardX = pVehicle->AutoPilot.m_nCurrentDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo].GetDirX();
|
||||||
|
float currentPathLinkForwardY = pVehicle->AutoPilot.m_nCurrentDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo].GetDirY();
|
||||||
|
float nextPathLinkForwardX = pVehicle->AutoPilot.m_nNextDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo].GetDirX();
|
||||||
|
float nextPathLinkForwardY = pVehicle->AutoPilot.m_nNextDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo].GetDirY();
|
||||||
|
|
||||||
#ifdef FIX_BUGS
|
#ifdef FIX_BUGS
|
||||||
CCarPathLink* pCurrentLink;
|
CCarPathLink* pCurrentLink;
|
||||||
CCarPathLink* pNextLink;
|
CCarPathLink* pNextLink;
|
||||||
|
@ -452,10 +457,6 @@ CCarCtrl::GenerateOneRandomCar()
|
||||||
float directionNextLinkX;
|
float directionNextLinkX;
|
||||||
float directionNextLinkY;
|
float directionNextLinkY;
|
||||||
if (positionBetweenNodes < 0.5f) {
|
if (positionBetweenNodes < 0.5f) {
|
||||||
float currentPathLinkForwardX = pVehicle->AutoPilot.m_nCurrentDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo].GetDirX();
|
|
||||||
float currentPathLinkForwardY = pVehicle->AutoPilot.m_nCurrentDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo].GetDirY();
|
|
||||||
float nextPathLinkForwardX = pVehicle->AutoPilot.m_nNextDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo].GetDirX();
|
|
||||||
float nextPathLinkForwardY = pVehicle->AutoPilot.m_nNextDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo].GetDirY();
|
|
||||||
|
|
||||||
pCurrentLink = &ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo];
|
pCurrentLink = &ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo];
|
||||||
pNextLink = &ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo];
|
pNextLink = &ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo];
|
||||||
|
@ -486,11 +487,6 @@ CCarCtrl::GenerateOneRandomCar()
|
||||||
pVehicle->AutoPilot.m_nTimeEnteredCurve = CTimer::GetTimeInMilliseconds() -
|
pVehicle->AutoPilot.m_nTimeEnteredCurve = CTimer::GetTimeInMilliseconds() -
|
||||||
(uint32)((positionBetweenNodes - 0.5f) * pVehicle->AutoPilot.m_nTimeToSpendOnCurrentCurve);
|
(uint32)((positionBetweenNodes - 0.5f) * pVehicle->AutoPilot.m_nTimeToSpendOnCurrentCurve);
|
||||||
|
|
||||||
float currentPathLinkForwardX = pVehicle->AutoPilot.m_nCurrentDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo].GetDirX();
|
|
||||||
float currentPathLinkForwardY = pVehicle->AutoPilot.m_nCurrentDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo].GetDirY();
|
|
||||||
float nextPathLinkForwardX = pVehicle->AutoPilot.m_nNextDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo].GetDirX();
|
|
||||||
float nextPathLinkForwardY = pVehicle->AutoPilot.m_nNextDirection * ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo].GetDirY();
|
|
||||||
|
|
||||||
pCurrentLink = &ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo];
|
pCurrentLink = &ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nCurrentPathNodeInfo];
|
||||||
pNextLink = &ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo];
|
pNextLink = &ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo];
|
||||||
positionOnCurrentLinkIncludingLane = CVector(
|
positionOnCurrentLinkIncludingLane = CVector(
|
||||||
|
@ -1907,7 +1903,6 @@ void CCarCtrl::PickNextNodeRandomly(CVehicle* pVehicle)
|
||||||
}
|
}
|
||||||
if (pVehicle->AutoPilot.m_bStayInFastLane)
|
if (pVehicle->AutoPilot.m_bStayInFastLane)
|
||||||
pVehicle->AutoPilot.m_nNextLane = 0;
|
pVehicle->AutoPilot.m_nNextLane = 0;
|
||||||
#ifdef FIX_BUGS
|
|
||||||
CVector positionOnCurrentLinkIncludingLane(
|
CVector positionOnCurrentLinkIncludingLane(
|
||||||
pCurLink->GetX() + ((pVehicle->AutoPilot.m_nCurrentLane + pCurLink->OneWayLaneOffset()) * LANE_WIDTH)
|
pCurLink->GetX() + ((pVehicle->AutoPilot.m_nCurrentLane + pCurLink->OneWayLaneOffset()) * LANE_WIDTH)
|
||||||
#ifdef FIX_BUGS
|
#ifdef FIX_BUGS
|
||||||
|
@ -1922,16 +1917,6 @@ void CCarCtrl::PickNextNodeRandomly(CVehicle* pVehicle)
|
||||||
#endif
|
#endif
|
||||||
,pNextLink->GetY() - ((pVehicle->AutoPilot.m_nNextLane + pNextLink->OneWayLaneOffset()) * LANE_WIDTH) * nextPathLinkForwardX,
|
,pNextLink->GetY() - ((pVehicle->AutoPilot.m_nNextLane + pNextLink->OneWayLaneOffset()) * LANE_WIDTH) * nextPathLinkForwardX,
|
||||||
0.0f);
|
0.0f);
|
||||||
#else
|
|
||||||
CVector positionOnCurrentLinkIncludingLane(
|
|
||||||
pCurLink->GetX() + ((pVehicle->AutoPilot.m_nCurrentLane + pCurLink->OneWayLaneOffset()) * LANE_WIDTH),
|
|
||||||
pCurLink->GetY() - ((pVehicle->AutoPilot.m_nCurrentLane + pCurLink->OneWayLaneOffset()) * LANE_WIDTH) * currentPathLinkForwardX,
|
|
||||||
0.0f);
|
|
||||||
CVector positionOnNextLinkIncludingLane(
|
|
||||||
pNextLink->GetX() + ((pVehicle->AutoPilot.m_nNextLane + pNextLink->OneWayLaneOffset()) * LANE_WIDTH) * nextPathLinkForwardY,
|
|
||||||
pNextLink->GetY() - ((pVehicle->AutoPilot.m_nNextLane + pNextLink->OneWayLaneOffset()) * LANE_WIDTH) * nextPathLinkForwardX,
|
|
||||||
0.0f);
|
|
||||||
#endif
|
|
||||||
float directionCurrentLinkX = pCurLink->GetDirX() * pVehicle->AutoPilot.m_nCurrentDirection;
|
float directionCurrentLinkX = pCurLink->GetDirX() * pVehicle->AutoPilot.m_nCurrentDirection;
|
||||||
float directionCurrentLinkY = pCurLink->GetDirY() * pVehicle->AutoPilot.m_nCurrentDirection;
|
float directionCurrentLinkY = pCurLink->GetDirY() * pVehicle->AutoPilot.m_nCurrentDirection;
|
||||||
float directionNextLinkX = pNextLink->GetDirX() * pVehicle->AutoPilot.m_nNextDirection;
|
float directionNextLinkX = pNextLink->GetDirX() * pVehicle->AutoPilot.m_nNextDirection;
|
||||||
|
|
|
@ -4,9 +4,7 @@
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#include "Bike.h"
|
#include "Bike.h"
|
||||||
#ifdef FIX_BUGS
|
|
||||||
#include "Boat.h"
|
#include "Boat.h"
|
||||||
#endif
|
|
||||||
#include "DMAudio.h"
|
#include "DMAudio.h"
|
||||||
#include "General.h"
|
#include "General.h"
|
||||||
#include "Font.h"
|
#include "Font.h"
|
||||||
|
@ -192,7 +190,7 @@ void CGarages::Update(void)
|
||||||
aGarages[GarageToBeTidied].TidyUpGarage();
|
aGarages[GarageToBeTidied].TidyUpGarage();
|
||||||
}
|
}
|
||||||
|
|
||||||
int16 CGarages::AddOne(float X1, float Y1, float Z1, float X2, float Y2, float X3, float Y3, float Z2, eGarageType type, int32 targetId)
|
int16 CGarages::AddOne(float X1, float Y1, float Z1, float X2, float Y2, float X3, float Y3, float Z2, uint8 type, int32 targetId)
|
||||||
{
|
{
|
||||||
if (NumGarages >= NUM_GARAGES) {
|
if (NumGarages >= NUM_GARAGES) {
|
||||||
assert(0);
|
assert(0);
|
||||||
|
@ -293,7 +291,7 @@ int16 CGarages::AddOne(float X1, float Y1, float Z1, float X2, float Y2, float X
|
||||||
return NumGarages++;
|
return NumGarages++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CGarages::ChangeGarageType(int16 garage, eGarageType type, int32 mi)
|
void CGarages::ChangeGarageType(int16 garage, uint8 type, int32 mi)
|
||||||
{
|
{
|
||||||
CGarage* pGarage = &aGarages[garage];
|
CGarage* pGarage = &aGarages[garage];
|
||||||
pGarage->m_eGarageType = type;
|
pGarage->m_eGarageType = type;
|
||||||
|
@ -1468,7 +1466,7 @@ static bool DoINeedToRefreshPointer(CEntity * pDoor, bool bIsDummy, uint8 nIndex
|
||||||
bool bNeedToFindDoorEntities = false;
|
bool bNeedToFindDoorEntities = false;
|
||||||
if (pDoor) {
|
if (pDoor) {
|
||||||
if (bIsDummy) {
|
if (bIsDummy) {
|
||||||
if (CPools::GetDummyPool()->IsFreeSlot(CPools::GetDummyPool()->GetJustIndex((CDummy*)pDoor)))
|
if (CPools::GetDummyPool()->IsFreeSlot(CPools::GetDummyPool()->GetJustIndex_NoFreeAssert((CDummy*)pDoor)))
|
||||||
return true;
|
return true;
|
||||||
if (nIndex != (CPools::GetDummyPool()->GetIndex((CDummy*)pDoor) & 0x7F))
|
if (nIndex != (CPools::GetDummyPool()->GetIndex((CDummy*)pDoor) & 0x7F))
|
||||||
bNeedToFindDoorEntities = true;
|
bNeedToFindDoorEntities = true;
|
||||||
|
@ -1476,7 +1474,7 @@ static bool DoINeedToRefreshPointer(CEntity * pDoor, bool bIsDummy, uint8 nIndex
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (CPools::GetObjectPool()->IsFreeSlot(CPools::GetObjectPool()->GetJustIndex((CObject*)pDoor)))
|
if (CPools::GetObjectPool()->IsFreeSlot(CPools::GetObjectPool()->GetJustIndex_NoFreeAssert((CObject*)pDoor)))
|
||||||
return true;
|
return true;
|
||||||
if (nIndex != (CPools::GetObjectPool()->GetIndex((CObject*)pDoor) & 0x7F))
|
if (nIndex != (CPools::GetObjectPool()->GetIndex((CObject*)pDoor) & 0x7F))
|
||||||
bNeedToFindDoorEntities = true;
|
bNeedToFindDoorEntities = true;
|
||||||
|
@ -2074,7 +2072,7 @@ void CGarages::CloseHideOutGaragesBeforeSave()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 CGarages::CountCarsInHideoutGarage(eGarageType type)
|
int32 CGarages::CountCarsInHideoutGarage(uint8 type)
|
||||||
{
|
{
|
||||||
int32 total = 0;
|
int32 total = 0;
|
||||||
for (int i = 0; i < NUM_GARAGE_STORED_CARS; i++) {
|
for (int i = 0; i < NUM_GARAGE_STORED_CARS; i++) {
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
class CVehicle;
|
class CVehicle;
|
||||||
class CCamera;
|
class CCamera;
|
||||||
|
|
||||||
enum eGarageState : int8
|
enum eGarageState
|
||||||
{
|
{
|
||||||
GS_FULLYCLOSED,
|
GS_FULLYCLOSED,
|
||||||
GS_OPENED,
|
GS_OPENED,
|
||||||
|
@ -18,7 +18,7 @@ enum eGarageState : int8
|
||||||
GS_AFTERDROPOFF,
|
GS_AFTERDROPOFF,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum eGarageType : int8
|
enum eGarageType
|
||||||
{
|
{
|
||||||
GARAGE_NONE,
|
GARAGE_NONE,
|
||||||
GARAGE_MISSION,
|
GARAGE_MISSION,
|
||||||
|
@ -93,8 +93,8 @@ VALIDATE_SIZE(CStoredCar, 0x28);
|
||||||
|
|
||||||
class CGarage
|
class CGarage
|
||||||
{
|
{
|
||||||
eGarageType m_eGarageType;
|
uint8 m_eGarageType;
|
||||||
eGarageState m_eGarageState;
|
uint8 m_eGarageState;
|
||||||
uint8 m_nMaxStoredCars;
|
uint8 m_nMaxStoredCars;
|
||||||
bool field_2; // unused
|
bool field_2; // unused
|
||||||
bool m_bClosingWithoutTargetCar;
|
bool m_bClosingWithoutTargetCar;
|
||||||
|
@ -148,8 +148,8 @@ class CGarage
|
||||||
return Abs(TheCamera.GetPosition().x - GetGarageCenterX()) > SWITCH_GARAGE_DISTANCE_CLOSE ||
|
return Abs(TheCamera.GetPosition().x - GetGarageCenterX()) > SWITCH_GARAGE_DISTANCE_CLOSE ||
|
||||||
Abs(TheCamera.GetPosition().y - GetGarageCenterY()) > SWITCH_GARAGE_DISTANCE_CLOSE;
|
Abs(TheCamera.GetPosition().y - GetGarageCenterY()) > SWITCH_GARAGE_DISTANCE_CLOSE;
|
||||||
#else
|
#else
|
||||||
return Abs(TheCamera.GetPosition().x - m_fX1) > SWITCH_GARAGE_DISTANCE_CLOSE ||
|
return Abs(TheCamera.GetPosition().x - m_fInfX) > SWITCH_GARAGE_DISTANCE_CLOSE ||
|
||||||
Abs(TheCamera.GetPosition().y - m_fY1) > SWITCH_GARAGE_DISTANCE_CLOSE;
|
Abs(TheCamera.GetPosition().y - m_fInfY) > SWITCH_GARAGE_DISTANCE_CLOSE;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
void TidyUpGarageClose();
|
void TidyUpGarageClose();
|
||||||
|
@ -227,8 +227,8 @@ public:
|
||||||
#endif
|
#endif
|
||||||
static void Update(void);
|
static void Update(void);
|
||||||
|
|
||||||
static int16 AddOne(float X1, float Y1, float Z1, float X2, float Y2, float X3, float Y3, float Z2, eGarageType type, int32 targetId);
|
static int16 AddOne(float X1, float Y1, float Z1, float X2, float Y2, float X3, float Y3, float Z2, uint8 type, int32 targetId);
|
||||||
static void ChangeGarageType(int16, eGarageType, int32);
|
static void ChangeGarageType(int16, uint8, int32);
|
||||||
static void PrintMessages(void);
|
static void PrintMessages(void);
|
||||||
static void TriggerMessage(const char* text, int16, uint16 time, int16);
|
static void TriggerMessage(const char* text, int16, uint16 time, int16);
|
||||||
static void SetTargetCarForMissonGarage(int16, CVehicle*);
|
static void SetTargetCarForMissonGarage(int16, CVehicle*);
|
||||||
|
@ -265,9 +265,9 @@ private:
|
||||||
static bool IsCarSprayable(CVehicle*);
|
static bool IsCarSprayable(CVehicle*);
|
||||||
static float FindDoorHeightForMI(int32);
|
static float FindDoorHeightForMI(int32);
|
||||||
static void CloseHideOutGaragesBeforeSave(void);
|
static void CloseHideOutGaragesBeforeSave(void);
|
||||||
static int32 CountCarsInHideoutGarage(eGarageType);
|
static int32 CountCarsInHideoutGarage(uint8);
|
||||||
static int32 GetBombTypeForGarageType(eGarageType type) { return type - GARAGE_BOMBSHOP1 + 1; }
|
static int32 GetBombTypeForGarageType(uint8 type) { return type - GARAGE_BOMBSHOP1 + 1; }
|
||||||
static int32 GetCarsCollectedIndexForGarageType(eGarageType type)
|
static int32 GetCarsCollectedIndexForGarageType(uint8 type)
|
||||||
{
|
{
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case GARAGE_COLLECTCARS_1: return 0;
|
case GARAGE_COLLECTCARS_1: return 0;
|
||||||
|
@ -278,7 +278,7 @@ private:
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static int32 FindSafeHouseIndexForGarageType(eGarageType type)
|
static int32 FindSafeHouseIndexForGarageType(uint8 type)
|
||||||
{
|
{
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case GARAGE_HIDEOUT_ONE: return 0;
|
case GARAGE_HIDEOUT_ONE: return 0;
|
||||||
|
@ -296,7 +296,7 @@ private:
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
static bool IsThisGarageTypeSafehouse(eGarageType type) { return FindSafeHouseIndexForGarageType(type) >= 0; }
|
static bool IsThisGarageTypeSafehouse(uint8 type) { return FindSafeHouseIndexForGarageType(type) >= 0; }
|
||||||
|
|
||||||
friend class cAudioManager;
|
friend class cAudioManager;
|
||||||
friend class CReplay;
|
friend class CReplay;
|
||||||
|
|
|
@ -308,7 +308,7 @@ INITSAVEBUF
|
||||||
|
|
||||||
// Convert entity pointer to building pool index while saving
|
// Convert entity pointer to building pool index while saving
|
||||||
if (phone->m_pEntity) {
|
if (phone->m_pEntity) {
|
||||||
phone->m_pEntity = (CEntity*) (CPools::GetBuildingPool()->GetJustIndex((CBuilding*)phone->m_pEntity) + 1);
|
phone->m_pEntity = (CEntity*) (CPools::GetBuildingPool()->GetJustIndex_NoFreeAssert((CBuilding*)phone->m_pEntity) + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
VALIDATESAVEBUF(*size)
|
VALIDATESAVEBUF(*size)
|
||||||
|
|
|
@ -852,7 +852,7 @@ CPickups::GenerateNewOne(CVector pos, uint32 modelIndex, uint8 type, uint32 quan
|
||||||
|
|
||||||
if (slot >= NUMPICKUPS) return -1;
|
if (slot >= NUMPICKUPS) return -1;
|
||||||
|
|
||||||
aPickUps[slot].m_eType = (ePickupType)type;
|
aPickUps[slot].m_eType = type;
|
||||||
aPickUps[slot].m_bRemoved = false;
|
aPickUps[slot].m_bRemoved = false;
|
||||||
aPickUps[slot].m_nQuantity = quantity;
|
aPickUps[slot].m_nQuantity = quantity;
|
||||||
aPickUps[slot].m_nMoneySpeed = rate;
|
aPickUps[slot].m_nMoneySpeed = rate;
|
||||||
|
@ -1458,9 +1458,9 @@ INITSAVEBUF
|
||||||
CPickup *buf_pickup = WriteSaveBuf(buf, aPickUps[i]);
|
CPickup *buf_pickup = WriteSaveBuf(buf, aPickUps[i]);
|
||||||
if (buf_pickup->m_eType != PICKUP_NONE) {
|
if (buf_pickup->m_eType != PICKUP_NONE) {
|
||||||
if (buf_pickup->m_pObject != nil)
|
if (buf_pickup->m_pObject != nil)
|
||||||
buf_pickup->m_pObject = (CObject*)(CPools::GetObjectPool()->GetJustIndex(buf_pickup->m_pObject) + 1);
|
buf_pickup->m_pObject = (CObject*)(CPools::GetObjectPool()->GetJustIndex_NoFreeAssert(buf_pickup->m_pObject) + 1);
|
||||||
if (buf_pickup->m_pExtraObject != nil)
|
if (buf_pickup->m_pExtraObject != nil)
|
||||||
buf_pickup->m_pExtraObject = (CObject*)(CPools::GetObjectPool()->GetJustIndex(buf_pickup->m_pExtraObject) + 1);
|
buf_pickup->m_pExtraObject = (CObject*)(CPools::GetObjectPool()->GetJustIndex_NoFreeAssert(buf_pickup->m_pExtraObject) + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "Weapon.h"
|
#include "Weapon.h"
|
||||||
|
|
||||||
enum ePickupType : uint8
|
enum ePickupType
|
||||||
{
|
{
|
||||||
PICKUP_NONE = 0,
|
PICKUP_NONE = 0,
|
||||||
PICKUP_IN_SHOP,
|
PICKUP_IN_SHOP,
|
||||||
|
@ -43,7 +43,7 @@ public:
|
||||||
int16 m_eModelIndex;
|
int16 m_eModelIndex;
|
||||||
uint16 m_nIndex;
|
uint16 m_nIndex;
|
||||||
char m_sTextKey[8];
|
char m_sTextKey[8];
|
||||||
ePickupType m_eType;
|
uint8 m_eType;
|
||||||
bool m_bRemoved;
|
bool m_bRemoved;
|
||||||
uint8 m_bWasAmmoCollected:1;
|
uint8 m_bWasAmmoCollected:1;
|
||||||
uint8 m_bWasControlMessageShown:1;
|
uint8 m_bWasControlMessageShown:1;
|
||||||
|
|
|
@ -57,9 +57,7 @@ public:
|
||||||
static void RestoreInfoForMatrix(CMatrix&, CCarStateEachFrame*);
|
static void RestoreInfoForMatrix(CMatrix&, CCarStateEachFrame*);
|
||||||
static void RestoreInfoForCar(CAutomobile*, CCarStateEachFrame*, bool);
|
static void RestoreInfoForCar(CAutomobile*, CCarStateEachFrame*, bool);
|
||||||
static void ProcessControlCars(void);
|
static void ProcessControlCars(void);
|
||||||
#if (defined(GTA_PS2) || defined(FIX_BUGS))
|
|
||||||
static bool ShouldThisPadBeLeftAlone(uint8 pad);
|
static bool ShouldThisPadBeLeftAlone(uint8 pad);
|
||||||
#endif
|
|
||||||
static void GiveUsACar(int32, CVector, float, CAutomobile**, uint8, uint8);
|
static void GiveUsACar(int32, CVector, float, CAutomobile**, uint8, uint8);
|
||||||
static void StartChaseScene(float);
|
static void StartChaseScene(float);
|
||||||
static void CleanUpChaseScene(void);
|
static void CleanUpChaseScene(void);
|
||||||
|
|
|
@ -17,6 +17,9 @@
|
||||||
#include "FileMgr.h"
|
#include "FileMgr.h"
|
||||||
#include "Frontend.h"
|
#include "Frontend.h"
|
||||||
#include "General.h"
|
#include "General.h"
|
||||||
|
#ifdef MISSION_REPLAY
|
||||||
|
#include "GenericGameStorage.h"
|
||||||
|
#endif
|
||||||
#include "HandlingMgr.h"
|
#include "HandlingMgr.h"
|
||||||
#include "Heli.h"
|
#include "Heli.h"
|
||||||
#include "Hud.h"
|
#include "Hud.h"
|
||||||
|
@ -93,6 +96,10 @@ uint32 CTheScripts::LastMissionPassedTime;
|
||||||
uint16 CTheScripts::NumberOfExclusiveMissionScripts;
|
uint16 CTheScripts::NumberOfExclusiveMissionScripts;
|
||||||
bool CTheScripts::bPlayerHasMetDebbieHarry;
|
bool CTheScripts::bPlayerHasMetDebbieHarry;
|
||||||
bool CTheScripts::bPlayerIsInTheStatium;
|
bool CTheScripts::bPlayerIsInTheStatium;
|
||||||
|
#if (defined GTA_PC && !defined GTAVC_JP_PATCH || defined GTA_XBOX || defined SUPPORT_XBOX_SCRIPT || defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT)
|
||||||
|
int16 CTheScripts::CardStack[CARDS_IN_DECK * MAX_DECKS];
|
||||||
|
int16 CTheScripts::CardStackPosition;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef MISSION_REPLAY
|
#ifdef MISSION_REPLAY
|
||||||
|
|
||||||
|
@ -123,6 +130,9 @@ float oldTargetX;
|
||||||
float oldTargetY;
|
float oldTargetY;
|
||||||
int missionRetryScriptIndex;
|
int missionRetryScriptIndex;
|
||||||
bool doingMissionRetry;
|
bool doingMissionRetry;
|
||||||
|
bool gbTryingPorn4Again;
|
||||||
|
int IsInAmmunation;
|
||||||
|
int MissionSkipLevel;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1568,6 +1578,39 @@ const tScriptCommandData commands[] = {
|
||||||
REGISTER_COMMAND(COMMAND_REGISTER_FIRE_LEVEL, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), false, -1, ""),
|
REGISTER_COMMAND(COMMAND_REGISTER_FIRE_LEVEL, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), false, -1, ""),
|
||||||
REGISTER_COMMAND(COMMAND_IS_AUSTRALIAN_GAME, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), true, -1, ""),
|
REGISTER_COMMAND(COMMAND_IS_AUSTRALIAN_GAME, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), true, -1, ""),
|
||||||
REGISTER_COMMAND(COMMAND_DISARM_CAR_BOMB, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), false, -1, ""),
|
REGISTER_COMMAND(COMMAND_DISARM_CAR_BOMB, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), false, -1, ""),
|
||||||
|
#if (defined GTAVC_JP_PATCH || defined SUPPORT_JAPANESE_SCRIPT)
|
||||||
|
REGISTER_COMMAND(COMMAND_IS_JAPANESE_GAME, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), true, -1, ""),
|
||||||
|
#elif (!defined GTA_PS2)
|
||||||
|
REGISTER_COMMAND(COMMAND_SET_ONSCREEN_COUNTER_FLASH_WHEN_FIRST_DISPLAYED, INPUT_ARGUMENTS(ARGTYPE_INT, ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), false, -1, ""),
|
||||||
|
#endif
|
||||||
|
#if (defined GTA_PC && !defined GTAVC_JP_PATCH || defined GTA_XBOX || defined SUPPORT_XBOX_SCRIPT || defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT)
|
||||||
|
REGISTER_COMMAND(COMMAND_SHUFFLE_CARD_DECKS, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), false, -1, ""),
|
||||||
|
REGISTER_COMMAND(COMMAND_FETCH_NEXT_CARD, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(ARGTYPE_INT, ), false, -1, ""),
|
||||||
|
REGISTER_COMMAND(COMMAND_GET_OBJECT_VELOCITY, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ), false, -1, ""),
|
||||||
|
REGISTER_COMMAND(COMMAND_IS_DEBUG_CAMERA_ON, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), true, -1, ""),
|
||||||
|
REGISTER_COMMAND(COMMAND_ADD_TO_OBJECT_ROTATION_VELOCITY, INPUT_ARGUMENTS(ARGTYPE_INT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ), OUTPUT_ARGUMENTS(), false, -1, ""),
|
||||||
|
REGISTER_COMMAND(COMMAND_SET_OBJECT_ROTATION_VELOCITY, INPUT_ARGUMENTS(ARGTYPE_INT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ), OUTPUT_ARGUMENTS(), false, -1, ""),
|
||||||
|
REGISTER_COMMAND(COMMAND_IS_OBJECT_STATIC, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), true, -1, ""),
|
||||||
|
REGISTER_COMMAND(COMMAND_GET_ANGLE_BETWEEN_2D_VECTORS, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ), OUTPUT_ARGUMENTS(ARGTYPE_FLOAT, ), false, -1, ""),
|
||||||
|
REGISTER_COMMAND(COMMAND_DO_2D_RECTANGLES_COLLIDE, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ), OUTPUT_ARGUMENTS(), true, -1, ""),
|
||||||
|
REGISTER_COMMAND(COMMAND_GET_OBJECT_ROTATION_VELOCITY, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ), false, -1, ""),
|
||||||
|
REGISTER_COMMAND(COMMAND_ADD_VELOCITY_RELATIVE_TO_OBJECT_VELOCITY, INPUT_ARGUMENTS(ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ARGTYPE_FLOAT, ), OUTPUT_ARGUMENTS(), false, -1, ""),
|
||||||
|
REGISTER_COMMAND(COMMAND_GET_OBJECT_SPEED, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(ARGTYPE_FLOAT, ), false, -1, ""),
|
||||||
|
#endif
|
||||||
|
#if (defined GTA_XBOX || defined SUPPORT_XBOX_SCRIPT)
|
||||||
|
REGISTER_COMMAND(COMMAND_MARK_CUTSCENE_START, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), false, -1, ""),
|
||||||
|
REGISTER_COMMAND(COMMAND_MARK_CUTSCENE_END, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), false, -1, ""),
|
||||||
|
REGISTER_COMMAND(COMMAND_CUTSCENE_SCROLL, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), false, -1, ""),
|
||||||
|
#elif (defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT)
|
||||||
|
REGISTER_COMMAND(COMMAND_IS_MISSION_SKIP, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(ARGTYPE_INT, ), false, -1, ""),
|
||||||
|
REGISTER_COMMAND(COMMAND_SET_IN_AMMUNATION, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), false, -1, ""),
|
||||||
|
REGISTER_COMMAND(COMMAND_DO_SAVE_GAME, INPUT_ARGUMENTS(ARGTYPE_INT, ), OUTPUT_ARGUMENTS(), false, -1, ""),
|
||||||
|
REGISTER_COMMAND(COMMAND_IS_RETRY, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(ARGTYPE_INT, ), false, -1, ""),
|
||||||
|
REGISTER_COMMAND(COMMAND_DUMMY, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), false, -1, ""),
|
||||||
|
REGISTER_COMMAND(COMMAND_MARK_CUTSCENE_START, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), false, -1, ""),
|
||||||
|
REGISTER_COMMAND(COMMAND_MARK_CUTSCENE_END, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), false, -1, ""),
|
||||||
|
REGISTER_COMMAND(COMMAND_CUTSCENE_SCROLL, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), false, -1, ""),
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
#undef REGISTER_COMMAND
|
#undef REGISTER_COMMAND
|
||||||
#undef INPUT_ARGUMENTS
|
#undef INPUT_ARGUMENTS
|
||||||
|
@ -3995,7 +4038,7 @@ int8 CRunningScript::ProcessCommands100To199(int32 command)
|
||||||
CollectParameters(&m_nIp, 2);
|
CollectParameters(&m_nIp, 2);
|
||||||
CVehicle* car = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
|
CVehicle* car = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
|
||||||
script_assert(car);
|
script_assert(car);
|
||||||
car->AutoPilot.m_nDrivingStyle = (eCarDrivingStyle)ScriptParams[1];
|
car->AutoPilot.m_nDrivingStyle = (uint8)ScriptParams[1];
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case COMMAND_SET_CAR_MISSION:
|
case COMMAND_SET_CAR_MISSION:
|
||||||
|
@ -4003,7 +4046,7 @@ int8 CRunningScript::ProcessCommands100To199(int32 command)
|
||||||
CollectParameters(&m_nIp, 2);
|
CollectParameters(&m_nIp, 2);
|
||||||
CVehicle* car = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
|
CVehicle* car = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
|
||||||
script_assert(car);
|
script_assert(car);
|
||||||
car->AutoPilot.m_nCarMission = (eCarMission)ScriptParams[1];
|
car->AutoPilot.m_nCarMission = (uint8)ScriptParams[1];
|
||||||
car->AutoPilot.m_nAntiReverseTimer = CTimer::GetTimeInMilliseconds();
|
car->AutoPilot.m_nAntiReverseTimer = CTimer::GetTimeInMilliseconds();
|
||||||
car->bEngineOn = true;
|
car->bEngineOn = true;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -4802,7 +4845,7 @@ void RetryMission(int type, int unk)
|
||||||
{
|
{
|
||||||
if (type == 0) {
|
if (type == 0) {
|
||||||
doingMissionRetry = true;
|
doingMissionRetry = true;
|
||||||
FrontEndMenuManager.m_nCurrScreen = MENUPAGE_MISSION_RETRY;
|
FrontEndMenuManager.m_nCurrScreen = 57; // MENUPAGE_MISSION_RETRY
|
||||||
FrontEndMenuManager.RequestFrontEndStartUp();
|
FrontEndMenuManager.RequestFrontEndStartUp();
|
||||||
}
|
}
|
||||||
else if (type == 2) {
|
else if (type == 2) {
|
||||||
|
|
|
@ -306,6 +306,15 @@ class CTheScripts
|
||||||
static uint16 ScriptsUpdated;
|
static uint16 ScriptsUpdated;
|
||||||
static uint32 LastMissionPassedTime;
|
static uint32 LastMissionPassedTime;
|
||||||
static uint16 NumberOfExclusiveMissionScripts;
|
static uint16 NumberOfExclusiveMissionScripts;
|
||||||
|
#if (defined GTA_PC && !defined GTAVC_JP_PATCH || defined GTA_XBOX || defined SUPPORT_XBOX_SCRIPT || defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT)
|
||||||
|
#define CARDS_IN_SUIT (13)
|
||||||
|
#define NUM_SUITS (4)
|
||||||
|
#define MAX_DECKS (6)
|
||||||
|
#define CARDS_IN_DECK (CARDS_IN_SUIT * NUM_SUITS)
|
||||||
|
#define CARDS_IN_STACK (CARDS_IN_DECK * MAX_DECKS)
|
||||||
|
static int16 CardStack[CARDS_IN_STACK];
|
||||||
|
static int16 CardStackPosition;
|
||||||
|
#endif
|
||||||
public:
|
public:
|
||||||
static bool bPlayerIsInTheStatium;
|
static bool bPlayerIsInTheStatium;
|
||||||
static uint8 RiotIntensity;
|
static uint8 RiotIntensity;
|
||||||
|
@ -547,12 +556,16 @@ private:
|
||||||
extern int scriptToLoad;
|
extern int scriptToLoad;
|
||||||
#endif
|
#endif
|
||||||
#ifdef MISSION_REPLAY
|
#ifdef MISSION_REPLAY
|
||||||
|
static_assert(false, "Mission replay is not supported");
|
||||||
extern int AllowMissionReplay;
|
extern int AllowMissionReplay;
|
||||||
extern uint32 WaitForMissionActivate;
|
extern uint32 WaitForMissionActivate;
|
||||||
extern uint32 WaitForSave;
|
extern uint32 WaitForSave;
|
||||||
extern uint32 MissionStartTime;
|
extern uint32 MissionStartTime;
|
||||||
extern int missionRetryScriptIndex;
|
extern int missionRetryScriptIndex;
|
||||||
extern bool doingMissionRetry;
|
extern bool doingMissionRetry;
|
||||||
|
extern bool gbTryingPorn4Again;
|
||||||
|
extern int IsInAmmunation;
|
||||||
|
extern int MissionSkipLevel;
|
||||||
|
|
||||||
uint32 AddExtraDeathDelay();
|
uint32 AddExtraDeathDelay();
|
||||||
void RetryMission(int, int);
|
void RetryMission(int, int);
|
||||||
|
|
|
@ -286,7 +286,7 @@ int8 CRunningScript::ProcessCommands500To599(int32 command)
|
||||||
float supX = *(float*)&ScriptParams[5];
|
float supX = *(float*)&ScriptParams[5];
|
||||||
float supY = *(float*)&ScriptParams[6];
|
float supY = *(float*)&ScriptParams[6];
|
||||||
float supZ = *(float*)&ScriptParams[7];
|
float supZ = *(float*)&ScriptParams[7];
|
||||||
ScriptParams[0] = CGarages::AddOne(infX, infY, infZ, X2, Y2, supX, supY, supZ, (eGarageType)ScriptParams[8], 0);
|
ScriptParams[0] = CGarages::AddOne(infX, infY, infZ, X2, Y2, supX, supY, supZ, ScriptParams[8], 0);
|
||||||
StoreParameters(&m_nIp, 1);
|
StoreParameters(&m_nIp, 1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -302,7 +302,7 @@ int8 CRunningScript::ProcessCommands500To599(int32 command)
|
||||||
float supX = *(float*)&ScriptParams[5];
|
float supX = *(float*)&ScriptParams[5];
|
||||||
float supY = *(float*)&ScriptParams[6];
|
float supY = *(float*)&ScriptParams[6];
|
||||||
float supZ = *(float*)&ScriptParams[7];
|
float supZ = *(float*)&ScriptParams[7];
|
||||||
ScriptParams[0] = CGarages::AddOne(infX, infY, infZ, X2, Y2, supX, supY, supZ, (eGarageType)ScriptParams[8], ScriptParams[9]);
|
ScriptParams[0] = CGarages::AddOne(infX, infY, infZ, X2, Y2, supX, supY, supZ, ScriptParams[8], ScriptParams[9]);
|
||||||
StoreParameters(&m_nIp, 1);
|
StoreParameters(&m_nIp, 1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1848,7 +1848,7 @@ int8 CRunningScript::ProcessCommands700To799(int32 command)
|
||||||
}
|
}
|
||||||
case COMMAND_CHANGE_GARAGE_TYPE:
|
case COMMAND_CHANGE_GARAGE_TYPE:
|
||||||
CollectParameters(&m_nIp, 2);
|
CollectParameters(&m_nIp, 2);
|
||||||
CGarages::ChangeGarageType(ScriptParams[0], (eGarageType)ScriptParams[1], 0);
|
CGarages::ChangeGarageType(ScriptParams[0], ScriptParams[1], 0);
|
||||||
return 0;
|
return 0;
|
||||||
/*
|
/*
|
||||||
case COMMAND_ACTIVATE_CRUSHER_CRANE:
|
case COMMAND_ACTIVATE_CRUSHER_CRANE:
|
||||||
|
|
|
@ -1513,7 +1513,7 @@ int8 CRunningScript::ProcessCommands900To999(int32 command)
|
||||||
CollectParameters(&m_nIp, 2);
|
CollectParameters(&m_nIp, 2);
|
||||||
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
|
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
|
||||||
script_assert(pVehicle);
|
script_assert(pVehicle);
|
||||||
pVehicle->SetStatus((eEntityStatus)ScriptParams[1]);
|
pVehicle->SetStatus(ScriptParams[1]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case COMMAND_IS_CHAR_MALE:
|
case COMMAND_IS_CHAR_MALE:
|
||||||
|
@ -1537,7 +1537,7 @@ int8 CRunningScript::ProcessCommands900To999(int32 command)
|
||||||
case COMMAND_CHANGE_GARAGE_TYPE_WITH_CAR_MODEL:
|
case COMMAND_CHANGE_GARAGE_TYPE_WITH_CAR_MODEL:
|
||||||
{
|
{
|
||||||
CollectParameters(&m_nIp, 3);
|
CollectParameters(&m_nIp, 3);
|
||||||
CGarages::ChangeGarageType(ScriptParams[0], (eGarageType)ScriptParams[1], ScriptParams[2]);
|
CGarages::ChangeGarageType(ScriptParams[0], ScriptParams[1], ScriptParams[2]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case COMMAND_FIND_DRUG_PLANE_COORDINATES:
|
case COMMAND_FIND_DRUG_PLANE_COORDINATES:
|
||||||
|
|
|
@ -1784,10 +1784,10 @@ INITSAVEBUF
|
||||||
handle = 0;
|
handle = 0;
|
||||||
} else if (pBuilding->GetIsATreadable()) {
|
} else if (pBuilding->GetIsATreadable()) {
|
||||||
type = 1;
|
type = 1;
|
||||||
handle = CPools::GetTreadablePool()->GetJustIndex((CTreadable*)pBuilding) + 1;
|
handle = CPools::GetTreadablePool()->GetJustIndex_NoFreeAssert((CTreadable*)pBuilding) + 1;
|
||||||
} else {
|
} else {
|
||||||
type = 2;
|
type = 2;
|
||||||
handle = CPools::GetBuildingPool()->GetJustIndex(pBuilding) + 1;
|
handle = CPools::GetBuildingPool()->GetJustIndex_NoFreeAssert(pBuilding) + 1;
|
||||||
}
|
}
|
||||||
WriteSaveBuf(buf, type);
|
WriteSaveBuf(buf, type);
|
||||||
WriteSaveBuf(buf, handle);
|
WriteSaveBuf(buf, handle);
|
||||||
|
@ -1805,19 +1805,19 @@ INITSAVEBUF
|
||||||
case ENTITY_TYPE_BUILDING:
|
case ENTITY_TYPE_BUILDING:
|
||||||
if (((CBuilding*)pEntity)->GetIsATreadable()) {
|
if (((CBuilding*)pEntity)->GetIsATreadable()) {
|
||||||
type = 1;
|
type = 1;
|
||||||
handle = CPools::GetTreadablePool()->GetJustIndex((CTreadable*)pEntity) + 1;
|
handle = CPools::GetTreadablePool()->GetJustIndex_NoFreeAssert((CTreadable*)pEntity) + 1;
|
||||||
} else {
|
} else {
|
||||||
type = 2;
|
type = 2;
|
||||||
handle = CPools::GetBuildingPool()->GetJustIndex((CBuilding*)pEntity) + 1;
|
handle = CPools::GetBuildingPool()->GetJustIndex_NoFreeAssert((CBuilding*)pEntity) + 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ENTITY_TYPE_OBJECT:
|
case ENTITY_TYPE_OBJECT:
|
||||||
type = 3;
|
type = 3;
|
||||||
handle = CPools::GetObjectPool()->GetJustIndex((CObject*)pEntity) + 1;
|
handle = CPools::GetObjectPool()->GetJustIndex_NoFreeAssert((CObject*)pEntity) + 1;
|
||||||
break;
|
break;
|
||||||
case ENTITY_TYPE_DUMMY:
|
case ENTITY_TYPE_DUMMY:
|
||||||
type = 4;
|
type = 4;
|
||||||
handle = CPools::GetDummyPool()->GetJustIndex((CDummy*)pEntity) + 1;
|
handle = CPools::GetDummyPool()->GetJustIndex_NoFreeAssert((CDummy*)pEntity) + 1;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1409,7 +1409,7 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command)
|
||||||
CollectParameters(&m_nIp, 3);
|
CollectParameters(&m_nIp, 3);
|
||||||
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
|
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
|
||||||
script_assert(pVehicle);
|
script_assert(pVehicle);
|
||||||
pVehicle->AutoPilot.m_nTempAction = (eCarTempAction)ScriptParams[1];
|
pVehicle->AutoPilot.m_nTempAction = (uint8)ScriptParams[1];
|
||||||
pVehicle->AutoPilot.m_nTimeTempAction = CTimer::GetTimeInMilliseconds() + ScriptParams[2];
|
pVehicle->AutoPilot.m_nTimeTempAction = CTimer::GetTimeInMilliseconds() + ScriptParams[2];
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,8 +4,18 @@
|
||||||
#include "ScriptCommands.h"
|
#include "ScriptCommands.h"
|
||||||
|
|
||||||
#include "DMAudio.h"
|
#include "DMAudio.h"
|
||||||
|
#if ((defined GTAVC_JP_PATCH || defined SUPPORT_JAPANESE_SCRIPT) && defined MORE_LANGUAGES)
|
||||||
|
#include "Frontend.h"
|
||||||
|
#endif
|
||||||
#include "GameLogic.h"
|
#include "GameLogic.h"
|
||||||
#include "Garages.h"
|
#include "Garages.h"
|
||||||
|
#ifdef MISSION_REPLAY
|
||||||
|
#include "GenericGameStorage.h"
|
||||||
|
#endif
|
||||||
|
#if (defined GTA_PC && !defined GTAVC_JP_PATCH || defined GTA_XBOX || defined SUPPORT_XBOX_SCRIPT || defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT)
|
||||||
|
#include "General.h"
|
||||||
|
#include "maths.h"
|
||||||
|
#endif
|
||||||
#include "Hud.h"
|
#include "Hud.h"
|
||||||
#include "Pad.h"
|
#include "Pad.h"
|
||||||
#include "PedAttractor.h"
|
#include "PedAttractor.h"
|
||||||
|
@ -373,6 +383,228 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#if (defined GTAVC_JP_PATCH || defined SUPPORT_JAPANESE_SCRIPT)
|
||||||
|
case COMMAND_IS_JAPANESE_GAME:
|
||||||
|
#ifdef MORE_LANGUAGES
|
||||||
|
UpdateCompareFlag(FrontEndMenuManager.m_PrefsLanguage == LANGUAGE_JAPANESE);
|
||||||
|
#elif (defined GTAVC_JP_PATCH)
|
||||||
|
UpdateCompareFlag(true);
|
||||||
|
#else
|
||||||
|
UpdateCompareFlag(false);
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
#elif (!defined GTA_PS2)
|
||||||
|
case COMMAND_SET_ONSCREEN_COUNTER_FLASH_WHEN_FIRST_DISPLAYED:
|
||||||
|
script_assert(CTheScripts::ScriptSpace[m_nIp++] == ARGUMENT_GLOBALVAR);
|
||||||
|
uint16 var = CTheScripts::Read2BytesFromScript(&m_nIp);
|
||||||
|
CollectParameters(&m_nIp, 1);
|
||||||
|
//CUserDisplay::OnscnTimer.SetCounterFlashWhenFirstDisplayed(var, ScriptParams[0]);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#if (defined GTA_PC && !defined GTAVC_JP_PATCH || defined GTA_XBOX || defined SUPPORT_XBOX_SCRIPT || defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT)
|
||||||
|
case COMMAND_SHUFFLE_CARD_DECKS:
|
||||||
|
{
|
||||||
|
CollectParameters(&m_nIp, 1);
|
||||||
|
script_assert(ScriptParams[0] >= 0 && ScriptParams[0] <= 6);
|
||||||
|
for (int i = 0; i < CARDS_IN_STACK; i++)
|
||||||
|
CTheScripts::CardStack[i] = 0;
|
||||||
|
int16 seq[CARDS_IN_STACK];
|
||||||
|
for (int i = 0; i < MAX_DECKS * CARDS_IN_DECK; i++)
|
||||||
|
seq[i] = i;
|
||||||
|
int cards_left = CARDS_IN_DECK * ScriptParams[0];
|
||||||
|
for (int k = 1; k < CARDS_IN_DECK + 1; k++) {
|
||||||
|
for (int deck = 0; deck < ScriptParams[0]; deck++) {
|
||||||
|
int index = CGeneral::GetRandomNumberInRange(0, cards_left);
|
||||||
|
CTheScripts::CardStack[seq[index]] = k;
|
||||||
|
for (int l = index; l < cards_left; l++) {
|
||||||
|
if (l + 1 < CARDS_IN_STACK)
|
||||||
|
seq[l] = seq[l + 1];
|
||||||
|
else
|
||||||
|
seq[l] = 0;
|
||||||
|
}
|
||||||
|
--cards_left;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CTheScripts::CardStackPosition = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case COMMAND_FETCH_NEXT_CARD:
|
||||||
|
{
|
||||||
|
if (CTheScripts::CardStack[CTheScripts::CardStackPosition] == 0)
|
||||||
|
CTheScripts::CardStackPosition = 0;
|
||||||
|
ScriptParams[0] = CTheScripts::CardStack[CTheScripts::CardStackPosition++];
|
||||||
|
if (CTheScripts::CardStackPosition == CARDS_IN_DECK * MAX_DECKS)
|
||||||
|
CTheScripts::CardStackPosition = 0;
|
||||||
|
StoreParameters(&m_nIp, 1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case COMMAND_GET_OBJECT_VELOCITY:
|
||||||
|
{
|
||||||
|
CollectParameters(&m_nIp, 1);
|
||||||
|
CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
|
||||||
|
*(CVector*)ScriptParams[0] = GAME_SPEED_TO_METERS_PER_SECOND * pObject->GetMoveSpeed();
|
||||||
|
StoreParameters(&m_nIp, 3);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case COMMAND_IS_DEBUG_CAMERA_ON:
|
||||||
|
UpdateCompareFlag(TheCamera.WorldViewerBeingUsed);
|
||||||
|
return 0;
|
||||||
|
case COMMAND_ADD_TO_OBJECT_ROTATION_VELOCITY:
|
||||||
|
{
|
||||||
|
CollectParameters(&m_nIp, 4);
|
||||||
|
CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
|
||||||
|
CVector newSpeed = pObject->GetTurnSpeed() + *(CVector*)ScriptParams[1] / GAME_SPEED_TO_METERS_PER_SECOND;
|
||||||
|
if (pObject->bIsStatic) {
|
||||||
|
pObject->SetIsStatic(false);
|
||||||
|
pObject->AddToMovingList();
|
||||||
|
}
|
||||||
|
pObject->SetTurnSpeed(newSpeed.x, newSpeed.y, newSpeed.z);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case COMMAND_SET_OBJECT_ROTATION_VELOCITY:
|
||||||
|
{
|
||||||
|
CollectParameters(&m_nIp, 4);
|
||||||
|
CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
|
||||||
|
CVector newSpeed = *(CVector*)ScriptParams[1] / GAME_SPEED_TO_METERS_PER_SECOND;
|
||||||
|
if (pObject->bIsStatic) {
|
||||||
|
pObject->SetIsStatic(false);
|
||||||
|
pObject->AddToMovingList();
|
||||||
|
}
|
||||||
|
pObject->SetTurnSpeed(newSpeed.x, newSpeed.y, newSpeed.z);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case COMMAND_IS_OBJECT_STATIC:
|
||||||
|
{
|
||||||
|
CollectParameters(&m_nIp, 1);
|
||||||
|
CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
|
||||||
|
UpdateCompareFlag(pObject->GetIsStatic());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case COMMAND_GET_ANGLE_BETWEEN_2D_VECTORS:
|
||||||
|
{
|
||||||
|
CollectParameters(&m_nIp, 4);
|
||||||
|
CVector2D v1 = *(CVector2D*)ScriptParams[0];
|
||||||
|
CVector2D v2 = *(CVector2D*)ScriptParams[2];
|
||||||
|
float c = DotProduct2D(v1, v2) / (v1.Magnitude() * v2.Magnitude());
|
||||||
|
#ifdef FIX_BUGS // command is a SA leftover where it was fixed to this
|
||||||
|
*(float*)ScriptParams[0] = RADTODEG(Acos(c));
|
||||||
|
#else
|
||||||
|
*(float*)ScriptParams[0] = Acos(c);
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case COMMAND_DO_2D_RECTANGLES_COLLIDE:
|
||||||
|
{
|
||||||
|
CollectParameters(&m_nIp, 8);
|
||||||
|
float infX1 = *(float*)&ScriptParams[0] - *(float*)&ScriptParams[2] * 0.5; // NB: not float
|
||||||
|
float supX1 = *(float*)&ScriptParams[0] + *(float*)&ScriptParams[2] * 0.5;
|
||||||
|
float infX2 = *(float*)&ScriptParams[4] - *(float*)&ScriptParams[6] * 0.5;
|
||||||
|
float supX2 = *(float*)&ScriptParams[4] + *(float*)&ScriptParams[6] * 0.5;
|
||||||
|
float infY1 = *(float*)&ScriptParams[1] - *(float*)&ScriptParams[3] * 0.5;
|
||||||
|
float supY1 = *(float*)&ScriptParams[1] + *(float*)&ScriptParams[3] * 0.5;
|
||||||
|
float infY2 = *(float*)&ScriptParams[5] - *(float*)&ScriptParams[7] * 0.5;
|
||||||
|
float supY2 = *(float*)&ScriptParams[5] + *(float*)&ScriptParams[7] * 0.5;
|
||||||
|
bool collide = true;
|
||||||
|
if (infY2 > supY1)
|
||||||
|
collide = false;
|
||||||
|
if (infY1 > supY2)
|
||||||
|
collide = false;
|
||||||
|
if (infX2 > supX1)
|
||||||
|
collide = false;
|
||||||
|
if (infX1 > supX2)
|
||||||
|
collide = false;
|
||||||
|
UpdateCompareFlag(collide);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case COMMAND_GET_OBJECT_ROTATION_VELOCITY:
|
||||||
|
{
|
||||||
|
CollectParameters(&m_nIp, 1);
|
||||||
|
CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
|
||||||
|
*(CVector*)ScriptParams[0] = pObject->GetTurnSpeed() * GAME_SPEED_TO_METERS_PER_SECOND;
|
||||||
|
StoreParameters(&m_nIp, 3);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case COMMAND_ADD_VELOCITY_RELATIVE_TO_OBJECT_VELOCITY:
|
||||||
|
{
|
||||||
|
CollectParameters(&m_nIp, 4);
|
||||||
|
CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
|
||||||
|
CVector vecAddition = *(CVector*)&ScriptParams[1] * CTimer::GetTimeStep() / GAME_SPEED_TO_METERS_PER_SECOND;
|
||||||
|
if (!pObject->bIsStatic) {
|
||||||
|
CVector vecCurrSpeed = pObject->GetSpeed();
|
||||||
|
vecCurrSpeed.Normalise();
|
||||||
|
if (vecCurrSpeed.z != 1.0) { // NB: not float!
|
||||||
|
CVector vx = CrossProduct(vecCurrSpeed, CVector(0.0f, 0.0f, 1.0f));
|
||||||
|
vx.Normalise();
|
||||||
|
CVector vz = CrossProduct(vx, vecCurrSpeed);
|
||||||
|
vz.Normalise();
|
||||||
|
CVector vecNewSpeed = pObject->GetSpeed() + vecAddition.x * vx + vecAddition.y * vecCurrSpeed + vecAddition.z * vecCurrSpeed;
|
||||||
|
if (pObject->bIsStatic) {
|
||||||
|
pObject->SetIsStatic(false);
|
||||||
|
pObject->AddToMovingList();
|
||||||
|
}
|
||||||
|
pObject->SetMoveSpeed(vecNewSpeed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case COMMAND_GET_OBJECT_SPEED:
|
||||||
|
{
|
||||||
|
CollectParameters(&m_nIp, 1);
|
||||||
|
CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
|
||||||
|
*(float*)ScriptParams[0] = pObject->GetMoveSpeed().Magnitude() * GAME_SPEED_TO_METERS_PER_SECOND;
|
||||||
|
StoreParameters(&m_nIp, 1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if (defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT)
|
||||||
|
case COMMAND_IS_MISSION_SKIP:
|
||||||
|
#ifdef MISSION_REPLAY
|
||||||
|
ScriptParams[0] = MissionSkipLevel;
|
||||||
|
#else
|
||||||
|
ScriptParams[0] = 0;
|
||||||
|
#endif
|
||||||
|
StoreParameters(&m_nIp, 1);
|
||||||
|
return 0;
|
||||||
|
case COMMAND_SET_IN_AMMUNATION:
|
||||||
|
CollectParameters(&m_nIp, 1);
|
||||||
|
#ifdef MISSION_REPLAY
|
||||||
|
IsInAmmunation = ScriptParams[0];
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
case COMMAND_DO_SAVE_GAME:
|
||||||
|
CollectParameters(&m_nIp, 1);
|
||||||
|
#ifdef MISSION_REPLAY
|
||||||
|
SaveGameForPause(ScriptParams[0]);
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
case COMMAND_IS_RETRY:
|
||||||
|
#ifdef MISSION_REPLAY
|
||||||
|
if (strcmp(m_abScriptName, "porno4") != 0)
|
||||||
|
ScriptParams[0] = AllowMissionReplay;
|
||||||
|
#ifdef FIX_BUGS
|
||||||
|
else
|
||||||
|
ScriptParams[0] = gbTryingPorn4Again;
|
||||||
|
#else
|
||||||
|
else if (gbTryingPorn4Again)
|
||||||
|
ScriptParams[0] = 1;
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
ScriptParams[0] = 0;
|
||||||
|
#endif
|
||||||
|
StoreParameters(&m_nIp, 1);
|
||||||
|
return 0;
|
||||||
|
case COMMAND_DUMMY:
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
#if (defined GTA_XBOX || defined SUPPORT_XBOX_SCRIPT || defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT)
|
||||||
|
// it is unknown what these commands do but they don't take parameters
|
||||||
|
case COMMAND_MARK_CUTSCENE_START:
|
||||||
|
return 0;
|
||||||
|
case COMMAND_MARK_CUTSCENE_END:
|
||||||
|
return 0;
|
||||||
|
case COMMAND_CUTSCENE_SCROLL:
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
script_assert(0);
|
script_assert(0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1437,6 +1437,39 @@ enum {
|
||||||
COMMAND_REGISTER_FIRE_LEVEL,
|
COMMAND_REGISTER_FIRE_LEVEL,
|
||||||
COMMAND_IS_AUSTRALIAN_GAME,
|
COMMAND_IS_AUSTRALIAN_GAME,
|
||||||
COMMAND_DISARM_CAR_BOMB,
|
COMMAND_DISARM_CAR_BOMB,
|
||||||
|
#if (defined GTAVC_JP_PATCH || defined SUPPORT_JAPANESE_SCRIPT)
|
||||||
|
COMMAND_IS_JAPANESE_GAME,
|
||||||
|
#elif (!defined GTA_PS2)
|
||||||
|
COMMAND_SET_ONSCREEN_COUNTER_FLASH_WHEN_FIRST_DISPLAYED,
|
||||||
|
#endif
|
||||||
|
#if (defined GTA_PC && !defined GTAVC_JP_PATCH || defined GTA_XBOX || defined SUPPORT_XBOX_SCRIPT || defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT)
|
||||||
|
COMMAND_SHUFFLE_CARD_DECKS,
|
||||||
|
COMMAND_FETCH_NEXT_CARD,
|
||||||
|
COMMAND_GET_OBJECT_VELOCITY,
|
||||||
|
COMMAND_IS_DEBUG_CAMERA_ON,
|
||||||
|
COMMAND_ADD_TO_OBJECT_ROTATION_VELOCITY,
|
||||||
|
COMMAND_SET_OBJECT_ROTATION_VELOCITY,
|
||||||
|
COMMAND_IS_OBJECT_STATIC,
|
||||||
|
COMMAND_GET_ANGLE_BETWEEN_2D_VECTORS,
|
||||||
|
COMMAND_DO_2D_RECTANGLES_COLLIDE,
|
||||||
|
COMMAND_GET_OBJECT_ROTATION_VELOCITY,
|
||||||
|
COMMAND_ADD_VELOCITY_RELATIVE_TO_OBJECT_VELOCITY,
|
||||||
|
COMMAND_GET_OBJECT_SPEED,
|
||||||
|
#endif
|
||||||
|
#if (defined GTA_XBOX || defined SUPPORT_XBOX_SCRIPT)
|
||||||
|
COMMAND_MARK_CUTSCENE_START,
|
||||||
|
COMMAND_MARK_CUTSCENE_END,
|
||||||
|
COMMAND_CUTSCENE_SCROLL,
|
||||||
|
#elif (defined GTA_MOBILE || defined SUPPORT_MOBILE_SCRIPT)
|
||||||
|
COMMAND_IS_MISSION_SKIP,
|
||||||
|
COMMAND_SET_IN_AMMUNATION,
|
||||||
|
COMMAND_DO_SAVE_GAME,
|
||||||
|
COMMAND_IS_RETRY,
|
||||||
|
COMMAND_DUMMY,
|
||||||
|
COMMAND_MARK_CUTSCENE_START,
|
||||||
|
COMMAND_MARK_CUTSCENE_END,
|
||||||
|
COMMAND_CUTSCENE_SCROLL,
|
||||||
|
#endif
|
||||||
#ifdef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
#ifdef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
||||||
LAST_SCRIPT_COMMAND
|
LAST_SCRIPT_COMMAND
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -29,7 +29,7 @@ void CSetPieces::AddOne(uint8 type, CVector2D vTriggerInf, CVector2D vTriggerSup
|
||||||
{
|
{
|
||||||
if (NumSetPieces >= NUM_SETPIECES)
|
if (NumSetPieces >= NUM_SETPIECES)
|
||||||
return;
|
return;
|
||||||
aSetPieces[NumSetPieces].m_nType = (eSetPieceType)type;
|
aSetPieces[NumSetPieces].m_nType = type;
|
||||||
aSetPieces[NumSetPieces].m_vTriggerInf.x = Min(vTriggerInf.x, vTriggerSup.x);
|
aSetPieces[NumSetPieces].m_vTriggerInf.x = Min(vTriggerInf.x, vTriggerSup.x);
|
||||||
aSetPieces[NumSetPieces].m_vTriggerInf.y = Min(vTriggerInf.y, vTriggerSup.y);
|
aSetPieces[NumSetPieces].m_vTriggerInf.y = Min(vTriggerInf.y, vTriggerSup.y);
|
||||||
aSetPieces[NumSetPieces].m_vTriggerSup.x = Max(vTriggerInf.x, vTriggerSup.x);
|
aSetPieces[NumSetPieces].m_vTriggerSup.x = Max(vTriggerInf.x, vTriggerSup.x);
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
class CVehicle;
|
class CVehicle;
|
||||||
class CCopPed;
|
class CCopPed;
|
||||||
|
|
||||||
enum eSetPieceType : uint8
|
enum eSetPieceType
|
||||||
{
|
{
|
||||||
SETPIECE_NONE = 0,
|
SETPIECE_NONE = 0,
|
||||||
SETPIECE_TWOCOPCARSINALLEY,
|
SETPIECE_TWOCOPCARSINALLEY,
|
||||||
|
@ -20,7 +20,7 @@ enum eSetPieceType : uint8
|
||||||
class CSetPiece
|
class CSetPiece
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
eSetPieceType m_nType;
|
uint8 m_nType;
|
||||||
uint32 m_nLastTimeCreated;
|
uint32 m_nLastTimeCreated;
|
||||||
CVector2D m_vTriggerInf;
|
CVector2D m_vTriggerInf;
|
||||||
CVector2D m_vTriggerSup;
|
CVector2D m_vTriggerSup;
|
||||||
|
|
|
@ -3621,6 +3621,8 @@ CCamera::LoadPathSplines(int file)
|
||||||
m_arrPathArray[i].m_arr_PathData[j] = atof(token);
|
m_arrPathArray[i].m_arr_PathData[j] = atof(token);
|
||||||
i++;
|
i++;
|
||||||
j = 0;
|
j = 0;
|
||||||
|
if (i == MAX_NUM_OF_SPLINETYPES)
|
||||||
|
reading = false;
|
||||||
memset(token, 0, 32);
|
memset(token, 0, 32);
|
||||||
n = 0;
|
n = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ enum eWastedBustedState
|
||||||
WBSTATE_FAILED_CRITICAL_MISSION,
|
WBSTATE_FAILED_CRITICAL_MISSION,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum eBustedAudioState : uint8
|
enum eBustedAudioState
|
||||||
{
|
{
|
||||||
BUSTEDAUDIO_NONE,
|
BUSTEDAUDIO_NONE,
|
||||||
BUSTEDAUDIO_LOADING,
|
BUSTEDAUDIO_LOADING,
|
||||||
|
@ -82,7 +82,7 @@ public:
|
||||||
bool m_bGetOutOfJailFree;
|
bool m_bGetOutOfJailFree;
|
||||||
bool m_bGetOutOfHospitalFree;
|
bool m_bGetOutOfHospitalFree;
|
||||||
bool m_bDriveByAllowed;
|
bool m_bDriveByAllowed;
|
||||||
eBustedAudioState m_nBustedAudioStatus;
|
uint8 m_nBustedAudioStatus;
|
||||||
int16 m_nCurrentBustedAudio;
|
int16 m_nCurrentBustedAudio;
|
||||||
char m_aSkinName[32];
|
char m_aSkinName[32];
|
||||||
RwTexture *m_pSkinTexture;
|
RwTexture *m_pSkinTexture;
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
|
|
||||||
CColPoint gaTempSphereColPoints[MAX_COLLISION_POINTS];
|
CColPoint gaTempSphereColPoints[MAX_COLLISION_POINTS];
|
||||||
|
|
||||||
CPtrList CWorld::ms_bigBuildingsList[4];
|
CPtrList CWorld::ms_bigBuildingsList[NUM_LEVELS];
|
||||||
CPtrList CWorld::ms_listMovingEntityPtrs;
|
CPtrList CWorld::ms_listMovingEntityPtrs;
|
||||||
CSector CWorld::ms_aSectors[NUMSECTORS_Y][NUMSECTORS_X];
|
CSector CWorld::ms_aSectors[NUMSECTORS_Y][NUMSECTORS_X];
|
||||||
uint16 CWorld::ms_nCurrentScanCode;
|
uint16 CWorld::ms_nCurrentScanCode;
|
||||||
|
@ -1164,8 +1164,8 @@ CWorld::FindObjectsIntersectingCube(const CVector &vecStartPos, const CVector &v
|
||||||
const int32 nEndX = Min(GetSectorIndexX(vecStartPos.x), NUMSECTORS_X - 1);
|
const int32 nEndX = Min(GetSectorIndexX(vecStartPos.x), NUMSECTORS_X - 1);
|
||||||
const int32 nEndY = Min(GetSectorIndexY(vecStartPos.y), NUMSECTORS_Y - 1);
|
const int32 nEndY = Min(GetSectorIndexY(vecStartPos.y), NUMSECTORS_Y - 1);
|
||||||
#else
|
#else
|
||||||
const int32 nEndX = Min(GetSectorIndexX(vecSectorPos.x), NUMSECTORS_X);
|
const int32 nEndX = Min(GetSectorIndexX(vecStartPos.x), NUMSECTORS_X);
|
||||||
const int32 nEndY = Min(GetSectorIndexY(vecSectorPos.y), NUMSECTORS_Y);
|
const int32 nEndY = Min(GetSectorIndexY(vecStartPos.y), NUMSECTORS_Y);
|
||||||
#endif
|
#endif
|
||||||
for(int32 y = nStartY; y <= nEndY; y++) {
|
for(int32 y = nStartY; y <= nEndY; y++) {
|
||||||
for(int32 x = nStartX; x <= nEndX; x++) {
|
for(int32 x = nStartX; x <= nEndX; x++) {
|
||||||
|
@ -1580,7 +1580,7 @@ CWorld::CallOffChaseForAreaSectorListVehicles(CPtrList &list, float x1, float y1
|
||||||
if(pVehicle->m_scanCode != GetCurrentScanCode()) {
|
if(pVehicle->m_scanCode != GetCurrentScanCode()) {
|
||||||
pVehicle->m_scanCode = GetCurrentScanCode();
|
pVehicle->m_scanCode = GetCurrentScanCode();
|
||||||
const CVector &vehiclePos = pVehicle->GetPosition();
|
const CVector &vehiclePos = pVehicle->GetPosition();
|
||||||
eCarMission carMission = pVehicle->AutoPilot.m_nCarMission;
|
uint8 carMission = pVehicle->AutoPilot.m_nCarMission;
|
||||||
if(pVehicle != FindPlayerVehicle() && vehiclePos.x > fStartX && vehiclePos.x < fEndX &&
|
if(pVehicle != FindPlayerVehicle() && vehiclePos.x > fStartX && vehiclePos.x < fEndX &&
|
||||||
vehiclePos.y > fStartY && vehiclePos.y < fEndY && pVehicle->bIsLawEnforcer &&
|
vehiclePos.y > fStartY && vehiclePos.y < fEndY && pVehicle->bIsLawEnforcer &&
|
||||||
(carMission == MISSION_RAMPLAYER_FARAWAY || carMission == MISSION_RAMPLAYER_CLOSE ||
|
(carMission == MISSION_RAMPLAYER_FARAWAY || carMission == MISSION_RAMPLAYER_CLOSE ||
|
||||||
|
@ -1781,21 +1781,29 @@ CWorld::ShutDown(void)
|
||||||
CWorld::Remove(pEntity);
|
CWorld::Remove(pEntity);
|
||||||
delete pEntity;
|
delete pEntity;
|
||||||
}
|
}
|
||||||
|
#ifndef FIX_BUGS
|
||||||
pSector->m_lists[ENTITYLIST_BUILDINGS].Flush();
|
pSector->m_lists[ENTITYLIST_BUILDINGS].Flush();
|
||||||
pSector->m_lists[ENTITYLIST_BUILDINGS_OVERLAP].Flush();
|
pSector->m_lists[ENTITYLIST_BUILDINGS_OVERLAP].Flush();
|
||||||
pSector->m_lists[ENTITYLIST_DUMMIES].Flush();
|
pSector->m_lists[ENTITYLIST_DUMMIES].Flush();
|
||||||
pSector->m_lists[ENTITYLIST_DUMMIES_OVERLAP].Flush();
|
pSector->m_lists[ENTITYLIST_DUMMIES_OVERLAP].Flush();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
for(int32 i = 0; i < 4; i++) {
|
for(int32 i = 0; i < NUM_LEVELS; i++) {
|
||||||
for(CPtrNode *pNode = GetBigBuildingList((eLevelName)i).first; pNode; pNode = pNode->next) {
|
for(CPtrNode *pNode = ms_bigBuildingsList[i].first; pNode; pNode = pNode->next) {
|
||||||
CEntity *pEntity = (CEntity *)pNode->item;
|
CEntity *pEntity = (CEntity *)pNode->item;
|
||||||
// Maybe remove from world here?
|
// Maybe remove from world here?
|
||||||
delete pEntity;
|
delete pEntity;
|
||||||
}
|
}
|
||||||
GetBigBuildingList((eLevelName)i).Flush();
|
ms_bigBuildingsList[i].Flush();
|
||||||
}
|
}
|
||||||
for(int i = 0; i < NUMSECTORS_X * NUMSECTORS_Y; i++) {
|
for(int i = 0; i < NUMSECTORS_X * NUMSECTORS_Y; i++) {
|
||||||
CSector *pSector = GetSector(i % NUMSECTORS_X, i / NUMSECTORS_Y);
|
CSector *pSector = GetSector(i % NUMSECTORS_X, i / NUMSECTORS_Y);
|
||||||
|
#ifdef FIX_BUGS
|
||||||
|
pSector->m_lists[ENTITYLIST_BUILDINGS].Flush();
|
||||||
|
pSector->m_lists[ENTITYLIST_BUILDINGS_OVERLAP].Flush();
|
||||||
|
pSector->m_lists[ENTITYLIST_DUMMIES].Flush();
|
||||||
|
pSector->m_lists[ENTITYLIST_DUMMIES_OVERLAP].Flush();
|
||||||
|
#endif
|
||||||
if(pSector->m_lists[ENTITYLIST_BUILDINGS].first) {
|
if(pSector->m_lists[ENTITYLIST_BUILDINGS].first) {
|
||||||
sprintf(gString, "Building list %d,%d not empty\n", i % NUMSECTORS_X, i / NUMSECTORS_Y);
|
sprintf(gString, "Building list %d,%d not empty\n", i % NUMSECTORS_X, i / NUMSECTORS_Y);
|
||||||
pSector->m_lists[ENTITYLIST_BUILDINGS].Flush();
|
pSector->m_lists[ENTITYLIST_BUILDINGS].Flush();
|
||||||
|
|
|
@ -55,7 +55,7 @@ struct CStoredCollPoly;
|
||||||
|
|
||||||
class CWorld
|
class CWorld
|
||||||
{
|
{
|
||||||
static CPtrList ms_bigBuildingsList[4];
|
static CPtrList ms_bigBuildingsList[NUM_LEVELS];
|
||||||
static CPtrList ms_listMovingEntityPtrs;
|
static CPtrList ms_listMovingEntityPtrs;
|
||||||
static CSector ms_aSectors[NUMSECTORS_Y][NUMSECTORS_X];
|
static CSector ms_aSectors[NUMSECTORS_Y][NUMSECTORS_X];
|
||||||
static uint16 ms_nCurrentScanCode;
|
static uint16 ms_nCurrentScanCode;
|
||||||
|
|
|
@ -311,6 +311,12 @@ enum Config {
|
||||||
#define USE_DEBUG_SCRIPT_LOADER // Loads main.scm by default. Hold R for main_freeroam.scm and D for main_d.scm
|
#define USE_DEBUG_SCRIPT_LOADER // Loads main.scm by default. Hold R for main_freeroam.scm and D for main_d.scm
|
||||||
#define USE_MEASUREMENTS_IN_METERS // makes game use meters instead of feet in script
|
#define USE_MEASUREMENTS_IN_METERS // makes game use meters instead of feet in script
|
||||||
#define USE_PRECISE_MEASUREMENT_CONVERTION // makes game convert feet to meeters more precisely
|
#define USE_PRECISE_MEASUREMENT_CONVERTION // makes game convert feet to meeters more precisely
|
||||||
|
#define SUPPORT_JAPANESE_SCRIPT
|
||||||
|
//#define SUPPORT_XBOX_SCRIPT
|
||||||
|
//#define SUPPORT_MOBILE_SCRIPT
|
||||||
|
#if (defined SUPPORT_XBOX_SCRIPT && defined SUPPORT_MOBILE_SCRIPT)
|
||||||
|
static_assert(false, "SUPPORT_XBOX_SCRIPT and SUPPORT_MOBILE_SCRIPT are mutually exclusive");
|
||||||
|
#endif
|
||||||
#ifdef PC_MENU
|
#ifdef PC_MENU
|
||||||
//#define MISSION_REPLAY // mobile feature
|
//#define MISSION_REPLAY // mobile feature
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -124,12 +124,18 @@ public:
|
||||||
(T*)&m_entries[handle >> 8] : nil;
|
(T*)&m_entries[handle >> 8] : nil;
|
||||||
}
|
}
|
||||||
int GetIndex(T *entry){
|
int GetIndex(T *entry){
|
||||||
int i = GetJustIndex(entry);
|
int i = GetJustIndex_NoFreeAssert(entry);
|
||||||
return m_flags[i].u + (i<<8);
|
return m_flags[i].u + (i<<8);
|
||||||
}
|
}
|
||||||
int GetJustIndex(T *entry){
|
int GetJustIndex(T *entry){
|
||||||
// TODO: the cast is unsafe
|
int index = GetJustIndex_NoFreeAssert(entry);
|
||||||
return (int)((U*)entry - m_entries);
|
assert(!IsFreeSlot(index));
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
int GetJustIndex_NoFreeAssert(T* entry){
|
||||||
|
int index = ((U*)entry - m_entries);
|
||||||
|
assert((U*)entry == (U*)&m_entries[index]); // cast is unsafe - check required
|
||||||
|
return index;
|
||||||
}
|
}
|
||||||
int GetNoOfUsedSpaces(void) const {
|
int GetNoOfUsedSpaces(void) const {
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
struct CReference;
|
struct CReference;
|
||||||
class CPtrList;
|
class CPtrList;
|
||||||
|
|
||||||
enum eEntityType : uint8
|
enum eEntityType
|
||||||
{
|
{
|
||||||
ENTITY_TYPE_NOTHING = 0,
|
ENTITY_TYPE_NOTHING = 0,
|
||||||
ENTITY_TYPE_BUILDING,
|
ENTITY_TYPE_BUILDING,
|
||||||
|
@ -16,7 +16,7 @@ enum eEntityType : uint8
|
||||||
ENTITY_TYPE_DUMMY,
|
ENTITY_TYPE_DUMMY,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum eEntityStatus : uint8
|
enum eEntityStatus
|
||||||
{
|
{
|
||||||
STATUS_PLAYER,
|
STATUS_PLAYER,
|
||||||
STATUS_PLAYER_PLAYBACKFROMBUFFER,
|
STATUS_PLAYER_PLAYBACKFROMBUFFER,
|
||||||
|
@ -99,10 +99,10 @@ public:
|
||||||
CReference *m_pFirstReference;
|
CReference *m_pFirstReference;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
eEntityType GetType() const { return (eEntityType)m_type; }
|
uint8 GetType() const { return m_type; }
|
||||||
void SetType(eEntityType type) { m_type = type; }
|
void SetType(uint8 type) { m_type = type; }
|
||||||
eEntityStatus GetStatus() const { return (eEntityStatus)m_status; }
|
uint8 GetStatus() const { return m_status; }
|
||||||
void SetStatus(eEntityStatus status) { m_status = status; }
|
void SetStatus(uint8 status) { m_status = status; }
|
||||||
CColModel *GetColModel(void) { return CModelInfo::GetModelInfo(m_modelIndex)->GetColModel(); }
|
CColModel *GetColModel(void) { return CModelInfo::GetModelInfo(m_modelIndex)->GetColModel(); }
|
||||||
bool GetIsStatic(void) const { return bIsStatic || bIsStaticWaitingForCollision; }
|
bool GetIsStatic(void) const { return bIsStatic || bIsStaticWaitingForCollision; }
|
||||||
void SetIsStatic(bool state) { bIsStatic = state; }
|
void SetIsStatic(bool state) { bIsStatic = state; }
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
#define MAX_MODEL_NAME (21)
|
#define MAX_MODEL_NAME (21)
|
||||||
|
|
||||||
enum ModelInfoType : uint8
|
enum ModelInfoType
|
||||||
{
|
{
|
||||||
MITYPE_NA,
|
MITYPE_NA,
|
||||||
MITYPE_SIMPLE,
|
MITYPE_SIMPLE,
|
||||||
|
@ -17,7 +17,6 @@ enum ModelInfoType : uint8
|
||||||
MITYPE_XTRACOMPS, // unused but still in enum
|
MITYPE_XTRACOMPS, // unused but still in enum
|
||||||
MITYPE_HAND // xbox and mobile
|
MITYPE_HAND // xbox and mobile
|
||||||
};
|
};
|
||||||
VALIDATE_SIZE(ModelInfoType, 1);
|
|
||||||
|
|
||||||
class C2dEffect;
|
class C2dEffect;
|
||||||
|
|
||||||
|
@ -25,7 +24,7 @@ class CBaseModelInfo
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
char m_name[MAX_MODEL_NAME];
|
char m_name[MAX_MODEL_NAME];
|
||||||
ModelInfoType m_type;
|
uint8 m_type;
|
||||||
uint8 m_num2dEffects;
|
uint8 m_num2dEffects;
|
||||||
bool m_bOwnsColModel;
|
bool m_bOwnsColModel;
|
||||||
CColModel *m_colModel;
|
CColModel *m_colModel;
|
||||||
|
@ -47,7 +46,7 @@ public:
|
||||||
virtual int GetAnimFileIndex(void) { return -1; }
|
virtual int GetAnimFileIndex(void) { return -1; }
|
||||||
|
|
||||||
// one day it becomes virtual
|
// one day it becomes virtual
|
||||||
ModelInfoType GetModelType() const { return m_type; }
|
uint8 GetModelType() const { return m_type; }
|
||||||
bool IsBuilding(void) { return m_type == MITYPE_SIMPLE || m_type == MITYPE_TIME; }
|
bool IsBuilding(void) { return m_type == MITYPE_SIMPLE || m_type == MITYPE_TIME; }
|
||||||
bool IsSimple(void) { return m_type == MITYPE_SIMPLE || m_type == MITYPE_TIME || m_type == MITYPE_WEAPON; }
|
bool IsSimple(void) { return m_type == MITYPE_SIMPLE || m_type == MITYPE_TIME || m_type == MITYPE_WEAPON; }
|
||||||
bool IsClump(void) { return m_type == MITYPE_CLUMP || m_type == MITYPE_PED || m_type == MITYPE_VEHICLE; }
|
bool IsClump(void) { return m_type == MITYPE_CLUMP || m_type == MITYPE_PED || m_type == MITYPE_VEHICLE; }
|
||||||
|
|
|
@ -24,7 +24,7 @@ enum {
|
||||||
ATOMIC_FLAG_NOCULL = 0x800,
|
ATOMIC_FLAG_NOCULL = 0x800,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum eVehicleType : uint8{
|
enum eVehicleType {
|
||||||
VEHICLE_TYPE_CAR,
|
VEHICLE_TYPE_CAR,
|
||||||
VEHICLE_TYPE_BOAT,
|
VEHICLE_TYPE_BOAT,
|
||||||
VEHICLE_TYPE_TRAIN,
|
VEHICLE_TYPE_TRAIN,
|
||||||
|
|
|
@ -14,6 +14,12 @@
|
||||||
#include "soundlist.h"
|
#include "soundlist.h"
|
||||||
#include "WaterLevel.h"
|
#include "WaterLevel.h"
|
||||||
#include "Timecycle.h"
|
#include "Timecycle.h"
|
||||||
|
#include "Stats.h"
|
||||||
|
#include "SpecialFX.h"
|
||||||
|
|
||||||
|
#define BEACHBALL_MAX_SCORE 250
|
||||||
|
// the proportion of the ball speed compared to the player speed when it hits the player
|
||||||
|
#define BEACHBALL_SPEED_PROPORTION 0.4f
|
||||||
|
|
||||||
int16 CObject::nNoTempObjects;
|
int16 CObject::nNoTempObjects;
|
||||||
//int16 CObject::nBodyCastHealth = 1000;
|
//int16 CObject::nBodyCastHealth = 1000;
|
||||||
|
@ -33,8 +39,8 @@ CObject::CObject(void)
|
||||||
m_bCameraToAvoidThisObject = false;
|
m_bCameraToAvoidThisObject = false;
|
||||||
ObjectCreatedBy = UNKNOWN_OBJECT;
|
ObjectCreatedBy = UNKNOWN_OBJECT;
|
||||||
m_nEndOfLifeTime = 0;
|
m_nEndOfLifeTime = 0;
|
||||||
// m_nRefModelIndex = -1; // duplicate
|
// m_nRefModelIndex = -1; // duplicate
|
||||||
// bUseVehicleColours = false; // duplicate
|
// bUseVehicleColours = false; // duplicate
|
||||||
m_colour2 = 0;
|
m_colour2 = 0;
|
||||||
m_colour1 = m_colour2;
|
m_colour1 = m_colour2;
|
||||||
m_nBonusValue = 0;
|
m_nBonusValue = 0;
|
||||||
|
@ -47,7 +53,7 @@ CObject::CObject(void)
|
||||||
bHasBeenDamaged = false;
|
bHasBeenDamaged = false;
|
||||||
m_nRefModelIndex = -1;
|
m_nRefModelIndex = -1;
|
||||||
bUseVehicleColours = false;
|
bUseVehicleColours = false;
|
||||||
// bIsStreetLight = false; // duplicate
|
// bIsStreetLight = false; // duplicate
|
||||||
m_pCurSurface = nil;
|
m_pCurSurface = nil;
|
||||||
m_pCollidingEntity = nil;
|
m_pCollidingEntity = nil;
|
||||||
m_nBeachballBounces = 0;
|
m_nBeachballBounces = 0;
|
||||||
|
@ -84,10 +90,10 @@ CObject::~CObject(void)
|
||||||
{
|
{
|
||||||
CRadar::ClearBlipForEntity(BLIP_OBJECT, CPools::GetObjectPool()->GetIndex(this));
|
CRadar::ClearBlipForEntity(BLIP_OBJECT, CPools::GetObjectPool()->GetIndex(this));
|
||||||
|
|
||||||
if(m_nRefModelIndex != -1)
|
if (m_nRefModelIndex != -1)
|
||||||
CModelInfo::GetModelInfo(m_nRefModelIndex)->RemoveRef();
|
CModelInfo::GetModelInfo(m_nRefModelIndex)->RemoveRef();
|
||||||
|
|
||||||
if(ObjectCreatedBy == TEMP_OBJECT && nNoTempObjects != 0)
|
if (ObjectCreatedBy == TEMP_OBJECT && nNoTempObjects != 0)
|
||||||
nNoTempObjects--;
|
nNoTempObjects--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,7 +113,8 @@ CObject::ProcessControl(void)
|
||||||
m_vecMoveSpeed *= fTimeStep;
|
m_vecMoveSpeed *= fTimeStep;
|
||||||
m_vecTurnSpeed *= fTimeStep;
|
m_vecTurnSpeed *= fTimeStep;
|
||||||
}
|
}
|
||||||
if ((GetModelIndex() == MI_EXPLODINGBARREL || GetModelIndex() == MI_PETROLPUMP) && bHasBeenDamaged && bIsVisible
|
int16 mi = GetModelIndex();
|
||||||
|
if ((mi == MI_EXPLODINGBARREL || mi == MI_PETROLPUMP || mi == MI_PETROLPUMP2) && bHasBeenDamaged && bIsVisible
|
||||||
&& (CGeneral::GetRandomNumber() & 0x1F) == 10) {
|
&& (CGeneral::GetRandomNumber() & 0x1F) == 10) {
|
||||||
bExplosionProof = true;
|
bExplosionProof = true;
|
||||||
bIsVisible = false;
|
bIsVisible = false;
|
||||||
|
@ -115,6 +122,68 @@ CObject::ProcessControl(void)
|
||||||
bAffectedByGravity = false;
|
bAffectedByGravity = false;
|
||||||
m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f);
|
m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f);
|
||||||
}
|
}
|
||||||
|
if (mi == MI_RCBOMB) {
|
||||||
|
float fTurnForce = -(m_fTurnMass / 20.0f);
|
||||||
|
CPhysical::ApplyTurnForce(m_vecMoveSpeed * fTurnForce, -GetForward());
|
||||||
|
float fScalar = 1.0f - m_vecMoveSpeed.MagnitudeSqr() / 5.0f;
|
||||||
|
float fScalarTimed = Pow(fScalar, CTimer::GetTimeStep());
|
||||||
|
m_vecMoveSpeed *= fScalarTimed;
|
||||||
|
}
|
||||||
|
if (mi == MI_BEACHBALL) {
|
||||||
|
float fTimeStep = Pow(0.95f, CTimer::GetTimeStep());
|
||||||
|
float fPreviousVecSpeedMag = m_vecMoveSpeed.Magnitude2D();
|
||||||
|
m_vecMoveSpeed.x *= fTimeStep;
|
||||||
|
m_vecMoveSpeed.y *= fTimeStep;
|
||||||
|
m_vecMoveSpeed.z += fPreviousVecSpeedMag - m_vecMoveSpeed.Magnitude2D();
|
||||||
|
if (!FindPlayerVehicle()) {
|
||||||
|
CVector distance;
|
||||||
|
distance.x = FindPlayerCoors().x - GetPosition().x;
|
||||||
|
distance.y = FindPlayerCoors().y - GetPosition().y;
|
||||||
|
distance.z = FindPlayerCoors().z - GetPosition().z;
|
||||||
|
if (distance.z > 0.0 && distance.z < 1.5f && distance.Magnitude2D() < 1.0f) {
|
||||||
|
CVector playerSpeed = FindPlayerSpeed();
|
||||||
|
if (fPreviousVecSpeedMag < 0.05f && playerSpeed.Magnitude() > 0.1f) {
|
||||||
|
playerSpeed.z = 0.0f;
|
||||||
|
playerSpeed.Normalise();
|
||||||
|
playerSpeed.z = 0.3f;
|
||||||
|
m_vecMoveSpeed = CVector(
|
||||||
|
playerSpeed.x * BEACHBALL_SPEED_PROPORTION,
|
||||||
|
playerSpeed.y * BEACHBALL_SPEED_PROPORTION,
|
||||||
|
0.3f * BEACHBALL_SPEED_PROPORTION
|
||||||
|
);
|
||||||
|
PlayOneShotScriptObject(SCRIPT_SOUND_HIT_BALL, GetPosition());
|
||||||
|
m_vecTurnSpeed += CVector(
|
||||||
|
((CGeneral::GetRandomNumber() % 16) - 7) / 10.0f,
|
||||||
|
((CGeneral::GetRandomNumber() % 16) - 7) / 10.0f,
|
||||||
|
0.0f);
|
||||||
|
if (m_nBeachballBounces > 0) {
|
||||||
|
m_nBeachballBounces++;
|
||||||
|
}
|
||||||
|
if (m_nBeachballBounces > 0) {
|
||||||
|
sprintf(gString, "%d", m_nBeachballBounces);
|
||||||
|
CMoneyMessages::RegisterOne(GetPosition(), gString, 255, 50, 0, 0.6f, 0.5f);
|
||||||
|
CStats::RegisterHighestScore(3, m_nBeachballBounces);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (distance.z > -1.05 && distance.z < -0.6 && m_vecMoveSpeed.z < 0.0f && distance.Magnitude2D() < 0.9f) {
|
||||||
|
m_vecMoveSpeed.x += (CGeneral::GetRandomNumber() % 8 - 3) / 100.0f;
|
||||||
|
m_vecMoveSpeed.y += (CGeneral::GetRandomNumber() % 8 - 3) / 100.0f;
|
||||||
|
m_vecMoveSpeed.z = Max(m_vecMoveSpeed.z + 0.3f, 0.2f);
|
||||||
|
PlayOneShotScriptObject(SCRIPT_SOUND_HIT_BALL, GetPosition());
|
||||||
|
m_vecTurnSpeed.x += (CGeneral::GetRandomNumber() % 16 - 7) / 10.0f;
|
||||||
|
m_vecTurnSpeed.y += (CGeneral::GetRandomNumber() % 16 - 7) / 10.0f;
|
||||||
|
m_nBeachballBounces++;
|
||||||
|
m_nBeachballBounces = Min(m_nBeachballBounces, BEACHBALL_MAX_SCORE);
|
||||||
|
sprintf(gString, "%d", m_nBeachballBounces);
|
||||||
|
CMoneyMessages::RegisterOne(GetPosition(), gString, 255, 50, 0, 0.6f, 0.5f);
|
||||||
|
CStats::RegisterHighestScore(3, m_nBeachballBounces);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (bIsBIGBuilding) {
|
||||||
|
bIsInSafePosition = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -245,7 +314,7 @@ CObject::Render(void)
|
||||||
bool
|
bool
|
||||||
CObject::SetupLighting(void)
|
CObject::SetupLighting(void)
|
||||||
{
|
{
|
||||||
if(bRenderScorched){
|
if (bRenderScorched) {
|
||||||
WorldReplaceNormalLightsWithScorched(Scene.world, 0.1f);
|
WorldReplaceNormalLightsWithScorched(Scene.world, 0.1f);
|
||||||
return true;
|
return true;
|
||||||
} else if (bIsPickup) {
|
} else if (bIsPickup) {
|
||||||
|
@ -262,7 +331,7 @@ CObject::SetupLighting(void)
|
||||||
void
|
void
|
||||||
CObject::RemoveLighting(bool reset)
|
CObject::RemoveLighting(bool reset)
|
||||||
{
|
{
|
||||||
if(reset) {
|
if (reset) {
|
||||||
SetAmbientColours();
|
SetAmbientColours();
|
||||||
DeActivateDirectional();
|
DeActivateDirectional();
|
||||||
}
|
}
|
||||||
|
@ -287,132 +356,361 @@ CObject::ObjectDamage(float amount)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if ((amount * m_fCollisionDamageMultiplier > 150.0f || bBodyCastDamageEffect) && m_nCollisionDamageEffect) {
|
if ((amount * m_fCollisionDamageMultiplier > 150.0f || bBodyCastDamageEffect) && m_nCollisionDamageEffect) {
|
||||||
const CVector& vecPos = m_matrix.GetPosition();
|
const CVector &vecPos = m_matrix.GetPosition();
|
||||||
const float fDirectionZ = 0.0002f * amount;
|
const float fDirectionZ = 0.0002f * amount;
|
||||||
switch (m_nCollisionDamageEffect)
|
switch (m_nCollisionDamageEffect) {
|
||||||
{
|
case DAMAGE_EFFECT_CHANGE_MODEL:
|
||||||
case DAMAGE_EFFECT_CHANGE_MODEL:
|
|
||||||
bRenderDamaged = true;
|
|
||||||
break;
|
|
||||||
case DAMAGE_EFFECT_SPLIT_MODEL:
|
|
||||||
break;
|
|
||||||
case DAMAGE_EFFECT_SMASH_COMPLETELY:
|
|
||||||
bIsVisible = false;
|
|
||||||
bUsesCollision = false;
|
|
||||||
SetIsStatic(true);
|
|
||||||
bExplosionProof = true;
|
|
||||||
SetMoveSpeed(0.0f, 0.0f, 0.0f);
|
|
||||||
SetTurnSpeed(0.0f, 0.0f, 0.0f);
|
|
||||||
break;
|
|
||||||
case DAMAGE_EFFECT_CHANGE_THEN_SMASH:
|
|
||||||
if (!bRenderDamaged) {
|
|
||||||
bRenderDamaged = true;
|
bRenderDamaged = true;
|
||||||
|
return;
|
||||||
|
case DAMAGE_EFFECT_SPLIT_MODEL:
|
||||||
|
return;
|
||||||
|
case DAMAGE_EFFECT_SMASH_AND_DAMAGE_TRAFFICLIGHTS:
|
||||||
|
{
|
||||||
|
static RwRGBA debrisColor = { 0xc8,0xc8,0xc8,0xff };
|
||||||
|
if (bRenderDamaged) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
bRenderDamaged = true;
|
||||||
|
CVector min = 0.85f * GetColModel()->boundingBox.min;
|
||||||
|
CVector max = 0.85f * GetColModel()->boundingBox.max;
|
||||||
|
min.z = max.z;
|
||||||
|
min = GetMatrix() * min;
|
||||||
|
max = GetMatrix() * max;
|
||||||
|
CVector temp = (max - min) * 0.02f;
|
||||||
|
for (int32 i = 0; i < 50; i++) {
|
||||||
|
CVector vecDir = CVector(
|
||||||
|
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||||
|
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||||
|
CGeneral::GetRandomNumberInRange(0.10f, 0.25f)
|
||||||
|
);
|
||||||
|
++nFrameGen;
|
||||||
|
int32 currentFrame = nFrameGen & 3;
|
||||||
|
CVector pos = min + temp * (float)i;
|
||||||
|
float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f);
|
||||||
|
float fColorFactor = CGeneral::GetRandomNumberInRange(0.6f, 1.2f);
|
||||||
|
RwRGBA color = debrisColor;
|
||||||
|
color.red *= fColorFactor;
|
||||||
|
color.green *= fColorFactor;
|
||||||
|
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-0.40f, 0.40f);
|
||||||
|
CParticle::AddParticle(PARTICLE_CAR_DEBRIS, pos, vecDir, nil, fSize, color, nRotationSpeed, 0, currentFrame, 0);
|
||||||
|
}
|
||||||
|
PlayOneShotScriptObject(SCRIPT_SOUND_METAL_COLLISION, min);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else {
|
case DAMAGE_EFFECT_CHANGE_THEN_SMASH: {
|
||||||
|
if (!bRenderDamaged) {
|
||||||
|
bRenderDamaged = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// fall through
|
||||||
|
}
|
||||||
|
case DAMAGE_EFFECT_SMASH_COMPLETELY: {
|
||||||
bIsVisible = false;
|
bIsVisible = false;
|
||||||
bUsesCollision = false;
|
bUsesCollision = false;
|
||||||
|
if (!GetIsStatic()) {
|
||||||
|
RemoveFromMovingList();
|
||||||
|
}
|
||||||
SetIsStatic(true);
|
SetIsStatic(true);
|
||||||
bExplosionProof = true;
|
bExplosionProof = true;
|
||||||
SetMoveSpeed(0.0f, 0.0f, 0.0f);
|
SetMoveSpeed(0.0f, 0.0f, 0.0f);
|
||||||
SetTurnSpeed(0.0f, 0.0f, 0.0f);
|
SetTurnSpeed(0.0f, 0.0f, 0.0f);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
case DAMAGE_EFFECT_SMASH_CARDBOARD_COMPLETELY:
|
||||||
case DAMAGE_EFFECT_SMASH_CARDBOARD_COMPLETELY: {
|
case DAMAGE_EFFECT_SMASH_YELLOW_TARGET_COMPLETELY:
|
||||||
bIsVisible = false;
|
{
|
||||||
bUsesCollision = false;
|
bIsVisible = false;
|
||||||
SetIsStatic(true);
|
bUsesCollision = false;
|
||||||
bExplosionProof = true;
|
if (!GetIsStatic()) {
|
||||||
SetMoveSpeed(0.0f, 0.0f, 0.0f);
|
RemoveFromMovingList();
|
||||||
SetTurnSpeed(0.0f, 0.0f, 0.0f);
|
}
|
||||||
const RwRGBA color = { 96, 48, 0, 255 };
|
SetIsStatic(true);
|
||||||
for (int32 i = 0; i < 25; i++) {
|
bExplosionProof = true;
|
||||||
CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
|
SetMoveSpeed(0.0f, 0.0f, 0.0f);
|
||||||
CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
|
SetTurnSpeed(0.0f, 0.0f, 0.0f);
|
||||||
CGeneral::GetRandomNumberInRange(0.1f, 0.15f) + fDirectionZ);
|
const RwRGBA color = { 96, 48, 0, 255 };
|
||||||
++nFrameGen;
|
for (int32 i = 0; i < 25; i++) {
|
||||||
int32 currentFrame = nFrameGen & 3;
|
CVector vecDir = CVector(
|
||||||
float fRandom = CGeneral::GetRandomNumberInRange(0.01f, 1.0f);
|
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||||
RwRGBA randomColor = { uint8(color.red * fRandom), uint8(color.green * fRandom) , color.blue, color.alpha };
|
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||||
float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.18f);
|
CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ
|
||||||
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 80);
|
);
|
||||||
CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, randomColor, nRotationSpeed, 0, currentFrame, 0);
|
++nFrameGen;
|
||||||
|
int32 currentFrame = nFrameGen & 3;
|
||||||
|
RwRGBA randomColor = color;
|
||||||
|
switch (m_nCollisionDamageEffect) {
|
||||||
|
case DAMAGE_EFFECT_SMASH_CARDBOARD_COMPLETELY: {
|
||||||
|
float fRandom = CGeneral::GetRandomNumberInRange(0.01f, 1.0f);
|
||||||
|
randomColor.red *= fRandom;
|
||||||
|
randomColor.green *= fRandom;
|
||||||
|
randomColor.blue *= fRandom;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DAMAGE_EFFECT_SMASH_YELLOW_TARGET_COMPLETELY: {
|
||||||
|
randomColor.red = 0xff;
|
||||||
|
randomColor.green = 0xfc;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f);
|
||||||
|
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40);
|
||||||
|
CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, randomColor, nRotationSpeed, 0, currentFrame, 0);
|
||||||
|
}
|
||||||
|
PlayOneShotScriptObject(SCRIPT_SOUND_BOX_DESTROYED_2, vecPos);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
PlayOneShotScriptObject(SCRIPT_SOUND_BOX_DESTROYED_2, vecPos);
|
case DAMAGE_EFFECT_SMASH_WOODENBOX_COMPLETELY:
|
||||||
break;
|
{
|
||||||
}
|
bIsVisible = false;
|
||||||
case DAMAGE_EFFECT_SMASH_WOODENBOX_COMPLETELY: {
|
bUsesCollision = false;
|
||||||
bIsVisible = false;
|
if (!GetIsStatic()) {
|
||||||
bUsesCollision = false;
|
RemoveFromMovingList();
|
||||||
SetIsStatic(true);
|
}
|
||||||
bExplosionProof = true;
|
SetIsStatic(true);
|
||||||
SetMoveSpeed(0.0f, 0.0f, 0.0f);
|
bExplosionProof = true;
|
||||||
SetTurnSpeed(0.0f, 0.0f, 0.0f);
|
SetMoveSpeed(0.0f, 0.0f, 0.0f);
|
||||||
const RwRGBA color = { 128, 128, 128, 255 };
|
SetTurnSpeed(0.0f, 0.0f, 0.0f);
|
||||||
for (int32 i = 0; i < 45; i++) {
|
static const RwRGBA color = { 128, 128, 128, 255 };
|
||||||
CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
|
CVector position = GetPosition();
|
||||||
CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
|
for (int32 i = 0; i < 45; i++) {
|
||||||
CGeneral::GetRandomNumberInRange(0.1f, 0.15f) + fDirectionZ);
|
CVector vecDir = CVector(
|
||||||
++nFrameGen;
|
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||||
int32 currentFrame = nFrameGen & 3;
|
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||||
float fRandom = CGeneral::GetRandomNumberInRange(0.5f, 0.5f);
|
CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ
|
||||||
RwRGBA randomColor = { uint8(color.red * fRandom), uint8(color.green * fRandom), uint8(color.blue * fRandom), color.alpha };
|
);
|
||||||
float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.18f);
|
++nFrameGen;
|
||||||
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 80);
|
int32 currentFrame = nFrameGen & 3;
|
||||||
CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, randomColor, nRotationSpeed, 0, currentFrame, 0);
|
float fRandom = CGeneral::GetRandomNumberInRange(0.5f, 1.0f);
|
||||||
|
RwRGBA randomColor = { uint8(color.red * fRandom), uint8(color.green * fRandom), uint8(color.blue * fRandom), color.alpha };
|
||||||
|
float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f);
|
||||||
|
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40);
|
||||||
|
CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, randomColor, nRotationSpeed, 0, currentFrame, 0);
|
||||||
|
}
|
||||||
|
PlayOneShotScriptObject(SCRIPT_SOUND_BOX_DESTROYED_1, vecPos);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
PlayOneShotScriptObject(SCRIPT_SOUND_BOX_DESTROYED_1, vecPos);
|
case DAMAGE_EFFECT_SMASH_TRAFFICCONE_COMPLETELY:
|
||||||
break;
|
case DAMAGE_EFFECT_BURST_BEACHBALL:
|
||||||
}
|
{
|
||||||
case DAMAGE_EFFECT_SMASH_TRAFFICCONE_COMPLETELY: {
|
bIsVisible = false;
|
||||||
bIsVisible = false;
|
bUsesCollision = false;
|
||||||
bUsesCollision = false;
|
if (!GetIsStatic()) {
|
||||||
SetIsStatic(true);
|
RemoveFromMovingList();
|
||||||
bExplosionProof = true;
|
}
|
||||||
SetMoveSpeed(0.0f, 0.0f, 0.0f);
|
SetIsStatic(true);
|
||||||
SetTurnSpeed(0.0f, 0.0f, 0.0f);
|
bExplosionProof = true;
|
||||||
const RwRGBA color1 = { 200, 0, 0, 255 };
|
SetMoveSpeed(0.0f, 0.0f, 0.0f);
|
||||||
const RwRGBA color2 = { 200, 200, 200, 255 };
|
SetTurnSpeed(0.0f, 0.0f, 0.0f);
|
||||||
for (int32 i = 0; i < 10; i++) {
|
const RwRGBA color1 = { 200, 0, 0, 255 };
|
||||||
CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
|
const RwRGBA color2 = { 200, 200, 200, 255 };
|
||||||
CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
|
for (int32 i = 0; i < 10; i++) {
|
||||||
CGeneral::GetRandomNumberInRange(0.1f, 0.15f) + fDirectionZ);
|
CVector vecDir = CVector(
|
||||||
++nFrameGen;
|
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||||
int32 currentFrame = nFrameGen & 3;
|
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||||
RwRGBA color = color2;
|
CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ
|
||||||
if (nFrameGen & 1)
|
);
|
||||||
color = color1;
|
++nFrameGen;
|
||||||
float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.18f);
|
int32 currentFrame = nFrameGen & 3;
|
||||||
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 80);
|
RwRGBA color = color2;
|
||||||
CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, color, nRotationSpeed, 0, currentFrame, 0);
|
if (nFrameGen & 1)
|
||||||
|
color = color1;
|
||||||
|
float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f);
|
||||||
|
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40);
|
||||||
|
CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, color, nRotationSpeed, 0, currentFrame, 0);
|
||||||
|
}
|
||||||
|
if (m_nCollisionDamageEffect == DAMAGE_EFFECT_BURST_BEACHBALL) {
|
||||||
|
PlayOneShotScriptObject(SCRIPT_SOUND_HIT_BALL, vecPos);
|
||||||
|
} else {
|
||||||
|
PlayOneShotScriptObject(SCRIPT_SOUND_TIRE_COLLISION, vecPos);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
PlayOneShotScriptObject(SCRIPT_SOUND_TIRE_COLLISION, vecPos);
|
case DAMAGE_EFFECT_SMASH_BARPOST_COMPLETELY:
|
||||||
break;
|
{
|
||||||
}
|
bIsVisible = false;
|
||||||
case DAMAGE_EFFECT_SMASH_BARPOST_COMPLETELY: {
|
bUsesCollision = false;
|
||||||
bIsVisible = false;
|
if (!GetIsStatic()) {
|
||||||
bUsesCollision = false;
|
RemoveFromMovingList();
|
||||||
SetIsStatic(true);
|
}
|
||||||
bExplosionProof = true;
|
SetIsStatic(true);
|
||||||
SetMoveSpeed(0.0f, 0.0f, 0.0f);
|
bExplosionProof = true;
|
||||||
SetTurnSpeed(0.0f, 0.0f, 0.0f);
|
SetMoveSpeed(0.0f, 0.0f, 0.0f);
|
||||||
const RwRGBA color1 = { 200, 0, 0, 255 };
|
SetTurnSpeed(0.0f, 0.0f, 0.0f);
|
||||||
const RwRGBA color2 = { 200, 200, 200, 255 };
|
const RwRGBA color1 = { 200, 0, 0, 255 };
|
||||||
for (int32 i = 0; i < 32; i++) {
|
const RwRGBA color2 = { 200, 200, 200, 255 };
|
||||||
CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
|
SetMoveSpeed(0.0f, 0.0f, 0.0f);
|
||||||
CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
|
SetTurnSpeed(0.0f, 0.0f, 0.0f);
|
||||||
CGeneral::GetRandomNumberInRange(0.1f, 0.15f) + fDirectionZ);
|
for (int32 i = 0; i < 32; i++) {
|
||||||
++nFrameGen;
|
CVector vecDir = CVector(
|
||||||
int32 currentFrame = nFrameGen & 3;
|
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||||
RwRGBA color = color2;
|
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||||
if (nFrameGen & 1)
|
CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ
|
||||||
color = color1;
|
);
|
||||||
float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.18f);
|
++nFrameGen;
|
||||||
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 80);
|
int32 currentFrame = nFrameGen & 3;
|
||||||
CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, color, nRotationSpeed, 0, currentFrame, 0);
|
const RwRGBA &color = nFrameGen & 1 ? color1 : color2;
|
||||||
|
float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f);
|
||||||
|
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40);
|
||||||
|
CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, color, nRotationSpeed, 0, currentFrame, 0);
|
||||||
|
}
|
||||||
|
PlayOneShotScriptObject(SCRIPT_SOUND_METAL_COLLISION, vecPos);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
PlayOneShotScriptObject(SCRIPT_SOUND_METAL_COLLISION, vecPos);
|
case DAMAGE_EFFECT_SMASH_NEWSTANDNEW1:
|
||||||
break;
|
case DAMAGE_EFFECT_SMASH_NEWSTANDNEW2:
|
||||||
}
|
case DAMAGE_EFFECT_SMASH_NEWSTANDNEW3:
|
||||||
|
case DAMAGE_EFFECT_SMASH_NEWSTANDNEW4:
|
||||||
|
case DAMAGE_EFFECT_SMASH_NEWSTANDNEW5:
|
||||||
|
{
|
||||||
|
bIsVisible = false;
|
||||||
|
bUsesCollision = false;
|
||||||
|
if (!GetIsStatic()) {
|
||||||
|
RemoveFromMovingList();
|
||||||
|
}
|
||||||
|
SetIsStatic(true);
|
||||||
|
bExplosionProof = true;
|
||||||
|
SetMoveSpeed(0.0f, 0.0f, 0.0f);
|
||||||
|
SetTurnSpeed(0.0f, 0.0f, 0.0f);
|
||||||
|
CRGBA possibleColor1;
|
||||||
|
CRGBA possibleColor2;
|
||||||
|
switch (m_nCollisionDamageEffect) {
|
||||||
|
case DAMAGE_EFFECT_SMASH_NEWSTANDNEW1:
|
||||||
|
possibleColor1 = CRGBA(0xC0, 0x3E, 0xC, 0xFF);
|
||||||
|
possibleColor2 = possibleColor1;
|
||||||
|
break;
|
||||||
|
case DAMAGE_EFFECT_SMASH_NEWSTANDNEW2:
|
||||||
|
possibleColor1 = CRGBA(0xA3, 0x36, 0x21, 0xFF);
|
||||||
|
possibleColor2 = possibleColor1;
|
||||||
|
break;
|
||||||
|
case DAMAGE_EFFECT_SMASH_NEWSTANDNEW3:
|
||||||
|
possibleColor1 = CRGBA(0x12, 0x31, 0x24, 0xFF);
|
||||||
|
possibleColor2 = possibleColor1;
|
||||||
|
break;
|
||||||
|
case DAMAGE_EFFECT_SMASH_NEWSTANDNEW4:
|
||||||
|
possibleColor1 = CRGBA(0xC0, 0xC8, 0xBE, 0xFF);
|
||||||
|
possibleColor2 = CRGBA(0x10, 0x57, 0x85, 0xFF);
|
||||||
|
break;
|
||||||
|
case DAMAGE_EFFECT_SMASH_NEWSTANDNEW5:
|
||||||
|
possibleColor1 = CRGBA(0xD0, 0x94, 0x1B, 0xFF);
|
||||||
|
possibleColor2 = possibleColor1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for (int32 i = 0; i < 16; i++) {
|
||||||
|
CVector vecDir(
|
||||||
|
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||||
|
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||||
|
CGeneral::GetRandomNumberInRange(0.10f, 0.15f) + fDirectionZ
|
||||||
|
);
|
||||||
|
float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f);
|
||||||
|
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40);
|
||||||
|
++nFrameGen;
|
||||||
|
int32 nCurFrame = nFrameGen & 0x3;
|
||||||
|
CRGBA &selectedColor = nFrameGen & 0x1 ? possibleColor1 : possibleColor2;
|
||||||
|
CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, selectedColor, nRotationSpeed, 0, nCurFrame, 0);
|
||||||
|
if (!(i % 7)) {
|
||||||
|
static CRGBA secondParticleColors[4] = {
|
||||||
|
CRGBA(0xA0, 0x60, 0x60, 0xFF),
|
||||||
|
CRGBA(0x60, 0xA0, 0x60, 0xFF),
|
||||||
|
CRGBA(0x60, 0x60, 0xA0, 0xFF),
|
||||||
|
CRGBA(0xA0, 0xA0, 0xA0, 0xFF)
|
||||||
|
};
|
||||||
|
vecDir *= 0.5f;
|
||||||
|
CRGBA &secondParticleColor = secondParticleColors[nFrameGen & 3];
|
||||||
|
int32 nSecondRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40);
|
||||||
|
CParticle::AddParticle(PARTICLE_DEBRIS, vecPos, vecDir, nil, 0.1f, secondParticleColor, nSecondRotationSpeed, 0, 1, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PlayOneShotScriptObject(SCRIPT_SOUND_METAL_COLLISION, vecPos);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DAMAGE_EFFECT_SMASH_VEGPALM:
|
||||||
|
{
|
||||||
|
static RwRGBA primaryColor1 = { 0x39, 0x4D, 0x29, 0xff };
|
||||||
|
static RwRGBA primaryColor2 = { 0x94, 0x7D, 0x73, 0xff };
|
||||||
|
bIsVisible = false;
|
||||||
|
bUsesCollision = false;
|
||||||
|
if (!GetIsStatic()) {
|
||||||
|
RemoveFromMovingList();
|
||||||
|
}
|
||||||
|
SetIsStatic(true);
|
||||||
|
bExplosionProof = true;
|
||||||
|
SetMoveSpeed(0.0f, 0.0f, 0.0f);
|
||||||
|
SetTurnSpeed(0.0f, 0.0f, 0.0f);
|
||||||
|
float fRadius = GetColModel()->boundingSphere.radius;
|
||||||
|
for (int32 i = 0; i < 32; i++) {
|
||||||
|
CVector particleDir = CVector(
|
||||||
|
CGeneral::GetRandomNumberInRange(-0.25f, 0.25f),
|
||||||
|
CGeneral::GetRandomNumberInRange(-0.25f, 0.25f),
|
||||||
|
CGeneral::GetRandomNumberInRange(-0.05f, 0.05f) + fDirectionZ
|
||||||
|
);
|
||||||
|
CVector particlePos = vecPos;
|
||||||
|
particlePos.z += CGeneral::GetRandomNumberInRange(0.0f, 1.0f) * fRadius;
|
||||||
|
++nFrameGen;
|
||||||
|
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40);
|
||||||
|
int32 nCurFrame = nFrameGen & 0x3;
|
||||||
|
float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f);
|
||||||
|
RwRGBA& particleColor = nFrameGen & 1 ? primaryColor1 : primaryColor2;
|
||||||
|
CParticle::AddParticle(PARTICLE_CAR_DEBRIS, particlePos, particleDir, nil, fSize, particleColor, nRotationSpeed, 0, nCurFrame, 0);
|
||||||
|
if ((i % 7) == 0) {
|
||||||
|
static RwRGBA secondaryColor = { 0x9A, 0x99, 0x99, 0x3E };
|
||||||
|
CParticle::AddParticle(PARTICLE_DEBRIS, particlePos, particleDir, nil, 0.3, secondaryColor, nRotationSpeed, 0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PlayOneShotScriptObject(SCRIPT_SOUND_BOX_DESTROYED_2, vecPos);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DAMAGE_EFFECT_SMASH_BLACKBAG:
|
||||||
|
case DAMAGE_EFFECT_SMASH_BEACHLOUNGE_WOOD:
|
||||||
|
case DAMAGE_EFFECT_SMASH_BEACHLOUNGE_TOWEL:
|
||||||
|
{
|
||||||
|
bIsVisible = false;
|
||||||
|
bUsesCollision = false;
|
||||||
|
if (!GetIsStatic()) {
|
||||||
|
RemoveFromMovingList();
|
||||||
|
}
|
||||||
|
SetIsStatic(true);
|
||||||
|
bExplosionProof = true;
|
||||||
|
SetMoveSpeed(0.0f, 0.0f, 0.0f);
|
||||||
|
SetTurnSpeed(0.0f, 0.0f, 0.0f);
|
||||||
|
CRGBA possibleColor1;
|
||||||
|
CRGBA possibleColor2;
|
||||||
|
switch (m_nCollisionDamageEffect) {
|
||||||
|
case DAMAGE_EFFECT_SMASH_BLACKBAG:
|
||||||
|
possibleColor1 = CRGBA(0, 0, 0, 0xFF);
|
||||||
|
possibleColor2 = possibleColor1;
|
||||||
|
break;
|
||||||
|
case DAMAGE_EFFECT_SMASH_BEACHLOUNGE_WOOD:
|
||||||
|
possibleColor1 = CRGBA(0x8F, 0x8A, 0x8C, 0xFF);
|
||||||
|
possibleColor2 = CRGBA(0x73, 0x75, 0x7B, 0xFF);
|
||||||
|
break;
|
||||||
|
case DAMAGE_EFFECT_SMASH_BEACHLOUNGE_TOWEL:
|
||||||
|
possibleColor1 = CRGBA(0x52, 0x92, 0x4A, 0xFF);
|
||||||
|
possibleColor2 = CRGBA(0xCE, 0xCF, 0xCE, 0xFF);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for (int32 i = 0; i < 16; i++) {
|
||||||
|
CVector vecDir(
|
||||||
|
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||||
|
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||||
|
CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ
|
||||||
|
);
|
||||||
|
++nFrameGen;
|
||||||
|
int32 nCurFrame = nFrameGen & 0x3;
|
||||||
|
CRGBA &selectedColor = nFrameGen & 0x1 ? possibleColor1 : possibleColor2;
|
||||||
|
float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.20f);
|
||||||
|
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 40);
|
||||||
|
CParticle::AddParticle(PARTICLE_CAR_DEBRIS, vecPos, vecDir, nil, fSize, selectedColor, nRotationSpeed, 0, nCurFrame, 0);
|
||||||
|
}
|
||||||
|
if (m_nCollisionDamageEffect == DAMAGE_EFFECT_SMASH_BLACKBAG) {
|
||||||
|
PlayOneShotScriptObject(SCRIPT_SOUND_BOX_DESTROYED_2, vecPos);
|
||||||
|
} else if (m_nCollisionDamageEffect == DAMAGE_EFFECT_SMASH_BEACHLOUNGE_WOOD) {
|
||||||
|
PlayOneShotScriptObject(SCRIPT_SOUND_METAL_COLLISION, vecPos);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
DEV("Unhandled collision damage effect id: %d\n", m_nCollisionDamageEffect);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -447,8 +745,8 @@ CObject::Init(void)
|
||||||
m_nCostValue = 0;
|
m_nCostValue = 0;
|
||||||
m_pCollidingEntity = nil;
|
m_pCollidingEntity = nil;
|
||||||
CColPoint point;
|
CColPoint point;
|
||||||
CEntity* outEntity = nil;
|
CEntity *outEntity = nil;
|
||||||
const CVector& vecPos = m_matrix.GetPosition();
|
const CVector &vecPos = m_matrix.GetPosition();
|
||||||
if (CWorld::ProcessVerticalLine(vecPos, vecPos.z - 10.0f, point, outEntity, true, false, false, false, false, false, nil))
|
if (CWorld::ProcessVerticalLine(vecPos, vecPos.z - 10.0f, point, outEntity, true, false, false, false, false, false, nil))
|
||||||
m_pCurSurface = outEntity;
|
m_pCurSurface = outEntity;
|
||||||
else
|
else
|
||||||
|
@ -457,7 +755,7 @@ CObject::Init(void)
|
||||||
if (GetModelIndex() == MI_BUOY)
|
if (GetModelIndex() == MI_BUOY)
|
||||||
bTouchingWater = true;
|
bTouchingWater = true;
|
||||||
|
|
||||||
if(CModelInfo::GetModelInfo(GetModelIndex())->GetModelType() == MITYPE_WEAPON)
|
if (CModelInfo::GetModelInfo(GetModelIndex())->GetModelType() == MITYPE_WEAPON)
|
||||||
bIsWeapon = true;
|
bIsWeapon = true;
|
||||||
bIsStreetLight = IsLightObject(GetModelIndex());
|
bIsStreetLight = IsLightObject(GetModelIndex());
|
||||||
|
|
||||||
|
@ -486,9 +784,9 @@ CObject::CanBeDeleted(void)
|
||||||
void
|
void
|
||||||
CObject::DeleteAllMissionObjects()
|
CObject::DeleteAllMissionObjects()
|
||||||
{
|
{
|
||||||
CObjectPool* objectPool = CPools::GetObjectPool();
|
CObjectPool *objectPool = CPools::GetObjectPool();
|
||||||
for (int32 i = 0; i < objectPool->GetSize(); i++) {
|
for (int32 i = 0; i < objectPool->GetSize(); i++) {
|
||||||
CObject* pObject = objectPool->GetSlot(i);
|
CObject *pObject = objectPool->GetSlot(i);
|
||||||
if (pObject && pObject->ObjectCreatedBy == MISSION_OBJECT) {
|
if (pObject && pObject->ObjectCreatedBy == MISSION_OBJECT) {
|
||||||
CWorld::Remove(pObject);
|
CWorld::Remove(pObject);
|
||||||
delete pObject;
|
delete pObject;
|
||||||
|
@ -499,9 +797,9 @@ CObject::DeleteAllMissionObjects()
|
||||||
void
|
void
|
||||||
CObject::DeleteAllTempObjects()
|
CObject::DeleteAllTempObjects()
|
||||||
{
|
{
|
||||||
CObjectPool* objectPool = CPools::GetObjectPool();
|
CObjectPool *objectPool = CPools::GetObjectPool();
|
||||||
for (int32 i = 0; i < objectPool->GetSize(); i++) {
|
for (int32 i = 0; i < objectPool->GetSize(); i++) {
|
||||||
CObject* pObject = objectPool->GetSlot(i);
|
CObject *pObject = objectPool->GetSlot(i);
|
||||||
if (pObject && pObject->ObjectCreatedBy == TEMP_OBJECT) {
|
if (pObject && pObject->ObjectCreatedBy == TEMP_OBJECT) {
|
||||||
CWorld::Remove(pObject);
|
CWorld::Remove(pObject);
|
||||||
delete pObject;
|
delete pObject;
|
||||||
|
@ -515,7 +813,7 @@ CObject::DeleteAllTempObjectsInArea(CVector point, float fRadius)
|
||||||
CObjectPool *objectPool = CPools::GetObjectPool();
|
CObjectPool *objectPool = CPools::GetObjectPool();
|
||||||
for (int32 i = 0; i < objectPool->GetSize(); i++) {
|
for (int32 i = 0; i < objectPool->GetSize(); i++) {
|
||||||
CObject *pObject = objectPool->GetSlot(i);
|
CObject *pObject = objectPool->GetSlot(i);
|
||||||
if (pObject && pObject->ObjectCreatedBy == TEMP_OBJECT && fRadius * fRadius > pObject->GetPosition().MagnitudeSqr()) {
|
if (pObject && pObject->ObjectCreatedBy == TEMP_OBJECT && (point - pObject->GetPosition()).MagnitudeSqr() < SQR(fRadius)) {
|
||||||
CWorld::Remove(pObject);
|
CWorld::Remove(pObject);
|
||||||
delete pObject;
|
delete pObject;
|
||||||
}
|
}
|
||||||
|
@ -523,7 +821,7 @@ CObject::DeleteAllTempObjectsInArea(CVector point, float fRadius)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
IsObjectPointerValid(CObject* pObject)
|
IsObjectPointerValid(CObject *pObject)
|
||||||
{
|
{
|
||||||
if (!pObject)
|
if (!pObject)
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -32,23 +32,23 @@ enum CollisionDamageEffect
|
||||||
DAMAGE_EFFECT_CHANGE_THEN_SMASH,
|
DAMAGE_EFFECT_CHANGE_THEN_SMASH,
|
||||||
|
|
||||||
DAMAGE_EFFECT_SMASH_CARDBOARD_COMPLETELY = 50,
|
DAMAGE_EFFECT_SMASH_CARDBOARD_COMPLETELY = 50,
|
||||||
DAMAGE_EFFECT_SMASH_YELLOW_TARGET_COMPLETELY,
|
DAMAGE_EFFECT_SMASH_YELLOW_TARGET_COMPLETELY = 51,
|
||||||
|
|
||||||
DAMAGE_EFFECT_SMASH_WOODENBOX_COMPLETELY = 60,
|
DAMAGE_EFFECT_SMASH_WOODENBOX_COMPLETELY = 60,
|
||||||
DAMAGE_EFFECT_SMASH_TRAFFICCONE_COMPLETELY = 70,
|
DAMAGE_EFFECT_SMASH_TRAFFICCONE_COMPLETELY = 70,
|
||||||
DAMAGE_EFFECT_SMASH_BARPOST_COMPLETELY = 80,
|
DAMAGE_EFFECT_SMASH_BARPOST_COMPLETELY = 80,
|
||||||
|
|
||||||
DAMAGE_EFFECT_SMASH_NEWSTANDNEW1 = 91,
|
DAMAGE_EFFECT_SMASH_NEWSTANDNEW1 = 91,
|
||||||
DAMAGE_EFFECT_SMASH_NEWSTANDNEW21,
|
DAMAGE_EFFECT_SMASH_NEWSTANDNEW2 = 92,
|
||||||
DAMAGE_EFFECT_SMASH_NEWSTANDNEW31,
|
DAMAGE_EFFECT_SMASH_NEWSTANDNEW3 = 93,
|
||||||
DAMAGE_EFFECT_SMASH_NEWSTANDNEW41,
|
DAMAGE_EFFECT_SMASH_NEWSTANDNEW4 = 94,
|
||||||
DAMAGE_EFFECT_SMASH_NEWSTANDNEW51,
|
DAMAGE_EFFECT_SMASH_NEWSTANDNEW5 = 95,
|
||||||
|
|
||||||
DAMAGE_EFFECT_SMASH_BLACKBAG = 100,
|
DAMAGE_EFFECT_SMASH_BLACKBAG = 100,
|
||||||
DAMAGE_EFFECT_SMASH_VEGPALM = 110,
|
DAMAGE_EFFECT_SMASH_VEGPALM = 110,
|
||||||
DAMAGE_EFFECT_BURST_BEACHBALL = 120,
|
DAMAGE_EFFECT_BURST_BEACHBALL = 120,
|
||||||
DAMAGE_EFFECT_SMASH_BEACHLOUNGE_WOOD = 131,
|
DAMAGE_EFFECT_SMASH_BEACHLOUNGE_WOOD = 131,
|
||||||
DAMAGE_EFFECT_SMASH_BEACHLOUNGE_TOWEL,
|
DAMAGE_EFFECT_SMASH_BEACHLOUNGE_TOWEL = 132,
|
||||||
};
|
};
|
||||||
|
|
||||||
class CVehicle;
|
class CVehicle;
|
||||||
|
@ -76,7 +76,7 @@ public:
|
||||||
uint8 m_nCollisionDamageEffect;
|
uint8 m_nCollisionDamageEffect;
|
||||||
uint8 m_nSpecialCollisionResponseCases;
|
uint8 m_nSpecialCollisionResponseCases;
|
||||||
bool m_bCameraToAvoidThisObject;
|
bool m_bCameraToAvoidThisObject;
|
||||||
int8 m_nBeachballBounces;
|
uint8 m_nBeachballBounces;
|
||||||
uint32 m_obj_unused1;
|
uint32 m_obj_unused1;
|
||||||
uint32 m_nEndOfLifeTime;
|
uint32 m_nEndOfLifeTime;
|
||||||
int16 m_nRefModelIndex;
|
int16 m_nRefModelIndex;
|
||||||
|
|
|
@ -52,7 +52,7 @@ enum eFormation
|
||||||
FORMATION_FRONT
|
FORMATION_FRONT
|
||||||
};
|
};
|
||||||
|
|
||||||
enum FightState : int8 {
|
enum FightState {
|
||||||
FIGHTSTATE_MOVE_FINISHED = -2,
|
FIGHTSTATE_MOVE_FINISHED = -2,
|
||||||
FIGHTSTATE_JUST_ATTACKED,
|
FIGHTSTATE_JUST_ATTACKED,
|
||||||
FIGHTSTATE_NO_MOVE,
|
FIGHTSTATE_NO_MOVE,
|
||||||
|
@ -187,7 +187,7 @@ enum eWaitState {
|
||||||
WAITSTATE_PLAYANIM_HANDSUP_SIMPLE,
|
WAITSTATE_PLAYANIM_HANDSUP_SIMPLE,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum eObjective : uint32 {
|
enum eObjective {
|
||||||
OBJECTIVE_NONE,
|
OBJECTIVE_NONE,
|
||||||
OBJECTIVE_WAIT_ON_FOOT,
|
OBJECTIVE_WAIT_ON_FOOT,
|
||||||
OBJECTIVE_WAIT_ON_FOOT_FOR_COP,
|
OBJECTIVE_WAIT_ON_FOOT_FOR_COP,
|
||||||
|
@ -271,7 +271,7 @@ enum PedOnGroundState {
|
||||||
PED_DEAD_ON_THE_FLOOR
|
PED_DEAD_ON_THE_FLOOR
|
||||||
};
|
};
|
||||||
|
|
||||||
enum PointBlankNecessity : uint8 {
|
enum PointBlankNecessity {
|
||||||
NO_POINT_BLANK_PED,
|
NO_POINT_BLANK_PED,
|
||||||
POINT_BLANK_FOR_WANTED_PED,
|
POINT_BLANK_FOR_WANTED_PED,
|
||||||
POINT_BLANK_FOR_SOMEONE_ELSE
|
POINT_BLANK_FOR_SOMEONE_ELSE
|
||||||
|
@ -598,7 +598,7 @@ public:
|
||||||
uint32 m_curFightMove;
|
uint32 m_curFightMove;
|
||||||
uint32 m_lastFightMove;
|
uint32 m_lastFightMove;
|
||||||
uint8 m_fightButtonPressure;
|
uint8 m_fightButtonPressure;
|
||||||
FightState m_fightState;
|
int8 m_fightState;
|
||||||
bool m_takeAStepAfterAttack;
|
bool m_takeAStepAfterAttack;
|
||||||
uint8 m_bleedCounter;
|
uint8 m_bleedCounter;
|
||||||
CFire *m_pFire;
|
CFire *m_pFire;
|
||||||
|
@ -729,7 +729,7 @@ public:
|
||||||
CPed *CheckForDeadPeds(void);
|
CPed *CheckForDeadPeds(void);
|
||||||
bool CheckForExplosions(CVector2D &area);
|
bool CheckForExplosions(CVector2D &area);
|
||||||
CPed *CheckForGunShots(void);
|
CPed *CheckForGunShots(void);
|
||||||
PointBlankNecessity CheckForPointBlankPeds(CPed*);
|
uint8 CheckForPointBlankPeds(CPed*);
|
||||||
bool CheckIfInTheAir(void);
|
bool CheckIfInTheAir(void);
|
||||||
void ClearAll(void);
|
void ClearAll(void);
|
||||||
void SetPointGunAt(CEntity*);
|
void SetPointGunAt(CEntity*);
|
||||||
|
|
|
@ -367,7 +367,7 @@ CPed::SetAttack(CEntity *victim)
|
||||||
if (IsPlayer())
|
if (IsPlayer())
|
||||||
CPad::GetPad(0)->ResetAverageWeapon();
|
CPad::GetPad(0)->ResetAverageWeapon();
|
||||||
|
|
||||||
PointBlankNecessity pointBlankStatus;
|
uint8 pointBlankStatus;
|
||||||
if ((curWeapon->m_eWeaponFire == WEAPON_FIRE_INSTANT_HIT || GetWeapon()->m_eWeaponType == WEAPONTYPE_FLAMETHROWER)
|
if ((curWeapon->m_eWeaponFire == WEAPON_FIRE_INSTANT_HIT || GetWeapon()->m_eWeaponType == WEAPONTYPE_FLAMETHROWER)
|
||||||
&& TheCamera.PlayerWeaponMode.Mode != CCam::MODE_M16_1STPERSON
|
&& TheCamera.PlayerWeaponMode.Mode != CCam::MODE_M16_1STPERSON
|
||||||
&& TheCamera.PlayerWeaponMode.Mode != CCam::MODE_M16_1STPERSON_RUNABOUT
|
&& TheCamera.PlayerWeaponMode.Mode != CCam::MODE_M16_1STPERSON_RUNABOUT
|
||||||
|
@ -611,7 +611,7 @@ CPed::FinishedReloadCB(CAnimBlendAssociation *reloadAssoc, void *arg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// --MIAMI: Done
|
// --MIAMI: Done
|
||||||
PointBlankNecessity
|
uint8
|
||||||
CPed::CheckForPointBlankPeds(CPed *pedToVerify)
|
CPed::CheckForPointBlankPeds(CPed *pedToVerify)
|
||||||
{
|
{
|
||||||
float pbDistance = 1.1f;
|
float pbDistance = 1.1f;
|
||||||
|
|
|
@ -374,7 +374,11 @@ CFont::PrintChar(float x, float y, wchar c)
|
||||||
if(Details.style == FONT_BANK || Details.style == FONT_STANDARD){
|
if(Details.style == FONT_BANK || Details.style == FONT_STANDARD){
|
||||||
if (bDontPrint) return;
|
if (bDontPrint) return;
|
||||||
if (RenderState.slant == 0.0f) {
|
if (RenderState.slant == 0.0f) {
|
||||||
|
#ifdef FIX_BUGS
|
||||||
|
if (c < 192) {
|
||||||
|
#else
|
||||||
if (c < 193) {
|
if (c < 193) {
|
||||||
|
#endif
|
||||||
CSprite2d::AddToBuffer(
|
CSprite2d::AddToBuffer(
|
||||||
CRect(x, y,
|
CRect(x, y,
|
||||||
x + 32.0f * RenderState.scaleX * 1.0f,
|
x + 32.0f * RenderState.scaleX * 1.0f,
|
||||||
|
@ -390,9 +394,9 @@ CFont::PrintChar(float x, float y, wchar c)
|
||||||
x + 32.0f * RenderState.scaleX * 1.0f,
|
x + 32.0f * RenderState.scaleX * 1.0f,
|
||||||
y + 33.0f * RenderState.scaleY * 0.5f),
|
y + 33.0f * RenderState.scaleY * 0.5f),
|
||||||
RenderState.color,
|
RenderState.color,
|
||||||
xoff / 16.0f, yoff / 12.8f,
|
xoff / 16.0f, yoff / 12.8f + 0.0021f,
|
||||||
(xoff + 1.0f) / 16.0f - 0.001f, yoff / 12.8f - 0.017f,
|
(xoff + 1.0f) / 16.0f - 0.001f, yoff / 12.8f + 0.0021f,
|
||||||
xoff / 16.0f, (yoff + 1.0f) / 12.8f,
|
xoff / 16.0f, (yoff + 1.0f) / 12.8f - 0.017f,
|
||||||
(xoff + 1.0f) / 16.0f - 0.001f, (yoff + 1.0f) / 12.8f - 0.017f);
|
(xoff + 1.0f) / 16.0f - 0.001f, (yoff + 1.0f) / 12.8f - 0.017f);
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
|
|
|
@ -202,7 +202,7 @@ CVector vecTestResistance(0.9995f, 0.9f, 0.95f);
|
||||||
float fDAxisX = 1.0f;
|
float fDAxisX = 1.0f;
|
||||||
float fDAxisXExtra = 100.0f;
|
float fDAxisXExtra = 100.0f;
|
||||||
float fDAxisY = 1000.0f;
|
float fDAxisY = 1000.0f;
|
||||||
float fInAirXRes = 0.88f;
|
float fInAirXRes = 0.98f;
|
||||||
float fFlySpeedMult = -0.6f;
|
float fFlySpeedMult = -0.6f;
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1213,7 +1213,8 @@ CBike::ProcessControl(void)
|
||||||
|
|
||||||
// Balance bike
|
// Balance bike
|
||||||
if(bBalancedByRider || bIsBeingPickedUp || bIsStanding){
|
if(bBalancedByRider || bIsBeingPickedUp || bIsStanding){
|
||||||
float onSideness = clamp(DotProduct(GetRight(), m_vecAvgSurfaceNormal), -1.0f, 1.0f);
|
float onSideness = DotProduct(GetRight(), m_vecAvgSurfaceNormal);
|
||||||
|
onSideness = clamp(onSideness, -1.0f, 1.0f);
|
||||||
CVector worldCOM = Multiply3x3(GetMatrix(), m_vecCentreOfMass);
|
CVector worldCOM = Multiply3x3(GetMatrix(), m_vecCentreOfMass);
|
||||||
// Keep bike upright
|
// Keep bike upright
|
||||||
if(bBalancedByRider){
|
if(bBalancedByRider){
|
||||||
|
|
|
@ -629,11 +629,11 @@ void CCranes::Save(uint8* buf, uint32* size)
|
||||||
for (int i = 0; i < NUM_CRANES; i++) {
|
for (int i = 0; i < NUM_CRANES; i++) {
|
||||||
CCrane *pCrane = WriteSaveBuf(buf, aCranes[i]);
|
CCrane *pCrane = WriteSaveBuf(buf, aCranes[i]);
|
||||||
if (pCrane->m_pCraneEntity != nil)
|
if (pCrane->m_pCraneEntity != nil)
|
||||||
pCrane->m_pCraneEntity = (CBuilding*)(CPools::GetBuildingPool()->GetJustIndex(pCrane->m_pCraneEntity) + 1);
|
pCrane->m_pCraneEntity = (CBuilding*)(CPools::GetBuildingPool()->GetJustIndex_NoFreeAssert(pCrane->m_pCraneEntity) + 1);
|
||||||
if (pCrane->m_pHook != nil)
|
if (pCrane->m_pHook != nil)
|
||||||
pCrane->m_pHook = (CObject*)(CPools::GetObjectPool()->GetJustIndex(pCrane->m_pHook) + 1);
|
pCrane->m_pHook = (CObject*)(CPools::GetObjectPool()->GetJustIndex_NoFreeAssert(pCrane->m_pHook) + 1);
|
||||||
if (pCrane->m_pVehiclePickedUp != nil)
|
if (pCrane->m_pVehiclePickedUp != nil)
|
||||||
pCrane->m_pVehiclePickedUp = (CVehicle*)(CPools::GetVehiclePool()->GetJustIndex(pCrane->m_pVehiclePickedUp) + 1);
|
pCrane->m_pVehiclePickedUp = (CVehicle*)(CPools::GetVehiclePool()->GetJustIndex_NoFreeAssert(pCrane->m_pVehiclePickedUp) + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
VALIDATESAVEBUF(*size);
|
VALIDATESAVEBUF(*size);
|
||||||
|
|
|
@ -11,7 +11,7 @@ class CBuilding;
|
||||||
class CCrane
|
class CCrane
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum CraneState : uint8 {
|
enum CraneState {
|
||||||
IDLE = 0,
|
IDLE = 0,
|
||||||
GOING_TOWARDS_TARGET = 1,
|
GOING_TOWARDS_TARGET = 1,
|
||||||
LIFTING_TARGET = 2,
|
LIFTING_TARGET = 2,
|
||||||
|
@ -19,7 +19,7 @@ public:
|
||||||
ROTATING_TARGET = 4,
|
ROTATING_TARGET = 4,
|
||||||
DROPPING_TARGET = 5
|
DROPPING_TARGET = 5
|
||||||
};
|
};
|
||||||
enum CraneStatus : uint8 {
|
enum CraneStatus {
|
||||||
NONE = 0,
|
NONE = 0,
|
||||||
ACTIVATED = 1,
|
ACTIVATED = 1,
|
||||||
DEACTIVATED = 2
|
DEACTIVATED = 2
|
||||||
|
@ -46,8 +46,8 @@ public:
|
||||||
CVector2D m_vecHookVelocity;
|
CVector2D m_vecHookVelocity;
|
||||||
CVehicle *m_pVehiclePickedUp;
|
CVehicle *m_pVehiclePickedUp;
|
||||||
uint32 m_nTimeForNextCheck;
|
uint32 m_nTimeForNextCheck;
|
||||||
CraneStatus m_nCraneStatus;
|
uint8 m_nCraneStatus;
|
||||||
CraneState m_nCraneState;
|
uint8 m_nCraneState;
|
||||||
uint8 m_nVehiclesCollected;
|
uint8 m_nVehiclesCollected;
|
||||||
bool m_bIsCrusher;
|
bool m_bIsCrusher;
|
||||||
bool m_bIsMilitaryCrane;
|
bool m_bIsMilitaryCrane;
|
||||||
|
|
|
@ -281,7 +281,7 @@ public:
|
||||||
int8 m_comedyControlState;
|
int8 m_comedyControlState;
|
||||||
CStoredCollPoly m_aCollPolys[2]; // poly which is under front/rear part of car
|
CStoredCollPoly m_aCollPolys[2]; // poly which is under front/rear part of car
|
||||||
float m_fSteerInput;
|
float m_fSteerInput;
|
||||||
eVehicleType m_vehType;
|
uint8 m_vehType;
|
||||||
|
|
||||||
static void *operator new(size_t);
|
static void *operator new(size_t);
|
||||||
static void *operator new(size_t sz, int slot);
|
static void *operator new(size_t sz, int slot);
|
||||||
|
|
|
@ -1457,7 +1457,8 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim,
|
||||||
|
|
||||||
#ifndef FIX_BUGS
|
#ifndef FIX_BUGS
|
||||||
CVector dist = point->point - (*source);
|
CVector dist = point->point - (*source);
|
||||||
CVector smokePos = point->point - Max(0.1f * dist.Magnitude(), 0.2f) / dist.Magnitude();
|
float distMagnitude = dist.Magnitude();
|
||||||
|
CVector smokePos = point->point - Max(distMagnitude / 10.0f, 0.2f) * dist / distMagnitude;
|
||||||
#else
|
#else
|
||||||
CVector smokePos = point->point;
|
CVector smokePos = point->point;
|
||||||
#endif // !FIX_BUGS
|
#endif // !FIX_BUGS
|
||||||
|
@ -1486,9 +1487,9 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim,
|
||||||
CParticle::AddParticle(PARTICLE_SPARK, point->point, point->normal * 0.05f);
|
CParticle::AddParticle(PARTICLE_SPARK, point->point, point->normal * 0.05f);
|
||||||
|
|
||||||
#ifndef FIX_BUGS
|
#ifndef FIX_BUGS
|
||||||
CVector dist = point.point - (*fireSource);
|
CVector dist = point->point - (*source);
|
||||||
CVector offset = dist - Max(0.2f * dist.Magnitude(), 0.5f) * CVector(ahead.x, ahead.y, 0.0f);
|
CVector offset = dist - Max(0.2f * dist.Magnitude(), 0.5f) * CVector(ahead.x, ahead.y, 0.0f);
|
||||||
CVector smokePos = *fireSource + offset;
|
CVector smokePos = *source + offset;
|
||||||
#else
|
#else
|
||||||
CVector smokePos = point->point;
|
CVector smokePos = point->point;
|
||||||
#endif
|
#endif
|
||||||
|
|
14400
utils/gxt/american.txt
Normal file
14400
utils/gxt/american.txt
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,7 +1,5 @@
|
||||||
gxt -g III -i "american.txt" -o "../../gamefiles/TEXT/american.gxt"
|
gxt -g VC -i "american.txt" -o "../../gamefiles/TEXT/american.gxt"
|
||||||
gxt -g III -i "english.txt" -o "../../gamefiles/TEXT/english.gxt"
|
gxt -g VC -i "french.txt" -o "../../gamefiles/TEXT/french.gxt"
|
||||||
gxt -g III -i "french.txt" -o "../../gamefiles/TEXT/french.gxt"
|
gxt -g VC -i "german.txt" -o "../../gamefiles/TEXT/german.gxt"
|
||||||
gxt -g III -i "german.txt" -o "../../gamefiles/TEXT/german.gxt"
|
gxt -g VC -i "italian.txt" -o "../../gamefiles/TEXT/italian.gxt"
|
||||||
gxt -g III -i "italian.txt" -o "../../gamefiles/TEXT/italian.gxt"
|
gxt -g VC -i "spanish.txt" -o "../../gamefiles/TEXT/spanish.gxt"
|
||||||
gxt -g III -i "spanish.txt" -o "../../gamefiles/TEXT/spanish.gxt"
|
|
||||||
gxt -g III -r -i "russian.txt" -o "../../gamefiles/TEXT/russian.gxt"
|
|
14562
utils/gxt/french.txt
Normal file
14562
utils/gxt/french.txt
Normal file
File diff suppressed because it is too large
Load diff
14562
utils/gxt/german.txt
Normal file
14562
utils/gxt/german.txt
Normal file
File diff suppressed because it is too large
Load diff
14571
utils/gxt/italian.txt
Normal file
14571
utils/gxt/italian.txt
Normal file
File diff suppressed because it is too large
Load diff
14583
utils/gxt/spanish.txt
Normal file
14583
utils/gxt/spanish.txt
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue