changeset 486:7887a9cf9e7b

Spells
author Nomad
date Wed, 27 Feb 2013 17:29:05 +0200
parents b6bdfaa3ae0f
children d5da524ec901 a3939d5067c4
files Indoor.cpp Indoor_stuff.h Player.cpp Spells.h mm7_1.cpp mm7_5.cpp mm7_6.cpp mm7_data.h stru6.cpp stru6.h
diffstat 10 files changed, 860 insertions(+), 822 deletions(-) [+]
line wrap: on
line diff
--- a/Indoor.cpp	Wed Feb 27 02:26:16 2013 +0400
+++ b/Indoor.cpp	Wed Feb 27 17:29:05 2013 +0200
@@ -316,9 +316,9 @@
   pRenderer->DrawBillboardList_BLV();
   if ( !pRenderer->pRenderD3D )
   {
-    if ( pBLVRenderParams->uFlags & 2 )
-      stru170_sub_4B0967();
-    if ( pBLVRenderParams->uFlags & 1 )
+    if (pBLVRenderParams->uFlags & INDOOR_CAMERA_DRAW_D3D_OUTLINES)
+      pBspRenderer->DrawFaceOutlines();
+    if (pBLVRenderParams->uFlags & INDOOR_CAMERA_DRAW_SW_OUTLINES)
     {
       v1 = pBLVRenderParams->pRenderTarget;
       v6 = 0;
@@ -1455,7 +1455,7 @@
               sub_440639(v31 - 1);
             }
           }
-          if ( pBLVRenderParams->uFlags & 1 )
+          if (pBLVRenderParams->uFlags & INDOOR_CAMERA_DRAW_SW_OUTLINES)
             pGame->pIndoorCameraD3D->PrepareAndDrawDebugOutline(pFace, 0x1E1EFF);
         }
       }
@@ -1614,7 +1614,7 @@
 }
 
 //----- (004B0967) --------------------------------------------------------
-void __cdecl stru170_sub_4B0967()
+void BspRenderer::DrawFaceOutlines()
 {
   signed int i; // edi@1
   int v1; // esi@2
--- a/Indoor_stuff.h	Wed Feb 27 02:26:16 2013 +0400
+++ b/Indoor_stuff.h	Wed Feb 27 17:29:05 2013 +0200
@@ -66,7 +66,7 @@
 
 /*  163 */
 #pragma pack(push, 1)
-struct BspRenderer
+struct BspRenderer // stru170
 {
   //----- (0043F282) --------------------------------------------------------
   inline BspRenderer()
@@ -82,6 +82,7 @@
   void PrepareFaceRenderList_sw(int a2, unsigned int uFaceID);
   void PrepareFaceRenderList_d3d(signed int a2, unsigned int uFaceID);
   void MakeVisibleSectorList();
+  void DrawFaceOutlines();
 
   unsigned int uNumFaceIDs;
   __int16 pFaceIDs[150];
--- a/Player.cpp	Wed Feb 27 02:26:16 2013 +0400
+++ b/Player.cpp	Wed Feb 27 17:29:05 2013 +0200
@@ -6498,7 +6498,11 @@
 
     switch (i)
     {
-      case PLAYER_SKILL_FIRE:   spellbook.pFireSpellbook.bIsSpellAvailable[0] = true;   break;
+      case PLAYER_SKILL_FIRE:   spellbook.pFireSpellbook.bIsSpellAvailable[0] = true;
+        spellbook.pFireSpellbook.bIsSpellAvailable[1] = true;
+        spellbook.pFireSpellbook.bIsSpellAvailable[2] = true;
+        spellbook.pFireSpellbook.bIsSpellAvailable[3] = true;
+        break;
       case PLAYER_SKILL_AIR:    spellbook.pAirSpellbook.bIsSpellAvailable[0] = true;    break;
       case PLAYER_SKILL_WATER:  spellbook.pWaterSpellbook.bIsSpellAvailable[0] = true;  break;
       case PLAYER_SKILL_EARTH:  spellbook.pEarthSpellbook.bIsSpellAvailable[0] = true;  break;
--- a/Spells.h	Wed Feb 27 02:26:16 2013 +0400
+++ b/Spells.h	Wed Feb 27 17:29:05 2013 +0200
@@ -5,31 +5,113 @@
 /*  360 */
 enum SPELL_TYPE
 {
-  SPELL_FIRE_PROTECTION_FROM_FIRE = 0x3,
-  SPELL_FIRE_HASTE = 0x5,
-  SPELL_FIRE_FIRE_RING = 0x8,
-  SPELL_AIR_FEATHER_FALL = 0xD,
-  SPELL_AIR_PROTECTION_FROM_AIR = 0xE,
-  SPELL_AIR_SHIELD = 0x11,
-  SPELL_WATER_PROTECTION_FROM_WATER = 0x19,
-  SPELL_WATER_WATER_WALK = 0x1B,
-  SPELL_EARTH_PROTECTION_FROM_EARTH = 0x24,
-  SPELL_EARTH_STONESKIN = 0x26,
-  SPELL_SPIRIT_DETECT_LIFE = 0x2D,
-  SPELL_SPIRIT_BLESS = 0x2E,
-  SPELL_SPIRIT_DOOM = 0x2F,
-  SPELL_SPIRIT_PRESERVE = 0x32,
-  SPELL_SPIRIT_HEROISM = 0x33,
-  SPELL_MIND_REMOVE_FEAR = 0x38,
-  SPELL_MIND_PROTECTION_FROM_MIND = 0x3A,
-  SPELL_MIND_CURE_PARALYSIS = 0x3D,
-  SPELL_BODY_CURE_WEAKNESS = 0x43,
-  SPELL_BODY_FIRST_AID = 0x44,
-  SPELL_BODY_CURE_POISON = 0x48,
-  SPELL_BODY_HAMMERHANDS = 0x49,
-  SPELL_BODY_CURE_DISEASE = 0x4A,
-  SPELL_BODY_PROTECTION_FROM_MAGIC = 0x4B,
-  SPELL_DARK_PAIN_REFLECTION = 0x5F,
+  SPELL_FIRE_TORCH_LIGHT = 1,
+  SPELL_FIRE_FIRE_BOLT = 2,
+  SPELL_FIRE_PROTECTION_FROM_FIRE = 3,
+  SPELL_FIRE_FIRE_AURA = 4,
+  SPELL_FIRE_HASTE = 5,
+  SPELL_FIRE_FIREBALL = 6,
+  SPELL_FIRE_FIRE_SPIKE = 7,
+  SPELL_FIRE_IMMOLATION = 8,
+  SPELL_FIRE_METEOR_SHOWER = 9,
+  SPELL_FIRE_INFERNO = 10,
+  SPELL_FIRE_INCINERATE = 11,
+
+  SPELL_AIR_WIZARD_EYE = 12,
+  SPELL_AIR_FEATHER_FALL = 13,
+  SPELL_AIR_PROTECTION_FROM_AIR = 14,
+  SPELL_AIR_SPARKS = 15,
+  SPELL_AIR_JUMP = 16,
+  SPELL_AIR_SHIELD = 17,
+  SPELL_AIR_LIGHNING_BOLT = 18,
+  SPELL_AIR_INVISIBILITY = 19,
+  SPELL_AIR_IMPLOSION = 20,
+  SPELL_AIR_FLY = 21,
+  SPELL_AIR_STARBURST = 22,
+
+  SPELL_WATER_AWAKEN = 23,
+  SPELL_WATER_POISON_SPRAY = 24,
+  SPELL_WATER_PROTECTION_FROM_WATER = 25,
+  SPELL_WATER_ICE_BOLT = 26,
+  SPELL_WATER_WATER_WALK = 27,
+  SPELL_WATER_RECHARGE_ITEM = 28,
+  SPELL_WATER_ACID_BURST = 29,
+  SPELL_WATER_ENCHANT_ITEM = 30,
+  SPELL_WATER_TOWN_PORTAL = 31,
+  SPELL_WATER_ICE_BLAST = 32,
+  SPELL_WATER_LLOYDS_BEACON = 33,
+
+  SPELL_EARTH_STUN = 34,
+  SPELL_EARTH_SLOW = 35,
+  SPELL_EARTH_PROTECTION_FROM_EARTH = 36,
+  SPELL_EARTH_DEADLY_SWARM = 37,
+  SPELL_EARTH_STONESKIN = 38,
+  SPELL_EARTH_BLADES = 39,
+  SPELL_EARTH_STONE_TO_FLESH = 40,
+  SPELL_EARTH_ROCK_BLAST = 41,
+  SPELL_EARTH_TELEKINESIS = 42,
+  SPELL_EARTH_DEATH_BLOSSOM = 43,
+  SPELL_EARTH_MASS_DISTORTION = 44,
+
+  SPELL_SPIRIT_DETECT_LIFE = 45,
+  SPELL_SPIRIT_BLESS = 46,
+  SPELL_SPIRIT_FATE = 47,
+  SPELL_SPIRIT_TURN_UNDEAD = 48,
+  SPELL_SPIRIT_REMOVE_CURSE = 49,
+  SPELL_SPIRIT_PRESERVATION = 50,
+  SPELL_SPIRIT_HEROISM = 51,
+  SPELL_SPIRIT_SPIRIT_LASH = 52,
+  SPELL_SPIRIT_RAISE_DEAD = 53,
+  SPELL_SPIRIT_SHARED_LIFE = 54,
+  SPELL_SPIRIT_RESSURECTION = 55,
+
+  SPELL_MIND_REMOVE_FEAR = 56,
+  SPELL_MIND_MIND_BLAST = 57,
+  SPELL_MIND_PROTECTION_FROM_MIND = 58,
+  SPELL_MIND_TELEPATHY = 59,
+  SPELL_MIND_CHARM = 60,
+  SPELL_MIND_CURE_PARALYSIS = 61,
+  SPELL_MIND_BERSERK = 62,
+  SPELL_MIND_MASS_FEAR = 63,
+  SPELL_MIND_CURE_INSANITY = 64,
+  SPELL_MIND_PSYCHIC_SHOCK = 65,
+  SPELL_MIND_ENSLAVE = 66,
+
+  SPELL_BODY_CURE_WEAKNESS = 67,
+  SPELL_BODY_FIRST_AID = 68,
+  SPELL_BODY_PROTECTION_FROM_BODY = 69,
+  SPELL_BODY_HARM = 70,
+  SPELL_BODY_REGENERATION = 71,
+  SPELL_BODY_CURE_POISON = 72,
+  SPELL_BODY_HAMMERHANDS = 73,
+  SPELL_BODY_CURE_DISEASE = 74,
+  SPELL_BODY_PROTECTION_FROM_MAGIC = 75,
+  SPELL_BODY_FLYING_FIST = 76,
+  SPELL_BODY_POWER_CURE = 77,
+
+  SPELL_LIGHT_LIGHT_BOLT = 78,
+  SPELL_LIGHT_DESTROY_UNDEAD = 79,
+  SPELL_LIGHT_DISPEL_MAGIC = 80,
+  SPELL_LIGHT_PARALYZE = 81,
+  SPELL_LIGHT_SUMMON_ELEMENTAL = 82,
+  SPELL_LIGHT_DAY_OF_THE_GODS = 83,
+  SPELL_LIGHT_PRISMATIC_LIGHT = 84,
+  SPELL_LIGHT_DAY_OF_PROTECTION = 85,
+  SPELL_LIGHT_HOUR_OF_POWER = 86,
+  SPELL_LIGHT_SUNRAY = 87,
+  SPELL_LIGHT_DIVINE_INTERVENTION = 88,
+
+  SPELL_DARK_REANIMATE = 89,
+  SPELL_DARK_TOXIC_CLOUD = 90,
+  SPELL_DARK_VAMPIRIC_WEAPON = 91,
+  SPELL_DARK_SHRINKING_RAY = 92,
+  SPELL_DARK_SHARPMETAL = 93,
+  SPELL_DARK_CONTROL_UNDEAD = 94,
+  SPELL_DARK_PAIN_REFLECTION = 95,
+  SPELL_DARK_SACRIFICE = 96,
+  SPELL_DARK_DRAGON_BREATH = 97,
+  SPELL_DARK_ARMAGEDDON = 98,
+  SPELL_DARK_SOULDRINKER = 99
 };
 
 
--- a/mm7_1.cpp	Wed Feb 27 02:26:16 2013 +0400
+++ b/mm7_1.cpp	Wed Feb 27 17:29:05 2013 +0200
@@ -5945,10 +5945,7 @@
           LODWORD(v14) = v13 << 16;
           HIDWORD(v14) = v13 >> 16;
           v15 = &_50B744_view_transformed_ys[i - 1];
-          dword_50B828[v79] = ((unsigned __int64)((_50B834_view_transformed_zs[i] - _50B834_view_transformed_zs[i - 1])
-                                                * v14
-                                                / v12) >> 16)
-                            + _50B834_view_transformed_zs[i - 1];
+          dword_50B828[v79] = ((unsigned __int64)((_50B834_view_transformed_zs[i] - _50B834_view_transformed_zs[i - 1]) * v14 / v12) >> 16) + _50B834_view_transformed_zs[i - 1];
           thisb = (unsigned __int64)((_50B744_view_transformed_ys[i] - _50B744_view_transformed_ys[i - 1]) * v14 / v12) >> 16;
         }
         else
@@ -6033,8 +6030,7 @@
       }
     }
     dword_50BA08[v22] = v32;
-    dword_50BAF4_xs[v22 + 1] = (unsigned __int64)(SHIWORD(pBLVRenderParams->field_40)
-                                                * (signed __int64)dword_50BAF4_xs[v22 + 1]) >> 16;
+    dword_50BAF4_xs[v22 + 1] = (unsigned __int64)(SHIWORD(pBLVRenderParams->field_40) * (signed __int64)dword_50BAF4_xs[v22 + 1]) >> 16;
     v35 = (unsigned __int64)(SHIWORD(pBLVRenderParams->field_40) * (signed __int64)dword_50BA08[v22]) >> 16;
     dword_50BAF4_xs[v22 + 1] = pBLVRenderParams->uViewportCenterX - dword_50BAF4_xs[v22 + 1];
     ++ia;
@@ -6058,16 +6054,12 @@
     {
       if ( v41 >= (signed int)v37 )
       {
-        v67 = (signed int)(v37 - dword_50BAF4_xs[v40])
-            * (signed __int64)(dword_50BA08[v40] - dword_50B9F8[v40 + 3])
-            / (v41 - dword_50BAF4_xs[v40]);
+        v67 = (signed int)(v37 - dword_50BAF4_xs[v40]) * (signed __int64)(dword_50BA08[v40] - dword_50B9F8[v40 + 3]) / (v41 - dword_50BAF4_xs[v40]);
         v42 = dword_50B9F8[v40 + 3];
       }
       else
       {
-        v67 = (signed int)(v37 - v41)
-            * (signed __int64)(dword_50B9F8[v40 + 3] - dword_50BA08[v40])
-            / (dword_50BAF4_xs[v40] - v41);
+        v67 = (signed int)(v37 - v41) * (signed __int64)(dword_50B9F8[v40 + 3] - dword_50BA08[v40]) / (dword_50BAF4_xs[v40] - v41);
         v42 = dword_50BA08[v40];
       }
       ++v36;
@@ -6085,16 +6077,16 @@
   }
   while ( ib <= v79 );
 
-  if ( !v36
-    || (v43 = 0,
-        dword_50BAE8_xs[v36 + 1] = dword_50BAE8_xs[1],
-        dword_50B9F8[v36 + 1] = dword_50B9F8[1],
-        v44 = pBLVRenderParams->uViewportZ,
-        thisd = dword_50BAE8_xs[1] <= (signed int)pBLVRenderParams->uViewportZ,
-        ic = 1,
-        v36 < 1) )
+  if (v36 < 1)
     return 0;
 
