diff --git a/source/games/blood/src/actor.cpp b/source/games/blood/src/actor.cpp
index 3dc1a56e9..98130f231 100644
--- a/source/games/blood/src/actor.cpp
+++ b/source/games/blood/src/actor.cpp
@@ -2571,7 +2571,7 @@ static void ConcussSprite(DBloodActor* source, DBloodActor* actor, int x, int y,
 #ifdef NOONE_EXTENSIONS
 			if (pSprite->type == kDudeModernCustom || pSprite->type == kDudeModernCustomBurning)
 			{
-				mass = getSpriteMassBySize(pSprite);
+				mass = getSpriteMassBySize(actor);
 			}
 #endif
 		}
@@ -4267,7 +4267,7 @@ static void checkCeilHit(DBloodActor* actor)
 						{
 						case kDudeModernCustom:
 						case kDudeModernCustomBurning:
-							mass2 = getSpriteMassBySize(pSprite);
+							mass2 = getSpriteMassBySize(actor);
 							break;
 						}
 						if (mass1 > mass2)
@@ -4292,7 +4292,7 @@ static void checkCeilHit(DBloodActor* actor)
 						case kDudeModernCustom:
 						case kDudeModernCustomBurning:
 							int dmg = 0;
-							if (!actor->IsDudeActor() || (dmg = ClipLow((getSpriteMassBySize(pSprite2) - getSpriteMassBySize(pSprite)) >> 1, 0)) == 0)
+							if (!actor->IsDudeActor() || (dmg = ClipLow((getSpriteMassBySize(actor2) - getSpriteMassBySize(actor)) >> 1, 0)) == 0)
 								break;
 
 							if (!actor->IsPlayerActor())
@@ -4359,7 +4359,7 @@ static void checkHit(DBloodActor* actor)
 					{
 					case kDudeModernCustom:
 					case kDudeModernCustomBurning:
-						mass2 = getSpriteMassBySize(pSprite2);
+						mass2 = getSpriteMassBySize(actor2);
 						break;
 					}
 					if (mass1 > mass2)
@@ -4436,7 +4436,7 @@ static void checkFloorHit(DBloodActor* actor)
 				{
 				case kDudeModernCustom:
 				case kDudeModernCustomBurning:
-					mass2 = getSpriteMassBySize(pSprite2);
+					mass2 = getSpriteMassBySize(actor2);
 					break;
 				}
 
@@ -5241,8 +5241,8 @@ void MoveDude(DBloodActor* actor)
 				pSprite->flags &= ~4;
 			}
 			else
-
 				pSprite->flags |= 4;
+
 			switch (tileGetSurfType(floorHit))
 			{
 			case kSurfWater:
@@ -7046,7 +7046,7 @@ void actFireVector(DBloodActor* shooter, int a2, int a3, int a4, int a5, int a6,
 					{
 					case kDudeModernCustom:
 					case kDudeModernCustomBurning:
-						t = getSpriteMassBySize(pSprite);
+                            t = getSpriteMassBySize(actor);
 						break;
 					}
 				}
diff --git a/source/games/blood/src/aiunicult.cpp b/source/games/blood/src/aiunicult.cpp
index 60ea0dacc..94e9dc39c 100644
--- a/source/games/blood/src/aiunicult.cpp
+++ b/source/games/blood/src/aiunicult.cpp
@@ -256,7 +256,7 @@ void genDudeAttack1(int, DBloodActor* actor)
 
         actFireVector(actor, 0, 0, dx, dy, dz,(VECTOR_TYPE)pExtra->curWeapon);
         if (!playGenDudeSound(actor, kGenDudeSndAttackNormal))
-            sfxPlayVectorSound(pSprite, pExtra->curWeapon);
+            sfxPlayVectorSound(actor, pExtra->curWeapon);
     } 
     else if (pExtra->weaponType == kGenDudeWeaponSummon) 
     {
@@ -292,7 +292,7 @@ void genDudeAttack1(int, DBloodActor* actor)
 
         actFireMissile(actor, 0, 0, dx, dy, dz, pExtra->curWeapon);
         if (!playGenDudeSound(actor, kGenDudeSndAttackNormal))
-            sfxPlayMissileSound(pSprite, pExtra->curWeapon);
+            sfxPlayMissileSound(actor, pExtra->curWeapon);
     }
 }
 
