mirror of
https://github.com/halpz/re3.git
synced 2025-06-29 09:46:18 +00:00
Merge with upstream
This commit is contained in:
@ -2,6 +2,8 @@
|
||||
#include "patcher.h"
|
||||
#include "CarCtrl.h"
|
||||
|
||||
int &CCarCtrl::NumLawEnforcerCars = *(int*)0x8F1B38;
|
||||
|
||||
WRAPPER void CCarCtrl::SwitchVehicleToRealPhysics(CVehicle*) { EAXJMP(0x41F7F0); }
|
||||
WRAPPER void CCarCtrl::AddToCarArray(int id, int vehclass) { EAXJMP(0x4182F0); }
|
||||
WRAPPER void CCarCtrl::UpdateCarCount(CVehicle*, bool) { EAXJMP(0x4202E0); }
|
@ -8,4 +8,6 @@ public:
|
||||
static void SwitchVehicleToRealPhysics(CVehicle*);
|
||||
static void AddToCarArray(int id, int vehclass);
|
||||
static void UpdateCarCount(CVehicle*, bool);
|
||||
|
||||
static int32 &NumLawEnforcerCars;
|
||||
};
|
||||
|
@ -68,7 +68,7 @@ WRAPPER void CGarages::PrintMessages(void) { EAXJMP(0x426310); }
|
||||
#else
|
||||
void CGarages::PrintMessages()
|
||||
{
|
||||
if (CTimer::GetTimeInMilliseconds() > CGarages::MessageStartTime && CTimer::GetTimeInMilliseconds() < CGarages::MessageEndTime) {
|
||||
if (CTimer::GetTimeInMilliseconds() > MessageStartTime && CTimer::GetTimeInMilliseconds() < MessageEndTime) {
|
||||
CFont::SetScale(SCREEN_SCALE_X(1.2f / 2), SCREEN_SCALE_Y(1.5f / 2)); // BUG: game doesn't use macro here.
|
||||
CFont::SetPropOn();
|
||||
CFont::SetJustifyOff();
|
||||
@ -77,16 +77,16 @@ void CGarages::PrintMessages()
|
||||
CFont::SetCentreOn();
|
||||
CFont::SetFontStyle(FONT_BANK);
|
||||
|
||||
if (CGarages::MessageNumberInString2 < 0) {
|
||||
if (CGarages::MessageNumberInString < 0) {
|
||||
if (MessageNumberInString2 < 0) {
|
||||
if (MessageNumberInString < 0) {
|
||||
CFont::SetColor(CRGBA(0, 0, 0, 255));
|
||||
CFont::PrintString((SCREEN_WIDTH/ 2) + SCREEN_SCALE_X(2.0f), (SCREEN_HEIGHT / 2) + SCREEN_SCALE_Y(-84.0f), TheText.Get(CGarages::MessageIDString));
|
||||
CFont::PrintString((SCREEN_WIDTH/ 2) + SCREEN_SCALE_X(2.0f), (SCREEN_HEIGHT / 2) + SCREEN_SCALE_Y(-84.0f), TheText.Get(MessageIDString));
|
||||
|
||||
CFont::SetColor(CRGBA(89, 115, 150, 255));
|
||||
CFont::PrintString((SCREEN_WIDTH / 2), (SCREEN_HEIGHT / 2) + SCREEN_SCALE_Y(-84.0f), TheText.Get(CGarages::MessageIDString));
|
||||
CFont::PrintString((SCREEN_WIDTH / 2), (SCREEN_HEIGHT / 2) + SCREEN_SCALE_Y(-84.0f), TheText.Get(MessageIDString));
|
||||
}
|
||||
else {
|
||||
CMessages::InsertNumberInString(TheText.Get(CGarages::MessageIDString), CGarages::MessageNumberInString, -1, -1, -1, -1, -1, gUString);
|
||||
CMessages::InsertNumberInString(TheText.Get(MessageIDString), MessageNumberInString, -1, -1, -1, -1, -1, gUString);
|
||||
|
||||
CFont::SetColor(CRGBA(0, 0, 0, 255));
|
||||
CFont::PrintString((SCREEN_WIDTH / 2) + SCREEN_SCALE_X(2.0f), (SCREEN_HEIGHT / 2) + SCREEN_SCALE_Y(-84.0f + 2.0 - 40.0f), gUString);
|
||||
@ -96,7 +96,7 @@ void CGarages::PrintMessages()
|
||||
}
|
||||
}
|
||||
else {
|
||||
CMessages::InsertNumberInString(TheText.Get(CGarages::MessageIDString), CGarages::MessageNumberInString2, -1, -1, -1, -1, -1, gUString);
|
||||
CMessages::InsertNumberInString(TheText.Get(MessageIDString), MessageNumberInString, MessageNumberInString2, -1, -1, -1, -1, gUString);
|
||||
|
||||
CFont::SetColor(CRGBA(0, 0, 0, 255));
|
||||
CFont::PrintString((SCREEN_WIDTH / 2) + SCREEN_SCALE_X(2.0f), (SCREEN_HEIGHT / 2) + SCREEN_SCALE_Y(-84.0f + 2.0 - 40.0f), gUString);
|
||||
|
40
src/control/PedPlacement.cpp
Normal file
40
src/control/PedPlacement.cpp
Normal file
@ -0,0 +1,40 @@
|
||||
#include "common.h"
|
||||
#include "patcher.h"
|
||||
#include "PedPlacement.h"
|
||||
#include "World.h"
|
||||
|
||||
void
|
||||
CPedPlacement::FindZCoorForPed(CVector* pos)
|
||||
{
|
||||
float zForPed;
|
||||
float startZ = pos->z - 100.0f;
|
||||
float foundColZ = -100.0f;
|
||||
float foundColZ2 = -100.0f;
|
||||
CColPoint foundCol;
|
||||
CEntity* foundEnt;
|
||||
|
||||
CVector vec(
|
||||
pos->x,
|
||||
pos->y,
|
||||
pos->z + 1.0f
|
||||
);
|
||||
|
||||
if (CWorld::ProcessVerticalLine(vec, startZ, foundCol, foundEnt, true, false, false, false, true, false, false))
|
||||
foundColZ = foundCol.point.z;
|
||||
|
||||
// Adjust coords and do a second test
|
||||
vec.x += 0.1f;
|
||||
vec.y += 0.1f;
|
||||
|
||||
if (CWorld::ProcessVerticalLine(vec, startZ, foundCol, foundEnt, true, false, false, false, true, false, false))
|
||||
foundColZ2 = foundCol.point.z;
|
||||
|
||||
zForPed = max(foundColZ, foundColZ2);
|
||||
|
||||
if (zForPed > -99.0f)
|
||||
pos->z = 1.04f + zForPed;
|
||||
}
|
||||
|
||||
STARTPATCHES
|
||||
InjectHook(0x4EE340, &CPedPlacement::FindZCoorForPed, PATCH_JUMP);
|
||||
ENDPATCHES
|
8
src/control/PedPlacement.h
Normal file
8
src/control/PedPlacement.h
Normal file
@ -0,0 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
class CVector;
|
||||
|
||||
class CPedPlacement {
|
||||
public:
|
||||
static void FindZCoorForPed(CVector* pos);
|
||||
};
|
@ -22,9 +22,9 @@ enum
|
||||
PEDTYPE_EMERGENCY,
|
||||
PEDTYPE_FIREMAN,
|
||||
PEDTYPE_CRIMINAL,
|
||||
PEDTYPE_SPECIAL,
|
||||
PEDTYPE_PROSTITUTE,
|
||||
PEDTYPE_UNUSED1,
|
||||
PEDTYPE_PROSTITUTE,
|
||||
PEDTYPE_SPECIAL,
|
||||
PEDTYPE_UNUSED2,
|
||||
|
||||
NUM_PEDTYPES
|
||||
|
@ -24,6 +24,8 @@
|
||||
#include "Timer.h"
|
||||
#include "Weather.h"
|
||||
#include "Zones.h"
|
||||
#include "Font.h"
|
||||
#include "Text.h"
|
||||
|
||||
uint8 &CReplay::Mode = *(uint8*)0x95CD5B;
|
||||
CAddressInReplayBuffer &CReplay::Record = *(CAddressInReplayBuffer*)0x942F7C;
|
||||
@ -451,7 +453,6 @@ WRAPPER bool CReplay::PlayBackThisFrameInterpolation(CAddressInReplayBuffer *buf
|
||||
WRAPPER void CReplay::FinishPlayback(void) { EAXJMP(0x595B20); }
|
||||
WRAPPER void CReplay::Shutdown(void) { EAXJMP(0x595BD0); }
|
||||
WRAPPER void CReplay::ProcessReplayCamera(void) { EAXJMP(0x595C40); }
|
||||
WRAPPER void CReplay::Display(void) { EAXJMP(0x595EE0); }
|
||||
|
||||
#if 0
|
||||
WRAPPER void CReplay::TriggerPlayback(uint8 cam_mode, float cam_x, float cam_y, float cam_z, bool load_scene) { EAXJMP(0x596030); }
|
||||
@ -732,6 +733,23 @@ WRAPPER bool CReplay::ShouldStandardCameraBeProcessed(void) { EAXJMP(0x597680);
|
||||
WRAPPER void CReplay::ProcessLookAroundCam(void) { EAXJMP(0x5976C0); }
|
||||
WRAPPER size_t CReplay::FindSizeOfPacket(uint8 type) { EAXJMP(0x597CC0); }
|
||||
|
||||
#if 0
|
||||
WRAPPER void CReplay::Display(void) { EAXJMP(0x595EE0); }
|
||||
#else
|
||||
void CReplay::Display()
|
||||
{
|
||||
if (CReplay::IsPlayingBack() && CTimer::GetFrameCounter() + 1 & 0x20) {
|
||||
CFont::SetPropOn();
|
||||
CFont::SetBackgroundOff();
|
||||
CFont::SetScale(SCREEN_SCALE_X(1.5f), SCREEN_SCALE_Y(1.5f));
|
||||
CFont::SetAlignment(ALIGN_LEFT);
|
||||
CFont::SetColor(CRGBA(255, 255, 200, 200));
|
||||
CFont::SetFontStyle(FONT_BANK);
|
||||
CFont::PrintString(SCREEN_SCALE_X(63.5f), SCREEN_SCALE_Y(30.0f), TheText.Get("REPLAY"));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
STARTPATCHES
|
||||
InjectHook(0x592FC0, PrintElementsInPtrList, PATCH_JUMP);
|
||||
InjectHook(0x592FE0, CReplay::Init, PATCH_JUMP);
|
||||
|
Reference in New Issue
Block a user