+  v43 = 0;
+  dword_50BAE8_xs[v36 + 1] = dword_50BAE8_xs[1];
+  dword_50B9F8[v36 + 1] = dword_50B9F8[1];
+  v44 = pBLVRenderParams->uViewportZ;
+  thisd = dword_50BAE8_xs[1] <= (signed int)pBLVRenderParams->uViewportZ;
+  ic = 1;
+
   do
   {
     v45 = ic;
@@ -6104,16 +6096,12 @@
     {
       if ( v46 <= (signed int)v44 )
       {
-        v68 = (signed int)(v44 - dword_50BAE8_xs[v45])
-            * (signed __int64)(dword_50B9F8[v45 + 1] - dword_50B9F8[v45])
-            / (v46 - dword_50BAE8_xs[v45]);
+        v68 = (signed int)(v44 - dword_50BAE8_xs[v45]) * (signed __int64)(dword_50B9F8[v45 + 1] - dword_50B9F8[v45]) / (v46 - dword_50BAE8_xs[v45]);
         v47 = dword_50B9F8[v45];
       }
       else
       {
-        v68 = (signed int)(v44 - v46)
-            * (signed __int64)(dword_50B9F8[v45] - dword_50B9F8[v45 + 1])
-            / (dword_50BAE8_xs[v45] - v46);
+        v68 = (signed int)(v44 - v46) * (signed __int64)(dword_50B9F8[v45] - dword_50B9F8[v45 + 1]) / (dword_50BAE8_xs[v45] - v46);
         v47 = dword_50B9F8[v45 + 1];
       }
       ++v43;
@@ -6130,17 +6118,18 @@
     thisd = v83;
   }
   while ( ic <= v36 );
-  if ( !v43
-    || (v48 = 0,
-        dword_50BAE0[v43] = dword_50BAE0[0],
-        dword_50B9F0[v43] = dword_50B9F0[0],
-        v49 = pBLVRenderParams->uViewportY,
-        v50 = dword_50B9F0[0] < (signed int)pBLVRenderParams->uViewportY,
-        LOBYTE(v50) = dword_50B9F0[0] >= (signed int)pBLVRenderParams->uViewportY,
-        v51 = 1,
-        id = 1,
-        v43 < 1) )
+
+  if (v43 < 1)
     return 0;
+
+  v48 = 0;
+  dword_50BAE0[v43] = dword_50BAE0[0];
+  dword_50B9F0[v43] = dword_50B9F0[0];
+  v49 = pBLVRenderParams->uViewportY;
+  v50 = dword_50B9F0[0] < (signed int)pBLVRenderParams->uViewportY;
+  LOBYTE(v50) = dword_50B9F0[0] >= (signed int)pBLVRenderParams->uViewportY;
+  v51 = 1;
+  id = 1;
   do
   {
     v52 = v51;
@@ -6150,16 +6139,12 @@
     {
       if ( v53 >= (signed int)v49 )
       {
-        v69 = (signed int)(v49 - dword_50B9EC[v52])
-            * (signed __int64)(dword_50BAE0[v52] - dword_50BADC_xs[v52])
-            / (v53 - dword_50B9EC[v52]);
+        v69 = (signed int)(v49 - dword_50B9EC[v52]) * (signed __int64)(dword_50BAE0[v52] - dword_50BADC_xs[v52]) / (v53 - dword_50B9EC[v52]);
         v54 = dword_50BADC_xs[v52];
       }
       else
       {
-        v69 = (signed int)(v49 - v53)
-            * (signed __int64)(dword_50BADC_xs[v52] - dword_50BAE0[v52])
-            / (dword_50B9EC[v52] - v53);
+        v69 = (signed int)(v49 - v53) * (signed __int64)(dword_50BADC_xs[v52] - dword_50BAE0[v52]) / (dword_50B9EC[v52] - v53);
         v54 = dword_50BAE0[v52];
       }
       ++v48;
@@ -6176,15 +6161,16 @@
     v51 = id++ + 1;
   }
   while ( id <= v43 );
-  if ( !v48
-    || (v55 = 0,
-        dword_50BAD4[v48] = dword_50BAD4[0],
-        dword_50B9E0_ys[v48 + 1] = dword_50B9E0_ys[1],
-        v56 = pBLVRenderParams->uViewportW,
-        thise = dword_50B9E0_ys[1] <= (signed int)pBLVRenderParams->uViewportW,
-        ie = 1,
-        v48 < 1) )
+
+  if (v48 < 1)
     return 0;
+
+  v55 = 0;
+  dword_50BAD4[v48] = dword_50BAD4[0];
+  dword_50B9E0_ys[v48 + 1] = dword_50B9E0_ys[1];
+  v56 = pBLVRenderParams->uViewportW;
+  thise = dword_50B9E0_ys[1] <= (signed int)pBLVRenderParams->uViewportW;
+  ie = 1;
   do
   {
     v57 = ie;
@@ -6194,16 +6180,12 @@
     {
       if ( v58 <= (signed int)v56 )
       {
-        v70 = (signed int)(v56 - dword_50B9E0_ys[v57])
-            * (signed __int64)(dword_50BAD4[v57] - dword_50BAD0[v57])
-            / (v58 - dword_50B9E0_ys[v57]);
+        v70 = (signed int)(v56 - dword_50B9E0_ys[v57]) * (signed __int64)(dword_50BAD4[v57] - dword_50BAD0[v57]) / (v58 - dword_50B9E0_ys[v57]);
         v59 = dword_50BAD0[v57];
       }
       else
       {
-        v70 = (signed int)(v56 - v58)
-            * (signed __int64)(dword_50BAD0[v57] - dword_50BAD4[v57])
-            / (dword_50B9E0_ys[v57] - v58);
+        v70 = (signed int)(v56 - v58) * (signed __int64)(dword_50BAD0[v57] - dword_50BAD4[v57]) / (dword_50B9E0_ys[v57] - v58);
         v59 = dword_50BAD4[v57];
       }
       ++v55;
@@ -6220,6 +6202,7 @@
     thise = v85;
   }
   while ( ie <= v48 );
+
   if ( !v55 )
     return 0;
   v61 = pRenderer->pRenderD3D == 0;
--- a/mm7_5.cpp	Wed Feb 27 02:26:16 2013 +0400
+++ b/mm7_5.cpp	Wed Feb 27 17:29:05 2013 +0200
@@ -9269,7 +9269,7 @@
       v6 = 0;
       if (!uNumVisibleNotEmptySectors)
       {
-LABEL_7:
+//LABEL_7:
         pVisibleSectorIDs_toDrawDecorsActorsEtcFrom[uNumVisibleNotEmptySectors++] = field_FA8[i].uSectorID;
       }
       else
--- a/mm7_6.cpp	Wed Feb 27 02:26:16 2013 +0400
+++ b/mm7_6.cpp	Wed Feb 27 17:29:05 2013 +0200
@@ -2174,17 +2174,17 @@
 void _42777D_CastSpell_UseWand_ShootArrow(int a1, unsigned int uPlayerID, unsigned int a4, __int16 a5, int a6)
 {
   //bool result; // eax@2
-  __int16 v6; // bx@4
+  //__int16 v6; // bx@4
   //Player *v7; // eax@4
-  char v8; // zf@12
+  //char v8; // zf@12
   unsigned __int16 v9; // cx@16
   unsigned int v10; // eax@18
   unsigned __int8 v11; // sf@18
   unsigned __int8 v12; // of@18
   unsigned __int16 v13; // cx@21
   unsigned int v14; // eax@23
-  stru277 *v15; // esi@27
-  stru277 *v16; // eax@28
+  //stru277 *v15; // esi@27
+  //stru277 *v16; // eax@28
   GUIWindow *v17; // eax@43
   GUIWindow *v18; // [sp-30h] [bp-48h]@44
   unsigned int v19; // [sp-2Ch] [bp-44h]@44
@@ -2198,11 +2198,11 @@
   unsigned __int8 v27; // [sp-Ch] [bp-24h]@43
   char *v28; // [sp-8h] [bp-20h]@43
   Texture *v29; // [sp-4h] [bp-1Ch]@43
-  __int16 a3a; // [sp+10h] [bp-8h]@1
-  __int16 a2a; // [sp+14h] [bp-4h]@1
-
-  a3a = uPlayerID;
-  a2a = a1;
+  //__int16 a3a; // [sp+10h] [bp-8h]@1
+  //__int16 a2a; // [sp+14h] [bp-4h]@1
+
+  //a3a = uPlayerID;
+  //a2a = a1;
   
   //if ( pParty->bTurnBasedModeOn != 1
   //  || (result = pTurnEngine->field_4, pTurnEngine->field_4 != 1) && pTurnEngine->field_4 != 3 )
@@ -2213,7 +2213,7 @@
   }
 
 
-    v6 = a5;
+    //v6 = a5;
     //v7 = &pParty->pPlayers[uPlayerID];
   assert(uPlayerID < 4);
   auto player = &pParty->pPlayers[uPlayerID];
@@ -2221,72 +2221,79 @@
     {
       switch ( a1 )
       {
-        case 47:
-        case 68:
-        case 89:
-          HIBYTE(v6) = HIBYTE(a5) | 1;
+        case SPELL_SPIRIT_FATE:
+        case SPELL_BODY_FIRST_AID:
+        case SPELL_DARK_REANIMATE:
+          //HIBYTE(v6) = HIBYTE(a5) | 1;
+          a5 |= 0x0100;
           break;
-        case 4:
-        case 28:
-        case 30:
-        case 91:
-          LOBYTE(v6) = a5 | 0x80;
+
+        case SPELL_FIRE_FIRE_AURA:
+        case SPELL_WATER_RECHARGE_ITEM:
+        case SPELL_WATER_ENCHANT_ITEM:
+        case SPELL_DARK_VAMPIRIC_WEAPON:
+          //LOBYTE(v6) = a5 | 0x80;
+          a5 |= 0x0080;
           break;
-        case 2:
-        case 6:
-        case 11:
-        case 18:
-        case 20:
-        case 24:
-        case 26:
-        case 29:
-        case 32:
-        case 34:
-        case 35:
-        case 37:
-        case 39:
-        case 44:
-        case 52:
-        case 57:
-        case 60:
-        case 65:
-        case 70:
-        case 76:
-        case 78:
-        case 79:
-        case 87:
-        case 90:
-        case 92:
-        case 93:
-        case 97:
+
+        case SPELL_FIRE_FIRE_BOLT:
+        case SPELL_FIRE_FIREBALL:
+        case SPELL_FIRE_INCINERATE:
+        case SPELL_AIR_LIGHNING_BOLT:
+        case SPELL_AIR_IMPLOSION:
+        case SPELL_WATER_POISON_SPRAY:
+        case SPELL_WATER_ICE_BOLT:
+        case SPELL_WATER_ACID_BURST:
+        case SPELL_WATER_ICE_BLAST:
+        case SPELL_EARTH_STUN:
+        case SPELL_EARTH_SLOW:
+        case SPELL_EARTH_DEADLY_SWARM:
+        case SPELL_EARTH_BLADES:
+        case SPELL_EARTH_MASS_DISTORTION:
+        case SPELL_SPIRIT_SPIRIT_LASH:
+        case SPELL_MIND_MIND_BLAST:
+        case SPELL_MIND_CHARM:
+        case SPELL_MIND_PSYCHIC_SHOCK:
+        case SPELL_BODY_HARM:
+        case SPELL_BODY_FLYING_FIST:
+        case SPELL_LIGHT_LIGHT_BOLT:
+        case SPELL_LIGHT_DESTROY_UNDEAD:
+        case SPELL_LIGHT_SUNRAY:
+        case SPELL_DARK_TOXIC_CLOUD:
+        case SPELL_DARK_SHRINKING_RAY:
+        case SPELL_DARK_SHARPMETAL:
+        case SPELL_DARK_DRAGON_BREATH:
           if ( !a6 )
-            goto LABEL_9;
-          break;
-        case 59:
-        case 62:
-        case 66:
-        case 81:
-        case 94:
-LABEL_9:
-          v6 = a5 | 8;
+            a5 |= 0x0008;
           break;
-        case 42:
-          v6 = a5 | 0x40;
+        case SPELL_MIND_TELEPATHY:
+        case SPELL_MIND_BERSERK:
+        case SPELL_MIND_ENSLAVE:
+        case SPELL_LIGHT_PARALYZE:
+        case SPELL_DARK_CONTROL_UNDEAD:
+//LABEL_9:
+          //v6 = a5 | 8;
+          a5 |= 0x0008;
           break;
-        case 46:
-          if ( a4 )
-            v8 = (a4 & 0x1C0) == 0;
-          else
-            v8 = (player->pActiveSkills[PLAYER_SKILL_SPIRIT] & 0x1C0) == 0;
-          if ( v8 )
+
+        case SPELL_EARTH_TELEKINESIS:
+          a5 |= 0x0040;
+          break;
+
+        case SPELL_SPIRIT_BLESS:
+          if (a4 && ~a4 & 0x01C0)
+            goto LABEL_25;
+          else if ((player->pActiveSkills[PLAYER_SKILL_SPIRIT] & 0x1C0) == 0);
             goto LABEL_25;
           break;
-        case 50:
+
+        case SPELL_SPIRIT_PRESERVATION:
           v9 = a4;
           if ( !a4 )
             v9 = player->pActiveSkills[PLAYER_SKILL_SPIRIT];
           goto LABEL_18;
-        case 95:
+
+        case SPELL_DARK_PAIN_REFLECTION:
           v9 = a4;
           if ( !a4 )
             v9 = player->pActiveSkills[PLAYER_SKILL_DARK];
@@ -2295,7 +2302,8 @@
           v12 = __OFSUB__(v10, 3);
           v11 = ((v10 - 3) & 0x80000000u) != 0;
           goto LABEL_24;
-        case 73:
+
+        case SPELL_BODY_HAMMERHANDS:
           v13 = a4;
           if ( !a4 )
             v13 = player->pActiveSkills[PLAYER_SKILL_BODY];
@@ -2306,64 +2314,67 @@
           if ( v11 ^ v12 )
             goto LABEL_25;
           break;
-        case 40:
-        case 49:
-        case 53:
-        case 55:
-        case 56:
-        case 61:
-        case 64:
-        case 67:
-        case 71:
-        case 72:
-        case 74:
+
+        case SPELL_EARTH_STONE_TO_FLESH:
+        case SPELL_SPIRIT_REMOVE_CURSE:
+        case SPELL_SPIRIT_RAISE_DEAD:
+        case SPELL_SPIRIT_RESSURECTION:
+        case SPELL_MIND_REMOVE_FEAR:
+        case SPELL_MIND_CURE_PARALYSIS:
+        case SPELL_MIND_CURE_INSANITY:
+        case SPELL_BODY_CURE_WEAKNESS:
+        case SPELL_BODY_REGENERATION:
+        case SPELL_BODY_CURE_POISON:
+        case SPELL_BODY_CURE_DISEASE:
 LABEL_25:
-          v6 = a5 | 2;
+          //v6 = a5 | 2;
+          a5 |= 0x0002;
           break;
-        case 96:
-          HIBYTE(v6) = HIBYTE(a5) | 2;
+
+        case SPELL_DARK_SACRIFICE:
+          //HIBYTE(v6) = HIBYTE(a5) | 2;
+          a5 |= 0x0200;
           break;
         default:
           break;
       }
     }
 
-    v15 = pStru277;
-    if ( v6 & 0x3CA )
+
+    if (a5 & 0x3CA)
     {
-      v16 = pStru277;
-      while ( !(v16->field_8 & 0x3CA) )
-      {
-        ++v16;
-        if ( (signed int)v16 >= (signed int)&unk_50C190 )
-          goto LABEL_33;
-      }
-      v16->spellnum = 0;
+      assert(sizeof(pStru277) / sizeof(*pStru277) == 10);
+      for (uint i = 0; i < 10; ++i)
+        if (pStru277[i].field_8 & 0x3CA)
+        {
+          pStru277[i].spellnum = 0;
+          break;
+        }
     }
-    do
+      
+    assert(sizeof(pStru277) / sizeof(*pStru277) == 10);
+    for (uint i = 0; i < 10; ++i)
     {
-LABEL_33:
-      if ( v15->spellnum )
+      auto spell = pStru277 + i;
+      if (!spell->spellnum)
+        continue;
+
+      spell->spellnum = 0;
+      if (spell->field_8 & 0x3CA)
       {
-        v8 = (v15->field_8 & 0x3CA) == 0;
-        v15->spellnum = 0;
-        if ( !v8 )
-        {
-          pGUIWindow_Settings->Release();
-          pGUIWindow_Settings = 0;
-          pMouse->SetCursorBitmap("MICON1");
-          GameUI_StatusBar_TimedStringTimeLeft = 0;
-          unk_50C9A0 = 0;
-          back_to_game();
-        }
+        pGUIWindow_Settings->Release();
+        pGUIWindow_Settings = nullptr;
+        pMouse->SetCursorBitmap("MICON1");
+        GameUI_StatusBar_TimedStringTimeLeft = 0;
+        unk_50C9A0 = 0;
+        back_to_game();
       }
-      ++v15;
     }
-    while (v15 < pStru277 + 10);
-    int result = pStru277->PushStru277(a2a, a3a, a4, v6, a6);
+
+    int result = pStru277->PushStru277(a1, uPlayerID, a4, a5, a6);
     if ( result != -1 )
     {
-      if ( v6 & 2 )
+      if ( a5 & 2 )
       {
         if ( pGUIWindow_Settings )
           return;
@@ -2375,7 +2386,7 @@
         sub_421B2C_PlaceInInventory_or_DropPickedItem();
         return;
       }
-      if ( v6 & 8 )
+      if ( a5 & 8 )
       {
         if ( pGUIWindow_Settings )
           return;
@@ -2399,7 +2410,7 @@
         sub_421B2C_PlaceInInventory_or_DropPickedItem();
         return;
       }
-      if ( v6 & 0x40 )
+      if ( a5 & 0x40 )
       {
         if ( pGUIWindow_Settings )
           return;
@@ -2411,7 +2422,7 @@
         v25 = 190;
         goto LABEL_44;
       }
-      if ( (char)v6 < 0 )
+      if ( (char)a5 < 0 )
       {
         if ( pGUIWindow_Settings )
           return;
@@ -2424,7 +2435,7 @@
         sub_421B2C_PlaceInInventory_or_DropPickedItem();
         return;
       }
-      if ( HIBYTE(v6) & 1 )
+      if ( HIBYTE(a5) & 1 )
       {
         if ( pGUIWindow_Settings )
           return;
@@ -2436,7 +2447,7 @@
 		pGUIWindow_Settings->CreateButton(8, 8, 460, 344, 1, 0, 140, 0, 0, "", NULL);
 		sub_421B2C_PlaceInInventory_or_DropPickedItem();
       }
-      if ( HIBYTE(v6) & 2 && !pGUIWindow_Settings )
+      if ( HIBYTE(a5) & 2 && !pGUIWindow_Settings )
       {
         pGUIWindow_Settings = GUIWindow::Create(0, 0, 640, 480, (WindowType)(WINDOW_HouseInterior|0x2), (int)&pStru277[result], 0);
         pBtn_NPCLeft = pGUIWindow_Settings->CreateButton(
@@ -2537,7 +2548,7 @@
 //----- (00427E01) --------------------------------------------------------
 void stru277::_427E01_cast_spell()
 {
-  int v1; // esi@1
+  //int v1; // esi@1
   int v2; // edi@1
   stru277 *v3; // ebx@2
   signed int v4; // eax@8
@@ -3283,7 +3294,7 @@
   LayingItem a1; // [sp+DDCh] [bp-A8h]@1
   //LayingItem::LayingItem(&a1);
 
-  v1 = 0;
+  //v1 = 0;
   v2 = 0;
   amount = 0;
   LODWORD(v733) = 0;
@@ -3294,10 +3305,12 @@
   {
     v3 = &v711[n];
     HIDWORD(v733) = (int)v3;
-    if ( v3->spellnum == (short)v1 )
+    if ( v3->spellnum == 0 )
       goto LABEL_1166;
-    if ( pParty->pPartyBuffs[11].NotExpired() )
-      pParty->pPartyBuffs[11].Reset();
+
+    if (pParty->Invisible())
+      pParty->pPartyBuffs[PARTY_BUFF_INVISIBILITY].Reset();
+
     if ( v3->field_8 & 0x3CA )
     {
       if ( !pParty->pPlayers[v3->uPlayerID].CanAct() )
@@ -3306,29 +3319,29 @@
     }
     pPlayer = &pParty->pPlayers[v3->uPlayerID];
     v4 = *(int *)&v3->field_C;
-    if ( v4 != v1 )
+    if (v4)
       goto LABEL_18;
     v5 = v3->spellnum;
     if ( v3->spellnum == 79 || v5 == 48 || v5 == 94 )
       v666 = 1;
     else
-      v666 = v1;
+      v666 = 0;
     a2 = stru_50C198.FindClosestActor(5120, 1, v666);
     v6 = pMouse->uPointingObjectID;
-    if ( pMouse->uPointingObjectID != v1 && (v6 & 7) == OBJECT_Actor && pActors[v6 >> 3].CanAct() )
+    if ( pMouse->uPointingObjectID && (v6 & 7) == OBJECT_Actor && pActors[v6 >> 3].CanAct() )
     {
       v4 = pMouse->uPointingObjectID;
 LABEL_18:
       a2 = v4;
     }
     a1.uItemType = stru_4E3ACC[v3->spellnum].uItemType;
-    if ( (short)a1.uItemType != (short)v1 )
+    if (a1.uItemType)
     {
       if ( (a2 & 7) == OBJECT_Actor)
       {
         memcpy(&v715, Actor::GetDirectionInfo((8 * v3->uPlayerID + 8) | OBJECT_Player, a2, &a3, 0), sizeof(v715));
         v2 = v723;
-        v1 = 0;
+        //v1 = 0;
       }
       else
       {
@@ -3337,9 +3350,9 @@
       }
     }
     v7 = v3->field_A;
-    LODWORD(v725) = v1;
-    _this = (ItemGen *)v1;
-    if ( v7 == (short)v1 )
+    LODWORD(v725) = 0;
+    _this = 0;
+    if (!v7)
     {
       v8 = v3->spellnum;
       if ( v3->spellnum >= 12 )
@@ -3445,29 +3458,29 @@
     LOWORD(v10) = v3->spellnum;
     v730 = v10;
     v13 = v12 + 10 * (signed __int16)v10;
-    v14 = v3->field_A == (short)v1;
+    v14 = v3->field_A == 0;
     v15 = (unsigned __int16)word_4E3C66[v13];   // pSpellDatas [negoffset] indexing
     v16 = *(unsigned __int16 *)((char *)&pSpellDatas[0].uMagisterLevelMana + v13 * 2);
     uRequiredMana = v15;
     sRecoveryTime = v16;
     if ( !v14 )
-      uRequiredMana = v1;
-    if ( pParty->uCurrentHour == v1 )
+      uRequiredMana = 0;
+    if ( pParty->uCurrentHour == 0 )
     {
-      if ( pParty->uCurrentMinute != v1 )
+      if ( pParty->uCurrentMinute != 0 )
         goto LABEL_62;
       if ( LODWORD(v725) == 20 )
         goto LABEL_61;
     }
-    if ( pParty->uCurrentHour == 12 && pParty->uCurrentMinute == v1 && LODWORD(v725) == 19 )
+    if ( pParty->uCurrentHour == 12 && pParty->uCurrentMinute == 0 && LODWORD(v725) == 19 )
 LABEL_61:
-      uRequiredMana = v1;
+      uRequiredMana = 0;
 LABEL_62:
     if ( (signed __int16)v730 >= 100 || ((pPlayer->sMana - uRequiredMana) & 0x80000000u) == 0 )
       break;
     ShowStatusBarString(pGlobalTXT_LocalizationStrings[586], 2u);
 LABEL_203:
-    v3->spellnum = v1;
+    v3->spellnum = 0;
 LABEL_1166:
     ++n;
     if ( n >= 10 )
@@ -3582,8 +3595,8 @@
         }
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
           goto LABEL_83;
-        v668 = v1;
-        v658 = v1;
+        v668 = 0;
+        v658 = 0;
         v653 = amount;
         v651 = v731;
         v26 = (signed __int64)((double)(signed int)v733 * 4.2666669);
@@ -3611,16 +3624,16 @@
           amount = 5;
         }
         v31 = v3->uPlayerID;
-        HIDWORD(v733) = v1;
+        HIDWORD(v733) = 0;
         v32 = 8 * v31;
-        LOBYTE(v32) = v32 | 4;
-        if ( (signed int)uNumLayingItems > v1 )
+        LOBYTE(v32) = v32 | OBJECT_Player;
+        if ( (signed int)uNumLayingItems > 0 )
         {
           v33 = (char *)&pLayingItems[0].field_48;
           v730 = uNumLayingItems;
           do
           {
-            if ( *((short *)v33 - 36) != (short)v1 && *(int *)v33 == 7 && *((int *)v33 + 4) == v32 )
+            if ( *((short *)v33 - 36) && *(int *)v33 == 7 && *((int *)v33 + 4) == v32 )
               ++HIDWORD(v733);
             v33 += 112;
             --v730;
@@ -3638,13 +3651,13 @@
         a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
         a1.vPosition.y = pParty->vPosition.y;
         a1.vPosition.x = pParty->vPosition.x;
-        a1.uAttributes = v1;
+        a1.uAttributes = 0;
         a1.vPosition.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
         a1.uSectorID = pIndoor->GetSector(
                          pParty->vPosition.x,
                          pParty->vPosition.y,
                          pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3);
-        a1.uSpriteFrameID = v1;
+        a1.uSpriteFrameID = 0;
         v34 = 8 * v3->uPlayerID;
         LOBYTE(v34) = v34 | OBJECT_Player;
         a1.field_58_pid = v34;
@@ -3661,26 +3674,26 @@
       case 20:
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
           goto LABEL_83;
-        if ( a2 == v1 )
+        if (!a2)
           goto LABEL_200;
         if ( (a2 & 7) != OBJECT_Actor)
           goto LABEL_1056;
-        v699 = v1;
-        v698 = v1;
-        v697 = v1;
+        v699 = 0;
+        v698 = 0;
+        v697 = 0;
         a1.stru_24.Reset();
         a1.field_48 = v3->spellnum;
         a1.field_4C = v2;
         a1.field_50 = v731;
         a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
-        a1.uAttributes = v1;
-        a1.uSectorID = v1;
-        a1.uSpriteFrameID = v1;
+        a1.uAttributes = 0;
+        a1.uSectorID = 0;
+        a1.uSpriteFrameID = 0;
         v37 = v3->uPlayerID;
         a1.field_60_distance_related_prolly_lod = 0;
         v37 *= 8;
         LOBYTE(v37) = v37 | OBJECT_Player;
-        a1.uFacing = v1;
+        a1.uFacing = 0;
         a1.field_58_pid = v37;
         v38 = a2 >> 3;
         a1.uSoundID = LOWORD(v3->field_10);
@@ -3690,9 +3703,9 @@
         a1.vPosition.z = pActors[v39].vPosition.z;
         v41 = 8 * (a2 >> 3);
         a1.vPosition.y = v40;
-        LOBYTE(v41) = v41 | 3;
+        LOBYTE(v41) = v41 | OBJECT_Actor;
         a1.field_5C = v41;
-        v42 = a1.Create(0, v1, v1, v1);
+        v42 = a1.Create(0, 0, 0, 0);
         v43 = &v697;
         goto LABEL_133;
       case 44:
@@ -3703,25 +3716,21 @@
         if ( !stru_50C198.GetMagicalResistance(&pActors[a2 >> 3], 3u) )
           goto LABEL_1056;
         pActors[a2 >> 3].pActorBuffs[10].Apply(
-          pMiscTimer->uTotalGameTimeElapsed + 128,
-          v1,
-          v1,
-          v1,
-          v1);
-        v706 = v1;
-        v705 = v1;
-        v704 = v1;
+          pMiscTimer->uTotalGameTimeElapsed + 128, 0, 0, 0, 0);
+        v706 = 0;
+        v705 = 0;
+        v704 = 0;
         a1.stru_24.Reset();
         a1.field_48 = v3->spellnum;
         a1.field_4C = v2;
         a1.field_50 = v731;
         a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
-        a1.uAttributes = v1;
-        a1.uSectorID = v1;
-        a1.uSpriteFrameID = v1;
+        a1.uAttributes = 0;
+        a1.uSectorID = 0;
+        a1.uSpriteFrameID = 0;
         v44 = v3->uPlayerID;
         a1.field_60_distance_related_prolly_lod = 0;
-        a1.uFacing = v1;
+        a1.uFacing = 0;
         v44 *= 8;
         LOBYTE(v44) = v44 | OBJECT_Player;
         v38 = (signed int)v726;
@@ -3732,22 +3741,22 @@
         a1.vPosition.z = *(__int16 *)((char *)&pActors[0].vPosition.z + HIDWORD(v733));
         v46 = 8 * (int)v726;
         a1.vPosition.y = v45;
-        LOBYTE(v46) = 8 * (char)v726 | 3;
+        LOBYTE(v46) = 8 * (char)v726 | OBJECT_Actor;
         a1.field_5C = v46;
-        v42 = a1.Create(0, v1, v1, v1);
+        v42 = a1.Create(0, 0, 0, 0);
         v43 = &v704;
 LABEL_133:
         v670 = (Vec3_int_ *)v43;
         v47 = v38;
         goto LABEL_139;
       case 79:
-        if ( !pPlayer->CanCastSpell(uRequiredMana) || a2 == v1 || (a2 & 7) != OBJECT_Actor)
+        if ( !pPlayer->CanCastSpell(uRequiredMana) || !a2 || (a2 & 7) != OBJECT_Actor)
           goto LABEL_83;
         v730 = a2 >> 3;
-        v693 = v1;
+        v693 = 0;
         HIDWORD(v733) = (int)&pActors[a2 >> 3];
-        v692 = v1;
-        v691 = v1;
+        v692 = 0;
+        v691 = 0;
         a1.stru_24.Reset();
         a1.field_48 = v3->spellnum;
         a1.field_4C = v2;
@@ -3757,9 +3766,9 @@
         a1.vPosition.y = *(short *)(HIDWORD(v733) + 144);
         v48 = *(short *)(HIDWORD(v733) + 138);
         a1.vPosition.z = *(short *)(HIDWORD(v733) + 138);
-        a1.uAttributes = v1;
+        a1.uAttributes = 0;
         a1.uSectorID = pIndoor->GetSector(a1.vPosition.x, a1.vPosition.y, v48);
-        a1.uSpriteFrameID = v1;
+        a1.uSpriteFrameID = 0;
         v49 = 8 * v3->uPlayerID;
         LOBYTE(v49) = v49 | OBJECT_Player;
         a1.field_58_pid = v49;
@@ -3769,7 +3778,7 @@
         LOWORD(v49) = LOWORD(v3->field_10);
         LOBYTE(a1.uAttributes) |= 0x80u;
         a1.uSoundID = v49;
-        v726 = (Player *)a1.Create(0, v1, v1, v1);
+        v726 = (Player *)a1.Create(0, 0, 0, 0);
         if ( !MonsterStats::BelongsToSupertype(*(short *)(HIDWORD(v733) + 96), MONSTER_SUPERTYPE_UNDEAD) )
           goto LABEL_200;
         v47 = v730;
@@ -3800,13 +3809,13 @@
         a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
         a1.vPosition.y = pParty->vPosition.y;
         a1.vPosition.x = pParty->vPosition.x;
-        a1.uAttributes = v1;
+        a1.uAttributes = 0;
         a1.vPosition.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
         a1.uSectorID = pIndoor->GetSector(
                          pParty->vPosition.x,
                          pParty->vPosition.y,
                          pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3);
-        a1.uSpriteFrameID = v1;
+        a1.uSpriteFrameID = 0;
         v50 = 8 * v3->uPlayerID;
         LOBYTE(v50) = v50 | OBJECT_Player;
         a1.field_58_pid = v50;
@@ -3845,21 +3854,21 @@
       case 81:
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
           goto LABEL_83;
-        if ( a2 == v1
+        if ( !a2
           || (a2 & 7) != OBJECT_Actor
           || (v730 = a2 >> 3,
               v721 = (int)&pActors[a2 >> 3],
               !stru_50C198.GetMagicalResistance(&pActors[a2 >> 3], 9u)) )
           goto LABEL_1056;
-        Actor::AI_Stand(v730, 4u, 0x80u, (AIDirection *)v1);
+        Actor::AI_Stand(v730, 4u, 0x80u, 0);
         v726 = (Player *)(23040 * v2);
         v54 = (signed __int64)((double)(23040 * v2) * 0.033333335);
         v55 = v721;
-        ((SpellBuff *)(v721 + 308))->Apply(pParty->uTimePlayed + (signed int)v54, v731, v1, v1, v1);
+        ((SpellBuff *)(v721 + 308))->Apply(pParty->uTimePlayed + (signed int)v54, v731, 0, 0, 0);
         *(char *)(v55 + 38) |= 8u;
-        *(short *)(v55 + 148) = v1;
-        v672 = v1;
-        *(short *)(v55 + 150) = v1;
+        *(short *)(v55 + 148) = 0;
+        v672 = 0;
+        *(short *)(v55 + 150) = 0;
         v661 = (Actor *)v55;
         goto LABEL_165;
       case 35:
@@ -3901,10 +3910,10 @@
 		  pParty->uTimePlayed + (signed int)v58,
           v731,
           amount,
-          v1,
-          v1);
+          0,
+          0);
         *((char *)&pActors[0].uAttributes + v59 + 2) |= 8u;
-        v672 = v1;
+        v672 = 0;
         v661 = (Actor *)LODWORD(v718);
         goto LABEL_165;
       case 60:
@@ -3931,10 +3940,7 @@
         //((SpellBuff *)((char *)&pActors[0].pActorBuffs[1] + v730))->Apply(
 		pActors[a2 >> 3].pActorBuffs[1].Apply(
           pParty->uTimePlayed + (signed int)(signed __int64)((double)(signed int)((int)v733 << 7) * 0.033333335),
-          v731,
-          v1,
-          v1,
-          v1);
+          v731, 0, 0, 0);
         a1.stru_24.Reset();
         a1.field_48 = v3->spellnum;
         a1.field_4C = v2;
@@ -3949,13 +3955,13 @@
         a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
         a1.vPosition.x = pParty->vPosition.x;
         a1.vPosition.y = pParty->vPosition.y;
-        a1.uAttributes = v1;
+        a1.uAttributes = 0;
         a1.vPosition.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
         a1.uSectorID = pIndoor->GetSector(
                          pParty->vPosition.x,
                          pParty->vPosition.y,
                          pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3);
-        a1.uSpriteFrameID = v1;
+        a1.uSpriteFrameID = 0;
         v62 = 8 * v3->uPlayerID;
         LOBYTE(v62) = v62 | OBJECT_Player;
         a1.field_58_pid = v62;
@@ -3990,7 +3996,7 @@
         }
         if ( v65 == 1 )
         {
-          LODWORD(v733) = v1;
+          LODWORD(v733) = 0;
           amount = 12;
         }
 LABEL_196:
@@ -4003,9 +4009,9 @@
         {
           if (!v730c->Broken())
           {
-            if ( v730c->uSpecEnchantmentType == v1 )
+            if (!v730c->uSpecEnchantmentType)
             {
-              if ( v730c->uEncantmentType == v1 )
+              if (!v730c->uEncantmentType)
               {
                 v68 = BYTE4(v726->pConditions[3]);
                 if ( !v68 || v68 == 1 || v68 == 2 )
@@ -4067,7 +4073,7 @@
                       }
                     }
                     v3->spellnum = 0;
-                    v1 = 0;
+                    //v1 = 0;
 LABEL_1165:
                     v2 = v723;
                     goto LABEL_1166;
@@ -4079,7 +4085,7 @@
         }
 LABEL_199:
         dword_50C9D0 = 113;
-        dword_50C9D4 = v1;
+        dword_50C9D4 = 0;
         dword_50C9D8 = 1;
 LABEL_200:
         v66 = pGlobalTXT_LocalizationStrings[428];
@@ -4087,7 +4093,7 @@
         v67 = 2;
 LABEL_202:
         ShowStatusBarString(v66, v67);
-        pAudioPlayer->PlaySound(SOUND_PlayerCantCastSpell, v1, v1, -1, v1, v1, v1, v1);
+        pAudioPlayer->PlaySound(SOUND_PlayerCantCastSpell, 0, 0, -1, 0, 0, 0, 0);
         goto LABEL_203;
       case 71:
         v70 = v12 - 1;
@@ -4115,8 +4121,8 @@
         v74 = v3->spellnum;
         v75 = pGame->GetStru6();
         pGame->GetStru6()->SetPlayerBuffAnim(v74, v73);
-        v668 = v1;
-        v658 = v1;
+        v668 = 0;
+        v658 = 0;
         v653 = amount;
         v651 = v731;
         v28 = pParty->uTimePlayed + (signed int)(signed __int64)((double)(signed int)v733 * 4.2666669);
@@ -4165,7 +4171,7 @@
             LODWORD(v725) = 6;
             break;
           case 14:
-            LODWORD(v725) = v1;
+            LODWORD(v725) = 0;
             break;
           case 25:
             LODWORD(v725) = 17;
@@ -4186,21 +4192,21 @@
           goto LABEL_83;
         v81 = v3->spellnum;
         v82 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v81, v1);
+        pGame->GetStru6()->SetPlayerBuffAnim(v81, 0);
         v83 = 1;
         v84 = v3->spellnum;
         v85 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v84, 1u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v84, 1);
         v86 = v3->spellnum;
         v87 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v86, 2u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v86, 2);
         v88 = v3->spellnum;
         v89 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v88, 3u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v88, 3);
         v90 = (double)(signed int)v733 * 4.2666669;
         goto LABEL_304;
       case 5:
-        if ( v12 <= v1 )
+        if ( v12 <= 0 )
           goto LABEL_254;
         if ( v12 <= 2 )
         {
@@ -4228,31 +4234,28 @@
           do
           {
 			if ( v92->pConditions )
-              LODWORD(v727) = v1;
+              LODWORD(v727) = 0;
             ++v92;
           }
           while ( v92 <= &pParty->pPlayers[3] );
-          if ( LODWORD(v727) != v1 )
+          if (LODWORD(v727))
           {
             v726 = (Player *)((int)v733 << 7);
             pParty->pPartyBuffs[8].Apply(
               pParty->uTimePlayed + (signed int)(signed __int64)((double)(signed int)((int)v733 << 7) * 0.033333335),
-              v731,
-              v1,
-              v1,
-              v1);
+              v731, 0, 0, 0);
             v93 = v3->spellnum;
             v94 = pGame->GetStru6();
-            pGame->GetStru6()->SetPlayerBuffAnim(v93, v1);
+            pGame->GetStru6()->SetPlayerBuffAnim(v93, 0);
             v95 = v3->spellnum;
             v96 = pGame->GetStru6();
-            pGame->GetStru6()->SetPlayerBuffAnim(v95, 1u);
+            pGame->GetStru6()->SetPlayerBuffAnim(v95, 1);
             v97 = v3->spellnum;
             v98 = pGame->GetStru6();
-            pGame->GetStru6()->SetPlayerBuffAnim(v97, 2u);
+            pGame->GetStru6()->SetPlayerBuffAnim(v97, 2);
             v99 = v3->spellnum;
             v100 = pGame->GetStru6();
-            pGame->GetStru6()->SetPlayerBuffAnim(v99, 3u);
+            pGame->GetStru6()->SetPlayerBuffAnim(v99, 3);
           }
         }
         goto LABEL_83;
@@ -4287,8 +4290,8 @@
           v109 = v3->spellnum;
           v110 = pGame->GetStru6();
           pGame->GetStru6()->SetPlayerBuffAnim(v109, v108);
-          v111 = pOtherOverlayList->_4418B1(10000, v3->uPlayerID_2 + 310, v1, 65536);
-          v668 = v1;
+          v111 = pOtherOverlayList->_4418B1(10000, v3->uPlayerID_2 + 310, 0, 65536);
+          v668 = 0;
           v716 = v111;
           v658 = v111;
           v653 = amount;
@@ -4307,15 +4310,15 @@
           v106 = v3->spellnum;
           v107 = pGame->GetStru6();
           pGame->GetStru6()->SetPlayerBuffAnim(v106, v105);
-          v716 = pOtherOverlayList->_4418B1(10000, v105 + 310, v1, 65536);
-		  v730b->pPlayerBuffs[1].Apply(pParty->uTimePlayed + v717, v731, amount, v716, v1);
+          v716 = pOtherOverlayList->_4418B1(10000, v105 + 310, 0, 65536);
+		  v730b->pPlayerBuffs[1].Apply(pParty->uTimePlayed + v717, v731, amount, v716, 0);
           ++v730b;
           ++v105;
         }
 		while ( v730b <= &pParty->pPlayers[3] );
         goto LABEL_1056;
       case 52:
