From 047fa20f28890176e0d86191b3a9fd459d967785 Mon Sep 17 00:00:00 2001 From: aap Date: Sun, 23 Jun 2019 01:01:21 +0200 Subject: fixed key binding, head shots, freezes --- src/Pad.cpp | 1 + src/Pad.h | 2 +- src/World.cpp | 2 +- src/entities/Ped.cpp | 34 +++++++++++++++------------------- src/entities/Physical.cpp | 2 +- src/modelinfo/PedModelInfo.h | 1 + 6 files changed, 20 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/Pad.cpp b/src/Pad.cpp index 5c151bf4..61b7ed06 100644 --- a/src/Pad.cpp +++ b/src/Pad.cpp @@ -2055,6 +2055,7 @@ STARTPATCHES InjectHook(0x494450, CPad::ResetCheats, PATCH_JUMP); InjectHook(0x4944B0, CPad::EditString, PATCH_JUMP); InjectHook(0x494690, CPad::EditCodesForControls, PATCH_JUMP); + //InjectHook(0x494E50, `global constructor keyed to'Pad.cpp, PATCH_JUMP); //InjectHook(0x494EB0, sub_494EB0, PATCH_JUMP); //InjectHook(0x494ED0, &CPad::~CPad, PATCH_JUMP); diff --git a/src/Pad.h b/src/Pad.h index 9180be26..e06aa9a6 100644 --- a/src/Pad.h +++ b/src/Pad.h @@ -292,7 +292,7 @@ public: // keyboard - inline bool GetCharJustDown(char c) { return !!(NewKeyState.VK_KEYS[c] && !OldKeyState.VK_KEYS[c]); } + inline bool GetCharJustDown(int32 c) { return !!(NewKeyState.VK_KEYS[c] && !OldKeyState.VK_KEYS[c]); } inline bool GetFJustDown(int32 n) { return !!(NewKeyState.F[n] && !OldKeyState.F[n]); } inline bool GetEscapeJustDown() { return !!(NewKeyState.ESC && !OldKeyState.ESC); } inline bool GetInsertJustDown() { return !!(NewKeyState.INS && !OldKeyState.INS); } diff --git a/src/World.cpp b/src/World.cpp index 1a715e0c..bc29a527 100644 --- a/src/World.cpp +++ b/src/World.cpp @@ -236,7 +236,7 @@ CWorld::ProcessLineOfSightSectorList(CPtrList &list, const CColLine &line, CColP if(((CPed*)e)->UseGroundColModel()) colmodel = &CTempColModels::ms_colModelPedGroundHit; else - colmodel = CModelInfo::GetModelInfo(e->GetModelIndex())->GetColModel(); + colmodel = ((CPedModelInfo*)CModelInfo::GetModelInfo(e->GetModelIndex()))->GetHitColModel(); }else colmodel = nil; }else if(e->bUsesCollision) diff --git a/src/entities/Ped.cpp b/src/entities/Ped.cpp index 35e8e957..f3e212d4 100644 --- a/src/entities/Ped.cpp +++ b/src/entities/Ped.cpp @@ -388,8 +388,7 @@ void CPed::RemoveBodyPart(PedNode nodeId, int8 unk) { RwFrame *frame; - RwFrame *fp; - RwV3d zero; + RwV3d pos; frame = GetNodeFrame(nodeId); if (frame) { @@ -398,20 +397,20 @@ CPed::RemoveBodyPart(PedNode nodeId, int8 unk) CPed::SpawnFlyingComponent(nodeId, unk); RecurseFrameChildrenVisibilityCB(frame, 0); - zero.x = 0.0f; - zero.z = 0.0f; - zero.y = 0.0f; - for (fp = RwFrameGetParent(frame); fp; fp = RwFrameGetParent(frame)) - RwV3dTransformPoints(&zero, &zero, 1, &fp->modelling); + pos.x = 0.0f; + pos.z = 0.0f; + pos.y = 0.0f; + for (frame = RwFrameGetParent(frame); frame; frame = RwFrameGetParent(frame)) + RwV3dTransformPoints(&pos, &pos, 1, RwFrameGetMatrix(frame)); if (CEntity::GetIsOnScreen()) { - CParticle::AddParticle(PARTICLE_TEST, zero, + CParticle::AddParticle(PARTICLE_TEST, pos, CVector(0.0f, 0.0f, 0.0f), nil, 0.2f, 0, 0, 0, 0); for (int i = 0; i < 16; i++) { CParticle::AddParticle(PARTICLE_BLOOD_SMALL, - zero, + pos, CVector(0.0f, 0.0f, 0.03f), nil, 0.0f, 0, 0, 0, 0); } @@ -642,10 +641,9 @@ CPed::Attack(void) CAnimBlendAssociation *weaponAnimAssoc; int32 weaponAnim; float animStart; - RwFrame *f; + RwFrame *frame; eWeaponType ourWeaponType; float weaponAnimTime; - RwFrame *i; eWeaponFire ourWeaponFire; float animEnd; CWeaponInfo *ourWeapon; @@ -718,14 +716,12 @@ CPed::Attack(void) firePos = GetMatrix() * firePos; } else if (ourWeaponType != WEAPONTYPE_UNARMED) { if (weaponAnimAssoc->animId == ANIM_KICK_FLOOR) - f = GetNodeFrame(PED_FOOTR); + frame = GetNodeFrame(PED_FOOTR); else - f = GetNodeFrame(PED_HANDR); + frame = GetNodeFrame(PED_HANDR); - while (f) { - RwV3dTransformPoints((RwV3d*)firePos, (RwV3d*)firePos, 1, &f->modelling); - f = RwFrameGetParent(f); - } + for (; frame; frame = RwFrameGetParent(frame)) + RwV3dTransformPoints((RwV3d*)firePos, (RwV3d*)firePos, 1, RwFrameGetMatrix(frame)); } else { firePos = GetMatrix() * firePos; } @@ -773,8 +769,8 @@ CPed::Attack(void) firePos = ourWeapon->m_vecFireOffset; if (weaponAnimTime > 1.0f && weaponAnimTime - weaponAnimAssoc->timeStep <= 1.0f && weaponAnimAssoc->IsRunning()) { - for (i = GetNodeFrame(PED_HANDR); i; i = RwFrameGetParent(i)) - RwV3dTransformPoints((RwV3d*)firePos, (RwV3d*)firePos, 1, &i->modelling); + for (frame = GetNodeFrame(PED_HANDR); frame; frame = RwFrameGetParent(frame)) + RwV3dTransformPoints((RwV3d*)firePos, (RwV3d*)firePos, 1, RwFrameGetMatrix(frame)); CVector gunshellPos( firePos.x - 0.6f * GetForward().x, diff --git a/src/entities/Physical.cpp b/src/entities/Physical.cpp index f2693a68..adc53525 100644 --- a/src/entities/Physical.cpp +++ b/src/entities/Physical.cpp @@ -1790,7 +1790,7 @@ CPhysical::ProcessCollision(void) if(IsPed() && (distSq >= sq(0.2f) || ped->IsPlayer())){ if(ped->IsPlayer()) - n = min(NUMSTEPS(0.2f), 2.0); + n = max(NUMSTEPS(0.2f), 2.0); else n = NUMSTEPS(0.3f); step = savedTimeStep / n; diff --git a/src/modelinfo/PedModelInfo.h b/src/modelinfo/PedModelInfo.h index d0b93323..04d1ba02 100644 --- a/src/modelinfo/PedModelInfo.h +++ b/src/modelinfo/PedModelInfo.h @@ -38,6 +38,7 @@ public: void SetLowDetailClump(RpClump*); void CreateHitColModel(void); + CColModel *GetHitColModel(void) { return m_hitColModel; } void DeleteRwObject_(void) { this->CPedModelInfo::DeleteRwObject(); } -- cgit v1.2.3