changeset 70:47736b43558d

Party movement & ItemsTable::GenerateItem stack fix
author Nomad
date Sat, 27 Oct 2012 20:48:36 +0200
parents efefae49c990
children 8453114181af f6758e4c6506
files Items.cpp mm7_3.cpp mm7_data.cpp mm7_data.h
diffstat 4 files changed, 112 insertions(+), 108 deletions(-) [+]
line wrap: on
line diff
--- a/Items.cpp	Sat Oct 27 19:24:11 2012 +0200
+++ b/Items.cpp	Sat Oct 27 20:48:36 2012 +0200
@@ -1868,7 +1868,7 @@
   unsigned int v48; // ecx@123
   int v49; // eax@123
   int v50; // eax@123
-  unsigned int Dst; // [sp+Ch] [bp-C88h]@33
+  unsigned char Dst[0xC80]; // [sp+Ch] [bp-C88h]@33
   int v52; // [sp+C8Ch] [bp-8h]@33
   int v53; // [sp+C90h] [bp-4h]@1
   int v54; // [sp+C9Ch] [bp+8h]@3
@@ -2021,13 +2021,13 @@
     v10 = 0;
     if ( v52 )
       v10 = rand() % v52;
-    v4->uItemID = Dst;
+    v4->uItemID = *(uint *)Dst;
     if ( !Dst )
       v4->uItemID = 1;
     v11 = *(&v5->pItems[v4->uItemID].field_2C + v54);
     if ( v11 < v10 )
     {
-      v12 = &Dst;
+      v12 = (uint *)Dst;
       do
       {
         ++v12;
@@ -2226,9 +2226,9 @@
     while ( a2b < v5->field_11798 );
   }
   v45 = rand();
-  v4->uAdditionalValue = Dst;
+  v4->uAdditionalValue = *(uint *)Dst;
   v46 = v45 % v39 + 1;
-  a2c = *((unsigned char *)&v5->pItems[0].uItemID + 28 * (Dst + 1389) + v5->pItems[v4->uItemID].uEquipType);
+  a2c = *((unsigned char *)&v5->pItems[0].uItemID + 28 * (*(uint *)Dst + 1389) + v5->pItems[v4->uItemID].uEquipType);
   if ( a2c < v46 )
   {
     for ( j = (int *)&Dst; ; j = (int *)v59 )
--- a/mm7_3.cpp	Sat Oct 27 19:24:11 2012 +0200
+++ b/mm7_3.cpp	Sat Oct 27 20:48:36 2012 +0200
@@ -2384,15 +2384,15 @@
   int v26; // eax@67
   double v27; // st7@67
   int v28; // ST40_4@67
-  int v29; // eax@69
-  double v30; // st7@69
-  int v31; // ST3C_4@69
-  int v32; // eax@71
-  double v33; // st7@71
-  int v34; // ST3C_4@71
+  //int v29; // eax@69
+  //double v30; // st7@69
+  //int v31; // ST3C_4@69
+  //int v32; // eax@71
+  //double v33; // st7@71
+  //int v34; // ST3C_4@71
   unsigned int v35; // eax@74
   int v36; // ecx@88
-  int v37; // esi@96
+  int new_party_z; // esi@96
   int v38; // eax@96
   int v39; // ecx@106
   int v40; // eax@106
@@ -2438,30 +2438,30 @@
   int i; // [sp+34h] [bp-2Ch]@1
   int v81; // [sp+38h] [bp-28h]@47
   int v82; // [sp+3Ch] [bp-24h]@47
-  int v83; // [sp+40h] [bp-20h]@47
+  int _view_angle; // [sp+40h] [bp-20h]@47
   int bJumping; // [sp+44h] [bp-1Ch]@1
-  int v85; // [sp+48h] [bp-18h]@1
-  int v86; // [sp+4Ch] [bp-14h]@1
-  int v87; // [sp+50h] [bp-10h]@1
-  float v88; // [sp+54h] [bp-Ch]@62
+  int new_party_y; // [sp+48h] [bp-18h]@1
+  int new_party_x; // [sp+4Ch] [bp-14h]@1
+  int party_z; // [sp+50h] [bp-10h]@1
+  //float v88; // [sp+54h] [bp-Ch]@62
   int v89; // [sp+58h] [bp-8h]@1
   int angle; // [sp+5Ch] [bp-4h]@47
 
   v0 = pParty->vPosition.z;
   v89 = pParty->uFallSpeed;
   v1 = 0;
-  v85 = pParty->vPosition.y;
+  new_party_y = pParty->vPosition.y;
   v70 = 0;
   v2 = 0;
-  v86 = pParty->vPosition.x;
-  v87 = pParty->vPosition.z;
+  new_party_x = pParty->vPosition.x;
+  party_z = pParty->vPosition.z;
   v77 = pIndoor->GetSector(pParty->vPosition.x, pParty->vPosition.y, pParty->vPosition.z);
   v72 = 0;
   v78 = 0;
   v71 = 0;
   bJumping = 0;
   v3 = v0 + 40;
-  i = _46ED1B_collide_against_floor(v86, v85, v3, &v77, &v79);
+  i = _46ED1B_collide_against_floor(new_party_x, new_party_y, v3, &v77, &v79);
   if ( pParty->bFlying )
   {
     pParty->bFlying = 0;
@@ -2470,7 +2470,7 @@
   }
   if ( i == -30000 )
   {
-    i = _47272C_collide_agains_some_secotors_floors(v86, v85, v3, &v77, &v79);
+    i = _47272C_collide_agains_some_secotors_floors(new_party_x, new_party_y, v3, &v77, &v79);
     if ( i == -30000 )
     {
       pParty->vPosition.x = blv_prev_party_x;
@@ -2516,7 +2516,7 @@
   bFeatherFall = 1;
   pParty->uFallStartY = i;
 LABEL_20:
-  if ( v6 - v87 > 512 && !bFeatherFall && v87 <= i + 1 )
+  if ( v6 - party_z > 512 && !bFeatherFall && party_z <= i + 1 )
   {
     if ( BYTE1(pParty->uFlags) & 1 )
     {
@@ -2530,7 +2530,7 @@
         if ( !(*v7)->HasEnchantedItemEquipped(72) && !(*v7)->WearsItem(529, 8) )
         {
           v8 = (signed __int64)((double)(*v7)->GetMaxHealth() * 0.1);
-          (*v7)->ReceiveDamage((pParty->uFallStartY - v87) * (signed int)v8 / 256, 4);
+          (*v7)->ReceiveDamage((pParty->uFallStartY - party_z) * (signed int)v8 / 256, 4);
           v9 = (*v7)->GetActualEndurance();
           v10 = (double)(20 - (*v7)->_48EA1B_get_static_effect(v9)) * flt_6BE3A4_debug_recmod1 * 2.133333333333333;
           (*v7)->SetRecoveryTime((signed __int64)v10);
@@ -2540,21 +2540,21 @@
       while ( (signed int)v7 <= (signed int)&pPlayers[4] );
     }
   }
-  if ( v87 > i + 1 )
+  if ( party_z > i + 1 )
     bJumping = 1;
-  bFeatherFalla = v87 - i <= 32;
-  if ( v87 - i <= 32 )
-    pParty->uFallStartY = v87;
+  bFeatherFalla = party_z - i <= 32;
+  if ( party_z - i <= 32 )
+    pParty->uFallStartY = party_z;
   if ( bWalkSound && pParty->field_6F8 > 0 )
     pParty->field_6F8 -= pEventTimer->uTimeElapsed;
-  if ( v87 > i + 1 )
+  if ( party_z > i + 1 )
   {
 LABEL_43:
     if ( bJumping )
       goto LABEL_45;
     goto LABEL_44;
   }
-  v87 = i + 1;
+  party_z = i + 1;
   pParty->uFallStartY = i + 1;
   if ( bJumping )
     goto LABEL_45;
@@ -2575,7 +2575,7 @@
     v71 = 1;
   v81 = pParty->uWalkSpeed;
   angle = pParty->sRotationY;
-  v83 = pParty->sRotationX;
+  _view_angle = pParty->sRotationX;
   v82 = (unsigned __int64)(pEventTimer->dt_in_some_format
                          * (signed __int64)((signed int)(pParty->field_20_prolly_turn_speed * stru_5C6E00->uIntegerPi)
                                           / 180)) >> 16;
@@ -2585,18 +2585,21 @@
     switch ( pPartyActionQueue->Next() )
     {
       case PARTY_TurnLeft:
+        __debugbreak();
         v12 = uTurnSpeed;
         if ( uTurnSpeed )
           goto LABEL_58;
         v13 = (double)v82 * fTurnSpeedMultiplier;
         goto LABEL_51;
       case PARTY_TurnRight:
+        __debugbreak();
         LODWORD(v15) = uTurnSpeed;
         if ( uTurnSpeed )
           goto LABEL_56;
         v16 = (double)v82 * fTurnSpeedMultiplier;
         goto LABEL_55;
       case PARTY_FastTurnLeft:
+        __debugbreak();
         v12 = uTurnSpeed;
         if ( uTurnSpeed )
         {
@@ -2612,6 +2615,7 @@
         angle = stru_5C6E00->uDoublePiMask & v14;
         goto LABEL_87;
       case PARTY_FastTurnRight:
+        __debugbreak();
         LODWORD(v15) = uTurnSpeed;
         if ( !uTurnSpeed )
         {
@@ -2623,80 +2627,77 @@
         angle = stru_5C6E00->uDoublePiMask & (angle - v15);
         goto LABEL_87;
       case PARTY_StrafeLeft:
+        __debugbreak();
         v17 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi);
         v18 = (double)v81;
-        v88 = v18;
+        //v88 = v18;
         v78 = (unsigned __int64)(v17 * (signed __int64)((signed int)(signed __int64)(v18 * fWalkSpeedMultiplier) >> 1)) >> 16;
         v2 -= v78;
         v19 = stru_5C6E00->SinCos(angle);
-        v78 = (unsigned __int64)(v19 * (signed __int64)((signed int)(signed __int64)(v88 * fWalkSpeedMultiplier) >> 1)) >> 16;
+        v78 = (unsigned __int64)(v19 * (signed __int64)((signed int)(signed __int64)(v18 * fWalkSpeedMultiplier) >> 1)) >> 16;
         goto LABEL_63;
       case PARTY_StrafeRight:
+        __debugbreak();
         v20 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi);
         v21 = (double)v81;
-        v88 = v21;
+        //v88 = v21;
         v78 = (unsigned __int64)(v20 * (signed __int64)((signed int)(signed __int64)(v21 * fWalkSpeedMultiplier) >> 1)) >> 16;
         v2 += v78;
         v22 = stru_5C6E00->SinCos(angle);
-        v78 = (unsigned __int64)(v22 * (signed __int64)((signed int)(signed __int64)(v88 * fWalkSpeedMultiplier) >> 1)) >> 16;
+        v78 = (unsigned __int64)(v22 * (signed __int64)((signed int)(signed __int64)(v21 * fWalkSpeedMultiplier) >> 1)) >> 16;
         goto LABEL_68;
       case PARTY_WalkForward:
+        __debugbreak();
         v23 = stru_5C6E00->SinCos(angle);
         v24 = (double)v81;
-        v88 = v24;
+        //v88 = v24;
         v78 = (unsigned __int64)(v23 * (signed __int64)(signed int)(signed __int64)(v24 * fWalkSpeedMultiplier)) >> 16;
         v2 += v78;
         v25 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi);
-        v78 = (unsigned __int64)(v25 * (signed __int64)(signed int)(signed __int64)(v88 * fWalkSpeedMultiplier)) >> 16;
+        v78 = (unsigned __int64)(v25 * (signed __int64)(signed int)(signed __int64)(v24 * fWalkSpeedMultiplier)) >> 16;
 LABEL_63:
         v1 += v78;
         goto LABEL_64;
       case PARTY_WalkBackward:
+        __debugbreak();
         v26 = stru_5C6E00->SinCos(angle);
         v27 = (double)v81;
-        v88 = v27;
+        //v88 = v27;
         v78 = (unsigned __int64)(v26
-                               * (signed __int64)(signed int)(signed __int64)(v27 * fBackwardMovementSlowdownMultiplier)) >> 16;
+                               * (signed __int64)(signed int)(signed __int64)(v27 * fBackwardWalkSpeedMultiplier)) >> 16;
         v2 -= v78;
         v28 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi);
         v78 = (unsigned __int64)(v28
-                               * (signed __int64)(signed int)(signed __int64)(v88 * fBackwardMovementSlowdownMultiplier)) >> 16;
+                               * (signed __int64)(signed int)(signed __int64)(v27 * fBackwardWalkSpeedMultiplier)) >> 16;
 LABEL_68:
         v1 -= v78;
 LABEL_64:
         v78 = 1;
         goto LABEL_87;
       case PARTY_RunForward:
-        v29 = stru_5C6E00->SinCos(angle);
-        v30 = (double)v81;
-        v88 = v30;
-        v2 += (unsigned __int64)(v29
-                               * (signed __int64)(signed int)(2
-                                                            * (unsigned __int64)(signed __int64)(v30
-                                                                                               * fWalkSpeedMultiplier))) >> 16;
-        v31 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi);
-        v1 += (unsigned __int64)(v31
-                               * (signed __int64)(signed int)(2
-                                                            * (unsigned __int64)(signed __int64)(v88
-                                                                                               * fWalkSpeedMultiplier))) >> 16;
+        //v29 = stru_5C6E00->SinCos(angle);
+        //v30 = (double)v81;
+        //v88 = (double)v81;
+        v2 += (unsigned __int64)(stru_5C6E00->SinCos(angle) * (signed __int64)(signed int)(2 * (unsigned __int64)(signed __int64)((double)v81 * fWalkSpeedMultiplier))) >> 16;
+        //v31 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi);
+        v1 += (unsigned __int64)(stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi) * (signed __int64)(signed int)(2 * (unsigned __int64)(signed __int64)((double)v81 * fWalkSpeedMultiplier))) >> 16;
         v72 = 1;
         goto LABEL_87;
       case PARTY_RunBackward:
-        v32 = stru_5C6E00->SinCos(angle);
-        v33 = (double)v81;
-        v88 = v33;
-        v2 -= (unsigned __int64)(v32
-                               * (signed __int64)(signed int)(signed __int64)(v33 * fBackwardMovementSlowdownMultiplier)) >> 16;
-        v34 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi);
-        v1 -= (unsigned __int64)(v34
-                               * (signed __int64)(signed int)(signed __int64)(v88 * fBackwardMovementSlowdownMultiplier)) >> 16;
+        //v32 = stru_5C6E00->SinCos(angle);
+        //v33 = (double)v81;
+        //v88 = (double)v81;
+        v2 -= (unsigned __int64)(stru_5C6E00->SinCos(angle) * (signed __int64)(signed int)(signed __int64)((double)v81 * fBackwardWalkSpeedMultiplier)) >> 16;
+        //v34 = stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi);
+        v1 -= (unsigned __int64)(stru_5C6E00->SinCos(angle - stru_5C6E00->uIntegerHalfPi) * (signed __int64)(signed int)(signed __int64)((double)v81 * fBackwardWalkSpeedMultiplier)) >> 16;
 //LABEL_70:
         v72 = 1;
         goto LABEL_87;
       case PARTY_LookUp:
-        v83 += (signed __int64)(flt_6BE150_look_up_down_dangle * 25.0);
-        if ( v83 > 128 )
-          v83 = 128;
+        __debugbreak();
+        _view_angle += (signed __int64)(flt_6BE150_look_up_down_dangle * 25.0);
+        if ( _view_angle > 128 )
+          _view_angle = 128;
         v35 = uActiveCharacter;
         if ( !uActiveCharacter )
           goto LABEL_87;