-        if ( pPlayer->CanCastSpell(uRequiredMana) && a2 != v1 && (a2 & 7) == OBJECT_Actor)
+        if ( pPlayer->CanCastSpell(uRequiredMana) && a2 && (a2 & 7) == OBJECT_Actor)
         {
           v730 = a2 >> 3;
           v112 = &pActors[a2 >> 3];
@@ -4411,7 +4414,7 @@
         v127 = v3->spellnum;
         if ( v127 == 17 )
         {
-          amount = v1;
+          amount = 0;
           LODWORD(v725) = 14;
         }
         else
@@ -4433,22 +4436,22 @@
           goto LABEL_83;
         v128 = v3->spellnum;
         v129 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v128, v1);
+        pGame->GetStru6()->SetPlayerBuffAnim(v128, 0);
         v83 = 1;
         v130 = v3->spellnum;
         v131 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v130, 1u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v130, 1);
         v132 = v3->spellnum;
         v133 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v132, 2u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v132, 2);
         v134 = v3->spellnum;
         v135 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v134, 3u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v134, 3);
         v726 = (Player *)((int)v733 << 7);
         v90 = (double)(signed int)((int)v733 << 7) * 0.033333335;
 LABEL_304:
-        v673 = v1;
-        v662 = v1;
+        v673 = 0;
+        v662 = 0;
         v655 = amount;
         v652 = v731;
         v136 = pParty->uTimePlayed + (signed int)(signed __int64)v90;
@@ -4465,19 +4468,19 @@
           goto LABEL_83;
         v141 = v3->spellnum;
         v142 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v141, v1);
+        pGame->GetStru6()->SetPlayerBuffAnim(v141, 0);
         v143 = v3->spellnum;
         v144 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v143, 1u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v143, 1);
         v145 = v3->spellnum;
         v146 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v145, 2u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v145, 2);
         v147 = v3->spellnum;
         v148 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v147, 3u);
-        v668 = v1;
+        pGame->GetStru6()->SetPlayerBuffAnim(v147, 3);
+        v668 = 0;
         v726 = (Player *)((int)v733 << 7);
-        v658 = v1;
+        v658 = 0;
         v653 = v2;
         v651 = v731;
         v26 = (signed __int64)((double)(signed int)((int)v733 << 7) * 0.033333335);
@@ -4520,9 +4523,9 @@
         }
         HIDWORD(v733) = v154;
         v713 = v154 + 2500;
