mirror of
https://github.com/halpz/re3.git
synced 2024-12-26 18:15:27 +00:00
Merge remote-tracking branch 'upstream/miami' into miami
This commit is contained in:
commit
55d94c99b8
|
@ -35,4 +35,4 @@ public:
|
|||
void AddCollisionToRequestedQueue();
|
||||
};
|
||||
|
||||
VALIDATE_SIZE(cAudioCollisionManager, 852);
|
||||
VALIDATE_SIZE(cAudioCollisionManager, 0x354);
|
||||
|
|
|
@ -420,10 +420,7 @@ cAudioManager::CheckForAnAudioFileOnCD() const
|
|||
uint8
|
||||
cAudioManager::GetCDAudioDriveLetter() const
|
||||
{
|
||||
if (m_bIsInitialised)
|
||||
return SampleManager.GetCDAudioDriveLetter();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -483,12 +480,18 @@ uint8
|
|||
cAudioManager::ComputeVolume(uint8 emittingVolume, float soundIntensity, float distance) const
|
||||
{
|
||||
float newSoundIntensity;
|
||||
float newEmittingVolume;
|
||||
|
||||
if (soundIntensity <= 0.0f)
|
||||
return 0;
|
||||
|
||||
newSoundIntensity = soundIntensity / 5.0f;
|
||||
if (newSoundIntensity <= distance)
|
||||
emittingVolume = sq((soundIntensity - newSoundIntensity - (distance - newSoundIntensity)) / (soundIntensity - newSoundIntensity)) * emittingVolume;
|
||||
if (newSoundIntensity > distance)
|
||||
return emittingVolume;
|
||||
|
||||
newEmittingVolume = emittingVolume * SQR((soundIntensity - newSoundIntensity - (distance - newSoundIntensity))
|
||||
/ (soundIntensity - newSoundIntensity));
|
||||
return Min(127u, newEmittingVolume);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -500,17 +503,16 @@ cAudioManager::TranslateEntity(Const CVector *in, CVector *out) const
|
|||
int32
|
||||
cAudioManager::ComputePan(float dist, CVector *vec)
|
||||
{
|
||||
const uint8 PanTable[64] = {0, 3, 8, 12, 16, 19, 22, 24, 26, 28, 30, 31, 33, 34, 36, 37, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 49, 50, 51, 52, 53, 53,
|
||||
const uint8 PanTable[64] = { 0, 3, 8, 12, 16, 19, 22, 24, 26, 28, 30, 31, 33, 34, 36, 37, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 49, 50, 51, 52, 53, 53,
|
||||
54, 55, 55, 56, 56, 57, 57, 58, 58, 58, 59, 59, 59, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, 63};
|
||||
|
||||
int32 index = Min(63, Abs(vec->x / (dist / 64.f)));
|
||||
int32 index = Min(63, Abs(int32(vec->x / (dist / 64.f))));
|
||||
|
||||
if (vec->x > 0.f)
|
||||
return Max(20, 63 - PanTable[index]);
|
||||
return Min(107, PanTable[index] + 63);
|
||||
}
|
||||
|
||||
int32
|
||||
uint32
|
||||
cAudioManager::ComputeDopplerEffectedFrequency(uint32 oldFreq, float position1, float position2, float speedMultiplier) const
|
||||
{
|
||||
uint32 newFreq = oldFreq;
|
||||
|
@ -519,11 +521,7 @@ cAudioManager::ComputeDopplerEffectedFrequency(uint32 oldFreq, float position1,
|
|||
if (dist != 0.0f) {
|
||||
float speedOfSource = (dist / m_nTimeSpent) * speedMultiplier;
|
||||
if (m_fSpeedOfSound > Abs(speedOfSource)) {
|
||||
if (speedOfSource < 0.0f) {
|
||||
speedOfSource = Max(speedOfSource, -1.5f);
|
||||
} else {
|
||||
speedOfSource = Min(speedOfSource, 1.5f);
|
||||
}
|
||||
speedOfSource = clamp2(speedOfSource, 0.0f, 1.5f);
|
||||
newFreq = (oldFreq * m_fSpeedOfSound) / (speedOfSource + m_fSpeedOfSound);
|
||||
}
|
||||
}
|
||||
|
@ -750,39 +748,41 @@ cAudioManager::AddReleasingSounds()
|
|||
void
|
||||
cAudioManager::ProcessActiveQueues()
|
||||
{
|
||||
bool flag;
|
||||
float position2;
|
||||
float position1;
|
||||
|
||||
uint32 v28;
|
||||
uint32 v29;
|
||||
|
||||
float x;
|
||||
float usedX;
|
||||
float usedY;
|
||||
float usedZ;
|
||||
|
||||
uint8 vol;
|
||||
uint8 emittingVol;
|
||||
CVector position;
|
||||
uint32 freqDivided;
|
||||
uint32 loopCount;
|
||||
uint8 emittingVol;
|
||||
uint8 vol;
|
||||
uint8 offset;
|
||||
float x;
|
||||
bool flag;
|
||||
bool missionState;
|
||||
|
||||
for (int32 i = 0; i < m_nActiveSamples; i++) {
|
||||
m_asSamples[m_nActiveSampleQueue][i].m_bIsProcessed = false;
|
||||
m_asActiveSamples[i].m_bIsProcessed = false;
|
||||
}
|
||||
|
||||
for (int32 i = 0; i < m_SampleRequestQueuesStatus[m_nActiveSampleQueue]; ++i) {
|
||||
tSound &sample = m_asSamples[m_nActiveSampleQueue][m_abSampleQueueIndexTable[m_nActiveSampleQueue][i]];
|
||||
for (int32 i = 0; i < m_SampleRequestQueuesStatus[m_nActiveSampleQueue]; i++) {
|
||||
tSound& sample = m_asSamples[m_nActiveSampleQueue][m_abSampleQueueIndexTable[m_nActiveSampleQueue][i]];
|
||||
if (sample.m_nSampleIndex != NO_SAMPLE) {
|
||||
for (int32 j = 0; j < m_nActiveSamples; ++j) {
|
||||
if (sample.m_nEntityIndex == m_asActiveSamples[j].m_nEntityIndex && sample.m_nCounter == m_asActiveSamples[j].m_nCounter &&
|
||||
for (int32 j = 0; j < m_nActiveSamples; j++) {
|
||||
if (sample.m_nEntityIndex == m_asActiveSamples[j].m_nEntityIndex &&
|
||||
sample.m_nCounter == m_asActiveSamples[j].m_nCounter &&
|
||||
sample.m_nSampleIndex == m_asActiveSamples[j].m_nSampleIndex) {
|
||||
if (sample.m_nLoopCount) {
|
||||
if (m_FrameCounter & 1) {
|
||||
flag = !!(j & 1);
|
||||
|
||||
if (field_5554 & 1) {
|
||||
if (!(j & 1)) {
|
||||
flag = false;
|
||||
} else {
|
||||
flag = !(j & 1);
|
||||
flag = true;
|
||||
}
|
||||
} else if (j & 1) {
|
||||
flag = false;
|
||||
} else {
|
||||
flag = true;
|
||||
}
|
||||
|
||||
if (flag && !SampleManager.GetChannelUsedFlag(j)) {
|
||||
sample.m_bLoopEnded = true;
|
||||
m_asActiveSamples[j].m_bLoopEnded = true;
|
||||
|
@ -790,6 +790,8 @@ cAudioManager::ProcessActiveQueues()
|
|||
m_asActiveSamples[j].m_nEntityIndex = AEHANDLE_NONE;
|
||||
continue;
|
||||
}
|
||||
if (!sample.m_nReleasingVolumeDivider)
|
||||
sample.m_nReleasingVolumeDivider = 1;
|
||||
}
|
||||
sample.m_bIsProcessed = true;
|
||||
m_asActiveSamples[j].m_bIsProcessed = true;
|
||||
|
@ -805,37 +807,39 @@ cAudioManager::ProcessActiveQueues()
|
|||
SampleManager.SetChannelEmittingVolume(j, emittingVol);
|
||||
} else {
|
||||
m_asActiveSamples[j].m_fDistance = sample.m_fDistance;
|
||||
position2 = sample.m_fDistance;
|
||||
position1 = m_asActiveSamples[j].m_fDistance;
|
||||
sample.m_nFrequency = ComputeDopplerEffectedFrequency(sample.m_nFrequency, position1, position2, sample.m_fSpeedMultiplier);
|
||||
sample.m_nFrequency = ComputeDopplerEffectedFrequency(
|
||||
sample.m_nFrequency,
|
||||
m_asActiveSamples[j].m_fDistance,
|
||||
sample.m_fDistance,
|
||||
sample.m_fSpeedMultiplier);
|
||||
|
||||
if (sample.m_nFrequency != m_asActiveSamples[j].m_nFrequency) {
|
||||
int32 freq;
|
||||
if (sample.m_nFrequency <= m_asActiveSamples[j].m_nFrequency) {
|
||||
#ifdef FIX_BUGS
|
||||
freq = Max((int32)sample.m_nFrequency, (int32)m_asActiveSamples[j].m_nFrequency - 6000);
|
||||
#else
|
||||
freq = Max((int32)sample.m_nFrequency, int32(m_asActiveSamples[j].m_nFrequency - 6000));
|
||||
#endif
|
||||
} else {
|
||||
freq = Min(sample.m_nFrequency, m_asActiveSamples[j].m_nFrequency + 6000);
|
||||
m_asActiveSamples[j].m_nFrequency = clamp2((int32)sample.m_nFrequency, (int32)m_asActiveSamples[j].m_nFrequency, 6000);
|
||||
SampleManager.SetChannelFrequency(j, m_asActiveSamples[j].m_nFrequency);
|
||||
}
|
||||
m_asActiveSamples[j].m_nFrequency = freq;
|
||||
SampleManager.SetChannelFrequency(j, freq);
|
||||
}
|
||||
|
||||
if (sample.m_nEmittingVolume != m_asActiveSamples[j].m_nEmittingVolume) {
|
||||
if (sample.m_nEmittingVolume <= m_asActiveSamples[j].m_nEmittingVolume) {
|
||||
vol = Max(m_asActiveSamples[j].m_nEmittingVolume - 10, sample.m_nEmittingVolume);
|
||||
} else {
|
||||
vol = Min(m_asActiveSamples[j].m_nEmittingVolume + 10, sample.m_nEmittingVolume);
|
||||
}
|
||||
vol = clamp2((int8)sample.m_nEmittingVolume, (int8)m_asActiveSamples[j].m_nEmittingVolume, 10);
|
||||
|
||||
uint8 emittingVol;
|
||||
if (field_4) {
|
||||
emittingVol = 2 * Min(63, vol);
|
||||
} else {
|
||||
emittingVol = vol;
|
||||
}
|
||||
|
||||
missionState = false;
|
||||
for (int32 k = 0; k < ARRAY_SIZE(m_sMissionAudio.m_bIsMobile); k++) {
|
||||
if (m_sMissionAudio.m_bIsMobile[k]) {
|
||||
missionState = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (missionState) {
|
||||
emittingVol = (emittingVol * field_5538) / 127;
|
||||
} else {
|
||||
if (field_5538 < 127)
|
||||
emittingVol = (emittingVol * field_5538) / 127;
|
||||
}
|
||||
|
||||
SampleManager.SetChannelEmittingVolume(j, emittingVol);
|
||||
m_asActiveSamples[j].m_nEmittingVolume = vol;
|
||||
}
|
||||
|
@ -844,10 +848,11 @@ cAudioManager::ProcessActiveQueues()
|
|||
SampleManager.SetChannel3DDistances(j, sample.m_fSoundIntensity, 0.25f * sample.m_fSoundIntensity);
|
||||
}
|
||||
SampleManager.SetChannelReverbFlag(j, sample.m_bReverbFlag);
|
||||
break;
|
||||
break; //continue for i
|
||||
}
|
||||
sample.m_bIsProcessed = false;
|
||||
m_asActiveSamples[j].m_bIsProcessed = false;
|
||||
//continue for j
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -859,59 +864,69 @@ cAudioManager::ProcessActiveQueues()
|
|||
m_asActiveSamples[i].m_nEntityIndex = AEHANDLE_NONE;
|
||||
}
|
||||
}
|
||||
for (uint8 i = 0; i < m_SampleRequestQueuesStatus[m_nActiveSampleQueue]; ++i) {
|
||||
tSound &sample = m_asSamples[m_nActiveSampleQueue][m_abSampleQueueIndexTable[m_nActiveSampleQueue][i]];
|
||||
if (!sample.m_bIsProcessed && !sample.m_bLoopEnded && m_asAudioEntities[sample.m_nEntityIndex].m_bIsUsed && sample.m_nSampleIndex < NO_SAMPLE) {
|
||||
for (uint8 i = 0; i < m_SampleRequestQueuesStatus[m_nActiveSampleQueue]; i++) {
|
||||
tSound& sample = m_asSamples[m_nActiveSampleQueue][m_abSampleQueueIndexTable[m_nActiveSampleQueue][i]];
|
||||
if (!sample.m_bIsProcessed && !sample.m_bLoopEnded &&
|
||||
m_asAudioEntities[sample.m_nEntityIndex].m_bIsUsed && sample.m_nSampleIndex < NO_SAMPLE) {
|
||||
if (sample.m_nCounter > 255 && sample.m_nLoopCount && sample.m_nLoopsRemaining) {
|
||||
--sample.m_nLoopsRemaining;
|
||||
sample.m_nLoopsRemaining--;
|
||||
sample.m_nReleasingVolumeDivider = 1;
|
||||
} else {
|
||||
for (uint8 j = 0; j < m_nActiveSamples; ++j) {
|
||||
if (!m_asActiveSamples[j].m_bIsProcessed) {
|
||||
if (sample.m_nLoopCount) {
|
||||
v28 = sample.m_nFrequency / m_nTimeSpent;
|
||||
v29 = sample.m_nLoopCount * SampleManager.GetSampleLength(sample.m_nSampleIndex);
|
||||
if (v28 == 0)
|
||||
for (uint8 j = 0; j < m_nActiveSamples; j++) {
|
||||
uint8 k = (j + field_6) % m_nActiveSamples;
|
||||
if (!m_asActiveSamples[k].m_bIsProcessed) {
|
||||
if (sample.m_nLoopCount != 0) {
|
||||
freqDivided = sample.m_nFrequency / m_nTimeSpent;
|
||||
loopCount = sample.m_nLoopCount * SampleManager.GetSampleLength(sample.m_nSampleIndex);
|
||||
if (freqDivided == 0)
|
||||
continue;
|
||||
sample.m_nReleasingVolumeDivider = v29 / v28 + 1;
|
||||
sample.m_nReleasingVolumeDivider = loopCount / freqDivided + 1;
|
||||
}
|
||||
memcpy(&m_asActiveSamples[j], &sample, sizeof(tSound));
|
||||
if (!m_asActiveSamples[j].m_bIs2D)
|
||||
TranslateEntity(&m_asActiveSamples[j].m_vecPos, &position);
|
||||
memcpy(&m_asActiveSamples[k], &sample, sizeof(tSound));
|
||||
if (!m_asActiveSamples[k].m_bIs2D)
|
||||
TranslateEntity(&m_asActiveSamples[k].m_vecPos, &position);
|
||||
if (field_4) {
|
||||
emittingVol = 2 * Min(63, m_asActiveSamples[j].m_nEmittingVolume);
|
||||
emittingVol = 2 * Min(63, m_asActiveSamples[k].m_nEmittingVolume);
|
||||
} else {
|
||||
emittingVol = m_asActiveSamples[j].m_nEmittingVolume;
|
||||
emittingVol = m_asActiveSamples[k].m_nEmittingVolume;
|
||||
}
|
||||
if (SampleManager.InitialiseChannel(j, m_asActiveSamples[j].m_nSampleIndex, m_asActiveSamples[j].m_nBankIndex)) {
|
||||
SampleManager.SetChannelFrequency(j, m_asActiveSamples[j].m_nFrequency);
|
||||
SampleManager.SetChannelEmittingVolume(j, emittingVol);
|
||||
SampleManager.SetChannelLoopPoints(j, m_asActiveSamples[j].m_nLoopStart, m_asActiveSamples[j].m_nLoopEnd);
|
||||
SampleManager.SetChannelLoopCount(j, m_asActiveSamples[j].m_nLoopCount);
|
||||
SampleManager.SetChannelReverbFlag(j, m_asActiveSamples[j].m_bReverbFlag);
|
||||
if (m_asActiveSamples[j].m_bIs2D) {
|
||||
uint8 offset = m_asActiveSamples[j].m_nOffset;
|
||||
if (SampleManager.InitialiseChannel(k, m_asActiveSamples[k].m_nSampleIndex, m_asActiveSamples[k].m_nBankIndex)) {
|
||||
SampleManager.SetChannelFrequency(k, m_asActiveSamples[k].m_nFrequency);
|
||||
bool isMobile = false;
|
||||
for (int32 l = 0; l < ARRAY_SIZE(m_sMissionAudio.m_bIsMobile); l++) {
|
||||
if (m_sMissionAudio.m_bIsMobile[l]) {
|
||||
isMobile = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!isMobile || m_asActiveSamples[k].m_bIs2D) {
|
||||
if (field_5538 < 127)
|
||||
emittingVol *= field_5538 / 127;
|
||||
vol = emittingVol;
|
||||
} else {
|
||||
vol = (emittingVol * field_5538 / 127);
|
||||
}
|
||||
SampleManager.SetChannelEmittingVolume(k, vol);
|
||||
SampleManager.SetChannelLoopPoints(k, m_asActiveSamples[k].m_nLoopStart, m_asActiveSamples[k].m_nLoopEnd);
|
||||
SampleManager.SetChannelLoopCount(k, m_asActiveSamples[k].m_nLoopCount);
|
||||
SampleManager.SetChannelReverbFlag(k, m_asActiveSamples[k].m_bReverbFlag);
|
||||
if (m_asActiveSamples[k].m_bIs2D) {
|
||||
offset = m_asActiveSamples[k].m_nOffset;
|
||||
if (offset == 63) {
|
||||
x = 0.f;
|
||||
x = 0.0f;
|
||||
} else if (offset >= 63) {
|
||||
x = (offset - 63) * 1000.f / 63;
|
||||
x = (offset - 63) * 1000.0f / 63;
|
||||
} else {
|
||||
x = -(63 - offset) * 1000.f / 63;
|
||||
x = -(63 - offset) * 1000.0f / 63; //same like line below
|
||||
}
|
||||
usedX = x;
|
||||
usedY = 0.f;
|
||||
usedZ = 0.f;
|
||||
m_asActiveSamples[j].m_fSoundIntensity = 100000.0f;
|
||||
} else {
|
||||
usedX = position.x;
|
||||
usedY = position.y;
|
||||
usedZ = position.z;
|
||||
position = CVector(x, 0.0f, 0.0f);
|
||||
m_asActiveSamples[k].m_fSoundIntensity = 100000.0f;
|
||||
}
|
||||
SampleManager.SetChannel3DPosition(j, usedX, usedY, usedZ);
|
||||
SampleManager.SetChannel3DDistances(j, m_asActiveSamples[j].m_fSoundIntensity, 0.25f * m_asActiveSamples[j].m_fSoundIntensity);
|
||||
SampleManager.StartChannel(j);
|
||||
SampleManager.SetChannel3DPosition(k, position.x, position.y, position.z);
|
||||
SampleManager.SetChannel3DDistances(k, m_asActiveSamples[k].m_fSoundIntensity, 0.25f * m_asActiveSamples[k].m_fSoundIntensity);
|
||||
SampleManager.StartChannel(k);
|
||||
}
|
||||
m_asActiveSamples[j].m_bIsProcessed = true;
|
||||
m_asActiveSamples[k].m_bIsProcessed = true;
|
||||
sample.m_bIsProcessed = true;
|
||||
sample.m_nVolumeChange = -1;
|
||||
break;
|
||||
|
@ -920,6 +935,7 @@ cAudioManager::ProcessActiveQueues()
|
|||
}
|
||||
}
|
||||
}
|
||||
field_6 %= m_nActiveSamples;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -934,7 +950,7 @@ cAudioManager::ClearRequestedQueue()
|
|||
void
|
||||
cAudioManager::ClearActiveSamples()
|
||||
{
|
||||
for (int32 i = 0; i < m_nActiveSamples; i++) {
|
||||
for (uint8 i = 0; i < m_nActiveSamples; i++) {
|
||||
m_asActiveSamples[i].m_nEntityIndex = AEHANDLE_NONE;
|
||||
m_asActiveSamples[i].m_nCounter = 0;
|
||||
m_asActiveSamples[i].m_nSampleIndex = NO_SAMPLE;
|
||||
|
@ -957,7 +973,7 @@ cAudioManager::ClearActiveSamples()
|
|||
m_asActiveSamples[i].m_nCalculatedVolume = 0;
|
||||
m_asActiveSamples[i].m_nReleasingVolumeDivider = 0;
|
||||
m_asActiveSamples[i].m_nVolumeChange = -1;
|
||||
m_asActiveSamples[i].m_vecPos = {0.0f, 0.0f, 0.0f};
|
||||
m_asActiveSamples[i].m_vecPos = CVector(0.0f, 0.0f, 0.0f);
|
||||
m_asActiveSamples[i].m_bReverbFlag = false;
|
||||
m_asActiveSamples[i].m_nLoopsRemaining = 0;
|
||||
m_asActiveSamples[i].m_bRequireReflection = false;
|
||||
|
|
|
@ -181,6 +181,7 @@ public:
|
|||
uint8 m_nActiveSamples;
|
||||
uint8 field_4; // unused
|
||||
bool m_bDynamicAcousticModelingStatus;
|
||||
int8 field_6;
|
||||
float m_fSpeedOfSound;
|
||||
bool m_bTimerJustReset;
|
||||
int32 m_nTimer;
|
||||
|
@ -235,31 +236,29 @@ public:
|
|||
float GetReflectionsDistance(int32 idx) const { return m_afReflectionsDistances[idx]; }
|
||||
int32 GetRandomNumber(int32 idx) const { return m_anRandomTable[idx]; }
|
||||
int32 GetRandomNumberInRange(int32 idx, int32 low, int32 high) const { return (m_anRandomTable[idx] % (high - low + 1)) + low; }
|
||||
bool IsMissionAudioSamplePlaying(uint8 slot) const;// { return m_sMissionAudio.m_nPlayStatus == 1; }
|
||||
bool IsMissionAudioSamplePlaying(uint8 slot) const; // { return m_sMissionAudio.m_nPlayStatus == 1; }
|
||||
bool ShouldDuckMissionAudio(uint8 slot) const;
|
||||
|
||||
// "Should" be in alphabetic order, except "getXTalkSfx"
|
||||
void AddDetailsToRequestedOrderList(uint8 sample);
|
||||
void AddPlayerCarSample(uint8 emittingVolume, int32 freq, uint32 sample, uint8 bank,
|
||||
uint8 counter, bool notLooping); //done
|
||||
void AddReflectionsToRequestedQueue();
|
||||
void AddReleasingSounds();
|
||||
void AddSampleToRequestedQueue();
|
||||
void AgeCrimes();
|
||||
void AddDetailsToRequestedOrderList(uint8 sample); // done (inlined in vc)
|
||||
void AddPlayerCarSample(uint8 emittingVolume, int32 freq, uint32 sample, uint8 bank, uint8 counter, bool notLooping); // done
|
||||
void AddReflectionsToRequestedQueue(); // done
|
||||
void AddReleasingSounds(); // done
|
||||
void AddSampleToRequestedQueue(); // done
|
||||
void AgeCrimes(); // done (inlined in vc)
|
||||
|
||||
void CalculateDistance(bool &condition, float dist); //done
|
||||
bool CheckForAnAudioFileOnCD() const;
|
||||
void ClearActiveSamples();
|
||||
void ClearMissionAudio(uint8 slot);
|
||||
void ClearRequestedQueue();
|
||||
int32 ComputeDopplerEffectedFrequency(uint32 oldFreq, float position1, float position2,
|
||||
float speedMultiplier) const;
|
||||
int32 ComputePan(float, CVector *);
|
||||
uint8 ComputeVolume(uint8 emittingVolume, float soundIntensity, float distance) const;
|
||||
int32 CreateEntity(eAudioType type, void *entity);
|
||||
void CalculateDistance(bool &condition, float dist); // done
|
||||
bool CheckForAnAudioFileOnCD() const; // done
|
||||
void ClearActiveSamples(); // done
|
||||
void ClearMissionAudio(uint8 slot); // done
|
||||
void ClearRequestedQueue(); // done (inlined in vc)
|
||||
uint32 ComputeDopplerEffectedFrequency(uint32 oldFreq, float position1, float position2, float speedMultiplier) const; // done
|
||||
int32 ComputePan(float, CVector *); // done
|
||||
uint8 ComputeVolume(uint8 emittingVolume, float soundIntensity, float distance) const; // done
|
||||
int32 CreateEntity(eAudioType type, void *entity); // done
|
||||
|
||||
void DestroyAllGameCreatedEntities();
|
||||
void DestroyEntity(int32 id);
|
||||
void DestroyEntity(int32 id); //done (inlined in vc)
|
||||
void DoPoliceRadioCrackle();
|
||||
|
||||
// functions returning talk sfx,
|
||||
|
@ -271,46 +270,44 @@ public:
|
|||
char *Get3DProviderName(uint8 id) const;
|
||||
uint8 GetCDAudioDriveLetter() const;
|
||||
int8 GetCurrent3DProviderIndex() const;
|
||||
int8 AutoDetect3DProviders() const;
|
||||
int8 AutoDetect3DProviders() const; // done
|
||||
float GetCollisionLoopingRatio(uint32 a, uint32 b, float c) const; // not used
|
||||
float GetCollisionOneShotRatio(int32 a, float b) const;
|
||||
float GetCollisionRatio(float a, float b, float c, float d) const;
|
||||
float GetDistanceSquared(const CVector &v) const; //done
|
||||
float GetDistanceSquared(const CVector &v) const; // done (inlined in vc)
|
||||
int32 GetJumboTaxiFreq() const;
|
||||
uint8 GetMissionAudioLoadingStatus(uint8 slot) const;
|
||||
uint8 GetMissionAudioLoadingStatus(uint8 slot) const; // done
|
||||
int8 GetMissionScriptPoliceAudioPlayingStatus() const;
|
||||
uint8 GetNum3DProvidersAvailable() const;
|
||||
uint8 GetNum3DProvidersAvailable() const; // done
|
||||
int32 GetPedCommentSfx(CPed *ped, int32 sound);
|
||||
void GetPhrase(uint32 *phrase, uint32 *prevPhrase, uint32 sample, uint32 maxOffset) const;
|
||||
float GetVehicleDriveWheelSkidValue(uint8 wheel, CAutomobile *automobile,
|
||||
cTransmission *transmission, float velocityChange);
|
||||
float GetVehicleNonDriveWheelSkidValue(uint8 wheel, CAutomobile *automobile,
|
||||
cTransmission *transmission, float velocityChange);
|
||||
float GetVehicleDriveWheelSkidValue(uint8 wheel, CAutomobile *automobile, cTransmission *transmission, float velocityChange);
|
||||
float GetVehicleNonDriveWheelSkidValue(uint8 wheel, CAutomobile *automobile, cTransmission *transmission, float velocityChange);
|
||||
|
||||
bool HasAirBrakes(int32 model) const; //done
|
||||
bool HasAirBrakes(int32 model) const; // done
|
||||
|
||||
void Initialise();
|
||||
void Initialise(); // done
|
||||
void InitialisePoliceRadio();
|
||||
void InitialisePoliceRadioZones();
|
||||
void InterrogateAudioEntities();
|
||||
void InterrogateAudioEntities(); // done
|
||||
bool IsAudioInitialised() const;
|
||||
bool IsMissionAudioSampleFinished(uint8 slot);
|
||||
bool IsMP3RadioChannelAvailable() const;
|
||||
bool IsMP3RadioChannelAvailable() const; // done
|
||||
|
||||
bool MissionScriptAudioUsesPoliceChannel(int32 soundMission) const;
|
||||
|
||||
void PlayLoadedMissionAudio(uint8 slot);
|
||||
void PlayOneShot(int32 index, int16 sound, float vol);
|
||||
void PlayLoadedMissionAudio(uint8 slot); // done
|
||||
void PlayOneShot(int32 index, int16 sound, float vol); // done
|
||||
void PlaySuspectLastSeen(float x, float y, float z);
|
||||
void PlayerJustGotInCar() const; //done
|
||||
void PlayerJustLeftCar() const; //done
|
||||
void PlayerJustGotInCar() const; // done
|
||||
void PlayerJustLeftCar() const; // done
|
||||
void PostInitialiseGameSpecificSetup();
|
||||
void PostTerminateGameSpecificShutdown(); //done
|
||||
void PreInitialiseGameSpecificSetup() const; //done
|
||||
void PreloadMissionAudio(uint8 slot, Const char *name);
|
||||
void PreTerminateGameSpecificShutdown(); //done
|
||||
void PostTerminateGameSpecificShutdown(); // done
|
||||
void PreInitialiseGameSpecificSetup() const; // done
|
||||
void PreloadMissionAudio(uint8 slot, Const char *name); // done
|
||||
void PreTerminateGameSpecificShutdown(); // done
|
||||
/// processX - main logic of adding new sounds
|
||||
void ProcessActiveQueues();
|
||||
void ProcessActiveQueues(); //done
|
||||
bool ProcessAirBrakes(cVehicleParams *params);
|
||||
bool ProcessBoatEngine(cVehicleParams *params);
|
||||
bool ProcessBoatMovingOverWater(cVehicleParams *params);
|
||||
|
@ -375,11 +372,10 @@ public:
|
|||
void ProcessExtraSounds(); //done
|
||||
|
||||
int32 RandomDisplacement(uint32 seed) const;
|
||||
void ReacquireDigitalHandle() const;
|
||||
void ReleaseDigitalHandle() const;
|
||||
void ReportCollision(CEntity *entity1, CEntity *entity2, uint8 surface1, uint8 surface2,
|
||||
float collisionPower, float intensity2);
|
||||
void ReportCrime(int32 crime, const CVector *pos);
|
||||
void ReacquireDigitalHandle() const; // done
|
||||
void ReleaseDigitalHandle() const; // done
|
||||
void ReportCollision(CEntity *entity1, CEntity *entity2, uint8 surface1, uint8 surface2, float collisionPower, float intensity2); // done
|
||||
void ReportCrime(int32 crime, const CVector *pos); // done
|
||||
void ResetAudioLogicTimers(uint32 timer);
|
||||
void ResetPoliceRadio();
|
||||
void ResetTimers(uint32 time);
|
||||
|
@ -394,7 +390,7 @@ public:
|
|||
void SetEffectsFadeVol(uint8 volume) const;
|
||||
void SetEffectsMasterVolume(uint8 volume) const;
|
||||
void SetMP3BoostVolume(uint8 volume) const;
|
||||
void SetEntityStatus(int32 id, uint8 status);
|
||||
void SetEntityStatus(int32 id, uint8 status); //done
|
||||
uint32 SetLoopingCollisionRequestedSfxFreqAndGetVol(const cAudioCollision &audioCollision);
|
||||
void SetMissionAudioLocation(uint8 slot, float x, float y, float z);
|
||||
void SetMissionScriptPoliceAudio(int32 sfx) const;
|
||||
|
|
|
@ -1258,7 +1258,7 @@ cMusicManager::DisplayRadioStationName()
|
|||
CFont::SetPropOn();
|
||||
CFont::SetFontStyle(FONT_STANDARD);
|
||||
CFont::SetCentreOn();
|
||||
CFont::SetCentreSize(SCREEN_SCALE_X(640.0f));
|
||||
CFont::SetCentreSize(SCREEN_STRETCH_X(DEFAULT_SCREEN_WIDTH));
|
||||
CFont::SetColor(CRGBA(0, 0, 0, 255));
|
||||
CFont::PrintString(SCREEN_WIDTH / 2 + SCREEN_SCALE_X(2.0f), SCREEN_SCALE_Y(22.0f) + SCREEN_SCALE_Y(2.0f), pCurrentStation);
|
||||
|
||||
|
|
|
@ -725,7 +725,7 @@ cAudioManager::AgeCrimes()
|
|||
{
|
||||
for (uint8 i = 0; i < ARRAY_SIZE(m_sPoliceRadioQueue.crimes); i++) {
|
||||
if (m_sPoliceRadioQueue.crimes[i].type != CRIME_NONE) {
|
||||
if (++m_sPoliceRadioQueue.crimes[i].timer > 1500) m_sPoliceRadioQueue.crimes[i].type = CRIME_NONE;
|
||||
if (++m_sPoliceRadioQueue.crimes[i].timer > 1200) m_sPoliceRadioQueue.crimes[i].type = CRIME_NONE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,4 +43,4 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
VALIDATE_SIZE(cPoliceRadioQueue, 444);
|
||||
VALIDATE_SIZE(cPoliceRadioQueue, 0x1BC);
|
||||
|
|
|
@ -380,7 +380,7 @@ CGameLogic::RestorePlayerStuffDuringResurrection(CPlayerPed *pPlayerPed, CVector
|
|||
CStats::CheckPointReachedUnsuccessfully();
|
||||
CWorld::Remove(pPlayerPed);
|
||||
CWorld::Add(pPlayerPed);
|
||||
//CHud::ResetWastedText() // TODO(MIAMI)
|
||||
CHud::ResetWastedText();
|
||||
CStreaming::StreamZoneModels(pos);
|
||||
clearWaterDrop = true;
|
||||
}
|
||||
|
|
|
@ -1872,8 +1872,8 @@ CPathFind::TakeWidthIntoAccountForWandering(CPathNode* nextNode, uint16 random)
|
|||
void
|
||||
CPathFind::TakeWidthIntoAccountForCoors(CPathNode* node1, CPathNode* node2, uint16 random, float* x, float* y)
|
||||
{
|
||||
*x += (Min(node1->width, node2->width) * ((random % 16) - 7));
|
||||
*y += (Min(node1->width, node2->width) * (((random / 16) % 16) - 7));
|
||||
*x += (Min(node1->width, node2->width) * WIDTH_TO_PED_NODE_WIDTH * ((random % 16) - 7));
|
||||
*y += (Min(node1->width, node2->width) * WIDTH_TO_PED_NODE_WIDTH * (((random / 16) % 16) - 7));
|
||||
}
|
||||
|
||||
CPathNode*
|
||||
|
|
|
@ -6,6 +6,7 @@ class CVehicle;
|
|||
class CPtrList;
|
||||
|
||||
#define LANE_WIDTH 5.0f
|
||||
#define WIDTH_TO_PED_NODE_WIDTH (31.f/(500.f * 8.f))
|
||||
|
||||
enum
|
||||
{
|
||||
|
@ -89,7 +90,7 @@ struct CPathNode
|
|||
float GetZ(void) { return z/8.0f; }
|
||||
bool HasDivider(void) { return width != 0; }
|
||||
float GetDividerWidth(void) { return width/(2*8.0f); }
|
||||
float GetPedNodeWidth(void) { return width*(31.f/(500.f * 8.f)); }
|
||||
float GetPedNodeWidth(void) { return width*WIDTH_TO_PED_NODE_WIDTH; }
|
||||
CPathNode *GetPrev(void);
|
||||
CPathNode *GetNext(void);
|
||||
void SetPrev(CPathNode *node);
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
#include "Replay.h"
|
||||
#endif
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
CPhoneInfo gPhoneInfo;
|
||||
|
||||
bool CPhoneInfo::bDisplayingPhoneMessage; // is phone picked up
|
||||
|
|
|
@ -2118,7 +2118,7 @@ int32 CRunningScript::CollectNextParameterWithoutIncreasingPC(uint32 ip)
|
|||
case ARGUMENT_INT32:
|
||||
return CTheScripts::Read4BytesFromScript(pIp);
|
||||
case ARGUMENT_GLOBALVAR:
|
||||
return *((int32*)&CTheScripts::ScriptSpace[CTheScripts::Read2BytesFromScript(pIp)]);
|
||||
return *((int32*)&CTheScripts::ScriptSpace[(uint16)CTheScripts::Read2BytesFromScript(pIp)]);
|
||||
case ARGUMENT_LOCALVAR:
|
||||
return m_anLocalVariables[CTheScripts::Read2BytesFromScript(pIp)];
|
||||
case ARGUMENT_INT8:
|
||||
|
@ -2138,7 +2138,7 @@ void CRunningScript::StoreParameters(uint32* pIp, int16 number)
|
|||
for (int16 i = 0; i < number; i++){
|
||||
switch (CTheScripts::Read1ByteFromScript(pIp)) {
|
||||
case ARGUMENT_GLOBALVAR:
|
||||
*(int32*)&CTheScripts::ScriptSpace[CTheScripts::Read2BytesFromScript(pIp)] = ScriptParams[i];
|
||||
*(int32*)&CTheScripts::ScriptSpace[(uint16)CTheScripts::Read2BytesFromScript(pIp)] = ScriptParams[i];
|
||||
break;
|
||||
case ARGUMENT_LOCALVAR:
|
||||
m_anLocalVariables[CTheScripts::Read2BytesFromScript(pIp)] = ScriptParams[i];
|
||||
|
@ -2155,7 +2155,7 @@ int32 *CRunningScript::GetPointerToScriptVariable(uint32* pIp, int16 type)
|
|||
{
|
||||
case ARGUMENT_GLOBALVAR:
|
||||
script_assert(type == VAR_GLOBAL);
|
||||
return (int32*)&CTheScripts::ScriptSpace[CTheScripts::Read2BytesFromScript(pIp)];
|
||||
return (int32*)&CTheScripts::ScriptSpace[(uint16)CTheScripts::Read2BytesFromScript(pIp)];
|
||||
case ARGUMENT_LOCALVAR:
|
||||
script_assert(type == VAR_LOCAL);
|
||||
return &m_anLocalVariables[CTheScripts::Read2BytesFromScript(pIp)];
|
||||
|
@ -2472,7 +2472,7 @@ int8 CRunningScript::ProcessOneCommand()
|
|||
{
|
||||
int8 retval = -1;
|
||||
++CTheScripts::CommandsExecuted;
|
||||
int32 command = CTheScripts::Read2BytesFromScript(&m_nIp);
|
||||
int32 command = (uint16)CTheScripts::Read2BytesFromScript(&m_nIp);
|
||||
m_bNotFlag = (command & 0x8000);
|
||||
command &= 0x7FFF;
|
||||
#ifdef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
||||
|
@ -3095,7 +3095,7 @@ int8 CRunningScript::ProcessCommands0To99(int32 command)
|
|||
pNew->m_anLocalVariables[i] = CTheScripts::Read4BytesFromScript(&m_nIp);
|
||||
break;
|
||||
case ARGUMENT_GLOBALVAR:
|
||||
pNew->m_anLocalVariables[i] = *(int32*)&CTheScripts::ScriptSpace[CTheScripts::Read2BytesFromScript(&m_nIp)];
|
||||
pNew->m_anLocalVariables[i] = *(int32*)&CTheScripts::ScriptSpace[(uint16)CTheScripts::Read2BytesFromScript(&m_nIp)];
|
||||
break;
|
||||
case ARGUMENT_LOCALVAR:
|
||||
pNew->m_anLocalVariables[i] = m_anLocalVariables[CTheScripts::Read2BytesFromScript(&m_nIp)];
|
||||
|
@ -4886,7 +4886,7 @@ int8 CRunningScript::ProcessCommands300To399(int32 command)
|
|||
{
|
||||
script_assert(CTheScripts::ScriptSpace[m_nIp] == ARGUMENT_GLOBALVAR);
|
||||
m_nIp++;
|
||||
uint32 offset = CTheScripts::Read2BytesFromScript(&m_nIp);
|
||||
uint16 offset = CTheScripts::Read2BytesFromScript(&m_nIp);
|
||||
CollectParameters(&m_nIp, 1);
|
||||
CUserDisplay::OnscnTimer.AddClock(offset, nil, ScriptParams[0] != 0);
|
||||
return 0;
|
||||
|
@ -4895,14 +4895,14 @@ int8 CRunningScript::ProcessCommands300To399(int32 command)
|
|||
{
|
||||
script_assert(CTheScripts::ScriptSpace[m_nIp] == ARGUMENT_GLOBALVAR);
|
||||
m_nIp++;
|
||||
CUserDisplay::OnscnTimer.ClearClock(CTheScripts::Read2BytesFromScript(&m_nIp));
|
||||
CUserDisplay::OnscnTimer.ClearClock((uint16)CTheScripts::Read2BytesFromScript(&m_nIp));
|
||||
return 0;
|
||||
}
|
||||
case COMMAND_DISPLAY_ONSCREEN_COUNTER:
|
||||
{
|
||||
script_assert(CTheScripts::ScriptSpace[m_nIp] == ARGUMENT_GLOBALVAR);
|
||||
m_nIp++;
|
||||
int32 counter = CTheScripts::Read2BytesFromScript(&m_nIp);
|
||||
int16 counter = CTheScripts::Read2BytesFromScript(&m_nIp);
|
||||
CollectParameters(&m_nIp, 1);
|
||||
CUserDisplay::OnscnTimer.AddCounter(counter, ScriptParams[0], nil, 0);
|
||||
return 0;
|
||||
|
@ -4911,7 +4911,7 @@ int8 CRunningScript::ProcessCommands300To399(int32 command)
|
|||
{
|
||||
script_assert(CTheScripts::ScriptSpace[m_nIp] == ARGUMENT_GLOBALVAR);
|
||||
m_nIp++;
|
||||
CUserDisplay::OnscnTimer.ClearCounter(CTheScripts::Read2BytesFromScript(&m_nIp));
|
||||
CUserDisplay::OnscnTimer.ClearCounter((uint16)CTheScripts::Read2BytesFromScript(&m_nIp));
|
||||
return 0;
|
||||
}
|
||||
case COMMAND_SET_ZONE_CAR_INFO:
|
||||
|
@ -5286,7 +5286,7 @@ int8 CRunningScript::ProcessCommands300To399(int32 command)
|
|||
//case COMMAND_MOVE_CAMERA_ALONG_SPLINE:
|
||||
//case COMMAND_GET_CAMERA_POSITION_ALONG_SPLINE:
|
||||
case COMMAND_DECLARE_MISSION_FLAG:
|
||||
CTheScripts::OnAMissionFlag = CTheScripts::Read2BytesFromScript(&++m_nIp);
|
||||
CTheScripts::OnAMissionFlag = (uint16)CTheScripts::Read2BytesFromScript(&++m_nIp);
|
||||
return 0;
|
||||
case COMMAND_DECLARE_MISSION_FLAG_FOR_CONTACT:
|
||||
return 0;
|
||||
|
@ -10065,7 +10065,7 @@ int8 CRunningScript::ProcessCommands900To999(int32 command)
|
|||
case COMMAND_DISPLAY_ONSCREEN_TIMER_WITH_STRING:
|
||||
{
|
||||
script_assert(CTheScripts::ScriptSpace[m_nIp++] == ARGUMENT_GLOBALVAR);
|
||||
int16 var = CTheScripts::Read2BytesFromScript(&m_nIp);
|
||||
uint16 var = CTheScripts::Read2BytesFromScript(&m_nIp);
|
||||
CollectParameters(&m_nIp, 1);
|
||||
wchar* text = TheText.Get((char*)&CTheScripts::ScriptSpace[m_nIp]); // ???
|
||||
strncpy(onscreen_str, (char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT);
|
||||
|
@ -10076,7 +10076,7 @@ int8 CRunningScript::ProcessCommands900To999(int32 command)
|
|||
case COMMAND_DISPLAY_ONSCREEN_COUNTER_WITH_STRING:
|
||||
{
|
||||
script_assert(CTheScripts::ScriptSpace[m_nIp++] == ARGUMENT_GLOBALVAR);
|
||||
int16 var = CTheScripts::Read2BytesFromScript(&m_nIp);
|
||||
uint16 var = CTheScripts::Read2BytesFromScript(&m_nIp);
|
||||
CollectParameters(&m_nIp, 1);
|
||||
wchar* text = TheText.Get((char*)&CTheScripts::ScriptSpace[m_nIp]); // ???
|
||||
strncpy(onscreen_str, (char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT);
|
||||
|
@ -12709,7 +12709,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
|
|||
{
|
||||
char onscreen_str[12];
|
||||
script_assert(CTheScripts::ScriptSpace[m_nIp++] == ARGUMENT_GLOBALVAR);
|
||||
int16 var = CTheScripts::Read2BytesFromScript(&m_nIp);
|
||||
uint16 var = CTheScripts::Read2BytesFromScript(&m_nIp);
|
||||
CollectParameters(&m_nIp, 2);
|
||||
wchar* text = TheText.Get((char*)&CTheScripts::ScriptSpace[m_nIp]); // ???
|
||||
strncpy(onscreen_str, (char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT);
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
#include "Camera.h"
|
||||
#include "GenericGameStorage.h"
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
CControllerConfigManager ControlsManager;
|
||||
|
||||
CControllerConfigManager::CControllerConfigManager()
|
||||
|
@ -314,6 +316,10 @@ void CControllerConfigManager::InitDefaultControlConfigMouse(CMouseControllerSta
|
|||
SetMouseButtonAssociatedWithAction(PED_CYCLE_WEAPON_RIGHT, 5);
|
||||
|
||||
SetMouseButtonAssociatedWithAction(VEHICLE_CHANGE_RADIO_STATION, 4);
|
||||
|
||||
SetMouseButtonAssociatedWithAction(PED_SNIPER_ZOOM_IN, 4);
|
||||
|
||||
SetMouseButtonAssociatedWithAction(PED_SNIPER_ZOOM_OUT, 5);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -516,11 +522,12 @@ void CControllerConfigManager::UpdateJoyInConfigMenus_ButtonDown(int32 button, i
|
|||
case 13:
|
||||
pad->PCTempJoyState.DPadUp = 255;
|
||||
break;
|
||||
#ifdef REGISTER_START_BUTTON
|
||||
case 12:
|
||||
#ifndef REGISTER_START_BUTTON
|
||||
if (padNumber == 1)
|
||||
#endif
|
||||
pad->PCTempJoyState.Start = 255;
|
||||
break;
|
||||
#endif
|
||||
case 11:
|
||||
pad->PCTempJoyState.RightShock = 255;
|
||||
break;
|
||||
|
@ -624,6 +631,7 @@ void CControllerConfigManager::AffectControllerStateOn_ButtonDown(int32 button,
|
|||
if ( mode == CCam::MODE_1STPERSON
|
||||
|| mode == CCam::MODE_SNIPER
|
||||
|| mode == CCam::MODE_ROCKETLAUNCHER
|
||||
|| mode == CCam::MODE_CAMERA
|
||||
|| mode == CCam::MODE_M16_1STPERSON)
|
||||
{
|
||||
firstPerson = true;
|
||||
|
@ -1645,12 +1653,12 @@ void CControllerConfigManager::DeleteMatchingCommonControls(e_ControllerAction a
|
|||
{
|
||||
if (!GetIsKeyBlank(key, type))
|
||||
{
|
||||
CLEAR_ACTION_IF_NEEDED(CAMERA_CHANGE_VIEW_ALL_SITUATIONS);
|
||||
#ifndef BIND_VEHICLE_FIREWEAPON
|
||||
CLEAR_ACTION_IF_NEEDED(PED_FIREWEAPON);
|
||||
#endif
|
||||
CLEAR_ACTION_IF_NEEDED(GO_LEFT);
|
||||
CLEAR_ACTION_IF_NEEDED(GO_RIGHT);
|
||||
CLEAR_ACTION_IF_NEEDED(CAMERA_CHANGE_VIEW_ALL_SITUATIONS);
|
||||
CLEAR_ACTION_IF_NEEDED(NETWORK_TALK);
|
||||
CLEAR_ACTION_IF_NEEDED(SWITCH_DEBUG_CAM_ON);
|
||||
CLEAR_ACTION_IF_NEEDED(TOGGLE_DPAD);
|
||||
|
@ -1663,15 +1671,13 @@ void CControllerConfigManager::DeleteMatching3rdPersonControls(e_ControllerActio
|
|||
{
|
||||
if (!GetIsKeyBlank(key, type))
|
||||
{
|
||||
CLEAR_ACTION_IF_NEEDED(PED_LOOKBEHIND);
|
||||
CLEAR_ACTION_IF_NEEDED(PED_CYCLE_WEAPON_LEFT);
|
||||
CLEAR_ACTION_IF_NEEDED(PED_CYCLE_WEAPON_RIGHT);
|
||||
CLEAR_ACTION_IF_NEEDED(PED_JUMPING);
|
||||
CLEAR_ACTION_IF_NEEDED(PED_SPRINT);
|
||||
if (key == GetControllerKeyAssociatedWithAction(PED_DUCK, type))
|
||||
ClearSettingsAssociatedWithAction(PED_DUCK, type);
|
||||
if (key == GetControllerKeyAssociatedWithAction(PED_ANSWER_PHONE, type))
|
||||
ClearSettingsAssociatedWithAction(PED_ANSWER_PHONE, type);
|
||||
CLEAR_ACTION_IF_NEEDED(PED_LOOKBEHIND);
|
||||
CLEAR_ACTION_IF_NEEDED(PED_DUCK);
|
||||
CLEAR_ACTION_IF_NEEDED(PED_ANSWER_PHONE);
|
||||
|
||||
if (FrontEndMenuManager.m_ControlMethod == CONTROL_CLASSIC)
|
||||
{
|
||||
|
@ -1710,16 +1716,15 @@ void CControllerConfigManager::DeleteMatchingVehicleControls(e_ControllerAction
|
|||
#ifdef BIND_VEHICLE_FIREWEAPON
|
||||
CLEAR_ACTION_IF_NEEDED(VEHICLE_FIREWEAPON);
|
||||
#endif
|
||||
CLEAR_ACTION_IF_NEEDED(VEHICLE_LOOKBEHIND);
|
||||
CLEAR_ACTION_IF_NEEDED(VEHICLE_LOOKLEFT);
|
||||
CLEAR_ACTION_IF_NEEDED(VEHICLE_LOOKRIGHT);
|
||||
CLEAR_ACTION_IF_NEEDED(VEHICLE_LOOKBEHIND); // note: duplicate
|
||||
CLEAR_ACTION_IF_NEEDED(VEHICLE_HORN);
|
||||
CLEAR_ACTION_IF_NEEDED(VEHICLE_HANDBRAKE);
|
||||
CLEAR_ACTION_IF_NEEDED(VEHICLE_ACCELERATE);
|
||||
CLEAR_ACTION_IF_NEEDED(VEHICLE_BRAKE);
|
||||
CLEAR_ACTION_IF_NEEDED(VEHICLE_CHANGE_RADIO_STATION);
|
||||
CLEAR_ACTION_IF_NEEDED(VEHICLE_HORN);
|
||||
CLEAR_ACTION_IF_NEEDED(TOGGLE_SUBMISSIONS);
|
||||
CLEAR_ACTION_IF_NEEDED(VEHICLE_HANDBRAKE);
|
||||
CLEAR_ACTION_IF_NEEDED(VEHICLE_LOOKLEFT);
|
||||
CLEAR_ACTION_IF_NEEDED(VEHICLE_LOOKRIGHT);
|
||||
CLEAR_ACTION_IF_NEEDED(VEHICLE_LOOKBEHIND);
|
||||
CLEAR_ACTION_IF_NEEDED(VEHICLE_TURRETLEFT);
|
||||
CLEAR_ACTION_IF_NEEDED(VEHICLE_TURRETRIGHT);
|
||||
CLEAR_ACTION_IF_NEEDED(VEHICLE_TURRETUP);
|
||||
|
@ -1758,36 +1763,36 @@ void CControllerConfigManager::DeleteMatchingActionInitiators(e_ControllerAction
|
|||
DeleteMatching1rst3rdPersonControls (action, key, type);
|
||||
break;
|
||||
case ACTIONTYPE_3RDPERSON:
|
||||
DeleteMatching3rdPersonControls (action, key, type);
|
||||
DeleteMatchingCommonControls (action, key, type);
|
||||
DeleteMatchingVehicle_3rdPersonControls(action, key, type);
|
||||
DeleteMatching1rst3rdPersonControls (action, key, type);
|
||||
DeleteMatching3rdPersonControls (action, key, type);
|
||||
DeleteMatchingVehicle_3rdPersonControls(action, key, type);
|
||||
break;
|
||||
case ACTIONTYPE_VEHICLE:
|
||||
DeleteMatchingVehicleControls (action, key, type);
|
||||
DeleteMatchingCommonControls (action, key, type);
|
||||
DeleteMatchingVehicleControls (action, key, type);
|
||||
DeleteMatchingVehicle_3rdPersonControls(action, key, type);
|
||||
break;
|
||||
case ACTIONTYPE_VEHICLE_3RDPERSON:
|
||||
DeleteMatchingCommonControls (action, key, type);
|
||||
DeleteMatching1rst3rdPersonControls (action, key, type);
|
||||
DeleteMatching3rdPersonControls (action, key, type);
|
||||
DeleteMatchingVehicleControls (action, key, type);
|
||||
DeleteMatchingCommonControls (action, key, type);
|
||||
DeleteMatching1rst3rdPersonControls (action, key, type);
|
||||
break;
|
||||
case ACTIONTYPE_1RST3RDPERSON:
|
||||
DeleteMatching1rstPersonControls (action, key, type);
|
||||
DeleteMatching3rdPersonControls (action, key, type);
|
||||
DeleteMatchingCommonControls (action, key, type);
|
||||
DeleteMatchingVehicle_3rdPersonControls(action, key, type);
|
||||
DeleteMatching1rst3rdPersonControls (action, key, type);
|
||||
break;
|
||||
case ACTIONTYPE_COMMON:
|
||||
DeleteMatchingCommonControls (action, key, type);
|
||||
DeleteMatching1rstPersonControls (action, key, type);
|
||||
DeleteMatching1rst3rdPersonControls (action, key, type);
|
||||
DeleteMatching3rdPersonControls (action, key, type);
|
||||
DeleteMatchingVehicleControls (action, key, type);
|
||||
DeleteMatchingVehicle_3rdPersonControls(action, key, type);
|
||||
break;
|
||||
case ACTIONTYPE_1RST3RDPERSON:
|
||||
DeleteMatchingCommonControls (action, key, type);
|
||||
DeleteMatching1rstPersonControls (action, key, type);
|
||||
DeleteMatching1rst3rdPersonControls (action, key, type);
|
||||
DeleteMatching3rdPersonControls (action, key, type);
|
||||
DeleteMatchingVehicle_3rdPersonControls(action, key, type);
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
|
@ -1853,15 +1858,15 @@ e_ControllerActionType CControllerConfigManager::GetActionType(e_ControllerActio
|
|||
#ifdef BIND_VEHICLE_FIREWEAPON
|
||||
case VEHICLE_FIREWEAPON:
|
||||
#endif
|
||||
case VEHICLE_LOOKBEHIND:
|
||||
case VEHICLE_LOOKLEFT:
|
||||
case VEHICLE_LOOKRIGHT:
|
||||
case VEHICLE_HORN:
|
||||
case VEHICLE_HANDBRAKE:
|
||||
case VEHICLE_ACCELERATE:
|
||||
case VEHICLE_BRAKE:
|
||||
case VEHICLE_CHANGE_RADIO_STATION:
|
||||
case VEHICLE_HORN:
|
||||
case TOGGLE_SUBMISSIONS:
|
||||
case VEHICLE_HANDBRAKE:
|
||||
case VEHICLE_LOOKLEFT:
|
||||
case VEHICLE_LOOKRIGHT:
|
||||
case VEHICLE_LOOKBEHIND:
|
||||
case VEHICLE_TURRETLEFT:
|
||||
case VEHICLE_TURRETRIGHT:
|
||||
case VEHICLE_TURRETUP:
|
||||
|
|
|
@ -54,7 +54,7 @@ CRGBA SLIDERON_COLOR(97, 194, 247, 255);
|
|||
CRGBA SLIDEROFF_COLOR(27, 89, 130, 255);
|
||||
CRGBA LIST_BACKGROUND_COLOR(49, 101, 148, 255);
|
||||
|
||||
#define TIDY_UP_PBP // ProcessButtonPresses
|
||||
#define TIDY_UP_PBP // ProcessUserInput
|
||||
#define MAX_VISIBLE_LIST_ROW 30
|
||||
#define SCROLLBAR_MAX_HEIGHT 263.0f // not in end result
|
||||
|
||||
|
@ -77,28 +77,11 @@ CRGBA LIST_BACKGROUND_COLOR(49, 101, 148, 255);
|
|||
#define GetBackJustDown GetSquareJustDown
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef PS2_LIKE_MENU
|
||||
BottomBarOption bbNames[8];
|
||||
int bbTabCount = 0;
|
||||
bool bottomBarActive = false;
|
||||
bool reverseAlpha = false;
|
||||
int pendingScreen = -1;
|
||||
int pendingOption = -1;
|
||||
int curBottomBarOption = -1;
|
||||
int hoveredBottomBarOption = -1;
|
||||
#endif
|
||||
|
||||
#ifdef CUTSCENE_BORDERS_SWITCH
|
||||
bool CMenuManager::m_PrefsCutsceneBorders = true;
|
||||
#endif
|
||||
|
||||
// Originally that was PS2 option color, they forget it here and used in PrintBriefs once(but didn't use the output anyway)
|
||||
#ifdef PS2_LIKE_MENU
|
||||
const CRGBA TEXT_COLOR = CRGBA(150, 110, 30, 255);
|
||||
#else
|
||||
const CRGBA TEXT_COLOR = CRGBA(235, 170, 50, 255); // PC briefs text color
|
||||
#endif
|
||||
const CRGBA TEXT_COLOR = CRGBA(150, 110, 30, 255); // TODO(Miami): is this still here?
|
||||
|
||||
float MENU_TEXT_SIZE_X = SMALLTEXT_X_SCALE;
|
||||
float MENU_TEXT_SIZE_Y = SMALLTEXT_Y_SCALE;
|
||||
|
@ -153,28 +136,15 @@ const char* FrontendFilenames[][2] = {
|
|||
{"upOn", "buttonA"}
|
||||
};
|
||||
|
||||
#define MENU_X_RIGHT_ALIGNED(x) SCALE_AND_CENTER_X(DEFAULT_SCREEN_WIDTH - (x))
|
||||
|
||||
#ifdef ASPECT_RATIO_SCALE
|
||||
// All of the defines below replace the StretchX function. Otherwise use SCREEN_SCALE_X.
|
||||
#define MENU_X_LEFT_ALIGNED(x) ScaleAndCenterX(x)
|
||||
#define MENU_X_RIGHT_ALIGNED(x) ScaleAndCenterX(DEFAULT_SCREEN_WIDTH - (x))
|
||||
#define MENU_X_LEFT_ALIGNED(x) SCALE_AND_CENTER_X(x)
|
||||
#define MENU_X(x) SCREEN_SCALE_X(x)
|
||||
#define MENU_Y(y) SCREEN_SCALE_Y(y)
|
||||
float
|
||||
ScaleAndCenterX(float x)
|
||||
{
|
||||
if (SCREEN_WIDTH == DEFAULT_SCREEN_WIDTH)
|
||||
return x;
|
||||
else {
|
||||
if (x > DEFAULT_SCREEN_WIDTH / 2) {
|
||||
return SCREEN_WIDTH / 2 + SCREEN_SCALE_X(x - DEFAULT_SCREEN_WIDTH / 2);
|
||||
} else {
|
||||
return SCREEN_WIDTH / 2 - SCREEN_SCALE_X(DEFAULT_SCREEN_WIDTH / 2 - x);
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
#define MENU_X_LEFT_ALIGNED(x) StretchX(x)
|
||||
#define MENU_X_RIGHT_ALIGNED(x) SCREEN_STRETCH_FROM_RIGHT(x)
|
||||
#define MENU_X(x) StretchX(x)
|
||||
#define MENU_Y(y) StretchY(y)
|
||||
#endif
|
||||
|
@ -314,33 +284,6 @@ CMenuManager::GetPreviousPageOption()
|
|||
bool DoRWStuffStartOfFrame(int16 TopRed, int16 TopGreen, int16 TopBlue, int16 BottomRed, int16 BottomGreen, int16 BottomBlue, int16 Alpha);
|
||||
void DoRWStuffEndOfFrame(void);
|
||||
|
||||
#ifdef PS2_LIKE_MENU
|
||||
void
|
||||
CMenuManager::SwitchToNewScreen(int8 screen)
|
||||
{
|
||||
if (reverseAlpha) {
|
||||
m_nPrevScreen = m_nCurrScreen;
|
||||
m_nCurrScreen = pendingScreen;
|
||||
m_nCurrOption = pendingOption;
|
||||
reverseAlpha = false;
|
||||
if (updateDelay)
|
||||
m_LastScreenSwitch = CTimer::GetTimeInMillisecondsPauseMode();
|
||||
}
|
||||
if (withReverseAlpha) {
|
||||
pendingOption = option;
|
||||
pendingScreen = screen;
|
||||
reverseAlpha = true;
|
||||
} else {
|
||||
m_nPrevScreen = m_nCurrScreen;
|
||||
m_nCurrScreen = screen;
|
||||
m_nCurrOption = option;
|
||||
if (updateDelay)
|
||||
m_LastScreenSwitch = CTimer::GetTimeInMillisecondsPauseMode();
|
||||
}
|
||||
m_nMenuFadeAlpha = 255;
|
||||
}
|
||||
#else
|
||||
|
||||
// --MIAMI: Done
|
||||
void
|
||||
CMenuManager::SwitchToNewScreen(int8 screen)
|
||||
|
@ -381,7 +324,6 @@ CMenuManager::SwitchToNewScreen(int8 screen)
|
|||
m_nOptionHighlightTransitionBlend = 0;
|
||||
m_LastScreenSwitch = CTimer::GetTimeInMillisecondsPauseMode();
|
||||
}
|
||||
#endif
|
||||
|
||||
CMenuManager::CMenuManager()
|
||||
{
|
||||
|
@ -815,11 +757,7 @@ void
|
|||
CMenuManager::DrawStandardMenus(bool activeScreen)
|
||||
{
|
||||
float nextYToUse = 0.0f; // III leftover, set but unused in VC
|
||||
#ifdef PS2_LIKE_MENU
|
||||
bool itemsAreSelectable = !bottomBarActive;
|
||||
#else
|
||||
bool itemsAreSelectable = true;
|
||||
#endif
|
||||
CFont::SetBackgroundOff();
|
||||
CFont::SetPropOn();
|
||||
CFont::SetCentreOff();
|
||||
|
@ -2062,36 +2000,6 @@ CMenuManager::DrawFrontEnd()
|
|||
SetFrontEndRenderStates();
|
||||
m_NoEmptyBinding = true;
|
||||
|
||||
#ifdef PS2_LIKE_MENU
|
||||
if (m_nCurrScreen == MENUPAGE_NONE) {
|
||||
if (m_bGameNotLoaded) {
|
||||
if (bbTabCount != 6) {
|
||||
bbNames[0] = { "FEB_SAV",MENUPAGE_NEW_GAME };
|
||||
bbNames[1] = { "FEB_CON",MENUPAGE_CONTROLLER_PC };
|
||||
bbNames[2] = { "FEB_AUD",MENUPAGE_SOUND_SETTINGS };
|
||||
bbNames[3] = { "FEB_DIS",MENUPAGE_DISPLAY_SETTINGS };
|
||||
bbNames[4] = { "FEB_LAN",MENUPAGE_LANGUAGE_SETTINGS };
|
||||
bbNames[5] = { "FESZ_QU",MENUPAGE_EXIT };
|
||||
bbTabCount = 6;
|
||||
}
|
||||
} else {
|
||||
if (bbTabCount != 8) {
|
||||
bbNames[0] = { "FEB_STA",MENUPAGE_STATS };
|
||||
bbNames[1] = { "FEB_SAV",MENUPAGE_NEW_GAME };
|
||||
bbNames[2] = { "FEB_BRI",MENUPAGE_BRIEFS };
|
||||
bbNames[3] = { "FEB_CON",MENUPAGE_CONTROLLER_PC };
|
||||
bbNames[4] = { "FEB_AUD",MENUPAGE_SOUND_SETTINGS };
|
||||
bbNames[5] = { "FEB_DIS",MENUPAGE_DISPLAY_SETTINGS };
|
||||
bbNames[6] = { "FEB_LAN",MENUPAGE_LANGUAGE_SETTINGS };
|
||||
bbNames[7] = { "FESZ_QU",MENUPAGE_EXIT };
|
||||
bbTabCount = 8;
|
||||
}
|
||||
}
|
||||
m_nCurrScreen = bbNames[0].screenId;
|
||||
bottomBarActive = true;
|
||||
curBottomBarOption = 0;
|
||||
}
|
||||
#else
|
||||
if (m_nCurrScreen == MENUPAGE_NONE) {
|
||||
if (m_bGameNotLoaded) {
|
||||
m_nCurrScreen = MENUPAGE_START_MENU;
|
||||
|
@ -2099,7 +2007,6 @@ CMenuManager::DrawFrontEnd()
|
|||
m_nCurrScreen = MENUPAGE_PAUSE_MENU;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (m_nCurrOption == 0 && aScreens[m_nCurrScreen].m_aEntries[0].m_Action == MENUACTION_LABEL)
|
||||
m_nCurrOption = 1;
|
||||
|
@ -2110,200 +2017,6 @@ CMenuManager::DrawFrontEnd()
|
|||
DrawBackground(false);
|
||||
}
|
||||
|
||||
#ifdef PS2_LIKE_MENU
|
||||
void
|
||||
CMenuManager::DrawBackground()
|
||||
{
|
||||
CSprite2d::InitPerFrame();
|
||||
CFont::InitPerFrame();
|
||||
RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERLINEAR);
|
||||
|
||||
if (!m_bGameNotLoaded) {
|
||||
CSprite2d *bg = LoadSplash(nil);
|
||||
bg->Draw(CRect(0.0f, 0.0f, SCREEN_WIDTH, SCREEN_HEIGHT), CRGBA(255, 255, 255, 255));
|
||||
} else {
|
||||
CSprite2d::DrawRect(CRect(0.0f, 0.0f, SCREEN_WIDTH, SCREEN_HEIGHT), CRGBA(0, 0, 0, 255));
|
||||
}
|
||||
|
||||
|
||||
RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERNEAREST);
|
||||
RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)FALSE);
|
||||
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE);
|
||||
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE);
|
||||
m_aFrontEndSprites[FE2_MAINPANEL_UL].Draw(CRect(MENU_X_LEFT_ALIGNED(0.0f), 0.0f, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2), CRGBA(255, 255, 255, 255));
|
||||
m_aFrontEndSprites[FE2_MAINPANEL_UR].Draw(CRect(SCREEN_WIDTH / 2, 0.0f, MENU_X_RIGHT_ALIGNED(0.0f), SCREEN_HEIGHT / 2), CRGBA(255, 255, 255, 255));
|
||||
m_aFrontEndSprites[FE2_MAINPANEL_DL].Draw(CRect(MENU_X_LEFT_ALIGNED(0.0f), SCREEN_HEIGHT / 2, SCREEN_WIDTH / 2, SCREEN_HEIGHT), CRGBA(255, 255, 255, 255));
|
||||
m_aFrontEndSprites[FE2_MAINPANEL_DR].Draw(CRect(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, MENU_X_RIGHT_ALIGNED(0.0f), SCREEN_HEIGHT), CRGBA(255, 255, 255, 255));
|
||||
|
||||
RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERLINEAR);
|
||||
eFrontendSprites currentSprite;
|
||||
switch (m_nCurrScreen) {
|
||||
case MENUPAGE_STATS:
|
||||
case MENUPAGE_START_MENU:
|
||||
case MENUPAGE_PAUSE_MENU:
|
||||
case MENUPAGE_EXIT:
|
||||
currentSprite = FE_ICONSTATS;
|
||||
break;
|
||||
case MENUPAGE_LANGUAGE_SETTINGS:
|
||||
currentSprite = FE_ICONLANGUAGE;
|
||||
break;
|
||||
case MENUPAGE_CHOOSE_LOAD_SLOT:
|
||||
case MENUPAGE_CHOOSE_DELETE_SLOT:
|
||||
case MENUPAGE_NEW_GAME_RELOAD:
|
||||
case MENUPAGE_LOAD_SLOT_CONFIRM:
|
||||
case MENUPAGE_DELETE_SLOT_CONFIRM:
|
||||
currentSprite = FE_ICONSAVE;
|
||||
break;
|
||||
case MENUPAGE_DISPLAY_SETTINGS:
|
||||
currentSprite = FE_ICONDISPLAY;
|
||||
break;
|
||||
case MENUPAGE_SOUND_SETTINGS:
|
||||
currentSprite = FE_ICONAUDIO;
|
||||
break;
|
||||
case MENUPAGE_CONTROLLER_PC:
|
||||
case MENUPAGE_OPTIONS:
|
||||
case MENUPAGE_CONTROLLER_SETTINGS:
|
||||
case MENUPAGE_KEYBOARD_CONTROLS:
|
||||
case MENUPAGE_MOUSE_CONTROLS:
|
||||
currentSprite = FE_ICONCONTROLS;
|
||||
break;
|
||||
default:
|
||||
/*case MENUPAGE_NEW_GAME: */
|
||||
/*case MENUPAGE_BRIEFS: */
|
||||
currentSprite = FE_ICONBRIEF;
|
||||
break;
|
||||
}
|
||||
|
||||
m_aFrontEndSprites[currentSprite].Draw(CRect(MENU_X_LEFT_ALIGNED(50.0f), MENU_Y(50.0f), MENU_X_RIGHT_ALIGNED(50.0f), SCREEN_SCALE_FROM_BOTTOM(95.0f)), CRGBA(255, 255, 255, m_nMenuFadeAlpha > 255 ? 255 : m_nMenuFadeAlpha));
|
||||
|
||||
static float fadeAlpha = 0.0f;
|
||||
static int lastState = 0;
|
||||
|
||||
// reverseAlpha = PS2 fading (wait for 255->0, then change screen)
|
||||
if (m_nMenuFadeAlpha < 255) {
|
||||
if (lastState == 1 && !reverseAlpha)
|
||||
fadeAlpha = 0.f;
|
||||
|
||||
if (m_nMenuFadeAlpha <= 0 && reverseAlpha) {
|
||||
reverseAlpha = false;
|
||||
ChangeScreen(pendingScreen, pendingOption, true, false);
|
||||
} else {
|
||||
// +20 per every 33 ms (1000.f/30.f - original frame limiter fps)
|
||||
if (!reverseAlpha)
|
||||
fadeAlpha += (frameTime) * 20.f / 33.f;
|
||||
else
|
||||
fadeAlpha = max(0.0f, fadeAlpha - (frameTime) * 30.f / 33.f);
|
||||
|
||||
m_nMenuFadeAlpha = fadeAlpha;
|
||||
}
|
||||
lastState = 0;
|
||||
} else {
|
||||
if (lastState == 0) fadeAlpha = 255.f;
|
||||
|
||||
if (reverseAlpha) {
|
||||
fadeAlpha -= (frameTime) * 30.f / 33.f;
|
||||
|
||||
m_nMenuFadeAlpha = fadeAlpha;
|
||||
}
|
||||
lastState = 1;
|
||||
|
||||
// TODO: what is this? waiting mouse?
|
||||
if(field_518 == 4){
|
||||
if(m_nHoverOption == HOVEROPTION_3 || m_nHoverOption == HOVEROPTION_4 ||
|
||||
m_nHoverOption == HOVEROPTION_5 || m_nHoverOption == HOVEROPTION_6 || m_nHoverOption == HOVEROPTION_7)
|
||||
|
||||
field_518 = 2;
|
||||
else
|
||||
field_518 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERNEAREST);
|
||||
RwRenderStateSet(rwRENDERSTATETEXTUREADDRESS, (void*)rwTEXTUREADDRESSCLAMP);
|
||||
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE);
|
||||
switch (m_nCurrScreen) {
|
||||
case MENUPAGE_SKIN_SELECT:
|
||||
DrawPlayerSetupScreen();
|
||||
break;
|
||||
case MENUPAGE_KEYBOARD_CONTROLS:
|
||||
DrawControllerSetupScreen();
|
||||
break;
|
||||
default:
|
||||
DrawStandardMenus();
|
||||
break;
|
||||
}
|
||||
|
||||
#define optionWidth MENU_X(66.0f)
|
||||
#define rawOptionHeight 22.0f
|
||||
#define optionBottom SCREEN_SCALE_FROM_BOTTOM(20.0f)
|
||||
#define optionTop SCREEN_SCALE_FROM_BOTTOM(20.0f + rawOptionHeight)
|
||||
#define leftPadding MENU_X_LEFT_ALIGNED(90.0f)
|
||||
wchar *str;
|
||||
hoveredBottomBarOption = -1;
|
||||
if (curBottomBarOption != -1) {
|
||||
|
||||
// This active tab sprite is needlessly big
|
||||
m_aFrontEndSprites[FE2_TABACTIVE].Draw(CRect(leftPadding - MENU_X(2.0f) + (optionWidth) * curBottomBarOption, optionTop,
|
||||
leftPadding - MENU_X(5.0f) + optionWidth * (curBottomBarOption + 2), optionBottom + MENU_Y(rawOptionHeight - 9.0f)),
|
||||
CRGBA(CRGBA(255, 255, 255, 255)));
|
||||
|
||||
for (int i = 0; i < bbTabCount; i++) {
|
||||
float xStart = leftPadding + optionWidth * i;
|
||||
if (CheckHover(xStart, xStart + optionWidth, optionTop, optionBottom))
|
||||
hoveredBottomBarOption = i;
|
||||
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
|
||||
CFont::SetScale(MENU_X(0.35f), MENU_Y(0.7f));
|
||||
CFont::SetRightJustifyOff();
|
||||
if (hoveredBottomBarOption == i && hoveredBottomBarOption != curBottomBarOption)
|
||||
CFont::SetColor(CRGBA(235, 170, 50, 255));
|
||||
else {
|
||||
if(bottomBarActive || curBottomBarOption == i)
|
||||
CFont::SetColor(CRGBA(0, 0, 0, 255));
|
||||
else
|
||||
CFont::SetColor(CRGBA(0, 0, 0, 110));
|
||||
}
|
||||
|
||||
str = TheText.Get(bbNames[i].name);
|
||||
|
||||
CFont::PrintString(xStart + MENU_X(4.0f), SCREEN_SCALE_FROM_BOTTOM(39.0f), str);
|
||||
|
||||
}
|
||||
}
|
||||
#undef optionBottom
|
||||
#undef optionTop
|
||||
#undef leftPadding
|
||||
#undef optionWidth
|
||||
#undef rawOptionHeight
|
||||
|
||||
CFont::DrawFonts();
|
||||
|
||||
// Draw mouse
|
||||
RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERLINEAR);
|
||||
RwRenderStateSet(rwRENDERSTATETEXTUREADDRESS, (void*)rwTEXTUREADDRESSCLAMP);
|
||||
if (m_bShowMouse) {
|
||||
RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA);
|
||||
RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA);
|
||||
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE);
|
||||
|
||||
CRect mouse(0.0f, 0.0f, MENU_X(75.0f), MENU_Y(75.0f));
|
||||
CRect shad(MENU_X(10.0f), MENU_Y(3.0f), MENU_X(85.0f), MENU_Y(78.0f));
|
||||
|
||||
mouse.Translate(m_nMousePosX, m_nMousePosY);
|
||||
shad.Translate(m_nMousePosX, m_nMousePosY);
|
||||
if(field_518 == 4){
|
||||
m_aFrontEndSprites[MENUSPRITE_MOUSET].Draw(shad, CRGBA(100, 100, 100, 50));
|
||||
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE);
|
||||
m_aFrontEndSprites[MENUSPRITE_MOUSET].Draw(mouse, CRGBA(255, 255, 255, 255));
|
||||
}else{
|
||||
m_aFrontEndSprites[MENUSPRITE_MOUSE].Draw(shad, CRGBA(100, 100, 100, 50));
|
||||
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE);
|
||||
m_aFrontEndSprites[MENUSPRITE_MOUSE].Draw(mouse, CRGBA(255, 255, 255, 255));
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
|
||||
// --MIAMI: Done except commented things
|
||||
void
|
||||
CMenuManager::DrawBackground(bool transitionCall)
|
||||
|
@ -2527,7 +2240,6 @@ CMenuManager::DrawBackground(bool transitionCall)
|
|||
m_aFrontEndSprites[MENUSPRITE_MOUSE].Draw(mouse, CRGBA(255, 255, 255, 255));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
CMenuManager::DrawPlayerSetupScreen(bool activeScreen)
|
||||
|
@ -3825,7 +3537,7 @@ CMenuManager::UserInput(void)
|
|||
if (m_nCurrScreen == MENUPAGE_KEYBOARD_CONTROLS || m_nCurrScreen == MENUPAGE_SKIN_SELECT) {
|
||||
ProcessList(optionSelected, goBack);
|
||||
} else {
|
||||
// TODO(Miami): Seperate that code into a new function from ProcessButtonPresses
|
||||
// TODO(Miami): Seperate that code into a new function from ProcessUserInput
|
||||
// ProcessScrollingExceptLists(goBack);
|
||||
|
||||
if (m_AllowNavigation &&
|
||||
|
@ -3858,19 +3570,13 @@ CMenuManager::UserInput(void)
|
|||
if (CPad::GetPad(0)->GetLeftMouseJustUp() && m_nCurrScreen != MENUPAGE_MAP) {
|
||||
// TODO(Miami): New radio selector
|
||||
if (m_nHoverOption == HOVEROPTION_RANDOM_ITEM) {
|
||||
m_nCurrOption = m_nOptionMouseHovering;
|
||||
optionSelected = true;
|
||||
}
|
||||
}
|
||||
// TODO(Miami): This part is old radio selector, remove when new is reversed!!
|
||||
else if (CPad::GetPad(0)->GetLeftMouseJustDown()) {
|
||||
if (m_nHoverOption >= HOVEROPTION_RADIO_0 && m_nHoverOption <= HOVEROPTION_RADIO_9) {
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
|
||||
m_PrefsRadioStation = m_nHoverOption - HOVEROPTION_RADIO_0;
|
||||
SaveSettings();
|
||||
DMAudio.SetRadioInCar(m_PrefsRadioStation);
|
||||
DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1);
|
||||
OutputDebugString("FRONTEND RADIO STATION CHANGED");
|
||||
ChangeRadioStation(m_nHoverOption - HOVEROPTION_RADIO_0 - m_PrefsRadioStation);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3909,7 +3615,7 @@ CMenuManager::UserInput(void)
|
|||
|
||||
}
|
||||
if (CPad::GetPad(0)->GetBackJustDown() || CPad::GetPad(0)->GetEscapeJustDown()) {
|
||||
if (m_nCurrScreen != MENUPAGE_NONE && m_nCurrScreen != MENUPAGE_PAUSE_MENU && m_nCurrScreen != MENUPAGE_CHOOSE_SAVE_SLOT
|
||||
if (m_nCurrScreen != MENUPAGE_START_MENU && m_nCurrScreen != MENUPAGE_PAUSE_MENU && m_nCurrScreen != MENUPAGE_CHOOSE_SAVE_SLOT
|
||||
&& m_nCurrScreen != MENUPAGE_SAVE_CHEAT_WARNING && m_nCurrScreen != MENUPAGE_SAVING_IN_PROGRESS
|
||||
&& m_nCurrScreen != MENUPAGE_DELETING_IN_PROGRESS && m_nCurrScreen != MENUPAGE_OUTRO)
|
||||
{
|
||||
|
@ -3983,13 +3689,12 @@ CMenuManager::UserInput(void)
|
|||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_FAIL, 0);
|
||||
}
|
||||
}
|
||||
ProcessButtonPresses(goDown, goUp, optionSelected, goBack, changeValueBy);
|
||||
ProcessUserInput(goDown, goUp, optionSelected, goBack, changeValueBy);
|
||||
}
|
||||
|
||||
// TODO(Miami)
|
||||
// Also rename it to ProcessUserInput when it's done
|
||||
// --MIAMI: Done except TODOs
|
||||
void
|
||||
CMenuManager::ProcessButtonPresses(uint8 goDown, uint8 goUp, uint8 optionSelected, uint8 goBack, int8 changeAmount)
|
||||
CMenuManager::ProcessUserInput(uint8 goDown, uint8 goUp, uint8 optionSelected, uint8 goBack, int8 changeAmount)
|
||||
{
|
||||
if (m_nCurrScreen == MENUPAGE_OUTRO)
|
||||
return;
|
||||
|
@ -4012,7 +3717,10 @@ CMenuManager::ProcessButtonPresses(uint8 goDown, uint8 goUp, uint8 optionSelecte
|
|||
MouseButtonJustClicked = 4;
|
||||
else if (CPad::GetPad(0)->GetMouseWheelDownJustUp())
|
||||
MouseButtonJustClicked = 5;
|
||||
// TODO two more buttons
|
||||
else if (CPad::GetPad(0)->GetMouseX1JustUp())
|
||||
MouseButtonJustClicked = 6;
|
||||
else if (CPad::GetPad(0)->GetMouseX2JustUp())
|
||||
MouseButtonJustClicked = 7;
|
||||
|
||||
JoyButtonJustClicked = ControlsManager.GetJoyButtonJustDown();
|
||||
|
||||
|
@ -4072,45 +3780,6 @@ CMenuManager::ProcessButtonPresses(uint8 goDown, uint8 goUp, uint8 optionSelecte
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef PS2_LIKE_MENU
|
||||
if (CPad::GetPad(0)->GetLeftMouseJustDown() && hoveredBottomBarOption != -1) {
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
|
||||
bottomBarActive = false;
|
||||
curBottomBarOption = hoveredBottomBarOption;
|
||||
ChangeScreen(bbNames[curBottomBarOption].screenId, 0, true, false);
|
||||
return;
|
||||
} else if (bottomBarActive) {
|
||||
if (CPad::GetPad(0)->GetEnterJustDown() || CPad::GetPad(0)->GetCrossJustDown()) {
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
|
||||
bottomBarActive = false;
|
||||
|
||||
// If there's a menu change with fade ongoing, finish it now
|
||||
if (reverseAlpha)
|
||||
m_nMenuFadeAlpha = 0;
|
||||
return;
|
||||
} else if (CPad::GetPad(0)->GetLeftJustDown() || CPad::GetPad(0)->GetAnaloguePadLeft() || CPad::GetPad(0)->GetDPadLeftJustDown()
|
||||
|| CPad::GetPad(0)->GetUpJustDown() || CPad::GetPad(0)->GetAnaloguePadUp() || CPad::GetPad(0)->GetDPadUpJustDown()) {
|
||||
m_bShowMouse = false;
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
|
||||
if (curBottomBarOption > 0)
|
||||
curBottomBarOption--;
|
||||
ChangeScreen(bbNames[curBottomBarOption].screenId, 0, true, true);
|
||||
return;
|
||||
} else if (CPad::GetPad(0)->GetRightJustDown() || CPad::GetPad(0)->GetAnaloguePadRight() || CPad::GetPad(0)->GetDPadRightJustDown()
|
||||
|| CPad::GetPad(0)->GetDownJustDown() || CPad::GetPad(0)->GetAnaloguePadDown() || CPad::GetPad(0)->GetDPadDownJustDown()) {
|
||||
m_bShowMouse = false;
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
|
||||
if (curBottomBarOption < bbTabCount-1)
|
||||
curBottomBarOption++;
|
||||
ChangeScreen(bbNames[curBottomBarOption].screenId, 0, true, true);
|
||||
return;
|
||||
}
|
||||
optionSelected = false;
|
||||
goDown = false;
|
||||
goUp = false;
|
||||
}
|
||||
#endif
|
||||
|
||||
int oldOption = m_nCurrOption;
|
||||
if (goDown) {
|
||||
if (m_nCurrScreen != MENUPAGE_MAP)
|
||||
|
@ -4139,52 +3808,11 @@ CMenuManager::ProcessButtonPresses(uint8 goDown, uint8 goUp, uint8 optionSelecte
|
|||
m_nOptionHighlightTransitionBlend = 0;
|
||||
}
|
||||
|
||||
if (optionSelected) {
|
||||
int option = aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action;
|
||||
if (option == MENUACTION_CHANGEMENU || option == MENUACTION_POPULATESLOTS_CHANGEMENU || option == MENUACTION_GOBACK
|
||||
|| option == MENUACTION_YES || option == MENUACTION_NO) {
|
||||
if (strncmp(aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_EntryName, "FEDS_TB", 8) != 0 &&
|
||||
strncmp(aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_EntryName, "FESZ_CA", 8) != 0) {
|
||||
|
||||
if (m_nCurrScreen == MENUPAGE_CHOOSE_DELETE_SLOT) {
|
||||
if (Slots[m_nCurrOption] != SLOT_OK)
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_BACK, 0);
|
||||
else
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_FAIL, 0);
|
||||
} else
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
|
||||
} else {
|
||||
// This is duplicate, back button already processed below
|
||||
#ifndef TIDY_UP_PBP
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_EXIT, 0);
|
||||
if (m_nCurrScreen == MENUPAGE_SOUND_SETTINGS) {
|
||||
DMAudio.StopFrontEndTrack();
|
||||
OutputDebugString("FRONTEND AUDIO TRACK STOPPED");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
} else if (option == MENUACTION_CHECKSAVE) {
|
||||
if (Slots[aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_SaveSlot - 1] == SLOT_EMPTY) {
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_FAIL, 0);
|
||||
} else {
|
||||
if (m_nCurrScreen != MENUPAGE_NEW_GAME_RELOAD) {
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
|
||||
}
|
||||
}
|
||||
} else if (option != MENUACTION_CHANGEMENU && option != MENUACTION_BRIGHTNESS && option != MENUACTION_DRAWDIST
|
||||
&& option != MENUACTION_MUSICVOLUME && option != MENUACTION_SFXVOLUME
|
||||
&& option != MENUACTION_CHECKSAVE && option != MENUACTION_MOUSESENS
|
||||
&& option != MENUACTION_YES && option != MENUACTION_NO
|
||||
&& option != MENUACTION_SCREENRES) {
|
||||
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
|
||||
}
|
||||
|
||||
if ((m_nCurrScreen == MENUPAGE_KEYBOARD_CONTROLS) || (m_nCurrScreen == MENUPAGE_SKIN_SELECT)) {
|
||||
if (optionSelected && m_nMenuFadeAlpha == 255) {
|
||||
if (aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_TargetMenu == MENUPAGE_NEW_GAME_RELOAD && m_bGameNotLoaded) {
|
||||
DoSettingsBeforeStartingAGame();
|
||||
} else if ((m_nCurrScreen == MENUPAGE_KEYBOARD_CONTROLS) || (m_nCurrScreen == MENUPAGE_SKIN_SELECT)) {
|
||||
switch (m_nCurrExLayer) {
|
||||
default:
|
||||
goBack = true;
|
||||
break;
|
||||
case HOVEROPTION_LIST:
|
||||
if (m_nCurrScreen == MENUPAGE_KEYBOARD_CONTROLS) {
|
||||
m_bWaitingForNewKeyBind = true;
|
||||
|
@ -4206,36 +3834,34 @@ CMenuManager::ProcessButtonPresses(uint8 goDown, uint8 goUp, uint8 optionSelecte
|
|||
m_nCurrExLayer = HOVEROPTION_BACK;
|
||||
SaveSettings();
|
||||
break;
|
||||
case HOVEROPTION_BACK:
|
||||
default:
|
||||
goBack = true;
|
||||
break;
|
||||
}
|
||||
} else if (aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_TargetMenu == MENUPAGE_NEW_GAME_RELOAD && m_bGameNotLoaded) {
|
||||
DoSettingsBeforeStartingAGame();
|
||||
/* } else if (m_nCurrScreen == MENUPAGE_KEYBOARD_CONTROLS) {
|
||||
// .. either empty or there was some outer if. :shrug: pointless anyway, keyboard_controls is handled in first if.
|
||||
*/
|
||||
} else if (m_nCurrScreen == MENUPAGE_SKIN_SELECT) {
|
||||
if (m_nSkinsTotal > 0) {
|
||||
m_pSelectedSkin = m_pSkinListHead.nextSkin;
|
||||
strcpy(m_PrefsSkinFile, m_aSkinName);
|
||||
CWorld::Players[0].SetPlayerSkin(m_PrefsSkinFile);
|
||||
SaveSettings();
|
||||
} else {
|
||||
SwitchToNewScreen(-2);
|
||||
}
|
||||
} else {
|
||||
option = aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action;
|
||||
}
|
||||
|
||||
int option = aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action;
|
||||
switch (option) {
|
||||
case MENUACTION_RADIO:
|
||||
++m_PrefsRadioStation;
|
||||
if (DMAudio.IsMP3RadioChannelAvailable()) {
|
||||
if (m_PrefsRadioStation > USERTRACK)
|
||||
m_PrefsRadioStation = WILDSTYLE;
|
||||
} else if (m_PrefsRadioStation > WAVE) {
|
||||
m_PrefsRadioStation = USERTRACK;
|
||||
case MENUACTION_CHANGEMENU:
|
||||
case MENUACTION_YES:
|
||||
case MENUACTION_NO:
|
||||
#ifdef CUSTOM_MAP
|
||||
if (aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_TargetMenu == MENUPAGE_MAP) {
|
||||
bMapLoaded = false;
|
||||
}
|
||||
SaveSettings();
|
||||
DMAudio.SetRadioInCar(m_PrefsRadioStation);
|
||||
DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1);
|
||||
OutputDebugString("FRONTEND RADIO STATION CHANGED");
|
||||
|
||||
#endif
|
||||
SwitchToNewScreen(aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_TargetMenu);
|
||||
break;
|
||||
case MENUACTION_RADIO:
|
||||
ChangeRadioStation(1);
|
||||
break;
|
||||
case MENUACTION_LANG_ENG:
|
||||
m_PrefsLanguage = LANGUAGE_AMERICAN;
|
||||
|
@ -4267,26 +3893,6 @@ CMenuManager::ProcessButtonPresses(uint8 goDown, uint8 goUp, uint8 optionSelecte
|
|||
InitialiseChangedLanguageSettings();
|
||||
SaveSettings();
|
||||
break;
|
||||
case MENUACTION_POPULATESLOTS_CHANGEMENU:
|
||||
PcSaveHelper.PopulateSlotInfo();
|
||||
|
||||
// fall through
|
||||
case MENUACTION_CHANGEMENU:
|
||||
case MENUACTION_YES:
|
||||
case MENUACTION_NO:
|
||||
{
|
||||
#ifdef CUSTOM_MAP
|
||||
if (aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_TargetMenu == MENUPAGE_MAP) {
|
||||
bMapLoaded = false;
|
||||
}
|
||||
|
||||
#endif
|
||||
SwitchToNewScreen(0);
|
||||
break;
|
||||
}
|
||||
case MENUACTION_GOBACK:
|
||||
goBack = true;
|
||||
break;
|
||||
case MENUACTION_CHECKSAVE:
|
||||
{
|
||||
int saveSlot = aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_SaveSlot;
|
||||
|
@ -4306,12 +3912,39 @@ CMenuManager::ProcessButtonPresses(uint8 goDown, uint8 goUp, uint8 optionSelecte
|
|||
case MENUACTION_NEWGAME:
|
||||
DoSettingsBeforeStartingAGame();
|
||||
break;
|
||||
#ifdef LEGACY_MENU_OPTIONS
|
||||
case MENUACTION_RELOADIDE:
|
||||
CFileLoader::ReloadObjectTypes("GTA3.IDE");
|
||||
break;
|
||||
#endif
|
||||
case MENUACTION_RESUME_FROM_SAVEZONE:
|
||||
RequestFrontEndShutDown();
|
||||
break;
|
||||
case MENUACTION_LOADRADIO:
|
||||
if (m_nPrefsAudio3DProviderIndex != NO_AUDIO_PROVIDER) {
|
||||
SwitchToNewScreen(MENUPAGE_SOUND_SETTINGS);
|
||||
DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1);
|
||||
OutputDebugString("STARTED PLAYING FRONTEND AUDIO TRACK");
|
||||
}
|
||||
break;
|
||||
case MENUACTION_SAVEGAME:
|
||||
{
|
||||
int saveSlot = aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_SaveSlot;
|
||||
|
||||
if (saveSlot >= 2 && saveSlot <= 9) {
|
||||
m_nCurrSaveSlot = m_nCurrOption;
|
||||
SwitchToNewScreen(MENUPAGE_SAVE_OVERWRITE_CONFIRM);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MENUACTION_RADARMODE:
|
||||
if (++m_PrefsRadarMode > 2)
|
||||
m_PrefsRadarMode = 0;
|
||||
SaveSettings();
|
||||
break;
|
||||
case MENUACTION_GOBACK:
|
||||
goBack = true;
|
||||
break;
|
||||
case MENUACTION_KEYBOARDCTRLS:
|
||||
SwitchToNewScreen(MENUPAGE_KEYBOARD_CONTROLS);
|
||||
m_nSelectedListRow = 0;
|
||||
|
@ -4347,7 +3980,7 @@ CMenuManager::ProcessButtonPresses(uint8 goDown, uint8 goUp, uint8 optionSelecte
|
|||
DMAudio.Service();
|
||||
CentreMousePointer();
|
||||
m_bShowMouse = true;
|
||||
// m_nCurrOption = 5; // Why? TODO(Miami)
|
||||
m_nCurrOption = 5; // TODO(Miami): Because selected option is resetted after res. change. We'll need to revisit that.
|
||||
m_nOptionHighlightTransitionBlend = 0;
|
||||
SaveSettings();
|
||||
}
|
||||
|
@ -4386,8 +4019,8 @@ CMenuManager::ProcessButtonPresses(uint8 goDown, uint8 goUp, uint8 optionSelecte
|
|||
case MENUACTION_PLAYERSETUP:
|
||||
CPlayerSkin::BeginFrontendSkinEdit();
|
||||
SwitchToNewScreen(MENUPAGE_SKIN_SELECT);
|
||||
m_nCurrExLayer = HOVEROPTION_LIST;
|
||||
m_bSkinsEnumerated = false;
|
||||
m_nCurrExLayer = HOVEROPTION_LIST;
|
||||
break;
|
||||
case MENUACTION_RESTOREDEF:
|
||||
if (m_nCurrScreen == MENUPAGE_SOUND_SETTINGS) {
|
||||
|
@ -4460,114 +4093,42 @@ CMenuManager::ProcessButtonPresses(uint8 goDown, uint8 goUp, uint8 optionSelecte
|
|||
}
|
||||
SaveSettings();
|
||||
break;
|
||||
case MENUACTION_LOADRADIO:
|
||||
SwitchToNewScreen(MENUPAGE_SOUND_SETTINGS);
|
||||
DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1);
|
||||
OutputDebugString("STARTED PLAYING FRONTEND AUDIO TRACK");
|
||||
break;
|
||||
case MENUACTION_SAVEGAME:
|
||||
{
|
||||
int saveSlot = aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_SaveSlot;
|
||||
|
||||
if (saveSlot >= 2 && saveSlot <= 9) {
|
||||
m_nCurrSaveSlot = m_nCurrOption;
|
||||
SwitchToNewScreen(MENUPAGE_SAVE_OVERWRITE_CONFIRM);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
ProcessOnOffMenuOptions();
|
||||
if (!goBack) {
|
||||
int saveSlot = aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_SaveSlot;
|
||||
|
||||
if (saveSlot >= 2 && saveSlot <= 9 && Slots[m_nCurrOption] != SLOT_OK)
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_BACK, 0);
|
||||
else
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_FAIL, 0);
|
||||
}
|
||||
}
|
||||
|
||||
if (goBack) {
|
||||
ResetHelperText();
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_BACK, 0);
|
||||
#ifdef PS2_LIKE_MENU
|
||||
if (m_nCurrScreen == MENUPAGE_PAUSE_MENU || bottomBarActive) {
|
||||
#else
|
||||
if (m_nCurrScreen == MENUPAGE_PAUSE_MENU) {
|
||||
#endif
|
||||
if (!m_bGameNotLoaded) {
|
||||
#ifdef LEGACY_MENU_OPTIONS
|
||||
if (m_PrefsVsyncDisp != m_PrefsVsync) {
|
||||
m_PrefsVsync = m_PrefsVsyncDisp;
|
||||
}
|
||||
#endif
|
||||
RequestFrontEndShutDown();
|
||||
}
|
||||
|
||||
// We're already resuming, we don't need further processing.
|
||||
#if defined(FIX_BUGS) || defined(PS2_LIKE_MENU)
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
#ifdef PS2_LIKE_MENU
|
||||
else if (m_nCurrScreen == MENUPAGE_CHOOSE_SAVE_SLOT || m_nCurrScreen == MENUPAGE_SAVE) {
|
||||
#else
|
||||
else if (m_nCurrScreen == MENUPAGE_CHOOSE_SAVE_SLOT) {
|
||||
#endif
|
||||
RequestFrontEndShutDown();
|
||||
}
|
||||
// It's now in ThingsToDoBeforeLeavingPage()
|
||||
#ifndef TIDY_UP_PBP
|
||||
else if (m_nCurrScreen == MENUPAGE_SOUND_SETTINGS) {
|
||||
DMAudio.StopFrontEndTrack();
|
||||
OutputDebugString("FRONTEND AUDIO TRACK STOPPED");
|
||||
}
|
||||
#endif
|
||||
|
||||
int oldScreen = aScreens[m_nCurrScreen].m_PreviousPage;
|
||||
|
||||
if (oldScreen != -1) {
|
||||
ThingsToDoBeforeLeavingPage();
|
||||
if (m_NoEmptyBinding) {
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
|
||||
SwitchToNewScreen(-2);
|
||||
if ((m_nCurrScreen == MENUPAGE_SKIN_SELECT) || (m_nCurrScreen == MENUPAGE_KEYBOARD_CONTROLS)) {
|
||||
m_nTotalListRow = 0;
|
||||
}
|
||||
|
||||
#ifdef PS2_LIKE_MENU
|
||||
if (!bottomBarActive &&
|
||||
(oldScreen == MENUPAGE_NONE || oldScreen == MENUPAGE_OPTIONS)) {
|
||||
bottomBarActive = true;
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
SwitchToNewScreen(-2);
|
||||
}
|
||||
|
||||
// We will go back for sure at this point, why process other things?!
|
||||
#ifdef FIX_BUGS
|
||||
return;
|
||||
#endif
|
||||
} else {
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_BACK, 0);
|
||||
m_ShowEmptyBindingError = true;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef PS2_LIKE_MENU
|
||||
if (bottomBarActive)
|
||||
return;
|
||||
#endif
|
||||
|
||||
|
||||
if (changeAmount != 0) {
|
||||
switch (aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action) {
|
||||
case MENUACTION_RADIO:
|
||||
m_PrefsRadioStation += changeAmount;
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
|
||||
if (DMAudio.IsMP3RadioChannelAvailable()) {
|
||||
if (m_PrefsRadioStation < WILDSTYLE)
|
||||
m_PrefsRadioStation = USERTRACK;
|
||||
if (m_PrefsRadioStation > USERTRACK)
|
||||
m_PrefsRadioStation = WILDSTYLE;
|
||||
} else {
|
||||
if (m_PrefsRadioStation < WILDSTYLE)
|
||||
m_PrefsRadioStation = WAVE;
|
||||
if (m_PrefsRadioStation > WAVE)
|
||||
m_PrefsRadioStation = WILDSTYLE;
|
||||
}
|
||||
SaveSettings();
|
||||
DMAudio.SetRadioInCar(m_PrefsRadioStation);
|
||||
DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1);
|
||||
OutputDebugString("FRONTEND RADIO STATION CHANGED");
|
||||
ChangeRadioStation(changeAmount);
|
||||
break;
|
||||
case MENUACTION_RADARMODE:
|
||||
m_PrefsRadarMode += changeAmount;
|
||||
if (m_PrefsRadarMode < 0)
|
||||
m_PrefsRadarMode = 2;
|
||||
if (m_PrefsRadarMode > 2)
|
||||
m_PrefsRadarMode = 0;
|
||||
break;
|
||||
#ifdef ASPECT_RATIO_SCALE
|
||||
case MENUACTION_WIDESCREEN:
|
||||
|
@ -4612,11 +4173,12 @@ CMenuManager::ProcessButtonPresses(uint8 goDown, uint8 goUp, uint8 optionSelecte
|
|||
break;
|
||||
#endif
|
||||
case MENUACTION_AUDIOHW:
|
||||
// TODO(Miami): What are the extra things in here??
|
||||
|
||||
if (m_nPrefsAudio3DProviderIndex != NO_AUDIO_PROVIDER) {
|
||||
m_nPrefsAudio3DProviderIndex += changeAmount;
|
||||
m_nPrefsAudio3DProviderIndex = clamp(m_nPrefsAudio3DProviderIndex, 0, DMAudio.GetNum3DProvidersAvailable() - 1);
|
||||
}
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
|
||||
break;
|
||||
case MENUACTION_SPEAKERCONF:
|
||||
if (m_nPrefsAudio3DProviderIndex != NO_AUDIO_PROVIDER) {
|
||||
|
@ -4624,13 +4186,11 @@ CMenuManager::ProcessButtonPresses(uint8 goDown, uint8 goUp, uint8 optionSelecte
|
|||
m_PrefsSpeakers = clamp(m_PrefsSpeakers, 0, 2);
|
||||
DMAudio.SetSpeakerConfig(m_PrefsSpeakers);
|
||||
SaveSettings();
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
|
||||
}
|
||||
break;
|
||||
case MENUACTION_CTRLMETHOD:
|
||||
m_ControlMethod = !m_ControlMethod;
|
||||
CCamera::m_bUseMouse3rdPerson = !m_ControlMethod;
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
|
||||
SaveSettings();
|
||||
break;
|
||||
}
|
||||
|
@ -4885,10 +4445,6 @@ CMenuManager::SwitchMenuOnAndOff()
|
|||
_InputInitialiseMouse(true);
|
||||
}
|
||||
|
||||
#ifdef PS2_LIKE_MENU
|
||||
bottomBarActive = false;
|
||||
#endif
|
||||
|
||||
m_StatsScrollSpeed = 150.0f;
|
||||
SaveSettings();
|
||||
pControlEdit = nil;
|
||||
|
@ -5386,6 +4942,47 @@ CMenuManager::ConstructStatLine(int rowIdx)
|
|||
#undef STAT_LINE
|
||||
}
|
||||
|
||||
// TODO(Miami): These #if 0's are here because we still use III radio selector. Remove them when new one reversed
|
||||
void
|
||||
CMenuManager::ChangeRadioStation(uint8 increaseBy)
|
||||
{
|
||||
if (m_ScrollRadioBy != 0)
|
||||
return;
|
||||
|
||||
m_PrefsRadioStation += increaseBy;
|
||||
#if 0
|
||||
m_ScrollRadioBy = increaseBy;
|
||||
if (m_ScrollRadioBy == 1) {
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_FAIL, 0);
|
||||
field_F0 = 238.0f;
|
||||
} else {
|
||||
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_FAIL, 0);
|
||||
field_F0 = 118.0f;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (DMAudio.IsMP3RadioChannelAvailable()) {
|
||||
if (m_PrefsRadioStation < WILDSTYLE)
|
||||
m_PrefsRadioStation = USERTRACK;
|
||||
if (m_PrefsRadioStation > USERTRACK)
|
||||
m_PrefsRadioStation = WILDSTYLE;
|
||||
} else {
|
||||
if (m_PrefsRadioStation < WILDSTYLE)
|
||||
m_PrefsRadioStation = WAVE;
|
||||
if (m_PrefsRadioStation > WAVE)
|
||||
m_PrefsRadioStation = WILDSTYLE;
|
||||
}
|
||||
#if 0
|
||||
DMAudio.StopFrontEndTrack();
|
||||
DMAudio.PlayFrontEndSound(SOUND_194, 0);
|
||||
#else
|
||||
SaveSettings();
|
||||
DMAudio.SetRadioInCar(m_PrefsRadioStation);
|
||||
DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1);
|
||||
OutputDebugString("FRONTEND RADIO STATION CHANGED");
|
||||
#endif
|
||||
}
|
||||
|
||||
#if 0
|
||||
uint8 CMenuManager::GetNumberOfMenuOptions()
|
||||
{
|
||||
|
|
|
@ -5,15 +5,9 @@
|
|||
|
||||
#include "Sprite2d.h"
|
||||
|
||||
#ifdef PS2_LIKE_MENU
|
||||
#define MENUHEADER_POS_X 50.0f
|
||||
#define MENUHEADER_POS_Y 75.0f
|
||||
#define MENUHEADER_HEIGHT 1.3f
|
||||
#else
|
||||
#define MENUHEADER_POS_X 10.0f
|
||||
#define MENUHEADER_POS_Y 10.0f
|
||||
#define MENUHEADER_HEIGHT 2.0f
|
||||
#endif
|
||||
#define MENUHEADER_WIDTH 1.0f
|
||||
|
||||
#define MENU_UNK_X_MARGIN 10.0f
|
||||
|
@ -237,9 +231,6 @@ enum eMenuAction
|
|||
MENUACTION_SETDBGFLAG,
|
||||
MENUACTION_LOADRADIO,
|
||||
MENUACTION_SAVEGAME,
|
||||
|
||||
// Below this is TODO(Miami)
|
||||
MENUACTION_DRAWDIST,
|
||||
MENUACTION_SWITCHBIGWHITEDEBUGLIGHT,
|
||||
MENUACTION_COLLISIONPOLYS,
|
||||
MENUACTION_LEGENDS,
|
||||
|
@ -247,16 +238,11 @@ enum eMenuAction
|
|||
MENUACTION_HUD,
|
||||
MENUACTION_GOBACK,
|
||||
MENUACTION_KEYBOARDCTRLS,
|
||||
MENUACTION_PARSEHEAP,
|
||||
// MENUACTION_MEMCARDSAVECONFIRM is that on VC enum??
|
||||
MENUACTION_DEBUGSTREAM,
|
||||
MENUACTION_GETKEY,
|
||||
MENUACTION_SHOWHEADBOB,
|
||||
MENUACTION_UNK80,
|
||||
MENUACTION_UNK38, // MENUACTION_PARSEHEAP? MENUACTION_DEBUGSTREAM? MENUACTION_MEMCARDSAVECONFIRM?
|
||||
MENUACTION_INVVERT,
|
||||
MENUACTION_CANCELGAME,
|
||||
MENUACTION_MOUSESENS,
|
||||
MENUACTION_MP3VOLUMEBOOST,
|
||||
MENUACTION_RESUME,
|
||||
MENUACTION_DONTCANCEL,
|
||||
MENUACTION_SCREENRES,
|
||||
|
@ -267,7 +253,9 @@ enum eMenuAction
|
|||
MENUACTION_CTRLMETHOD,
|
||||
MENUACTION_DYNAMICACOUSTIC,
|
||||
MENUACTION_MOUSESTEER,
|
||||
MENUACTION_UNK110,
|
||||
MENUACTION_DRAWDIST,
|
||||
MENUACTION_MOUSESENS,
|
||||
MENUACTION_MP3VOLUMEBOOST,
|
||||
#ifdef IMPROVED_VIDEOMODE
|
||||
MENUACTION_SCREENFORMAT,
|
||||
#endif
|
||||
|
@ -532,7 +520,7 @@ public:
|
|||
CSprite2d m_aFrontEndSprites[NUM_MENU_SPRITES];
|
||||
bool m_bSpritesLoaded;
|
||||
int32 field_F0;
|
||||
int32 m_LastRadioScrollDir;
|
||||
int32 m_ScrollRadioBy;
|
||||
int32 m_nCurrScreen;
|
||||
int32 m_nPrevScreen;
|
||||
int32 m_nCurrSaveSlot;
|
||||
|
@ -678,7 +666,8 @@ public:
|
|||
void Process();
|
||||
void ProcessList(bool &optionSelected, bool &goBack);
|
||||
void UserInput();
|
||||
void ProcessButtonPresses(uint8, uint8, uint8, uint8, int8);
|
||||
void ProcessUserInput(uint8, uint8, uint8, uint8, int8);
|
||||
void ChangeRadioStation(uint8);
|
||||
void ProcessFileActions();
|
||||
void ProcessOnOffMenuOptions();
|
||||
void RequestFrontEndShutDown();
|
||||
|
|
|
@ -203,6 +203,9 @@ static const char* FrontendFilenames[][2] =
|
|||
{"fe_radio9", "" },
|
||||
};
|
||||
|
||||
#ifdef CUTSCENE_BORDERS_SWITCH
|
||||
bool CMenuManager::m_PrefsCutsceneBorders = true;
|
||||
#endif
|
||||
|
||||
int32 CMenuManager::m_PrefsSfxVolume = 102;
|
||||
int32 CMenuManager::m_PrefsMusicVolume = 102;
|
||||
|
|
|
@ -161,6 +161,9 @@ public:
|
|||
static CONTRCONFIG m_PrefsControllerConfig;
|
||||
static bool m_PrefsUseVibration;
|
||||
|
||||
#ifdef CUTSCENE_BORDERS_SWITCH
|
||||
static bool m_PrefsCutsceneBorders;
|
||||
#endif
|
||||
|
||||
#ifdef GTA_PC
|
||||
bool m_bQuitGameNoCD;
|
||||
|
|
|
@ -7,8 +7,10 @@
|
|||
#include "main.h"
|
||||
#include "Population.h"
|
||||
|
||||
float CIniFile::PedNumberMultiplier = 1.0f;
|
||||
float CIniFile::CarNumberMultiplier = 1.0f;
|
||||
// --MIAMI: file done
|
||||
|
||||
float CIniFile::PedNumberMultiplier = 0.6f;
|
||||
float CIniFile::CarNumberMultiplier = 0.6f;
|
||||
|
||||
void CIniFile::LoadIniFile()
|
||||
{
|
||||
|
@ -24,5 +26,6 @@ void CIniFile::LoadIniFile()
|
|||
CFileMgr::CloseFile(f);
|
||||
}
|
||||
CPopulation::MaxNumberOfPedsInUse = 25.0f * PedNumberMultiplier;
|
||||
CPopulation::MaxNumberOfPedsInUseInterior = 40.0f * PedNumberMultiplier;
|
||||
CCarCtrl::MaxNumberOfCarsInUse = 12.0f * CarNumberMultiplier;
|
||||
}
|
|
@ -331,8 +331,6 @@ CMenuScreen aScreens[] = {
|
|||
MENUACTION_SETDBGFLAG, "FED_DFL", SAVESLOT_NONE, MENUPAGE_NONE, 0, 0, 0,
|
||||
MENUACTION_SWITCHBIGWHITEDEBUGLIGHT, "FED_DLS", SAVESLOT_NONE, MENUPAGE_NONE, 0, 0, 0,
|
||||
MENUACTION_COLLISIONPOLYS, "FED_SCP", SAVESLOT_NONE, MENUPAGE_NONE, 0, 0, 0,
|
||||
MENUACTION_PARSEHEAP, "FED_PAH", SAVESLOT_NONE, MENUPAGE_NONE, 0, 0, 0,
|
||||
MENUACTION_DEBUGSTREAM, "FED_DSR", SAVESLOT_NONE, MENUPAGE_NONE, 0, 0, 0,
|
||||
MENUACTION_GOBACK, "FEDS_TB", SAVESLOT_NONE, MENUPAGE_NONE, 0, 0, 0,
|
||||
},
|
||||
|
||||
|
|
|
@ -144,8 +144,11 @@ inline uint32 ldb(uint32 p, uint32 s, uint32 w)
|
|||
|
||||
#ifdef ASPECT_RATIO_SCALE
|
||||
#define SCREEN_SCALE_AR(a) ((a) * DEFAULT_ASPECT_RATIO / SCREEN_ASPECT_RATIO)
|
||||
extern float ScaleAndCenterX(float x);
|
||||
#define SCALE_AND_CENTER_X(x) ScaleAndCenterX(x)
|
||||
#else
|
||||
#define SCREEN_SCALE_AR(a) (a)
|
||||
#define SCALE_AND_CENTER_X(x) SCREEN_STRETCH_X(x)
|
||||
#endif
|
||||
|
||||
#include "maths.h"
|
||||
|
|
|
@ -89,7 +89,7 @@ void tbDisplay()
|
|||
CFont::SetScale(0.48f, 1.12f);
|
||||
CFont::SetCentreOff();
|
||||
CFont::SetJustifyOff();
|
||||
CFont::SetWrapx(640.0f);
|
||||
CFont::SetWrapx(SCREEN_STRETCH_X(DEFAULT_SCREEN_WIDTH));
|
||||
CFont::SetRightJustifyOff();
|
||||
CFont::SetPropOn();
|
||||
CFont::SetFontStyle(FONT_STANDARD);
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
#include "ModelIndices.h"
|
||||
#include "ModelInfo.h"
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
CBaseModelInfo *CModelInfo::ms_modelInfoPtrs[MODELINFOSIZE];
|
||||
|
||||
CStore<CSimpleModelInfo, SIMPLEMODELSIZE> CModelInfo::ms_simpleModelStore;
|
||||
|
@ -21,6 +23,14 @@ CModelInfo::Initialise(void)
|
|||
int i;
|
||||
CSimpleModelInfo *m;
|
||||
|
||||
debug("sizeof SimpleModelStore %d\n", sizeof(ms_simpleModelStore));
|
||||
debug("sizeof TimeModelStore %d\n", sizeof(ms_timeModelStore));
|
||||
debug("sizeof WeaponModelStore %d\n", sizeof(ms_weaponModelStore));
|
||||
debug("sizeof ClumpModelStore %d\n", sizeof(ms_clumpModelStore));
|
||||
debug("sizeof VehicleModelStore %d\n", sizeof(ms_vehicleModelStore));
|
||||
debug("sizeof PedModelStore %d\n", sizeof(ms_pedModelStore));
|
||||
debug("sizeof 2deffectsModelStore %d\n", sizeof(ms_2dEffectStore));
|
||||
|
||||
for(i = 0; i < MODELINFOSIZE; i++)
|
||||
ms_modelInfoPtrs[i] = nil;
|
||||
ms_2dEffectStore.clear();
|
||||
|
@ -191,6 +201,9 @@ CModelInfo::GetModelInfo(const char *name, int *id)
|
|||
CBaseModelInfo*
|
||||
CModelInfo::GetModelInfo(const char *name, int minIndex, int maxIndex)
|
||||
{
|
||||
if (minIndex > maxIndex)
|
||||
return 0;
|
||||
|
||||
CBaseModelInfo *modelinfo;
|
||||
for(int i = minIndex; i <= maxIndex; i++){
|
||||
modelinfo = CModelInfo::ms_modelInfoPtrs[i];
|
||||
|
@ -221,6 +234,20 @@ CModelInfo::IsCarModel(int32 id)
|
|||
((CVehicleModelInfo*)GetModelInfo(id))->m_vehicleType == VEHICLE_TYPE_CAR;
|
||||
}
|
||||
|
||||
bool
|
||||
CModelInfo::IsHeliModel(int32 id)
|
||||
{
|
||||
return GetModelInfo(id)->GetModelType() == MITYPE_VEHICLE &&
|
||||
((CVehicleModelInfo*)GetModelInfo(id))->m_vehicleType == VEHICLE_TYPE_HELI;
|
||||
}
|
||||
|
||||
bool
|
||||
CModelInfo::IsPlaneModel(int32 id)
|
||||
{
|
||||
return GetModelInfo(id)->GetModelType() == MITYPE_VEHICLE &&
|
||||
((CVehicleModelInfo*)GetModelInfo(id))->m_vehicleType == VEHICLE_TYPE_PLANE;
|
||||
}
|
||||
|
||||
void
|
||||
CModelInfo::ReInit2dEffects()
|
||||
{
|
||||
|
|
|
@ -43,5 +43,7 @@ public:
|
|||
static bool IsBoatModel(int32 id);
|
||||
static bool IsBikeModel(int32 id);
|
||||
static bool IsCarModel(int32 id);
|
||||
static bool IsHeliModel(int32 id);
|
||||
static bool IsPlaneModel(int32 id);
|
||||
static void ReInit2dEffects();
|
||||
};
|
||||
|
|
|
@ -117,7 +117,7 @@ CCivilianPed::CivilianAI(void)
|
|||
} else {
|
||||
SetMoveState(PEDMOVE_WALK);
|
||||
}
|
||||
} else if (threatPed->IsPlayer() && IsGangMember() && b158_80) {
|
||||
} else if (threatPed->IsPlayer() && IsGangMember() && bCanAttackPlayerWithCops) {
|
||||
SetObjective(OBJECTIVE_KILL_CHAR_ON_FOOT, m_threatEntity);
|
||||
|
||||
} else if (threatPed->IsPlayer() && FindPlayerPed()->m_pWanted->m_CurrentCops != 0) {
|
||||
|
@ -203,7 +203,7 @@ CCivilianPed::CivilianAI(void)
|
|||
CPed *threatPed = (CPed*)m_threatEntity;
|
||||
if (m_pedStats->m_fear <= 100 - threatPed->m_pedStats->m_temper && threatPed->m_nPedType != PEDTYPE_COP) {
|
||||
if (threatPed->GetWeapon()->IsTypeMelee() || !GetWeapon()->IsTypeMelee()) {
|
||||
if (threatPed->IsPlayer() && IsGangMember() && b158_80) {
|
||||
if (threatPed->IsPlayer() && IsGangMember() && bCanAttackPlayerWithCops) {
|
||||
SetObjective(OBJECTIVE_KILL_CHAR_ON_FOOT, m_threatEntity);
|
||||
|
||||
} else if (threatPed->IsPlayer() && FindPlayerPed()->m_pWanted->m_CurrentCops != 0) {
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
#include "Streaming.h"
|
||||
#include "Weapon.h"
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
CGangInfo CGangs::Gang[NUM_GANGS];
|
||||
bool CGangs::GangAttackWithCops[NUM_GANGS];
|
||||
|
||||
|
|
|
@ -459,7 +459,7 @@ CPed::CPed(uint32 pedType) : m_pedIK(this)
|
|||
bCollectBusFare = false;
|
||||
bBoughtIceCream = false;
|
||||
bDonePositionOutOfCollision = false;
|
||||
b158_80 = false;
|
||||
bCanAttackPlayerWithCops = false;
|
||||
|
||||
if (CGeneral::GetRandomNumber() & 3)
|
||||
bHasACamera = false;
|
||||
|
|
|
@ -491,7 +491,7 @@ public:
|
|||
uint32 bCollectBusFare : 1;
|
||||
uint32 bBoughtIceCream : 1;
|
||||
uint32 bDonePositionOutOfCollision : 1;
|
||||
uint32 b158_80 : 1;
|
||||
uint32 bCanAttackPlayerWithCops : 1;
|
||||
|
||||
// our own flags
|
||||
uint32 m_ped_flagI80 : 1; // KANGAROO_CHEAT define makes use of this as cheat toggle
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
#include "General.h"
|
||||
#include "Ped.h"
|
||||
|
||||
// --MIAMI: Done
|
||||
// --MIAMI: file done
|
||||
|
||||
// Corresponds to ped sounds (from SOUND_PED_DEATH to SOUND_PED_TAXI_CALL)
|
||||
PedAudioData CommentWaitTime[56] = {
|
||||
{ 500, 800, 500, 2 },
|
||||
|
@ -65,14 +66,12 @@ PedAudioData CommentWaitTime[56] = {
|
|||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
// --MIAMI: Done
|
||||
bool
|
||||
CPed::ServiceTalkingWhenDead(void)
|
||||
{
|
||||
return m_queuedSound == SOUND_PED_DEATH;
|
||||
}
|
||||
|
||||
// --MIAMI: Done
|
||||
void
|
||||
CPed::ServiceTalking(void)
|
||||
{
|
||||
|
@ -102,7 +101,6 @@ CPed::ServiceTalking(void)
|
|||
}
|
||||
}
|
||||
|
||||
// --MIAMI: Done
|
||||
void
|
||||
CPed::Say(uint16 audio)
|
||||
{
|
||||
|
@ -157,7 +155,6 @@ CPed::Say(uint16 audio)
|
|||
}
|
||||
}
|
||||
|
||||
// --MIAMI: Done
|
||||
void
|
||||
CPed::Say(uint16 audio, int32 time)
|
||||
{
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
#include "FileMgr.h"
|
||||
#include "PedType.h"
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
CPedType *CPedType::ms_apPedType[NUM_PEDTYPES];
|
||||
|
||||
void
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -13,23 +13,6 @@ struct PedGroup
|
|||
int32 models[NUMMODELSPERPEDGROUP];
|
||||
};
|
||||
|
||||
// Don't know the original name
|
||||
struct RegenerationPoint
|
||||
{
|
||||
eLevelName srcLevel; // this and below one may need to be exchanged
|
||||
eLevelName destLevel;
|
||||
float x1;
|
||||
float x2;
|
||||
float y1;
|
||||
float y2;
|
||||
float z1;
|
||||
float z2;
|
||||
CVector destPosA;
|
||||
CVector destPosB;
|
||||
CVector srcPosA;
|
||||
CVector srcPosB;
|
||||
};
|
||||
|
||||
class CPopulation
|
||||
{
|
||||
public:
|
||||
|
@ -39,6 +22,7 @@ public:
|
|||
static float PedDensityMultiplier;
|
||||
static uint32 ms_nTotalMissionPeds;
|
||||
static int32 MaxNumberOfPedsInUse;
|
||||
static int32 MaxNumberOfPedsInUseInterior;
|
||||
static uint32 ms_nNumCivMale;
|
||||
static uint32 ms_nNumCivFemale;
|
||||
static uint32 ms_nNumCop;
|
||||
|
@ -58,9 +42,6 @@ public:
|
|||
static uint32 ms_nNumGang9;
|
||||
static uint32 ms_nNumGang7;
|
||||
static uint32 ms_nNumGang8;
|
||||
static CVector RegenerationPoint_a;
|
||||
static CVector RegenerationPoint_b;
|
||||
static CVector RegenerationForward;
|
||||
|
||||
static uint32 ms_nTotalCarPassengerPeds;
|
||||
static uint32 NumMiamiViceCops;
|
||||
|
@ -71,13 +52,12 @@ public:
|
|||
static void UpdatePedCount(ePedType, bool);
|
||||
static void DealWithZoneChange(eLevelName oldLevel, eLevelName newLevel, bool);
|
||||
static CPed *AddPedInCar(CVehicle *car, bool isDriver);
|
||||
static bool IsPointInSafeZone(CVector *coors);
|
||||
static void RemovePed(CPed *ent);
|
||||
static int32 ChooseCivilianOccupation(int32);
|
||||
static int32 ChooseNextCivilianOccupation(int32);
|
||||
static void ChooseCivilianCoupleOccupations(int32, int32&, int32&);
|
||||
static int32 ChoosePolicePedOccupation();
|
||||
static int32 ChooseGangOccupation(int);
|
||||
static void FindCollisionZoneForCoors(CVector*, int*, eLevelName*);
|
||||
static void FindClosestZoneForCoors(CVector*, int*, eLevelName, eLevelName);
|
||||
static void GeneratePedsAtStartOfGame();
|
||||
static float PedCreationDistMultiplier();
|
||||
static CPed *AddPed(ePedType pedType, uint32 mi, CVector const &coors, int32 modifier = 0);
|
||||
|
@ -91,6 +71,18 @@ public:
|
|||
static bool TestSafeForRealObject(CDummyObject*);
|
||||
static bool IsSkateable(CVector const&);
|
||||
static bool CanJeerAtStripper(int32 model);
|
||||
|
||||
static void RemovePedsIfThePoolGetsFull(void);
|
||||
static bool IsMale(int32);
|
||||
static bool IsFemale(int32);
|
||||
static bool IsSunbather(int32);
|
||||
static int32 ComputeRandomisedGangSize(void);
|
||||
static bool CanSolicitPlayerInCar(int32);
|
||||
static bool CanSolicitPlayerOnFoot(int32);
|
||||
static bool IsSecurityGuard(ePedType);
|
||||
static void PlaceGangMembers(ePedType, int32, CVector const&);
|
||||
static void PlaceGangMembersInFormation(ePedType, int32, CVector const&);
|
||||
static void PlaceGangMembersInCircle(ePedType, int32, CVector const&);
|
||||
static void PlaceCouple(ePedType, int32, ePedType, int32, CVector);
|
||||
static void PlaceMallPedsAsStationaryGroup(CVector const&, int32);
|
||||
static CPed* AddDeadPedInFrontOfCar(const CVector& pos, CVehicle* pCulprit);
|
||||
};
|
||||
|
|
|
@ -14,14 +14,6 @@
|
|||
bool CCredits::bCreditsGoing;
|
||||
uint32 CCredits::CreditsStartTime;
|
||||
|
||||
#ifdef ASPECT_RATIO_SCALE
|
||||
#define SCALE_AND_CENTER(x) ScaleAndCenterX(x)
|
||||
extern float ScaleAndCenterX(float x);
|
||||
#else
|
||||
#define SCALE_AND_CENTER(x) SCREEN_STRETCH_X(x)
|
||||
#endif
|
||||
|
||||
|
||||
void
|
||||
CCredits::Init(void)
|
||||
{
|
||||
|
@ -81,7 +73,7 @@ CCredits::Render(void)
|
|||
scrolloffset = (CTimer::GetTimeInMilliseconds() - CreditsStartTime) / 24.0f;
|
||||
CFont::SetJustifyOff();
|
||||
CFont::SetBackgroundOff();
|
||||
CFont::SetCentreSize(SCALE_AND_CENTER(DEFAULT_SCREEN_WIDTH * 0.75f));
|
||||
CFont::SetCentreSize(SCALE_AND_CENTER_X(DEFAULT_SCREEN_WIDTH * 0.75f));
|
||||
CFont::SetCentreOn();
|
||||
CFont::SetPropOn();
|
||||
CFont::SetFontStyle(FONT_STANDARD);
|
||||
|
@ -429,7 +421,7 @@ CCredits::Render(void)
|
|||
PrintCreditText(0.65f, 0.65f, TheText.Get("CRED129"), lineoffset, scrolloffset);
|
||||
PrintCreditSpace(1.5f, lineoffset);
|
||||
|
||||
CFont::SetCentreSize(SCALE_AND_CENTER(DEFAULT_SCREEN_WIDTH * 0.8f));
|
||||
CFont::SetCentreSize(SCALE_AND_CENTER_X(DEFAULT_SCREEN_WIDTH * 0.8f));
|
||||
|
||||
PrintCreditText(1.1f, 0.8f, TheText.Get("CRD111A"), lineoffset, scrolloffset);
|
||||
PrintCreditSpace(0.5f, lineoffset);
|
||||
|
@ -477,7 +469,7 @@ CCredits::Render(void)
|
|||
PrintCreditSpace(0.5f, lineoffset);
|
||||
PrintCreditText(0.65f, 0.65f, TheText.Get("CRD134I"), lineoffset, scrolloffset);
|
||||
|
||||
CFont::SetCentreSize(SCALE_AND_CENTER(DEFAULT_SCREEN_WIDTH * 0.7f));
|
||||
CFont::SetCentreSize(SCALE_AND_CENTER_X(DEFAULT_SCREEN_WIDTH * 0.7f));
|
||||
|
||||
PrintCreditSpace(1.5f, lineoffset);
|
||||
PrintCreditText(1.1f, 0.8f, TheText.Get("CRED135"), lineoffset, scrolloffset);
|
||||
|
@ -513,7 +505,7 @@ CCredits::Render(void)
|
|||
PrintCreditText(1.1f, 1.1f, TheText.Get("CRD140L"), lineoffset, scrolloffset);
|
||||
PrintCreditSpace(1.5f, lineoffset);
|
||||
|
||||
CFont::SetCentreSize(SCALE_AND_CENTER(DEFAULT_SCREEN_WIDTH * 0.85f));
|
||||
CFont::SetCentreSize(SCALE_AND_CENTER_X(DEFAULT_SCREEN_WIDTH * 0.85f));
|
||||
|
||||
PrintCreditText(0.95f, 0.7f, TheText.Get("CRED259"), lineoffset, scrolloffset);
|
||||
PrintCreditSpace(0.5f, lineoffset);
|
||||
|
@ -594,7 +586,7 @@ CCredits::Render(void)
|
|||
PrintCreditText(0.65f, 0.65f, TheText.Get("CRED172"), lineoffset, scrolloffset);
|
||||
PrintCreditSpace(0.5f, lineoffset);
|
||||
|
||||
CFont::SetCentreSize(SCALE_AND_CENTER(DEFAULT_SCREEN_WIDTH * 0.75f));
|
||||
CFont::SetCentreSize(SCALE_AND_CENTER_X(DEFAULT_SCREEN_WIDTH * 0.75f));
|
||||
|
||||
PrintCreditSpace(1.5f, lineoffset);
|
||||
PrintCreditText(0.95f, 0.7f, TheText.Get("CRED217"), lineoffset, scrolloffset);
|
||||
|
@ -717,7 +709,7 @@ CCredits::Render(void)
|
|||
PrintCreditText(0.65f, 0.65f, TheText.Get("CRED332"), lineoffset, scrolloffset);
|
||||
PrintCreditSpace(1.5f, lineoffset);
|
||||
|
||||
CFont::SetCentreSize(SCALE_AND_CENTER(DEFAULT_SCREEN_WIDTH * 0.8f));
|
||||
CFont::SetCentreSize(SCALE_AND_CENTER_X(DEFAULT_SCREEN_WIDTH * 0.8f));
|
||||
|
||||
PrintCreditText(0.95f, 0.7f, TheText.Get("CRED333"), lineoffset, scrolloffset);
|
||||
PrintCreditSpace(0.5f, lineoffset);
|
||||
|
@ -755,7 +747,7 @@ CCredits::Render(void)
|
|||
|
||||
PrintCreditSpace(1.5f, lineoffset);
|
||||
|
||||
CFont::SetCentreSize(SCALE_AND_CENTER(DEFAULT_SCREEN_WIDTH * 0.75f));
|
||||
CFont::SetCentreSize(SCALE_AND_CENTER_X(DEFAULT_SCREEN_WIDTH * 0.75f));
|
||||
|
||||
PrintCreditText(0.95f, 0.7f, TheText.Get("CRED267"), lineoffset, scrolloffset);
|
||||
PrintCreditSpace(0.5f, lineoffset);
|
||||
|
@ -819,5 +811,3 @@ bool CCredits::AreCreditsDone(void)
|
|||
{
|
||||
return !bCreditsGoing;
|
||||
}
|
||||
|
||||
#undef SCALE_AND_CENTER
|
|
@ -69,3 +69,14 @@ CDraw::SetFOV(float fov)
|
|||
#endif
|
||||
ms_fFOV = fov;
|
||||
}
|
||||
|
||||
#ifdef ASPECT_RATIO_SCALE
|
||||
float
|
||||
ScaleAndCenterX(float x)
|
||||
{
|
||||
if (SCREEN_WIDTH == DEFAULT_SCREEN_WIDTH)
|
||||
return x;
|
||||
else
|
||||
return (SCREEN_WIDTH - SCREEN_SCALE_X(DEFAULT_SCREEN_WIDTH)) / 2 + SCREEN_SCALE_X(x);
|
||||
}
|
||||
#endif
|
|
@ -228,8 +228,8 @@ CFont::Initialise(void)
|
|||
SetColor(CRGBA(0xFF, 0xFF, 0xFF, 0));
|
||||
SetJustifyOff();
|
||||
SetCentreOff();
|
||||
SetWrapx(DEFAULT_SCREEN_WIDTH);
|
||||
SetCentreSize(DEFAULT_SCREEN_WIDTH);
|
||||
SetWrapx(SCREEN_STRETCH_X(DEFAULT_SCREEN_WIDTH));
|
||||
SetCentreSize(SCREEN_STRETCH_X(DEFAULT_SCREEN_WIDTH));
|
||||
SetBackgroundOff();
|
||||
SetBackgroundColor(CRGBA(0x80, 0x80, 0x80, 0x80));
|
||||
SetBackGroundOnlyTextOff();
|
||||
|
@ -996,22 +996,10 @@ CFont::GetStringWidth(wchar *s, bool spaces)
|
|||
{
|
||||
for (wchar c = *s; (c != ' ' || spaces) && c != '\0'; c = *(++s)) {
|
||||
if (c == '~') {
|
||||
|
||||
// This is original code
|
||||
#if 0
|
||||
s++;
|
||||
while (*s != '~') {
|
||||
s++;
|
||||
}
|
||||
#else
|
||||
// TODO(Miami): This is my code to prevent fuck up until InsertPlayerControlKeysInString is done
|
||||
if (*(s + 1) != '~') {
|
||||
s++;
|
||||
while (*s != '~') {
|
||||
s++;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
w += GetCharacterSize(c - ' ');
|
||||
|
|
|
@ -405,7 +405,7 @@ void CHud::Draw()
|
|||
CFont::SetScale(SCREEN_SCALE_X(0.5f), SCREEN_SCALE_Y(0.8f));
|
||||
CFont::SetJustifyOff();
|
||||
CFont::SetCentreOn();
|
||||
CFont::SetCentreSize(SCREEN_SCALE_X(DEFAULT_SCREEN_WIDTH));
|
||||
CFont::SetCentreSize(SCREEN_STRETCH_X(DEFAULT_SCREEN_WIDTH));
|
||||
CFont::SetPropOn();
|
||||
CFont::SetDropShadowPosition(0);
|
||||
CFont::SetFontStyle(FONT_STANDARD);
|
||||
|
@ -886,7 +886,7 @@ void CHud::Draw()
|
|||
CFont::SetRightJustifyWrap(0.0f);
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
|
||||
CFont::SetColor(CRGBA(244, 20, 20, 255));
|
||||
CFont::SetWrapx(SCREEN_SCALE_X(640.0f));
|
||||
CFont::SetWrapx(SCREEN_STRETCH_X(DEFAULT_SCREEN_WIDTH));
|
||||
CFont::SetPropOff();
|
||||
CFont::SetBackGroundOnlyTextOn();
|
||||
|
||||
|
@ -1024,8 +1024,8 @@ void CHud::Draw()
|
|||
else
|
||||
CFont::SetCentreOff();
|
||||
|
||||
CFont::SetWrapx(SCREEN_SCALE_X(CTheScripts::IntroTextLines[i].m_fWrapX));
|
||||
CFont::SetCentreSize(SCREEN_SCALE_X(CTheScripts::IntroTextLines[i].m_fCenterSize));
|
||||
CFont::SetWrapx(SCALE_AND_CENTER_X(CTheScripts::IntroTextLines[i].m_fWrapX));
|
||||
CFont::SetCentreSize(SCALE_AND_CENTER_X(CTheScripts::IntroTextLines[i].m_fCenterSize));
|
||||
|
||||
if (CTheScripts::IntroTextLines[i].m_bBackground)
|
||||
CFont::SetBackgroundOn();
|
||||
|
@ -1045,7 +1045,7 @@ void CHud::Draw()
|
|||
CFont::SetPropOff();
|
||||
|
||||
CFont::SetFontStyle(FONT_LOCALE(CTheScripts::IntroTextLines[i].m_nFont));
|
||||
CFont::PrintString(SCREEN_SCALE_X(DEFAULT_SCREEN_WIDTH - CTheScripts::IntroTextLines[i].m_fAtX), SCREEN_SCALE_Y(DEFAULT_SCREEN_HEIGHT - CTheScripts::IntroTextLines[i].m_fAtY), CTheScripts::IntroTextLines[i].m_Text);
|
||||
CFont::PrintString(SCALE_AND_CENTER_X(DEFAULT_SCREEN_WIDTH - CTheScripts::IntroTextLines[i].m_fAtX), SCREEN_SCALE_Y(DEFAULT_SCREEN_HEIGHT - CTheScripts::IntroTextLines[i].m_fAtY), CTheScripts::IntroTextLines[i].m_Text);
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < ARRAY_SIZE(CTheScripts::IntroRectangles); i++) {
|
||||
|
@ -1250,10 +1250,12 @@ void CHud::Draw()
|
|||
}
|
||||
CFont::SetPropOn();
|
||||
CFont::SetCentreOn();
|
||||
CFont::SetCentreSize(SCREEN_SCALE_X(590.0f));
|
||||
CFont::SetCentreSize(SCREEN_SCALE_FROM_RIGHT(50.0f));
|
||||
CFont::SetColor(CRGBA(255, 255, 0, BigMessageAlpha[0])); // unused color
|
||||
CFont::SetFontStyle(FONT_HEADING);
|
||||
|
||||
// Appearently sliding text in here was abandoned very early, since this text is centered now.
|
||||
|
||||
if (BigMessageX[0] >= SCREEN_SCALE_FROM_RIGHT(20.0f)) {
|
||||
BigMessageInUse[0] += CTimer::GetTimeStep();
|
||||
|
||||
|
@ -1268,7 +1270,7 @@ void CHud::Draw()
|
|||
}
|
||||
}
|
||||
else {
|
||||
BigMessageX[0] += (CTimer::GetTimeStepInMilliseconds() * 0.3f);
|
||||
BigMessageX[0] += SCREEN_SCALE_X((CTimer::GetTimeStepInMilliseconds() * 0.3f));
|
||||
BigMessageAlpha[0] += (CTimer::GetTimeStepInMilliseconds() * 0.3f);
|
||||
|
||||
if (BigMessageAlpha[0] > 255.0f)
|
||||
|
@ -1282,7 +1284,7 @@ void CHud::Draw()
|
|||
}
|
||||
else {
|
||||
BigMessageAlpha[0] = 0.0f;
|
||||
BigMessageX[0] = -60.0f;
|
||||
BigMessageX[0] = SCREEN_SCALE_FROM_RIGHT(DEFAULT_SCREEN_WIDTH + 60.0f);
|
||||
BigMessageInUse[0] = 1.0f;
|
||||
}
|
||||
}
|
||||
|
@ -1293,7 +1295,7 @@ void CHud::Draw()
|
|||
// WastedBustedText
|
||||
if (m_BigMessage[2][0]) {
|
||||
if (BigMessageInUse[2] != 0.0f) {
|
||||
BigMessageAlpha[2] += (CTimer::GetTimeStepInSeconds() * 255.0f);
|
||||
BigMessageAlpha[2] += (CTimer::GetTimeStepInMilliseconds() * 0.4f);
|
||||
|
||||
if (BigMessageAlpha[2] > 255.0f)
|
||||
BigMessageAlpha[2] = 255.0f;
|
||||
|
@ -1330,6 +1332,7 @@ void CHud::Draw()
|
|||
}
|
||||
}
|
||||
|
||||
// --MIAMI: Done
|
||||
void CHud::DrawAfterFade()
|
||||
{
|
||||
RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERNEAREST);
|
||||
|
@ -1360,8 +1363,8 @@ void CHud::DrawAfterFade()
|
|||
else
|
||||
CFont::SetCentreOff();
|
||||
|
||||
CFont::SetWrapx(SCREEN_SCALE_X(line.m_fWrapX));
|
||||
CFont::SetCentreSize(SCREEN_SCALE_X(line.m_fCenterSize));
|
||||
CFont::SetWrapx(SCALE_AND_CENTER_X(line.m_fWrapX));
|
||||
CFont::SetCentreSize(SCALE_AND_CENTER_X(line.m_fCenterSize));
|
||||
if (line.m_bBackground)
|
||||
CFont::SetBackgroundOn();
|
||||
else
|
||||
|
@ -1379,7 +1382,7 @@ void CHud::DrawAfterFade()
|
|||
CFont::SetPropOff();
|
||||
|
||||
CFont::SetFontStyle(line.m_nFont);
|
||||
CFont::PrintString(SCREEN_SCALE_X(DEFAULT_SCREEN_WIDTH - line.m_fAtX), SCREEN_SCALE_Y(DEFAULT_SCREEN_HEIGHT - line.m_fAtY), line.m_Text);
|
||||
CFont::PrintString(SCALE_AND_CENTER_X(DEFAULT_SCREEN_WIDTH - line.m_fAtX), SCREEN_SCALE_Y(DEFAULT_SCREEN_HEIGHT - line.m_fAtY), line.m_Text);
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < ARRAY_SIZE(CTheScripts::IntroRectangles); i++) {
|
||||
|
@ -1407,7 +1410,7 @@ void CHud::DrawAfterFade()
|
|||
CFont::SetScale(SCREEN_SCALE_X(1.2f), SCREEN_SCALE_Y(1.5f));
|
||||
CFont::SetCentreOn();
|
||||
CFont::SetPropOn();
|
||||
CFont::SetCentreSize(SCREEN_SCALE_X(600.0f));
|
||||
CFont::SetCentreSize(SCREEN_SCALE_FROM_RIGHT(40.0f));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
|
||||
CFont::SetDropShadowPosition(2);
|
||||
CFont::SetDropColor(CRGBA(0, 0, 0, 255));
|
||||
|
@ -1421,7 +1424,7 @@ void CHud::DrawAfterFade()
|
|||
CFont::SetScale(SCREEN_SCALE_X(1.2f), SCREEN_SCALE_Y(1.5f));
|
||||
CFont::SetCentreOn();
|
||||
CFont::SetPropOn();
|
||||
CFont::SetCentreSize(SCREEN_SCALE_X(620.0f));
|
||||
CFont::SetCentreSize(SCREEN_SCALE_FROM_RIGHT(60.0f));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
|
||||
CFont::SetDropShadowPosition(2);
|
||||
CFont::SetDropColor(CRGBA(0, 0, 0, 255));
|
||||
|
@ -1451,7 +1454,7 @@ void CHud::DrawAfterFade()
|
|||
}
|
||||
break;
|
||||
case 2:
|
||||
OddJob2Timer += (20.0f * CTimer::GetTimeStep());
|
||||
OddJob2Timer += CTimer::GetTimeStepInMilliseconds();
|
||||
if (OddJob2Timer > 1500) {
|
||||
OddJob2On = 3;
|
||||
}
|
||||
|
@ -1476,20 +1479,18 @@ void CHud::DrawAfterFade()
|
|||
CFont::SetScale(SCREEN_SCALE_X(1.0f), SCREEN_SCALE_Y(1.2f));
|
||||
CFont::SetCentreOn();
|
||||
CFont::SetPropOn();
|
||||
CFont::SetCentreSize(SCREEN_SCALE_FROM_RIGHT(20.0f));
|
||||
CFont::SetColor(CRGBA(0, 0, 0, 255));
|
||||
CFont::SetCentreSize(SCREEN_SCALE_FROM_RIGHT(80.0f));
|
||||
CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
|
||||
|
||||
CFont::SetDropShadowPosition(2);
|
||||
CFont::SetDropColor(CRGBA(0, 0, 0, 255));
|
||||
#ifdef BETA_SLIDING_TEXT
|
||||
CFont::PrintString(SCREEN_WIDTH / 2 + SCREEN_SCALE_X(2.0f) - SCREEN_SCALE_X(OddJob2XOffset), SCREEN_HEIGHT / 2 - SCREEN_SCALE_Y(20.0f) + SCREEN_SCALE_Y(2.0f), m_BigMessage[5]);
|
||||
|
||||
CFont::SetColor(ODDJOB2_COLOR);
|
||||
CFont::PrintString(SCREEN_WIDTH / 2 - SCREEN_SCALE_X(OddJob2XOffset), SCREEN_HEIGHT / 2 - SCREEN_SCALE_Y(20.0f), m_BigMessage[5]);
|
||||
CFont::PrintString(SCREEN_WIDTH / 2 - SCREEN_SCALE_X(OddJob2XOffset), SCREEN_SCALE_Y(217.0f), m_BigMessage[5]);
|
||||
#else
|
||||
CFont::PrintString(SCREEN_WIDTH / 2 + SCREEN_SCALE_X(2.0f), SCREEN_HEIGHT / 2 - SCREEN_SCALE_Y(20.0f) + SCREEN_SCALE_Y(2.0f), m_BigMessage[5]);
|
||||
|
||||
CFont::SetColor(ODDJOB2_COLOR);
|
||||
CFont::PrintString(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2 - SCREEN_SCALE_Y(20.0f), m_BigMessage[5]);
|
||||
CFont::PrintString(SCREEN_WIDTH / 2, SCREEN_SCALE_Y(217.0f), m_BigMessage[5]);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@ -1502,6 +1503,7 @@ void CHud::DrawAfterFade()
|
|||
CFont::SetJustifyOff();
|
||||
CFont::SetBackgroundOff();
|
||||
|
||||
// will be overwritten below
|
||||
if (CGame::frenchGame || FrontEndMenuManager.m_PrefsLanguage == CMenuManager::LANGUAGE_SPANISH)
|
||||
CFont::SetScale(SCREEN_SCALE_X(0.884f), SCREEN_SCALE_Y(1.36f));
|
||||
else
|
||||
|
@ -1511,41 +1513,45 @@ void CHud::DrawAfterFade()
|
|||
CFont::SetRightJustifyWrap(0.0f);
|
||||
CFont::SetRightJustifyOn();
|
||||
CFont::SetFontStyle(FONT_BANK);
|
||||
CFont::SetScale(FrontEndMenuManager.m_PrefsLanguage == CMenuManager::LANGUAGE_AMERICAN ? SCREEN_SCALE_X(1.7f) : SCREEN_SCALE_X(1.5f), SCREEN_SCALE_Y(1.8f));
|
||||
|
||||
if (BigMessageX[1] >= SCREEN_SCALE_FROM_RIGHT(20.0f)) {
|
||||
BigMessageInUse[1] += CTimer::GetTimeStep();
|
||||
|
||||
if (BigMessageInUse[1] >= 120.0f) {
|
||||
BigMessageInUse[1] = 120.0f;
|
||||
BigMessageAlpha[1] -= (CTimer::GetTimeStepInMilliseconds() * 0.3f);
|
||||
BigMessageAlpha[1] -= CTimer::GetTimeStepInMilliseconds();
|
||||
}
|
||||
if (BigMessageAlpha[1] <= 0) {
|
||||
m_BigMessage[1][0] = 0;
|
||||
BigMessageInUse[1] = 0.0f;
|
||||
BigMessageAlpha[1] = 0.0f;
|
||||
}
|
||||
} else {
|
||||
BigMessageX[1] += (CTimer::GetTimeStepInMilliseconds() * 0.3f);
|
||||
BigMessageAlpha[1] += (CTimer::GetTimeStepInMilliseconds() * 0.3f);
|
||||
BigMessageX[1] += SCREEN_SCALE_X((CTimer::GetTimeStepInMilliseconds() * 0.3f));
|
||||
BigMessageAlpha[1] += CTimer::GetTimeStepInMilliseconds();
|
||||
|
||||
if (BigMessageAlpha[1] > 255.0f)
|
||||
BigMessageAlpha[1] = 255.0f;
|
||||
}
|
||||
|
||||
CFont::SetDropShadowPosition(2);
|
||||
CFont::SetDropColor(CRGBA(40, 40, 40, BigMessageAlpha[1]));
|
||||
//CFont::SetColor(CRGBA(40, 40, 40, BigMessageAlpha[1]));
|
||||
//CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(20.0f) + SCREEN_SCALE_X(2.0f), SCREEN_SCALE_FROM_BOTTOM(120.0f) + SCREEN_SCALE_Y(2.0f), m_BigMessage[1]);
|
||||
CFont::SetColor(CRGBA(40, 40, 40, BigMessageAlpha[1])); // what was that for?
|
||||
|
||||
CFont::SetDropShadowPosition(2);
|
||||
CFont::SetDropColor(CRGBA(0, 0, 0, BigMessageAlpha[1]));
|
||||
CFont::SetColor(CRGBA(MISSIONTITLE_COLOR.r, MISSIONTITLE_COLOR.g, MISSIONTITLE_COLOR.b, BigMessageAlpha[1]));
|
||||
CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(20.0f), SCREEN_SCALE_FROM_BOTTOM(120.0f), m_BigMessage[1]);
|
||||
}
|
||||
else {
|
||||
BigMessageAlpha[1] = 0.0f;
|
||||
BigMessageX[1] = -60.0f;
|
||||
#ifdef BETA_SLIDING_TEXT
|
||||
CFont::PrintString(BigMessageX[1], SCREEN_SCALE_FROM_BOTTOM(140.0f), m_BigMessage[1]);
|
||||
#else
|
||||
CFont::PrintString(SCREEN_SCALE_FROM_RIGHT(20.0f), SCREEN_SCALE_FROM_BOTTOM(140.0f), m_BigMessage[1]);
|
||||
#endif
|
||||
} else {
|
||||
m_ZoneFadeTimer = 0;
|
||||
BigMessageX[1] = SCREEN_SCALE_FROM_RIGHT(DEFAULT_SCREEN_WIDTH + 60.0f);
|
||||
BigMessageInUse[1] = 1.0f;
|
||||
m_ZoneState = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
BigMessageInUse[1] = 0.0f;
|
||||
}
|
||||
}
|
||||
|
@ -1925,3 +1931,12 @@ float CHud::DrawFadeState(DRAW_FADE_STATE fadingElement, int forceFadingIn)
|
|||
|
||||
return clamp(alpha, 0.0f, 255.0f);
|
||||
}
|
||||
|
||||
void
|
||||
CHud::ResetWastedText(void)
|
||||
{
|
||||
BigMessageInUse[2] = 0.0f;
|
||||
BigMessageInUse[0] = 0.0f;
|
||||
m_BigMessage[2][0] = 0;
|
||||
m_BigMessage[0][0] = 0;
|
||||
}
|
|
@ -140,4 +140,5 @@ public:
|
|||
static void SetZoneName(wchar *name);
|
||||
static void Shutdown();
|
||||
static float DrawFadeState(DRAW_FADE_STATE, int);
|
||||
static void ResetWastedText(void);
|
||||
};
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
#include "PCSave.h"
|
||||
#include "Text.h"
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
const char* _psGetUserFilesFolder();
|
||||
|
||||
C_PcSave PcSaveHelper;
|
||||
|
@ -18,7 +20,7 @@ C_PcSave PcSaveHelper;
|
|||
void
|
||||
C_PcSave::SetSaveDirectory(const char *path)
|
||||
{
|
||||
sprintf(DefaultPCSaveFileName, "%s\\%s", path, "GTA3sf");
|
||||
sprintf(DefaultPCSaveFileName, "%s\\%s", path, "GTAVCsf");
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
|
@ -1736,7 +1736,6 @@ main(int argc, char *argv[])
|
|||
#else
|
||||
LoadingScreen(nil, nil, "loadsc0");
|
||||
#endif
|
||||
|
||||
if ( !CGame::InitialiseOnceAfterRW() )
|
||||
RsGlobal.quit = TRUE;
|
||||
|
||||
|
@ -1748,7 +1747,7 @@ main(int argc, char *argv[])
|
|||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
#ifndef PS2_MENU
|
||||
case GS_INIT_FRONTEND:
|
||||
{
|
||||
LoadingScreen(nil, nil, "loadsc0");
|
||||
|
@ -1769,7 +1768,6 @@ main(int argc, char *argv[])
|
|||
break;
|
||||
}
|
||||
|
||||
#ifndef PS2_MENU
|
||||
case GS_FRONTEND:
|
||||
{
|
||||
if(!glfwGetWindowAttrib(PSGLOBAL(window), GLFW_ICONIFIED))
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
#include "Zones.h"
|
||||
#include "Occlusion.h"
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
uint8 CTheCarGenerators::ProcessCounter;
|
||||
uint32 CTheCarGenerators::NumOfCarGenerators;
|
||||
CCarGenerator CTheCarGenerators::CarGeneratorArray[NUM_CARGENS];
|
||||
|
@ -42,7 +44,6 @@ uint32 CCarGenerator::CalcNextGen()
|
|||
return CTimer::GetTimeInMilliseconds() + 4;
|
||||
}
|
||||
|
||||
//TODO(MIAMI): check for more changes - so far only -1 mi is accounted for
|
||||
void CCarGenerator::DoInternalProcessing()
|
||||
{
|
||||
int mi;
|
||||
|
@ -53,6 +54,7 @@ void CCarGenerator::DoInternalProcessing()
|
|||
m_nTimer += 4;
|
||||
return;
|
||||
}
|
||||
CStreaming::RequestModel(m_nModelIndex, STREAMFLAGS_DEPENDENCY);
|
||||
mi = m_nModelIndex;
|
||||
}
|
||||
else {
|
||||
|
@ -73,29 +75,25 @@ void CCarGenerator::DoInternalProcessing()
|
|||
return;
|
||||
}
|
||||
}
|
||||
CStreaming::RequestModel(mi, STREAMFLAGS_DEPENDENCY);
|
||||
if (!CStreaming::HasModelLoaded(mi))
|
||||
return;
|
||||
CVehicle* pVehicle;
|
||||
|
||||
CVector pos;
|
||||
if (CModelInfo::IsBoatModel(mi)){
|
||||
CBoat* pBoat = new CBoat(mi, PARKED_VEHICLE);
|
||||
pos = m_vecPos;
|
||||
pVehicle = pBoat;
|
||||
pBoat->bIsStatic = false;
|
||||
pBoat->bEngineOn = false;
|
||||
CVector pos = m_vecPos;
|
||||
if (pos.z <= -100.0f)
|
||||
pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y);
|
||||
pos.z += pBoat->GetDistanceFromCentreOfMassToBaseOfModel();
|
||||
pBoat->SetPosition(pos);
|
||||
pBoat->SetOrientation(0.0f, 0.0f, DEGTORAD(m_fAngle));
|
||||
pBoat->SetStatus(STATUS_ABANDONED);
|
||||
pBoat->m_nDoorLock = CARLOCK_UNLOCKED;
|
||||
pBoat->bExtendedRange = false;
|
||||
}else{
|
||||
bool groundFound = false;
|
||||
CVector pos = m_vecPos;
|
||||
bool groundFound;
|
||||
pos = m_vecPos;
|
||||
if (pos.z > -100.0f){
|
||||
pos.z = CWorld::FindGroundZFor3DCoord(pos.x, pos.y, pos.z, &groundFound);
|
||||
}else{
|
||||
groundFound = false;
|
||||
CColPoint cp;
|
||||
CEntity* pEntity;
|
||||
groundFound = CWorld::ProcessVerticalLine(CVector(pos.x, pos.y, 1000.0f), -1000.0f,
|
||||
|
@ -107,7 +105,7 @@ void CCarGenerator::DoInternalProcessing()
|
|||
debug("CCarGenerator::DoInternalProcessing - can't find ground z for new car x = %f y = %f \n", m_vecPos.x, m_vecPos.y);
|
||||
return;
|
||||
}
|
||||
if (CModelInfo::IsBikeModel(mi)) {
|
||||
if (((CVehicleModelInfo*)CModelInfo::GetModelInfo(mi))->m_vehicleType == VEHICLE_TYPE_BIKE) {
|
||||
CBike* pBike = new CBike(mi, PARKED_VEHICLE);
|
||||
pBike->bIsStanding = true;
|
||||
pVehicle = pBike;
|
||||
|
@ -116,16 +114,16 @@ void CCarGenerator::DoInternalProcessing()
|
|||
CAutomobile* pCar = new CAutomobile(mi, PARKED_VEHICLE);
|
||||
pVehicle = pCar;
|
||||
}
|
||||
// pVehicle->GetDistanceFromCentreOfMassToBaseOfModel();
|
||||
pVehicle->bLightsOn = false;
|
||||
}
|
||||
pVehicle->bIsStatic = false;
|
||||
pVehicle->bEngineOn = false;
|
||||
pos.z += pVehicle->GetDistanceFromCentreOfMassToBaseOfModel();
|
||||
pVehicle->SetPosition(pos);
|
||||
pVehicle->SetOrientation(0.0f, 0.0f, DEGTORAD(m_fAngle));
|
||||
pVehicle->SetStatus(STATUS_ABANDONED);
|
||||
pVehicle->bLightsOn = false;
|
||||
pVehicle->m_nDoorLock = CARLOCK_UNLOCKED;
|
||||
|
||||
}
|
||||
CWorld::Add(pVehicle);
|
||||
if (CGeneral::GetRandomNumberInRange(0, 100) < m_nAlarm)
|
||||
pVehicle->m_nAlarmState = -1;
|
||||
|
@ -173,6 +171,8 @@ void CCarGenerator::Process()
|
|||
m_nVehicleHandle = -1;
|
||||
m_bIsBlocking = true;
|
||||
pVehicle->bExtendedRange = false;
|
||||
if (m_nModelIndex < 0)
|
||||
m_nModelIndex = -1;
|
||||
}
|
||||
|
||||
void CCarGenerator::Setup(float x, float y, float z, float angle, int32 mi, int16 color1, int16 color2, uint8 force, uint8 alarm, uint8 lock, uint16 min_delay, uint16 max_delay)
|
||||
|
@ -217,8 +217,8 @@ bool CCarGenerator::CheckIfWithinRangeOfAnyPlayers()
|
|||
float farclip = 110.0f * TheCamera.GenerationDistMultiplier;
|
||||
float nearclip = farclip - 20.0f;
|
||||
bool canBeRemoved = (m_nModelIndex > 0 && CModelInfo::IsBoatModel(m_nModelIndex) && 165.0f * TheCamera.GenerationDistMultiplier > distance &&
|
||||
TheCamera.IsSphereVisible(m_vecPos, 0.0f) && COcclusion::IsPositionOccluded(m_vecPos, 0.0f));
|
||||
if (distance >= farclip || canBeRemoved){
|
||||
TheCamera.IsSphereVisible(m_vecPos, 0.0f) && !COcclusion::IsPositionOccluded(m_vecPos, 0.0f));
|
||||
if (distance >= farclip && !canBeRemoved){
|
||||
if (m_bIsBlocking)
|
||||
m_bIsBlocking = false;
|
||||
return false;
|
||||
|
@ -227,7 +227,7 @@ bool CCarGenerator::CheckIfWithinRangeOfAnyPlayers()
|
|||
return true;
|
||||
if (m_bIsBlocking)
|
||||
return false;
|
||||
if (distance < nearclip)
|
||||
if (distance < nearclip && !m_bForceSpawn)
|
||||
return false;
|
||||
return DotProduct2D(direction, FindPlayerSpeed()) <= 0;
|
||||
}
|
||||
|
@ -246,8 +246,9 @@ void CTheCarGenerators::Process()
|
|||
|
||||
int32 CTheCarGenerators::CreateCarGenerator(float x, float y, float z, float angle, int32 mi, int16 color1, int16 color2, uint8 force, uint8 alarm, uint8 lock, uint16 min_delay, uint16 max_delay)
|
||||
{
|
||||
CarGeneratorArray[NumOfCarGenerators].Setup(x, y, z, angle, mi, color1, color2, force, alarm, lock, min_delay, max_delay);
|
||||
return NumOfCarGenerators++;
|
||||
if (NumOfCarGenerators < NUM_CARGENS)
|
||||
CarGeneratorArray[NumOfCarGenerators++].Setup(x, y, z, angle, mi, color1, color2, force, alarm, lock, min_delay, max_delay);
|
||||
return NumOfCarGenerators - 1;
|
||||
}
|
||||
|
||||
void CTheCarGenerators::Init()
|
||||
|
@ -279,6 +280,11 @@ VALIDATESAVEBUF(*size)
|
|||
|
||||
void CTheCarGenerators::LoadAllCarGenerators(uint8* buffer, uint32 size)
|
||||
{
|
||||
NumOfCarGenerators = 0;
|
||||
GenerateEvenIfPlayerIsCloseCounter = 0;
|
||||
CurrentActiveCount = 0;
|
||||
ProcessCounter = 0;
|
||||
|
||||
const int32 nGeneralDataSize = sizeof(NumOfCarGenerators) + sizeof(CurrentActiveCount) + sizeof(ProcessCounter) + sizeof(GenerateEvenIfPlayerIsCloseCounter) + sizeof(int16);
|
||||
Init();
|
||||
INITSAVEBUF
|
||||
|
|
|
@ -52,17 +52,22 @@ void CCranes::InitCranes(void)
|
|||
CEntity* pEntity = (CEntity*)pNode->item;
|
||||
if (MODELID_CRANE_1 == pEntity->GetModelIndex() ||
|
||||
MODELID_CRANE_2 == pEntity->GetModelIndex() ||
|
||||
MODELID_CRANE_3 == pEntity->GetModelIndex())
|
||||
MODELID_CRANE_3 == pEntity->GetModelIndex() ||
|
||||
MODELID_CRANE_4 == pEntity->GetModelIndex() ||
|
||||
MODELID_CRANE_5 == pEntity->GetModelIndex() ||
|
||||
MODELID_CRANE_6 == pEntity->GetModelIndex())
|
||||
AddThisOneCrane(pEntity);
|
||||
}
|
||||
}
|
||||
}
|
||||
// TODO(MIAMI): LEVEL_MAINLAND just so it compiles
|
||||
for (CPtrNode* pNode = CWorld::GetBigBuildingList(LEVEL_MAINLAND).first; pNode; pNode = pNode->next) {
|
||||
CEntity* pEntity = (CEntity*)pNode->item;
|
||||
if (MODELID_CRANE_1 == pEntity->GetModelIndex() ||
|
||||
MODELID_CRANE_2 == pEntity->GetModelIndex() ||
|
||||
MODELID_CRANE_3 == pEntity->GetModelIndex())
|
||||
MODELID_CRANE_3 == pEntity->GetModelIndex() ||
|
||||
MODELID_CRANE_4 == pEntity->GetModelIndex() ||
|
||||
MODELID_CRANE_5 == pEntity->GetModelIndex() ||
|
||||
MODELID_CRANE_6 == pEntity->GetModelIndex())
|
||||
AddThisOneCrane(pEntity);
|
||||
}
|
||||
}
|
||||
|
@ -85,20 +90,6 @@ void CCranes::AddThisOneCrane(CEntity* pEntity)
|
|||
pCrane->m_nCraneState = CCrane::IDLE;
|
||||
pCrane->m_bWasMilitaryCrane = false;
|
||||
pCrane->m_bIsTop = (MODELID_CRANE_1 != pEntity->GetModelIndex());
|
||||
#if 0
|
||||
// Is this used to avoid military crane?
|
||||
if (pCrane->m_bIsTop || pEntity->GetPosition().y > 0.0f) {
|
||||
CObject* pHook = new CObject(MI_MAGNET, false);
|
||||
pHook->ObjectCreatedBy = MISSION_OBJECT;
|
||||
pHook->bUsesCollision = false;
|
||||
pHook->bExplosionProof = true;
|
||||
pHook->bAffectedByGravity = false;
|
||||
pCrane->m_pHook = pHook;
|
||||
pCrane->CalcHookCoordinates(&pCrane->m_vecHookCurPos.x, &pCrane->m_vecHookCurPos.y, &pCrane->m_vecHookCurPos.z);
|
||||
pCrane->SetHookMatrix();
|
||||
}
|
||||
else
|
||||
#endif
|
||||
pCrane->m_pHook = nil;
|
||||
NumCranes++;
|
||||
}
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
#include "Ped.h"
|
||||
#include "Fire.h"
|
||||
|
||||
// --MIAMI: file done
|
||||
|
||||
CShotInfo gaShotInfo[NUMSHOTINFOS];
|
||||
float CShotInfo::ms_afRandTable[20];
|
||||
|
||||
|
|
Loading…
Reference in a new issue