@@ -2704,9 +2705,10 @@
         v63 = 63;
         goto LABEL_76;
       case PARTY_LookDown:
-        v83 += (signed __int64)(flt_6BE150_look_up_down_dangle * -25.0);
-        if ( v83 < -128 )
-          v83 = -128;
+        __debugbreak();
+        _view_angle += (signed __int64)(flt_6BE150_look_up_down_dangle * -25.0);
+        if ( _view_angle < -128 )
+          _view_angle = -128;
         v35 = uActiveCharacter;
         if ( uActiveCharacter )
         {
@@ -2717,10 +2719,12 @@
         }
         break;
       case PARTY_CenterView:
-        v83 = 0;
+        __debugbreak();
+        _view_angle = 0;
         break;
       case PARTY_Jump:
-        if ( (!bJumping || v87 <= i + 6 && v89 <= 0) && pParty->field_24 )
+        __debugbreak();
+        if ( (!bJumping || party_z <= i + 6 && v89 <= 0) && pParty->field_24 )
         {
           bJumping = 1;
           v89 = (signed __int64)((double)(pParty->field_24 << 6) * 1.5 + (double)v89);
@@ -2732,7 +2736,7 @@
   }
   v36 = 0;
   pParty->sRotationY = angle;
-  pParty->sRotationX = v83;
+  pParty->sRotationX = _view_angle;
   if ( bJumping )
   {
     v89 += -2 * pEventTimer->uTimeElapsed * GetGravityStrength();
@@ -2764,7 +2768,7 @@
     goto LABEL_93;
   }
 LABEL_92:
-  pParty->uFallStartY = v87;
+  pParty->uFallStartY = party_z;
 LABEL_93:
   if ( v2 * v2 + v1 * v1 < 400 )
   {
@@ -2775,20 +2779,20 @@
   stru_721530.field_70 = 0;
   stru_721530.prolly_normal_d = pParty->field_14;
   stru_721530.field_8 = pParty->field_14 >> 1;
-  v83 = 0;
+  auto v83 = 0;
   stru_721530.field_0 = 1;
   stru_721530.field_C = pParty->uPartyHeight - 32;
   while ( 1 )
   {
-    v37 = v87;
-    stru_721530.field_34.x = v86;
-    stru_721530.normal.x = v86;
+    new_party_z = party_z;
+    stru_721530.field_34.x = new_party_x;
+    stru_721530.normal.x = new_party_x;
     stru_721530.field_1C = v2;
-    stru_721530.field_34.y = v85;
-    stru_721530.normal.y = v85;
+    stru_721530.field_34.y = new_party_y;
+    stru_721530.normal.y = new_party_y;
     stru_721530.field_20 = v1;
-    stru_721530.normal.z = stru_721530.prolly_normal_d + v87 + 1;
-    stru_721530.field_34.z = stru_721530.field_C + v87 + 1;
+    stru_721530.normal.z = stru_721530.prolly_normal_d + party_z + 1;
+    stru_721530.field_34.z = stru_721530.field_C + party_z + 1;
     stru_721530.field_24 = v89;
     stru_721530.uSectorID = v77;
     v38 = 0;
@@ -2816,26 +2820,26 @@
     }
     else
     {
-      v39 = ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.x) >> 16) + v86;
-      v77 = v85 + ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.y) >> 16);
-      v40 = v37 + ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.z) >> 16);
+      v39 = ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.x) >> 16) + new_party_x;
+      v77 = new_party_y + ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.y) >> 16);
+      v40 = new_party_z + ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.z) >> 16);
     }
     v42 = _46ED1B_collide_against_floor(v39, v77, v40 + 40, &stru_721530.uSectorID, &v79);