-        v721 = v1;
-        LODWORD(v718) = v1;
-        if ( (signed int)this > v1 )
+        v721 = 0;
+        LODWORD(v718) = 0;
+        if ( (signed int)this > 0 )
         {
           *(float *)&y = (double)SHIDWORD(v733);
           *(float *)&v732 = (double)v713;
@@ -4541,8 +4544,8 @@
             *(float *)&_this = v158 * v158;
             if ( sqrt(*((float *)&v733 + 1) * *((float *)&v733 + 1) + *(float *)&_this + v725) <= 1.0 )
             {
-              LODWORD(v687) = v1;
-              HIDWORD(v687) = v1;
+              LODWORD(v687) = 0;
+              HIDWORD(v687) = 0;
             }
             else
             {
@@ -4556,12 +4559,12 @@
             a1.field_4C = v2;
             a1.field_50 = v731;
             a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
-            a1.uAttributes = v1;
+            a1.uAttributes = 0;
             a1.vPosition.x = uRequiredMana;
             a1.vPosition.y = LODWORD(v727);
-            a1.uSectorID = v1;
+            a1.uSectorID = 0;
             a1.vPosition.z = a2 + v713;
-            a1.uSpriteFrameID = v1;
+            a1.uSpriteFrameID = 0;
             a1.field_58_pid = 8 * v3->uPlayerID | OBJECT_Player;
             a1.field_5C = v730;
             a1.field_60_distance_related_prolly_lod = stru_50C198._427546(a2 + 2500);
@@ -4573,7 +4576,7 @@
                    v687,
                    SHIDWORD(v687),
                    pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed,
-                   v1) != -1
+                   0) != -1
               && pParty->bTurnBasedModeOn == 1 )
               ++pTurnEngine->field_1C;
             LODWORD(v718) = rand() % 1024 - 512;
@@ -4595,26 +4598,26 @@
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
           goto LABEL_83;
         v726 = (Player *)sub_46A6AC((int)dword_50BF30, 100, 4096);
-        v700.z = v1;
-        v700.y = v1;
-        v700.x = v1;
+        v700.z = 0;
+        v700.y = 0;
+        v700.x = 0;
         a1.stru_24.Reset();
         a1.field_48 = v3->spellnum;
         a1.field_4C = v2;
         a1.field_50 = v731;
         a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
-        a1.uAttributes = v1;
-        a1.uSectorID = v1;
-        a1.uSpriteFrameID = v1;
+        a1.uAttributes = 0;
+        a1.uSectorID = 0;
+        a1.uSpriteFrameID = 0;
         v161 = v3->uPlayerID;
         a1.field_60_distance_related_prolly_lod = 0;
-        a1.uFacing = v1;
+        a1.uFacing = 0;
         v161 *= 8;
         LOBYTE(v161) = v161 | OBJECT_Player;
         a1.field_58_pid = v161;
         a1.uSoundID = LOWORD(v3->field_10);
-        a2 = v1;
-        if ( (signed int)v726 > v1 )
+        a2 = 0;
+        if ( (signed int)v726 > 0 )
         {
           do
           {
@@ -4624,9 +4627,9 @@
             v732 = pActors[v162].uActorHeight;
             a1.vPosition.z = pActors[v162].vPosition.z - (unsigned int)(signed __int64)((double)v732 * unk_4D8548);
             v163 = 8 * dword_50BF30[a2];
-            LOBYTE(v163) = v163 | 3;
+            LOBYTE(v163) = v163 | OBJECT_Actor;
             a1.field_5C = v163;
-            v164 = a1.Create(0, v1, v1, v1);
+            v164 = a1.Create(0, 0, 0, 0);
             v165 = a2;
             DamageMonsterFromParty(8 * v164 | AI_OBJECT_LAYING_ITEM, dword_50BF30[a2], &v700);
             v166 = pGame->GetStru6();
@@ -4645,14 +4648,14 @@
         v168 = 0;
         do
         {
-          v169 = pOtherOverlayList->_4418B1(2000, v168++ + 100, v1, 65536);
+          v169 = pOtherOverlayList->_4418B1(2000, v168++ + 100, 0, 65536);
           v716 = v169;
         }
         while ( v168 < 4 );
-        v668 = v1;
+        v668 = 0;
         v732 = (int)v733 << 7;
-        v658 = v1;
-        v653 = v1;
+        v658 = 0;
+        v653 = 0;
         v651 = v731;
         v28 = pParty->uTimePlayed + (signed __int64)((double)(signed int)((int)v733 << 7) * 0.033333335);
         goto LABEL_992;
@@ -4680,25 +4683,25 @@
           goto LABEL_83;
         v174 = 0;
         do
-          pOtherOverlayList->_4418B1(2010, v174++ + 100, v1, 65536);
+          pOtherOverlayList->_4418B1(2010, v174++ + 100, 0, 65536);
         while ( v174 < 4 );
         v175 = v3->spellnum;
         v176 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v175, v1);
+        pGame->GetStru6()->SetPlayerBuffAnim(v175, 0);
         v83 = 1;
         v177 = v3->spellnum;
         v178 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v177, 1u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v177, 1);
         v179 = v3->spellnum;
         v180 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v179, 2u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v179, 2);
         v181 = v3->spellnum;
         v182 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v181, 3u);
-        v673 = v1;
+        pGame->GetStru6()->SetPlayerBuffAnim(v181, 3);
+        v673 = 0;
         v732 = (int)v733 << 7;
-        v662 = v1;
-        v655 = v1;
+        v662 = 0;
+        v655 = 0;
         v652 = v731;
         v183 = (signed int)(signed __int64)((double)(signed int)((int)v733 << 7) * 0.033333335);
         v137 = (char *)&pParty->pPartyBuffs[5];
@@ -4741,13 +4744,13 @@
         a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
         a1.vPosition.y = pParty->vPosition.y;
         a1.vPosition.x = pParty->vPosition.x;
-        a1.uAttributes = v1;
+        a1.uAttributes = 0;
         a1.vPosition.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
         a1.uSectorID = pIndoor->GetSector(
                          pParty->vPosition.x,
                          pParty->vPosition.y,
                          pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3);
-        a1.uSpriteFrameID = v1;
+        a1.uSpriteFrameID = 0;
         v187 = 8 * v3->uPlayerID;
         LOBYTE(v187) = v187 | OBJECT_Player;
         a1.field_58_pid = v187;
@@ -4781,7 +4784,7 @@
           goto LABEL_83;
         v191 = 0;
         do
-          pOtherOverlayList->_4418B1(2040, v191++ + 100, v1, 65536);
+          pOtherOverlayList->_4418B1(2040, v191++ + 100, 0, 65536);
         while ( v191 < 4 );
         BYTE1(pParty->uFlags) |= 1u;
         pParty->uFallSpeed = 1000;
@@ -4825,20 +4828,20 @@
         {
           v197 = v3->spellnum;
           v198 = pGame->GetStru6();
-          pGame->GetStru6()->SetPlayerBuffAnim(v197, v1);
+          pGame->GetStru6()->SetPlayerBuffAnim(v197, 0);
           v83 = 1;
           v199 = v3->spellnum;
           v200 = pGame->GetStru6();
-          pGame->GetStru6()->SetPlayerBuffAnim(v199, 1u);
+          pGame->GetStru6()->SetPlayerBuffAnim(v199, 1);
           v201 = v3->spellnum;
           v202 = pGame->GetStru6();
-          pGame->GetStru6()->SetPlayerBuffAnim(v201, 2u);
+          pGame->GetStru6()->SetPlayerBuffAnim(v201, 2);
           v203 = v3->spellnum;
           v204 = pGame->GetStru6();
-          pGame->GetStru6()->SetPlayerBuffAnim(v203, 3u);
-          v673 = v1;
+          pGame->GetStru6()->SetPlayerBuffAnim(v203, 3);
+          v673 = 0;
           v732 = (int)v733 << 7;
-          v662 = v1;
+          v662 = 0;
           v655 = amount;
           v652 = v731;
           v183 = (signed int)(signed __int64)((double)(signed int)((int)v733 << 7) * 0.033333335);
@@ -4857,7 +4860,7 @@
           v190 = pGlobalTXT_LocalizationStrings[494];
 LABEL_462:
           ShowStatusBarString(v190, 2u);
-          pAudioPlayer->PlaySound(SOUND_PlayerCantCastSpell, v1, v1, -1, v1, v1, v1, v1);
+          pAudioPlayer->PlaySound(SOUND_PlayerCantCastSpell, 0, 0, -1, 0, 0, 0, 0);
           goto LABEL_83;
         }
         if ( !pPlayers[v3->uPlayerID + 1]->GetMaxMana() )
@@ -4867,15 +4870,15 @@
           goto LABEL_462;
         }
         LODWORD(v733) = 3600 * v2;
-        if ( v731 == 2 || v731 == 3 || (amount = v1, v731 != 4) )
+        if ( v731 == 2 || v731 == 3 || (amount = 0, v731 != 4) )
           amount = 1;
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
           goto LABEL_83;
         v205 = 0;
         do
-          pOtherOverlayList->_4418B1(2090, v205++ + 100, v1, 65536);
+          pOtherOverlayList->_4418B1(2090, v205++ + 100, 0, 65536);
         while ( v205 < 4 );
-        v206 = pOtherOverlayList->_4418B1(10008, 203, v1, 65536);
+        v206 = pOtherOverlayList->_4418B1(10008, 203, 0, 65536);
         v207 = v3->uPlayerID + 1;
         v716 = v206;
         v668 = v207;
@@ -4925,10 +4928,10 @@
           v208 = LODWORD(v725);
         }
         v726 = (Player *)v211;
-        HIDWORD(v733) = v1;
+        HIDWORD(v733) = 0;
         *(float *)&v732 = (double)v211;
         LODWORD(v725) = v211 + 2500;
-        v721 = v1;
+        v721 = 0;
         *(float *)&y = (double)(v211 + 2500);
         v730 = v208 == 3 ? a2 : 0;
         a2 = 20;
@@ -4945,8 +4948,8 @@
           *(float *)&v726 = v216 * v216;
           if ( sqrt(*((float *)&v733 + 1) * *((float *)&v733 + 1) + *(float *)&v726 + *(float *)&v721) <= 1.0 )
           {
-            LODWORD(v685) = v1;
-            HIDWORD(v685) = v1;
+            LODWORD(v685) = 0;
+            HIDWORD(v685) = 0;
           }
           else
           {
@@ -4960,12 +4963,12 @@
           a1.field_4C = v2;
           a1.field_50 = v731;
           a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
-          a1.uAttributes = v1;
+          a1.uAttributes = 0;
           a1.vPosition.x = LODWORD(v718);
           a1.vPosition.y = v713;
-          a1.uSectorID = v1;
+          a1.uSectorID = 0;
           a1.vPosition.z = (int)((char *)_this + LODWORD(v725));
-          a1.uSpriteFrameID = v1;
+          a1.uSpriteFrameID = 0;
           a1.field_58_pid = 8 * v3->uPlayerID | OBJECT_Player;
           a1.field_5C = v730;
           a1.field_60_distance_related_prolly_lod = stru_50C198._427546((int)&_this[69].uNumCharges);
@@ -4977,7 +4980,7 @@
                  v685,
                  SHIDWORD(v685),
                  pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed,
-                 v1) != -1
+                 0) != -1
             && pParty->bTurnBasedModeOn == 1 )
             ++pTurnEngine->field_1C;
           v721 = rand() % 1024 - 512;
@@ -4996,7 +4999,7 @@
           {
             if ( v220 == 1 )
             {
-              amount = v1;
+              amount = 0;
               goto LABEL_433;
             }
             v221 = 180 * v2;
@@ -5054,11 +5057,11 @@
           v671 = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
           v660 = pParty->vPosition.y;
 LABEL_153:
-          a1.uAttributes = v1;
+          a1.uAttributes = 0;
           a1.vPosition.x = pParty->vPosition.x;
           a1.vPosition.z = v51;
           v52 = pIndoor->GetSector(pParty->vPosition.x, v660, v671);
-          a1.uSpriteFrameID = v1;
+          a1.uSpriteFrameID = 0;
           a1.uSectorID = v52;
           v53 = 8 * v3->uPlayerID;
           LOBYTE(v53) = v53 | OBJECT_Player;
@@ -5089,13 +5092,13 @@
           a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
           a1.vPosition.y = pParty->vPosition.y;
           a1.vPosition.x = pParty->vPosition.x;
-          a1.uAttributes = v1;
+          a1.uAttributes = 0;
           a1.vPosition.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
           a1.uSectorID = pIndoor->GetSector(
                            pParty->vPosition.x,
                            pParty->vPosition.y,
                            pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3);
-          a1.uSpriteFrameID = v1;
+          a1.uSpriteFrameID = 0;
           v226 = 8 * v3->uPlayerID;
           LOBYTE(v226) = v226 | OBJECT_Player;
           a1.field_58_pid = v226;
@@ -5135,20 +5138,20 @@
         LODWORD(v733) = v229;
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
           goto LABEL_83;
-        v716 = pOtherOverlayList->_4418B1(10005, 201, v1, 65536);
+        v716 = pOtherOverlayList->_4418B1(10005, 201, 0, 65536);
         v230 = v3->spellnum;
         v231 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v230, v1);
+        pGame->GetStru6()->SetPlayerBuffAnim(v230, 0);
         v232 = 1;
         v233 = v3->spellnum;
         v234 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v233, 1u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v233, 1);
         v235 = v3->spellnum;
         v236 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v235, 2u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v235, 2);
         v237 = v3->spellnum;
         v238 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v237, 3u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v237, 3);
         v239 = v3->uPlayerID + 1;
         v732 = v229 << 7;
         pParty->pPartyBuffs[18].Apply(
@@ -5196,15 +5199,15 @@
         v243 = y;
         y[25] = v242;
         *((int *)v243 + 4) = (unsigned __int8)v242;
-        if ( (unsigned __int8)v242 <= v1 )
-        {
-          *(int *)v243 = v1;
+        if ( (unsigned __int8)v242 <= 0 )
+        {
+          *(int *)v243 = 0;
           dword_50C9D0 = 113;
-          dword_50C9D4 = v1;
+          dword_50C9D4 = 0;
           dword_50C9D8 = 1;
           ShowStatusBarString(pGlobalTXT_LocalizationStrings[428], 2u);
-          pAudioPlayer->PlaySound(SOUND_PlayerCantCastSpell, v1, v1, -1, v1, v1, v1, v1);
-          v3->spellnum = v1;
+          pAudioPlayer->PlaySound(SOUND_PlayerCantCastSpell, 0, 0, -1, 0, 0, 0, 0);
+          v3->spellnum = 0;
           goto LABEL_1165;
         }
         *((int *)v243 + 5) |= 0x40u;
@@ -5212,7 +5215,7 @@
       case 30:
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
           goto LABEL_83;
-        uRequiredMana = v1;
+        uRequiredMana = 0;
         HIDWORD(v733) = 10 * v2;
         v730 = 1;
         v244 = (char *)&pParty->pPlayers[v3->uPlayerID_2];
@@ -5227,11 +5230,11 @@
           LODWORD(v725) = (int)(char *)&pItemsTable + 48 * *(int *)v245 + 4;
           if ( (unsigned __int8)(v310 ^ v311) | v14 )
           {
-            if ( *(int *)&v244[36 * a2 + 544] == v1 )
+            if ( *(int *)&v244[36 * a2 + 544] == 0 )
             {
-              if ( *(int *)&v244[36 * a2 + 536] == v1 )
+              if ( *(int *)&v244[36 * a2 + 536] == 0 )
               {
-                if ( *(int *)&v244[36 * a2 + 540] == v1 )
+                if ( *(int *)&v244[36 * a2 + 540] == 0 )
                 {
                   v312 = v309[28];
                   if ( v312 )
@@ -5246,11 +5249,11 @@
                           if ( ((ItemGen *)v245)->GetValue() < 0x1C2 )
                           {
                             uRequiredMana = 1;
-                            v730 = v1;
+                            v730 = 0;
                           }
                           if ( rand() % 100 >= SHIDWORD(v733) )
                             uRequiredMana = 1;
-                          if ( uRequiredMana == v1 )
+                          if (!uRequiredMana)
                           {
                             v313 = *(char *)(LODWORD(v725) + 28);
                             if ( v313 == 3 | v313 == 4 | v313 == 5 | v313 == 6 | v313 == 7 | v313 == 8 | v313 == 9 | v313 == 10 | v313 == 11 )
@@ -5294,16 +5297,16 @@
             }
           }
 LABEL_616:
-          if ( LODWORD(v727) == v1 )
+          if ( LODWORD(v727) == 0 )
           {
             v317 = pGlobalTXT_LocalizationStrings[428];
-            if ( v730 == v1 )
+            if ( v730 == 0 )
               v317 = pGlobalTXT_LocalizationStrings[585];
             ShowStatusBarString(v317, 2u);
-            pAudioPlayer->PlaySound(SOUND_PlayerCantCastSpell, v1, v1, -1, v1, v1, v1, v1);
+            pAudioPlayer->PlaySound(SOUND_PlayerCantCastSpell, 0, 0, -1, 0, 0, 0, 0);
             v318 = v726;
-            v3->spellnum = v1;
-            v318->PlaySound(SPEECH_43, v1);
+            v3->spellnum = 0;
+            v318->PlaySound(SPEECH_43, 0);
           }
           goto LABEL_83;
         }
@@ -5314,9 +5317,9 @@
             v245 = (int)&v244[36 * a2 + 532];
             v269 = *(int *)v245;
             if ( *(int *)v245 > 134
-              || *(int *)(v245 + 12) != v1
-              || *(int *)(v245 + 4) != v1
-              || *(int *)(v245 + 8) != v1
+              || *(int *)(v245 + 12) != 0
+              || *(int *)(v245 + 4) != 0
+              || *(int *)(v245 + 8) != 0
               || (_this = (ItemGen *)(v245 + 20), *(char *)(v245 + 20) & 2) )
               goto LABEL_616;
             v270 = (char *)&pItemsTable->pItems[v269].pIconName;
@@ -5329,11 +5332,11 @@
             if ( v272 )
             {
               uRequiredMana = 1;
-              v730 = v1;
+              v730 = 0;
             }
             if ( rand() % 100 >= SHIDWORD(v733) )
               uRequiredMana = 1;
-            if ( uRequiredMana != v1 )
+            if (uRequiredMana)
               goto LABEL_613;
             v273 = v725;
             v274 = *(char *)(LODWORD(v725) + 28);
@@ -5412,9 +5415,9 @@
           {
             if ( v731 != 4
               || (v245 = (int)&v726->pInventoryItems[a2], v246 = *(int *)v245, *(int *)v245 > 134)
-              || v726->pInventoryItems[a2].uSpecEnchantmentType != v1
-              || v726->pInventoryItems[a2].uEncantmentType != v1
-              || v726->pInventoryItems[a2]._bonus_strength != v1
+              || v726->pInventoryItems[a2].uSpecEnchantmentType != 0
+              || v726->pInventoryItems[a2].uEncantmentType != 0
+              || v726->pInventoryItems[a2]._bonus_strength != 0
               || (_this = (ItemGen *)((char *)&v726->pInventoryItems[a2] + 20), v726->pInventoryItems[a2].Broken()) )
               goto LABEL_616;
             v247 = (char *)&pItemsTable->pItems[v246].pIconName;
@@ -5427,11 +5430,11 @@
             if ( v249 )
             {
               uRequiredMana = 1;
-              v730 = v1;
+              v730 = 0;
             }
             if ( rand() % 100 >= SHIDWORD(v733) )
               uRequiredMana = 1;
-            if ( uRequiredMana != v1 )
+            if (uRequiredMana)
               goto LABEL_613;
             v250 = v725;
             v251 = *(char *)(LODWORD(v725) + 28);
@@ -5509,7 +5512,7 @@
             }
           }
 LABEL_615:
-          v1 = 0;
+          //v1 = 0;
           goto LABEL_616;
         }
         v289 = (ItemGen *)&v244[36 * a2 + 532];
@@ -5517,9 +5520,9 @@
         v290 = v289->uItemID;
         LODWORD(v725) = (int)(char *)&pItemsTable + 48 * v290 + 4;
         if ( v290 > 134
-          || _this->uSpecEnchantmentType != v1
-          || _this->uEncantmentType != v1
-          || _this->_bonus_strength != v1
+          || _this->uSpecEnchantmentType != 0
+          || _this->uEncantmentType != 0
+          || _this->_bonus_strength != 0
           || (v291 = pItemsTable->pItems[v290].uEquipType) == 0
           || v291 == 1
           || v291 == 2
@@ -5529,13 +5532,13 @@
           uRequiredMana = 1;
         if ( rand() % 100 >= SHIDWORD(v733) )
           uRequiredMana = 1;
-        if ( uRequiredMana != v1 )
+        if ( uRequiredMana != 0 )
           goto LABEL_199;
         v292 = *(char *)(LODWORD(v725) + 28);
         if ( !(v292 == 3 | v292 == 4 | v292 == 5 | v292 == 6 | v292 == 7 | v292 == 8 | v292 == 9 | v292 == 10 | v292 == 11) )
         {
           v2 = v723;
-          v1 = 0;
+          //v1 = 0;
           goto LABEL_199;
         }
         if ( rand() % 100 >= 80 )
@@ -5615,7 +5618,7 @@
         if ( pParty->uFlags & 0x30 && v12 != 4 || rand() % 100 >= amount && v731 != 4 )
           goto LABEL_200;
         byte_50C0C0 = LOBYTE(v3->uPlayerID);
-        pMessageQueue_50CBD0->AddMessage(UIMSG_C3, v1, v1);
+        pMessageQueue_50CBD0->AddMessage(UIMSG_C3, 0, 0);
         goto LABEL_1056;
       case 33:
         LODWORD(v733) = 604800 * v2;
@@ -5625,7 +5628,7 @@
         if ( pPlayer->sMana >= (signed int)uRequiredMana )
         {
           pEventTimer->Pause();
-          pMessageQueue_50CBD0->AddMessage(UIMSG_B1, v1, v1);
+          pMessageQueue_50CBD0->AddMessage(UIMSG_B1, 0, 0);
           qword_506350 = (signed int)v733;
           _506348_current_lloyd_playerid = v3->uPlayerID;
           ::uRequiredMana = v319;
@@ -5675,13 +5678,13 @@
         a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
         a1.vPosition.y = pParty->vPosition.y;
         a1.vPosition.x = pParty->vPosition.x;
-        a1.uAttributes = v1;
+        a1.uAttributes = 0;
         a1.vPosition.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
         a1.uSectorID = pIndoor->GetSector(
                          pParty->vPosition.x,
                          pParty->vPosition.y,
                          pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3);
-        a1.uSpriteFrameID = v1;
+        a1.uSpriteFrameID = 0;
         v326 = 8 * v3->uPlayerID;
         LOBYTE(v326) = v326 | OBJECT_Player;
         a1.field_58_pid = v326;
@@ -5708,9 +5711,9 @@
         a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
         a1.vPosition.x = pParty->vPosition.x;
         a1.vPosition.y = pParty->vPosition.y;
-        a1.uAttributes = v1;
-        a1.uSectorID = v1;
-        a1.uSpriteFrameID = v1;
+        a1.uAttributes = 0;
+        a1.uSectorID = 0;
+        a1.uSpriteFrameID = 0;
         a1.vPosition.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 3;
         v327 = 8 * v3->uPlayerID;
         LOBYTE(v327) = v327 | OBJECT_Player;
@@ -5721,7 +5724,7 @@
         a1.uSoundID = LOWORD(v3->field_10);
         if ( pParty->bTurnBasedModeOn == 1 )
           a1.uAttributes = 4;
-        v669 = v1;
+        v669 = 0;
         v659 = pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed;
         v35 = (signed int)stru_5C6E00->uIntegerHalfPi / 2;
 LABEL_124:
@@ -5748,21 +5751,21 @@
           goto LABEL_83;
         v331 = v3->spellnum;
         v332 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v331, v1);
+        pGame->GetStru6()->SetPlayerBuffAnim(v331, 0);
         v83 = 1;
         v333 = v3->spellnum;
         v334 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v333, 1u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v333, 1);
         v335 = v3->spellnum;
         v336 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v335, 2u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v335, 2);
         v337 = v3->spellnum;
         v338 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v337, 3u);
-        v673 = v1;
+        pGame->GetStru6()->SetPlayerBuffAnim(v337, 3);
+        v673 = 0;
         v732 = (int)v733 << 7;
-        v662 = v1;
-        v655 = v1;
+        v662 = 0;
+        v655 = 0;
         v652 = v731;
         v183 = (signed int)(signed __int64)((double)(signed int)((int)v733 << 7) * 0.033333335);
         v137 = (char *)&pParty->pPartyBuffs[3];
@@ -5796,29 +5799,29 @@
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
           goto LABEL_83;
         v342 = *(int *)&v3->field_C;
-        if ( v342 == v1 )
+        if ( v342 == 0 )
         {
           v345 = v3->uPlayerID_2;
           v346 = v3->spellnum;
           v347 = pGame->GetStru6();
           pGame->GetStru6()->SetPlayerBuffAnim(v346, v345);
-          v668 = v1;
-          v658 = v1;
+          v668 = 0;
+          v658 = 0;
           v653 = amount;
           LODWORD(v28) = LODWORD(pParty->uTimePlayed) + 1280;
           v651 = v731;
-          HIDWORD(v650) = v1 + ((pParty->uTimePlayed + 1280) >> 32);
+          HIDWORD(v650) = 0 + ((pParty->uTimePlayed + 1280) >> 32);
           v27 = (char *)&pParty->pPlayers[v3->uPlayerID_2].pPlayerBuffs[4];
           goto LABEL_104;
         }
         if ( (v342 & 7) == OBJECT_Actor)
         {
           v343 = v342 >> 3;
-          HIDWORD(v344) = v1 + ((pParty->uTimePlayed + 1280) >> 32);
+          HIDWORD(v344) = 0 + ((pParty->uTimePlayed + 1280) >> 32);
           LODWORD(v344) = LODWORD(pParty->uTimePlayed) + 1280;
-          pActors[v343].pActorBuffs[11].Apply(v344, v731, amount, v1, v1);
+          pActors[v343].pActorBuffs[11].Apply(v344, v731, amount, 0, 0);
           BYTE2(pActors[v343].uAttributes) |= 8u;
-          v672 = v1;
+          v672 = 0;
           v661 = &pActors[v343];
 LABEL_165:
           v56 = pGame->GetStru6();
@@ -5834,7 +5837,7 @@
         {
           if ( v349 == 1 )
           {
-            amount = v1;
+            amount = 0;
             goto LABEL_679;
           }
 LABEL_677:
@@ -5853,13 +5856,13 @@
           goto LABEL_1056;
         if ( v731 == 4 )
         {
-          LODWORD(v351->pConditions[0]) = v1;
-          HIDWORD(v351->pConditions[0]) = v1;
+          LODWORD(v351->pConditions[0]) = 0;
+          HIDWORD(v351->pConditions[0]) = 0;
           goto LABEL_904;
         }
         v732 = amount << 7;
         v351->DiscardConditionIfLastsLongerThan(
-          v1,
+          0,
           (signed __int64)((double)(signed __int64)pParty->uTimePlayed - (double)(amount << 7) * 0.033333335));
         if ( HIDWORD(pParty->pPlayers[v3->uPlayerID_2].pConditions[0]) | LODWORD(pParty->pPlayers[v3->uPlayerID_2].pConditions[0]) )
           goto LABEL_1056;
@@ -5880,16 +5883,16 @@
           v362 = v3->spellnum;
           v363 = pGame->GetStru6();
           pGame->GetStru6()->SetPlayerBuffAnim(v362, v361);
-          v668 = v1;
+          v668 = 0;
           v732 = (int)v733 << 7;
-          v658 = v1;
-          v653 = v1;
+          v658 = 0;
+          v653 = 0;
           v651 = v731;
           v28 = pParty->uTimePlayed + (signed int)(signed __int64)((double)(signed int)((int)v733 << 7) * 0.033333335);
           v27 = (char *)&pParty->pPlayers[v3->uPlayerID_2].pPlayerBuffs[11];
           goto LABEL_103;
         }
-        a2 = v1;
+        a2 = 0;
         v732 = (int)v733 << 7;
         v717 = (signed int)(signed __int64)((double)(signed int)((int)v733 << 7) * 0.033333335);
         v357 = pParty->pPlayers;//[0].pPlayerBuffs[11];
@@ -5899,7 +5902,7 @@
           v359 = v3->spellnum;
           v360 = pGame->GetStru6();
           pGame->GetStru6()->SetPlayerBuffAnim(v359, v358);
-		  v357->pPlayerBuffs[11].Apply(pParty->uTimePlayed + v717, v731, v1, v1, v1);
+		  v357->pPlayerBuffs[11].Apply(pParty->uTimePlayed + v717, v731, 0, 0, 0);
           ++a2;
           ++v357;// = (SpellBuff *)((char *)v357 + 6972);
         }
@@ -5923,17 +5926,17 @@
         a1.field_4C = v2;
         a1.field_50 = v731;
         a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
-        a1.uAttributes = v1;
-        a1.uSectorID = v1;
-        a1.uSpriteFrameID = v1;
+        a1.uAttributes = 0;
+        a1.uSectorID = 0;
+        a1.uSpriteFrameID = 0;
         v368 = v3->uPlayerID;
         a1.field_60_distance_related_prolly_lod = 0;
-        a1.uFacing = v1;
+        a1.uFacing = 0;
         v368 *= 8;
         LOBYTE(v368) = v368 | OBJECT_Player;
         a1.field_58_pid = v368;
         a1.uSoundID = LOWORD(v3->field_10);
-        for ( a2 = v1; a2 < (signed int)v726; ++a2 )
+        for ( a2 = 0; a2 < (signed int)v726; ++a2 )
         {
           v369 = &pActors[dword_50BF30[a2]];
           if ( MonsterStats::BelongsToSupertype(v369->pMonsterInfo.uID, MONSTER_SUPERTYPE_UNDEAD) )
@@ -5943,28 +5946,25 @@
             v732 = v369->uActorHeight;
             a1.vPosition.z = v369->vPosition.z - (unsigned int)(signed __int64)((double)v732 * unk_4D8548);
             v370 = 8 * dword_50BF30[a2];
-            LOBYTE(v370) = v370 | 3;
+            LOBYTE(v370) = v370 | OBJECT_Actor;
             a1.field_5C = v370;
-            a1.Create(0, v1, v1, v1);
+            a1.Create(0, 0, 0, 0);
             v732 = (int)v733 << 7;
             v369->pActorBuffs[4].Apply(
               pParty->uTimePlayed + (signed __int64)((double)(signed int)((int)v733 << 7) * 0.033333335),
-              v731,
-              v1,
-              v1,
-              v1);
+              v731, 0, 0, 0);
           }
         }
         goto LABEL_1056;
       case 53:
         v371 = v12 - 2;
         if ( v371 && (v372 = v371 - 1) != 0 && v372 == 1 )
-          amount = v1;
+          amount = 0;
         else
           amount = 86400 * v2;
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
           goto LABEL_83;
-        pOtherOverlayList->_4418B1(5080, v3->uPlayerID_2 + 100, v1, 65536);
+        pOtherOverlayList->_4418B1(5080, v3->uPlayerID_2 + 100, 0, 65536);
         v373 = v3->uPlayerID_2;
         if ( !(HIDWORD(pParty->pPlayers[v373].pConditions[14]) | LODWORD(pParty->pPlayers[v373].pConditions[14])) )
           goto LABEL_1056;
@@ -5973,11 +5973,11 @@
         if ( v14 )
         {
           v374 = v3->uPlayerID_2;
-          LODWORD(pParty->pPlayers[v374].pConditions[14]) = v1;
-          HIDWORD(pParty->pPlayers[v374].pConditions[14]) = v1;
+          LODWORD(pParty->pPlayers[v374].pConditions[14]) = 0;
+          HIDWORD(pParty->pPlayers[v374].pConditions[14]) = 0;
           v376 = v3->uPlayerID_2;
-          LODWORD(pParty->pPlayers[v376].pConditions[13]) = v1;
-          HIDWORD(pParty->pPlayers[v376].pConditions[13]) = v1;
+          LODWORD(pParty->pPlayers[v376].pConditions[13]) = 0;
+          HIDWORD(pParty->pPlayers[v376].pConditions[13]) = 0;
         }
         else
         {
@@ -6015,15 +6015,15 @@
         while ( v382 <= 4 );
         v384 = 0;
         v730 = v381;
-        if ( v381 > v1 )
+        if ( v381 > 0 )
         {
           do
             HIDWORD(v733) += pPlayers[v682[v384++]]->sHealth;
           while ( v384 < v381 );
         }
         v732 = (signed __int64)((double)SHIDWORD(v733) / (double)v730);
-        HIDWORD(v733) = v1;
-        if ( v381 > v1 )
+        HIDWORD(v733) = 0;
+        if ( v381 > 0 )
         {
           do
           {
@@ -6034,10 +6034,10 @@
             if ( v726->sHealth > v386 )
               *(int *)(*(int *)v385 + 6460) = v726->GetMaxHealth();
             v387 = *(Player **)v385;
-            if ( v387->sHealth > v1 )
+            if ( v387->sHealth > 0 )
             {
-              LODWORD(v387->pConditions[13]) = v1;
-              HIDWORD(v387->pConditions[13]) = v1;
+              LODWORD(v387->pConditions[13]) = 0;
+              HIDWORD(v387->pConditions[13]) = 0;
             }
             v388 = HIDWORD(v733);
             v389 = LOWORD(v682[HIDWORD(v733)]) - 1;
@@ -6071,7 +6071,7 @@
           goto LABEL_751;
         }
         if ( v394 == 1 )
-          amount = v1;
+          amount = 0;
 LABEL_751:
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
           goto LABEL_83;
@@ -6080,18 +6080,18 @@
           || HIDWORD(pParty->pPlayers[v396].pConditions[14]) | LODWORD(pParty->pPlayers[v396].pConditions[14]) )
         {
           if ( !(HIDWORD(pParty->pPlayers[v396].pConditions[1]) | LODWORD(pParty->pPlayers[v396].pConditions[1])) )
-            pParty->pPlayers[v396].PlaySound(SPEECH_25, v1);
+            pParty->pPlayers[v396].PlaySound(SPEECH_25, 0);
           if ( v731 == 4 )
           {
             v397 = v3->uPlayerID_2;
-            LODWORD(pParty->pPlayers[v397].pConditions[16]) = v1;
-            HIDWORD(pParty->pPlayers[v397].pConditions[16]) = v1;
+            LODWORD(pParty->pPlayers[v397].pConditions[16]) = 0;
+            HIDWORD(pParty->pPlayers[v397].pConditions[16]) = 0;
             v398 = v3->uPlayerID_2;
-            LODWORD(pParty->pPlayers[v398].pConditions[14]) = v1;
-            HIDWORD(pParty->pPlayers[v398].pConditions[14]) = v1;
+            LODWORD(pParty->pPlayers[v398].pConditions[14]) = 0;
+            HIDWORD(pParty->pPlayers[v398].pConditions[14]) = 0;
             v399 = v3->uPlayerID_2;
-            LODWORD(pParty->pPlayers[v399].pConditions[13]) = v1;
-            HIDWORD(pParty->pPlayers[v399].pConditions[13]) = v1;
+            LODWORD(pParty->pPlayers[v399].pConditions[13]) = 0;
+            HIDWORD(pParty->pPlayers[v399].pConditions[13]) = 0;
           }
           else
           {
@@ -6130,7 +6130,7 @@
         {
           if ( v406 == 1 )
           {
-            amount = v1;
+            amount = 0;
             goto LABEL_768;
           }
 LABEL_766:
@@ -6167,7 +6167,7 @@
           {
             if ( v412 == 1 )
             {
-              amount = v1;
+              amount = 0;
               goto LABEL_780;
             }
             v413 = 180 * v2;
@@ -6202,7 +6202,7 @@
       case 59:
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
           goto LABEL_83;
-        if ( a2 == v1 || (a2 & 7) != OBJECT_Actor)
+        if ( a2 == 0 || (a2 & 7) != OBJECT_Actor)
           goto LABEL_1056;
         v417 = (int)&pActors[a2 >> 3];
         v730 = v417;
@@ -6212,7 +6212,7 @@
           v417 = v730;
         }
         v418 = *(int *)(v417 + 672);
-        HIDWORD(v733) = v1;
+        HIDWORD(v733) = 0;
         if ( pItemsTable->pItems[v418].uEquipType == 18 )
           HIDWORD(v733) = *(int *)(v417 + 684);
 
@@ -6220,14 +6220,14 @@
         v683.Reset();
 
         v419 = *(short *)(v730 + 180);
-        if ( v419 != (short)v1 )
+        if (v419)
         {
           v683.uItemID = v419;
           goto LABEL_799;
         }
         v420 = 0;
         v421 = v730 + 564;
-        while ( *(int *)v421 == v1 || pItemsTable->pItems[*(int *)v421].uEquipType == 18 )
+        while ( !*(int *)v421 || pItemsTable->pItems[*(int *)v421].uEquipType == 18 )
         {
           ++v420;
           v421 += 36;
@@ -6236,12 +6236,12 @@
         }
         memcpy(&v683, (const void *)(v730 + 36 * v420 + 564), sizeof(v683));
         v2 = v723;
-        v1 = 0;
+        //v1 = 0;
 LABEL_799:
-        if ( HIDWORD(v733) != v1 )
+        if ( HIDWORD(v733) != 0 )
         {
           v675 = (const char *)HIDWORD(v733);
-          if ( v683.uItemID != v1 )
+          if (v683.uItemID)
           {
             v422 = v683.GetDisplayName();
             sprintf(pTmpBuf2, "(%s), and %d gold", v422, v675);
@@ -6250,7 +6250,7 @@
           v664 = "%d gold";
           goto LABEL_803;
         }
-        if ( v683.uItemID != v1 )
+        if (v683.uItemID)
         {
           v675 = v683.GetDisplayName();
           v664 = "(%s)";
@@ -6304,10 +6304,7 @@
           v732 = amount << 7;
           pActors[v426].pActorBuffs[9].Apply(
             pParty->uTimePlayed + (signed __int64)((double)(amount << 7) * 0.033333335),
-            v731,
-            v1,
-            v1,
-            v1);
+            v731, 0, 0, 0);
           pActors[v426].pMonsterInfo.uHostilityType = MonsterInfo::Hostility_Long;
         }
         a1.stru_24.Reset();
@@ -6334,10 +6331,7 @@
           v732 = amount << 7;
           pActors[v427].pActorBuffs[12].Apply(
             pParty->uTimePlayed + (signed __int64)((double)(amount << 7) * 0.033333335),
-            v731,
-            v1,
-            v1,
-            v1);
+            v731, 0, 0, 0);
         }
         a1.stru_24.Reset();
         a1.field_48 = v3->spellnum;
@@ -6364,17 +6358,17 @@
         a1.field_4C = v2;
         a1.field_50 = v731;
         a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
-        a1.uAttributes = v1;
-        a1.uSectorID = v1;
-        a1.uSpriteFrameID = v1;
+        a1.uAttributes = 0;
+        a1.uSectorID = 0;
+        a1.uSpriteFrameID = 0;
         v432 = v3->uPlayerID;
         a1.field_60_distance_related_prolly_lod = 0;
-        a1.uFacing = v1;
+        a1.uFacing = 0;
         v432 *= 8;
         LOBYTE(v432) = v432 | OBJECT_Player;
         a1.field_58_pid = v432;
         a1.uSoundID = LOWORD(v3->field_10);
-        for ( a2 = v1; a2 < (signed int)v726; ++a2 )
+        for ( a2 = 0; a2 < (signed int)v726; ++a2 )
         {
           v433 = &pActors[dword_50BF30[a2]];
           if ( MonsterStats::BelongsToSupertype(v433->pMonsterInfo.uID, MONSTER_SUPERTYPE_UNDEAD) )
@@ -6384,25 +6378,22 @@
           v732 = v433->uActorHeight;
           a1.vPosition.z = v433->vPosition.z - (unsigned int)(signed __int64)((double)v732 * unk_4D8548);
           v434 = 8 * dword_50BF30[a2];
-          LOBYTE(v434) = v434 | 3;
+          LOBYTE(v434) = v434 | OBJECT_Actor;
           a1.field_5C = v434;
-          a1.Create(0, v1, v1, v1);
+          a1.Create(0, 0, 0, 0);
           if ( stru_50C198.GetMagicalResistance(v433, 7u) )
           {
             v732 = amount << 7;
             v433->pActorBuffs[4].Apply(
               pParty->uTimePlayed + (signed __int64)((double)(amount << 7) * 0.033333335),
-              v731,
-              v1,
-              v1,
-              v1);
+              v731, 0, 0, 0);
           }
         }
         goto LABEL_1056;
       case 64:
         v435 = v12 - 2;
         if ( v435 && (v436 = v435 - 1) != 0 && v436 == 1 )
-          amount = v1;
+          amount = 0;
         else
           amount = 86400 * v2;
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
@@ -6415,12 +6406,12 @@
         if ( HIDWORD(pParty->pPlayers[v440].pConditions[5]) | LODWORD(pParty->pPlayers[v440].pConditions[5]) )
         {
           if ( !(HIDWORD(pParty->pPlayers[v440].pConditions[1]) | LODWORD(pParty->pPlayers[v440].pConditions[1])) )
-            pParty->pPlayers[v440].PlaySound(SPEECH_25, v1);
+            pParty->pPlayers[v440].PlaySound(SPEECH_25, 0);
           if ( v731 == 4 )
           {
             v441 = v3->uPlayerID_2;
-            LODWORD(pParty->pPlayers[v441].pConditions[5]) = v1;
-            HIDWORD(pParty->pPlayers[v441].pConditions[5]) = v1;
+            LODWORD(pParty->pPlayers[v441].pConditions[5]) = 0;
+            HIDWORD(pParty->pPlayers[v441].pConditions[5]) = 0;
           }
           else
           {
@@ -6431,7 +6422,7 @@
           }
           v377 = &pParty->pPlayers[v3->uPlayerID_2];
 LABEL_720:
-          v377->SetCondition(1u, v1);
+          v377->SetCondition(1, 0);
         }
         goto LABEL_1056;
       case 42:
@@ -6496,7 +6487,7 @@
             v447 = &pLevelDecorations[v445];
             dword_507CD8 = 1;
             v448 = v447->field_16_event_id;
-            if ( v448 != (short)v1 )
+            if (v448)
             {
               v677 = 1;
               v446 = v448;
@@ -6508,7 +6499,7 @@
             {
               GlobalEventInfo = (int)v447;
               EventProcessor(stru_5E4C90._decor_events[v447->_idx_in_stru123 - 75] + 380, 0, 1);
-              GlobalEventInfo = v1;
+              GlobalEventInfo = 0;
             }
           }
         }
