changeset 1252:fa6b8e839355

Merge
author Grumpy7
date Tue, 11 Jun 2013 15:26:53 +0200
parents 7ef8ae7ce42a (current diff) fd532497ffab (diff)
children fac7751b2dc9
files
diffstat 4 files changed, 700 insertions(+), 2034 deletions(-) [+]
line wrap: on
line diff
--- a/Arcomage.cpp	Tue Jun 11 15:24:05 2013 +0200
+++ b/Arcomage.cpp	Tue Jun 11 15:26:53 2013 +0200
@@ -54,7 +54,7 @@
 bool CanCardBePlayed(int player_num, int hand_card_indx);
 void ApplyCardToPlayer(int player_num, unsigned int uCardID); // idb
 int  am_40D2B4(POINT* a1, int a2); // weak
-int  am_40D402(int player_num, int damage); // weak
+int  ApplyDamageToBuildings(int player_num, int damage); // weak
 void GameResultsApply();
 
 void pPrimaryWindow_draws_text(int a1, const char *pText, POINT *pXY);
@@ -160,7 +160,7 @@
 char byte_4FAA2D; // weak
 
 int current_player_num; // idb
-char am_byte_4FAA77; // weak
+char hand_full; // weak
 
 signed int current_card_slot_index; 
 int played_card_id; // idb 4FABC0
@@ -177,7 +177,8 @@
 POINT amuint_4FAA54_blt_xy;
 POINT amuint_4FAA5C_blt_xy;
 
-
+int dword_4FAA64; // weak
+int dword_4FAA68; // weak
 
 int dword_4FABB8; // weak
 
@@ -206,11 +207,11 @@
 }
 
 //----- (0040DFD1) --------------------------------------------------------
-void stru272_stru0::Ctor(stru272_stru0 *a1)
+void stru272_stru0::Ctor(stru272_stru0 **a1)
     {
     stru272_stru0 *v2; // eax@1
     v2 = (stru272_stru0 *)malloc(0x5Cu);
-    a1 = v2;
+    *a1 = v2;
     v2->signature = SIG_trpg;
     v2->field_8 = 0;
     v2->field_30 = 0.0;
@@ -1571,11 +1572,11 @@
         byte_4FAA24 = am_40A560(current_player_num);
         if ( GetPlayerHandCardCount(current_player_num) <= minimum_cards_at_hand )
           break;
-        am_byte_4FAA77 = 1;
+        hand_full = 1;
         if ( pArcomageGame->field_F4 )
           goto LABEL_8;
       }
-      am_byte_4FAA77 = 0;
+      hand_full = 0;
     }
     pArcomageGame->GameOver = IsGameOver();
     if ( !pArcomageGame->GameOver )
@@ -1982,7 +1983,7 @@
       }
       while (v3 < 6);
     
-    pArcomageGame->event_timer_time = pEventTimer->Time();
+    pArcomageGame->event_timer_time = (unsigned int )pEventTimer->Time();
     if ( pArcomageGame->field_F4 )
       v16 = 1;
     ArcomageGame::MsgLoop(0, &a2);
@@ -2051,7 +2052,7 @@
     }
     else
     {
-      if ( am_byte_4FAA77 )
+      if ( hand_full )
       {
         if ( a2.field_0 == 7 && am_40BCFB(player_num, current_card_slot_index) )
         {
@@ -2060,7 +2061,7 @@
           if ( dword_4FAA64 > 0 )
           {
             --dword_4FAA64;
-            am_byte_4FAA77 = GetPlayerHandCardCount(player_num) > minimum_cards_at_hand;
+            hand_full = GetPlayerHandCardCount(player_num) > minimum_cards_at_hand;
           }
           byte_4FAA2E = 1;
         }
@@ -2071,7 +2072,7 @@
           if ( dword_4FAA64 > 0 )
           {
             --dword_4FAA64;
-            am_byte_4FAA77 = GetPlayerHandCardCount(player_num) > minimum_cards_at_hand;
+            hand_full = GetPlayerHandCardCount(player_num) > minimum_cards_at_hand;
           }
           byte_4FAA2E = 1;
         }
@@ -2303,7 +2304,7 @@
   char text_buff[32]; // [sp+Ch] [bp-28h]@2
   POINT text_position; // [sp+2Ch] [bp-8h]@2
 
-  if ( am_byte_4FAA77 )
+  if ( hand_full )
   {
     strcpy(text_buff, pGlobalTXT_LocalizationStrings[266]);// DISCARD A CARD
     text_position.x = 320 - pArcomageGame->pfntArrus->GetLineWidth(text_buff) / 2;
@@ -2652,7 +2653,7 @@
  v3 = 100;
 
     
-    if ( am_Players[1].wall_height <= 0 )
+    if ( am_Players[1].wall_height > 0 )
         {
  
 pSrcXYZW.top = 0;
@@ -3224,7 +3225,7 @@
     }
   }
 
-  if ( pCards[am_Players[player_num].cards_at_hand[i]].field_2B) 
+  if ( pCards[am_Players[player_num].cards_at_hand[i]].attack_or_defence) 
   {
     ArcomageGame::PlaySound(22);
     v8 = GetPlayerHandCardCount(current_player_num);
@@ -3247,7 +3248,7 @@
 
     uCardID = am_Players[player_num].cards_at_hand[i];
     am_Players[player_num].cards_at_hand[i] = -1;
-    am_byte_4FAA77 = 0;
+    hand_full = 0;
     return true;
   }
   else
@@ -3263,7 +3264,7 @@
 //----- (0040BE0E) --------------------------------------------------------
 bool PlayCard( int player_num, signed int card_slot_num )
     {
-  bool result; // eax@0
+
   int v3; // ebp@1
   int v4; // ecx@2
   ArcomagePlayer *v5; // esi@2
@@ -3293,8 +3294,7 @@
     }
   }
 