-    if ( v42 == -30000 || v42 - v37 > 128 )
+    if ( v42 == -30000 || v42 - new_party_z > 128 )
       return;
     if ( stru_721530.field_7C >= stru_721530.field_6C )
     {
-      v86 = stru_721530.normal2.x;
-      v85 = stru_721530.normal2.y;
-      v37 = stru_721530.normal2.z - stru_721530.prolly_normal_d - 1;
+      new_party_x = stru_721530.normal2.x;
+      new_party_y = stru_721530.normal2.y;
+      new_party_z = stru_721530.normal2.z - stru_721530.prolly_normal_d - 1;
       break;
     }
-    v86 += (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.x) >> 16;
-    v85 += (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.y) >> 16;
+    new_party_x += (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.x) >> 16;
+    new_party_y += (unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.y) >> 16;
     v43 = stru_721530.uFaceID;
     v77 = stru_721530.uSectorID;
     stru_721530.field_70 += stru_721530.field_7C;
-    v87 = ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.z) >> 16) + v37;
+    auto v87 = ((unsigned __int64)(stru_721530.field_7C * (signed __int64)stru_721530.field_58.z) >> 16) + new_party_z;
     if ( (stru_721530.uFaceID & 7) == 3 )
     {
       if ( SHIDWORD(pParty->pPartyBuffs[11].uExpireTime) >= 0
@@ -2849,8 +2853,8 @@
       v53 = sub_452A9E(v2 * v2 + v1 * v1);
       i = v53;
       v54 = stru_5C6E00->Atan2(
-              v86 - pLevelDecorations[(signed int)stru_721530.uFaceID >> 3].vPosition.x,
-              v85 - pLevelDecorations[(signed int)stru_721530.uFaceID >> 3].vPosition.y);
+              new_party_x - pLevelDecorations[stru_721530.uFaceID >> 3].vPosition.x,
+              new_party_y - pLevelDecorations[stru_721530.uFaceID >> 3].vPosition.y);
       v2 = (unsigned __int64)(stru_5C6E00->SinCos(v54) * (signed __int64)v53) >> 16;
       v55 = stru_5C6E00->SinCos(v54 - stru_5C6E00->uIntegerHalfPi);
       v1 = (unsigned __int64)(v55 * (signed __int64)i) >> 16;
@@ -2895,11 +2899,11 @@
           v69 = v44->pFacePlane_old.vNormal.x;
           i = v51;
           v1 += v81;
-          v52 = stru_721530.prolly_normal_d - ((v44->pFacePlane_old.dist + v87 * v74 + v85 * v51 + v86 * v69) >> 16);
+          v52 = stru_721530.prolly_normal_d - ((v44->pFacePlane_old.dist + v87 * v74 + new_party_y * v51 + new_party_x * v69) >> 16);
           if ( v52 > 0 )
           {
-            v86 += v52 * v69 >> 16;
-            v85 += v52 * i >> 16;
+            new_party_x += v52 * v69 >> 16;
+            new_party_y += v52 * i >> 16;
             v87 += v52 * v74 >> 16;
           }
 LABEL_142:
@@ -2934,16 +2938,16 @@
     v89 = (unsigned __int64)(58500i64 * v89) >> 16;
     if ( v83 >= 100 )
     {
-      v37 = v87;
+      new_party_z = v87;
       break;
     }
   }
   if ( bWalkSound && pParty->field_6F8 <= 0 )
   {
-    if ( sub_452A9E((pParty->vPosition.x - v86) * (pParty->vPosition.x - v86) + (pParty->vPosition.y - v85)
-                                                                            * (pParty->vPosition.y - v85)
-                                                                            + (pParty->vPosition.z - v37)
-                                                                            * (pParty->vPosition.z - v37)) <= 16 )
+    if ( sub_452A9E((pParty->vPosition.x - new_party_x) * (pParty->vPosition.x - new_party_x) + (pParty->vPosition.y - new_party_y)
+                                                                            * (pParty->vPosition.y - new_party_y)
+                                                                            + (pParty->vPosition.z - new_party_z)
+                                                                            * (pParty->vPosition.z - new_party_z)) <= 16 )
       goto LABEL_188;
     if ( v72 && (!bJumping || bFeatherFalla) )
     {
@@ -3002,9 +3006,9 @@
   else
     pParty->uFlags |= 8u;
   BYTE1(pParty->uFlags) &= 0xFDu;
-  pParty->vPosition.x = v86;
-  pParty->vPosition.z = v37;
-  pParty->vPosition.y = v85;
+  pParty->vPosition.x = new_party_x;
+  pParty->vPosition.z = new_party_z;
+  pParty->vPosition.y = new_party_y;
   pParty->uFallSpeed = v89;
   if ( !bJumping && BYTE3(pIndoor->pFaces[v79].uAttributes) & 0x40 )
     BYTE1(pParty->uFlags) |= 2u;
@@ -3422,12 +3426,12 @@
         v126 = v19;
         *(float *)&v128 = v20;
         v124 = (unsigned __int64)(v19
-                                * (signed __int64)(signed int)(signed __int64)(v20 * fBackwardMovementSlowdownMultiplier)) >> 16;
+                                * (signed __int64)(signed int)(signed __int64)(v20 * fBackwardWalkSpeedMultiplier)) >> 16;
         v2 -= v124;
         v126 = stru_5C6E00->SinCos(_angle_y - stru_5C6E00->uIntegerHalfPi);
         v124 = (unsigned __int64)(v126
                                 * (signed __int64)(signed int)(signed __int64)(*(float *)&v128
-                                                                             * fBackwardMovementSlowdownMultiplier)) >> 16;
+                                                                             * fBackwardWalkSpeedMultiplier)) >> 16;
 LABEL_90:
         v1 -= v124;
         goto LABEL_86;