@@ -6522,7 +6513,7 @@
           {
             if ( v452 == 1 )
             {
-              amount = v1;
+              amount = 0;
               goto LABEL_883;
             }
             v453 = 180 * v2;
@@ -6551,8 +6542,8 @@
         if ( v731 == 4 )
         {
 LABEL_637:
-          *(int *)v324 = v1;
-          *((int *)v324 + 1) = v1;
+          *(int *)v324 = 0;
+          *((int *)v324 + 1) = 0;
           goto LABEL_1056;
         }
         v732 = amount << 7;
@@ -6586,7 +6577,7 @@
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
           goto LABEL_83;
         v460 = *(int *)&v3->field_C;
-        if ( v460 == v1 )
+        if (!v460)
         {
           pParty->pPlayers[v3->uPlayerID_2].Heal(amount);
 LABEL_904:
@@ -6630,7 +6621,7 @@
         {
           if ( v465 == 1 )
           {
-            amount = v1;
+            amount = 0;
             goto LABEL_912;
           }
 LABEL_910:
@@ -6655,14 +6646,14 @@
           goto LABEL_1056;
         if ( v731 == 4 )
         {
-          LODWORD(pParty->pPlayers[v470].pConditions[6]) = v1;
-          HIDWORD(pParty->pPlayers[v470].pConditions[6]) = v1;
+          LODWORD(pParty->pPlayers[v470].pConditions[6]) = 0;
+          HIDWORD(pParty->pPlayers[v470].pConditions[6]) = 0;
           v471 = v3->uPlayerID_2;
-          LODWORD(pParty->pPlayers[v471].pConditions[8]) = v1;
-          HIDWORD(pParty->pPlayers[v471].pConditions[8]) = v1;
+          LODWORD(pParty->pPlayers[v471].pConditions[8]) = 0;
+          HIDWORD(pParty->pPlayers[v471].pConditions[8]) = 0;
           v472 = v3->uPlayerID_2;
-          LODWORD(pParty->pPlayers[v472].pConditions[10]) = v1;
-          HIDWORD(pParty->pPlayers[v472].pConditions[10]) = v1;
+          LODWORD(pParty->pPlayers[v472].pConditions[10]) = 0;
+          HIDWORD(pParty->pPlayers[v472].pConditions[10]) = 0;
           goto LABEL_1056;
         }
         v732 = amount << 7;
@@ -6683,19 +6674,19 @@
           goto LABEL_83;
         v474 = v3->spellnum;
         v475 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v474, v1);
+        pGame->GetStru6()->SetPlayerBuffAnim(v474, 0);
         v476 = v3->spellnum;
         v477 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v476, 1u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v476, 1);
         v478 = v3->spellnum;
         v479 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v478, 2u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v478, 2);
         v480 = v3->spellnum;
         v481 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v480, 3u);
-        v668 = v1;
+        pGame->GetStru6()->SetPlayerBuffAnim(v480, 3);
+        v668 = 0;
         v732 = (int)v733 << 7;
-        v658 = v1;
+        v658 = 0;
         v653 = v2;
         v651 = v731;
         v26 = (signed __int64)((double)(signed int)((int)v733 << 7) * 0.033333335);
@@ -6710,22 +6701,22 @@
         {
           v482 = v3->spellnum;
           v483 = pGame->GetStru6();
-          pGame->GetStru6()->SetPlayerBuffAnim(v482, v1);
+          pGame->GetStru6()->SetPlayerBuffAnim(v482, 0);
           v484 = v3->spellnum;
           v485 = pGame->GetStru6();
-          pGame->GetStru6()->SetPlayerBuffAnim(v484, 1u);
+          pGame->GetStru6()->SetPlayerBuffAnim(v484, 1);
           v486 = v3->spellnum;
           v487 = pGame->GetStru6();
-          pGame->GetStru6()->SetPlayerBuffAnim(v486, 2u);
+          pGame->GetStru6()->SetPlayerBuffAnim(v486, 2);
           v488 = v3->spellnum;
           v489 = pGame->GetStru6();
-          pGame->GetStru6()->SetPlayerBuffAnim(v488, 3u);
+          pGame->GetStru6()->SetPlayerBuffAnim(v488, 3);
           v732 = (int)v733 << 7;
           v717 = (signed int)(signed __int64)((double)(signed int)((int)v733 << 7) * 0.033333335);
-          pParty->pPlayers[0].pPlayerBuffs[6].Apply(pParty->uTimePlayed + v717, 4u, v2, v2, v1);
-          pParty->pPlayers[1].pPlayerBuffs[6].Apply(pParty->uTimePlayed + v717, 4u, v2, v2, v1);
-          pParty->pPlayers[2].pPlayerBuffs[6].Apply(pParty->uTimePlayed + v717, 4u, v2, v2, v1);
-          v668 = v1;
+          pParty->pPlayers[0].pPlayerBuffs[6].Apply(pParty->uTimePlayed + v717, 4u, v2, v2, 0);
+          pParty->pPlayers[1].pPlayerBuffs[6].Apply(pParty->uTimePlayed + v717, 4u, v2, v2, 0);
+          pParty->pPlayers[2].pPlayerBuffs[6].Apply(pParty->uTimePlayed + v717, 4u, v2, v2, 0);
+          v668 = 0;
           v658 = v2;
           v653 = v2;
           LODWORD(v28) = LODWORD(pParty->uTimePlayed) + v717;
@@ -6738,7 +6729,7 @@
         v491 = v3->spellnum;
         v492 = pGame->GetStru6();
         pGame->GetStru6()->SetPlayerBuffAnim(v491, v490);
-        v668 = v1;
+        v668 = 0;
         v732 = (int)v733 << 7;
         v658 = v2;
         v653 = v2;
@@ -6749,7 +6740,7 @@
       case 74:
         v493 = v12 - 2;
         if ( v493 && (v494 = v493 - 1) != 0 && v494 == 1 )
-          amount = v1;
+          amount = 0;
         else
           amount = 86400 * v2;
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
@@ -6765,14 +6756,14 @@
           goto LABEL_1056;
         if ( v731 == 4 )
         {
-          LODWORD(pParty->pPlayers[v498].pConditions[7]) = v1;
-          HIDWORD(pParty->pPlayers[v498].pConditions[7]) = v1;
+          LODWORD(pParty->pPlayers[v498].pConditions[7]) = 0;
+          HIDWORD(pParty->pPlayers[v498].pConditions[7]) = 0;
           v499 = v3->uPlayerID_2;
-          LODWORD(pParty->pPlayers[v499].pConditions[9]) = v1;
-          HIDWORD(pParty->pPlayers[v499].pConditions[9]) = v1;
+          LODWORD(pParty->pPlayers[v499].pConditions[9]) = 0;
+          HIDWORD(pParty->pPlayers[v499].pConditions[9]) = 0;
           v500 = v3->uPlayerID_2;
-          LODWORD(pParty->pPlayers[v500].pConditions[11]) = v1;
-          HIDWORD(pParty->pPlayers[v500].pConditions[11]) = v1;
+          LODWORD(pParty->pPlayers[v500].pConditions[11]) = 0;
+          HIDWORD(pParty->pPlayers[v500].pConditions[11]) = 0;
         }
         else
         {
@@ -6793,10 +6784,12 @@
         }
         goto LABEL_1056;
       case 77:
+      {
         amount = 5 * v2 + 10;
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
           goto LABEL_83;
         v501 = pParty->pPlayers;
+        int v1 = 0;
         do
         {
           v502 = v3->spellnum;
@@ -6808,6 +6801,7 @@
         }
         while ( (signed int)v501 < (signed int)pParty->pHirelings );
         goto LABEL_1056;
+      }
       case 80:
         sRecoveryTime -= v2;
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
@@ -6817,26 +6811,26 @@
         v505 = sub_46A6AC((int)dword_50BF30, 100, 4096);
         ++a1.uItemType;
         HIDWORD(v733) = v505;
-        v690 = v1;
-        v689 = v1;
-        v688 = v1;
+        v690 = 0;
+        v689 = 0;
+        v688 = 0;
         a1.stru_24.Reset();
         a1.field_48 = v3->spellnum;
         a1.field_4C = v2;
         a1.field_50 = v731;
         a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
-        a1.uAttributes = v1;
-        a1.uSectorID = v1;
-        a1.uSpriteFrameID = v1;
+        a1.uAttributes = 0;
+        a1.uSectorID = 0;
+        a1.uSpriteFrameID = 0;
         v506 = v3->uPlayerID;
         a1.field_60_distance_related_prolly_lod = 0;
-        a1.uFacing = v1;
+        a1.uFacing = 0;
         v506 *= 8;
         LOBYTE(v506) = v506 | OBJECT_Player;
         a1.field_58_pid = v506;
         a1.uSoundID = LOWORD(v3->field_10);
-        a2 = v1;
-        if ( SHIDWORD(v733) > v1 )
+        a2 = 0;
+        if ( SHIDWORD(v733) > 0 )
         {
           do
           {
@@ -6846,16 +6840,16 @@
             v732 = pActors[v507].uActorHeight;
             a1.vPosition.z = pActors[v507].vPosition.z - (unsigned int)(signed __int64)((double)v732 * unk_4D8548);
             v508 = 8 * dword_50BF30[a2];
-            LOBYTE(v508) = v508 | 3;
+            LOBYTE(v508) = v508 | OBJECT_Actor;
             a1.field_5C = v508;
-            v509 = a1.Create(0, v1, v1, v1);
+            v509 = a1.Create(0, 0, 0, 0);
             v510 = a2;
-            DamageMonsterFromParty(8 * v509 | 2, dword_50BF30[a2], (Vec3_int_ *)&v688);
+            DamageMonsterFromParty(8 * v509 | OBJECT_Item, dword_50BF30[a2], (Vec3_int_ *)&v688);
             a2 = v510 + 1;
           }
           while ( v510 + 1 < SHIDWORD(v733) );
         }
-        for ( a2 = v1; a2 < SHIDWORD(v733); ++a2 )
+        for ( a2 = 0; a2 < SHIDWORD(v733); ++a2 )
         {
           v511 = &pActors[dword_50BF30[a2]];
           a1.vPosition.x = v511->vPosition.x;
@@ -6863,9 +6857,9 @@
           v732 = v511->uActorHeight;
           a1.vPosition.z = v511->vPosition.z - (unsigned int)(signed __int64)((double)v732 * unk_4D8548);
           v512 = 8 * dword_50BF30[a2];
-          LOBYTE(v512) = v512 | 3;
+          LOBYTE(v512) = v512 | OBJECT_Actor;
           a1.field_5C = v512;
-          a1.Create(0, v1, v1, v1);
+          a1.Create(0, 0, 0, 0);
           v513 = v511->pActorBuffs;
           v726 = (Player *)22;
           do
@@ -6901,10 +6895,10 @@
           v516 = 900 * v2;
           amount = 3;
         }
-        v733 = __PAIR__(v1, v516);
+        v733 = __PAIR__(0, v516);
         v517 = 8 * v3->uPlayerID;
         LOBYTE(v517) = v517 | 4;
-        if ( (signed int)uNumActors > v1 )
+        if ( (signed int)uNumActors > 0 )
         {
           v518 = pActors;//[0].uAIState;
           v726b = uNumActors;
@@ -6956,20 +6950,20 @@
           goto LABEL_83;
         v523 = v3->spellnum;
         v524 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v523, v1);
+        pGame->GetStru6()->SetPlayerBuffAnim(v523, 0);
         v83 = 1;
         v525 = v3->spellnum;
         v526 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v525, 1u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v525, 1);
         v527 = v3->spellnum;
         v528 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v527, 2u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v527, 2);
         v529 = v3->spellnum;
         v530 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v529, 3u);
-        v673 = v1;
+        pGame->GetStru6()->SetPlayerBuffAnim(v529, 3);
+        v673 = 0;
         v732 = (int)v733 << 7;
-        v662 = v1;
+        v662 = 0;
         v655 = amount;
         v652 = v731;
         v183 = (signed __int64)((double)(signed int)((int)v733 << 7) * 0.033333335);
@@ -6987,26 +6981,26 @@
         v531 = sub_46A6AC((int)dword_50BF30, 100, 4096);
         ++a1.uItemType;
         v726 = (Player *)v531;
-        v696 = v1;
-        v695 = v1;
-        v694 = v1;
+        v696 = 0;
+        v695 = 0;
+        v694 = 0;
         a1.stru_24.Reset();
         a1.field_48 = v3->spellnum;
         a1.field_4C = v2;
         a1.field_50 = v731;
         a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
-        a1.uAttributes = v1;
-        a1.uSectorID = v1;
-        a1.uSpriteFrameID = v1;
+        a1.uAttributes = 0;
+        a1.uSectorID = 0;
+        a1.uSpriteFrameID = 0;
         v532 = v3->uPlayerID;
         a1.field_60_distance_related_prolly_lod = 0;
-        a1.uFacing = v1;
+        a1.uFacing = 0;
         v532 *= 8;
         LOBYTE(v532) = v532 | OBJECT_Player;
         a1.field_58_pid = v532;
         a1.uSoundID = LOWORD(v3->field_10);
-        a2 = v1;
-        if ( (signed int)v726 > v1 )
+        a2 = 0;
+        if ( (signed int)v726 > 0 )
         {
           do
           {
@@ -7016,11 +7010,11 @@
             v732 = pActors[v533].uActorHeight;
             a1.vPosition.z = pActors[v533].vPosition.z - (unsigned int)(signed __int64)((double)v732 * unk_4D8548);
             v534 = 8 * dword_50BF30[a2];
-            LOBYTE(v534) = v534 | 3;
+            LOBYTE(v534) = v534 | OBJECT_Actor;
             a1.field_5C = v534;
-            v535 = a1.Create(0, v1, v1, v1);
+            v535 = a1.Create(0, 0, 0, 0);
             v536 = a2;
-            DamageMonsterFromParty(8 * v535 | 2, dword_50BF30[a2], (Vec3_int_ *)&v694);
+            DamageMonsterFromParty(8 * v535 | OBJECT_Item, dword_50BF30[a2], (Vec3_int_ *)&v694);
             a2 = v536 + 1;
           }
           while ( v536 + 1 < (signed int)v726 );
@@ -7046,35 +7040,33 @@
           goto LABEL_83;
         v541 = v3->spellnum;
         v542 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v541, v1);
+        pGame->GetStru6()->SetPlayerBuffAnim(v541, 0);
         v543 = v3->spellnum;
         v544 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v543, 1u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v543, 1);
         v545 = v3->spellnum;
         v546 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v545, 2u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v545, 2);
         v547 = v3->spellnum;
         v548 = pGame->GetStru6();
-        pGame->GetStru6()->SetPlayerBuffAnim(v547, 3u);
+        pGame->GetStru6()->SetPlayerBuffAnim(v547, 3);
         v732 = v730 << 7;
         v549 = (double)(v730 << 7) * 0.033333335;
         *((float *)&v733 + 1) = v549;
         v712 = (signed __int64)v549;
-        pParty->pPartyBuffs[ 1].Apply(pParty->uTimePlayed + (signed __int64)v549, v731, amount, v1, v1);
-        pParty->pPartyBuffs[12].Apply(pParty->uTimePlayed + v712, v731, amount, v1, v1);
-        pParty->pPartyBuffs[ 6].Apply(pParty->uTimePlayed + v712, v731, amount, v1, v1);
-        pParty->pPartyBuffs[17].Apply(pParty->uTimePlayed + v712, v731, amount, v1, v1);
-        pParty->pPartyBuffs[ 0].Apply(pParty->uTimePlayed + v712, v731, amount, v1, v1);
-        pParty->pPartyBuffs[ 4].Apply(pParty->uTimePlayed + v712, v731, amount, v1, v1);
+        pParty->pPartyBuffs[ 1].Apply(pParty->uTimePlayed + (signed __int64)v549, v731, amount, 0, 0);
+        pParty->pPartyBuffs[12].Apply(pParty->uTimePlayed + v712, v731, amount, 0, 0);
+        pParty->pPartyBuffs[ 6].Apply(pParty->uTimePlayed + v712, v731, amount, 0, 0);
+        pParty->pPartyBuffs[17].Apply(pParty->uTimePlayed + v712, v731, amount, 0, 0);
+        pParty->pPartyBuffs[ 0].Apply(pParty->uTimePlayed + v712, v731, amount, 0, 0);
+        pParty->pPartyBuffs[ 4].Apply(pParty->uTimePlayed + v712, v731, amount, 0, 0);
         v550 = v2 + 5;
         pParty->pPartyBuffs[ 5].Apply(
           (signed __int64)((double)(signed __int64)pParty->uTimePlayed + *((float *)&v733 + 1)),
           v731,
-          v550,
-          v1,
-          v1);
-        v668 = v1;
-        v658 = v1;
+          v550, 0, 0);
+        v668 = 0;
+        v658 = 0;
         v653 = v550;
         v651 = v731;
         v28 = (signed __int64)((double)(signed __int64)pParty->uTimePlayed + *((float *)&v733 + 1));
@@ -7109,30 +7101,27 @@
         y = (char *)(60 * (v2 * HIDWORD(v733) + 60));
         v732 = (300 * amount * v2 + 60) << 7;
         v730 = v2 + 5;
