From f12e76fa135db3ca0a98c441cc3f5c0a4a14549d Mon Sep 17 00:00:00 2001
From: aap <aap@papnet.eu>
Date: Fri, 8 May 2020 20:58:40 +0200
Subject: more small fixes

---
 src/animation/AnimBlendAssocGroup.cpp  |  5 +++++
 src/animation/AnimBlendAssociation.cpp |  5 +++--
 src/animation/AnimBlendAssociation.h   |  2 +-
 src/animation/AnimBlendList.h          |  1 +
 src/animation/AnimBlendNode.cpp        |  4 ++--
 src/animation/AnimManager.cpp          |  8 ++++----
 src/animation/AnimManager.h            |  4 ++--
 src/core/Streaming.cpp                 | 23 +++++++++++++++--------
 src/core/config.h                      |  3 +++
 9 files changed, 36 insertions(+), 19 deletions(-)

(limited to 'src')

diff --git a/src/animation/AnimBlendAssocGroup.cpp b/src/animation/AnimBlendAssocGroup.cpp
index bdcca2f8..5a6d10b4 100644
--- a/src/animation/AnimBlendAssocGroup.cpp
+++ b/src/animation/AnimBlendAssocGroup.cpp
@@ -3,6 +3,7 @@
 #include "ctype.h"
 
 #include "General.h"
+#include "RwHelper.h"
 #include "ModelInfo.h"
 #include "AnimManager.h"
 #include "RpAnimBlend.h"
@@ -131,6 +132,10 @@ CAnimBlendAssocGroup::CreateAssociations(const char *name)
 		assert(model);
 		printf("Associated anim %s with model %s\n", anim->name, model->GetName());
 		RpClump *clump = (RpClump*)model->CreateInstance();
+#ifdef PED_SKIN
+		if(IsClumpSkinned(clump))
+			RpClumpForAllAtomics(clump, AtomicRemoveAnimFromSkinCB, nil);
+#endif
 		RpAnimBlendClumpInit(clump);
 		assocList[i].Init(clump, anim);
 		RpClumpDestroy(clump);
diff --git a/src/animation/AnimBlendAssociation.cpp b/src/animation/AnimBlendAssociation.cpp
index daca7d68..8c99b694 100644
--- a/src/animation/AnimBlendAssociation.cpp
+++ b/src/animation/AnimBlendAssociation.cpp
@@ -147,11 +147,11 @@ CAnimBlendAssociation::Start(float time)
 	SetCurrentTime(time);
 }
 
-void
+bool
 CAnimBlendAssociation::UpdateTime(float timeDelta, float relSpeed)
 {
 	if(!IsRunning())
-		return;
+		return true;
 
 	timeStep = (flags & ASSOC_MOVEMENT ? relSpeed*hierarchy->totalLength : speed) * timeDelta;
 	currentTime += timeStep;
@@ -174,6 +174,7 @@ CAnimBlendAssociation::UpdateTime(float timeDelta, float relSpeed)
 			}
 		}
 	}
+	return true;
 }
 
 // return whether we still exist after this function
diff --git a/src/animation/AnimBlendAssociation.h b/src/animation/AnimBlendAssociation.h
index d35db1db..f5070cda 100644
--- a/src/animation/AnimBlendAssociation.h
+++ b/src/animation/AnimBlendAssociation.h
@@ -75,7 +75,7 @@ public:
 	void SetCurrentTime(float time);
 	void SyncAnimation(CAnimBlendAssociation *other);
 	void Start(float time);
-	void UpdateTime(float timeDelta, float relSpeed);
+	bool UpdateTime(float timeDelta, float relSpeed);
 	bool UpdateBlend(float timeDelta);
 
 	void SetRun(void) { flags |= ASSOC_RUNNING; }
diff --git a/src/animation/AnimBlendList.h b/src/animation/AnimBlendList.h
index d4b9a64a..018b5988 100644
--- a/src/animation/AnimBlendList.h
+++ b/src/animation/AnimBlendList.h
@@ -23,5 +23,6 @@ public:
 			prev->next = next;
 		if(next)
 			next->prev = prev;
+		Init();
 	}
 };
