# HG changeset patch # User Nomad # Date 1360623480 -7200 # Node ID 7eeea515f5ff2ffbeaaf2453ecd34a5a9908e71a # Parent a8ec7e1e18b65d181352f85670c47ebbd9495a98 Refactored strafe diff -r a8ec7e1e18b6 -r 7eeea515f5ff mm7_3.cpp --- a/mm7_3.cpp Tue Feb 12 00:22:30 2013 +0200 +++ b/mm7_3.cpp Tue Feb 12 00:58:00 2013 +0200 @@ -3003,14 +3003,14 @@ int v6; // esi@45 ODMFace *v7; // ecx@45 //unsigned int v8; // eax@71 - double v9; // st7@72 + //double v9; // st7@72 //signed __int64 v10; // qax@74 - double v11; // st7@75 - int v12; // ecx@77 - int v13; // eax@84 - double v14; // st7@84 - int v15; // eax@87 - double v16; // st7@87 + //double v11; // st7@75 + //int v12; // ecx@77 + //int v13; // eax@84 + //double v14; // st7@84 + //int v15; // eax@87 + //double v16; // st7@87 int v17; // eax@88 double v18; // st7@88 int v19; // eax@89 @@ -3311,7 +3311,7 @@ break; case PARTY_FlyDown: - if ( (signed __int64)pParty->pPartyBuffs[7].uExpireTime > 0 || bUnderwater == 1 ) + if (pParty->FlyActive() || bUnderwater) { pParty->bFlying = 0; if ( bUnderwater @@ -3331,85 +3331,86 @@ } } } - goto LABEL_118; + break; + case PARTY_TurnLeft: - //v8 = uTurnSpeed; - if ( uTurnSpeed ) - { - v12 = uTurnSpeed + _angle_y; - _angle_y = stru_5C6E00->uDoublePiMask & v12; - } - else - { - v9 = (double)dturn * fTurnSpeedMultiplier; - _angle_y = stru_5C6E00->uDoublePiMask & (_angle_y + (unsigned __int64)(signed __int64)v9); - } - break; + if (uTurnSpeed) + _angle_y += uTurnSpeed; //descrete turn + else + _angle_y += dturn * fTurnSpeedMultiplier; // time-based smooth turn + + _angle_y &= stru_5C6E00->uDoublePiMask; + break; case PARTY_TurnRight: - //LODWORD(v10) = uTurnSpeed; - if ( uTurnSpeed ) - { - v12 = _angle_y - uTurnSpeed; - _angle_y = stru_5C6E00->uDoublePiMask & v12; - } - else - { - v11 = (double)dturn * fTurnSpeedMultiplier; - v12 = _angle_y - (signed __int64)v11; - _angle_y = stru_5C6E00->uDoublePiMask & v12; - } - break; + if (uTurnSpeed) + _angle_y -= uTurnSpeed; + else + _angle_y -= dturn * fTurnSpeedMultiplier; + + _angle_y &= stru_5C6E00->uDoublePiMask; + break; case PARTY_FastTurnLeft: - if ( uTurnSpeed ) - { - v12 = uTurnSpeed + _angle_y; - _angle_y = stru_5C6E00->uDoublePiMask & v12; - } - else - { - v9 = (fTurnSpeedMultiplier + fTurnSpeedMultiplier) * (double)dturn; - _angle_y = stru_5C6E00->uDoublePiMask & (_angle_y + (unsigned __int64)(signed __int64)v9); - } - break; + if (uTurnSpeed) + _angle_y += uTurnSpeed; + else + _angle_y += 2.0f * fTurnSpeedMultiplier * (double)dturn; + + _angle_y &= stru_5C6E00->uDoublePiMask; + break; case PARTY_FastTurnRight: - if ( !uTurnSpeed ) - { - v11 = (fTurnSpeedMultiplier + fTurnSpeedMultiplier) * (double)dturn; - v12 = _angle_y - (signed __int64)v11; - _angle_y = stru_5C6E00->uDoublePiMask & v12; - } - else - { - v12 = _angle_y - uTurnSpeed; - _angle_y = stru_5C6E00->uDoublePiMask & v12; - } - break; + if (!uTurnSpeed) + _angle_y -= 2.0f * fTurnSpeedMultiplier * (double)dturn; + else + _angle_y -= uTurnSpeed; + + _angle_y &= stru_5C6E00->uDoublePiMask; + break; case PARTY_StrafeLeft: - v13 = stru_5C6E00->SinCos(_angle_y - stru_5C6E00->uIntegerHalfPi); - v14 = (double)_walk_speed; - v126 = v13; - *(float *)&v128 = v14; - v124 = (unsigned __int64)(v13 * (signed __int64)((signed int)(signed __int64)(v14 * fWalkSpeedMultiplier) >> 1)) >> 16; - v2 -= v124; - v126 = stru_5C6E00->SinCos(_angle_y); - v124 = (unsigned __int64)(v126 - * (signed __int64)((signed int)(signed __int64)(*(float *)&v128 * fWalkSpeedMultiplier) >> 1)) >> 16; - goto LABEL_85; + { + //v13 = stru_5C6E00->SinCos(_angle_y - stru_5C6E00->uIntegerHalfPi); + //v14 = (double)_walk_speed; + *(float *)&v128 = pParty->uWalkSpeed; + + float sin_y = sinf(2 * 3.141592653589 * _angle_y / 2048.0); + int dx = sin_y * pParty->uWalkSpeed * fWalkSpeedMultiplier; + v2 -= 3 * dx / 4; + + float cos_y = cosf(2 * 3.141592653589 * _angle_y / 2048.0); + int dy = cos_y * pParty->uWalkSpeed * fWalkSpeedMultiplier; + v1 += 3 * dy / 4; + + v128 = v1; + v124 = 1; + } + break; + case PARTY_StrafeRight: - v15 = stru_5C6E00->SinCos(_angle_y - stru_5C6E00->uIntegerHalfPi); - v16 = (double)_walk_speed; - v126 = v15; - *(float *)&v128 = v16; - v124 = (unsigned __int64)(v15 * (signed __int64)((signed int)(signed __int64)(v16 * fWalkSpeedMultiplier) >> 1)) >> 16; + { + //v126 = stru_5C6E00->SinCos(_angle_y - stru_5C6E00->uIntegerHalfPi); + *(float *)&v128 = pParty->uWalkSpeed; + /*v124 = (unsigned __int64)(v126 * (signed __int64)((signed int)(signed __int64)(pParty->uWalkSpeed * fWalkSpeedMultiplier) >> 1)) >> 16; v2 += v124; v126 = stru_5C6E00->SinCos(_angle_y); v124 = (unsigned __int64)(v126 * (signed __int64)((signed int)(signed __int64)(*(float *)&v128 * fWalkSpeedMultiplier) >> 1)) >> 16; - goto LABEL_90; + v1 -= v124;*/ + float sin_y = sinf(2 * 3.141592653589 * _angle_y / 2048.0); + int dx = sin_y * pParty->uWalkSpeed * fWalkSpeedMultiplier; + v2 += 3 * dx / 4; + + float cos_y = cosf(2 * 3.141592653589 * _angle_y / 2048.0); + int dy = cos_y * pParty->uWalkSpeed * fWalkSpeedMultiplier; + v1 -= 3 * dy / 4; + + v128 = v1; + v124 = 1; + } + break; + case PARTY_WalkForward: v17 = stru_5C6E00->SinCos(_angle_y); v18 = (double)_walk_speed; @@ -3420,9 +3421,11 @@ v126 = stru_5C6E00->SinCos(_angle_y - stru_5C6E00->uIntegerHalfPi); v124 = (unsigned __int64)(v126 * (signed __int64)(signed int)(signed __int64)(*(float *)&v128 * fWalkSpeedMultiplier)) >> 16; -LABEL_85: v1 += v124; - goto LABEL_86; + v128 = v1; + v124 = 1; + break; + case PARTY_WalkBackward: v19 = stru_5C6E00->SinCos(_angle_y); v20 = (double)_walk_speed; @@ -3435,9 +3438,11 @@ v124 = (unsigned __int64)(v126 * (signed __int64)(signed int)(signed __int64)(*(float *)&v128 * fBackwardWalkSpeedMultiplier)) >> 16; -LABEL_90: v1 -= v124; - goto LABEL_86; + v128 = v1; + v124 = 1; + break; + case PARTY_RunForward: if ( pParty->bFlying ) { @@ -3470,7 +3475,9 @@ v129 = (unsigned __int64)(v126 * (signed __int64)(signed int)(signed __int64)(*(float *)&v128 * fWalkSpeedMultiplier)) >> 16; v1 += v129; - goto LABEL_86; + v128 = v1; + v124 = 1; + break; } v25 = stru_5C6E00->SinCos(_angle_y); v26 = (double)_walk_speed; @@ -3490,6 +3497,7 @@ v114 = 1; v128 = v1; break; + case PARTY_RunBackward: v27 = stru_5C6E00->SinCos(_angle_y); v28 = (double)_walk_speed; @@ -3518,7 +3526,7 @@ * (signed __int64)(signed int)(signed __int64)(*(float *)&v128 * fBackwardWalkSpeedMultiplier)) >> 16; v1 -= v129; -LABEL_86: +//LABEL_86: v128 = v1; v124 = 1; }