@@ -3488,7 +3492,7 @@
         v28 = (double)_walk_speed;
         v126 = v27;
         *(float *)&v128 = v28;
-        v29 = (signed __int64)(v28 * fBackwardMovementSlowdownMultiplier);
+        v29 = (signed __int64)(v28 * fBackwardWalkSpeedMultiplier);
         if ( pParty->bFlying )
         {
           v129 = (unsigned __int64)(v126 * (signed __int64)(4 * (signed int)v29)) >> 16;
@@ -3497,7 +3501,7 @@
           v129 = (unsigned __int64)(v126
                                   * (signed __int64)(signed int)(4
                                                                * (unsigned __int64)(signed __int64)(*(float *)&v128
-                                                                                                  * fBackwardMovementSlowdownMultiplier))) >> 16;
+                                                                                                  * fBackwardWalkSpeedMultiplier))) >> 16;
           v1 -= v129;
 LABEL_93:
           v128 = v1;
@@ -3509,7 +3513,7 @@
           v126 = stru_5C6E00->SinCos(_angle_y - stru_5C6E00->uIntegerHalfPi);
           v129 = (unsigned __int64)(v126
                                   * (signed __int64)(signed int)(signed __int64)(*(float *)&v128
-                                                                               * fBackwardMovementSlowdownMultiplier)) >> 16;
+                                                                               * fBackwardWalkSpeedMultiplier)) >> 16;
           v1 -= v129;
 LABEL_86:
           v128 = v1;
--- a/mm7_data.cpp	Sat Oct 27 19:24:11 2012 +0200
+++ b/mm7_data.cpp	Sat Oct 27 20:48:36 2012 +0200
@@ -2336,7 +2336,7 @@
 int dword_6BE138; // weak
 int dword_6BE13C_uCurrentlyLoadedLocationID; // weak
 float fWalkSpeedMultiplier = 1.0f; // weak
-float fBackwardMovementSlowdownMultiplier = 1.0f; // weak
+float fBackwardWalkSpeedMultiplier = 1.0f; // weak
 float fTurnSpeedMultiplier = 1.0f; // weak
 float flt_6BE150_look_up_down_dangle = 1.0f; // weak
 HWND hWnd; // idb
--- a/mm7_data.h	Sat Oct 27 19:24:11 2012 +0200
+++ b/mm7_data.h	Sat Oct 27 20:48:36 2012 +0200
@@ -2287,7 +2287,7 @@
 extern int dword_6BE138; // weak
 extern int dword_6BE13C_uCurrentlyLoadedLocationID; // weak
 extern float fWalkSpeedMultiplier; // weak
-extern float fBackwardMovementSlowdownMultiplier; // weak
+extern float fBackwardWalkSpeedMultiplier; // weak
 extern float fTurnSpeedMultiplier; // weak
 extern float flt_6BE150_look_up_down_dangle; // weak
 //extern char pMM7WindowClassName[]; // idb