diff --git a/src/animation/AnimBlendNode.cpp b/src/animation/AnimBlendNode.cpp
index 193e9176..df6cd1d5 100644
--- a/src/animation/AnimBlendNode.cpp
+++ b/src/animation/AnimBlendNode.cpp
@@ -6,8 +6,8 @@
 void 
 CAnimBlendNode::Init(void)
 {
-	frameA = 0;
-	frameB = 0;
+	frameA = -1;
+	frameB = -1;
 	remainingTime = 0.0f;
 	sequence = nil;
 	association = nil;
diff --git a/src/animation/AnimManager.cpp b/src/animation/AnimManager.cpp
index ebd2e1fb..f21b3fed 100644
--- a/src/animation/AnimManager.cpp
+++ b/src/animation/AnimManager.cpp
@@ -11,8 +11,8 @@
 #include "AnimBlendAssocGroup.h"
 #include "AnimManager.h"
 
-CAnimBlock CAnimManager::ms_aAnimBlocks[2];
-CAnimBlendHierarchy CAnimManager::ms_aAnimations[250];
+CAnimBlock CAnimManager::ms_aAnimBlocks[NUMANIMBLOCKS];
+CAnimBlendHierarchy CAnimManager::ms_aAnimations[NUMANIMATIONS];
 int32 CAnimManager::ms_numAnimBlocks;
 int32 CAnimManager::ms_numAnimations;
 CAnimBlendAssocGroup *CAnimManager::ms_aAnimAssocGroups;
@@ -750,8 +750,8 @@ CAnimManager::LoadAnimFiles(void)
 		CBaseModelInfo *mi = CModelInfo::GetModelInfo(ms_aAnimAssocDefinitions[i].modelIndex);
 		RpClump *clump = (RpClump*)mi->CreateInstance();
 		RpAnimBlendClumpInit(clump);
-		CAnimBlendAssocGroup *group = &CAnimManager::ms_aAnimAssocGroups[i];
-		const AnimAssocDefinition *def = &CAnimManager::ms_aAnimAssocDefinitions[i];
+		CAnimBlendAssocGroup *group = &ms_aAnimAssocGroups[i];
+		const AnimAssocDefinition *def = &ms_aAnimAssocDefinitions[i];
 		group->CreateAssociations(def->blockName, clump, def->animNames, def->numAnims);
 		for(j = 0; j < group->numAssociations; j++)
 			group->GetAnimation(j)->flags |= def->animDescs[j].flags;
diff --git a/src/animation/AnimManager.h b/src/animation/AnimManager.h
index 1b333b60..d27e4512 100644
--- a/src/animation/AnimManager.h
+++ b/src/animation/AnimManager.h
@@ -64,8 +64,8 @@ struct AnimAssocDefinition
 class CAnimManager
 {
 	static const AnimAssocDefinition ms_aAnimAssocDefinitions[NUM_ANIM_ASSOC_GROUPS];
-	static CAnimBlock ms_aAnimBlocks[2];
-	static CAnimBlendHierarchy ms_aAnimations[250];
+	static CAnimBlock ms_aAnimBlocks[NUMANIMBLOCKS];
+	static CAnimBlendHierarchy ms_aAnimations[NUMANIMATIONS];
 	static int32 ms_numAnimBlocks;
 	static int32 ms_numAnimations;
 	static CAnimBlendAssocGroup *ms_aAnimAssocGroups;
diff --git a/src/core/Streaming.cpp b/src/core/Streaming.cpp
index 5aa419b1..f24192ef 100644
--- a/src/core/Streaming.cpp
+++ b/src/core/Streaming.cpp
@@ -1493,12 +1493,14 @@ CStreaming::GetCdImageOffset(int32 lastPosn)
 }
 
 inline bool
-TxdAvailable(int32 txdId)
+ModelNotLoaded(int32 modelId)
 {
-	CStreamingInfo *si = &CStreaming::ms_aInfoForModel[txdId + STREAM_OFFSET_TXD];
-	return si->m_loadState == STREAMSTATE_LOADED || si->m_loadState == STREAMSTATE_READING;
+	CStreamingInfo *si = &CStreaming::ms_aInfoForModel[modelId];
+	return si->m_loadState != STREAMSTATE_LOADED && si->m_loadState != STREAMSTATE_READING;
 }
 
+inline bool TxdNotLoaded(int32 txdId) { return ModelNotLoaded(txdId + STREAM_OFFSET_TXD); }
+
 // Find stream id of next requested file in cdimage
 int32
 CStreaming::GetNextFileOnCd(int32 lastPosn, bool priority)
@@ -1523,10 +1525,15 @@ CStreaming::GetNextFileOnCd(int32 lastPosn, bool priority)
 			continue;
 
 		// request Txd if necessary
-		if(streamId < STREAM_OFFSET_TXD &&
-		   !TxdAvailable(CModelInfo::GetModelInfo(streamId)->GetTxdSlot())){
-			ReRequestTxd(CModelInfo::GetModelInfo(streamId)->GetTxdSlot());
-		}else if(ms_aInfoForModel[streamId].GetCdPosnAndSize(posn, size)){
+		if(streamId < STREAM_OFFSET_TXD){
+			int txdId = CModelInfo::GetModelInfo(streamId)->GetTxdSlot();
+			if(TxdNotLoaded(txdId)){
+				ReRequestTxd(txdId);
+				continue;
+			}
+		}
+
+		if(ms_aInfoForModel[streamId].GetCdPosnAndSize(posn, size)){
 			if(posn < posnFirst){
 				// find first requested file in image
 				streamIdFirst = streamId;
@@ -1624,7 +1631,7 @@ CStreaming::RequestModelStream(int32 ch)
 		if(streamId < STREAM_OFFSET_TXD){
 			if (havePed && CModelInfo::GetModelInfo(streamId)->GetModelType() == MITYPE_PED ||
 			    haveBigFile && CModelInfo::GetModelInfo(streamId)->GetModelType() == MITYPE_VEHICLE ||
-			   !TxdAvailable(CModelInfo::GetModelInfo(streamId)->GetTxdSlot()))
+			    TxdNotLoaded(CModelInfo::GetModelInfo(streamId)->GetTxdSlot()))
 				break;
 		}else{
 			if(haveBigFile && size > 200)
diff --git a/src/core/config.h b/src/core/config.h
index 7c1fab5b..79d9ab86 100644
--- a/src/core/config.h
+++ b/src/core/config.h
@@ -38,6 +38,9 @@ enum Config {
 	NUMAUDIOSCRIPTOBJECTS = 256,
 	NUMCUTSCENEOBJECTS = 50,
 
+	NUMANIMBLOCKS = 2,
+	NUMANIMATIONS = 250,
+
 	NUMTEMPOBJECTS = 30,
 
 	// Path data
-- 
cgit v1.2.3


From e917cd1f46471cc9be8da606ac03aa9ac3885b87 Mon Sep 17 00:00:00 2001
From: Sergeanur <s.anureev@yandex.ua>
Date: Sat, 9 May 2020 02:50:48 +0300
Subject: Fix corona scaling

---
 src/core/Cam.cpp      |  2 --
 src/core/Camera.h     |  2 ++
 src/render/Sprite.cpp | 12 ++++++++----
 3 files changed, 10 insertions(+), 6 deletions(-)

(limited to 'src')

diff --git a/src/core/Cam.cpp b/src/core/Cam.cpp
index 76d8d22b..3b11ec5f 100644
--- a/src/core/Cam.cpp
+++ b/src/core/Cam.cpp
@@ -25,8 +25,6 @@
 #include "Camera.h"
 #include "DMAudio.h"
 
-const float DefaultFOV = 70.0f;	// beta: 80.0f
-
 bool PrintDebugCode = false;
 int16 DebugCamMode;
 
diff --git a/src/core/Camera.h b/src/core/Camera.h
index 02122dfe..51138f99 100644
--- a/src/core/Camera.h
+++ b/src/core/Camera.h
@@ -40,6 +40,8 @@ enum
 #define DEFAULT_CAR_ZOOM_VALUE_2 (1.9f)
 #define DEFAULT_CAR_ZOOM_VALUE_3 (3.9f)
 
+const float DefaultFOV = 70.0f; // beta: 80.0f
+
 class CCam
 {
 public:
diff --git a/src/render/Sprite.cpp b/src/render/Sprite.cpp
index 30eaf840..1dd1aaab 100644
--- a/src/render/Sprite.cpp
+++ b/src/render/Sprite.cpp
@@ -29,13 +29,17 @@ CSprite::CalcScreenCoors(const RwV3d &in, RwV3d *out, float *outw, float *outh,
 	float recip = 1.0f/out->z;
 	out->x *= SCREEN_WIDTH * recip;
 	out->y *= SCREEN_HEIGHT * recip;
-	// What is this? size?
-	*outw = 70.0f/CDraw::GetFOV() * SCREEN_WIDTH * recip;
 #ifdef ASPECT_RATIO_SCALE
-	*outh = 70.0f/CDraw::GetFOV() / (DEFAULT_ASPECT_RATIO / SCREEN_ASPECT_RATIO) * SCREEN_HEIGHT * recip;
+	float fov = CDraw::ConvertFOV(DefaultFOV);
 #else
-	*outh = 70.0f/CDraw::GetFOV() * SCREEN_HEIGHT * recip;
+	const float fov = DefaultFOV;
 #endif
+	// this is used to scale correctly if you zoom in with sniper rifle
+	float fovScale = fov / CDraw::GetFOV();
+
+	*outw = fovScale * SCREEN_SCALE_AR(recip) * SCREEN_WIDTH;
+	*outh = fovScale * recip * SCREEN_HEIGHT;
+
 	return true;
 }
 
-- 
cgit v1.2.3


From e8c0619226a9da7ac40759b33df5d73d1f622c8e Mon Sep 17 00:00:00 2001
From: aap <aap@papnet.eu>
Date: Sat, 9 May 2020 09:50:00 +0200
Subject: named anim assoc flags

---
 src/animation/AnimBlendAssociation.h | 14 ++++-----
 src/animation/AnimManager.cpp        | 58 ++++++++++++++++++------------------
 src/peds/Ped.cpp                     | 20 ++++++-------
 src/peds/PlayerPed.cpp               |  2 +-
 src/weapons/BulletInfo.cpp           |  2 +-
 src/weapons/Weapon.cpp               |  2 +-
 6 files changed, 48 insertions(+), 50 deletions(-)

(limited to 'src')

diff --git a/src/animation/AnimBlendAssociation.h b/src/animation/AnimBlendAssociation.h
index 19ead49c..dd5b11b0 100644
--- a/src/animation/AnimBlendAssociation.h
+++ b/src/animation/AnimBlendAssociation.h
@@ -5,7 +5,6 @@
 #include "AnimBlendHierarchy.h"
 
 enum {
-	// TODO
 	ASSOC_RUNNING = 1,
 	ASSOC_REPEAT = 2,
 	ASSOC_DELETEFADEDOUT = 4,
@@ -13,13 +12,12 @@ enum {
 	ASSOC_PARTIAL = 0x10,
 	ASSOC_MOVEMENT = 0x20,	// ???
 	ASSOC_HAS_TRANSLATION = 0x40,
-	ASSOC_FLAG80 = 0x80, // used for footstep sound calculation
-	ASSOC_FLAG100 = 0x100,
-	ASSOC_FLAG200 = 0x200,
-	ASSOC_FLAG400 = 0x400,	// unused, blending it with move anims makes them stop. 0x800 in VC
-	ASSOC_FLAG800 = 0x800, // anims that we fall to front. 0x1000 in VC
-	ASSOC_HAS_X_TRANSLATION = 0x1000,
-	// 0x2000 is vehicle anims in VC
+	ASSOC_WALK = 0x80,	// for CPed::PlayFootSteps(void)
+	ASSOC_FLAG_XPRESS = 0x100,	// only used by xpress scratch, see CPed::Chat(void)
+	ASSOC_NOWALK = 0x200,	// see CPed::PlayFootSteps(void)
+	ASSOC_BLOCK = 0x400,	// unused in assoc description, blocks other anims from being played
+	ASSOC_FRONTAL = 0x800, // anims that we fall to front
+	ASSOC_HAS_X_TRANSLATION = 0x1000,	// for 2d velocity extraction
 };
 
 // Anim hierarchy associated with a clump
diff --git a/src/animation/AnimManager.cpp b/src/animation/AnimManager.cpp
index 8f011339..687e4439 100644
--- a/src/animation/AnimManager.cpp
+++ b/src/animation/AnimManager.cpp
@@ -22,9 +22,9 @@ CAnimBlendAssocGroup *CAnimManager::ms_aAnimAssocGroups;
 CLinkList<CAnimBlendHierarchy*> CAnimManager::ms_animCache;
 
 AnimAssocDesc aStdAnimDescs[] = {
-	{ ANIM_WALK, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_FLAG80 },
-	{ ANIM_RUN, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_FLAG80 },
-	{ ANIM_SPRINT, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_FLAG80 },
+	{ ANIM_WALK, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
+	{ ANIM_RUN, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
+	{ ANIM_SPRINT, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
 	{ ANIM_IDLE_STANCE, ASSOC_REPEAT },
 	{ ANIM_WALK_START, ASSOC_HAS_TRANSLATION },
 	{ ANIM_RUN_STOP, ASSOC_DELETEFADEDOUT | ASSOC_HAS_TRANSLATION },
@@ -35,26 +35,26 @@ AnimAssocDesc aStdAnimDescs[] = {
 	{ ANIM_IDLE_ARMED, ASSOC_REPEAT | ASSOC_PARTIAL },
 	{ ANIM_IDLE_CHAT, ASSOC_REPEAT | ASSOC_PARTIAL },
 	{ ANIM_IDLE_TAXI, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
-	{ ANIM_KO_SHOT_FRONT1, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FLAG800  },
-	{ ANIM_KO_SHOT_FRONT2, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FLAG800  },
-	{ ANIM_KO_SHOT_FRONT3, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FLAG800  },
-	{ ANIM_KO_SHOT_FRONT4, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FLAG800  },
-	{ ANIM_KO_SHOT_FACE, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FLAG800  },
+	{ ANIM_KO_SHOT_FRONT1, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL  },
+	{ ANIM_KO_SHOT_FRONT2, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL  },
+	{ ANIM_KO_SHOT_FRONT3, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL  },
+	{ ANIM_KO_SHOT_FRONT4, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL  },
+	{ ANIM_KO_SHOT_FACE, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL  },
 	{ ANIM_KO_SHOT_STOM, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
-	{ ANIM_KO_SHOT_ARML, ASSOC_PARTIAL | ASSOC_FLAG800  },
-	{ ANIM_KO_SHOT_ARMR, ASSOC_PARTIAL | ASSOC_FLAG800  },
+	{ ANIM_KO_SHOT_ARML, ASSOC_PARTIAL | ASSOC_FRONTAL  },
+	{ ANIM_KO_SHOT_ARMR, ASSOC_PARTIAL | ASSOC_FRONTAL  },
 	{ ANIM_KO_SHOT_LEGL, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
 	{ ANIM_KO_SHOT_LEGR, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
-	{ ANIM_KD_LEFT, ASSOC_PARTIAL | ASSOC_FLAG800  },
-	{ ANIM_KD_RIGHT, ASSOC_PARTIAL | ASSOC_FLAG800  },
+	{ ANIM_KD_LEFT, ASSOC_PARTIAL | ASSOC_FRONTAL  },
+	{ ANIM_KD_RIGHT, ASSOC_PARTIAL | ASSOC_FRONTAL  },
 	{ ANIM_KO_SKID_FRONT, ASSOC_PARTIAL },
 	{ ANIM_KO_SPIN_R, ASSOC_PARTIAL },
-	{ ANIM_KO_SKID_BACK, ASSOC_PARTIAL | ASSOC_FLAG800  },
+	{ ANIM_KO_SKID_BACK, ASSOC_PARTIAL | ASSOC_FRONTAL  },
 	{ ANIM_KO_SPIN_L, ASSOC_PARTIAL },
-	{ ANIM_SHOT_FRONT_PARTIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_FLAG200  },
-	{ ANIM_SHOT_LEFT_PARTIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_FLAG200  },
-	{ ANIM_SHOT_BACK_PARTIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_FLAG200  },
-	{ ANIM_SHOT_RIGHT_PARTIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_FLAG200  },
+	{ ANIM_SHOT_FRONT_PARTIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK  },
+	{ ANIM_SHOT_LEFT_PARTIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK  },
+	{ ANIM_SHOT_BACK_PARTIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK  },
+	{ ANIM_SHOT_RIGHT_PARTIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK  },
 	{ ANIM_HIT_FRONT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
 	{ ANIM_HIT_LEFT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 	{ ANIM_HIT_BACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
@@ -65,22 +65,22 @@ AnimAssocDesc aStdAnimDescs[] = {
 	{ ANIM_HIT_HEAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
 	{ ANIM_HIT_WALK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
 	{ ANIM_HIT_WALL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
-	{ ANIM_FLOOR_HIT_F, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_FLAG800  },
+	{ ANIM_FLOOR_HIT_F, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_FRONTAL  },
 	{ ANIM_HIT_BEHIND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 	{ ANIM_PUNCH_R, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 	{ ANIM_KICK_FLOOR, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 	{ ANIM_WEAPON_BAT_H, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 	{ ANIM_WEAPON_BAT_V, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
-	{ ANIM_WEAPON_HGUN_BODY, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_FLAG200  },
+	{ ANIM_WEAPON_HGUN_BODY, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK  },
 	{ ANIM_WEAPON_AK_BODY, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 	{ ANIM_WEAPON_PUMP, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 	{ ANIM_WEAPON_SNIPER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 	{ ANIM_WEAPON_THROW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 	{ ANIM_WEAPON_THROWU, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 	{ ANIM_WEAPON_START_THROW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
-	{ ANIM_BOMBER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_FLAG200  },
-	{ ANIM_HGUN_RELOAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_FLAG200  },
-	{ ANIM_AK_RELOAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_FLAG200  },
+	{ ANIM_BOMBER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK  },
+	{ ANIM_HGUN_RELOAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK  },
+	{ ANIM_AK_RELOAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK  },
 	{ ANIM_FPS_PUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 	{ ANIM_FPS_BAT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 	{ ANIM_FPS_UZI, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
@@ -99,7 +99,7 @@ AnimAssocDesc aStdAnimDescs[] = {
 	{ ANIM_FIGHT_PUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 	{ ANIM_FIGHT_ROUNDHOUSE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
 	{ ANIM_FIGHT_LONGKICK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
-	{ ANIM_FIGHT_PPUNCH, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_FLAG200  },
+	{ ANIM_FIGHT_PPUNCH, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_NOWALK  },
 	{ ANIM_CAR_JACKED_RHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
 	{ ANIM_CAR_LJACKED_RHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
 	{ ANIM_CAR_JACKED_LHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
@@ -178,8 +178,8 @@ AnimAssocDesc aStdAnimDescs[] = {
 	{ ANIM_FALL_LAND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
 	{ ANIM_FALL_COLLAPSE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
 	{ ANIM_EV_STEP, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
-	{ ANIM_EV_DIVE, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FLAG800  },
-	{ ANIM_XPRESS_SCRATCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_FLAG100  },
+	{ ANIM_EV_DIVE, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL  },
+	{ ANIM_XPRESS_SCRATCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_FLAG_XPRESS  },
 	{ ANIM_ROAD_CROSS, ASSOC_REPEAT | ASSOC_PARTIAL },
 	{ ANIM_TURN_180, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 	{ ANIM_ARREST_GUN, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
@@ -191,15 +191,15 @@ AnimAssocDesc aStdAnimDescs[] = {
 	{ ANIM_WEAPON_THROWU, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 	{ ANIM_HANDSUP, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
 	{ ANIM_HANDSCOWER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
-	{ ANIM_FUCKU, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_FLAG200  },
+	{ ANIM_FUCKU, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK  },
 	{ ANIM_PHONE_IN, ASSOC_PARTIAL },
 	{ ANIM_PHONE_OUT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 	{ ANIM_PHONE_TALK, ASSOC_REPEAT | ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
 };
 AnimAssocDesc aStdAnimDescsSide[] = {
-	{ ANIM_WALK, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_FLAG80 | ASSOC_HAS_X_TRANSLATION },
-	{ ANIM_RUN, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_FLAG80 | ASSOC_HAS_X_TRANSLATION },
-	{ ANIM_SPRINT, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_FLAG80 | ASSOC_HAS_X_TRANSLATION },
+	{ ANIM_WALK, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK | ASSOC_HAS_X_TRANSLATION },
+	{ ANIM_RUN, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK | ASSOC_HAS_X_TRANSLATION },
+	{ ANIM_SPRINT, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK | ASSOC_HAS_X_TRANSLATION },
 	{ ANIM_IDLE_STANCE, ASSOC_REPEAT },
 	{ ANIM_WALK_START, ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION },
 };
diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp
index 3b95dfdd..0e740768 100644
--- a/src/peds/Ped.cpp
+++ b/src/peds/Ped.cpp
@@ -2096,10 +2096,10 @@ CPed::PlayFootSteps(void)
 	float walkRunAssocBlend = 0.0f, idleAssocBlend = 0.0f;
 
 	for (; assoc; assoc = RpAnimBlendGetNextAssociation(assoc)) {
-		if (assoc->flags & ASSOC_FLAG80) {
+		if (assoc->flags & ASSOC_WALK) {
 			walkRunAssoc = assoc;
 			walkRunAssocBlend += assoc->blendAmount;
-		} else if ((assoc->flags & ASSOC_FLAG200) == 0) {
+		} else if ((assoc->flags & ASSOC_NOWALK) == 0) {
 			idleAssocBlend += assoc->blendAmount;
 		}
 	}
@@ -3287,7 +3287,7 @@ CPed::Chat(void)
 		} else
 			Say(SOUND_PED_CHAT);
 
-	} else if (!RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FLAG100)) {
+	} else if (!RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FLAG_XPRESS)) {
 
 		if (CGeneral::GetRandomNumber() < 20) {
 			CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_XPRESS_SCRATCH, 4.0f);
@@ -3743,7 +3743,7 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
 	bool detectDieAnim = true;
 	if (m_nPedState == PED_FALL || m_nPedState == PED_GETUP) {
 		if (!IsPedHeadAbovePos(-0.3f)) {
-			if (RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FLAG800))
+			if (RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FRONTAL))
 				dieAnim = ANIM_FLOOR_HIT_F;
 			else
 				dieAnim = ANIM_FLOOR_HIT;
@@ -3765,7 +3765,7 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
 					if (IsPedHeadAbovePos(-0.3f)) {
 						dieAnim = NUM_ANIMS;
 					} else {
-						if (RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FLAG800))
+						if (RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FRONTAL))
 							dieAnim = ANIM_FLOOR_HIT_F;
 						else
 							dieAnim = ANIM_FLOOR_HIT;
@@ -3805,7 +3805,7 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
 						if (IsPedHeadAbovePos(-0.3f)) {
 							dieAnim = NUM_ANIMS;
 						} else {
-							if (RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FLAG800))
+							if (RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FRONTAL))
 								dieAnim = ANIM_FLOOR_HIT_F;
 							else
 								dieAnim = ANIM_FLOOR_HIT;
@@ -4273,7 +4273,7 @@ CPed::SetGetUp(void)
 			animAssoc->flags |= ASSOC_DELETEFADEDOUT;
 		}
 
-		if (RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FLAG800))
+		if (RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FRONTAL))
 			animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_GETUP_FRONT, 1000.0f);
 		else
 			animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_GETUP1, 1000.0f);
@@ -16298,7 +16298,7 @@ CPed::StartFightDefend(uint8 direction, uint8 hitLevel, uint8 unk)
 		if (CGame::nastyGame) {
 			if (hitLevel == HITLEVEL_GROUND) {
 				CAnimBlendAssociation *floorHitAssoc;
-				if (RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FLAG800)) {
+				if (RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FRONTAL)) {
 					floorHitAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT_F, 8.0f);
 				} else {
 					floorHitAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, tFightMoves[FIGHTMOVE_HITONFLOOR].animId, 8.0f);
@@ -16320,7 +16320,7 @@ CPed::StartFightDefend(uint8 direction, uint8 hitLevel, uint8 unk)
 		}
 	} else if (m_nPedState == PED_FALL) {
 		if (hitLevel == HITLEVEL_GROUND && !IsPedHeadAbovePos(-0.3f)) {
-			CAnimBlendAssociation *floorHitAssoc = RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FLAG800) ?
+			CAnimBlendAssociation *floorHitAssoc = RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FRONTAL) ?
 				CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT_F, 8.0f) :
 				CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT, 8.0f);
 			if (floorHitAssoc) {
@@ -17145,7 +17145,7 @@ CPed::SetMoveAnim(void)
 	else
 		animGroupToUse = m_animGroup;
 
-	CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FLAG400);
+	CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_BLOCK);
 	if (!animAssoc) {
 		CAnimBlendAssociation *fightIdleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_FIGHT_IDLE);
 		animAssoc = fightIdleAssoc;
diff --git a/src/peds/PlayerPed.cpp b/src/peds/PlayerPed.cpp
index 6d0d394d..c6c4824b 100644
--- a/src/peds/PlayerPed.cpp
+++ b/src/peds/PlayerPed.cpp
@@ -1327,7 +1327,7 @@ CPlayerPed::ProcessControl(void)
 		case PED_ATTACK:
 		case PED_FIGHT:
 		case PED_AIM_GUN:
-			if (!RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FLAG400)) {
+			if (!RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_BLOCK)) {
 				if (TheCamera.Cams[0].Using3rdPersonMouseCam()) {
 					if (padUsed)
 						PlayerControl1stPersonRunAround(padUsed);
diff --git a/src/weapons/BulletInfo.cpp b/src/weapons/BulletInfo.cpp
index 83b6471e..92d98a50 100644
--- a/src/weapons/BulletInfo.cpp
+++ b/src/weapons/BulletInfo.cpp
@@ -122,7 +122,7 @@ void CBulletInfo::Update(void)
 					}
 					if (pPed->GetPedState() == PED_DEAD) {
 						CAnimBlendAssociation* pAnim;
-						if (RpAnimBlendClumpGetFirstAssociation(pPed->GetClump(), ASSOC_FLAG800))
+						if (RpAnimBlendClumpGetFirstAssociation(pPed->GetClump(), ASSOC_FRONTAL))
 							pAnim = CAnimManager::BlendAnimation(pPed->GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT_F, 8.0f);
 						else
 							pAnim = CAnimManager::BlendAnimation(pPed->GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT, 8.0f);
diff --git a/src/weapons/Weapon.cpp b/src/weapons/Weapon.cpp
index 17ce64c0..aef53094 100644
--- a/src/weapons/Weapon.cpp
+++ b/src/weapons/Weapon.cpp
@@ -973,7 +973,7 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim,
 					if ( victimPed->Dead() )
 					{
 						CAnimBlendAssociation *asoc;
-						if ( RpAnimBlendClumpGetFirstAssociation(victimPed->GetClump(), ASSOC_FLAG800) )
+						if ( RpAnimBlendClumpGetFirstAssociation(victimPed->GetClump(), ASSOC_FRONTAL) )
 							asoc = CAnimManager::BlendAnimation(victimPed->GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT_F, 8.0f);
 						else
 							asoc = CAnimManager::BlendAnimation(victimPed->GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT,   8.0f);
-- 
cgit v1.2.3


From b80c4bae6be24ff7f261238a36e4c0c5519bef5f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?eray=20or=C3=A7unus?= <erayorcunus@gmail.com>
Date: Sat, 9 May 2020 13:43:08 +0300
Subject: Menu map fixes and resizable window on GLFW

---
 src/core/Frontend.cpp  | 37 ++++++++++++++++++++++++++++++++-----
 src/core/MenuScreens.h |  2 ++
 src/core/Radar.cpp     |  4 ++--
 src/skel/glfw/glfw.cpp |  8 +++++---
 4 files changed, 41 insertions(+), 10 deletions(-)

(limited to 'src')

diff --git a/src/core/Frontend.cpp b/src/core/Frontend.cpp
index e2c2a453..06b9a151 100644
--- a/src/core/Frontend.cpp
+++ b/src/core/Frontend.cpp
@@ -901,6 +901,25 @@ CMenuManager::Draw()
 	bool foundTheHoveringItem = false;
 	wchar unicodeTemp[64];
 
+#ifdef MENU_MAP
+	if (m_nCurrScreen == MENUPAGE_MAP) {
+		// Back button
+		wchar *backTx = TheText.Get("FEDS_TB");
+		CFont::SetDropShadowPosition(1);
+		CFont::SetDropColor(CRGBA(0, 0, 0, 255));
+		CFont::PrintString(MENU_X(60.0f), SCREEN_SCALE_FROM_BOTTOM(120.0f), backTx);
+		CFont::SetDropShadowPosition(0);
+		if (!CheckHover(MENU_X(30.0f), MENU_X(30.0f) + CFont::GetStringWidth(backTx), SCREEN_SCALE_FROM_BOTTOM(125.0f), SCREEN_SCALE_FROM_BOTTOM(105.0f))) {
+			m_nHoverOption = HOVEROPTION_NOT_HOVERING;
+			m_nCurrOption = m_nPrevOption = 0;
+		} else {
+			m_nHoverOption = HOVEROPTION_RANDOM_ITEM;
+			m_nCurrOption = m_nPrevOption = 1;
+		}
+		return;
+	}
+#endif
+
 	for (int i = 0; i < NUM_MENUROWS; ++i) {
 		if (aScreens[m_nCurrScreen].m_aEntries[i].m_Action != MENUACTION_LABEL && aScreens[m_nCurrScreen].m_aEntries[i].m_EntryName[0] != '\0') {
 			wchar *rightText = nil;
@@ -5381,13 +5400,13 @@ CMenuManager::PrintController(void)
 
 #define ZOOM(x, y, in) \
 	do { \
-		if(fMapSize > SCREEN_WIDTH * 2 && in) \
+		if(fMapSize > SCREEN_HEIGHT * 3.0f && in) \
 			break; \
 		float z2 = in? 1.1f : 1.f/1.1f; \
 		fMapCenterX += (x - fMapCenterX) * (1.0f - z2); \
 		fMapCenterY += (y - fMapCenterY) * (1.0f - z2); \
 		\
-		if (fMapSize < SCREEN_WIDTH / 3 && !in) \
+		if (fMapSize < SCREEN_HEIGHT / 2 && !in) \
 			break; \
 		\
 		fMapSize *= z2; \
@@ -5400,10 +5419,18 @@ CMenuManager::PrintMap(void)
 	bMenuMapActive = true;
 	CRadar::InitFrontEndMap();
 
+	// Just entered to map
 	if (!bMapLoaded) {
-		fMapCenterX = SCREEN_WIDTH / 2;
-		fMapCenterY = SCREEN_HEIGHT / 3;
-		fMapSize = SCREEN_HEIGHT / CDraw::GetAspectRatio();
+		fMapSize = SCREEN_HEIGHT * 2.0f;
+		fMapCenterX = 0.0f;
+		fMapCenterY = 0.0f;
+		CVector2D radarSpacePlayer;
+		CVector2D screenSpacePlayer;
+		CRadar::TransformRealWorldPointToRadarSpace(radarSpacePlayer, CVector2D(FindPlayerCoors()));
+		CRadar::TransformRadarPointToScreenSpace(screenSpacePlayer, radarSpacePlayer);
+
+		fMapCenterX = (-screenSpacePlayer.x) + SCREEN_WIDTH / 2;
+		fMapCenterY = (-screenSpacePlayer.y) + SCREEN_HEIGHT / 2;
 		bMapMouseShownOnce = false;
 		bMapLoaded = true;
 
diff --git a/src/core/MenuScreens.h b/src/core/MenuScreens.h
index 339479b8..6c2ebdb8 100644
--- a/src/core/MenuScreens.h
+++ b/src/core/MenuScreens.h
@@ -459,6 +459,8 @@ const CMenuScreen aScreens[] = {
 #ifdef MENU_MAP
    // MENUPAGE_MAP = 59
    { "FEG_MAP", 1, MENUPAGE_NONE, MENUPAGE_NONE, 5, 2,
+		MENUACTION_UNK110,	"", SAVESLOT_NONE, MENUPAGE_NONE, // to prevent cross/enter to go back
+		MENUACTION_CHANGEMENU,	"FEDS_TB", SAVESLOT_NONE, MENUPAGE_NONE,
    },
 #endif
 };
diff --git a/src/core/Radar.cpp b/src/core/Radar.cpp
index 7e3d0083..9406f1bd 100644
--- a/src/core/Radar.cpp
+++ b/src/core/Radar.cpp
@@ -1435,9 +1435,9 @@ CRadar::DrawYouAreHereSprite(float x, float y)
 
 	if (show) {
 		float left = x - SCREEN_SCALE_X(12.0f);
-		float top = y - SCREEN_SCALE_Y(2.0f);
+		float top = y;
 		float right = SCREEN_SCALE_X(12.0) + x;
-		float bottom = y - SCREEN_SCALE_Y(26.0f);
+		float bottom = y - SCREEN_SCALE_Y(24.0f);
 		CentreSprite.Draw(CRect(left, top, right, bottom), CRGBA(255, 255, 255, 255));
 	}
 	MapLegendList[MapLegendCounter++] = RADAR_SPRITE_CENTRE;
diff --git a/src/skel/glfw/glfw.cpp b/src/skel/glfw/glfw.cpp
index 34f24c5d..3ae363c7 100644
--- a/src/skel/glfw/glfw.cpp
+++ b/src/skel/glfw/glfw.cpp
@@ -1024,12 +1024,14 @@ void resizeCB(GLFWwindow* window, int width, int height) {
 	if (RwInitialised && height > 0 && width > 0) {
 		RwRect r;
 
-		// TODO support resizing with mouse. Now enabling this makes weird things to trails and CameraSize messing with sizes
+		// TODO fix artifacts of resizing with mouse
+		RsGlobal.maximumHeight = height;
+		RsGlobal.maximumWidth = width;
 
 		r.x = 0;
 		r.y = 0;
-		r.w = RsGlobal.maximumWidth;
-		r.h = RsGlobal.maximumHeight;
+		r.w = width;
+		r.h = height;
 
 		RsEventHandler(rsCAMERASIZE, &r);
 	}
-- 
cgit v1.2.3


From 989ded6052f6bd1c5d518e65768cce85a92fc20b Mon Sep 17 00:00:00 2001
From: aap <aap@papnet.eu>
Date: Sat, 9 May 2020 13:00:39 +0200
Subject: removed cutscene heads

---
 src/animation/AnimManager.cpp |   2 +-
 src/animation/AnimManager.h   |   2 +-
 src/animation/CutsceneMgr.cpp |  17 +---
 src/animation/CutsceneMgr.h   |   1 -
 src/control/Replay.cpp        |   2 +-
 src/control/Replay.h          |   2 +-
 src/control/Script.cpp        |  17 +---
 src/core/Pools.h              |   4 +-
 src/objects/CutsceneHead.cpp  | 186 ------------------------------------------
 src/objects/CutsceneHead.h    |  28 -------
 10 files changed, 9 insertions(+), 252 deletions(-)
 delete mode 100644 src/objects/CutsceneHead.cpp
 delete mode 100644 src/objects/CutsceneHead.h

(limited to 'src')

diff --git a/src/animation/AnimManager.cpp b/src/animation/AnimManager.cpp
index 687e4439..3dafe3da 100644
--- a/src/animation/AnimManager.cpp
+++ b/src/animation/AnimManager.cpp
@@ -188,7 +188,7 @@ AnimAssocDesc aStdAnimDescs[] = {
 	{ ANIM_DUCK_DOWN, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
 	{ ANIM_DUCK_LOW, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
 	{ ANIM_RBLOCK_CSHOOT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
-	{ ANIM_WEAPON_THROWU, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+	{ ANIM_WEAPON_THROWU2, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 	{ ANIM_HANDSUP, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
 	{ ANIM_HANDSCOWER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
 	{ ANIM_FUCKU, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK  },
diff --git a/src/animation/AnimManager.h b/src/animation/AnimManager.h
index 5ec72d80..7cfafcd9 100644
--- a/src/animation/AnimManager.h
+++ b/src/animation/AnimManager.h
@@ -22,7 +22,7 @@ enum AssocGroupId
 	ASSOCGRP_BUSYWOMAN,
 	ASSOCGRP_SEXYWOMAN,
 	ASSOCGRP_OLDWOMAN,
-	ASSOCGRP_FARWOMAN,
+	ASSOCGRP_FATWOMAN,
 	ASSOCGRP_PANICCHUNKY,
 	ASSOCGRP_PLAYERBACK,
 	ASSOCGRP_PLAYERLEFT,
diff --git a/src/animation/CutsceneMgr.cpp b/src/animation/CutsceneMgr.cpp
index 3cd66697..035c2b49 100644
--- a/src/animation/CutsceneMgr.cpp
+++ b/src/animation/CutsceneMgr.cpp
@@ -16,7 +16,6 @@
 #include "World.h"
 #include "PlayerPed.h"
 #include "Wanted.h"
-#include "CutsceneHead.h"
 #include "RpAnimBlend.h"
 #include "ModelIndices.h"
 #include "TempColModels.h"
@@ -239,16 +238,6 @@ CCutsceneMgr::LoadCutsceneData(const char *szCutsceneName)
 	CWorld::Players[CWorld::PlayerInFocus].MakePlayerSafe(true);
 }
 
-void
-CCutsceneMgr::SetHeadAnim(const char *animName, CObject *pObject)
-{
-	CCutsceneHead *pCutsceneHead = (CCutsceneHead*)pObject;
-	char szAnim[CUTSCENENAMESIZE * 2];
-
-	sprintf(szAnim, "%s_%s", ms_cutsceneName, animName);
-	pCutsceneHead->PlayAnimation(szAnim);
-}
-
 void
 CCutsceneMgr::FinishCutscene()
 {
@@ -307,11 +296,7 @@ CCutsceneMgr::SetCutsceneAnim(const char *animName, CObject *pObject)
 CCutsceneHead *
 CCutsceneMgr::AddCutsceneHead(CObject *pObject, int modelId)
 {
-	CCutsceneHead *pHead = new CCutsceneHead(pObject);
-	pHead->SetModelIndex(modelId);
-	CWorld::Add(pHead);
-	ms_pCutsceneObjects[ms_numCutsceneObjs++] = pHead;
-	return pHead;
+	return nil;
 }
 
 CCutsceneObject *
diff --git a/src/animation/CutsceneMgr.h b/src/animation/CutsceneMgr.h
index bfdcdb57..18eff0e5 100644
--- a/src/animation/CutsceneMgr.h
+++ b/src/animation/CutsceneMgr.h
@@ -41,7 +41,6 @@ public:
 	static void Shutdown(void);
 	static void LoadCutsceneData(const char *szCutsceneName);
 	static void FinishCutscene(void);
-	static void SetHeadAnim(const char *animName, CObject *pObject);
 	static void SetupCutsceneToStart(void);
 	static void SetCutsceneAnim(const char *animName, CObject *pObject);
 	static CCutsceneHead *AddCutsceneHead(CObject *pObject, int modelId);
diff --git a/src/control/Replay.cpp b/src/control/Replay.cpp
index 92cadab7..ab187c10 100644
--- a/src/control/Replay.cpp
+++ b/src/control/Replay.cpp
@@ -47,7 +47,7 @@ CAutomobile *CReplay::pBuf1;
 uint8 *CReplay::pBuf2;
 CPlayerPed *CReplay::pBuf3;
 uint8 *CReplay::pBuf4;
-CCutsceneHead *CReplay::pBuf5;
+CCutsceneObject *CReplay::pBuf5;
 uint8 *CReplay::pBuf6;
 CPtrNode *CReplay::pBuf7;
 uint8 *CReplay::pBuf8;
diff --git a/src/control/Replay.h b/src/control/Replay.h
index bf70a28a..6a07e593 100644
--- a/src/control/Replay.h
+++ b/src/control/Replay.h
@@ -213,7 +213,7 @@ private:
 	static uint8* pBuf2;
 	static CPlayerPed* pBuf3;
 	static uint8* pBuf4;
-	static CCutsceneHead* pBuf5;
+	static CCutsceneObject* pBuf5;
 	static uint8* pBuf6;
 	static CPtrNode* pBuf7;
 	static uint8* pBuf8;
diff --git a/src/control/Script.cpp b/src/control/Script.cpp
index b6729486..badcebf2 100644
--- a/src/control/Script.cpp
+++ b/src/control/Script.cpp
@@ -6175,25 +6175,12 @@ int8 CRunningScript::ProcessCommands700To799(int32 command)
 	}
 	case COMMAND_CREATE_CUTSCENE_HEAD:
 	{
-		CollectParameters(&m_nIp, 2);
-		CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
-		assert(pObject);
-		CCutsceneHead* pCutHead = CCutsceneMgr::AddCutsceneHead(pObject, ScriptParams[1]);
-		ScriptParams[0] = CPools::GetObjectPool()->GetIndex(pCutHead);
-		StoreParameters(&m_nIp, 1);
+		assert(0);
 		return 0;
 	}
 	case COMMAND_SET_CUTSCENE_HEAD_ANIM:
 	{
-		CollectParameters(&m_nIp, 1);
-		CObject* pCutHead = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
-		assert(pCutHead);
-		char name[KEY_LENGTH_IN_SCRIPT];
-		strncpy(name, (const char*)&CTheScripts::ScriptSpace[m_nIp], KEY_LENGTH_IN_SCRIPT);
-		m_nIp += KEY_LENGTH_IN_SCRIPT;
-		CTimer::Stop();
-		CCutsceneMgr::SetHeadAnim(name, pCutHead);
-		CTimer::Update();
+		assert(0);
 		return 0;
 	}
 	case COMMAND_SIN:
diff --git a/src/core/Pools.h b/src/core/Pools.h
index b0ba6598..2f0537ff 100644
--- a/src/core/Pools.h
+++ b/src/core/Pools.h
@@ -4,7 +4,7 @@
 #include "Lists.h"
 #include "Treadable.h"
 #include "Object.h"
-#include "CutsceneHead.h"
+#include "CutsceneObject.h"
 #include "PlayerPed.h"
 #include "Automobile.h"
 #include "DummyPed.h"
@@ -16,7 +16,7 @@ typedef CPool<CPed,CPlayerPed> CPedPool;
 typedef CPool<CVehicle,CAutomobile> CVehiclePool;
 typedef CPool<CBuilding> CBuildingPool;
 typedef CPool<CTreadable> CTreadablePool;
-typedef CPool<CObject, CCutsceneHead> CObjectPool;
+typedef CPool<CObject, CCutsceneObject> CObjectPool;
 typedef CPool<CDummy, CDummyPed> CDummyPool;
 typedef CPool<cAudioScriptObject> CAudioScriptObjectPool;
 
diff --git a/src/objects/CutsceneHead.cpp b/src/objects/CutsceneHead.cpp
deleted file mode 100644
index 0938960e..00000000
--- a/src/objects/CutsceneHead.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-#include "common.h"
-#include <rpskin.h>
-
-#include "main.h"
-#include "RwHelper.h"
-#include "RpAnimBlend.h"
-#include "AnimBlendClumpData.h"
-#include "Bones.h"
-#include "Directory.h"
-#include "CutsceneMgr.h"
-#include "Streaming.h"
-#include "CutsceneHead.h"
-#include "CdStream.h"
-
-
-CCutsceneHead::CCutsceneHead(CObject *obj)
-{
-	RpAtomic *atm;
-
-	assert(RwObjectGetType(obj->m_rwObject) == rpCLUMP);
-#ifdef PED_SKIN
-	unk1 = 0;
-	bIsSkinned = false;
-	m_parentObject = (CCutsceneObject*)obj;
-	// Hide original head
-	if(IsClumpSkinned(obj->GetClump())){
-		m_parentObject->SetRenderHead(false);
-		bIsSkinned = true;
-	}else
-#endif
-	{
-		m_pHeadNode = RpAnimBlendClumpFindFrame((RpClump*)obj->m_rwObject, "Shead")->frame;
-		atm = (RpAtomic*)GetFirstObject(m_pHeadNode);
-		if(atm){
-			assert(RwObjectGetType((RwObject*)atm) == rpATOMIC);
-			RpAtomicSetFlags(atm, RpAtomicGetFlags(atm) & ~rpATOMICRENDER);
-		}
-	}
-}
-
-void
-CCutsceneHead::CreateRwObject(void)
-{
-	RpAtomic *atm;
-
-	CEntity::CreateRwObject();
-	assert(RwObjectGetType(m_rwObject) == rpCLUMP);
-	atm = GetFirstAtomic((RpClump*)m_rwObject);
-	RpSkinAtomicSetHAnimHierarchy(atm, RpHAnimFrameGetHierarchy(GetFirstChild(RpClumpGetFrame((RpClump*)m_rwObject))));
-}
-
-void
-CCutsceneHead::DeleteRwObject(void)
-{
-	CEntity::DeleteRwObject();
-}
-
-void
-CCutsceneHead::ProcessControl(void)
-{
-	RpAtomic *atm;
-	RpHAnimHierarchy *hier;
-
-	// android/xbox calls is at the end
-	CPhysical::ProcessControl();
-
-#ifdef PED_SKIN
-	if(bIsSkinned){
-		UpdateRpHAnim();
-		UpdateRwFrame();
-
-		RpHAnimHierarchy *hier = GetAnimHierarchyFromSkinClump(m_parentObject->GetClump());
-		int idx = RpHAnimIDGetIndex(hier, BONE_head);
-		RwMatrix *mat = &RpHAnimHierarchyGetMatrixArray(hier)[idx];
-		if(RwV3dLength(&mat->pos) > 100.0f){
-			m_matrix.SetRotateY(PI/2);
-			m_matrix = CMatrix(mat) * m_matrix;
-		}
-	}else
-#endif
-	{
-		m_matrix.SetRotateY(PI/2);
-		m_matrix = CMatrix(RwFrameGetLTM(m_pHeadNode)) * m_matrix;
-		UpdateRwFrame();	// android/xbox don't call this
-	}
-
-	assert(RwObjectGetType(m_rwObject) == rpCLUMP);
-	atm = GetFirstAtomic((RpClump*)m_rwObject);
-	hier = RpSkinAtomicGetHAnimHierarchy(atm);
-	RpHAnimHierarchyAddAnimTime(hier, CTimer::GetTimeStepNonClipped()/50.0f);
-}
-
-void
-CCutsceneHead::Render(void)
-{
-	RpAtomic *atm;
-
-#ifdef PED_SKIN
-	if(bIsSkinned){
-		RpHAnimHierarchy *hier = GetAnimHierarchyFromSkinClump(m_parentObject->GetClump());
-		RpHAnimHierarchyUpdateMatrices(hier);
-		int idx = RpHAnimIDGetIndex(hier, BONE_head);
-		RwMatrix *mat = &RpHAnimHierarchyGetMatrixArray(hier)[idx];
-		if(RwV3dLength(&mat->pos) > 100.0f){
-			m_matrix.SetRotateY(PI/2);
-			m_matrix = CMatrix(mat) * m_matrix;
-		}
-		RenderLimb(BONE_Lhand);
-		RenderLimb(BONE_Rhand);
-	}else
-#endif
-	{
-		m_matrix.SetRotateY(PI/2);
-		m_matrix = CMatrix(RwFrameGetLTM(m_pHeadNode)) * m_matrix;
-	}
-
-	UpdateRwFrame();
-
-	assert(RwObjectGetType(m_rwObject) == rpCLUMP);
-	atm = GetFirstAtomic((RpClump*)m_rwObject);
-	RpHAnimHierarchyUpdateMatrices(RpSkinAtomicGetHAnimHierarchy(atm));
-
-	CObject::Render();
-}
-
-#ifdef PED_SKIN
-void
-CCutsceneHead::RenderLimb(int32 bone)
-{
-	RpAtomic *atomic;
-	RpHAnimHierarchy *hier = GetAnimHierarchyFromSkinClump(m_parentObject->GetClump());
-	int idx = RpHAnimIDGetIndex(hier, bone);
-	RwMatrix *mats = RpHAnimHierarchyGetMatrixArray(hier);
-	CPedModelInfo *mi = (CPedModelInfo *)CModelInfo::GetModelInfo(GetModelIndex());
-	switch(bone){
-	case BONE_Lhand:
-		atomic = mi->getLeftHand();
-		break;
-	case BONE_Rhand:
-		atomic = mi->getRightHand();
-		break;
-	default:
-		return;
-	}
-	if(atomic){
-		RwFrame *frame = RpAtomicGetFrame(atomic);
-		RwMatrixTransform(RwFrameGetMatrix(frame), &mats[idx], rwCOMBINEREPLACE);
-		RwFrameUpdateObjects(frame);
-		RpAtomicRender(atomic);
-	}
-}
-#endif
-
-void
-CCutsceneHead::PlayAnimation(const char *animName)
-{
-	RpAtomic *atm;
-	RpHAnimHierarchy *hier;
-	RpHAnimAnimation *anim;
-	uint32 offset, size;
-	RwStream *stream;
-
-	assert(RwObjectGetType(m_rwObject) == rpCLUMP);
-	atm = GetFirstAtomic((RpClump*)m_rwObject);
-	hier = RpSkinAtomicGetHAnimHierarchy(atm);
-
-	sprintf(gString, "%s.anm", animName);
-
-	if(CCutsceneMgr::ms_pCutsceneDir->FindItem(gString, offset, size)){
-		stream = RwStreamOpen(rwSTREAMFILENAME, rwSTREAMREAD, "ANIM\\CUTS.IMG");
-		assert(stream);
-
-		CStreaming::MakeSpaceFor(size * CDSTREAM_SECTOR_SIZE);
-		CStreaming::ImGonnaUseStreamingMemory();
-
-		RwStreamSkip(stream, offset*2048);
-		if(RwStreamFindChunk(stream, rwID_HANIMANIMATION, nil, nil)){
-			anim = RpHAnimAnimationStreamRead(stream);
-			RpHAnimHierarchySetCurrentAnim(hier, anim);
-		}
-
-		CStreaming::IHaveUsedStreamingMemory();
-
-		RwStreamClose(stream, nil);
-	}
-}
diff --git a/src/objects/CutsceneHead.h b/src/objects/CutsceneHead.h
deleted file mode 100644
index 0a70353d..00000000
--- a/src/objects/CutsceneHead.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#pragma once
-
-#include "CutsceneObject.h"
-
-class CCutsceneHead : public CCutsceneObject
-{
-public:
-	RwFrame *m_pHeadNode;
-#ifdef PED_SKIN
-	int32 unk1;
-	CCutsceneObject *m_parentObject;
-	int32 unk2;
-	int32 bIsSkinned;
-#endif
-
-	CCutsceneHead(CObject *obj);
-
-	void CreateRwObject(void);
-	void DeleteRwObject(void);
-	void ProcessControl(void);
-	void Render(void);
-	void RenderLimb(int32 bone);
-
-	void PlayAnimation(const char *animName);
-};
-#ifndef PED_SKIN
-static_assert(sizeof(CCutsceneHead) == 0x19C, "CCutsceneHead: error");
-#endif
-- 
cgit v1.2.3


From 97d5698e0c669fd98911991b2ce3042fce376f06 Mon Sep 17 00:00:00 2001
From: aap <aap@papnet.eu>
Date: Sat, 9 May 2020 17:05:26 +0200
Subject: peds starting to work

---
 src/animation/AnimManager.cpp  | 40 +++++++++-------------
 src/animation/AnimationId.h    | 14 ++++----
 src/animation/Bones.cpp        | 73 ++++++++++++++++++++++------------------
 src/animation/Bones.h          | 38 ++++++++++++---------
 src/audio/AudioManager.cpp     | 39 +++++++++++++---------
 src/control/CarCtrl.cpp        |  2 +-
 src/control/SceneEdit.cpp      |  4 +--
 src/control/Script.cpp         |  8 ++---
 src/core/EventList.cpp         |  2 --
 src/core/FileLoader.cpp        |  9 ++---
 src/core/Pad.cpp               |  4 +--
 src/core/config.h              |  4 +--
 src/modelinfo/ModelIndices.h   |  9 +++++
 src/modelinfo/PedModelInfo.cpp | 20 ++++++-----
 src/modelinfo/PedModelInfo.h   | 14 ++++++--
 src/objects/CutsceneObject.cpp | 44 ------------------------
 src/objects/CutsceneObject.h   | 17 ----------
 src/peds/Ped.cpp               | 76 ++----------------------------------------
 src/peds/PedIK.cpp             | 11 ++++--
 src/peds/PedStats.h            |  5 +++
 20 files changed, 171 insertions(+), 262 deletions(-)

(limited to 'src')

diff --git a/src/animation/AnimManager.cpp b/src/animation/AnimManager.cpp
index 3dafe3da..f6d934be 100644
--- a/src/animation/AnimManager.cpp
+++ b/src/animation/AnimManager.cpp
@@ -81,13 +81,13 @@ AnimAssocDesc aStdAnimDescs[] = {
 	{ ANIM_BOMBER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK  },
 	{ ANIM_HGUN_RELOAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK  },
 	{ ANIM_AK_RELOAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK  },
-	{ ANIM_FPS_PUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
-	{ ANIM_FPS_BAT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
-	{ ANIM_FPS_UZI, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
-	{ ANIM_FPS_PUMP, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
-	{ ANIM_FPS_AK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
-	{ ANIM_FPS_M16, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
-	{ ANIM_FPS_ROCKET, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+//	{ ANIM_FPS_PUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+//	{ ANIM_FPS_BAT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+//	{ ANIM_FPS_UZI, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+//	{ ANIM_FPS_PUMP, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+//	{ ANIM_FPS_AK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+//	{ ANIM_FPS_M16, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+//	{ ANIM_FPS_ROCKET, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 	{ ANIM_FIGHT_IDLE, ASSOC_REPEAT },
 	{ ANIM_FIGHT2_IDLE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
 	{ ANIM_FIGHT_SH_F, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
@@ -263,13 +263,13 @@ char const *aStdAnimations[] = {
 	"bomber",
 	"WEAPON_hgun_rload",
 	"WEAPON_AK_rload",
-	"FPS_PUNCH",
-	"FPS_BAT",
-	"FPS_UZI",
-	"FPS_PUMP",
-	"FPS_AK",
-	"FPS_M16",
-	"FPS_ROCKET",
+//	"FPS_PUNCH",
+//	"FPS_BAT",
+//	"FPS_UZI",
+//	"FPS_PUMP",
+//	"FPS_AK",
+//	"FPS_M16",
+//	"FPS_ROCKET",
 	"FIGHTIDLE",
 	"FIGHT2IDLE",
 	"FIGHTsh_F",
@@ -825,7 +825,8 @@ CAnimManager::BlendAnimation(RpClump *clump, AssocGroupId groupId, AnimationId a
 void
 CAnimManager::LoadAnimFiles(void)
 {
-	LoadAnimFile("ANIM\\PED.IFP");
+//	LoadAnimFile("ANIM\\PED.IFP");
+	LoadAnimFile("ANIM\\PED_MIAMI.IFP");
 	ms_aAnimAssocGroups = new CAnimBlendAssocGroup[NUM_ANIM_ASSOC_GROUPS];
 	CreateAnimAssocGroups();
 }
@@ -986,15 +987,6 @@ CAnimManager::LoadAnimFile(RwStream *stream, bool compress, char (*somename)[32]
 					kf->deltaTime = fbuf[10];	// absolute time here
 				}
 			}
-
-/*
-			// convert absolute time to deltas
-			for(l = seq->numFrames-1; l > 0; l--){
-				KeyFrame *kf1 = seq->GetKeyFrame(l);
-				KeyFrame *kf2 = seq->GetKeyFrame(l-1);
-				kf1->deltaTime -= kf2->deltaTime;
-			}
-*/
 		}
 
 		hier->RemoveQuaternionFlips();
diff --git a/src/animation/AnimationId.h b/src/animation/AnimationId.h
index 82fed8bd..37979ae0 100644
--- a/src/animation/AnimationId.h
+++ b/src/animation/AnimationId.h
@@ -61,13 +61,13 @@ enum AnimationId
 	ANIM_BOMBER,
 	ANIM_HGUN_RELOAD,
 	ANIM_AK_RELOAD,
-	ANIM_FPS_PUNCH,
-	ANIM_FPS_BAT,
-	ANIM_FPS_UZI,
-	ANIM_FPS_PUMP,
-	ANIM_FPS_AK,
-	ANIM_FPS_M16,
-	ANIM_FPS_ROCKET,
+//	ANIM_FPS_PUNCH,
+//	ANIM_FPS_BAT,
+//	ANIM_FPS_UZI,
+//	ANIM_FPS_PUMP,
+//	ANIM_FPS_AK,
+//	ANIM_FPS_M16,
+//	ANIM_FPS_ROCKET,
 	ANIM_FIGHT_IDLE,
 	ANIM_FIGHT2_IDLE,
 	ANIM_FIGHT_SH_F,
diff --git a/src/animation/Bones.cpp b/src/animation/Bones.cpp
index 1608449d..6c9b162a 100644
--- a/src/animation/Bones.cpp
+++ b/src/animation/Bones.cpp
@@ -2,26 +2,29 @@
 #include "PedModelInfo.h"
 #include "Bones.h"
 
-#ifdef PED_SKIN
-
 int
 ConvertPedNode2BoneTag(int node)
 {
 	switch(node){
-	case PED_TORSO:	return BONE_waist;
-	case PED_MID:	return BONE_torso;	// this is what Xbox/Mobile use
-	//		return BONE_mid;	// this is what PS2/PC use
-	case PED_HEAD:		return BONE_head;
-	case PED_UPPERARML:	return BONE_upperarml;
-	case PED_UPPERARMR:	return BONE_upperarmr;
-	case PED_HANDL:		return BONE_Lhand;
-	case PED_HANDR:		return BONE_Rhand;
-	case PED_UPPERLEGL:	return BONE_upperlegl;
-	case PED_UPPERLEGR:	return BONE_upperlegr;
-	case PED_FOOTL:		return BONE_footl;
-	case PED_FOOTR:		return BONE_footr;
-	case PED_LOWERLEGR:	return BONE_lowerlegl;
+	case PED_MID:	return BONE_spine1;
+	case PED_HEAD:	return BONE_head;
+	case PED_UPPERARML:	return BONE_l_upperarm;
+	case PED_UPPERARMR:	return BONE_r_upperarm;
+	case PED_HANDL:	return BONE_l_hand;
+	case PED_HANDR:	return BONE_r_hand;
+	case PED_UPPERLEGL:	return BONE_l_thigh;
+	case PED_UPPERLEGR:	return BONE_r_thigh;
+	case PED_FOOTL:	return BONE_l_foot;
+	case PED_FOOTR:	return BONE_r_foot;
+	case PED_LOWERLEGR:	return BONE_r_calf;
+	case PED_LOWERLEGL:	return BONE_l_calf;
+	case PED_FOREARML:	return BONE_l_forearm;
+	case PED_FOREARMR:	return BONE_r_forearm;
+	case PED_CLAVICLEL:	return BONE_l_clavicle;
+	case PED_CLAVICLER:	return BONE_r_clavicle;
+	case PED_NECK:	return BONE_neck;
 	}
+	assert(0 && "this node has no bone");
 	return -1;
 }
 
@@ -29,24 +32,28 @@ const char*
 ConvertBoneTag2BoneName(int tag)
 {
 	switch(tag){
-	case BONE_waist:	return "Swaist";
-	case BONE_upperlegr:	return "Supperlegr";
-	case BONE_lowerlegr:	return "Slowerlegr";
-	case BONE_footr:	return "Sfootr";
-	case BONE_upperlegl:	return "Supperlegl";
-	case BONE_lowerlegl:	return "Slowerlegl";
-	case BONE_footl:	return "Sfootl";
-	case BONE_mid:	return "Smid";
-	case BONE_torso:	return "Storso";
-	case BONE_head:	return "Shead";
-	case BONE_upperarmr:	return "Supperarmr";
-	case BONE_lowerarmr:	return "Slowerarmr";
-	case BONE_Rhand:	return "SRhand";
-	case BONE_upperarml:	return "Supperarml";
-	case BONE_lowerarml:	return "Slowerarml";
-	case BONE_Lhand:	return "SLhand";
+	case BONE_root:	return "Root";
+	case BONE_pelvis:	return "Pelvis";
+	case BONE_spine:	return "Spine";
+	case BONE_spine1:	return "Spine1";
+	case BONE_neck:	return "Neck";
+	case BONE_head:	return "Head";
+	case BONE_l_clavicle:	return "Bip01 R Clavicle";
+	case BONE_l_upperarm:	return "R UpperArm";
+	case BONE_l_forearm:	return "R Forearm";
+	case BONE_l_hand:	return "R Hand";
+	case BONE_l_finger:	return "R Fingers";
+	case BONE_r_clavicle:	return "Bip01 L Clavicle";
+	case BONE_r_upperarm:	return "L UpperArm";
+	case BONE_r_forearm:	return "L Forearm";
+	case BONE_r_hand:	return "L Hand";
+	case BONE_r_finger:	return "L Fingers";
+	case BONE_l_thigh:	return "L Thigh";
+	case BONE_l_calf:	return "L Calf";
+	case BONE_l_foot:	return "L Foot";
+	case BONE_r_thigh:	return "R Thigh";
+	case BONE_r_calf:	return "R Calf";
+	case BONE_r_foot:	return "R Foot";
 	}
 	return nil;
 }
-
-#endif
diff --git a/src/animation/Bones.h b/src/animation/Bones.h
index 38d91ba3..e133fd7f 100644
--- a/src/animation/Bones.h
+++ b/src/animation/Bones.h
@@ -2,22 +2,28 @@
 
 enum BoneTag
 {
-	BONE_waist,
-	BONE_upperlegr,
-	BONE_lowerlegr,
-	BONE_footr,
-	BONE_upperlegl,
-	BONE_lowerlegl,
-	BONE_footl,
-	BONE_mid,
-	BONE_torso,
-	BONE_head,
-	BONE_upperarmr,
-	BONE_lowerarmr,
-	BONE_Rhand,
-	BONE_upperarml,
-	BONE_lowerarml,
-	BONE_Lhand,
+	BONE_root = 0,
+	BONE_pelvis = 1,
+	BONE_spine = 2,
+	BONE_spine1 = 3,
+	BONE_neck = 4,
+	BONE_head = 5,
+	BONE_l_clavicle = 31,
+	BONE_l_upperarm = 32,
+	BONE_l_forearm = 33,
+	BONE_l_hand = 34,
+	BONE_l_finger = 35,
+	BONE_r_clavicle = 21,
+	BONE_r_upperarm = 22,
+	BONE_r_forearm = 23,
+	BONE_r_hand = 24,
+	BONE_r_finger = 25,
+	BONE_l_thigh = 41,
+	BONE_l_calf = 42,
+	BONE_l_foot = 43,
+	BONE_r_thigh = 51,
+	BONE_r_calf = 52,
+	BONE_r_foot = 53,
 };
 
 int ConvertPedNode2BoneTag(int node);
diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp
index f2babf75..f82020bd 100644
--- a/src/audio/AudioManager.cpp
+++ b/src/audio/AudioManager.cpp
@@ -1357,8 +1357,9 @@ cAudioManager::GetBlackProjectMaleTalkSfx(int16 sound, int32 model)
 		return GetGenericMaleTalkSfx(sound);
 	}
 
-	if (model == MI_P_MAN2)
-		sfx += (SFX_BLACK_PROJECT_MALE_VOICE_2_DRIVER_ABUSE_1 - SFX_BLACK_PROJECT_MALE_VOICE_1_DRIVER_ABUSE_1);
+// TODO(MIAMI): just making this compile
+//	if (model == MI_P_MAN2)
+//		sfx += (SFX_BLACK_PROJECT_MALE_VOICE_2_DRIVER_ABUSE_1 - SFX_BLACK_PROJECT_MALE_VOICE_1_DRIVER_ABUSE_1);
 	return sfx;
 }
 
@@ -2188,8 +2189,9 @@ cAudioManager::GetBusinessMaleYoungTalkSfx(int16 sound, int32 model)
 		return GetGenericMaleTalkSfx(sound);
 	}
 
-	if (model == MI_B_MAN3)
-		sfx += (SFX_BUSINESS_MALE_YOUNG_VOICE_2_DRIVER_ABUSE_1 - SFX_BUSINESS_MALE_YOUNG_VOICE_1_DRIVER_ABUSE_1);
+// TODO(MIAMI): just making this compile
+//	if (model == MI_B_MAN3)
+//		sfx += (SFX_BUSINESS_MALE_YOUNG_VOICE_2_DRIVER_ABUSE_1 - SFX_BUSINESS_MALE_YOUNG_VOICE_1_DRIVER_ABUSE_1);
 	return sfx;
 }
 
@@ -2265,8 +2267,9 @@ cAudioManager::GetWhiteBusinessFemaleTalkSfx(int16 sound, int32 model)
 		return GetGenericFemaleTalkSfx(sound);
 	}
 
-	if (model == MI_B_WOM2)
-		sfx += (SFX_WHITE_BUSINESS_FEMALE_VOICE_2_DRIVER_ABUSE_1 - SFX_WHITE_BUSINESS_FEMALE_VOICE_1_DRIVER_ABUSE_1);
+// TODO(MIAMI): just making this compile
+//	if (model == MI_B_WOM2)
+//		sfx += (SFX_WHITE_BUSINESS_FEMALE_VOICE_2_DRIVER_ABUSE_1 - SFX_WHITE_BUSINESS_FEMALE_VOICE_1_DRIVER_ABUSE_1);
 	return sfx;
 }
 
@@ -2451,8 +2454,9 @@ cAudioManager::GetFanMaleTalkSfx(int16 sound, int32 model)
 		return GetGenericMaleTalkSfx(sound);
 	}
 
-	if (model == MI_FAN_MAN2)
-		sfx += (SFX_FOOTBALL_MALE_VOICE_2_DRIVER_ABUSE_1 - SFX_FOOTBALL_MALE_VOICE_1_DRIVER_ABUSE_1);
+// TODO(MIAMI): just making this compile
+//	if (model == MI_FAN_MAN2)
+//		sfx += (SFX_FOOTBALL_MALE_VOICE_2_DRIVER_ABUSE_1 - SFX_FOOTBALL_MALE_VOICE_1_DRIVER_ABUSE_1);
 	return sfx;
 }
 
@@ -2631,11 +2635,12 @@ cAudioManager::GetShopperFemaleTalkSfx(int16 sound, int32 model)
 		return GetGenericFemaleTalkSfx(sound);
 	}
 
-	if (model == MI_SHOPPER2) {
-		sfx += (SFX_SHOPPER_VOICE_2_DRIVER_ABUSE_1 - SFX_SHOPPER_VOICE_1_DRIVER_ABUSE_1);
-	} else if (model == MI_SHOPPER3) {
-		sfx += (SFX_SHOPPER_VOICE_3_DRIVER_ABUSE_1 - SFX_SHOPPER_VOICE_1_DRIVER_ABUSE_1);
-	}
+// TODO(MIAMI): just making this compile
+//	if (model == MI_SHOPPER2) {
+//		sfx += (SFX_SHOPPER_VOICE_2_DRIVER_ABUSE_1 - SFX_SHOPPER_VOICE_1_DRIVER_ABUSE_1);
+//	} else if (model == MI_SHOPPER3) {
+//		sfx += (SFX_SHOPPER_VOICE_3_DRIVER_ABUSE_1 - SFX_SHOPPER_VOICE_1_DRIVER_ABUSE_1);
+//	}
 	return sfx;
 }
 
@@ -3044,6 +3049,8 @@ cAudioManager::GetPedCommentSfx(CPed *ped, int32 sound)
 		return GetNormalMaleTalkSfx(sound);
 	case MI_TAXI_D:
 		return GetTaxiDriverTalkSfx(sound);
+// TODO(MIAMI): just making this compile
+/*
 	case MI_PIMP:
 		return GetPimpTalkSfx(sound);
 	case MI_GANG01:
@@ -3173,6 +3180,7 @@ cAudioManager::GetPedCommentSfx(CPed *ped, int32 sound)
 		return GetStudentFemaleTalkSfx(sound);
 	case MI_CAS_MAN:
 		return GetCasualMaleOldTalkSfx(sound);
+*/
 	default:
 		return GetGenericMaleTalkSfx(sound);
 	}
@@ -6303,8 +6311,9 @@ cAudioManager::ProcessPed(CPhysical *ped)
 	// params.m_bDistanceCalculated = false;
 	params.m_pPed = (CPed *)ped;
 	params.m_fDistance = GetDistanceSquared(m_sQueueSample.m_vecPos);
-	if (ped->GetModelIndex() == MI_FATMALE02)
-		ProcessPedHeadphones(&params);
+// TODO(MIAMI): just making this compile
+//	if (ped->GetModelIndex() == MI_FATMALE02)
+//		ProcessPedHeadphones(&params);
 	ProcessPedOneShots(&params);
 }
 
diff --git a/src/control/CarCtrl.cpp b/src/control/CarCtrl.cpp
index 8be39a86..8d850087 100644
--- a/src/control/CarCtrl.cpp
+++ b/src/control/CarCtrl.cpp
@@ -825,7 +825,7 @@ int32
 CCarCtrl::ChooseGangCarModel(int32 gang)
 {
 	if (CStreaming::HasModelLoaded(MI_GANG01 + 2 * gang) &&
-		CStreaming::HasModelLoaded(MI_GANG02 + 2 * gang))
+		CStreaming::HasModelLoaded(MI_GANG01+1 + 2 * gang))
 		return CGangs::GetGangVehicleModel(gang);
 	return -1;
 }
diff --git a/src/control/SceneEdit.cpp b/src/control/SceneEdit.cpp
index c8b4242e..bdb93f33 100644
--- a/src/control/SceneEdit.cpp
+++ b/src/control/SceneEdit.cpp
@@ -76,7 +76,7 @@ static int32 NextValidModelId(int32 mi, int32 step)
 	int32 i = mi;
 	while (result == -1) {
 		i += step;
-		if (i < 0 || i > 5500) {
+		if (i < 0 || i > MODELINFOSIZE) {
 			step = -step;
 			continue;
 		}
@@ -86,7 +86,7 @@ static int32 NextValidModelId(int32 mi, int32 step)
 			continue;
 		if (pInfo->GetModelType() == MITYPE_PED
 #ifdef FIX_BUGS
-			&& !(i >= MI_SPECIAL01 && i <= MI_SPECIAL04)
+			&& !(i >= MI_SPECIAL01 && i <= MI_SPECIAL21)
 #endif
 			|| pInfo->GetModelType() == MITYPE_VEHICLE &&
 #ifdef FIX_BUGS
diff --git a/src/control/Script.cpp b/src/control/Script.cpp
index badcebf2..e4a8e411 100644
--- a/src/control/Script.cpp
+++ b/src/control/Script.cpp
@@ -5903,8 +5903,8 @@ int8 CRunningScript::ProcessCommands700To799(int32 command)
 				continue;
 			if (pPed->bFadeOut)
 				continue;
-			if (pPed->GetModelIndex() == MI_SCUM_WOM || pPed->GetModelIndex() == MI_SCUM_MAN)
-				continue;
+//			if (pPed->GetModelIndex() == MI_SCUM_WOM || pPed->GetModelIndex() == MI_SCUM_MAN)
+//				continue;
 			if (!ThisIsAValidRandomPed(pPed->m_nPedType))
 				continue;
 			if (pPed->bIsLeader || pPed->m_leader)
@@ -5952,8 +5952,8 @@ int8 CRunningScript::ProcessCommands700To799(int32 command)
 				continue;
 			if (pPed->bFadeOut)
 				continue;
-			if (pPed->GetModelIndex() == MI_SCUM_WOM || pPed->GetModelIndex() == MI_SCUM_MAN)
-				continue;
+//			if (pPed->GetModelIndex() == MI_SCUM_WOM || pPed->GetModelIndex() == MI_SCUM_MAN)
+//				continue;
 			if (!ThisIsAValidRandomPed(pPed->m_nPedType))
 				continue;
 			if (pPed->bIsLeader || pPed->m_leader)
diff --git a/src/core/EventList.cpp b/src/core/EventList.cpp
index 675040ea..c3508a51 100644
--- a/src/core/EventList.cpp
+++ b/src/core/EventList.cpp
@@ -67,8 +67,6 @@ CEventList::RegisterEvent(eEventType type, eEventEntity entityType, CEntity *ent
 	switch(entityType){
 	case EVENT_ENTITY_PED:
 		ref = CPools::GetPedRef((CPed*)ent);
-		if(ent->GetModelIndex() >= MI_GANG01 && ent->GetModelIndex() <= MI_CRIMINAL02)
-			copsDontCare = true;
 		break;
 	case EVENT_ENTITY_VEHICLE:
 		ref = CPools::GetVehicleRef((CVehicle*)ent);
diff --git a/src/core/FileLoader.cpp b/src/core/FileLoader.cpp
index 07e2eee7..6a434bdd 100644
--- a/src/core/FileLoader.cpp
+++ b/src/core/FileLoader.cpp
@@ -861,15 +861,16 @@ CFileLoader::LoadPedObject(const char *line)
 {
 	int id;
 	char model[24], txd[24];
-	char pedType[24], pedStats[24], animGroup[24];
+	char pedType[24], pedStats[24], animGroup[24], animFile[16];
 	int carsCanDrive;
 	CPedModelInfo *mi;
 	int animGroupId;
+	int radio1, radio2;
 
-	if(sscanf(line, "%d %s %s %s %s %s %x",
+	sscanf(line, "%d %s %s %s %s %s %x %s %d %d",
 	          &id, model, txd,
-	          pedType, pedStats, animGroup, &carsCanDrive) != 7)
-		return;
+	          pedType, pedStats, animGroup, &carsCanDrive,
+		  animFile, &radio1, &radio2);
 
 	mi = CModelInfo::AddPedModel(id);
 	mi->SetName(model);
diff --git a/src/core/Pad.cpp b/src/core/Pad.cpp
index da86d15e..b996dc28 100644
--- a/src/core/Pad.cpp
+++ b/src/core/Pad.cpp
@@ -140,9 +140,9 @@ void ChangePlayerCheat()
 		do
 		{
 			do
-				modelId = CGeneral::GetRandomNumberInRange(0, MI_CAS_WOM+1);
+				modelId = CGeneral::GetRandomNumberInRange(0, MI_WFYG2+1);
 			while (!CModelInfo::GetModelInfo(modelId));
-		} while (modelId >= MI_SPECIAL01 && modelId <= MI_SPECIAL04 || modelId == MI_TAXI_D);
+		} while (modelId == MI_TAXI_D);
 
 		uint8 flags = CStreaming::ms_aInfoForModel[modelId].m_flags;
 		ped->DeleteRwObject();
diff --git a/src/core/config.h b/src/core/config.h
index 29a73f33..2ded57bf 100644
--- a/src/core/config.h
+++ b/src/core/config.h
@@ -108,8 +108,8 @@ enum Config {
 
 	NUMPEDROUTES = 200,
 	NUMPHONES = 50,
-	NUMPEDGROUPS = 31,
-	NUMMODELSPERPEDGROUP = 8,	// TODO(MIAMI): 16 once we have peds
+	NUMPEDGROUPS = 67,
+	NUMMODELSPERPEDGROUP = 16,
 	NUMSHOTINFOS = 100,
 
 	NUMROADBLOCKS = 300,
diff --git a/src/modelinfo/ModelIndices.h b/src/modelinfo/ModelIndices.h
index 938eda37..d3d568b2 100644
--- a/src/modelinfo/ModelIndices.h
+++ b/src/modelinfo/ModelIndices.h
@@ -176,6 +176,14 @@ enum
 	MI_MEDIC,
 	MI_FIREMAN,
 	MI_MALE01,
+
+	MI_TAXI_D = 28,	// HMOCA
+	MI_GANG01 = 83,	// CBa
+	MI_VICE1 = 97,
+	MI_WFYG2 = 106,	// last regular ped
+	MI_SPECIAL01 = 109,
+	MI_SPECIAL21 = 129,
+/*
 	MI_TAXI_D,
 	MI_PIMP,
 	MI_GANG01,
@@ -256,6 +264,7 @@ enum
 	MI_BUSKER3,
 	MI_BUSKER4,
 	// three more peds possible
+*/
 
 	MI_FIRST_VEHICLE = 130,
 	MI_LANDSTAL = MI_FIRST_VEHICLE,
diff --git a/src/modelinfo/PedModelInfo.cpp b/src/modelinfo/PedModelInfo.cpp
index 7dfadf06..7b467c64 100644
--- a/src/modelinfo/PedModelInfo.cpp
+++ b/src/modelinfo/PedModelInfo.cpp
@@ -187,16 +187,18 @@ struct ColNodeInfo
 	float radius;
 };
 
-#define NUMPEDINFONODES 8
+#define NUMPEDINFONODES 10
 ColNodeInfo m_pColNodeInfos[NUMPEDINFONODES] = {
-	{ nil,          PED_HEAD,		PEDPIECE_HEAD,  0.0f,   0.05f, 0.2f },
-	{ "Storso",     0,				PEDPIECE_TORSO,  0.0f,   0.15f, 0.2f },
-	{ "Storso",     0,				PEDPIECE_TORSO,  0.0f,  -0.05f, 0.3f },
-	{ nil,          PED_MID,		PEDPIECE_MID,  0.0f,  -0.07f, 0.3f },
-	{ nil,          PED_UPPERARML,	PEDPIECE_LEFTARM,  0.07f, -0.1f,  0.2f },
-	{ nil,          PED_UPPERARMR,	PEDPIECE_RIGHTARM, -0.07f, -0.1f,  0.2f },
-	{ "Slowerlegl", 0,				PEDPIECE_LEFTLEG,  0.0f,   0.07f, 0.25f },
-	{ nil,          PED_LOWERLEGR,	PEDPIECE_RIGHTLEG,  0.0f,   0.07f, 0.25f },
+	{ nil, PED_HEAD,	PEDPIECE_HEAD,	0.0f,   0.05f, 0.15f },
+	{ nil, PED_MID,		PEDPIECE_TORSO,	0.0f,   0.15f, 0.2f },
+	{ nil, PED_MID,		PEDPIECE_TORSO,	0.0f,  -0.05f, 0.25f },
+	{ nil, PED_MID,		PEDPIECE_MID,	0.0f,  -0.25f, 0.25f },
+	{ nil, PED_UPPERARML,	PEDPIECE_LEFTARM,	0.03f, -0.05f,  0.16f },
+	{ nil, PED_UPPERARMR,	PEDPIECE_RIGHTARM,	-0.03f, -0.05f,  0.16f },
+	{ nil, PED_LOWERLEGL,	PEDPIECE_LEFTLEG,	0.0f,   0.15f, 0.2f },
+	{ nil, PED_LOWERLEGR,	PEDPIECE_RIGHTLEG,	0.0f,   0.15f, 0.2f },
+	{ nil, PED_FOOTL,	PEDPIECE_LEFTLEG,	0.0f,   0.15f, 0.15f },
+	{ nil, PED_FOOTR,	PEDPIECE_RIGHTLEG,	0.0f,   0.15f, 0.15f },
 };
 
 RwObject*
diff --git a/src/modelinfo/PedModelInfo.h b/src/modelinfo/PedModelInfo.h
index a2bfd122..912c5a22 100644
--- a/src/modelinfo/PedModelInfo.h
+++ b/src/modelinfo/PedModelInfo.h
@@ -5,8 +5,8 @@
 #include "PedStats.h"
 
 enum PedNode {
-	PED_TORSO,
-	PED_MID,	// Smid on PS2/PC, Storso on mobile/xbox
+	PED_TORSO = 0,	// has no bone!
+	PED_MID,
 	PED_HEAD,
 	PED_UPPERARML,
 	PED_UPPERARMR,
@@ -17,7 +17,15 @@ enum PedNode {
 	PED_FOOTL,
 	PED_FOOTR,
 	PED_LOWERLEGR,
-	PED_NODE_MAX// Not valid: PED_LOWERLEGL
+	PED_LOWERLEGL,
+
+	PED_FOREARML,
+	PED_FOREARMR,
+	PED_CLAVICLEL,
+	PED_CLAVICLER,
+	PED_NECK,
+
+	PED_NODE_MAX
 };
 
 class CPedModelInfo : public CClumpModelInfo
diff --git a/src/objects/CutsceneObject.cpp b/src/objects/CutsceneObject.cpp
index 5c10d37d..bf39bd03 100644
--- a/src/objects/CutsceneObject.cpp
+++ b/src/objects/CutsceneObject.cpp
@@ -21,12 +21,6 @@ CCutsceneObject::CCutsceneObject(void)
 	ObjectCreatedBy = CUTSCENE_OBJECT;
 	m_fMass = 1.0f;
 	m_fTurnMass = 1.0f;
-
-#ifdef PED_SKIN
-	bRenderHead = true;
-	bRenderRightHand = true;
-	bRenderLeftHand = true;
-#endif
 }
 
 void
@@ -85,47 +79,9 @@ CCutsceneObject::PreRender(void)
 void
 CCutsceneObject::Render(void)
 {
-#ifdef PED_SKIN
-	if(IsClumpSkinned(GetClump())){
-		if(bRenderLeftHand) RenderLimb(BONE_Lhand);
-		if(bRenderRightHand) RenderLimb(BONE_Rhand);
-		if(bRenderHead) RenderLimb(BONE_head);
-	}
-#endif
 	CObject::Render();
 }
 
-#ifdef PED_SKIN
-void
-CCutsceneObject::RenderLimb(int32 bone)
-{
-	RpAtomic *atomic;
-	CPedModelInfo *mi = (CPedModelInfo *)CModelInfo::GetModelInfo(GetModelIndex());
-	switch(bone){
-	case BONE_head:
-		atomic = mi->getHead();
-		break;
-	case BONE_Lhand:
-		atomic = mi->getLeftHand();
-		break;
-	case BONE_Rhand:
-		atomic = mi->getRightHand();
-		break;
-	default:
-		return;
-	}
-	if(atomic){
-		RpHAnimHierarchy *hier = GetAnimHierarchyFromSkinClump(GetClump());
-		int idx = RpHAnimIDGetIndex(hier, bone);
-		RwMatrix *mat = &RpHAnimHierarchyGetMatrixArray(hier)[idx];
-		RwFrame *frame = RpAtomicGetFrame(atomic);
-		*RwFrameGetMatrix(frame) = *mat;
-		RwFrameUpdateObjects(frame);
-		RpAtomicRender(atomic);
-	}
-}
-#endif
-
 bool
 CCutsceneObject::SetupLighting(void)
 {
diff --git a/src/objects/CutsceneObject.h b/src/objects/CutsceneObject.h
index 9c4036bf..bb642f3e 100644
--- a/src/objects/CutsceneObject.h
+++ b/src/objects/CutsceneObject.h
@@ -5,29 +5,12 @@
 class CCutsceneObject : public CObject
 {
 public:
-#ifdef PED_SKIN
-	bool bRenderHead;
-	bool bRenderRightHand;
-	bool bRenderLeftHand;
-
-	bool GetRenderHead(void) { return bRenderHead; }
-	bool GetRenderRightHand(void) { return bRenderRightHand; }
-	bool GetRenderLeftHand(void) { return bRenderLeftHand; }
-	void SetRenderHead(bool render) { bRenderHead = render; }
-	void SetRenderRightHand(bool render) { bRenderRightHand = render; }
-	void SetRenderLeftHand(bool render) { bRenderLeftHand = render; }
-#endif
-
 	CCutsceneObject(void);
 
 	void SetModelIndex(uint32 id);
 	void ProcessControl(void);
 	void PreRender(void);
 	void Render(void);
-	void RenderLimb(int32 bone);
 	bool SetupLighting(void);
 	void RemoveLighting(bool reset);
 };
-#ifndef PED_SKIN
-static_assert(sizeof(CCutsceneObject) == 0x198, "CCutsceneObject: error");
-#endif
diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp
index 7a7316ae..fd4f9f58 100644
--- a/src/peds/Ped.cpp
+++ b/src/peds/Ped.cpp
@@ -8036,83 +8036,11 @@ CPed::GetNextPointOnRoute(void)
 	return nextPoint;
 }
 
-// These categories are purely random, most of ped models have no correlation. So I don't think making an enum.
 uint8
 CPed::GetPedRadioCategory(uint32 modelIndex)
 {
-	switch (modelIndex) {
-		case MI_MALE01:
-		case MI_FEMALE03:
-		case MI_PROSTITUTE2:
-		case MI_WORKER1:
-		case MI_MOD_MAN:
-		case MI_MOD_WOM:
-		case MI_ST_WOM:
-		case MI_FAN_WOM:
-			return 3;
-		case MI_TAXI_D:
-		case MI_PIMP:
-		case MI_MALE02:
-		case MI_FEMALE02:
-		case MI_FATFEMALE01:
-		case MI_FATFEMALE02:
-		case MI_DOCKER1:
-		case MI_WORKER2:
-		case MI_FAN_MAN2:
-			return 9;
-		case MI_GANG01:
-		case MI_GANG02:
-		case MI_SCUM_MAN:
-		case MI_SCUM_WOM:
-		case MI_HOS_WOM:
-		case MI_CONST1:
-			return 1;
-		case MI_GANG03:
-		case MI_GANG04:
-		case MI_GANG07:
-		case MI_GANG08:
-		case MI_CT_MAN2:
-		case MI_CT_WOM2:
-		case MI_B_MAN3:
-		case MI_SHOPPER3:
-			return 4;
-		case MI_GANG05:
-		case MI_GANG06:
-		case MI_GANG11:
-		case MI_GANG12:
-		case MI_CRIMINAL02:
-		case MI_B_WOM2:
-		case MI_ST_MAN:
-		case MI_HOS_MAN:
-			return 5;
-		case MI_FATMALE01:
-		case MI_LI_MAN2:
-		case MI_SHOPPER1:
-		case MI_CAS_MAN:
-			return 6;
-		case MI_PROSTITUTE:
-		case MI_P_WOM2:
-		case MI_LI_WOM2:
-		case MI_B_WOM3:
-		case MI_CAS_WOM:
-			return 2;
-		case MI_P_WOM1:
-		case MI_DOCKER2:
-		case MI_STUD_MAN:
-			return 7;
-		case MI_CT_MAN1:
-		case MI_CT_WOM1:
-		case MI_LI_MAN1:
-		case MI_LI_WOM1:
-		case MI_B_MAN1:
-		case MI_B_MAN2:
-		case MI_B_WOM1:
-		case MI_SHOPPER2:
-		case MI_STUD_WOM:
-			return 8;
-		default:
-			return 0;
-	}
+	// TODO(MIAMI): remove this function and use modelinfo for radio
+	return 1;
 }
 
 // Some kind of VC leftover I think
diff --git a/src/peds/PedIK.cpp b/src/peds/PedIK.cpp
index 3db3dc0f..0c7509eb 100644
--- a/src/peds/PedIK.cpp
+++ b/src/peds/PedIK.cpp
@@ -33,13 +33,18 @@ CPedIK::CPedIK(CPed *ped)
 
 #ifdef PED_SKIN
 inline RwMatrix*
-GetComponentMatrix(CPed *ped, int32 node)
+GetBoneMatrix(CPed *ped, int32 bone)
 {
 	RpHAnimHierarchy *hier = GetAnimHierarchyFromSkinClump(ped->GetClump());
-	int idx = RpHAnimIDGetIndex(hier, ped->m_pFrames[node]->nodeID);
+	int idx = RpHAnimIDGetIndex(hier, bone);
 	RwMatrix *mats = RpHAnimHierarchyGetMatrixArray(hier);
 	return &mats[idx];
 }
+inline RwMatrix*
+GetComponentMatrix(CPed *ped, int32 node)
+{
+	return GetBoneMatrix(ped, ped->m_pFrames[node]->nodeID);
+}
 #endif
 
 void
@@ -245,7 +250,7 @@ CPedIK::LookInDirection(float phi, float theta)
 		}
 
 		// parent of head is torso
-		RwMatrix worldMat = *GetComponentMatrix(m_ped, BONE_torso);
+		RwMatrix worldMat = *GetComponentMatrix(m_ped, PED_NECK);
 		ExtractYawAndPitchWorld(&worldMat, &yaw, &pitch);
 
 		LimbMoveStatus headStatus = MoveLimb(m_headOrient, CGeneral::LimitRadianAngle(phi - yaw),
diff --git a/src/peds/PedStats.h b/src/peds/PedStats.h
index 4c35e8ee..02f09c0d 100644
--- a/src/peds/PedStats.h
+++ b/src/peds/PedStats.h
@@ -37,6 +37,11 @@ enum ePedStats
 	PEDSTAT_SPORTSFAN,
 	PEDSTAT_SHOPPER,
 	PEDSTAT_OLDSHOPPER,
+	PEDSTAT_BEACH_GUY,
+	PEDSTAT_BEACH_GIRL,
+	PEDSTAT_SKATER,
+	PEDSTAT_STD_MISSION,
+	PEDSTAT_COWARD,
 
 	NUM_PEDSTATS
 };
-- 
cgit v1.2.3


From f23ecfbc84897c81a4a0a388fed26330583a1afd Mon Sep 17 00:00:00 2001
From: aap <aap@papnet.eu>
Date: Sat, 9 May 2020 17:29:13 +0200
Subject: accidentally swapped reft and light

---
 src/animation/Bones.cpp | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

(limited to 'src')

diff --git a/src/animation/Bones.cpp b/src/animation/Bones.cpp
index 6c9b162a..87f3b6e7 100644
--- a/src/animation/Bones.cpp
+++ b/src/animation/Bones.cpp
@@ -38,16 +38,16 @@ ConvertBoneTag2BoneName(int tag)
 	case BONE_spine1:	return "Spine1";
 	case BONE_neck:	return "Neck";
 	case BONE_head:	return "Head";
-	case BONE_l_clavicle:	return "Bip01 R Clavicle";
-	case BONE_l_upperarm:	return "R UpperArm";
-	case BONE_l_forearm:	return "R Forearm";
-	case BONE_l_hand:	return "R Hand";
-	case BONE_l_finger:	return "R Fingers";
-	case BONE_r_clavicle:	return "Bip01 L Clavicle";
-	case BONE_r_upperarm:	return "L UpperArm";
-	case BONE_r_forearm:	return "L Forearm";
-	case BONE_r_hand:	return "L Hand";
-	case BONE_r_finger:	return "L Fingers";
+	case BONE_r_clavicle:	return "Bip01 R Clavicle";
+	case BONE_r_upperarm:	return "R UpperArm";
+	case BONE_r_forearm:	return "R Forearm";
+	case BONE_r_hand:	return "R Hand";
+	case BONE_r_finger:	return "R Fingers";
+	case BONE_l_clavicle:	return "Bip01 L Clavicle";
+	case BONE_l_upperarm:	return "L UpperArm";
+	case BONE_l_forearm:	return "L Forearm";
+	case BONE_l_hand:	return "L Hand";
+	case BONE_l_finger:	return "L Fingers";
 	case BONE_l_thigh:	return "L Thigh";
 	case BONE_l_calf:	return "L Calf";
 	case BONE_l_foot:	return "L Foot";
-- 
cgit v1.2.3