-  result = CanCardBePlayed(player_num, v6);
-  if ( result )
+  if (CanCardBePlayed(player_num, v6) )
   {
     ArcomageGame::PlaySound(23);
     v9 = GetPlayerHandCardCount(current_player_num);
@@ -3353,1955 +3353,625 @@
 //----- (0040BF77) --------------------------------------------------------
 void ApplyCardToPlayer( int player_num, unsigned int uCardID )
     {
-//  ArcomagePlayer *v2; // esi@1
-//  int v3; // eax@1
-//  ArcomagePlayer *v4; // edi@1
-//  int v5; // eax@2
-//  char v6; // sf@2
-//  unsigned __int8 v7; // of@2
-//  int v8; // eax@3
-//  int v9; // eax@4
-//  char v10; // zf@5
-//  int v11; // eax@8
-//  unsigned __int8 v12; // zf@8
-//  char v13; // sf@8
-//  unsigned __int8 v14; // of@8
-//  int v15; // eax@9
-//  int v16; // eax@10
-//  char v17; // zf@12
-//  char v18; // al@15
-//  int v19; // eax@16
-//  int v20; // eax@17
-//  int v21; // eax@22
-//  int v22; // eax@23
-//  int v23; // eax@26
-//  int v24; // edx@26
-//  signed int v25; // ebx@26
-//  ArcomageCard *v26; // ebx@28
-//  int v27; // eax@28
-//  int v28; // edx@33
-//  int v29; // eax@33
-//  int v30; // eax@35
-//  int v31; // edx@40
-//  int v32; // eax@40
-//  int v33; // eax@42
-//  int v34; // edx@47
-//  int v35; // eax@47
-//  int v36; // eax@49
-//  int v37; // edx@54
-//  int v38; // eax@54
-//  bool v39; // eax@56
-//  int v40; // edx@61
-//  int v41; // eax@61
-//  int v42; // eax@63
-//  int v43; // edx@68
-//  int v44; // eax@68
-//  char v45; // al@70
-//  int v46; // eax@72
-//  int v47; // edx@77
-//  int v48; // eax@77
-//  int v49; // eax@79
-//  int v50; // edx@84
-//  int v51; // eax@84
-//  int v52; // eax@86
-//  int v53; // eax@91
-//  int v54; // edx@91
-//  int v55; // eax@93
-//  int v56; // eax@98
-//  int v57; // edx@98
-//  int v58; // eax@100
-//  int v59; // eax@105
-//  int v60; // edx@105
-//  int v61; // eax@107
-//  int v62; // eax@112
-//  int v63; // edx@112
-//  int v64; // eax@114
-//  int v65; // eax@119
-//  int v66; // edx@119
-//  int v67; // eax@121
-//  int v68; // eax@126
-//  int v69; // edx@126
-//  char v70; // al@128
-//  int v71; // eax@130
-//  int v72; // eax@135
-//  int v73; // edx@135
-//  int v74; // eax@137
-//  int v75; // eax@142
-//  int v76; // edx@142
-//  int v77; // eax@144
-//  int v78; // eax@151
-//  int v79; // ecx@151
-//  int v80; // eax@155
-//  int v81; // eax@162
-//  int v82; // ecx@162
-//  int v83; // eax@166
-//  int v84; // eax@173
-//  int v85; // ecx@173
-//  int v86; // eax@177
-//  int v87; // eax@184
-//  int v88; // ecx@184
-//  bool v89; // eax@188
-//  int v90; // eax@195
-//  int v91; // ecx@195
-//  int v92; // eax@199
-//  int v93; // eax@206
-//  int v94; // ecx@206
-//  char v95; // al@210
-//  int v96; // eax@211
-//  int v97; // edx@211
-//  int v98; // eax@211
-//  int v99; // eax@211
-//  int v100; // eax@212
-//  int v101; // eax@219
-//  int v102; // ecx@219
-//  int v103; // eax@223
-//  int v104; // eax@231
-//  int v105; // edx@231
-//  signed int v106; // ebx@231
-//  ArcomageCard *v107; // ebx@233
-//  int v108; // eax@233
-//  int v109; // edx@238
-//  int v110; // eax@238
-//  int v111; // eax@240
-//  int v112; // edx@245
-//  int v113; // eax@245
-//  int v114; // eax@247
-//  int v115; // edx@252
-//  int v116; // eax@252
-//  int v117; // eax@254
-//  int v118; // edx@259
-//  int v119; // eax@259
-//  bool v120; // eax@261
-//  int v121; // edx@266
-//  int v122; // eax@266
-//  int v123; // eax@268
-//  int v124; // edx@273
-//  int v125; // eax@273
-//  char v126; // al@275
-//  int v127; // eax@277
-//  int v128; // edx@282
-//  int v129; // eax@282
-//  int v130; // eax@284
-//  int v131; // edx@289
-//  int v132; // eax@289
-//  int v133; // eax@291
-//  int v134; // eax@296
-//  int v135; // edx@296
-//  int v136; // eax@298
-//  int v137; // eax@303
-//  int v138; // edx@303
-//  int v139; // eax@305
-//  int v140; // eax@310
-//  int v141; // edx@310
-//  int v142; // eax@312
-//  int v143; // eax@317
-//  int v144; // edx@317
-//  int v145; // eax@319
-//  int v146; // eax@324
-//  int v147; // edx@324
-//  int v148; // eax@326
-//  int v149; // eax@331
-//  int v150; // edx@331
-//  char v151; // al@333
-//  int v152; // eax@335
-//  int v153; // eax@340
-//  int v154; // edx@340
-//  int v155; // eax@342
-//  int v156; // eax@347
-//  int v157; // edx@347
-//  int v158; // eax@349
-//  int v159; // eax@356
-//  int v160; // ecx@356
-//  int v161; // eax@360
-//  int v162; // eax@367
-//  int v163; // ecx@367
-//  int v164; // eax@371
-//  int v165; // eax@378
-//  int v166; // ecx@378
-//  int v167; // eax@382
-//  int v168; // eax@389
-//  int v169; // ecx@389
-//  bool v170; // eax@393
-//  int v171; // eax@400
-//  int v172; // ecx@400
-//  int v173; // eax@404
-//  int v174; // eax@411
-//  int v175; // ecx@411
-//  char v176; // al@415
-//  int v177; // eax@416
-//  int v178; // edx@416
-//  int v179; // eax@416
-//  int v180; // eax@416
-//  int v181; // eax@417
-//  int v182; // eax@424
-//  int v183; // ecx@424
-//  int v184; // eax@429
-//  int v185; // ecx@429
-//  signed int v186; // esi@511
-//  Vec2_int_ v187; // [sp+Ch] [bp-64h]@488
-//  //int v188; // [sp+10h] [bp-60h]@488
-//  int v189; // [sp+14h] [bp-5Ch]@1
-//  ArcomageCard *pCard; // [sp+18h] [bp-58h]@1
-//  int v191; // [sp+1Ch] [bp-54h]@1
-//  int v192; // [sp+20h] [bp-50h]@1
-//  int v193; // [sp+24h] [bp-4Ch]@1
-//  int v194; // [sp+28h] [bp-48h]@1
-//  int v195; // [sp+2Ch] [bp-44h]@1
-//  int v196; // [sp+30h] [bp-40h]@1
-//  int v197; // [sp+34h] [bp-3Ch]@1
-//  int v198; // [sp+38h] [bp-38h]@1
-//  int v199; // [sp+3Ch] [bp-34h]@1
-//  int v200; // [sp+40h] [bp-30h]@1
-//  int v201; // [sp+44h] [bp-2Ch]@1
-//  int v202; // [sp+48h] [bp-28h]@1
-//  int v203; // [sp+4Ch] [bp-24h]@1
-//  int v204; // [sp+50h] [bp-20h]@1
-//  bool v205; // [sp+54h] [bp-1Ch]@1
-//  int v206; // [sp+58h] [bp-18h]@1
-//  int v207; // [sp+5Ch] [bp-14h]@1
-//  int v208; // [sp+60h] [bp-10h]@1
-//  int v209; // [sp+64h] [bp-Ch]@1
-//  int v210; // [sp+68h] [bp-8h]@1
-//  int v211; // [sp+6Ch] [bp-4h]@1
-//
-//  v194 = 0;
-//  v210 = 0;
-//  v208 = 0;
-//  v197 = 0;
-//  v205 = 0;
-//  v203 = 0;
-//  v201 = 0;
-//  v199 = 0;
-//  v192 = 0;
-//  v196 = 0;
-//  v211 = 0;
-//  v209 = 0;
-//  v207 = 0;
-//  v206 = 0;
-//  v204 = 0;
-//  v202 = 0;
-//  v200 = 0;
-//  v198 = 0;
-//  v191 = 0;
-//  v195 = 0;
-//  v193 = a1;
-//  v2 = &stru_505708[a1];
-//  pCard = &pCards[uCardID];
-//  v3 = pCard->field_2C;
-//  v189 = (a1 + 1) % 2;
-//  v4 = &stru_505708[v189];
-//  switch ( v3 )
-//  {
-//    case 2:
-//      v5 = v2->field_2C;
-//      v7 = __OFSUB__(v5, v4->field_2C);
-//      v6 = v5 - v4->field_2C < 0;
-//      goto LABEL_18;
-//    case 3:
-//      v8 = v2->field_30;
-//      v7 = __OFSUB__(v8, v4->field_30);
-//      v6 = v8 - v4->field_30 < 0;
-//      goto LABEL_18;
-//    case 4:
-//      v9 = v2->field_34;
-//      v7 = __OFSUB__(v9, v4->field_34);
-//      v6 = v9 - v4->field_34 < 0;
-//      goto LABEL_18;
-//    case 5:
-//      v10 = v2->field_2C == v4->field_2C;
-//      goto LABEL_21;
-//    case 6:
-//      v10 = v2->field_30 == v4->field_30;
-//      goto LABEL_21;
-//    case 7:
-//      v10 = v2->field_34 == v4->field_34;
-//      goto LABEL_21;
-//    case 8:
-//      v11 = v2->field_2C;
-//      v14 = __OFSUB__(v11, v4->field_2C);
-//      v12 = v11 == v4->field_2C;
-//      v13 = v11 - v4->field_2C < 0;
-//      goto LABEL_24;
-//    case 9:
-//      v15 = v2->field_30;
-//      v14 = __OFSUB__(v15, v4->field_30);
-//      v12 = v15 == v4->field_30;
-//      v13 = v15 - v4->field_30 < 0;
-//      goto LABEL_24;
-//    case 10:
-//      v16 = v2->field_34;
-//      v14 = __OFSUB__(v16, v4->field_34);
-//      v12 = v16 == v4->field_34;
-//      v13 = v16 - v4->field_34 < 0;
-//      goto LABEL_24;
-//    case 11:
-//      v10 = v2->field_28 == 0;
-//      goto LABEL_21;
-//    case 12:
-//      v17 = v2->field_28 == 0;
-//      goto LABEL_15;
-//    case 13:
-//      v10 = v4->field_28 == 0;
-//      goto LABEL_21;
-//    case 14:
-//      v17 = v4->field_28 == 0;
-//LABEL_15:
-//      v18 = !v17;
-//      goto LABEL_25;
-//    case 15:
-//      v19 = v2->field_28;
-//      v7 = __OFSUB__(v19, v4->field_28);
-//      v6 = v19 - v4->field_28 < 0;
-//      goto LABEL_18;
-//    case 16:
-//      v20 = v2->field_24;
-//      v7 = __OFSUB__(v20, v4->field_24);
-//      v6 = v20 - v4->field_24 < 0;
-//LABEL_18:
-//      v18 = v6 ^ v7;
-//      goto LABEL_25;
-//    case 17:
-//      v10 = v2->field_28 == v4->field_28;
-//      goto LABEL_21;
-//    case 18:
-//      v10 = v2->field_24 == v4->field_24;
-//LABEL_21:
-//      v18 = v10;
-//      goto LABEL_25;
-//    case 19:
-//      v21 = v2->field_28;
-//      v14 = __OFSUB__(v21, v4->field_28);
-//      v12 = v21 == v4->field_28;
-//      v13 = v21 - v4->field_28 < 0;
-//      goto LABEL_24;
-//    case 20:
-//      v22 = v2->field_24;
-//      v14 = __OFSUB__(v22, v4->field_24);
-//      v12 = v22 == v4->field_24;
-//      v13 = v22 - v4->field_24 < 0;
-//LABEL_24:
-//      v18 = !((unsigned __int8)(v13 ^ v14) | v12);
-//LABEL_25:
-//      if ( v18 )
-//        goto LABEL_26;
-//      goto LABEL_231;
-//    default:
-//LABEL_26:
-//      v23 = BYTE1(pCard->field_30);
-//      v24 = v23 + (LOBYTE(pCard->field_30) == 1);
-//      v25 = 0;
-//      dword_4FAA68 = v23 + (LOBYTE(pCard->field_30) == 1);
-//      dword_4FAA64 = v23;
-//      if ( v23 > 0 )
-//      {
-//        do
-//        {
-//          am_40A283(v193, v24);
-//          ++v25;
-//        }
-//        while ( v25 < SBYTE1(pCard->field_30) );
-//      }
-//      v26 = pCard;
-//      am_byte_4FAA77 = GetPlayerHandCardCount(v193) > dword_4E1874;
-//      LOBYTE(v27) = BYTE2(pCard->field_30);
-//      if ( (_BYTE)v27 )
-//      {
-//        if ( (_BYTE)v27 == 99 )
-//        {
-//          v28 = v2->field_2C;
-//          v29 = v4->field_2C;
-//          if ( v28 < v29 )
-//          {
-//            v2->field_2C = v29;
-//            v194 = v29 - v28;
-//          }
-//        }
-//        else
-//        {
-//          v27 = (char)v27;
-//          v6 = (char)v27 + v2->field_2C < 0;
-//          v2->field_2C += (char)v27;
-//          if ( v6 )
-//            v2->field_2C = 0;
-//          v194 = v27;
-//        }
-//      }
-//      LOBYTE(v30) = BYTE3(v26->field_30);
-//      if ( (_BYTE)v30 )
-//      {
-//        if ( (_BYTE)v30 == 99 )
-//        {
-//          v31 = v2->field_30;
-//          v32 = v4->field_30;
-//          if ( v31 < v32 )
-//          {
-//            v2->field_30 = v32;
-//            v210 = v32 - v31;
-//          }
-//        }
-//        else
-//        {
-//          v30 = (char)v30;
-//          v6 = (char)v30 + v2->field_30 < 0;
-//          v2->field_30 += (char)v30;
-//          if ( v6 )
-//            v2->field_30 = 0;
-//          v210 = v30;
-//        }
-//      }
-//      LOBYTE(v33) = LOBYTE(v26->field_34);
-//      if ( (_BYTE)v33 )
-//      {
-//        if ( (_BYTE)v33 == 99 )
-//        {
-//          v34 = v2->field_34;
-//          v35 = v4->field_34;
-//          if ( v34 < v35 )
-//          {
-//            v2->field_34 = v35;
-//            v208 = v35 - v34;
-//          }
-//        }
-//        else
-//        {
-//          v33 = (char)v33;
-//          v6 = (char)v33 + v2->field_34 < 0;
-//          v2->field_34 += (char)v33;
-//          if ( v6 )
-//            v2->field_34 = 0;
-//          v208 = v33;
-//        }
-//      }
-//      LOBYTE(v36) = BYTE1(v26->field_34);
-//      if ( (_BYTE)v36 )
-//      {
-//        if ( (_BYTE)v36 == 99 )
-//        {
-//          v37 = v2->field_38;
-//          v38 = v4->field_38;
-//          if ( v37 < v38 )
-//          {
-//            v2->field_38 = v38;
-//            v197 = v38 - v37;
-//          }
-//        }
-//        else
-//        {
-//          v36 = (char)v36;
-//          v6 = (char)v36 + v2->field_38 < 0;
-//          v2->field_38 += (char)v36;
-//          if ( v6 )
-//            v2->field_38 = 0;
-//          v197 = v36;
-//        }
-//      }
-//      LOBYTE(v39) = BYTE2(v26->field_34);
-//      if ( v39 )
-//      {
-//        if ( v39 == 99 )
-//        {
-//          v40 = v2->field_3C;
-//          v41 = v4->field_3C;
-//          if ( v40 < v41 )
-//          {
-//            v2->field_3C = v41;
-//            v205 = v41 - v40;
-//          }
-//        }
-//        else
-//        {
-//          v39 = v39;
-//          v6 = v39 + v2->field_3C < 0;
-//          v2->field_3C += v39;
-//          if ( v6 )
-//            v2->field_3C = 0;
-//          v205 = v39;
-//        }
-//      }
-//      LOBYTE(v42) = BYTE3(v26->field_34);
-//      if ( (_BYTE)v42 )
-//      {
-//        if ( (_BYTE)v42 == 99 )
-//        {
-//          v43 = v2->field_40;
-//          v44 = v4->field_40;
-//          if ( v43 < v44 )
-//          {
-//            v2->field_40 = v44;
-//            v203 = v44 - v43;
-//          }
-//        }
-//        else
-//        {
-//          v42 = (char)v42;
-//          v6 = (char)v42 + v2->field_40 < 0;
-//          v2->field_40 += (char)v42;
-//          if ( v6 )
-//            v2->field_40 = 0;
-//          v203 = v42;
-//        }
-//      }
-//      v45 = v26->field_38[0];
-//      if ( v45 )
-//      {
-//        v196 = am_40D402(v193, v45);
-//        v192 = v26->field_38[0] - v196;
-//      }
-//      LOBYTE(v46) = v26->field_38[1];
-//      if ( (_BYTE)v46 )
-//      {
-//        if ( (_BYTE)v46 == 99 )
-//        {
-//          v47 = v2->field_28;
-//          v48 = v4->field_28;
-//          if ( v47 < v48 )
-//          {
-//            v2->field_28 = v48;
-//            v201 = v48 - v47;
-//          }
-//        }
-//        else
-//        {
-//          v46 = (char)v46;
-//          v6 = (char)v46 + v2->field_28 < 0;
-//          v2->field_28 += (char)v46;
-//          if ( v6 )
-//            v2->field_28 = 0;
-//          v201 = v46;
-//        }
-//      }
-//      LOBYTE(v49) = v26->field_38[2];
-//      if ( (_BYTE)v49 )
-//      {
-//        if ( (_BYTE)v49 == 99 )
-//        {
-//          v50 = v2->field_24;
-//          v51 = v4->field_24;
-//          if ( v50 < v51 )
-//          {
-//            v2->field_24 = v51;
-//            v199 = v51 - v50;
-//          }
-//        }
-//        else
-//        {
-//          v49 = (char)v49;
-//          v6 = (char)v49 + v2->field_24 < 0;
-//          v2->field_24 += (char)v49;
-//          if ( v6 )
-//            v2->field_24 = 0;
-//          v199 = v49;
-//        }
-//      }
-//      LOBYTE(v52) = v26->field_38[3];
-//      if ( (_BYTE)v52 )
-//      {
-//        if ( (_BYTE)v52 == 99 )
-//        {
-//          v53 = v2->field_2C;
-//          v54 = v4->field_2C;
-//          if ( v53 > v54 )
-//          {
-//            v4->field_2C = v53;
-//            v211 = v53 - v54;
-//          }
-//        }
-//        else
-//        {
-//          v52 = (char)v52;
-//          v6 = (char)v52 + v4->field_2C < 0;
-//          v4->field_2C += (char)v52;
-//          if ( v6 )
-//            v4->field_2C = 0;
-//          v211 = v52;
-//        }
-//      }
-//      LOBYTE(v55) = v26->field_38[4];
-//      if ( (_BYTE)v55 )
-//      {
-//        if ( (_BYTE)v55 == 99 )
-//        {
-//          v56 = v2->field_30;
-//          v57 = v4->field_30;
-//          if ( v56 > v57 )
-//          {
-//            v4->field_30 = v56;
-//            v209 = v56 - v57;
-//          }
-//        }
-//        else
-//        {
-//          v55 = (char)v55;
-//          v6 = (char)v55 + v4->field_30 < 0;
-//          v4->field_30 += (char)v55;
-//          if ( v6 )
-//            v4->field_30 = 0;
-//          v209 = v55;
-//        }
-//      }
-//      LOBYTE(v58) = v26->field_38[5];
-//      if ( (_BYTE)v58 )
-//      {
-//        if ( (_BYTE)v58 == 99 )
-//        {
-//          v59 = v2->field_34;
-//          v60 = v4->field_34;
-//          if ( v59 > v60 )
-//          {
-//            v4->field_34 = v59;
-//            v207 = v59 - v60;
-//          }
-//        }
-//        else
-//        {
-//          v58 = (char)v58;
-//          v6 = (char)v58 + v4->field_34 < 0;
-//          v4->field_34 += (char)v58;
-//          if ( v6 )
-//            v4->field_34 = 0;
-//          v207 = v58;
-//        }
-//      }
-//      LOBYTE(v61) = v26->field_38[6];
-//      if ( (_BYTE)v61 )
-//      {
-//        if ( (_BYTE)v61 == 99 )
-//        {
-//          v62 = v2->field_38;
-//          v63 = v4->field_38;
-//          if ( v62 > v63 )
-//          {
-//            v4->field_38 = v62;
-//            v206 = v62 - v63;
-//          }
-//        }
-//        else
-//        {
-//          v61 = (char)v61;
-//          v6 = (char)v61 + v4->field_38 < 0;
-//          v4->field_38 += (char)v61;
-//          if ( v6 )
-//            v4->field_38 = 0;
-//          v206 = v61;
-//        }
-//      }
-//      LOBYTE(v64) = v26->field_38[7];
-//      if ( (_BYTE)v64 )
-//      {
-//        if ( (_BYTE)v64 == 99 )
-//        {
-//          v65 = v2->field_3C;
-//          v66 = v4->field_3C;
-//          if ( v65 > v66 )
-//          {
-//            v4->field_3C = v65;
-//            v204 = v65 - v66;
-//          }
-//        }
-//        else
-//        {
-//          v64 = (char)v64;
-//          v6 = (char)v64 + v4->field_3C < 0;
-//          v4->field_3C += (char)v64;
-//          if ( v6 )
-//            v4->field_3C = 0;
-//          v204 = v64;
-//        }
-//      }
-//      LOBYTE(v67) = v26->field_38[8];
-//      if ( (_BYTE)v67 )
-//      {
-//        if ( (_BYTE)v67 == 99 )
-//        {
-//          v68 = v2->field_40;
-//          v69 = v4->field_40;
-//          if ( v68 > v69 )
-//          {
-//            v4->field_40 = v68;
-//            v202 = v68 - v69;
-//          }
-//        }
-//        else
-//        {
-//          v67 = (char)v67;
-//          v6 = (char)v67 + v4->field_40 < 0;
-//          v4->field_40 += (char)v67;
-//          if ( v6 )
-//            v4->field_40 = 0;
-//          v202 = v67;
-//        }
-//      }
-//      v70 = v26->field_38[9];
-//      if ( v70 )
-//      {
-//        v195 = am_40D402(v189, v70);
-//        v191 = v26->field_38[9] - v195;
-//      }
-//      LOBYTE(v71) = v26->field_38[10];
-//      if ( (_BYTE)v71 )
-//      {
-//        if ( (_BYTE)v71 == 99 )
-//        {
-//          v72 = v2->field_28;
-//          v73 = v4->field_28;
-//          if ( v72 > v73 )
-//          {
-//            v4->field_28 = v72;
-//            v200 = v72 - v73;
-//          }
-//        }
-//        else
-//        {
-//          v71 = (char)v71;
-//          v6 = (char)v71 + v4->field_28 < 0;
-//          v4->field_28 += (char)v71;
-//          if ( v6 )
-//            v4->field_28 = 0;
-//          v200 = v71;
-//        }
-//      }
-//      LOBYTE(v74) = v26->field_38[11];
-//      if ( (_BYTE)v74 )
-//      {
-//        if ( (_BYTE)v74 == 99 )
-//        {
-//          v75 = v2->field_24;
-//          v76 = v4->field_24;
-//          if ( v75 > v76 )
-//          {
-//            v4->field_24 = v75;
-//            v198 = v75 - v76;
-//          }
-//        }
-//        else
-//        {
-//          v74 = (char)v74;
-//          v6 = (char)v74 + v4->field_24 < 0;
-//          v4->field_24 += (char)v74;
-//          if ( v6 )
-//            v4->field_24 = 0;
-//          v198 = v74;
-//        }
-//      }
-//      LOBYTE(v77) = v26->field_38[12];
-//      if ( (_BYTE)v77 )
-//      {
-//        if ( (_BYTE)v77 == 99 )
-//        {
-//          v78 = v2->field_2C;
-//          v79 = v4->field_2C;
-//          if ( v78 != v79 )
-//          {
-//            if ( v78 <= v79 )
-//            {
-//              v2->field_2C = v79;
-//              v194 = v79 - v78;
-//            }
-//            else
-//            {
-//              v4->field_2C = v78;
-//              v211 = v78 - v79;
-//            }
-//          }
-//        }
-//        else
-//        {
-//          v77 = (char)v77;
-//          v2->field_2C += (char)v77;
-//          v4->field_2C += (char)v77;
-//          if ( v2->field_2C < 0 )
-//            v2->field_2C = 0;
-//          if ( v4->field_2C < 0 )
-//            v4->field_2C = 0;
-//          v194 = v77;
-//          v211 = v77;
-//        }
-//      }
-//      LOBYTE(v80) = v26->field_38[13];
-//      if ( (_BYTE)v80 )
-//      {
-//        if ( (_BYTE)v80 == 99 )
-//        {
-//          v81 = v2->field_30;
-//          v82 = v4->field_30;
-//          if ( v81 != v82 )
-//          {
-//            if ( v81 <= v82 )
-//            {
-//              v2->field_30 = v82;
-//              v210 = v82 - v81;
-//            }
-//            else
-//            {
-//              v4->field_30 = v81;
-//              v209 = v81 - v82;
-//            }
-//          }
-//        }
-//        else
-//        {
-//          v80 = (char)v80;
-//          v2->field_30 += (char)v80;
-//          v4->field_30 += (char)v80;
-//          if ( v2->field_30 < 0 )
-//            v2->field_30 = 0;
-//          if ( v4->field_30 < 0 )
-//            v4->field_30 = 0;
-//          v209 = v80;
-//          v210 = v80;
-//        }
-//      }
-//      LOBYTE(v83) = v26->field_38[14];
-//      if ( (_BYTE)v83 )
-//      {
-//        if ( (_BYTE)v83 == 99 )
-//        {
-//          v84 = v2->field_34;
-//          v85 = v4->field_34;
-//          if ( v84 != v85 )
-//          {
-//            if ( v84 <= v85 )
-//            {
-//              v2->field_34 = v85;
-//              v208 = v85 - v84;
-//            }
-//            else
-//            {
-//              v4->field_34 = v84;
-//              v207 = v84 - v85;
-//            }
-//          }
-//        }
-//        else
-//        {
-//          v83 = (char)v83;
-//          v2->field_34 += (char)v83;
-//          v4->field_34 += (char)v83;
-//          if ( v2->field_34 < 0 )
-//            v2->field_34 = 0;
-//          if ( v4->field_34 < 0 )
-//            v4->field_34 = 0;
-//          v208 = v83;
-//          v207 = v83;
-//        }
-//      }
-//      LOBYTE(v86) = v26->field_38[15];
-//      if ( (_BYTE)v86 )
-//      {
-//        if ( (_BYTE)v86 == 99 )
-//        {
-//          v87 = v2->field_38;
-//          v88 = v4->field_38;
-//          if ( v87 != v88 )
-//          {
-//            if ( v87 <= v88 )
-//            {
-//              v2->field_38 = v88;
-//              v197 = v88 - v87;
-//            }
-//            else
-//            {
-//              v4->field_38 = v87;
-//              v206 = v87 - v88;
-//            }
-//          }
-//        }
-//        else
-//        {
-//          v86 = (char)v86;
-//          v2->field_38 += (char)v86;
-//          v4->field_38 += (char)v86;
-//          if ( v2->field_38 < 0 )
-//            v2->field_38 = 0;
-//          if ( v4->field_38 < 0 )
-//            v4->field_38 = 0;
-//          v197 = v86;
-//          v206 = v86;
-//        }
-//      }
-//      LOBYTE(v89) = v26->field_48[0];
-//      if ( v89 )
-//      {
-//        if ( v89 == 99 )
-//        {
-//          v90 = v2->field_3C;
-//          v91 = v4->field_3C;
-//          if ( v90 != v91 )
-//          {
-//            if ( v90 <= v91 )
-//            {
-//              v205 = v91 > v90;
-//              v2->field_3C = v91;
-//            }
-//            else
-//            {
-//              v204 = 1;
-//              v4->field_3C = v90;
-//            }
-//          }
-//        }
-//        else
-//        {
-//          v89 = v89;
-//          v2->field_3C += v89;
-//          v4->field_3C += v89;
-//          if ( v2->field_3C < 0 )
-//            v2->field_3C = 0;
-//          if ( v4->field_3C < 0 )
-//            v4->field_3C = 0;
-//          v205 = v89;
-//          v204 = v89;
-//        }
-//      }
-//      LOBYTE(v92) = v26->field_48[1];
-//      if ( (_BYTE)v92 )
-//      {
-//        if ( (_BYTE)v92 == 99 )
-//        {
-//          v93 = v2->field_40;
-//          v94 = v4->field_40;
-//          if ( v93 != v94 )
-//          {
-//            if ( v93 <= v94 )
-//            {
-//              v2->field_40 = v94;
-//              v203 = v94 - v93;
-//            }
-//            else
-//            {
-//              v4->field_40 = v93;
-//              v202 = v93 - v94;
-//            }
-//          }
-//        }
-//        else
-//        {
-//          v92 = (char)v92;
-//          v2->field_40 += (char)v92;
-//          v4->field_40 += (char)v92;
-//          if ( v2->field_40 < 0 )
-//            v2->field_40 = 0;
-//          if ( v4->field_40 < 0 )
-//            v4->field_40 = 0;
-//          v203 = v92;
-//          v202 = v92;
-//        }
-//      }
-//      v95 = v26->field_48[2];
-//      if ( v95 )
-//      {
-//        v96 = am_40D402(v193, v95);
-//        v97 = v26->field_48[2];
-//        v196 = v96;
-//        v98 = am_40D402(v189, v97);
-//        v195 = v98;
-//        v99 = v26->field_48[2] - v98;
-//        v192 = v26->field_48[2] - v196;
-//        v191 = v99;
-//      }
-//      LOBYTE(v100) = v26->field_48[3];
-//      if ( (_BYTE)v100 )
-//      {
-//        if ( (_BYTE)v100 == 99 )
-//        {
-//          v101 = v2->field_28;
-//          v102 = v4->field_28;
-//          if ( v101 != v102 )
-//          {
-//            if ( v101 <= v102 )
-//            {
-//              v2->field_28 = v102;
-//              v201 = v102 - v101;
-//            }
-//            else
-//            {
-//              v4->field_28 = v101;
-//              v200 = v101 - v102;
-//            }
-//          }
-//        }
-//        else
-//        {
-//          v100 = (char)v100;
-//          v2->field_28 += (char)v100;
-//          v4->field_28 += (char)v100;
-//          if ( v2->field_28 < 0 )
-//            v2->field_28 = 0;
-//          if ( v4->field_28 < 0 )
-//            v4->field_28 = 0;
-//          v201 = v100;
-//          v200 = v100;
-//        }
-//      }
-//      LOBYTE(v103) = v26->field_48[4];
-//      break;
-//    case 0:
-//LABEL_231:
-//      v104 = pCard->field_48[6];
-//      v105 = v104 + (pCard->field_48[5] == 1);
-//      v106 = 0;
-//      dword_4FAA68 = v104 + (pCard->field_48[5] == 1);
-//      dword_4FAA64 = v104;
-//      if ( v104 > 0 )
-//      {
-//        do
-//        {
-//          am_40A283(v193, v105);
-//          ++v106;
-//        }
-//        while ( v106 < pCard->field_48[6] );
-//      }
-//      v107 = pCard;
-//      am_byte_4FAA77 = GetPlayerHandCardCount(v193) > dword_4E1874;
-//      LOBYTE(v108) = pCard->field_48[7];
-//      if ( (_BYTE)v108 )
-//      {
-//        if ( (_BYTE)v108 == 99 )
-//        {
-//          v109 = v2->field_2C;
-//          v110 = v4->field_2C;
-//          if ( v109 < v110 )
-//          {
-//            v2->field_2C = v110;
-//            v194 = v110 - v109;
-//          }
-//        }
-//        else
-//        {
-//          v108 = (char)v108;
-//          v6 = (char)v108 + v2->field_2C < 0;
-//          v2->field_2C += (char)v108;
-//          if ( v6 )
-//            v2->field_2C = 0;
-//          v194 = v108;
-//        }
-//      }
-//      LOBYTE(v111) = v107->field_48[8];
-//      if ( (_BYTE)v111 )
-//      {
-//        if ( (_BYTE)v111 == 99 )
-//        {
-//          v112 = v2->field_30;
-//          v113 = v4->field_30;
-//          if ( v112 < v113 )
-//          {
-//            v2->field_30 = v113;
-//            v210 = v113 - v112;
-//          }
-//        }
-//        else
-//        {
-//          v111 = (char)v111;
-//          v6 = (char)v111 + v2->field_30 < 0;
-//          v2->field_30 += (char)v111;
-//          if ( v6 )
-//            v2->field_30 = 0;
-//          v210 = v111;
-//        }
-//      }
-//      LOBYTE(v114) = v107->field_48[9];
-//      if ( (_BYTE)v114 )
-//      {
-//        if ( (_BYTE)v114 == 99 )
-//        {
-//          v115 = v2->field_34;
-//          v116 = v4->field_34;
-//          if ( v115 < v116 )
-//          {
-//            v2->field_34 = v116;
-//            v208 = v116 - v115;
-//          }
-//        }
-//        else
-//        {
-//          v114 = (char)v114;
-//          v6 = (char)v114 + v2->field_34 < 0;
-//          v2->field_34 += (char)v114;
-//          if ( v6 )
-//            v2->field_34 = 0;
-//          v208 = v114;
-//        }
-//      }
-//      LOBYTE(v117) = v107->field_48[10];
-//      if ( (_BYTE)v117 )
-//      {
-//        if ( (_BYTE)v117 == 99 )
-//        {
-//          v118 = v2->field_38;
-//          v119 = v4->field_38;
-//          if ( v118 < v119 )
-//          {
-//            v2->field_38 = v119;
-//            v197 = v119 - v118;
-//          }
-//        }
-//        else
-//        {
-//          v117 = (char)v117;
-//          v6 = (char)v117 + v2->field_38 < 0;
-//          v2->field_38 += (char)v117;
-//          if ( v6 )
-//            v2->field_38 = 0;
-//          v197 = v117;
-//        }
-//      }
-//      LOBYTE(v120) = v107->field_48[11];
-//      if ( v120 )
-//      {
-//        if ( v120 == 99 )
-//        {
-//          v121 = v2->field_3C;
-//          v122 = v4->field_3C;
-//          if ( v121 < v122 )
-//          {
-//            v2->field_3C = v122;
-//            v205 = v122 - v121;
-//          }
-//        }
-//        else
-//        {
-//          v120 = v120;
-//          v6 = v120 + v2->field_3C < 0;
-//          v2->field_3C += v120;
-//          if ( v6 )
-//            v2->field_3C = 0;
-//          v205 = v120;
-//        }
-//      }
-//      LOBYTE(v123) = v107->field_48[12];
-//      if ( (_BYTE)v123 )
-//      {
-//        if ( (_BYTE)v123 == 99 )
-//        {
-//          v124 = v2->field_40;
-//          v125 = v4->field_40;
-//          if ( v124 < v125 )
-//          {
-//            v2->field_40 = v125;
-//            v203 = v125 - v124;
-//          }
-//        }
-//        else
-//        {
-//          v123 = (char)v123;
-//          v6 = (char)v123 + v2->field_40 < 0;
-//          v2->field_40 += (char)v123;
-//          if ( v6 )
-//            v2->field_40 = 0;
-//          v203 = v123;
-//        }
-//      }
-//      v126 = v107->field_48[13];
-//      if ( v126 )
-//      {
-//        v196 = am_40D402(v193, v126);
-//        v192 = v107->field_48[13] - v196;
-//      }
-//      LOBYTE(v127) = v107->field_48[14];
-//      if ( (_BYTE)v127 )
-//      {
-//        if ( (_BYTE)v127 == 99 )
-//        {
-//          v128 = v2->field_28;
-//          v129 = v4->field_28;
-//          if ( v128 < v129 )
-//          {
-//            v2->field_28 = v129;
-//            v201 = v129 - v128;
-//          }
-//        }
-//        else
-//        {
-//          v127 = (char)v127;
-//          v6 = (char)v127 + v2->field_28 < 0;
-//          v2->field_28 += (char)v127;
-//          if ( v6 )
-//            v2->field_28 = 0;
-//          v201 = v127;
-//        }
-//      }
-//      LOBYTE(v130) = v107->field_48[15];
-//      if ( (_BYTE)v130 )
-//      {
-//        if ( (_BYTE)v130 == 99 )
-//        {
-//          v131 = v2->field_24;
-//          v132 = v4->field_24;
-//          if ( v131 < v132 )
-//          {
-//            v2->field_24 = v132;
-//            v199 = v132 - v131;
-//          }
-//        }
-//        else
-//        {
-//          v130 = (char)v130;
-//          v6 = (char)v130 + v2->field_24 < 0;
-//          v2->field_24 += (char)v130;
-//          if ( v6 )
-//            v2->field_24 = 0;
-//          v199 = v130;
-//        }
-//      }
-//      LOBYTE(v133) = v107->field_58[0];
-//      if ( (_BYTE)v133 )
-//      {
-//        if ( (_BYTE)v133 == 99 )
-//        {
-//          v134 = v2->field_2C;
-//          v135 = v4->field_2C;
-//          if ( v134 > v135 )
-//          {
-//            v4->field_2C = v134;
-//            v211 = v134 - v135;
-//          }
-//        }
-//        else
-//        {
-//          v133 = (char)v133;
-//          v6 = (char)v133 + v4->field_2C < 0;
-//          v4->field_2C += (char)v133;
-//          if ( v6 )
-//            v4->field_2C = 0;
-//          v211 = v133;
-//        }
-//      }
-//      LOBYTE(v136) = v107->field_58[1];
-//      if ( (_BYTE)v136 )
-//      {
-//        if ( (_BYTE)v136 == 99 )
-//        {
-//          v137 = v2->field_30;
-//          v138 = v4->field_30;
-//          if ( v137 > v138 )
-//          {
-//            v4->field_30 = v137;
-//            v209 = v137 - v138;
-//          }
-//        }
-//        else
-//        {
-//          v136 = (char)v136;
-//          v6 = (char)v136 + v4->field_30 < 0;
-//          v4->field_30 += (char)v136;
-//          if ( v6 )
-//            v4->field_30 = 0;
-//          v209 = v136;
-//        }
-//      }
-//      LOBYTE(v139) = v107->field_58[2];
-//      if ( (_BYTE)v139 )
-//      {
-//        if ( (_BYTE)v139 == 99 )
-//        {
-//          v140 = v2->field_34;
-//          v141 = v4->field_34;
-//          if ( v140 > v141 )
-//          {
-//            v4->field_34 = v140;
-//            v207 = v140 - v141;
-//          }
-//        }
-//        else
-//        {
-//          v139 = (char)v139;
-//          v6 = (char)v139 + v4->field_34 < 0;
-//          v4->field_34 += (char)v139;
-//          if ( v6 )
-//            v4->field_34 = 0;
-//          v207 = v139;
-//        }
-//      }
-//      LOBYTE(v142) = v107->field_58[3];
-//      if ( (_BYTE)v142 )
-//      {
-//        if ( (_BYTE)v142 == 99 )
-//        {
-//          v143 = v2->field_38;
-//          v144 = v4->field_38;
-//          if ( v143 > v144 )
-//          {
-//            v4->field_38 = v143;
-//            v206 = v143 - v144;
-//          }
-//        }
-//        else
-//        {
-//          v142 = (char)v142;
-//          v6 = (char)v142 + v4->field_38 < 0;
-//          v4->field_38 += (char)v142;
-//          if ( v6 )
-//            v4->field_38 = 0;
-//          v206 = v142;
-//        }
-//      }
-//      LOBYTE(v145) = v107->field_58[4];
-//      if ( (_BYTE)v145 )
-//      {
-//        if ( (_BYTE)v145 == 99 )
-//        {
-//          v146 = v2->field_3C;
-//          v147 = v4->field_3C;
-//          if ( v146 > v147 )
-//          {
-//            v4->field_3C = v146;
-//            v204 = v146 - v147;
-//          }
-//        }
-//        else
-//        {
-//          v145 = (char)v145;
-//          v6 = (char)v145 + v4->field_3C < 0;
-//          v4->field_3C += (char)v145;
-//          if ( v6 )
-//            v4->field_3C = 0;
-//          v204 = v145;
-//        }
-//      }
-//      LOBYTE(v148) = v107->field_58[5];
-//      if ( (_BYTE)v148 )
-//      {
-//        if ( (_BYTE)v148 == 99 )
-//        {
-//          v149 = v2->field_40;
-//          v150 = v4->field_40;
-//          if ( v149 > v150 )
-//          {
-//            v4->field_40 = v149;
-//            v202 = v149 - v150;
-//          }
-//        }
-//        else
-//        {
-//          v148 = (char)v148;
-//          v6 = (char)v148 + v4->field_40 < 0;
-//          v4->field_40 += (char)v148;
-//          if ( v6 )
-//            v4->field_40 = 0;
-//          v202 = v148;
-//        }
-//      }
-//      v151 = v107->field_58[6];
-//      if ( v151 )
-//      {
-//        v195 = am_40D402(v189, v151);
-//        v191 = v107->field_58[6] - v195;
-//      }
-//      LOBYTE(v152) = v107->field_58[7];
-//      if ( (_BYTE)v152 )
-//      {
-//        if ( (_BYTE)v152 == 99 )
-//        {
-//          v153 = v2->field_28;
-//          v154 = v4->field_28;
-//          if ( v153 > v154 )
-//          {
-//            v4->field_28 = v153;
-//            v200 = v153 - v154;
-//          }
-//        }
-//        else
-//        {
-//          v152 = (char)v152;
-//          v6 = (char)v152 + v4->field_28 < 0;
-//          v4->field_28 += (char)v152;
-//          if ( v6 )
-//            v4->field_28 = 0;
-//          v200 = v152;
-//        }
-//      }
-//      LOBYTE(v155) = v107->field_58[8];
-//      if ( (_BYTE)v155 )
-//      {
-//        if ( (_BYTE)v155 == 99 )
-//        {
-//          v156 = v2->field_24;
-//          v157 = v4->field_24;
-//          if ( v156 > v157 )
-//          {
-//            v4->field_24 = v156;
-//            v198 = v156 - v157;
-//          }
-//        }
-//        else
-//        {
-//          v155 = (char)v155;
-//          v6 = (char)v155 + v4->field_24 < 0;
-//          v4->field_24 += (char)v155;
-//          if ( v6 )
-//            v4->field_24 = 0;
-//          v198 = v155;
-//        }
-//      }
-//      LOBYTE(v158) = v107->field_58[9];
-//      if ( (_BYTE)v158 )
-//      {
-//        if ( (_BYTE)v158 == 99 )
-//        {
-//          v159 = v2->field_2C;
-//          v160 = v4->field_2C;
-//          if ( v159 != v160 )
-//          {
-//            if ( v159 <= v160 )
-//            {
-//              v2->field_2C = v160;
-//              v194 = v160 - v159;
-//            }
-//            else
-//            {
-//              v4->field_2C = v159;
-//              v211 = v159 - v160;
-//            }
-//          }
-//        }
-//        else
-//        {
-//          v158 = (char)v158;
-//          v2->field_2C += (char)v158;
-//          v4->field_2C += (char)v158;
-//          if ( v2->field_2C < 0 )
-//            v2->field_2C = 0;
-//          if ( v4->field_2C < 0 )
-//            v4->field_2C = 0;
-//          v194 = v158;
-//          v211 = v158;
-//        }
-//      }
-//      LOBYTE(v161) = v107->field_58[10];
-//      if ( (_BYTE)v161 )
-//      {
-//        if ( (_BYTE)v161 == 99 )
-//        {
-//          v162 = v2->field_30;
-//          v163 = v4->field_30;
-//          if ( v162 != v163 )
-//          {
-//            if ( v162 <= v163 )
-//            {
-//              v2->field_30 = v163;
-//              v210 = v163 - v162;
-//            }
-//            else
-//            {
-//              v4->field_30 = v162;
-//              v209 = v162 - v163;
-//            }
-//          }
-//        }
-//        else
-//        {
-//          v161 = (char)v161;
-//          v2->field_30 += (char)v161;
-//          v4->field_30 += (char)v161;
-//          if ( v2->field_30 < 0 )
-//            v2->field_30 = 0;
-//          if ( v4->field_30 < 0 )
-//            v4->field_30 = 0;
-//          v209 = v161;
-//          v210 = v161;
-//        }
-//      }
-//      LOBYTE(v164) = v107->field_58[11];
-//      if ( (_BYTE)v164 )
-//      {
-//        if ( (_BYTE)v164 == 99 )
-//        {
-//          v165 = v2->field_34;
-//          v166 = v4->field_34;
-//          if ( v165 != v166 )
-//          {
-//            if ( v165 <= v166 )
-//            {
-//              v2->field_34 = v166;
-//              v208 = v166 - v165;
-//            }
-//            else
-//            {
-//              v4->field_34 = v165;
-//              v207 = v165 - v166;
-//            }
-//          }
-//        }
-//        else
-//        {
-//          v164 = (char)v164;
-//          v2->field_34 += (char)v164;
-//          v4->field_34 += (char)v164;
-//          if ( v2->field_34 < 0 )
-//            v2->field_34 = 0;
-//          if ( v4->field_34 < 0 )
-//            v4->field_34 = 0;
-//          v208 = v164;
-//          v207 = v164;
-//        }
-//      }
-//      LOBYTE(v167) = v107->field_58[12];
-//      if ( (_BYTE)v167 )
-//      {
-//        if ( (_BYTE)v167 == 99 )
-//        {
-//          v168 = v2->field_38;
-//          v169 = v4->field_38;
-//          if ( v168 != v169 )
-//          {
-//            if ( v168 <= v169 )
-//            {
-//              v2->field_38 = v169;
-//              v197 = v169 - v168;
-//            }
-//            else
-//            {
-//              v4->field_38 = v168;
-//              v206 = v168 - v169;
-//            }
-//          }
-//        }
-//        else
-//        {
-//          v167 = (char)v167;
-//          v2->field_38 += (char)v167;
-//          v4->field_38 += (char)v167;
-//          if ( v2->field_38 < 0 )
-//            v2->field_38 = 0;
-//          if ( v4->field_38 < 0 )
-//            v4->field_38 = 0;
-//          v197 = v167;
-//          v206 = v167;
-//        }
-//      }
-//      LOBYTE(v170) = v107->field_58[13];
-//      if ( v170 )
-//      {
-//        if ( v170 == 99 )
-//        {
-//          v171 = v2->field_3C;
-//          v172 = v4->field_3C;
-//          if ( v171 != v172 )
-//          {
-//            if ( v171 <= v172 )
-//            {
-//              v205 = v172 > v171;
-//              v2->field_3C = v172;
-//            }
-//            else
-//            {
-//              v204 = 1;
-//              v4->field_3C = v171;
-//            }
-//          }
-//        }
-//        else
-//        {
-//          v170 = v170;
-//          v2->field_3C += v170;
-//          v4->field_3C += v170;
-//          if ( v2->field_3C < 0 )
-//            v2->field_3C = 0;
-//          if ( v4->field_3C < 0 )
-//            v4->field_3C = 0;
-//          v205 = v170;
-//          v204 = v170;
-//        }
-//      }
-//      LOBYTE(v173) = v107->field_58[14];
-//      if ( (_BYTE)v173 )
-//      {
-//        if ( (_BYTE)v173 == 99 )
-//        {
-//          v174 = v2->field_40;
-//          v175 = v4->field_40;
-//          if ( v174 != v175 )
-//          {
-//            if ( v174 <= v175 )
-//            {
-//              v2->field_40 = v175;
-//              v203 = v175 - v174;
-//            }
-//            else
-//            {
-//              v4->field_40 = v174;
-//              v202 = v174 - v175;
-//            }
-//          }
-//        }
-//        else
-//        {
-//          v173 = (char)v173;
-//          v2->field_40 += (char)v173;
-//          v4->field_40 += (char)v173;
-//          if ( v2->field_40 < 0 )
-//            v2->field_40 = 0;
-//          if ( v4->field_40 < 0 )
-//            v4->field_40 = 0;
-//          v203 = v173;
-//          v202 = v173;
-//        }
-//      }
-//      v176 = v107->field_58[15];
-//      if ( v176 )
-//      {
-//        v177 = am_40D402(v193, v176);
-//        v178 = v107->field_58[15];
-//        v196 = v177;
-//        v179 = am_40D402(v189, v178);
-//        v195 = v179;
-//        v180 = v107->field_58[15] - v179;
-//        v192 = v107->field_58[15] - v196;
-//        v191 = v180;
-//      }
-//      LOBYTE(v181) = LOBYTE(v107->field_68);
-//      if ( (_BYTE)v181 )
-//      {
-//        if ( (_BYTE)v181 == 99 )
-//        {
-//          v182 = v2->field_28;
-//          v183 = v4->field_28;
-//          if ( v182 != v183 )
-//          {
-//            if ( v182 <= v183 )
-//            {
-//              v2->field_28 = v183;
-//              v201 = v183 - v182;
-//            }
-//            else
-//            {
-//              v4->field_28 = v182;
-//              v200 = v182 - v183;
-//            }
-//          }
-//        }
-//        else
-//        {
-//          v181 = (char)v181;
-//          v2->field_28 += (char)v181;
-//          v4->field_28 += (char)v181;
-//          if ( v2->field_28 < 0 )
-//            v2->field_28 = 0;
-//          if ( v4->field_28 < 0 )
-//            v4->field_28 = 0;
-//          v201 = v181;
-//          v200 = v181;
-//        }
-//      }
-//      LOBYTE(v103) = BYTE1(v107->field_68);
-//      break;
-//  }
-//  if ( (_BYTE)v103 )
-//  {
-//    if ( (_BYTE)v103 == 99 )
-//    {
-//      v184 = v2->field_24;
-//      v185 = v4->field_24;
-//      if ( v184 != v185 )
-//      {
-//        if ( v184 <= v185 )
-//        {
-//          v2->field_24 = v185;
-//          v199 = v185 - v184;
-//        }
-//        else
-//        {
-//          v4->field_24 = v184;
-//          v198 = v184 - v185;
-//        }
-//      }
-//    }
-//    else
-//    {
-//      v103 = (char)v103;
-//      v2->field_24 += (char)v103;
-//      v4->field_24 += (char)v103;
-//      if ( v2->field_24 < 0 )
-//        v2->field_24 = 0;
-//      if ( v4->field_24 < 0 )
-//        v4->field_24 = 0;
-//      v199 = v103;
-//      v198 = v103;
-//    }
-//  }
-//  if ( v194 > 0 || v211 > 0 )
-//    ArcomageGame::PlaySound(0x1Eu);
-//  if ( v194 < 0 || v211 < 0 )
-//    ArcomageGame::PlaySound(0x1Fu);
-//  if ( v210 > 0 || v209 > 0 )
-//    ArcomageGame::PlaySound(0x21u);
-//  if ( v210 < 0 || v209 < 0 )
-//    ArcomageGame::PlaySound(0x22u);
-//  if ( v208 > 0 || v207 > 0 )
-//    ArcomageGame::PlaySound(0x24u);
-//  if ( v208 < 0 || v207 < 0 )
-//    ArcomageGame::PlaySound(0x25u);
-//  if ( v197 > 0 || v206 > 0 )
-//    ArcomageGame::PlaySound(0x27u);
-//  if ( v197 < 0 || v206 < 0 )
-//    ArcomageGame::PlaySound(0x28u);
-//  if ( v205 > 0 || v204 > 0 )
-//    ArcomageGame::PlaySound(0x2Au);
-//  if ( v205 < 0 || v204 < 0 )
-//    ArcomageGame::PlaySound(0x2Bu);
-//  if ( v203 > 0 || v202 > 0 )
-//    ArcomageGame::PlaySound(0x2Du);
-//  if ( v203 < 0 || v202 < 0 )
-//    ArcomageGame::PlaySound(0x2Eu);
-//  if ( v192 || v191 || v196 || v195 )
-//    ArcomageGame::PlaySound(0x30u);
-//  if ( v201 > 0 || v200 > 0 )
-//    ArcomageGame::PlaySound(0x31u);
-//  if ( v201 < 0 || v200 < 0 )
-//    ArcomageGame::PlaySound(0x32u);
-//  if ( v199 > 0 || v198 > 0 )
-//    ArcomageGame::PlaySound(0x34u);
-//  if ( v199 < 0 || v198 < 0 )
-//    ArcomageGame::PlaySound(0x35u);
-//  if ( v193 )
-//  {
-//    if ( v194 )
-//    {
-//      v187.x = 573;
-//      v187.y = 92;
-//      am_40D2B4(&v187, v194);
-//    }
-//    if ( v211 )
-//    {
-//      v187.x = 26;
-//      v187.y = 92;
-//      am_40D2B4(&v187, v211);
-//    }
-//    if ( v210 )
-//    {
-//      v187.x = 573;
-//      v187.y = 164;
-//      am_40D2B4(&v187, v210);
-//    }
-//    if ( v209 )
-//    {
-//      v187.x = 26;
-//      v187.y = 164;
-//      am_40D2B4(&v187, v209);
-//    }
-//    if ( v208 )
-//    {
-//      v187.x = 573;
-//      v187.y = 236;
-//      am_40D2B4(&v187, v208);
-//    }
-//    if ( v207 )
-//    {
-//      v187.x = 26;
-//      v187.y = 236;
-//      am_40D2B4(&v187, v207);
-//    }
-//    if ( v197 )
-//    {
-//      v187.x = 563;
-//      v187.y = 114;
-//      am_40D2B4(&v187, v197);
-//    }
-//    if ( v206 )
-//    {
-//      v187.x = 16;
-//      v187.y = 114;
-//      am_40D2B4(&v187, v206);
-//    }
-//    if ( v205 )
-//    {
-//      v187.x = 563;
-//      v187.y = 186;
-//      am_40D2B4(&v187, v205);
-//    }
-//    if ( v204 )
-//    {
-//      v187.x = 16;
-//      v187.y = 186;
-//      am_40D2B4(&v187, v204);
-//    }
-//    if ( v203 )
-//    {
-//      v187.x = 563;
-//      v187.y = 258;
-//      am_40D2B4(&v187, v203);
-//    }
-//    if ( v202 )
-//    {
-//      v187.x = 16;
-//      v187.y = 258;
-//      am_40D2B4(&v187, v202);
-//    }
-//    v186 = 296;
-//    if ( v201 )
-//    {
-//      v187.x = 442;
-//      v187.y = 296;
-//      am_40D2B4(&v187, v201);
-//    }
-//    if ( v200 )
-//    {
-//      v187.x = 180;
-//      v187.y = 296;
-//      am_40D2B4(&v187, v200);
-//    }
-//    if ( v199 )
-//    {
-//      v187.x = 514;
-//      v187.y = 296;
-//      am_40D2B4(&v187, v199);
-//    }
-//    if ( v198 )
-//    {
-//      v187.x = 122;
-//      v187.y = 296;
-//      am_40D2B4(&v187, v198);
-//    }
-//    if ( v196 )
-//    {
-//      v187.x = 442;
-//      v187.y = 296;
-//      am_40D2B4(&v187, v196);
-//    }
-//    if ( v192 )
-//    {
-//      v187.x = 514;
-//      v187.y = 296;
-//      am_40D2B4(&v187, v192);
-//    }
-//    if ( v195 )
-//    {
-//      v187.x = 180;
-//      v187.y = 296;
-//      am_40D2B4(&v187, v195);
-//    }
-//    if ( v191 )
-//    {
-//      v187.x = 122;
-//      goto LABEL_567;
-//    }
-//  }
-//  else
-//  {
-//    if ( v194 )
-//    {
-//      v187.x = 26;
-//      v187.y = 92;
-//      am_40D2B4(&v187, v194);
-//    }
-//    if ( v211 )
-//    {
-//      v187.x = 573;
-//      v187.y = 92;
-//      am_40D2B4(&v187, v211);
-//    }
-//    if ( v210 )
-//    {
-//      v187.x = 26;
-//      v187.y = 164;
-//      am_40D2B4(&v187, v210);
-//    }
-//    if ( v209 )
-//    {
-//      v187.x = 573;
-//      v187.y = 164;
-//      am_40D2B4(&v187, v209);
-//    }
-//    if ( v208 )
-//    {
-//      v187.x = 26;
-//      v187.y = 236;
-//      am_40D2B4(&v187, v208);
-//    }
-//    if ( v207 )
-//    {
-//      v187.x = 573;
-//      v187.y = 236;
-//      am_40D2B4(&v187, v207);
-//    }
-//    if ( v197 )
-//    {
-//      v187.x = 16;
-//      v187.y = 114;
-//      am_40D2B4(&v187, v197);
-//    }
-//    if ( v206 )
-//    {
-//      v187.x = 563;
-//      v187.y = 114;
-//      am_40D2B4(&v187, v206);
-//    }
-//    if ( v205 )
-//    {
-//      v187.x = 16;
-//      v187.y = 186;
-//      am_40D2B4(&v187, v205);
-//    }
-//    if ( v204 )
-//    {
-//      v187.x = 563;
-//      v187.y = 186;
-//      am_40D2B4(&v187, v204);
-//    }
-//    if ( v203 )
-//    {
-//      v187.x = 16;
-//      v187.y = 258;
-//      am_40D2B4(&v187, v203);
-//    }
-//    if ( v202 )
-//    {
-//      v187.x = 563;
-//      v187.y = 258;
-//      am_40D2B4(&v187, v202);
-//    }
-//    v186 = 296;
-//    if ( v201 )
-//    {
-//      v187.x = 180;
-//      v187.y = 296;
-//      am_40D2B4(&v187, v201);
-//    }
-//    if ( v200 )
-//    {
-//      v187.x = 442;
-//      v187.y = 296;
-//      am_40D2B4(&v187, v200);
-//    }
-//    if ( v199 )
-//    {
-//      v187.x = 122;
-//      v187.y = 296;
-//      am_40D2B4(&v187, v199);
-//    }
-//    if ( v198 )
-//    {
-//      v187.x = 514;
-//      v187.y = 296;
-//      am_40D2B4(&v187, v198);
-//    }
-//    if ( v196 )
-//    {
-//      v187.x = 180;
-//      v187.y = 296;
-//      am_40D2B4(&v187, v196);
-//    }
-//    if ( v192 )
-//    {
-//      v187.x = 122;
-//      v187.y = 296;
-//      am_40D2B4(&v187, v192);
-//    }
-//    if ( v195 )
-//    {
-//      v187.x = 442;
-//      v187.y = 296;
-//      am_40D2B4(&v187, v195);
-//    }
-//    if ( v191 )
-//    {
-//      v187.x = 514;
-//LABEL_567:
-//      v187.y = v186;
-//      am_40D2B4(&v187, v191);
-//      return;
-//    }
-//  }
+
+  
+#define APPLY_TO_PLAYER( PLAYER, ENEMY,FIELD, VAL, RES )\
+   if (VAL != 0) {\
+        if (VAL == 99) {\
+          if ( PLAYER->##FIELD < ENEMY->##FIELD ) {\
+            PLAYER->##FIELD = ENEMY->##FIELD;\
+            RES = ENEMY->##FIELD - PLAYER->##FIELD;\
+          }\
+        } else {\
+        PLAYER->##FIELD += (signed int)(VAL);\
+        if ( PLAYER->##FIELD<0 ) PLAYER->##FIELD= 0;\
+        RES = (signed int)(VAL);\
+        }\
+   }
+
+#define APPLY_TO_ENEMY( PLAYER, ENEMY,FIELD, VAL, RES ) APPLY_TO_PLAYER(ENEMY, PLAYER, FIELD, VAL, RES)
+
+#define APPLY_TO_BOTH( PLAYER, ENEMY, FIELD, VAL, RES_P, RES_E ) \
+       if ( VAL != 0) {\
+          if ( VAL == 99 )  { \
+            if ( PLAYER->##FIELD != ENEMY->##FIELD )  { \
+                if ( PLAYER->##FIELD <= ENEMY->##FIELD )  { \
+                    PLAYER->##FIELD = ENEMY->##FIELD; \
+                    RES_P = ENEMY->##FIELD - PLAYER->##FIELD; \
+                }  else { \
+                    ENEMY->##FIELD = PLAYER->##FIELD; \
+                    RES_E = PLAYER->##FIELD - ENEMY->##FIELD; \
+                    } \
+                }\
+            }  else { \
+            PLAYER->##FIELD += (signed int)(VAL);\
+            ENEMY->##FIELD  += (signed int)(VAL); if (PLAYER->##FIELD < 0 ) {PLAYER->##FIELD = 0;} \
+            if ( ENEMY->##FIELD < 0 ) {ENEMY->##FIELD = 0;} \
+            RES_P = (signed int)(VAL);  RES_E = (signed int)(VAL); \
+            }\
+       }
+        ArcomagePlayer *player; // esi@1
+        int v3; // eax@1
+        ArcomagePlayer *enemy; // edi@1
+        int v5; // eax@2
+        char v6; // sf@2
+        unsigned __int8 v7; // of@2
+        int v8; // eax@3
+        int v9; // eax@4
+        char v10; // zf@5
+        int v11; // eax@8
+        unsigned __int8 v12; // zf@8
+        char v13; // sf@8
+        unsigned __int8 v14; // of@8
+        int v15; // eax@9
+        int v16; // eax@10
+        char v17; // zf@12
+        char v18; // al@15
+        int v19; // eax@16
+        int v20; // eax@17
+        int v21; // eax@22
+        int v22; // eax@23
+        int v23; // eax@26
+        signed int v24; // ebx@26
+        int v103;
+        int v104;
+
+        POINT v184; // [sp+Ch] [bp-64h]@488
+        int enemy_num; // [sp+14h] [bp-5Ch]@1
+        ArcomageCard *pCard; // [sp+18h] [bp-58h]@1
+        int buildings_e; // [sp+1Ch] [bp-54h]@1
+        int buildings_p; // [sp+20h] [bp-50h]@1
+        int quarry_p; // [sp+28h] [bp-48h]@1
+        int dmg_e; // [sp+2Ch] [bp-44h]@1
+        int dmg_p; // [sp+30h] [bp-40h]@1
+        int bricks_p; // [sp+34h] [bp-3Ch]@1
+        int tower_e; // [sp+38h] [bp-38h]@1
+        int tower_p; // [sp+3Ch] [bp-34h]@1
+        int wall_e; // [sp+40h] [bp-30h]@1
+        int wall_p; // [sp+44h] [bp-2Ch]@1
+        int beasts_e; // [sp+48h] [bp-28h]@1
+        int beasts_p; // [sp+4Ch] [bp-24h]@1
+        int gems_e; // [sp+50h] [bp-20h]@1
+        int gems_p; // [sp+54h] [bp-1Ch]@1
+        int bricks_e; // [sp+58h] [bp-18h]@1
+        int zoo_e; // [sp+5Ch] [bp-14h]@1
+        int zoo_p; // [sp+60h] [bp-10h]@1
+        int magic_e; // [sp+64h] [bp-Ch]@1
+        int magic_p; // [sp+68h] [bp-8h]@1
+        int quarry_e; // [sp+6Ch] [bp-4h]@1
+
+        quarry_p  = 0;
+        magic_p   = 0;
+        zoo_p     = 0;
+        bricks_p  = 0;
+        gems_p    = 0;
+        beasts_p  = 0;
+        wall_p    = 0;
+        tower_p   = 0;
+        buildings_p = 0;
+        dmg_p     = 0;
+        quarry_e  = 0;
+        magic_e   = 0;
+        zoo_e     = 0;
+        bricks_e  = 0;
+        gems_e    = 0;
+        beasts_e  = 0;
+        wall_e    = 0;
+        tower_e   = 0;
+        buildings_e = 0;
+        dmg_e      = 0;
+
+        player = &am_Players[player_num];
+        pCard = &pCards[uCardID];
+        enemy_num = (player_num + 1) % 2;
+        enemy = &am_Players[enemy_num];
+        switch ( pCard->compare_param )
+            {
+        case 2:
+            v5 = player->quarry_level;
+            v7 = __OFSUB__(v5, enemy->quarry_level);
+            v6 = v5 - enemy->quarry_level < 0;
+            goto LABEL_18;
+        case 3:
+            v8 = player->magic_level;
+            v7 = __OFSUB__(v8, enemy->magic_level);
+            v6 = v8 - enemy->magic_level < 0;
+            goto LABEL_18;
+        case 4:
+            v9 = player->zoo_level;
+            v7 = __OFSUB__(v9, enemy->zoo_level);
+            v6 = v9 - enemy->zoo_level < 0;
+            goto LABEL_18;
+        case 5:
+            v10 = player->quarry_level == enemy->quarry_level;
+            goto LABEL_21;
+        case 6:
+            v10 = player->magic_level == enemy->magic_level;
+            goto LABEL_21;
+        case 7:
+            v10 = player->zoo_level == enemy->zoo_level;
+            goto LABEL_21;
+        case 8:
+            v11 = player->quarry_level;
+            v14 = __OFSUB__(v11, enemy->quarry_level);
+            v12 = v11 == enemy->quarry_level;
+            v13 = v11 - enemy->quarry_level < 0;
+            goto LABEL_24;
+        case 9:
+            v15 = player->magic_level;
+            v14 = __OFSUB__(v15, enemy->magic_level);
+            v12 = v15 == enemy->magic_level;
+            v13 = v15 - enemy->magic_level < 0;
+            goto LABEL_24;
+        case 10:
+            v16 = player->zoo_level;
+            v14 = __OFSUB__(v16, enemy->zoo_level);
+            v12 = v16 == enemy->zoo_level;
+            v13 = v16 - enemy->zoo_level < 0;
+            goto LABEL_24;
+        case 11:
+            v10 = player->wall_height == 0;
+            goto LABEL_21;
+        case 12:
+            v17 = player->wall_height == 0;
+            goto LABEL_15;
+        case 13:
+            v10 = enemy->wall_height == 0;
+            goto LABEL_21;
+        case 14:
+            v17 = enemy->wall_height == 0;
+LABEL_15:
+            v18 = !v17;
+            goto LABEL_25;
+        case 15:
+            v19 = player->wall_height;
+            v7 = __OFSUB__(v19, enemy->wall_height);
+            v6 = v19 - enemy->wall_height < 0;
+            goto LABEL_18;
+        case 16:
+            v20 = player->tower_height;
+            v7 = __OFSUB__(v20, enemy->tower_height);
+            v6 = v20 - enemy->tower_height < 0;
+LABEL_18:
+            v18 = v6 ^ v7;
+            goto LABEL_25;
+        case 17:
+            v10 = player->wall_height == enemy->wall_height;
+            goto LABEL_21;
+        case 18:
+            v10 = player->tower_height == enemy->tower_height;
+LABEL_21:
+            v18 = v10;
+            goto LABEL_25;
+        case 19:
+            v21 = player->wall_height;
+            v14 = __OFSUB__(v21, enemy->wall_height);
+            v12 = v21 == enemy->wall_height;
+            v13 = v21 - enemy->wall_height < 0;
+            goto LABEL_24;
+        case 20:
+            v22 = player->tower_height;
+            v14 = __OFSUB__(v22, enemy->tower_height);
+            v12 = v22 == enemy->tower_height;
+            v13 = v22 - enemy->tower_height < 0;
+LABEL_24:
+            v18 = !((v13 ^ v14) | v12);
+LABEL_25:
+            if ( v18 )
+                goto LABEL_26;
+            goto LABEL_231;
+        default:
+LABEL_26:
+            v23 = pCard->can_draw_extra_card;
+            v24 = 0;
+            dword_4FAA68 = v23 + (pCard->field_30 == 1);
+            dword_4FAA64 = v23;
+            if ( v23 > 0 )
+                {
+                do
+                    {
+                    GetNextCardFromDeck(player_num);
+                    ++v24;
+                    }
+                    while ( v24 < pCard->can_draw_extra_card );
+                }
+
+            hand_full = GetPlayerHandCardCount(player_num) > minimum_cards_at_hand;
+
+
+            APPLY_TO_PLAYER(player, enemy, quarry_level,    pCard->to_player_quarry_lvl, quarry_p);
+            APPLY_TO_PLAYER(player, enemy, magic_level,     pCard->to_player_magic_lvl,  magic_p);
+            APPLY_TO_PLAYER(player, enemy, zoo_level,       pCard->to_player_zoo_lvl,    zoo_p);
+            APPLY_TO_PLAYER(player, enemy, resource_bricks, pCard->to_player_bricks,     bricks_p);
+            APPLY_TO_PLAYER(player, enemy, resource_gems,   pCard->to_player_gems,       gems_p);
+            APPLY_TO_PLAYER(player, enemy, resource_beasts, pCard->to_player_beasts,     beasts_p);
+            if ( pCard->to_player_buildings )
+                {
+                dmg_p = ApplyDamageToBuildings(player_num, (signed int)pCard->to_player_buildings);
+                buildings_p = (signed int)pCard->to_player_buildings - dmg_p;
+                }
+           APPLY_TO_PLAYER(player, enemy, wall_height,  pCard->to_player_wall, wall_p);
+           APPLY_TO_PLAYER(player, enemy, tower_height, pCard->to_player_tower, tower_p);
+
+           APPLY_TO_ENEMY(player, enemy, quarry_level,    pCard->to_enemy_quarry_lvl, quarry_e);
+           APPLY_TO_ENEMY(player, enemy, magic_level,     pCard->to_enemy_magic_lvl,  magic_e);
+           APPLY_TO_ENEMY(player, enemy, zoo_level,       pCard->to_enemy_zoo_lvl,    zoo_e);
+           APPLY_TO_ENEMY(player, enemy, resource_bricks, pCard->to_enemy_bricks,     bricks_e);
+           APPLY_TO_ENEMY(player, enemy, resource_gems,   pCard->to_enemy_gems,       gems_e);
+           APPLY_TO_ENEMY(player, enemy, resource_beasts, pCard->to_enemy_beasts,     beasts_e);
+            if ( pCard->to_enemy_buildings )
+                {
+                dmg_e = ApplyDamageToBuildings(enemy_num, (signed int)pCard->to_enemy_buildings);
+                buildings_e = (signed int)pCard->to_enemy_buildings - dmg_e;
+                }
+            APPLY_TO_ENEMY(player, enemy, wall_height,  pCard->to_enemy_wall,  wall_e);
+            APPLY_TO_ENEMY(player, enemy, tower_height, pCard->to_enemy_tower, tower_e);
+            
+            APPLY_TO_BOTH(player, enemy, quarry_level,    pCard->to_pl_enm_quarry_lvl, quarry_p, quarry_e);
+            APPLY_TO_BOTH(player, enemy, magic_level,     pCard->to_pl_enm_magic_lvl,  magic_p,  magic_e);
+            APPLY_TO_BOTH(player, enemy, zoo_level,       pCard->to_pl_enm_zoo_lvl,    zoo_p,    zoo_e);
+            APPLY_TO_BOTH(player, enemy, resource_bricks, pCard->to_pl_enm_bricks,     bricks_p, bricks_e);
+            APPLY_TO_BOTH(player, enemy, resource_gems,   pCard->to_pl_enm_gems,       gems_p,   gems_e);
+            APPLY_TO_BOTH(player, enemy, resource_beasts, pCard->to_pl_enm_beasts,     beasts_p, beasts_e);
+            if ( pCard->to_pl_enm_buildings )
+                {
+                dmg_p = ApplyDamageToBuildings(player_num, (signed int)pCard->to_pl_enm_buildings);
+                dmg_e = ApplyDamageToBuildings(enemy_num,  (signed int)pCard->to_pl_enm_buildings);
+                buildings_p = (signed int)pCard->to_pl_enm_buildings - dmg_p;
+                buildings_e = (signed int)pCard->to_pl_enm_buildings - dmg_e;
+                }
+            APPLY_TO_BOTH(player, enemy, wall_height, pCard->to_pl_enm_wall, wall_p, wall_e);
+            APPLY_TO_BOTH(player, enemy, tower_height, pCard->to_pl_enm_tower, tower_p, tower_e);
+            break;
+        case 0:
+LABEL_231:
+            v103 = pCard->can_draw_extra_card2;
+            v104 = 0;
+            dword_4FAA68 = v103 + (pCard->field_4D == 1);
+            dword_4FAA64 = v103;
+            if ( v103 > 0 )
+                {
+                do
+                    {
+                    GetNextCardFromDeck(player_num);
+                    ++v104;
+                    }
+                    while ( v104 < pCard->can_draw_extra_card2 );
+                }
+
+            hand_full = GetPlayerHandCardCount(player_num) > minimum_cards_at_hand;
+
+            APPLY_TO_PLAYER(player, enemy, quarry_level,    pCard->to_player_quarry_lvl2, quarry_p);
+            APPLY_TO_PLAYER(player, enemy, magic_level,     pCard->to_player_magic_lvl2,  magic_p);
+            APPLY_TO_PLAYER(player, enemy, zoo_level,       pCard->to_player_zoo_lvl2,    zoo_p);
+            APPLY_TO_PLAYER(player, enemy, resource_bricks, pCard->to_player_bricks2,     bricks_p);
+            APPLY_TO_PLAYER(player, enemy, resource_gems,   pCard->to_player_gems2,       gems_p);
+            APPLY_TO_PLAYER(player, enemy, resource_beasts, pCard->to_player_beasts2,     beasts_p);
+            if ( pCard->to_player_buildings2 )
+                {
+                dmg_p = ApplyDamageToBuildings(player_num, (signed int)pCard->to_player_buildings2);
+                buildings_p = (signed int)pCard->to_player_buildings2 - dmg_p;
+                }
+            APPLY_TO_PLAYER(player, enemy, wall_height,  pCard->to_player_wall2,  wall_p);
+            APPLY_TO_PLAYER(player, enemy, tower_height, pCard->to_player_tower2, tower_p);
+
+            APPLY_TO_ENEMY(player, enemy, quarry_level,    pCard->to_enemy_quarry_lvl2, quarry_e);
+            APPLY_TO_ENEMY(player, enemy, magic_level,     pCard->to_enemy_magic_lvl2,  magic_e);
+            APPLY_TO_ENEMY(player, enemy, zoo_level,       pCard->to_enemy_zoo_lvl2,    zoo_e);
+            APPLY_TO_ENEMY(player, enemy, resource_bricks, pCard->to_enemy_bricks2,     bricks_e);
+            APPLY_TO_ENEMY(player, enemy, resource_gems,   pCard->to_enemy_gems2,       gems_e);
+            APPLY_TO_ENEMY(player, enemy, resource_beasts, pCard->to_enemy_beasts2,     beasts_e);
+            if ( pCard->to_enemy_buildings2 )
+                {
+                dmg_e = ApplyDamageToBuildings(enemy_num, (signed int)pCard->to_enemy_buildings2);
+                buildings_e = (signed int)pCard->to_enemy_buildings2 - dmg_e;
+                }
+            APPLY_TO_ENEMY(player, enemy, wall_height,  pCard->to_enemy_wall2,  wall_e);
+            APPLY_TO_ENEMY(player, enemy, tower_height, pCard->to_enemy_tower2, tower_e);
+
+            APPLY_TO_BOTH(player, enemy, quarry_level,    pCard->to_pl_enm_quarry_lvl2, quarry_p, quarry_e);
+            APPLY_TO_BOTH(player, enemy, magic_level,     pCard->to_pl_enm_magic_lvl2,  magic_p,  magic_e);
+            APPLY_TO_BOTH(player, enemy, zoo_level,       pCard->to_pl_enm_zoo_lvl2,    zoo_p,    zoo_e);
+            APPLY_TO_BOTH(player, enemy, resource_bricks, pCard->to_pl_enm_bricks2,     bricks_p, bricks_e);
+            APPLY_TO_BOTH(player, enemy, resource_gems,   pCard->to_pl_enm_gems2,       gems_p,   gems_e);
+            APPLY_TO_BOTH(player, enemy, resource_beasts, pCard->to_pl_enm_beasts2,     beasts_p, beasts_e);
+
+            if ( pCard->to_pl_enm_buildings2 )
+                {
+                dmg_p = ApplyDamageToBuildings(player_num, (signed int)pCard->to_pl_enm_buildings2);
+                dmg_e = ApplyDamageToBuildings(enemy_num,  (signed int)pCard->to_pl_enm_buildings2);
+                buildings_p = (signed int)pCard->to_pl_enm_buildings2 - dmg_p;
+                buildings_e = (signed int)pCard->to_pl_enm_buildings2 - dmg_e;
+                }
+            APPLY_TO_BOTH(player, enemy, wall_height, pCard->to_pl_enm_wall2, wall_p, wall_e);
+            APPLY_TO_BOTH(player, enemy, tower_height, pCard->to_pl_enm_tower2, tower_p, tower_e);    
+            break;
+            }
+          //  }
+        if ( quarry_p > 0 || quarry_e > 0 )
+            pArcomageGame->PlaySound(30);
+        if ( quarry_p < 0 || quarry_e < 0 )
+            pArcomageGame->PlaySound(31);
+        if ( magic_p > 0 || magic_e > 0 )
+            pArcomageGame->PlaySound(33);
+        if ( magic_p < 0 || magic_e < 0 )
+            pArcomageGame->PlaySound(34);
+        if ( zoo_p > 0 || zoo_e > 0 )
+            pArcomageGame->PlaySound(36);
+        if ( zoo_p < 0 || zoo_e < 0 )
+            pArcomageGame->PlaySound(37);
+        if ( bricks_p > 0 || bricks_e > 0 )
+            pArcomageGame->PlaySound(39);
+        if ( bricks_p < 0 || bricks_e < 0 )
+            pArcomageGame->PlaySound(40);
+        if ( gems_p > 0 || gems_e > 0 )
+            pArcomageGame->PlaySound(42);
+        if ( gems_p < 0 || gems_e < 0 )
+            pArcomageGame->PlaySound(43);
+        if ( beasts_p > 0 || beasts_e > 0 )
+            pArcomageGame->PlaySound(45u);
+        if ( beasts_p < 0 || beasts_e < 0 )
+            pArcomageGame->PlaySound(46);
+        if ( buildings_p || buildings_e || dmg_p || dmg_e )
+            pArcomageGame->PlaySound(48);
+        if ( wall_p > 0 || wall_e > 0 )
+            pArcomageGame->PlaySound(49);
+        if ( wall_p < 0 || wall_e < 0 )
+            pArcomageGame->PlaySound(50);
+        if ( tower_p > 0 || tower_e > 0 )
+            pArcomageGame->PlaySound(52);
+        if ( tower_p < 0 || tower_e < 0 )
+            pArcomageGame->PlaySound(53);
+        if ( player_num )
+            {
+            if ( quarry_p )
+                {
+                v184.x = 573;
+                v184.y = 92;
+                am_40D2B4(&v184, quarry_p);
+                }
+            if ( quarry_e )
+                {
+                v184.x = 26;
+                v184.y = 92;
+                am_40D2B4(&v184, quarry_e);
+                }
+            if ( magic_p )
+                {
+                v184.x = 573;
+                v184.y = 164;
+                am_40D2B4(&v184, magic_p);
+                }
+            if ( magic_e )
+                {
+                v184.x = 26;
+                v184.y = 164;
+                am_40D2B4(&v184, magic_e);
+                }
+            if ( zoo_p )
+                {
+                v184.x = 573;
+                v184.y = 236;
+                am_40D2B4(&v184, zoo_p);
+                }
+            if ( zoo_e )
+                {
+                v184.x = 26;
+                v184.y = 236;
+                am_40D2B4(&v184, zoo_e);
+                }
+            if ( bricks_p )
+                {
+                v184.x = 563;
+                v184.y = 114;
+                am_40D2B4(&v184, bricks_p);
+                }
+            if ( bricks_e )
+                {
+                v184.x = 16;
+                v184.y = 114;
+                am_40D2B4(&v184, bricks_e);
+                }
+            if ( gems_p )
+                {
+                v184.x = 563;
+                v184.y = 186;
+                am_40D2B4(&v184, gems_p);
+                }
+            if ( gems_e )
+                {
+                v184.x = 16;
+                v184.y = 186;
+                am_40D2B4(&v184, gems_e);
+                }
+            if ( beasts_p )
+                {
+                v184.x = 563;
+                v184.y = 258;
+                am_40D2B4(&v184, beasts_p);
+                }
+            if ( beasts_e )
+                {
+                v184.x = 16;
+                v184.y = 258;
+                am_40D2B4(&v184, beasts_e);
+                }
+            if ( wall_p )
+                {
+                v184.x = 442;
+                v184.y = 296;
+                am_40D2B4(&v184, wall_p);
+                }
+            if ( wall_e )
+                {
+                v184.x = 180;
+                v184.y = 296;
+                am_40D2B4(&v184, wall_e);
+                }
+            if ( tower_p )
+                {
+                v184.x = 514;
+                v184.y = 296;
+                am_40D2B4(&v184, tower_p);
+                }
+            if ( tower_e )
+                {
+                v184.x = 122;
+                v184.y = 296;
+                am_40D2B4(&v184, tower_e);
+                }
+            if ( dmg_p )
+                {
+                v184.x = 442;
+                v184.y = 296;
+                am_40D2B4(&v184, dmg_p);
+                }
+            if ( buildings_p )
+                {
+                v184.x = 514;
+                v184.y = 296;
+                am_40D2B4(&v184, buildings_p);
+                }
+            if ( dmg_e )
+                {
+                v184.x = 180;
+                v184.y = 296;
+                am_40D2B4(&v184, dmg_e);
+                }
+            if ( buildings_e )
+                {
+                v184.x = 122;
+                v184.y = 296;
+                am_40D2B4(&v184, buildings_e);
+                }
+            }
+        else
+            {
+            if ( quarry_p )
+                {
+                v184.x = 26;
+                v184.y = 92;
+                am_40D2B4(&v184, quarry_p);
+                }
+            if ( quarry_e )
+                {
+                v184.x = 573;
+                v184.y = 92;
+                am_40D2B4(&v184, quarry_e);
+                }
+            if ( magic_p )
+                {
+                v184.x = 26;
+                v184.y = 164;
+                am_40D2B4(&v184, magic_p);
+                }
+            if ( magic_e )
+                {
+                v184.x = 573;
+                v184.y = 164;
+                am_40D2B4(&v184, magic_e);
+                }
+            if ( zoo_p )
+                {
+                v184.x = 26;
+                v184.y = 236;
+                am_40D2B4(&v184, zoo_p);
+                }
+            if ( zoo_e )
+                {
+                v184.x = 573;
+                v184.y = 236;
+                am_40D2B4(&v184, zoo_e);
+                }
+            if ( bricks_p )
+                {
+                v184.x = 16;
+                v184.y = 114;
+                am_40D2B4(&v184, bricks_p);
+                }
+            if ( bricks_e )
+                {
+                v184.x = 563;
+                v184.y = 114;
+                am_40D2B4(&v184, bricks_e);
+                }
+            if ( gems_p )
+                {
+                v184.x = 16;
+                v184.y = 186;
+                am_40D2B4(&v184, gems_p);
+                }
+            if ( gems_e )
+                {
+                v184.x = 563;
+                v184.y = 186;
+                am_40D2B4(&v184, gems_e);
+                }
+            if ( beasts_p )
+                {
+                v184.x = 16;
+                v184.y = 258;
+                am_40D2B4(&v184, beasts_p);
+                }
+            if ( beasts_e )
+                {
+                v184.x = 563;
+                v184.y = 258;
+                am_40D2B4(&v184, beasts_e);
+                }
+            if ( wall_p )
+                {
+                v184.x = 180;
+                v184.y = 296;
+                am_40D2B4(&v184, wall_p);
+                }
+            if ( wall_e )
+                {
+                v184.x = 442;
+                v184.y = 296;
+                am_40D2B4(&v184, wall_e);
+                }
+            if ( tower_p )
+                {
+                v184.x = 122;
+                v184.y = 296;
+                am_40D2B4(&v184, tower_p);
+                }
+            if ( tower_e )
+                {
+                v184.x = 514;
+                v184.y = 296;
+                am_40D2B4(&v184, tower_e);
+                }
+            if ( dmg_p )
+                {
+                v184.x = 180;
+                v184.y = 296;
+                am_40D2B4(&v184, dmg_p);
+                }
+            if ( buildings_p )
+                {
+                v184.x = 122;
+                v184.y = 296;
+                am_40D2B4(&v184, buildings_p);
+                }
+            if ( dmg_e )
+                {
+                v184.x = 442;
+                v184.y = 296;
+                am_40D2B4(&v184, dmg_e);
+                }
+            if ( buildings_e )
+                {
+                v184.x = 514;
+                v184.y = 296;
+                am_40D2B4(&v184, buildings_e);
+                }
+            }
+#undef APPLY_TO_BOTH
+#undef APPLY_TO_ENEMY        
+#undef APPLY_TO_PLAYER
+
 }
 
 
@@ -5382,7 +4052,7 @@
 
 
 //----- (0040D402) --------------------------------------------------------
-int am_40D402( int player_num, int damage )
+int ApplyDamageToBuildings( int player_num, int damage )
     {
   ArcomagePlayer *v2; // ecx@1
   int v3; // esi@1
@@ -5689,7 +4359,7 @@
 
 
   for (int i=0; i<10; ++i)
-     array_4FABD0[i].field_40->Ctor(array_4FABD0[i].field_40);
+     array_4FABD0[i].field_40->Ctor(&array_4FABD0[i].field_40);
   
   current_card_slot_index = -1;
   amuint_4FAA4C = -1;
@@ -5698,7 +4368,7 @@
   byte_4FAA2C = 0;
   byte_505880 = 0;
   dword_4FAA70 = 0;
-  am_byte_4FAA77 = 0;
+  hand_full = 0;
   SetStartGameData();
   InitalHandsFill();
   //nullsub_1();
--- a/Arcomage.h	Tue Jun 11 15:24:05 2013 +0200
+++ b/Arcomage.h	Tue Jun 11 15:26:53 2013 +0200
@@ -38,66 +38,66 @@
   char needed_bricks;
   char needed_gems;
   char needed_beasts;
-  char field_2B;
-  int  field_2C;
+  char attack_or_defence;
+  int  compare_param;
   char field_30;
-  char field_31;
-  char field_32;
-  char field_33;
-  char field_34;
-  char field_35;
-  char field_36;
-  char field_37;
-  char field_38;
-  char field_39;
-  char field_3A;
-  char field_3B;
-  char field_3C;
-  char field_3D;
-  char field_3E;
-  char field_3F;
-  char field_40;
-  char field_41;
-  char field_42;
-  char field_43;
-  char field_44;
-  char field_45;
-  char field_46;
-  char field_47;
-  char field_48;
-  char field_49;
-  char field_4A;
-  char field_4B;
-  char field_4C;
+  char can_draw_extra_card;
+  char to_player_quarry_lvl;
+  char to_player_magic_lvl;
+  char to_player_zoo_lvl;
+  char to_player_bricks;
+  char to_player_gems;
+  char to_player_beasts;
+  char to_player_buildings;
+  char to_player_wall;
+  char to_player_tower;
+  char to_enemy_quarry_lvl;
+  char to_enemy_magic_lvl;
+  char to_enemy_zoo_lvl;
+  char to_enemy_bricks;
+  char to_enemy_gems;
+  char to_enemy_beasts;
+  char to_enemy_buildings;
+  char to_enemy_wall;
+  char to_enemy_tower;
+  char to_pl_enm_quarry_lvl;
+  char to_pl_enm_magic_lvl;
+  char to_pl_enm_zoo_lvl;
+  char to_pl_enm_bricks;
+  char to_pl_enm_gems;
+  char to_pl_enm_beasts;
+  char to_pl_enm_buildings;
+  char to_pl_enm_wall;
+  char to_pl_enm_tower;
   char field_4D;
-  char field_4E;
-  char field_4F;
-  char field_50;
-  char field_51;
-  char field_52;
-  char field_53;
-  char field_54;
-  char field_55;
-  char field_56;
-  char field_57;
-  char field_58;
-  char field_59;
-  char field_5A;
-  char field_5B;
-  char field_5C;
-  char field_5D;
-  char field_5E;
-  char field_5F;
-  char field_60;
-  char field_61;
-  char field_62;
-  char field_63;
-  char field_64;
-  char field_65;
-  char field_66;
-  char field_67;
-  char field_68;
-  char field_69;
+  char can_draw_extra_card2;
+  char to_player_quarry_lvl2;
+  char to_player_magic_lvl2;
+  char to_player_zoo_lvl2;
+  char to_player_bricks2;
+  char to_player_gems2;
+  char to_player_beasts2;
+  char to_player_buildings2;
+  char to_player_wall2;
+  char to_player_tower2;
+  char to_enemy_quarry_lvl2;
+  char to_enemy_magic_lvl2;
+  char to_enemy_zoo_lvl2;
+  char to_enemy_bricks2;
+  char to_enemy_gems2;
+  char to_enemy_beasts2;
+  char to_enemy_buildings2;
+  char to_enemy_wall2;
+  char to_enemy_tower2;
+  char to_pl_enm_quarry_lvl2;
+  char to_pl_enm_magic_lvl2;
+  char to_pl_enm_zoo_lvl2;
+  char to_pl_enm_bricks2;
+  char to_pl_enm_gems2;
+  char to_pl_enm_beasts2;
+  char to_pl_enm_buildings2;
+  char to_pl_enm_wall2;
+  char to_pl_enm_tower2;         
   char field_6A;
   char field_6B;
 };
@@ -238,7 +238,7 @@
 #pragma pack(push, 1)
 struct stru272_stru0         // ARCOMAGE stuff
 {
-  static void Ctor(stru272_stru0 *a1);
+  static void Ctor(stru272_stru0 **a1);
   int Dtor();
   int _40E01A(stru272_stru2* a2);
   int Empty(char a2, char a3);
--- a/mm7_data.cpp	Tue Jun 11 15:24:05 2013 +0200
+++ b/mm7_data.cpp	Tue Jun 11 15:26:53 2013 +0200
@@ -908,8 +908,7 @@
 int amuint_4FAA4C; // weak
 
 
-int dword_4FAA64; // weak
-int dword_4FAA68; // weak
+
 
 int dword_4FAA70; // weak
 char byte_4FAA74; // weak
--- a/mm7_data.h	Tue Jun 11 15:24:05 2013 +0200
+++ b/mm7_data.h	Tue Jun 11 15:26:53 2013 +0200
@@ -543,9 +543,6 @@
 extern int amuint_4FAA4C; // weak
 
 
-extern int dword_4FAA64; // weak
-extern int dword_4FAA68; // weak
-
 extern int dword_4FAA70; // weak
 extern char byte_4FAA74; // weak
 extern char am_byte_4FAA75; // weak