@@ -1809,9 +1809,8 @@ int getBaseChanceModifier(int baseChance)
 
 int getRecoilChance(DBloodActor* actor) 
 {
-    auto const pSprite = &actor->s();
     auto const pXSprite = &actor->x();
-    int mass = getSpriteMassBySize(pSprite);
+    int mass = getSpriteMassBySize(actor);
     int baseChance = (!dudeIsMelee(actor) ? 0x8000 : 0x4000);
     baseChance = getBaseChanceModifier(baseChance) + pXSprite->data3;
     
@@ -1821,9 +1820,8 @@ int getRecoilChance(DBloodActor* actor)
 
 int getDodgeChance(DBloodActor* actor) 
 {
-    auto const pSprite = &actor->s();
     auto const pXSprite = &actor->x();
-    int mass = getSpriteMassBySize(pSprite);
+    int mass = getSpriteMassBySize(actor);
     int baseChance = (!dudeIsMelee(actor) ? 0x6000 : 0x1000);
     baseChance = getBaseChanceModifier(baseChance) + pXSprite->data3;
 
@@ -2417,7 +2415,7 @@ bool genDudePrepare(DBloodActor* actor, int propId)
             SPRITEMASS* pMass = &actor->spriteMass;
             pMass->seqId = pMass->picnum = pMass->xrepeat = pMass->yrepeat = pMass->clipdist = 0;
             pMass->mass = pMass->airVel = pMass->fraction = 0;
-            getSpriteMassBySize(pSprite);
+            getSpriteMassBySize(actor);
             if (propId) break;
             [[fallthrough]];
         }
diff --git a/source/games/blood/src/nnexts.cpp b/source/games/blood/src/nnexts.cpp
index 538b06742..76cbdcc5b 100644
--- a/source/games/blood/src/nnexts.cpp
+++ b/source/games/blood/src/nnexts.cpp
@@ -559,7 +559,7 @@ void nnExtInitModernStuff(bool bSaveLoad)
                 break;
             case kDudeModernCustom:
             case kDudeModernCustomBurning:
-                getSpriteMassBySize(pSprite); // create mass cache
+                getSpriteMassBySize(actor); // create mass cache
                 break;
             case kModernCondition:
             case kModernConditionFalse:
@@ -579,7 +579,7 @@ void nnExtInitModernStuff(bool bSaveLoad)
             if (pXSprite->physAttr != 0) 
             {
                 gPhysSpritesList[gPhysSpritesCount++] = &bloodActors[pSprite->index]; // add sprite index
-                getSpriteMassBySize(pSprite); // create mass cache
+                getSpriteMassBySize(actor); // create mass cache
             }
 
             if (pXSprite->data3 != pXSprite->sysData1) 
@@ -1146,9 +1146,10 @@ static void windGenDoVerticalWind(int factor, int nSector)
 void nnExtProcessSuperSprites()
 {
     // process tracking conditions
-    if (gTrackingCondsCount > 0) {
-        for (int i = 0; i < gTrackingCondsCount; i++) {
-
+    if (gTrackingCondsCount > 0) 
+    {
+        for (int i = 0; i < gTrackingCondsCount; i++) 
+        {
             TRCONDITION* pCond = &gCondition[i];
             XSPRITE* pXCond = &pCond->actor->x();
             if (pXCond->locked || pXCond->isTriggered || ++pXCond->busy < pXCond->busyTime)
@@ -1466,25 +1467,46 @@ void nnExtProcessSuperSprites()
     }
 }
 
+//---------------------------------------------------------------------------
+//
 // this function plays sound predefined in missile info
-void sfxPlayMissileSound(spritetype* pSprite, int missileId) {
+//
+//---------------------------------------------------------------------------
+
+void sfxPlayMissileSound(DBloodActor* actor, int missileId) 
+{
     const MISSILEINFO_EXTRA* pMissType = &gMissileInfoExtra[missileId - kMissileBase];
-    sfxPlay3DSound(pSprite, Chance(0x5000) ? pMissType->fireSound[0] : pMissType->fireSound[1], -1, 0);
+    sfxPlay3DSound(actor, Chance(0x5000) ? pMissType->fireSound[0] : pMissType->fireSound[1], -1, 0);
 }
 
+//---------------------------------------------------------------------------
+//
 // this function plays sound predefined in vector info
-void sfxPlayVectorSound(spritetype* pSprite, int vectorId) {
+//
+//---------------------------------------------------------------------------
+
+void sfxPlayVectorSound(DBloodActor* actor, int vectorId) 
+{
     const VECTORINFO_EXTRA* pVectorData = &gVectorInfoExtra[vectorId];
-    sfxPlay3DSound(pSprite, Chance(0x5000) ? pVectorData->fireSound[0] : pVectorData->fireSound[1], -1, 0);
+    sfxPlay3DSound(actor, Chance(0x5000) ? pVectorData->fireSound[0] : pVectorData->fireSound[1], -1, 0);
 }
 
-int getSpriteMassBySize(spritetype* pSprite) {
-    auto actor = &bloodActors[pSprite->index];
-    int mass = 0; int seqId = -1; int clipDist = pSprite->clipdist; Seq* pSeq = NULL;
-    if (pSprite->extra < 0) {
-        I_Error("getSpriteMassBySize: pSprite->extra < 0");
+//---------------------------------------------------------------------------
+//
+// 
+//
+//---------------------------------------------------------------------------
 
-    } else if (IsDudeSprite(pSprite)) {
+int getSpriteMassBySize(DBloodActor* actor)
+{
+    auto pSprite = &actor->s();
+    int mass = 0; int seqId = -1; int clipDist = pSprite->clipdist; Seq* pSeq = NULL;
+    if (!actor->hasX())
+    {
+        I_Error("getSpriteMassBySize: pSprite->extra < 0");
+    }
+    else if (actor->IsDudeActor()) 
+    {
 
         switch (pSprite->type) {
         case kDudePodMother: // fake dude, no seq
@@ -2447,6 +2469,7 @@ void usePropertiesChanger(XSPRITE* pXSource, short objType, int objIndex) {
         }
         break;
         case OBJ_SPRITE: {
+            auto actor = &bloodActors[objIndex];
             spritetype* pSprite = &sprite[objIndex]; bool thing2debris = false;
             XSPRITE* pXSprite = &xsprite[pSprite->extra]; int old = -1;
 
@@ -2624,7 +2647,7 @@ void usePropertiesChanger(XSPRITE* pXSource, short objType, int objIndex) {
 
                             gPhysSpritesList[nIndex] = &bloodActors[objIndex];
                             if (nIndex >= gPhysSpritesCount) gPhysSpritesCount++;
-                            getSpriteMassBySize(pSprite); // create physics cache
+                            getSpriteMassBySize(actor); // create physics cache
 
                         }
 
@@ -4223,7 +4246,7 @@ bool condCheckSprite(XSPRITE* pXCond, int cmpOp, bool PUSH) {
                 return false;
             }
             case 70:
-                return condCmp(getSpriteMassBySize(pSpr), arg1, arg2, cmpOp); // mass of the sprite in a range?
+                return condCmp(getSpriteMassBySize(spractor), arg1, arg2, cmpOp); // mass of the sprite in a range?
         }
     } else {
         switch (cond) {
@@ -5629,7 +5652,7 @@ void useRandomItemGen(spritetype* pSource, XSPRITE* pXSource) {
 
             gPhysSpritesList[nIndex] = &bloodActors[pDrop->index];
                 if (nIndex >= gPhysSpritesCount) gPhysSpritesCount++;
-                getSpriteMassBySize(pDrop); // create mass cache
+                getSpriteMassBySize(dropactor); // create mass cache
             }
         
         }
diff --git a/source/games/blood/src/nnexts.h b/source/games/blood/src/nnexts.h
index cea82bfe8..980433d27 100644
--- a/source/games/blood/src/nnexts.h
+++ b/source/games/blood/src/nnexts.h
@@ -300,8 +300,8 @@ int nnExtRandom(int a, int b);
 void nnExtResetGlobals();
 void nnExtTriggerObject(int objType, int objIndex, int command);
 //  -------------------------------------------------------------------------   //
-void sfxPlayMissileSound(spritetype* pSprite, int missileId);
-void sfxPlayVectorSound(spritetype* pSprite, int vectorId);
+void sfxPlayMissileSound(DBloodActor* pSprite, int missileId);
+void sfxPlayVectorSound(DBloodActor* pSprite, int vectorId);
 //  -------------------------------------------------------------------------   //
 int debrisGetIndex(int nSprite);
 int debrisGetFreeIndex(void);
@@ -398,7 +398,7 @@ int getDataFieldOfObject(int objType, int objIndex, DBloodActor* objActor, int d
 bool setDataValueOfObject(int objType, int objIndex, int dataIndex, int value);
 bool incDecGoalValueIsReached(XSPRITE* pXSprite);
 void windGenStopWindOnSectors(XSPRITE* pXSource);
-int getSpriteMassBySize(spritetype* pSprite);
+int getSpriteMassBySize(DBloodActor* pSprite);
 bool ceilIsTooLow(spritetype* pSprite);
 void levelEndLevelCustom(int nLevel);
 int useCondition(spritetype* pSource, XSPRITE* pXSource, EVENT event);