-        v726 = (Player *)v1;
+        v726 = 0;
         v553 = pParty->pPlayers;//[0].pConditions[1];
         *((float *)&v733 + 1) = (double)v732 * 0.033333335;
         do
         {
           v554 = v3->spellnum;
           v555 = pGame->GetStru6();
-          pGame->GetStru6()->SetPlayerBuffAnim(v554, v1);
+          pGame->GetStru6()->SetPlayerBuffAnim(v554, 0);
           v556 = v3->spellnum;
           v557 = pGame->GetStru6();
-          pGame->GetStru6()->SetPlayerBuffAnim(v556, 1u);
+          pGame->GetStru6()->SetPlayerBuffAnim(v556, 1);
           v558 = v3->spellnum;
           v559 = pGame->GetStru6();
-          pGame->GetStru6()->SetPlayerBuffAnim(v558, 2u);
+          pGame->GetStru6()->SetPlayerBuffAnim(v558, 2);
           v560 = v3->spellnum;
           v561 = pGame->GetStru6();
-          pGame->GetStru6()->SetPlayerBuffAnim(v560, 3u);
+          pGame->GetStru6()->SetPlayerBuffAnim(v560, 3);
           //((SpellBuff *)(v553 + 6056))->Apply(
 		  v553->pPlayerBuffs[4].Apply(
             (signed __int64)((double)(signed __int64)pParty->uTimePlayed + *((float *)&v733 + 1)),
-            v731,
-            v730,
-            v1,
-            v1);
+            v731, v730, 0, 0);
           if ( *(_QWORD *)v553 )
             v726 = (Player *)1;
           ++v553;
@@ -7141,27 +7130,18 @@
         v562 = v731;
         pParty->pPartyBuffs[9].Apply(
           (signed __int64)((double)(signed __int64)pParty->uTimePlayed + *((float *)&v733 + 1)),
-          v731,
-          v730,
-          v1,
-          v1);
+          v731, v730, 0, 0);
         pParty->pPartyBuffs[14].Apply(
           (signed __int64)((double)(signed __int64)pParty->uTimePlayed + *((float *)&v733 + 1)),
-          v562,
-          v1,
-          v1,
-          v1);
+          v562, 0, 0, 0);
         pParty->pPartyBuffs[15].Apply(
           (signed __int64)((double)(signed __int64)pParty->uTimePlayed + *((float *)&v733 + 1)),
-          v562,
-          v730,
-          v1,
-          v1);
-        if ( v726 != (Player *)v1 )
+          v562, v730, 0, 0);
+        if (v726)
           goto LABEL_1056;
-        v668 = v1;
+        v668 = 0;
         v732 = (int)y << 7;
-        v658 = v1;
+        v658 = 0;
         v653 = v730;
         v651 = v562;
         v28 = (signed __int64)((double)(signed int)((int)y << 7) * 0.033333335
@@ -7174,7 +7154,7 @@
           goto LABEL_200;
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
           goto LABEL_83;
-        a2 = v1;
+        a2 = 0;
         _this = (ItemGen *)&pPlayers[1];
         do
         {
@@ -7182,9 +7162,9 @@
           do
           {
             v564 = _this->uItemID;
-            *(int *)(v563 + _this->uItemID) = v1;
+            *(int *)(v563 + _this->uItemID) = 0;
             v563 += 8;
-            *(int *)(v563 + v564 - 4) = v1;
+            *(int *)(v563 + v564 - 4) = 0;
           }
           while ( v563 <= 128 );
           v565 = ((Player *)_this->uItemID)->GetMaxHealth();
@@ -7234,7 +7214,7 @@
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
           goto LABEL_83;
         v576 = *(int *)&v3->field_C;
-        if ( v576 == v1 )
+        if (!v576)
         {
           v583 = v3->uPlayerID_2;
           v584 = v3->spellnum;
@@ -7259,7 +7239,7 @@
         }
         v578 = (int)&pActors[(int)v577];
         v721 = v578;
-        if ( *(short *)(v578 + 40) > (signed __int16)v1 || (v579 = *(short *)(v578 + 176), v579 != 5) && v579 != 4 )
+        if ( *(short *)(v578 + 40) > 0 || (v579 = *(short *)(v578 + 176), v579 != 5) && v579 != 4 )
           goto LABEL_200;
         ++a1.uItemType;
         a1.stru_24.Reset();
@@ -7267,15 +7247,15 @@
         a1.field_4C = v2;
         a1.field_50 = v731;
         a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
-        a1.uAttributes = v1;
-        a1.uSectorID = v1;
-        a1.uSpriteFrameID = v1;
+        a1.uAttributes = 0;
+        a1.uSectorID = 0;
+        a1.uSpriteFrameID = 0;
         v580 = v3->uPlayerID;
         a1.field_60_distance_related_prolly_lod = 0;
         v581 = v721;
         v580 *= 8;
         LOBYTE(v580) = v580 | OBJECT_Player;
-        a1.uFacing = v1;
+        a1.uFacing = 0;
         a1.field_58_pid = v580;
         a1.uSoundID = LOWORD(v3->field_10);
         a1.vPosition.x = *(short *)(v721 + 142);
@@ -7283,9 +7263,9 @@
         v732 = *(short *)(v721 + 138);
         v582 = 8 * (int)v726;
         a1.vPosition.z = *(short *)(v721 + 146) - (unsigned int)(signed __int64)((double)v732 * unk_4D8548);
-        LOBYTE(v582) = 8 * (char)v726 | 3;
+        LOBYTE(v582) = 8 * (char)v726 | OBJECT_Actor;
         a1.field_5C = v582;
-        a1.Create(0, v1, v1, v1);
+        a1.Create(0, 0, 0, 0);
         if ( *(char *)(v581 + 52) > amount )
           goto LABEL_83;
         Actor::Resurrect((unsigned int)v726);
@@ -7297,7 +7277,7 @@
         *(char *)(v581 + 57) = 0;
         *(int *)(v581 + 712) = 9999;
         *(char *)(v581 + 38) &= 0xF7u;
-        *(int *)(v581 + 708) = v1;
+        *(int *)(v581 + 708) = 0;
         ((SpellBuff *)(v581 + 356))->Reset();
         ((SpellBuff *)(v581 + 228))->Reset();
         ((SpellBuff *)(v581 + 404))->Reset();
@@ -7310,7 +7290,7 @@
         if ( v588 && (v589 = v588 - 1) != 0 && (v590 = v589 - 1) != 0 )
         {
           if ( v590 == 1 )
-            LODWORD(v733) = v1;
+            LODWORD(v733) = 0;
         }
         else
         {
@@ -7323,8 +7303,8 @@
         ((ItemGen *)HIDWORD(v733))->UpdateTempBonus(pParty->uTimePlayed);
         if ( *(int *)HIDWORD(v733) >= 64 && *(int *)HIDWORD(v733) <= 65
           || *(char *)(HIDWORD(v733) + 20) & 2
-          || *(int *)(HIDWORD(v733) + 12) != v1
-          || *(int *)(HIDWORD(v733) + 4) != v1
+          || *(int *)(HIDWORD(v733) + 12) != 0
+          || *(int *)(HIDWORD(v733) + 4) != 0
           || (v591 = *(char *)(v732 + 28)) != 0 && v591 != 1 && v591 != 2
           || pItemsTable->IsMaterialNonCommon((ItemGen *)HIDWORD(v733)) )
           goto LABEL_199;
@@ -7368,13 +7348,13 @@
         a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
         a1.vPosition.x = pParty->vPosition.x;
         a1.vPosition.y = pParty->vPosition.y;
-        a1.uAttributes = v1;
+        a1.uAttributes = 0;
         a1.vPosition.z = pParty->vPosition.z + (signed int)pParty->uPartyHeight / 2;
         a1.uSectorID = pIndoor->GetSector(
                          pParty->vPosition.x,
                          pParty->vPosition.y,
                          pParty->vPosition.z + (signed int)pParty->uPartyHeight / 2);
-        a1.uSpriteFrameID = v1;
+        a1.uSpriteFrameID = 0;
         v595 = 8 * v3->uPlayerID;
         LOBYTE(v595) = v595 | OBJECT_Player;
         a1.field_58_pid = v595;
@@ -7434,10 +7414,7 @@
         v732 = (int)v733 << 7;
         pActors[v599].pActorBuffs[12].Apply(
           pParty->uTimePlayed + (signed __int64)((double)(signed int)((int)v733 << 7) * 0.033333335),
-          v731,
-          v1,
-          v1,
-          v1);
+          v731, 0, 0, 0);
         a1.stru_24.Reset();
         a1.field_48 = v3->spellnum;
         a1.field_4C = v2;
@@ -7457,9 +7434,9 @@
         a1.vPosition.z = v603 + v602;
         v657 = v601;
 LABEL_1087:
-        a1.uAttributes = v1;
+        a1.uAttributes = 0;
         a1.uSectorID = pIndoor->GetSector(v657, v665, v676);
-        a1.uSpriteFrameID = v1;
+        a1.uSpriteFrameID = 0;
         v604 = 8 * v3->uPlayerID;
         LOBYTE(v604) = v604 | OBJECT_Player;
         a1.field_58_pid = v604;
@@ -7469,18 +7446,18 @@
         LOWORD(v604) = LOWORD(v3->field_10);
         LOBYTE(a1.uAttributes) |= 0x80u;
         a1.uSoundID = v604;
-        a1.Create(0, v1, v1, v3->uPlayerID + 1);
+        a1.Create(0, 0, 0, v3->uPlayerID + 1);
         goto LABEL_1056;
       case 96:
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
           goto LABEL_83;
-        HIDWORD(v733) = v1;
-        memset(&pStru179, v1, 0xFA0u);
-        _this = (ItemGen *)v1;
+        HIDWORD(v733) = 0;
+        memset(&pStru179, 0, 0xFA0u);
+        _this = 0;
         v605 = (char *)pParty->pHirelings;
         do
         {
-          if ( *(int *)v605 != v1 )
+          if ( *(int *)v605)
           {
             v606 = HIDWORD(v733)++;
             pStru179.field_0[v606] = (int)((char *)&_this->uItemID + 1);
@@ -7489,16 +7466,16 @@
           v605 += 76;
         }
         while ( (signed int)v605 < (signed int)&pParty->pPickedItem );
-        _this = (ItemGen *)v1;
-        if ( (signed int)pNPCStats->uNumNewNPCs > v1 )
+        _this = 0;
+        if ( (signed int)pNPCStats->uNumNewNPCs > 0)
         {
           v730 = (int)pNPCStats->pNewNPCData;
           HIDWORD(v733) = 4 * HIDWORD(v733) + 6043152;
           do
           {
             if ( *(char *)(v730 + 8) & 0x80
-              && (pParty->pHirelings[0].pName == (char *)v1 || strcmp(*(const char **)v730, pParty->pHirelings[0].pName))
-              && (pParty->pHirelings[1].pName == (char *)v1 || strcmp(*(const char **)v730, pParty->pHirelings[1].pName)) )
+              && (!pParty->pHirelings[0].pName || strcmp(*(const char **)v730, pParty->pHirelings[0].pName))
+              && (!pParty->pHirelings[1].pName || strcmp(*(const char **)v730, pParty->pHirelings[1].pName)) )
             {
               v607 = HIDWORD(v733);
               HIDWORD(v733) += 4;
@@ -7511,11 +7488,11 @@
         }
         v608 = v3->uPlayerID_2;
         if ( v608 != 4 && v608 != 5
-          || (v609 = (signed int)*(&pFontCChar + v608 + (unsigned __int8)pParty->field_709), v609 <= v1)
+          || (v609 = (signed int)*(&pFontCChar + v608 + (unsigned __int8)pParty->field_709), v609 <= 0)
           || v609 >= 3 )
           goto LABEL_200;
         v610 = 76 * v609;
-        *((int *)&pParty->pPlayers[3].pInstalledBeacons[4].uBeaconTime + 19 * v609) = v1;
+        *((int *)&pParty->pPlayers[3].pInstalledBeacons[4].uBeaconTime + 19 * v609) = 0;
         v611 = pIconsFrameTable->FindIcon("spell96");
         *(int *)((char *)&pParty->pPlayers[3].pInstalledBeacons[4].uBeaconTime + v610 + 4) = pIconsFrameTable->GetIconAnimLength(
                                                                                                  v611);
@@ -7538,7 +7515,7 @@
         LODWORD(v727) = v232;
         goto LABEL_83;
       case 95:
-        if ( v12 <= v1 )
+        if ( v12 <= 0 )
           goto LABEL_1119;
         if ( v12 <= 3 )
         {
@@ -7562,7 +7539,7 @@
           v617 = v3->spellnum;
           v618 = pGame->GetStru6();
           pGame->GetStru6()->SetPlayerBuffAnim(v617, v616);
-          v668 = v1;
+          v668 = 0;
           v658 = v716;
           v732 = (int)v733 << 7;
           v653 = v615;
@@ -7571,7 +7548,7 @@
           v27 = (char *)&pParty->pPlayers[v3->uPlayerID_2].pPlayerBuffs[10];
           goto LABEL_103;
         }
-        a2 = v1;
+        a2 = 0;
         v732 = (int)v733 << 7;
         v717 = (signed int)(signed __int64)((double)(signed int)((int)v733 << 7) * 0.033333335);
         v619 = pParty->pPlayers;//[0].pPlayerBuffs[10];
@@ -7581,7 +7558,7 @@
           v621 = v3->spellnum;
           v622 = pGame->GetStru6();
           pGame->GetStru6()->SetPlayerBuffAnim(v621, v620);
-		  v619->pPlayerBuffs[10].Apply(pParty->uTimePlayed + v717, v731, amount, v716, v1);
+		  v619->pPlayerBuffs[10].Apply(pParty->uTimePlayed + v717, v731, amount, v716, 0);
           ++a2;
           ++v619;
         }
@@ -7590,30 +7567,30 @@
       case 99:
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
           goto LABEL_83;
-        v726 = (Player *)v1;
+        v726 = 0;
         pGame->GetIndoorCamera();
         v623 = (signed __int64)GetPickDepth();
         HIDWORD(v733) = sub_46A6AC((int)dword_50BF30, 100, v623);
-        v709 = v1;
-        v708 = v1;
-        v707 = v1;
+        v709 = 0;
+        v708 = 0;
+        v707 = 0;
         a1.stru_24.Reset();
         a1.field_48 = v3->spellnum;
         a1.field_4C = v2;
         a1.field_50 = v731;
         a1.uObjectDescID = pObjectList->ObjectIDByItemID(a1.uItemType);
-        a1.uAttributes = v1;
-        a1.uSectorID = v1;
-        a1.uSpriteFrameID = v1;
+        a1.uAttributes = 0;
+        a1.uSectorID = 0;
+        a1.uSpriteFrameID = 0;
         v624 = v3->uPlayerID;
         a1.field_60_distance_related_prolly_lod = 0;
-        a1.uFacing = v1;
+        a1.uFacing = 0;
         v624 *= 8;
         LOBYTE(v624) = v624 | OBJECT_Player;
         a1.field_58_pid = v624;
         a1.uSoundID = LOWORD(v3->field_10);
-        a2 = v1;
-        if ( SHIDWORD(v733) > v1 )
+        a2 = 0;
+        if ( SHIDWORD(v733) > 0 )
         {
           v726 = (Player *)(HIDWORD(v733) * (7 * v2 + 25));
           do
@@ -7624,16 +7601,16 @@
             v732 = pActors[v625].uActorHeight;
             a1.vPosition.z = pActors[v625].vPosition.z - (unsigned int)(signed __int64)((double)v732 * unk_4D8548);
             v626 = 8 * dword_50BF30[a2];
-            LOBYTE(v626) = v626 | 3;
+            LOBYTE(v626) = v626 | OBJECT_Actor;
             a1.field_5C = v626;
-            v627 = a1.Create(0, v1, v1, v1);
+            v627 = a1.Create(0, 0, 0, 0);
             v628 = a2;
             DamageMonsterFromParty(8 * v627 | 2, dword_50BF30[a2], (Vec3_int_ *)&v707);
             a2 = v628 + 1;
           }
           while ( v628 + 1 < SHIDWORD(v733) );
         }
-        v730 = v1;
+        v730 = 0;
         v629 = 1;
         do
         {
@@ -7652,8 +7629,8 @@
         }
         while ( v629 <= 4 );
         v732 = (signed __int64)((double)(signed int)v726 / (double)v730);
-        HIDWORD(v733) = v1;
-        if ( v730 > v1 )
+        HIDWORD(v733) = 0;
+        if ( v730 > 0 )
         {
           do
           {
@@ -7674,7 +7651,7 @@
           while ( v635 + 1 < v730 );
         }
         v639 = pGame->GetStru6();
-        pGame->GetStru6()->FadeScreen__like_Turn_Undead_and_mb_Armageddon(v1, 0x40u);
+        pGame->GetStru6()->FadeScreen__like_Turn_Undead_and_mb_Armageddon(0, 0x40u);
         goto LABEL_1056;
       case 98:
         if ( uCurrentlyLoadedLevelType == LEVEL_Indoor)
@@ -7685,7 +7662,7 @@
         v640 = v12 - 2;
         if ( !v640 || (v641 = v640 - 1) == 0 || (amount = 4, v641 != 1) )
           amount = 3;
-        if ( pPlayer->uNumArmageddonCasts >= amount || pParty->armageddon_timer > v1 )
+        if ( pPlayer->uNumArmageddonCasts >= amount || pParty->armageddon_timer > 0 )
           goto LABEL_200;
         if ( !pPlayer->CanCastSpell(uRequiredMana) )
           goto LABEL_83;
@@ -7701,9 +7678,9 @@
           v643 = rand();
           v721 = v642 + pParty->vPosition.x;
           y = (char *)(pParty->vPosition.y + v643 % 4096 - 2048);
-          v732 = GetTerrainHeightsAroundParty2(v642 + pParty->vPosition.x, (int)y, (int *)&v710, v1);
+          v732 = GetTerrainHeightsAroundParty2(v642 + pParty->vPosition.x, (int)y, (int *)&v710, 0);
           v644 = rand();
-          sub_42F7EB_DropItemAt(0xFE6u, v721, (int)y, v732 + 16, v644 % 500 + 500, 1, v1, v1, (ItemGen *)v1);
+          sub_42F7EB_DropItemAt(0xFE6u, v721, (int)y, v732 + 16, v644 % 500 + 500, 1, 0, 0, 0);
           v726 = (Player *)((char *)v726 - 1);
         }
         while ( *(float *)&v726 != 0.0 );
@@ -7717,8 +7694,8 @@
       {
         if ( *((_QWORD *)v222 + 2) )
         {
-          *((int *)v222 + 4) = v1;
-          *((int *)v222 + 5) = v1;
+          *((int *)v222 + 4) = 0;
+          *((int *)v222 + 5) = 0;
           goto LABEL_439;
         }
       }
@@ -7731,7 +7708,7 @@
         v222 = (char *)HIDWORD(v733);
         if ( v223 )
 LABEL_439:
-          ((Player *)v222)->PlaySound(SPEECH_103, v1);
+          ((Player *)v222)->PlaySound(SPEECH_103, 0);
       }
       v222 += 6972;
       HIDWORD(v733) = (int)v222;
@@ -7740,7 +7717,7 @@
       continue;
     }
   }
-  if ( pParty->bTurnBasedModeOn == v1 )
+  if ( pParty->bTurnBasedModeOn == 0 )
   {
     v646 = pPlayer;
     pPlayer->SetRecoveryTime((signed __int64)(flt_6BE3A4_debug_recmod1 * 213.3333333333333));
@@ -7757,8 +7734,8 @@
     pTurnEngine->_40471C();
   }
   ShowStatusBarString(pGlobalTXT_LocalizationStrings[428], 2u);
-  pAudioPlayer->PlaySound(SOUND_PlayerCantCastSpell, v1, v1, -1, v1, v1, v1, v1);
-  v711[v647].spellnum = v1;
+  pAudioPlayer->PlaySound(SOUND_PlayerCantCastSpell, 0, 0, -1, 0, 0, 0, 0);
+  v711[v647].spellnum = 0;
   v646->sMana -= uRequiredMana;
 }
 //----- (0042EB42) --------------------------------------------------------
@@ -8938,7 +8915,7 @@
   }
 
   //pParty->uFlags2 |= PARTY_FLAGS_2_RUNNING;
-LABEL_6:
+//LABEL_6:
   if ( !pEventTimer->bPaused )
   {
     inputAction = (InputAction)0;
--- a/mm7_data.h	Wed Feb 27 02:26:16 2013 +0400
+++ b/mm7_data.h	Wed Feb 27 17:29:05 2013 +0200
@@ -2288,7 +2288,7 @@
 int __fastcall sub_4AE491(int, int); // weak
 void __fastcall sub_4AE5F1(unsigned int uFaceID); // idb
 int __cdecl sub_4AF412();
-void __cdecl stru170_sub_4B0967();
+//void __cdecl stru170_sub_4B0967_draw_face_outlines();
 void __cdecl loc_4B0DFB(); // idb
 void __cdecl nullsub_18(); // idb
 void __cdecl nullsub_19(); // idb
--- a/stru6.cpp	Wed Feb 27 02:26:16 2013 +0400
+++ b/stru6.cpp	Wed Feb 27 17:29:05 2013 +0200
@@ -86,13 +86,13 @@
 //----- (004A71FE) --------------------------------------------------------
 void stru6::DoAddProjectile(float srcX, float srcY, float srcZ, float dstX, float dstY, float dstZ, unsigned int uTextureID)
 {
-  int v8; // eax@1
+  //int v8; // eax@1
 
-  v8 = uNumProjectiles;
-  if ( v8 != 32 )
+  //v8 = uNumProjectiles;
+  if (uNumProjectiles < 32)
   {
-    pProjectiles[v8].srcX = srcX;
-    *((float *)&this->array_0[0].uSpellAnimLength + 7 * (uNumProjectiles + 21)) = srcY;
+    pProjectiles[uNumProjectiles].srcX = srcX;
+    pProjectiles[uNumProjectiles].srcY = srcY;
     pProjectiles[uNumProjectiles].srcZ = srcZ;
     pProjectiles[uNumProjectiles].dstX = dstX;
     pProjectiles[uNumProjectiles].dstY = dstY;
@@ -164,10 +164,10 @@
   v6 = a2->field_54;
   if ( v6 )
   {
-    v7 = &v4->array_0[v6 & 0x1F];
-    x = ((double)a2->vPosition.x - v7->flt_4) * 0.5 + v7->flt_4;
-    v8 = ((double)v5->vPosition.y - v7->flt_8) * 0.5 + v7->flt_8;
-    v9 = ((double)v5->vPosition.z - v7->flt_C) * 0.5 + v7->flt_C;
+    v7 = &v4->array_4[v6 & 0x1F];
+    x = ((double)a2->vPosition.x - v7->flt_0_x) * 0.5 + v7->flt_0_x;
+    v8 = ((double)v5->vPosition.y - v7->flt_4_y) * 0.5 + v7->flt_4_y;
+    v9 = ((double)v5->vPosition.z - v7->flt_8_z) * 0.5 + v7->flt_8_z;
     local_0.bFree = 1036;
     local_0.uDiffuse = uDiffuse;
     local_0.x = x + 4.0;
@@ -188,16 +188,16 @@
     pGame->pParticleEngine->AddParticle(&local_0);
     local_0.x = (double)v5->vPosition.x - 4.0;
     pGame->pParticleEngine->AddParticle(&local_0);
-    v4->array_0[v5->field_54 & 0x1F].flt_4 = (double)v5->vPosition.x;
-    v4->array_0[v5->field_54 & 0x1F].flt_8 = (double)v5->vPosition.y;
-    v4->array_0[v5->field_54 & 0x1F].flt_C = (double)v5->vPosition.z;
+    v4->array_4[v5->field_54 & 0x1F].flt_0_x = (double)v5->vPosition.x;
+    v4->array_4[v5->field_54 & 0x1F].flt_4_y = (double)v5->vPosition.y;
+    v4->array_4[v5->field_54 & 0x1F].flt_8_z = (double)v5->vPosition.z;
   }
   else
   {
-    a2->field_54 = v4->array_0[0].uSpellAnimLength++;
-    v4->array_0[a2->field_54 & 0x1F].flt_4 = (double)a2->vPosition.x;
-    v4->array_0[a2->field_54 & 0x1F].flt_8 = (double)a2->vPosition.y;
-    v4->array_0[a2->field_54 & 0x1F].flt_C = (double)a2->vPosition.z;
+    a2->field_54 = v4->field_0++;
+    v4->array_4[a2->field_54 & 0x1F].flt_0_x = (double)a2->vPosition.x;
+    v4->array_4[a2->field_54 & 0x1F].flt_4_y = (double)a2->vPosition.y;
+    v4->array_4[a2->field_54 & 0x1F].flt_8_z = (double)a2->vPosition.z;
     v10 = (double)a2->vPosition.x;
     local_0.bFree = 1036;
     local_0.uDiffuse = uDiffuse;
@@ -511,10 +511,10 @@
   v5 = &pObjectList->pObjects[a2->uObjectDescID];
   if ( v4 )
   {
-    v6 = &v2->array_0[v4 & 0x1F];
-    v7 = ((double)a2->vPosition.x - v6->flt_4) * 0.5 + v6->flt_4;
-    v8 = ((double)a2->vPosition.y - v6->flt_8) * 0.5 + v6->flt_8;
-    v9 = ((double)a2->vPosition.z - v6->flt_C) * 0.5 + v6->flt_C;
+    v6 = &v2->array_4[v4 & 0x1F];
+    v7 = ((double)a2->vPosition.x - v6->flt_0_x) * 0.5 + v6->flt_0_x;
+    v8 = ((double)a2->vPosition.y - v6->flt_4_y) * 0.5 + v6->flt_4_y;
+    v9 = ((double)a2->vPosition.z - v6->flt_8_z) * 0.5 + v6->flt_8_z;
     local_0.bFree = 2048;
     local_0.uDiffuse = 0xFFFFFFu;
     a2a = v9;
@@ -536,16 +536,16 @@
     local_0.z = (double)v3->vPosition.z;
     local_0.timeToLive = (rand() & 0x3F) + 64;
     pGame->pParticleEngine->AddParticle(&local_0);
-    v2->array_0[v3->field_54 & 0x1F].flt_4 = (double)v3->vPosition.x;
-    v2->array_0[v3->field_54 & 0x1F].flt_8 = (double)v3->vPosition.y;
-    v2->array_0[v3->field_54 & 0x1F].flt_C = (double)v3->vPosition.z;
+    v2->array_4[v3->field_54 & 0x1F].flt_0_x = (double)v3->vPosition.x;
+    v2->array_4[v3->field_54 & 0x1F].flt_4_y = (double)v3->vPosition.y;
+    v2->array_4[v3->field_54 & 0x1F].flt_8_z = (double)v3->vPosition.z;
   }
   else
   {
-    a2->field_54 = v2->array_0[0].uSpellAnimLength++;
-    v2->array_0[a2->field_54 & 0x1F].flt_4 = (double)a2->vPosition.x;
-    v2->array_0[a2->field_54 & 0x1F].flt_8 = (double)a2->vPosition.y;
-    v2->array_0[a2->field_54 & 0x1F].flt_C = (double)a2->vPosition.z;
+    a2->field_54 = v2->field_0++;
+    v2->array_4[a2->field_54 & 0x1F].flt_0_x = (double)a2->vPosition.x;
+    v2->array_4[a2->field_54 & 0x1F].flt_4_y = (double)a2->vPosition.y;
+    v2->array_4[a2->field_54 & 0x1F].flt_8_z = (double)a2->vPosition.z;
     v12 = (double)a2->vPosition.x;
     local_0.bFree = 2048;
     local_0.uDiffuse = 0xFFFFFFu;
@@ -577,9 +577,9 @@
     v6 = (double)a2->vPosition.y;
     v7 = (double)a2->vPosition.x;
     DoAddProjectile(
-      this->array_0[v4 & 0x1F].flt_4,
-      this->array_0[v4 & 0x1F].flt_8,
-      this->array_0[v4 & 0x1F].flt_C,
+      this->array_4[v4 & 0x1F].flt_0_x,
+      this->array_4[v4 & 0x1F].flt_4_y,
+      this->array_4[v4 & 0x1F].flt_8_z,
       v7,
       v6,
       v5,
@@ -587,10 +587,10 @@
   }
   else
   {
-    a2->field_54 = this->array_0[0].uSpellAnimLength++;
-    this->array_0[a2->field_54 & 0x1F].flt_4 = (double)a2->vPosition.x;
-    this->array_0[a2->field_54 & 0x1F].flt_8 = (double)a2->vPosition.y;
-    this->array_0[a2->field_54 & 0x1F].flt_C = (double)a2->vPosition.z;
+    a2->field_54 = this->field_0++;
+    this->array_4[a2->field_54 & 0x1F].flt_0_x = (double)a2->vPosition.x;
+    this->array_4[a2->field_54 & 0x1F].flt_4_y = (double)a2->vPosition.y;
+    this->array_4[a2->field_54 & 0x1F].flt_8_z = (double)a2->vPosition.z;
   }
 }
 
@@ -1319,119 +1319,106 @@
 }
 
 //----- (004A89BD) --------------------------------------------------------
-int stru6::SetPlayerBuffAnim(unsigned __int16 uSpellID, unsigned __int16 uPlayerID)
+void stru6::SetPlayerBuffAnim(unsigned __int16 uSpellID, unsigned __int16 uPlayerID)
 {
-  stru6 *v3; // edi@1
+  //stru6 *v3; // edi@1
   PlayerBuffAnim *v4; // esi@1
-  int result; // eax@1
   const char *v6; // [sp-4h] [bp-10h]@2
 
-  v3 = this;
-  v4 = (PlayerBuffAnim *)((char *)this + 16 * (signed __int16)uPlayerID);
-  v4[32].uSpellIconID_ = 0;
-  v4[32].uSpellID = uSpellID;
-  result = (signed __int16)uSpellID - 3;
-  switch ( uSpellID )
+  //v3 = this;
+  //v4 = &array_0[uPlayerID];
+  //v4[32].uSpellIconID_ = 0;    pPlayerBuffs[]::field_4
+  //v4[32].uSpellID = uSpellID;  pPlayerBuffs[]::bRender
+
+  v4 = &pPlayerBuffs[uPlayerID];
+  v4->field_4 = 0;
+  v4->bRender = uSpellID != 0;
+
+  switch (uSpellID)
   {
-    case (SPELL_WATER_PROTECTION_FROM_WATER|0x80):
+    case 153:
+      __debugbreak(); // spell id == 153 wtf
       v6 = "zapp";
-      goto LABEL_24;
+    break;
+      
+    case 150:
+      __debugbreak(); // spell id == 150 wtf
     case SPELL_AIR_FEATHER_FALL:
     case SPELL_SPIRIT_DETECT_LIFE:
-    case SPELL_SPIRIT_DOOM:
-    case 0x96u:
+    case SPELL_SPIRIT_FATE:
       v6 = "spboost1";
-      goto LABEL_24;
-    case SPELL_AIR_SHIELD|0x2:
+    break;
+      
+    case 151:
+      __debugbreak(); // spell id == 151 wtf
+    case SPELL_AIR_INVISIBILITY:
     case SPELL_WATER_WATER_WALK:
-    case SPELL_SPIRIT_PRESERVE:
-    case 0x97u:
+    case SPELL_SPIRIT_PRESERVATION:
       v6 = "spboost2";
-      goto LABEL_24;
-    case SPELL_BODY_CURE_WEAKNESS|0x10:
-    case SPELL_BODY_FIRST_AID|SPELL_AIR_SHIELD:
-    case 0x56u:
-    case SPELL_BODY_CURE_POISON|0x10:
-    case 0x98u:
+    break;
+      
+    case 152:
+      __debugbreak(); // spell id == 152 wtf
+    case SPELL_LIGHT_HOUR_OF_POWER:
+    case SPELL_LIGHT_DAY_OF_THE_GODS:
+    case SPELL_LIGHT_DAY_OF_PROTECTION:
+    case SPELL_LIGHT_DIVINE_INTERVENTION:
       v6 = "spboost3";
-      goto LABEL_24;
-    case (SPELL_AIR_SHIELD|0x20):
+    break;
+
+    case SPELL_SPIRIT_REMOVE_CURSE:
     case SPELL_MIND_REMOVE_FEAR:
     case SPELL_BODY_CURE_WEAKNESS:
       v6 = "spheal1";
-      goto LABEL_24;
-    case SPELL_SPIRIT_PRESERVE|0x4:
+    break;
+
+    case SPELL_SPIRIT_SHARED_LIFE:
     case SPELL_MIND_CURE_PARALYSIS:
-    case 0x40u:
+    case SPELL_MIND_CURE_INSANITY:
     case SPELL_BODY_FIRST_AID:
     case SPELL_BODY_CURE_POISON:
     case SPELL_BODY_CURE_DISEASE:
-    case 0x60u:
+    case SPELL_DARK_SACRIFICE:
       v6 = "spheal2";
-      goto LABEL_24;
-    case SPELL_BODY_HAMMERHANDS|0x4:
-    case SPELL_BODY_CURE_WEAKNESS|0x20:
+    break;
+
+    case SPELL_BODY_POWER_CURE:
+    case SPELL_DARK_SOULDRINKER:
       v6 = "spheal3";
-      goto LABEL_24;
+    break;
+
     case SPELL_FIRE_PROTECTION_FROM_FIRE:
-    case SPELL_FIRE_FIRE_RING:
+    case SPELL_FIRE_IMMOLATION:
       v6 = "spell03";
-      goto LABEL_24;
-    case SPELL_FIRE_HASTE:
-      v6 = "spell05";
-      goto LABEL_24;
-    case SPELL_AIR_PROTECTION_FROM_AIR:
-      v6 = "spell14";
-      goto LABEL_24;
-    case SPELL_AIR_SHIELD:
-      v6 = "spell17";
-      goto LABEL_24;
-    case SPELL_WATER_PROTECTION_FROM_WATER:
-      v6 = "spell25";
-      goto LABEL_24;
-    case SPELL_EARTH_PROTECTION_FROM_EARTH:
-      v6 = "spell36";
-      goto LABEL_24;
-    case SPELL_EARTH_STONESKIN:
-      v6 = "spell38";
-      goto LABEL_24;
-    case SPELL_SPIRIT_BLESS:
-      v6 = "spell46";
-      goto LABEL_24;
-    case SPELL_SPIRIT_HEROISM:
-      v6 = "spell51";
-      goto LABEL_24;
-    case SPELL_SPIRIT_HEROISM|0x4:
-      v6 = "spell55";
-      goto LABEL_24;
-    case SPELL_MIND_PROTECTION_FROM_MIND:
-      v6 = "spell58";
-      goto LABEL_24;
-    case SPELL_BODY_FIRST_AID|0x1:
-      v6 = "spell69";
-      goto LABEL_24;
-    case SPELL_BODY_FIRST_AID|SPELL_FIRE_PROTECTION_FROM_FIRE:
-      v6 = "spell71";
-      goto LABEL_24;
-    case SPELL_BODY_HAMMERHANDS:
-      v6 = "spell73";
-      goto LABEL_24;
-    case SPELL_BODY_PROTECTION_FROM_MAGIC:
-      v6 = "spell75";
-LABEL_24:
-      result = pIconsFrameTable->FindIcon(v6);
-      v4[33].uSpellIconID = result;
-      break;
+    break;
+
+    case SPELL_FIRE_HASTE:                  v6 = "spell05"; break;
+    case SPELL_AIR_PROTECTION_FROM_AIR:     v6 = "spell14"; break;
+    case SPELL_AIR_SHIELD:                  v6 = "spell17"; break;
+    case SPELL_WATER_PROTECTION_FROM_WATER: v6 = "spell25"; break;
+    case SPELL_EARTH_PROTECTION_FROM_EARTH: v6 = "spell36"; break;
+    case SPELL_EARTH_STONESKIN:             v6 = "spell38"; break;
+    case SPELL_SPIRIT_BLESS:                v6 = "spell46"; break;
+    case SPELL_SPIRIT_HEROISM:              v6 = "spell51"; break;
+    case SPELL_SPIRIT_RESSURECTION:         v6 = "spell55"; break;
+    case SPELL_MIND_PROTECTION_FROM_MIND:   v6 = "spell58"; break;
+    case SPELL_BODY_PROTECTION_FROM_BODY:   v6 = "spell69"; break;
+    case SPELL_BODY_REGENERATION:           v6 = "spell71"; break;
+    case SPELL_BODY_HAMMERHANDS:            v6 = "spell73"; break;
+    case SPELL_BODY_PROTECTION_FROM_MAGIC:  v6 = "spell75"; break;
+
     default:
-      v4[32].uSpellID = 0;
-      break;
+      //v4[32].uSpellID = 0;
+      v4->bRender = false;
+      return;
   }
-  if ( v4[32].uSpellID )
-  {
-    result = 8 * pIconsFrameTable->pIcons[v4[33].uSpellIconID].uAnimLength;
-    v3->array_0[(signed __int16)uPlayerID + 33].uSpellAnimLength = result;
-  }
-  return result;
+  
+  //v4[33].uSpellIconID = pIconsFrameTable->FindIcon(v6);
+  v4->uSpellIconID = pIconsFrameTable->FindIcon(v6);
+  //if ( v4[32].uSpellID )
+  if (v4->bRender)
+    //v3->array_0[(signed __int16)uPlayerID + 33].uSpellAnimLength = 8 * pIconsFrameTable->pIcons[v4[33].uSpellIconID].uAnimLength;
+    v4->uSpellAnimTime = 8 * pIconsFrameTable->pIcons[v4->uSpellIconID].uAnimLength;
 }
 
 //----- (004A8BDF) --------------------------------------------------------
--- a/stru6.h	Wed Feb 27 02:26:16 2013 +0400
+++ b/stru6.h	Wed Feb 27 17:29:05 2013 +0200
@@ -51,12 +51,15 @@
 #pragma pack(push, 1)
 struct PlayerBuffAnim
 {
+  inline PlayerBuffAnim():
+    bRender(false), uSpellAnimTime(0), uSpellIconID(0)
+  {}
+
   __int16 bRender;
   __int16 field_2;
+  int field_4;
+  int uSpellAnimTime;
   int uSpellIconID;
-  __int16 uSpellID;
-  __int16 field_A;
-  int uSpellIconID_;
 };
 #pragma pack(pop)
 
@@ -80,10 +83,11 @@
 #pragma pack(push, 1)
 struct stru6_stru2
 {
-  int uSpellAnimLength;
-  float flt_4;
-  float flt_8;
-  float flt_C;
+  //int field_0;
+  float flt_0_x;
+  float flt_4_y;
+  float flt_8_z;
+  int   field_C;
 };
 #pragma pack(pop)
 
@@ -96,14 +100,10 @@
   //----- (004A7155) --------------------------------------------------------
   stru6()
   {
-    this->pPlayerBuffs[0].bRender = 0;
-    this->pPlayerBuffs[1].bRender = 0;
-    this->pPlayerBuffs[2].bRender = 0;
-    this->pPlayerBuffs[3].bRender = 0;
     this->field_204 = 0;
     this->uFadeTime = 0;
     this->uNumProjectiles = 0;
-    this->array_0[0].uSpellAnimLength = 0;
+    this->field_0 = 0;
 
     pStru1 = new stru6_stru1_indoor_sw_billboard;
     pStru1->Initialize(0xFF3C1Eu);
@@ -133,7 +133,7 @@
   int _4A806F(struct Actor *pActor);
   void _4A80DC_some_stuff_sw(struct LayingItem *a2);
   bool _4A81CA(struct LayingItem *a2);
-  int SetPlayerBuffAnim(unsigned __int16 uSpellID, unsigned __int16 uPlayerID);
+  void SetPlayerBuffAnim(unsigned __int16 uSpellID, unsigned __int16 uPlayerID);
   void FadeScreen__like_Turn_Undead_and_mb_Armageddon(unsigned int uDiffuseColor, unsigned int uFadeTime);
   int _4A8BFC();
   void RenderSpecialEffects();
@@ -141,7 +141,11 @@
   void LoadAnimations();
 
 
-  stru6_stru2 array_0[32];
+  int field_0;
+  stru6_stru2 array_4[31];
+  int field_1F4;
+  int field_1F8;
+  int field_1FC;
   int field_200;
   int field_204;
   PlayerBuffAnim pPlayerBuffs[4];