mirror of https://github.com/GTAmodding/re3.git
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%"
|
|
@ -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
|
||||
[![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>
|
||||
| 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
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -47,8 +47,8 @@ const int channels = ARRAY_SIZE(cAudioManager::m_asActiveSamples);
|
|||
const int policeChannel = channels + 1;
|
||||
const int allChannels = channels + 2;
|
||||
|
||||
enum PLAY_STATUS : uint8 { 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 PLAY_STATUS { PLAY_STATUS_STOPPED = 0, PLAY_STATUS_PLAYING, PLAY_STATUS_FINISHED };
|
||||
enum LOADING_STATUS { LOADING_STATUS_NOT_LOADED = 0, LOADING_STATUS_LOADED, LOADING_STATUS_FAILED };
|
||||
|
||||
void
|
||||
cAudioManager::PreInitialiseGameSpecificSetup() const
|
||||
|
@ -9020,7 +9020,7 @@ cAudioManager::ProcessGarages()
|
|||
const float SOUND_INTENSITY = 80.0f;
|
||||
|
||||
CEntity *entity;
|
||||
eGarageState state;
|
||||
uint8 state;
|
||||
uint32 sampleIndex;
|
||||
uint8 j;
|
||||
float distSquared;
|
||||
|
|
|
@ -149,7 +149,7 @@ public:
|
|||
class cVehicleParams
|
||||
{
|
||||
public:
|
||||
eVehicleType m_VehicleType;
|
||||
uint8 m_VehicleType;
|
||||
bool m_bDistanceCalculated;
|
||||
float m_fDistance;
|
||||
CVehicle *m_pVehicle;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
#include "common.h"
|
||||
|
||||
enum eSfxSample : uint32 {
|
||||
enum eSfxSample {
|
||||
SFX_CAR_HORN_JEEP = 0,
|
||||
SFX_CAR_HORN_BMW328,
|
||||
SFX_CAR_HORN_BUS,
|
||||
|
|
|
@ -1274,7 +1274,7 @@ enum AudioEntityHandle {
|
|||
AEHANDLE_ERROR_BADAUDIOTYPE = -1,
|
||||
};
|
||||
|
||||
enum eAudioType : int32
|
||||
enum eAudioType
|
||||
{
|
||||
AUDIOTYPE_PHYSICAL = 0,
|
||||
AUDIOTYPE_EXPLOSION,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
enum eSound : uint16
|
||||
enum eSound
|
||||
{
|
||||
SOUND_CAR_DOOR_CLOSE_BONNET = 0,
|
||||
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_PART_MISSION_COMPLETE,
|
||||
SCRIPT_SOUND_POLICE_CELL_DOOR_SLIDING_LOOP,
|
||||
|
|
|
@ -109,9 +109,9 @@ void CAutoPilot::Load(uint8*& buf)
|
|||
m_nNextDirection = ReadSaveBuf<int8>(buf);
|
||||
m_nCurrentLane = ReadSaveBuf<int8>(buf);
|
||||
m_nNextLane = ReadSaveBuf<int8>(buf);
|
||||
m_nDrivingStyle = (eCarDrivingStyle)ReadSaveBuf<uint8>(buf);
|
||||
m_nCarMission = (eCarMission)ReadSaveBuf<uint8>(buf);
|
||||
m_nTempAction = (eCarTempAction)ReadSaveBuf<uint8>(buf);
|
||||
m_nDrivingStyle = ReadSaveBuf<uint8>(buf);
|
||||
m_nCarMission = ReadSaveBuf<uint8>(buf);
|
||||
m_nTempAction = ReadSaveBuf<uint8>(buf);
|
||||
m_nTimeTempAction = ReadSaveBuf<uint32>(buf);
|
||||
m_fMaxTrafficSpeed = ReadSaveBuf<float>(buf);
|
||||
m_nCruiseSpeed = ReadSaveBuf<uint8>(buf);
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
class CVehicle;
|
||||
struct CPathNode;
|
||||
|
||||
enum eCarMission : uint8
|
||||
enum eCarMission
|
||||
{
|
||||
MISSION_NONE,
|
||||
MISSION_CRUISE,
|
||||
|
@ -35,7 +35,7 @@ enum eCarMission : uint8
|
|||
MISSION_BLOCKPLAYER_FORWARDANDBACK
|
||||
};
|
||||
|
||||
enum eCarTempAction : uint8
|
||||
enum eCarTempAction
|
||||
{
|
||||
TEMPACT_NONE,
|
||||
TEMPACT_WAIT,
|
||||
|
@ -50,7 +50,7 @@ enum eCarTempAction : uint8
|
|||
TEMPACT_SWERVERIGHT
|
||||
};
|
||||
|
||||
enum eCarDrivingStyle : uint8
|
||||
enum eCarDrivingStyle
|
||||
{
|
||||
DRIVINGSTYLE_STOP_FOR_CARS,
|
||||
DRIVINGSTYLE_SLOW_DOWN_FOR_CARS,
|
||||
|
@ -76,9 +76,9 @@ public:
|
|||
int8 m_nNextDirection;
|
||||
int8 m_nCurrentLane;
|
||||
int8 m_nNextLane;
|
||||
eCarDrivingStyle m_nDrivingStyle;
|
||||
eCarMission m_nCarMission;
|
||||
eCarTempAction m_nTempAction;
|
||||
uint8 m_nDrivingStyle;
|
||||
uint8 m_nCarMission;
|
||||
uint8 m_nTempAction;
|
||||
uint32 m_nTimeTempAction;
|
||||
float m_fMaxTrafficSpeed;
|
||||
uint8 m_nCruiseSpeed;
|
||||
|
|
|
@ -634,7 +634,7 @@ void CCarAI::TellCarToBlockOtherCar(CVehicle* pVehicle, CVehicle* pTarget)
|
|||
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){
|
||||
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) {
|
||||
case 0:
|
||||
|
|
|
@ -22,8 +22,8 @@ public:
|
|||
static void TellOccupantsToFleeCar(CVehicle*);
|
||||
static void TellCarToRamOtherCar(CVehicle*, CVehicle*);
|
||||
static void TellCarToBlockOtherCar(CVehicle*, CVehicle*);
|
||||
static eCarMission FindPoliceCarMissionForWantedLevel();
|
||||
static eCarMission FindPoliceBoatMissionForWantedLevel();
|
||||
static uint8 FindPoliceCarMissionForWantedLevel();
|
||||
static uint8 FindPoliceBoatMissionForWantedLevel();
|
||||
static int32 FindPoliceCarSpeedForWantedLevel(CVehicle*);
|
||||
static void MellowOutChaseSpeed(CVehicle*);
|
||||
static void MellowOutChaseSpeedBoat(CVehicle*);
|
||||
|
|
|
@ -442,6 +442,11 @@ CCarCtrl::GenerateOneRandomCar()
|
|||
pVehicle->GetRight() = CVector(forwardY, -forwardX, 0.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
|
||||
CCarPathLink* pCurrentLink;
|
||||
CCarPathLink* pNextLink;
|
||||
|
@ -452,10 +457,6 @@ CCarCtrl::GenerateOneRandomCar()
|
|||
float directionNextLinkX;
|
||||
float directionNextLinkY;
|
||||
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];
|
||||
pNextLink = &ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo];
|
||||
|
@ -486,11 +487,6 @@ CCarCtrl::GenerateOneRandomCar()
|
|||
pVehicle->AutoPilot.m_nTimeEnteredCurve = CTimer::GetTimeInMilliseconds() -
|
||||
(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];
|
||||
pNextLink = &ThePaths.m_carPathLinks[pVehicle->AutoPilot.m_nNextPathNodeInfo];
|
||||
positionOnCurrentLinkIncludingLane = CVector(
|
||||
|
@ -1907,7 +1903,6 @@ void CCarCtrl::PickNextNodeRandomly(CVehicle* pVehicle)
|
|||
}
|
||||
if (pVehicle->AutoPilot.m_bStayInFastLane)
|
||||
pVehicle->AutoPilot.m_nNextLane = 0;
|
||||
#ifdef FIX_BUGS
|
||||
CVector positionOnCurrentLinkIncludingLane(
|
||||
pCurLink->GetX() + ((pVehicle->AutoPilot.m_nCurrentLane + pCurLink->OneWayLaneOffset()) * LANE_WIDTH)
|
||||
#ifdef FIX_BUGS
|
||||
|
@ -1922,16 +1917,6 @@ void CCarCtrl::PickNextNodeRandomly(CVehicle* pVehicle)
|
|||
#endif
|
||||
,pNextLink->GetY() - ((pVehicle->AutoPilot.m_nNextLane + pNextLink->OneWayLaneOffset()) * LANE_WIDTH) * nextPathLinkForwardX,
|
||||
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 directionCurrentLinkY = pCurLink->GetDirY() * pVehicle->AutoPilot.m_nCurrentDirection;
|
||||
float directionNextLinkX = pNextLink->GetDirX() * pVehicle->AutoPilot.m_nNextDirection;
|
||||
|
|
|
@ -4,9 +4,7 @@
|
|||
#include "main.h"
|
||||
|
||||
#include "Bike.h"
|
||||
#ifdef FIX_BUGS
|
||||
#include "Boat.h"
|
||||
#endif
|
||||
#include "DMAudio.h"
|
||||
#include "General.h"
|
||||
#include "Font.h"
|
||||
|
@ -192,7 +190,7 @@ void CGarages::Update(void)
|
|||
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) {
|
||||
assert(0);
|
||||
|
@ -293,7 +291,7 @@ int16 CGarages::AddOne(float X1, float Y1, float Z1, float X2, float Y2, float X
|
|||
return NumGarages++;
|
||||
}
|
||||
|
||||
void CGarages::ChangeGarageType(int16 garage, eGarageType type, int32 mi)
|
||||
void CGarages::ChangeGarageType(int16 garage, uint8 type, int32 mi)
|
||||
{
|
||||
CGarage* pGarage = &aGarages[garage];
|
||||
pGarage->m_eGarageType = type;
|
||||
|
@ -1468,7 +1466,7 @@ static bool DoINeedToRefreshPointer(CEntity * pDoor, bool bIsDummy, uint8 nIndex
|
|||
bool bNeedToFindDoorEntities = false;
|
||||
if (pDoor) {
|
||||
if (bIsDummy) {
|
||||
if (CPools::GetDummyPool()->IsFreeSlot(CPools::GetDummyPool()->GetJustIndex((CDummy*)pDoor)))
|
||||
if (CPools::GetDummyPool()->IsFreeSlot(CPools::GetDummyPool()->GetJustIndex_NoFreeAssert((CDummy*)pDoor)))
|
||||
return true;
|
||||
if (nIndex != (CPools::GetDummyPool()->GetIndex((CDummy*)pDoor) & 0x7F))
|
||||
bNeedToFindDoorEntities = true;
|
||||
|
@ -1476,7 +1474,7 @@ static bool DoINeedToRefreshPointer(CEntity * pDoor, bool bIsDummy, uint8 nIndex
|
|||
return true;
|
||||
}
|
||||
else {
|
||||
if (CPools::GetObjectPool()->IsFreeSlot(CPools::GetObjectPool()->GetJustIndex((CObject*)pDoor)))
|
||||
if (CPools::GetObjectPool()->IsFreeSlot(CPools::GetObjectPool()->GetJustIndex_NoFreeAssert((CObject*)pDoor)))
|
||||
return true;
|
||||
if (nIndex != (CPools::GetObjectPool()->GetIndex((CObject*)pDoor) & 0x7F))
|
||||
bNeedToFindDoorEntities = true;
|
||||
|
@ -2074,7 +2072,7 @@ void CGarages::CloseHideOutGaragesBeforeSave()
|
|||
}
|
||||
}
|
||||
|
||||
int32 CGarages::CountCarsInHideoutGarage(eGarageType type)
|
||||
int32 CGarages::CountCarsInHideoutGarage(uint8 type)
|
||||
{
|
||||
int32 total = 0;
|
||||
for (int i = 0; i < NUM_GARAGE_STORED_CARS; i++) {
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
class CVehicle;
|
||||
class CCamera;
|
||||
|
||||
enum eGarageState : int8
|
||||
enum eGarageState
|
||||
{
|
||||
GS_FULLYCLOSED,
|
||||
GS_OPENED,
|
||||
|
@ -18,7 +18,7 @@ enum eGarageState : int8
|
|||
GS_AFTERDROPOFF,
|
||||
};
|
||||
|
||||
enum eGarageType : int8
|
||||
enum eGarageType
|
||||
{
|
||||
GARAGE_NONE,
|
||||
GARAGE_MISSION,
|
||||
|
@ -93,8 +93,8 @@ VALIDATE_SIZE(CStoredCar, 0x28);
|
|||
|
||||
class CGarage
|
||||
{
|
||||
eGarageType m_eGarageType;
|
||||
eGarageState m_eGarageState;
|
||||
uint8 m_eGarageType;
|
||||
uint8 m_eGarageState;
|
||||
uint8 m_nMaxStoredCars;
|
||||
bool field_2; // unused
|
||||
bool m_bClosingWithoutTargetCar;
|
||||
|
@ -148,8 +148,8 @@ class CGarage
|
|||
return Abs(TheCamera.GetPosition().x - GetGarageCenterX()) > SWITCH_GARAGE_DISTANCE_CLOSE ||
|
||||
Abs(TheCamera.GetPosition().y - GetGarageCenterY()) > SWITCH_GARAGE_DISTANCE_CLOSE;
|
||||
#else
|
||||
return Abs(TheCamera.GetPosition().x - m_fX1) > SWITCH_GARAGE_DISTANCE_CLOSE ||
|
||||
Abs(TheCamera.GetPosition().y - m_fY1) > SWITCH_GARAGE_DISTANCE_CLOSE;
|
||||
return Abs(TheCamera.GetPosition().x - m_fInfX) > SWITCH_GARAGE_DISTANCE_CLOSE ||
|
||||
Abs(TheCamera.GetPosition().y - m_fInfY) > SWITCH_GARAGE_DISTANCE_CLOSE;
|
||||
#endif
|
||||
}
|
||||
void TidyUpGarageClose();
|
||||
|
@ -227,8 +227,8 @@ public:
|
|||
#endif
|
||||
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 void ChangeGarageType(int16, eGarageType, int32);
|
||||
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, uint8, int32);
|
||||
static void PrintMessages(void);
|
||||
static void TriggerMessage(const char* text, int16, uint16 time, int16);
|
||||
static void SetTargetCarForMissonGarage(int16, CVehicle*);
|
||||
|
@ -265,9 +265,9 @@ private:
|
|||
static bool IsCarSprayable(CVehicle*);
|
||||
static float FindDoorHeightForMI(int32);
|
||||
static void CloseHideOutGaragesBeforeSave(void);
|
||||
static int32 CountCarsInHideoutGarage(eGarageType);
|
||||
static int32 GetBombTypeForGarageType(eGarageType type) { return type - GARAGE_BOMBSHOP1 + 1; }
|
||||
static int32 GetCarsCollectedIndexForGarageType(eGarageType type)
|
||||
static int32 CountCarsInHideoutGarage(uint8);
|
||||
static int32 GetBombTypeForGarageType(uint8 type) { return type - GARAGE_BOMBSHOP1 + 1; }
|
||||
static int32 GetCarsCollectedIndexForGarageType(uint8 type)
|
||||
{
|
||||
switch (type) {
|
||||
case GARAGE_COLLECTCARS_1: return 0;
|
||||
|
@ -278,7 +278,7 @@ private:
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
static int32 FindSafeHouseIndexForGarageType(eGarageType type)
|
||||
static int32 FindSafeHouseIndexForGarageType(uint8 type)
|
||||
{
|
||||
switch (type) {
|
||||
case GARAGE_HIDEOUT_ONE: return 0;
|
||||
|
@ -296,7 +296,7 @@ private:
|
|||
}
|
||||
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 CReplay;
|
||||
|
|
|
@ -308,7 +308,7 @@ INITSAVEBUF
|
|||
|
||||
// Convert entity pointer to building pool index while saving
|
||||
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)
|
||||
|
|
|
@ -852,7 +852,7 @@ CPickups::GenerateNewOne(CVector pos, uint32 modelIndex, uint8 type, uint32 quan
|
|||
|
||||
if (slot >= NUMPICKUPS) return -1;
|
||||
|
||||
aPickUps[slot].m_eType = (ePickupType)type;
|
||||
aPickUps[slot].m_eType = type;
|
||||
aPickUps[slot].m_bRemoved = false;
|
||||
aPickUps[slot].m_nQuantity = quantity;
|
||||
aPickUps[slot].m_nMoneySpeed = rate;
|
||||
|
@ -1458,9 +1458,9 @@ INITSAVEBUF
|
|||
CPickup *buf_pickup = WriteSaveBuf(buf, aPickUps[i]);
|
||||
if (buf_pickup->m_eType != PICKUP_NONE) {
|
||||
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)
|
||||
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
|
||||
#include "Weapon.h"
|
||||
|
||||
enum ePickupType : uint8
|
||||
enum ePickupType
|
||||
{
|
||||
PICKUP_NONE = 0,
|
||||
PICKUP_IN_SHOP,
|
||||
|
@ -43,7 +43,7 @@ public:
|
|||
int16 m_eModelIndex;
|
||||
uint16 m_nIndex;
|
||||
char m_sTextKey[8];
|
||||
ePickupType m_eType;
|
||||
uint8 m_eType;
|
||||
bool m_bRemoved;
|
||||
uint8 m_bWasAmmoCollected:1;
|
||||
uint8 m_bWasControlMessageShown:1;
|
||||
|
|
|
@ -57,9 +57,7 @@ public:
|
|||
static void RestoreInfoForMatrix(CMatrix&, CCarStateEachFrame*);
|
||||
static void RestoreInfoForCar(CAutomobile*, CCarStateEachFrame*, bool);
|
||||
static void ProcessControlCars(void);
|
||||
#if (defined(GTA_PS2) || defined(FIX_BUGS))
|
||||
static bool ShouldThisPadBeLeftAlone(uint8 pad);
|
||||
#endif
|
||||
static void GiveUsACar(int32, CVector, float, CAutomobile**, uint8, uint8);
|
||||
static void StartChaseScene(float);
|
||||
static void CleanUpChaseScene(void);
|
||||
|
|
|
@ -17,6 +17,9 @@
|
|||
#include "FileMgr.h"
|
||||
#include "Frontend.h"
|
||||
#include "General.h"
|
||||
#ifdef MISSION_REPLAY
|
||||
#include "GenericGameStorage.h"
|
||||
#endif
|
||||
#include "HandlingMgr.h"
|
||||
#include "Heli.h"
|
||||
#include "Hud.h"
|
||||
|
@ -93,6 +96,10 @@ uint32 CTheScripts::LastMissionPassedTime;
|
|||
uint16 CTheScripts::NumberOfExclusiveMissionScripts;
|
||||
bool CTheScripts::bPlayerHasMetDebbieHarry;
|
||||
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
|
||||
|
||||
|
@ -123,6 +130,9 @@ float oldTargetX;
|
|||
float oldTargetY;
|
||||
int missionRetryScriptIndex;
|
||||
bool doingMissionRetry;
|
||||
bool gbTryingPorn4Again;
|
||||
int IsInAmmunation;
|
||||
int MissionSkipLevel;
|
||||
|
||||
#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_IS_AUSTRALIAN_GAME, INPUT_ARGUMENTS(), OUTPUT_ARGUMENTS(), true, -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 INPUT_ARGUMENTS
|
||||
|
@ -3995,7 +4038,7 @@ int8 CRunningScript::ProcessCommands100To199(int32 command)
|
|||
CollectParameters(&m_nIp, 2);
|
||||
CVehicle* car = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
|
||||
script_assert(car);
|
||||
car->AutoPilot.m_nDrivingStyle = (eCarDrivingStyle)ScriptParams[1];
|
||||
car->AutoPilot.m_nDrivingStyle = (uint8)ScriptParams[1];
|
||||
return 0;
|
||||
}
|
||||
case COMMAND_SET_CAR_MISSION:
|
||||
|
@ -4003,7 +4046,7 @@ int8 CRunningScript::ProcessCommands100To199(int32 command)
|
|||
CollectParameters(&m_nIp, 2);
|
||||
CVehicle* car = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
|
||||
script_assert(car);
|
||||
car->AutoPilot.m_nCarMission = (eCarMission)ScriptParams[1];
|
||||
car->AutoPilot.m_nCarMission = (uint8)ScriptParams[1];
|
||||
car->AutoPilot.m_nAntiReverseTimer = CTimer::GetTimeInMilliseconds();
|
||||
car->bEngineOn = true;
|
||||
return 0;
|
||||
|
@ -4802,7 +4845,7 @@ void RetryMission(int type, int unk)
|
|||
{
|
||||
if (type == 0) {
|
||||
doingMissionRetry = true;
|
||||
FrontEndMenuManager.m_nCurrScreen = MENUPAGE_MISSION_RETRY;
|
||||
FrontEndMenuManager.m_nCurrScreen = 57; // MENUPAGE_MISSION_RETRY
|
||||
FrontEndMenuManager.RequestFrontEndStartUp();
|
||||
}
|
||||
else if (type == 2) {
|
||||
|
|
|
@ -306,6 +306,15 @@ class CTheScripts
|
|||
static uint16 ScriptsUpdated;
|
||||
static uint32 LastMissionPassedTime;
|
||||
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:
|
||||
static bool bPlayerIsInTheStatium;
|
||||
static uint8 RiotIntensity;
|
||||
|
@ -547,12 +556,16 @@ private:
|
|||
extern int scriptToLoad;
|
||||
#endif
|
||||
#ifdef MISSION_REPLAY
|
||||
static_assert(false, "Mission replay is not supported");
|
||||
extern int AllowMissionReplay;
|
||||
extern uint32 WaitForMissionActivate;
|
||||
extern uint32 WaitForSave;
|
||||
extern uint32 MissionStartTime;
|
||||
extern int missionRetryScriptIndex;
|
||||
extern bool doingMissionRetry;
|
||||
extern bool gbTryingPorn4Again;
|
||||
extern int IsInAmmunation;
|
||||
extern int MissionSkipLevel;
|
||||
|
||||
uint32 AddExtraDeathDelay();
|
||||
void RetryMission(int, int);
|
||||
|
|
|
@ -286,7 +286,7 @@ int8 CRunningScript::ProcessCommands500To599(int32 command)
|
|||
float supX = *(float*)&ScriptParams[5];
|
||||
float supY = *(float*)&ScriptParams[6];
|
||||
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);
|
||||
return 0;
|
||||
}
|
||||
|
@ -302,7 +302,7 @@ int8 CRunningScript::ProcessCommands500To599(int32 command)
|
|||
float supX = *(float*)&ScriptParams[5];
|
||||
float supY = *(float*)&ScriptParams[6];
|
||||
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);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1848,7 +1848,7 @@ int8 CRunningScript::ProcessCommands700To799(int32 command)
|
|||
}
|
||||
case COMMAND_CHANGE_GARAGE_TYPE:
|
||||
CollectParameters(&m_nIp, 2);
|
||||
CGarages::ChangeGarageType(ScriptParams[0], (eGarageType)ScriptParams[1], 0);
|
||||
CGarages::ChangeGarageType(ScriptParams[0], ScriptParams[1], 0);
|
||||
return 0;
|
||||
/*
|
||||
case COMMAND_ACTIVATE_CRUSHER_CRANE:
|
||||
|
|
|
@ -1513,7 +1513,7 @@ int8 CRunningScript::ProcessCommands900To999(int32 command)
|
|||
CollectParameters(&m_nIp, 2);
|
||||
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
|
||||
script_assert(pVehicle);
|
||||
pVehicle->SetStatus((eEntityStatus)ScriptParams[1]);
|
||||
pVehicle->SetStatus(ScriptParams[1]);
|
||||
return 0;
|
||||
}
|
||||
case COMMAND_IS_CHAR_MALE:
|
||||
|
@ -1537,7 +1537,7 @@ int8 CRunningScript::ProcessCommands900To999(int32 command)
|
|||
case COMMAND_CHANGE_GARAGE_TYPE_WITH_CAR_MODEL:
|
||||
{
|
||||
CollectParameters(&m_nIp, 3);
|
||||
CGarages::ChangeGarageType(ScriptParams[0], (eGarageType)ScriptParams[1], ScriptParams[2]);
|
||||
CGarages::ChangeGarageType(ScriptParams[0], ScriptParams[1], ScriptParams[2]);
|
||||
return 0;
|
||||
}
|
||||
case COMMAND_FIND_DRUG_PLANE_COORDINATES:
|
||||
|
|
|
@ -1784,10 +1784,10 @@ INITSAVEBUF
|
|||
handle = 0;
|
||||
} else if (pBuilding->GetIsATreadable()) {
|
||||
type = 1;
|
||||
handle = CPools::GetTreadablePool()->GetJustIndex((CTreadable*)pBuilding) + 1;
|
||||
handle = CPools::GetTreadablePool()->GetJustIndex_NoFreeAssert((CTreadable*)pBuilding) + 1;
|
||||
} else {
|
||||
type = 2;
|
||||
handle = CPools::GetBuildingPool()->GetJustIndex(pBuilding) + 1;
|
||||
handle = CPools::GetBuildingPool()->GetJustIndex_NoFreeAssert(pBuilding) + 1;
|
||||
}
|
||||
WriteSaveBuf(buf, type);
|
||||
WriteSaveBuf(buf, handle);
|
||||
|
@ -1805,19 +1805,19 @@ INITSAVEBUF
|
|||
case ENTITY_TYPE_BUILDING:
|
||||
if (((CBuilding*)pEntity)->GetIsATreadable()) {
|
||||
type = 1;
|
||||
handle = CPools::GetTreadablePool()->GetJustIndex((CTreadable*)pEntity) + 1;
|
||||
handle = CPools::GetTreadablePool()->GetJustIndex_NoFreeAssert((CTreadable*)pEntity) + 1;
|
||||
} else {
|
||||
type = 2;
|
||||
handle = CPools::GetBuildingPool()->GetJustIndex((CBuilding*)pEntity) + 1;
|
||||
handle = CPools::GetBuildingPool()->GetJustIndex_NoFreeAssert((CBuilding*)pEntity) + 1;
|
||||
}
|
||||
break;
|
||||
case ENTITY_TYPE_OBJECT:
|
||||
type = 3;
|
||||
handle = CPools::GetObjectPool()->GetJustIndex((CObject*)pEntity) + 1;
|
||||
handle = CPools::GetObjectPool()->GetJustIndex_NoFreeAssert((CObject*)pEntity) + 1;
|
||||
break;
|
||||
case ENTITY_TYPE_DUMMY:
|
||||
type = 4;
|
||||
handle = CPools::GetDummyPool()->GetJustIndex((CDummy*)pEntity) + 1;
|
||||
handle = CPools::GetDummyPool()->GetJustIndex_NoFreeAssert((CDummy*)pEntity) + 1;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1409,7 +1409,7 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command)
|
|||
CollectParameters(&m_nIp, 3);
|
||||
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
|
||||
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];
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -4,8 +4,18 @@
|
|||
#include "ScriptCommands.h"
|
||||
|
||||
#include "DMAudio.h"
|
||||
#if ((defined GTAVC_JP_PATCH || defined SUPPORT_JAPANESE_SCRIPT) && defined MORE_LANGUAGES)
|
||||
#include "Frontend.h"
|
||||
#endif
|
||||
#include "GameLogic.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 "Pad.h"
|
||||
#include "PedAttractor.h"
|
||||
|
@ -373,6 +383,228 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
|
|||
}
|
||||
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:
|
||||
script_assert(0);
|
||||
}
|
||||
|
|
|
@ -1437,6 +1437,39 @@ enum {
|
|||
COMMAND_REGISTER_FIRE_LEVEL,
|
||||
COMMAND_IS_AUSTRALIAN_GAME,
|
||||
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
|
||||
LAST_SCRIPT_COMMAND
|
||||
#endif
|
||||
|
|
|
@ -29,7 +29,7 @@ void CSetPieces::AddOne(uint8 type, CVector2D vTriggerInf, CVector2D vTriggerSup
|
|||
{
|
||||
if (NumSetPieces >= NUM_SETPIECES)
|
||||
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.y = Min(vTriggerInf.y, vTriggerSup.y);
|
||||
aSetPieces[NumSetPieces].m_vTriggerSup.x = Max(vTriggerInf.x, vTriggerSup.x);
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
class CVehicle;
|
||||
class CCopPed;
|
||||
|
||||
enum eSetPieceType : uint8
|
||||
enum eSetPieceType
|
||||
{
|
||||
SETPIECE_NONE = 0,
|
||||
SETPIECE_TWOCOPCARSINALLEY,
|
||||
|
@ -20,7 +20,7 @@ enum eSetPieceType : uint8
|
|||
class CSetPiece
|
||||
{
|
||||
public:
|
||||
eSetPieceType m_nType;
|
||||
uint8 m_nType;
|
||||
uint32 m_nLastTimeCreated;
|
||||
CVector2D m_vTriggerInf;
|
||||
CVector2D m_vTriggerSup;
|
||||
|
|
|
@ -3621,6 +3621,8 @@ CCamera::LoadPathSplines(int file)
|
|||
m_arrPathArray[i].m_arr_PathData[j] = atof(token);
|
||||
i++;
|
||||
j = 0;
|
||||
if (i == MAX_NUM_OF_SPLINETYPES)
|
||||
reading = false;
|
||||
memset(token, 0, 32);
|
||||
n = 0;
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ enum eWastedBustedState
|
|||
WBSTATE_FAILED_CRITICAL_MISSION,
|
||||
};
|
||||
|
||||
enum eBustedAudioState : uint8
|
||||
enum eBustedAudioState
|
||||
{
|
||||
BUSTEDAUDIO_NONE,
|
||||
BUSTEDAUDIO_LOADING,
|
||||
|
@ -82,7 +82,7 @@ public:
|
|||
bool m_bGetOutOfJailFree;
|
||||
bool m_bGetOutOfHospitalFree;
|
||||
bool m_bDriveByAllowed;
|
||||
eBustedAudioState m_nBustedAudioStatus;
|
||||
uint8 m_nBustedAudioStatus;
|
||||
int16 m_nCurrentBustedAudio;
|
||||
char m_aSkinName[32];
|
||||
RwTexture *m_pSkinTexture;
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
|
||||
CColPoint gaTempSphereColPoints[MAX_COLLISION_POINTS];
|
||||
|
||||
CPtrList CWorld::ms_bigBuildingsList[4];
|
||||
CPtrList CWorld::ms_bigBuildingsList[NUM_LEVELS];
|
||||
CPtrList CWorld::ms_listMovingEntityPtrs;
|
||||
CSector CWorld::ms_aSectors[NUMSECTORS_Y][NUMSECTORS_X];
|
||||
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 nEndY = Min(GetSectorIndexY(vecStartPos.y), NUMSECTORS_Y - 1);
|
||||
#else
|
||||
const int32 nEndX = Min(GetSectorIndexX(vecSectorPos.x), NUMSECTORS_X);
|
||||
const int32 nEndY = Min(GetSectorIndexY(vecSectorPos.y), NUMSECTORS_Y);
|
||||
const int32 nEndX = Min(GetSectorIndexX(vecStartPos.x), NUMSECTORS_X);
|
||||
const int32 nEndY = Min(GetSectorIndexY(vecStartPos.y), NUMSECTORS_Y);
|
||||
#endif
|
||||
for(int32 y = nStartY; y <= nEndY; y++) {
|
||||
for(int32 x = nStartX; x <= nEndX; x++) {
|
||||
|
@ -1580,7 +1580,7 @@ CWorld::CallOffChaseForAreaSectorListVehicles(CPtrList &list, float x1, float y1
|
|||
if(pVehicle->m_scanCode != GetCurrentScanCode()) {
|
||||
pVehicle->m_scanCode = GetCurrentScanCode();
|
||||
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 &&
|
||||
vehiclePos.y > fStartY && vehiclePos.y < fEndY && pVehicle->bIsLawEnforcer &&
|
||||
(carMission == MISSION_RAMPLAYER_FARAWAY || carMission == MISSION_RAMPLAYER_CLOSE ||
|
||||
|
@ -1781,21 +1781,29 @@ CWorld::ShutDown(void)
|
|||
CWorld::Remove(pEntity);
|
||||
delete pEntity;
|
||||
}
|
||||
#ifndef 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
|
||||
}
|
||||
for(int32 i = 0; i < 4; i++) {
|
||||
for(CPtrNode *pNode = GetBigBuildingList((eLevelName)i).first; pNode; pNode = pNode->next) {
|
||||
for(int32 i = 0; i < NUM_LEVELS; i++) {
|
||||
for(CPtrNode *pNode = ms_bigBuildingsList[i].first; pNode; pNode = pNode->next) {
|
||||
CEntity *pEntity = (CEntity *)pNode->item;
|
||||
// Maybe remove from world here?
|
||||
delete pEntity;
|
||||
}
|
||||
GetBigBuildingList((eLevelName)i).Flush();
|
||||
ms_bigBuildingsList[i].Flush();
|
||||
}
|
||||
for(int i = 0; i < NUMSECTORS_X * NUMSECTORS_Y; i++) {
|
||||
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) {
|
||||
sprintf(gString, "Building list %d,%d not empty\n", i % NUMSECTORS_X, i / NUMSECTORS_Y);
|
||||
pSector->m_lists[ENTITYLIST_BUILDINGS].Flush();
|
||||
|
|
|
@ -55,7 +55,7 @@ struct CStoredCollPoly;
|
|||
|
||||
class CWorld
|
||||
{
|
||||
static CPtrList ms_bigBuildingsList[4];
|
||||
static CPtrList ms_bigBuildingsList[NUM_LEVELS];
|
||||
static CPtrList ms_listMovingEntityPtrs;
|
||||
static CSector ms_aSectors[NUMSECTORS_Y][NUMSECTORS_X];
|
||||
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_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 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
|
||||
//#define MISSION_REPLAY // mobile feature
|
||||
#endif
|
||||
|
|
|
@ -124,12 +124,18 @@ public:
|
|||
(T*)&m_entries[handle >> 8] : nil;
|
||||
}
|
||||
int GetIndex(T *entry){
|
||||
int i = GetJustIndex(entry);
|
||||
int i = GetJustIndex_NoFreeAssert(entry);
|
||||
return m_flags[i].u + (i<<8);
|
||||
}
|
||||
int GetJustIndex(T *entry){
|
||||
// TODO: the cast is unsafe
|
||||
return (int)((U*)entry - m_entries);
|
||||
int index = GetJustIndex_NoFreeAssert(entry);
|
||||
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 i;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
struct CReference;
|
||||
class CPtrList;
|
||||
|
||||
enum eEntityType : uint8
|
||||
enum eEntityType
|
||||
{
|
||||
ENTITY_TYPE_NOTHING = 0,
|
||||
ENTITY_TYPE_BUILDING,
|
||||
|
@ -16,7 +16,7 @@ enum eEntityType : uint8
|
|||
ENTITY_TYPE_DUMMY,
|
||||
};
|
||||
|
||||
enum eEntityStatus : uint8
|
||||
enum eEntityStatus
|
||||
{
|
||||
STATUS_PLAYER,
|
||||
STATUS_PLAYER_PLAYBACKFROMBUFFER,
|
||||
|
@ -99,10 +99,10 @@ public:
|
|||
CReference *m_pFirstReference;
|
||||
|
||||
public:
|
||||
eEntityType GetType() const { return (eEntityType)m_type; }
|
||||
void SetType(eEntityType type) { m_type = type; }
|
||||
eEntityStatus GetStatus() const { return (eEntityStatus)m_status; }
|
||||
void SetStatus(eEntityStatus status) { m_status = status; }
|
||||
uint8 GetType() const { return m_type; }
|
||||
void SetType(uint8 type) { m_type = type; }
|
||||
uint8 GetStatus() const { return m_status; }
|
||||
void SetStatus(uint8 status) { m_status = status; }
|
||||
CColModel *GetColModel(void) { return CModelInfo::GetModelInfo(m_modelIndex)->GetColModel(); }
|
||||
bool GetIsStatic(void) const { return bIsStatic || bIsStaticWaitingForCollision; }
|
||||
void SetIsStatic(bool state) { bIsStatic = state; }
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
#define MAX_MODEL_NAME (21)
|
||||
|
||||
enum ModelInfoType : uint8
|
||||
enum ModelInfoType
|
||||
{
|
||||
MITYPE_NA,
|
||||
MITYPE_SIMPLE,
|
||||
|
@ -17,7 +17,6 @@ enum ModelInfoType : uint8
|
|||
MITYPE_XTRACOMPS, // unused but still in enum
|
||||
MITYPE_HAND // xbox and mobile
|
||||
};
|
||||
VALIDATE_SIZE(ModelInfoType, 1);
|
||||
|
||||
class C2dEffect;
|
||||
|
||||
|
@ -25,7 +24,7 @@ class CBaseModelInfo
|
|||
{
|
||||
protected:
|
||||
char m_name[MAX_MODEL_NAME];
|
||||
ModelInfoType m_type;
|
||||
uint8 m_type;
|
||||
uint8 m_num2dEffects;
|
||||
bool m_bOwnsColModel;
|
||||
CColModel *m_colModel;
|
||||
|
@ -47,7 +46,7 @@ public:
|
|||
virtual int GetAnimFileIndex(void) { return -1; }
|
||||
|
||||
// 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 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; }
|
||||
|
|
|
@ -24,7 +24,7 @@ enum {
|
|||
ATOMIC_FLAG_NOCULL = 0x800,
|
||||
};
|
||||
|
||||
enum eVehicleType : uint8{
|
||||
enum eVehicleType {
|
||||
VEHICLE_TYPE_CAR,
|
||||
VEHICLE_TYPE_BOAT,
|
||||
VEHICLE_TYPE_TRAIN,
|
||||
|
|
|
@ -14,6 +14,12 @@
|
|||
#include "soundlist.h"
|
||||
#include "WaterLevel.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::nBodyCastHealth = 1000;
|
||||
|
@ -107,7 +113,8 @@ CObject::ProcessControl(void)
|
|||
m_vecMoveSpeed *= 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) {
|
||||
bExplosionProof = true;
|
||||
bIsVisible = false;
|
||||
|
@ -115,6 +122,68 @@ CObject::ProcessControl(void)
|
|||
bAffectedByGravity = false;
|
||||
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
|
||||
|
@ -289,83 +358,145 @@ CObject::ObjectDamage(float amount)
|
|||
if ((amount * m_fCollisionDamageMultiplier > 150.0f || bBodyCastDamageEffect) && m_nCollisionDamageEffect) {
|
||||
const CVector &vecPos = m_matrix.GetPosition();
|
||||
const float fDirectionZ = 0.0002f * amount;
|
||||
switch (m_nCollisionDamageEffect)
|
||||
{
|
||||
switch (m_nCollisionDamageEffect) {
|
||||
case DAMAGE_EFFECT_CHANGE_MODEL:
|
||||
bRenderDamaged = true;
|
||||
break;
|
||||
return;
|
||||
case DAMAGE_EFFECT_SPLIT_MODEL:
|
||||
return;
|
||||
case DAMAGE_EFFECT_SMASH_AND_DAMAGE_TRAFFICLIGHTS:
|
||||
{
|
||||
static RwRGBA debrisColor = { 0xc8,0xc8,0xc8,0xff };
|
||||
if (bRenderDamaged) {
|
||||
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);
|
||||
}
|
||||
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;
|
||||
case DAMAGE_EFFECT_CHANGE_THEN_SMASH:
|
||||
}
|
||||
case DAMAGE_EFFECT_CHANGE_THEN_SMASH: {
|
||||
if (!bRenderDamaged) {
|
||||
bRenderDamaged = true;
|
||||
return;
|
||||
}
|
||||
else {
|
||||
// fall through
|
||||
}
|
||||
case DAMAGE_EFFECT_SMASH_COMPLETELY: {
|
||||
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);
|
||||
}
|
||||
break;
|
||||
case DAMAGE_EFFECT_SMASH_CARDBOARD_COMPLETELY: {
|
||||
}
|
||||
case DAMAGE_EFFECT_SMASH_CARDBOARD_COMPLETELY:
|
||||
case DAMAGE_EFFECT_SMASH_YELLOW_TARGET_COMPLETELY:
|
||||
{
|
||||
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);
|
||||
const RwRGBA color = { 96, 48, 0, 255 };
|
||||
for (int32 i = 0; i < 25; i++) {
|
||||
CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
|
||||
CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
|
||||
CGeneral::GetRandomNumberInRange(0.1f, 0.15f) + fDirectionZ);
|
||||
CVector vecDir = CVector(
|
||||
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||
CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ
|
||||
);
|
||||
++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);
|
||||
RwRGBA randomColor = { uint8(color.red * fRandom), uint8(color.green * fRandom) , color.blue, color.alpha };
|
||||
float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.18f);
|
||||
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 80);
|
||||
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;
|
||||
}
|
||||
case DAMAGE_EFFECT_SMASH_WOODENBOX_COMPLETELY: {
|
||||
case DAMAGE_EFFECT_SMASH_WOODENBOX_COMPLETELY:
|
||||
{
|
||||
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);
|
||||
const RwRGBA color = { 128, 128, 128, 255 };
|
||||
static const RwRGBA color = { 128, 128, 128, 255 };
|
||||
CVector position = GetPosition();
|
||||
for (int32 i = 0; i < 45; i++) {
|
||||
CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
|
||||
CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
|
||||
CGeneral::GetRandomNumberInRange(0.1f, 0.15f) + fDirectionZ);
|
||||
CVector vecDir = CVector(
|
||||
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||
CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ
|
||||
);
|
||||
++nFrameGen;
|
||||
int32 currentFrame = nFrameGen & 3;
|
||||
float fRandom = CGeneral::GetRandomNumberInRange(0.5f, 0.5f);
|
||||
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.18f);
|
||||
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 80);
|
||||
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;
|
||||
}
|
||||
case DAMAGE_EFFECT_SMASH_TRAFFICCONE_COMPLETELY: {
|
||||
case DAMAGE_EFFECT_SMASH_TRAFFICCONE_COMPLETELY:
|
||||
case DAMAGE_EFFECT_BURST_BEACHBALL:
|
||||
{
|
||||
bIsVisible = false;
|
||||
bUsesCollision = false;
|
||||
if (!GetIsStatic()) {
|
||||
RemoveFromMovingList();
|
||||
}
|
||||
SetIsStatic(true);
|
||||
bExplosionProof = true;
|
||||
SetMoveSpeed(0.0f, 0.0f, 0.0f);
|
||||
|
@ -373,46 +504,213 @@ CObject::ObjectDamage(float amount)
|
|||
const RwRGBA color1 = { 200, 0, 0, 255 };
|
||||
const RwRGBA color2 = { 200, 200, 200, 255 };
|
||||
for (int32 i = 0; i < 10; i++) {
|
||||
CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
|
||||
CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
|
||||
CGeneral::GetRandomNumberInRange(0.1f, 0.15f) + fDirectionZ);
|
||||
CVector vecDir = CVector(
|
||||
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||
CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ
|
||||
);
|
||||
++nFrameGen;
|
||||
int32 currentFrame = nFrameGen & 3;
|
||||
RwRGBA color = color2;
|
||||
if (nFrameGen & 1)
|
||||
color = color1;
|
||||
float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.18f);
|
||||
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 80);
|
||||
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;
|
||||
}
|
||||
case DAMAGE_EFFECT_SMASH_BARPOST_COMPLETELY: {
|
||||
case DAMAGE_EFFECT_SMASH_BARPOST_COMPLETELY:
|
||||
{
|
||||
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);
|
||||
const RwRGBA color1 = { 200, 0, 0, 255 };
|
||||
const RwRGBA color2 = { 200, 200, 200, 255 };
|
||||
SetMoveSpeed(0.0f, 0.0f, 0.0f);
|
||||
SetTurnSpeed(0.0f, 0.0f, 0.0f);
|
||||
for (int32 i = 0; i < 32; i++) {
|
||||
CVector vecDir(CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
|
||||
CGeneral::GetRandomNumberInRange(-0.35f, 0.7f),
|
||||
CGeneral::GetRandomNumberInRange(0.1f, 0.15f) + fDirectionZ);
|
||||
CVector vecDir = CVector(
|
||||
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||
CGeneral::GetRandomNumberInRange(-0.35f, 0.35f),
|
||||
CGeneral::GetRandomNumberInRange(0.10f, 0.25f) + fDirectionZ
|
||||
);
|
||||
++nFrameGen;
|
||||
int32 currentFrame = nFrameGen & 3;
|
||||
RwRGBA color = color2;
|
||||
if (nFrameGen & 1)
|
||||
color = color1;
|
||||
float fSize = CGeneral::GetRandomNumberInRange(0.02f, 0.18f);
|
||||
int32 nRotationSpeed = CGeneral::GetRandomNumberInRange(-40, 80);
|
||||
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;
|
||||
}
|
||||
case DAMAGE_EFFECT_SMASH_NEWSTANDNEW1:
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -515,7 +813,7 @@ CObject::DeleteAllTempObjectsInArea(CVector point, float fRadius)
|
|||
CObjectPool *objectPool = CPools::GetObjectPool();
|
||||
for (int32 i = 0; i < objectPool->GetSize(); 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);
|
||||
delete pObject;
|
||||
}
|
||||
|
|
|
@ -32,23 +32,23 @@ enum CollisionDamageEffect
|
|||
DAMAGE_EFFECT_CHANGE_THEN_SMASH,
|
||||
|
||||
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_TRAFFICCONE_COMPLETELY = 70,
|
||||
DAMAGE_EFFECT_SMASH_BARPOST_COMPLETELY = 80,
|
||||
|
||||
DAMAGE_EFFECT_SMASH_NEWSTANDNEW1 = 91,
|
||||
DAMAGE_EFFECT_SMASH_NEWSTANDNEW21,
|
||||
DAMAGE_EFFECT_SMASH_NEWSTANDNEW31,
|
||||
DAMAGE_EFFECT_SMASH_NEWSTANDNEW41,
|
||||
DAMAGE_EFFECT_SMASH_NEWSTANDNEW51,
|
||||
DAMAGE_EFFECT_SMASH_NEWSTANDNEW2 = 92,
|
||||
DAMAGE_EFFECT_SMASH_NEWSTANDNEW3 = 93,
|
||||
DAMAGE_EFFECT_SMASH_NEWSTANDNEW4 = 94,
|
||||
DAMAGE_EFFECT_SMASH_NEWSTANDNEW5 = 95,
|
||||
|
||||
DAMAGE_EFFECT_SMASH_BLACKBAG = 100,
|
||||
DAMAGE_EFFECT_SMASH_VEGPALM = 110,
|
||||
DAMAGE_EFFECT_BURST_BEACHBALL = 120,
|
||||
DAMAGE_EFFECT_SMASH_BEACHLOUNGE_WOOD = 131,
|
||||
DAMAGE_EFFECT_SMASH_BEACHLOUNGE_TOWEL,
|
||||
DAMAGE_EFFECT_SMASH_BEACHLOUNGE_TOWEL = 132,
|
||||
};
|
||||
|
||||
class CVehicle;
|
||||
|
@ -76,7 +76,7 @@ public:
|
|||
uint8 m_nCollisionDamageEffect;
|
||||
uint8 m_nSpecialCollisionResponseCases;
|
||||
bool m_bCameraToAvoidThisObject;
|
||||
int8 m_nBeachballBounces;
|
||||
uint8 m_nBeachballBounces;
|
||||
uint32 m_obj_unused1;
|
||||
uint32 m_nEndOfLifeTime;
|
||||
int16 m_nRefModelIndex;
|
||||
|
|
|
@ -52,7 +52,7 @@ enum eFormation
|
|||
FORMATION_FRONT
|
||||
};
|
||||
|
||||
enum FightState : int8 {
|
||||
enum FightState {
|
||||
FIGHTSTATE_MOVE_FINISHED = -2,
|
||||
FIGHTSTATE_JUST_ATTACKED,
|
||||
FIGHTSTATE_NO_MOVE,
|
||||
|
@ -187,7 +187,7 @@ enum eWaitState {
|
|||
WAITSTATE_PLAYANIM_HANDSUP_SIMPLE,
|
||||
};
|
||||
|
||||
enum eObjective : uint32 {
|
||||
enum eObjective {
|
||||
OBJECTIVE_NONE,
|
||||
OBJECTIVE_WAIT_ON_FOOT,
|
||||
OBJECTIVE_WAIT_ON_FOOT_FOR_COP,
|
||||
|
@ -271,7 +271,7 @@ enum PedOnGroundState {
|
|||
PED_DEAD_ON_THE_FLOOR
|
||||
};
|
||||
|
||||
enum PointBlankNecessity : uint8 {
|
||||
enum PointBlankNecessity {
|
||||
NO_POINT_BLANK_PED,
|
||||
POINT_BLANK_FOR_WANTED_PED,
|
||||
POINT_BLANK_FOR_SOMEONE_ELSE
|
||||
|
@ -598,7 +598,7 @@ public:
|
|||
uint32 m_curFightMove;
|
||||
uint32 m_lastFightMove;
|
||||
uint8 m_fightButtonPressure;
|
||||
FightState m_fightState;
|
||||
int8 m_fightState;
|
||||
bool m_takeAStepAfterAttack;
|
||||
uint8 m_bleedCounter;
|
||||
CFire *m_pFire;
|
||||
|
@ -729,7 +729,7 @@ public:
|
|||
CPed *CheckForDeadPeds(void);
|
||||
bool CheckForExplosions(CVector2D &area);
|
||||
CPed *CheckForGunShots(void);
|
||||
PointBlankNecessity CheckForPointBlankPeds(CPed*);
|
||||
uint8 CheckForPointBlankPeds(CPed*);
|
||||
bool CheckIfInTheAir(void);
|
||||
void ClearAll(void);
|
||||
void SetPointGunAt(CEntity*);
|
||||
|
|
|
@ -367,7 +367,7 @@ CPed::SetAttack(CEntity *victim)
|
|||
if (IsPlayer())
|
||||
CPad::GetPad(0)->ResetAverageWeapon();
|
||||
|
||||
PointBlankNecessity pointBlankStatus;
|
||||
uint8 pointBlankStatus;
|
||||
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_RUNABOUT
|
||||
|
@ -611,7 +611,7 @@ CPed::FinishedReloadCB(CAnimBlendAssociation *reloadAssoc, void *arg)
|
|||
}
|
||||
|
||||
// --MIAMI: Done
|
||||
PointBlankNecessity
|
||||
uint8
|
||||
CPed::CheckForPointBlankPeds(CPed *pedToVerify)
|
||||
{
|
||||
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 (bDontPrint) return;
|
||||
if (RenderState.slant == 0.0f) {
|
||||
#ifdef FIX_BUGS
|
||||
if (c < 192) {
|
||||
#else
|
||||
if (c < 193) {
|
||||
#endif
|
||||
CSprite2d::AddToBuffer(
|
||||
CRect(x, y,
|
||||
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,
|
||||
y + 33.0f * RenderState.scaleY * 0.5f),
|
||||
RenderState.color,
|
||||
xoff / 16.0f, yoff / 12.8f,
|
||||
(xoff + 1.0f) / 16.0f - 0.001f, yoff / 12.8f - 0.017f,
|
||||
xoff / 16.0f, (yoff + 1.0f) / 12.8f,
|
||||
xoff / 16.0f, yoff / 12.8f + 0.0021f,
|
||||
(xoff + 1.0f) / 16.0f - 0.001f, yoff / 12.8f + 0.0021f,
|
||||
xoff / 16.0f, (yoff + 1.0f) / 12.8f - 0.017f,
|
||||
(xoff + 1.0f) / 16.0f - 0.001f, (yoff + 1.0f) / 12.8f - 0.017f);
|
||||
}
|
||||
} else
|
||||
|
|
|
@ -202,7 +202,7 @@ CVector vecTestResistance(0.9995f, 0.9f, 0.95f);
|
|||
float fDAxisX = 1.0f;
|
||||
float fDAxisXExtra = 100.0f;
|
||||
float fDAxisY = 1000.0f;
|
||||
float fInAirXRes = 0.88f;
|
||||
float fInAirXRes = 0.98f;
|
||||
float fFlySpeedMult = -0.6f;
|
||||
|
||||
void
|
||||
|
@ -1213,7 +1213,8 @@ CBike::ProcessControl(void)
|
|||
|
||||
// Balance bike
|
||||
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);
|
||||
// Keep bike upright
|
||||
if(bBalancedByRider){
|
||||
|
|
|
@ -629,11 +629,11 @@ void CCranes::Save(uint8* buf, uint32* size)
|
|||
for (int i = 0; i < NUM_CRANES; i++) {
|
||||
CCrane *pCrane = WriteSaveBuf(buf, aCranes[i]);
|
||||
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)
|
||||
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)
|
||||
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);
|
||||
|
|
|
@ -11,7 +11,7 @@ class CBuilding;
|
|||
class CCrane
|
||||
{
|
||||
public:
|
||||
enum CraneState : uint8 {
|
||||
enum CraneState {
|
||||
IDLE = 0,
|
||||
GOING_TOWARDS_TARGET = 1,
|
||||
LIFTING_TARGET = 2,
|
||||
|
@ -19,7 +19,7 @@ public:
|
|||
ROTATING_TARGET = 4,
|
||||
DROPPING_TARGET = 5
|
||||
};
|
||||
enum CraneStatus : uint8 {
|
||||
enum CraneStatus {
|
||||
NONE = 0,
|
||||
ACTIVATED = 1,
|
||||
DEACTIVATED = 2
|
||||
|
@ -46,8 +46,8 @@ public:
|
|||
CVector2D m_vecHookVelocity;
|
||||
CVehicle *m_pVehiclePickedUp;
|
||||
uint32 m_nTimeForNextCheck;
|
||||
CraneStatus m_nCraneStatus;
|
||||
CraneState m_nCraneState;
|
||||
uint8 m_nCraneStatus;
|
||||
uint8 m_nCraneState;
|
||||
uint8 m_nVehiclesCollected;
|
||||
bool m_bIsCrusher;
|
||||
bool m_bIsMilitaryCrane;
|
||||
|
|
|
@ -281,7 +281,7 @@ public:
|
|||
int8 m_comedyControlState;
|
||||
CStoredCollPoly m_aCollPolys[2]; // poly which is under front/rear part of car
|
||||
float m_fSteerInput;
|
||||
eVehicleType m_vehType;
|
||||
uint8 m_vehType;
|
||||
|
||||
static void *operator new(size_t);
|
||||
static void *operator new(size_t sz, int slot);
|
||||
|
|
|
@ -1457,7 +1457,8 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim,
|
|||
|
||||
#ifndef FIX_BUGS
|
||||
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
|
||||
CVector smokePos = point->point;
|
||||
#endif // !FIX_BUGS
|
||||
|
@ -1486,9 +1487,9 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim,
|
|||
CParticle::AddParticle(PARTICLE_SPARK, point->point, point->normal * 0.05f);
|
||||
|
||||
#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 smokePos = *fireSource + offset;
|
||||
CVector smokePos = *source + offset;
|
||||
#else
|
||||
CVector smokePos = point->point;
|
||||
#endif
|
||||
|
|
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 III -i "english.txt" -o "../../gamefiles/TEXT/english.gxt"
|
||||
gxt -g III -i "french.txt" -o "../../gamefiles/TEXT/french.gxt"
|
||||
gxt -g III -i "german.txt" -o "../../gamefiles/TEXT/german.gxt"
|
||||
gxt -g III -i "italian.txt" -o "../../gamefiles/TEXT/italian.gxt"
|
||||
gxt -g III -i "spanish.txt" -o "../../gamefiles/TEXT/spanish.gxt"
|
||||
gxt -g III -r -i "russian.txt" -o "../../gamefiles/TEXT/russian.gxt"
|
||||
gxt -g VC -i "american.txt" -o "../../gamefiles/TEXT/american.gxt"
|
||||
gxt -g VC -i "french.txt" -o "../../gamefiles/TEXT/french.gxt"
|
||||
gxt -g VC -i "german.txt" -o "../../gamefiles/TEXT/german.gxt"
|
||||
gxt -g VC -i "italian.txt" -o "../../gamefiles/TEXT/italian.gxt"
|
||||
gxt -g VC -i "spanish.txt" -o "../../gamefiles/TEXT/spanish.gxt"
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue