diff --git a/source/blood/src/blood.cpp b/source/blood/src/blood.cpp
index c1d0f7e60..ffee59c49 100644
--- a/source/blood/src/blood.cpp
+++ b/source/blood/src/blood.cpp
@@ -470,7 +470,7 @@ void PreloadCache(void)
         sndTryPlaySpecialMusic(MUS_LOADING);
     gSoundRes.PrecacheSounds();
     PreloadTiles();
-    int clock = totalclock;
+    int clock = totalclock.Ticks();
     int cnt = 0;
     int percentDisplayed = -1;
 
@@ -503,12 +503,12 @@ void PreloadCache(void)
 
                     if (totalclock - clock >= 1)
                     {
-                        clock = totalclock;
+                        clock = totalclock.Ticks();
                         percentDisplayed++;
                     }
                 }
 
-                clock = totalclock;
+                clock = totalclock.Ticks();
             }
         }
     }
diff --git a/source/blood/src/choke.cpp b/source/blood/src/choke.cpp
index bf10091e9..2ee56c293 100644
--- a/source/blood/src/choke.cpp
+++ b/source/blood/src/choke.cpp
@@ -96,8 +96,8 @@ void CChoke::sub_84110(int x, int y)
     gFrameClock = gGameClock;
     at8->x = x;
     at8->y = y;
-    int vd = totalclock-at10;
-    at10 = totalclock;
+    int vd = totalclock.Ticks()-at10;
+    at10 = totalclock.Ticks();
     atc -= vd;
     if (atc <= 0 || atc > at8->at10)
         atc = at8->at10;
@@ -121,7 +121,7 @@ void CChoke::sub_84110(int x, int y)
 void CChoke::sub_84218()
 {
     atc = at8->at10;
-    at10 = totalclock;
+    at10 = totalclock.Ticks();
 }
 
 void sub_84230(PLAYER *pPlayer)
diff --git a/source/blood/src/controls.cpp b/source/blood/src/controls.cpp
index 3c5cfe5ce..b8a752583 100644
--- a/source/blood/src/controls.cpp
+++ b/source/blood/src/controls.cpp
@@ -195,25 +195,26 @@ void ctrlGetInput(void)
 
     CONTROL_GetInput(&info);
 
-    if (MouseDeadZone)
-    {
-        if (info.dpitch > 0)
-            info.dpitch = max(info.dpitch - MouseDeadZone, 0);
-        else if (info.dpitch < 0)
-            info.dpitch = min(info.dpitch + MouseDeadZone, 0);
+	if (MouseDeadZone)
+	{
+		if (info.mousey > 0)
+			info.mousey = max(info.mousey - MouseDeadZone, 0);
+		else if (info.mousey < 0)
+			info.mousey = min(info.mousey + MouseDeadZone, 0);
 
-        if (info.dyaw > 0)
-            info.dyaw = max(info.dyaw - MouseDeadZone, 0);
-        else if (info.dyaw < 0)
-            info.dyaw = min(info.dyaw + MouseDeadZone, 0);
-    }
+		if (info.mousex > 0)
+			info.mousex = max(info.mousex - MouseDeadZone, 0);
+		else if (info.mousex < 0)
+			info.mousex = min(info.mousex + MouseDeadZone, 0);
+	}
 
-    if (MouseBias)
-    {
-        if (klabs(info.dyaw) > klabs(info.dpitch))
-            info.dpitch = tabledivide32_noinline(info.dpitch, MouseBias);
-        else info.dyaw = tabledivide32_noinline(info.dyaw, MouseBias);
-    }
+	if (MouseBias)
+	{
+		if (klabs(info.mousex) > klabs(info.mousey))
+			info.mousey = tabledivide32_noinline(info.mousey, MouseBias);
+		else
+			info.mousex = tabledivide32_noinline(info.mousex, MouseBias);
+	}
 
     if (gQuitRequest)
         gInput.keyFlags.quit = 1;
@@ -453,9 +454,9 @@ void ctrlGetInput(void)
         turn <<= 1;
 
     if (BUTTON(gamefunc_Strafe))
-        strafe = ClipRange(strafe - info.dyaw, -2048, 2048);
+        strafe = ClipRange(strafe - info.mousex, -2048, 2048);
     else
-        turn = fix16_clamp(turn + fix16_div(fix16_from_int(info.dyaw), F16(32)), F16(-1024)>>2, F16(1024)>>2);
+        turn = fix16_clamp(turn + fix16_div(fix16_from_int(info.mousex), F16(32)), F16(-1024)>>2, F16(1024)>>2);
 
     strafe = ClipRange(strafe-(info.dx<<5), -2048, 2048);
 
@@ -465,7 +466,7 @@ void ctrlGetInput(void)
     else
         gInput.mlook = ClipRange(info.dz>>7, -127, 127);
 #endif
-    gInput.q16mlook = fix16_clamp(fix16_div(fix16_from_int(info.dpitch), F16(256)), F16(-127)>>2, F16(127)>>2);
+    gInput.q16mlook = fix16_clamp(fix16_div(fix16_from_int(info.mousey*2), F16(256)), F16(-127)>>2, F16(127)>>2);
     if (!gMouseAimingFlipped)
         gInput.q16mlook = -gInput.q16mlook;
     forward = ClipRange(forward - info.dz, -2048, 2048);
diff --git a/source/blood/src/credits.cpp b/source/blood/src/credits.cpp
index a88abcdb1..ae7b228cb 100644
--- a/source/blood/src/credits.cpp
+++ b/source/blood/src/credits.cpp
@@ -245,7 +245,7 @@ void credPlaySmk(const char *_pzSMK, const char *_pzWAV, int nWav)
     UpdateDacs(0, true);
 
     timerUpdate();
-    int32_t nStartTime = totalclock;
+    int32_t nStartTime = totalclock.Ticks();
 
     ctrlClearAllInput();
     
@@ -253,7 +253,7 @@ void credPlaySmk(const char *_pzSMK, const char *_pzWAV, int nWav)
     do
     {
         G_HandleAsync();
-        if (scale(totalclock-nStartTime, nFrameRate, kTicRate) < nFrame)
+        if (scale(totalclock.Ticks() -nStartTime, nFrameRate, kTicRate) < nFrame)
             continue;
 
         if (ctrlCheckAllInput())
diff --git a/source/blood/src/gamemenu.cpp b/source/blood/src/gamemenu.cpp
index e66c371d0..19163b0fb 100644
--- a/source/blood/src/gamemenu.cpp
+++ b/source/blood/src/gamemenu.cpp
@@ -175,7 +175,7 @@ void CGameMenuMgr::Draw(void)
         if (MOUSEACTIVECONDITIONAL(mouseAdvanceClickState()) || m_mousepos.x != m_prevmousepos.x || m_mousepos.y != m_prevmousepos.y)
         {
             m_prevmousepos = m_mousepos;
-            m_mouselastactivity = totalclock;
+            m_mouselastactivity = totalclock.Ticks();
         }
         else
             m_mousewake_watchpoint = 0;
@@ -611,7 +611,7 @@ void CGameMenuItemZBool::Draw(void)
     int shade = bEnable ? 32 : 48;
     int pal = bEnable ? 0 : 5;
     if (pMenu->IsFocusItem(this))
-        shade = 32-(totalclock&63);
+        shade = 32-(totalclock.Ticks() &63);
     if (m_pzText)
         gMenuTextMgr.DrawText(m_pzText, m_nFont, m_nX, m_nY, shade, pal, false);
     const char *value = at20 ? at21 : at25;
@@ -686,7 +686,7 @@ void CGameMenuItemChain::Draw(void)
     int shade = bEnable ? 32 : 48;
     int pal = bEnable ? 0 : 5;
     if (pMenu->IsFocusItem(this))
-        shade = 32-(totalclock&63);
+        shade = 32-(totalclock.Ticks() &63);
     int width, height;
     int x = m_nX;
     int y = m_nY;
@@ -772,7 +772,7 @@ void CGameMenuItem7EA1C::Draw(void)
     int shade = bEnable ? 32 : 48;
     int pal = bEnable ? 0 : 5;
     if (pMenu->IsFocusItem(this))
-        shade = 32-(totalclock&63);
+        shade = 32-(totalclock.Ticks() &63);
     int width;
     int x = m_nX;
     switch (at20)
@@ -887,7 +887,7 @@ void CGameMenuItem7EE34::Draw(void)
     int shade = bEnable ? 32 : 48;
     int pal = bEnable ? 0 : 5;
     if (pMenu->IsFocusItem(this))
-        shade = 32-(totalclock&63);
+        shade = 32-(totalclock.Ticks() &63);
     int width;
     int x = m_nX;
     switch (at24)
@@ -1011,7 +1011,7 @@ void CGameMenuItemBitmap::Draw(void)
     int shade = bEnable ? 32 : 48;
     int pal = bEnable ? 0 : 5;
     if (bEnable && pMenu->IsFocusItem(this))
-        shade = 32-(totalclock&63);
+        shade = 32-(totalclock.Ticks() &63);
     int x = m_nX;
     int y = m_nY;
     if (m_pzText)
@@ -1051,7 +1051,7 @@ void CGameMenuItemBitmapLS::Draw(void)
     int shade = bEnable ? 32 : 48;
     int pal = bEnable ? 0 : 5;
     if (bEnable && pMenu->IsFocusItem(this))
-        shade = 32-(totalclock&63);
+        shade = 32-(totalclock.Ticks() &63);
     int x = m_nX;
     int y = m_nY;
     if (m_pzText)
@@ -1156,7 +1156,7 @@ void CGameMenuItemKeyList::Draw(void)
         {
             shade = 32;
             if (pMenu->IsFocusItem(this))
-                shade = 32-(totalclock&63);
+                shade = 32-(totalclock.Ticks() &63);
             viewDrawText(3, buffer, m_nX, y, shade, 0, 0, false);
             const char *sVal;
             if (bScan && (gGameClock & 32))
@@ -1304,13 +1304,13 @@ bool CGameMenuItemKeyList::MouseEvent(CGameMenuEvent &event)
     event.at0 = kMenuEventNone;
     if (MOUSEACTIVECONDITIONAL(MOUSE_GetButtons()&WHEELUP_MOUSE))
     {
-        gGameMenuMgr.m_mouselastactivity = totalclock;
+        gGameMenuMgr.m_mouselastactivity = totalclock.Ticks();
         MOUSE_ClearButton(WHEELUP_MOUSE);
         event.at0 = kMenuEventScrollUp;
     }
     else if (MOUSEACTIVECONDITIONAL(MOUSE_GetButtons()&WHEELDOWN_MOUSE))
     {
-        gGameMenuMgr.m_mouselastactivity = totalclock;
+        gGameMenuMgr.m_mouselastactivity = totalclock.Ticks();
         MOUSE_ClearButton(WHEELDOWN_MOUSE);
         event.at0 = kMenuEventScrollDown;
     }
@@ -1389,7 +1389,7 @@ void CGameMenuItemSlider::Draw(void)
     int shade2 = bEnable ? 0 : 16;
     int pal = bEnable ? 0 : 5;
     if (pMenu->IsFocusItem(this))
-        shade = 32-(totalclock&63);
+        shade = 32-(totalclock.Ticks() &63);
     if (m_pzText)
         gMenuTextMgr.DrawText(m_pzText, m_nFont, m_nX, m_nY, shade, pal, false);
     int sliderX = m_nX+m_nWidth-1-tilesiz[nSliderTile].x/2;
@@ -1621,7 +1621,7 @@ void CGameMenuItemSliderFloat::Draw(void)
     int shade2 = bEnable ? 0 : 16;
     int pal = bEnable ? 0 : 5;
     if (pMenu->IsFocusItem(this))
-        shade = 32-(totalclock&63);
+        shade = 32-(totalclock.Ticks() &63);
     if (m_pzText)
         gMenuTextMgr.DrawText(m_pzText, m_nFont, m_nX, m_nY, shade, pal, false);
     int sliderX = m_nX+m_nWidth-1-tilesiz[nSliderTile].x/2;
@@ -1803,7 +1803,7 @@ void CGameMenuItemZEdit::Draw(void)
     int shade = bEnable ? 32 : 48;
     int pal = bEnable ? 0 : 5;
     if (pMenu->IsFocusItem(this))
-        shade = 32-(totalclock&63);
+        shade = 32-(totalclock.Ticks() &63);
     if (at30)
         shade = -128;
     if (m_pzText)
@@ -1988,7 +1988,7 @@ void CGameMenuItemZEditBitmap::Draw(void)
     int shade = bEnable ? 32 : 48;
     int pal = bEnable ? 0 : 5;
     if (pMenu->IsFocusItem(this))
-        shade = 32-(totalclock&63);
+        shade = 32-(totalclock.Ticks() &63);
     at2c->at24 = -1;
     if (at34)
         shade = -128;
@@ -2150,8 +2150,8 @@ void CGameMenuItemQAV::Draw(void)
     {
         int backFC = gFrameClock;
         gFrameClock = gGameClock;
-        int nTicks = totalclock - at30;
-        at30 = totalclock;
+        int nTicks = totalclock.Ticks() - at30;
+        at30 = totalclock.Ticks();
         at2c -= nTicks;
         if (at2c <= 0 || at2c > at28->at10)
         {
@@ -2229,7 +2229,7 @@ bool CGameMenuItemQAV::Event(CGameMenuEvent &event)
                 at28->y = m_nY;
                 at28->Preload();
                 at2c = at28->at10;
-                at30 = totalclock;
+                at30 = totalclock.Ticks();
                 return false;
             }
             gSysRes.Lock(at24);
@@ -2250,7 +2250,7 @@ bool CGameMenuItemQAV::Event(CGameMenuEvent &event)
 void CGameMenuItemQAV::Reset(void)
 {
     at2c = at28->at10;
-    at30 = totalclock;
+    at30 = totalclock.Ticks();
 }
 
 CGameMenuItemZCycleSelect::CGameMenuItemZCycleSelect()
@@ -2298,7 +2298,7 @@ void CGameMenuItemZCycleSelect::Draw(void)
         {
             shade = 32;
             if (pMenu->IsFocusItem(this))
-                shade = 32-(totalclock&63);
+                shade = 32-(totalclock.Ticks() &63);
             viewDrawText(3, m_pzStrings[k], m_nX, y, shade, 0, 0, false);
         }
         else
@@ -2396,13 +2396,13 @@ bool CGameMenuItemZCycleSelect::MouseEvent(CGameMenuEvent &event)
     event.at0 = kMenuEventNone;
     if (MOUSEACTIVECONDITIONAL(MOUSE_GetButtons()&WHEELUP_MOUSE))
     {
-        gGameMenuMgr.m_mouselastactivity = totalclock;
+        gGameMenuMgr.m_mouselastactivity = totalclock.Ticks();
         MOUSE_ClearButton(WHEELUP_MOUSE);
         event.at0 = kMenuEventScrollUp;
     }
     else if (MOUSEACTIVECONDITIONAL(MOUSE_GetButtons()&WHEELDOWN_MOUSE))
     {
-        gGameMenuMgr.m_mouselastactivity = totalclock;
+        gGameMenuMgr.m_mouselastactivity = totalclock.Ticks();
         MOUSE_ClearButton(WHEELDOWN_MOUSE);
         event.at0 = kMenuEventScrollDown;
     }
@@ -2464,7 +2464,7 @@ void CGameMenuItemZCycle::Draw(void)
     int shade = bEnable ? 32 : 48;
     int pal = bEnable ? 0 : 5;
     if (pMenu->IsFocusItem(this))
-        shade = 32-(totalclock&63);
+        shade = 32-(totalclock.Ticks() &63);
     int x = m_nX;
     int y = m_nY;
 
@@ -2666,7 +2666,7 @@ void CGameMenuItemYesNoQuit::Draw(void)
     if (!m_pzText) return;
     int shade = 32;
     if (pMenu->IsFocusItem(this))
-        shade = 32-(totalclock&63);
+        shade = 32-(totalclock.Ticks() &63);
     int width;
     int x = m_nX;
     switch (at20)
@@ -2859,7 +2859,7 @@ void CGameMenuItemPassword::Draw(void)
 {
     bool focus = pMenu->IsFocusItem(this);
     int shade = 32;
-    int shadef = 32-(totalclock&63);
+    int shadef = 32-(totalclock.Ticks() &63);
     int width;
     switch (at37)
     {
@@ -2886,12 +2886,12 @@ void CGameMenuItemPassword::Draw(void)
         shadef = 32;
         break;
     case 4:
-        if ((totalclock - at5b) & 32)
+        if ((totalclock.Ticks() - at5b) & 32)
         {
             gMenuTextMgr.GetFontInfo(m_nFont, kInvalidPasswordMsg, &width, NULL);
             gMenuTextMgr.DrawText(kInvalidPasswordMsg, m_nFont, m_nX - width / 2, m_nY + 20, shade, 0, false);
         }
-        if (at5b && totalclock-at5b > 256)
+        if (at5b && totalclock.Ticks() -at5b > 256)
         {
             at5b = 0;
             at37 = 0;
@@ -2934,7 +2934,7 @@ bool CGameMenuItemPassword::Event(CGameMenuEvent &event)
                     at37 = 4;
                 if (!at36)
                 {
-                    at5b = totalclock;
+                    at5b = totalclock.Ticks();
                     pMenu->FocusPrevItem();
                 }
                 else
@@ -2962,7 +2962,7 @@ bool CGameMenuItemPassword::Event(CGameMenuEvent &event)
                     at37 = 0;
                 }
                 else
-                    at5b = totalclock;
+                    at5b = totalclock.Ticks();
                 return false;
             case 3:
                 strcpy(at20, at29);
diff --git a/source/blood/src/gamemenu.h b/source/blood/src/gamemenu.h
index f9163df24..f6a7ff076 100644
--- a/source/blood/src/gamemenu.h
+++ b/source/blood/src/gamemenu.h
@@ -39,8 +39,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 // alpha increments of 3 --> 255 / 3 = 85 --> round up to power of 2 --> 128 --> divide by 2 --> 64 alphatabs required
 // use 16 anyway :P
 #define MOUSEUSEALPHA (videoGetRenderMode() != REND_CLASSIC || numalphatabs >= 15)
-#define MOUSEALPHA (MOUSEUSEALPHA ? clamp((totalclock - gGameMenuMgr.m_mouselastactivity - 90)*3, 0, 255) : 0)
-#define CURSORALPHA (MOUSEUSEALPHA ? clamp((totalclock - gGameMenuMgr.m_mouselastactivity - 90)*2 + (255/3), (255/3), 255) : 255/3)
+#define MOUSEALPHA (MOUSEUSEALPHA ? clamp((totalclock.Ticks() - gGameMenuMgr.m_mouselastactivity - 90)*3, 0, 255) : 0)
+#define CURSORALPHA (MOUSEUSEALPHA ? clamp((totalclock.Ticks() - gGameMenuMgr.m_mouselastactivity - 90)*2 + (255/3), (255/3), 255) : 255/3)
 #define MOUSEACTIVECONDITION (totalclock - gGameMenuMgr.m_mouselastactivity < M_MOUSETIMEOUT)
 #define MOUSEACTIVECONDITIONAL(condition) (MOUSEACTIVECONDITION && (condition))
 #define MOUSEINACTIVECONDITIONAL(condition) (!MOUSEACTIVECONDITION && (condition))
diff --git a/source/build/include/clockticks.hpp b/source/build/include/clockticks.hpp
index f116f9fc0..8c98200d5 100644
--- a/source/build/include/clockticks.hpp
+++ b/source/build/include/clockticks.hpp
@@ -131,6 +131,7 @@ public:
 
     explicit operator uint32_t() const { return wholeTicks; };
     explicit operator int32_t() const { return wholeTicks; };
+	int32_t Ticks() const { return wholeTicks; }
 
 private:
     //POGO: wholeTicks must be first in member-order to ensure the address of